@omnimedia/omnitool 1.1.0-42 → 1.1.0-44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +17 -18
- package/s/demo/demo.bundle.ts +20 -40
- package/s/demo/routines/export-test.ts +8 -0
- package/s/demo/routines/playback-test.ts +21 -0
- package/s/demo/routines/timeline-setup.ts +24 -0
- package/s/demo/routines/transcode-test.ts +2 -0
- package/s/driver/driver-worker.ts +9 -0
- package/s/driver/driver.test.ts +1 -1
- package/s/driver/driver.ts +8 -22
- package/s/driver/fns/schematic.ts +6 -2
- package/s/driver/fns/work.ts +2 -133
- package/s/driver/parts/compositor.ts +178 -0
- package/s/driver/parts/machina.ts +19 -20
- package/s/index.ts +1 -0
- package/s/timeline/index.ts +1 -1
- package/s/timeline/parts/media.ts +11 -2
- package/s/timeline/parts/{compositor → renderers}/parts/html-tree.ts +2 -2
- package/s/timeline/parts/{compositor → renderers}/parts/tree-builder.ts +4 -2
- package/s/timeline/parts/{compositor → renderers}/playback.ts +4 -13
- package/s/timeline/parts/{compositor → renderers}/samplers/html.ts +19 -5
- package/s/timeline/parts/{compositor → renderers}/samplers/webcodecs.ts +1 -1
- package/s/timeline/parts/resource-pool.ts +8 -4
- package/s/timeline/parts/resource.ts +1 -0
- package/s/timeline/sugar/o.ts +10 -2
- package/s/timeline/sugar/omni-test.ts +14 -14
- package/s/timeline/sugar/omni.ts +2 -2
- package/s/timeline/utils/datafile.ts +14 -4
- package/s/timeline/utils/dummy-data.ts +3 -3
- package/x/demo/WebGLRenderer-Q3OV2JVE.js +2 -0
- package/x/demo/WebGLRenderer-Q3OV2JVE.js.map +7 -0
- package/x/demo/WebGPURenderer-FUFF62QA.js +2 -0
- package/x/demo/WebGPURenderer-FUFF62QA.js.map +7 -0
- package/x/demo/browserAll-PGQYU756.js +2 -0
- package/x/demo/browserAll-PGQYU756.js.map +7 -0
- package/x/demo/chunk-2RBLPWNG.js +393 -0
- package/x/demo/chunk-2RBLPWNG.js.map +7 -0
- package/x/demo/chunk-6DBMQOFE.js +42 -0
- package/x/demo/chunk-6DBMQOFE.js.map +7 -0
- package/x/demo/chunk-LAJHJD2S.js +2 -0
- package/x/demo/chunk-LAJHJD2S.js.map +7 -0
- package/x/demo/chunk-LQU5JKKZ.js +269 -0
- package/x/demo/chunk-LQU5JKKZ.js.map +7 -0
- package/x/demo/chunk-RFNLITDQ.js +327 -0
- package/x/demo/chunk-RFNLITDQ.js.map +7 -0
- package/x/demo/chunk-TBWCKYN2.js +2 -0
- package/x/demo/chunk-TBWCKYN2.js.map +7 -0
- package/x/demo/chunk-TLDBHU4V.js +15 -0
- package/x/demo/chunk-TLDBHU4V.js.map +7 -0
- package/x/demo/chunk-X2GHKWPJ.js +157 -0
- package/x/demo/chunk-X2GHKWPJ.js.map +7 -0
- package/x/demo/demo.bundle.js +18 -27
- package/x/demo/demo.bundle.js.map +1 -1
- package/x/demo/demo.bundle.min.js +2378 -534
- package/x/demo/demo.bundle.min.js.map +4 -4
- package/x/demo/routines/export-test.d.ts +2 -0
- package/x/demo/routines/export-test.js +7 -0
- package/x/demo/routines/export-test.js.map +1 -0
- package/x/demo/routines/playback-test.d.ts +3 -0
- package/x/demo/routines/playback-test.js +17 -0
- package/x/demo/routines/playback-test.js.map +1 -0
- package/x/demo/routines/timeline-setup.d.ts +6 -0
- package/x/demo/routines/timeline-setup.js +13 -0
- package/x/demo/routines/timeline-setup.js.map +1 -0
- package/x/demo/routines/transcode-test.js +2 -0
- package/x/demo/routines/transcode-test.js.map +1 -1
- package/x/demo/webworkerAll-3YNCLHCR.js +2 -0
- package/x/demo/webworkerAll-3YNCLHCR.js.map +7 -0
- package/x/driver/WebGLRenderer-OMRWYQIV.js +2 -0
- package/x/driver/WebGLRenderer-OMRWYQIV.js.map +7 -0
- package/x/driver/WebGPURenderer-KQJB2OJJ.js +2 -0
- package/x/driver/WebGPURenderer-KQJB2OJJ.js.map +7 -0
- package/x/driver/browserAll-YBZEJCN3.js +2 -0
- package/x/driver/browserAll-YBZEJCN3.js.map +7 -0
- package/x/driver/chunk-3L3MB5NY.js +393 -0
- package/x/driver/chunk-3L3MB5NY.js.map +7 -0
- package/x/driver/chunk-42BQ4XKE.js +269 -0
- package/x/driver/chunk-42BQ4XKE.js.map +7 -0
- package/x/driver/chunk-4HAYG3N5.js +327 -0
- package/x/driver/chunk-4HAYG3N5.js.map +7 -0
- package/x/driver/chunk-BFBY7VYB.js +42 -0
- package/x/driver/chunk-BFBY7VYB.js.map +7 -0
- package/x/driver/chunk-KM6O72WE.js +157 -0
- package/x/driver/chunk-KM6O72WE.js.map +7 -0
- package/x/driver/chunk-N6HD4WYJ.js +2 -0
- package/x/driver/chunk-N6HD4WYJ.js.map +7 -0
- package/x/driver/chunk-WCZ2O3UN.js +15 -0
- package/x/driver/chunk-WCZ2O3UN.js.map +7 -0
- package/x/driver/chunk-XWNSF3WJ.js +2 -0
- package/x/driver/chunk-XWNSF3WJ.js.map +7 -0
- package/x/driver/driver-worker.d.ts +1 -0
- package/x/driver/driver-worker.js +6 -0
- package/x/driver/driver-worker.js.map +1 -0
- package/x/driver/driver.d.ts +5 -4
- package/x/driver/driver.js +10 -20
- package/x/driver/driver.js.map +1 -1
- package/x/driver/driver.test.js +1 -1
- package/x/driver/driver.test.js.map +1 -1
- package/x/driver/driver.worker.bundle.min.js +119 -3504
- package/x/driver/driver.worker.bundle.min.js.map +4 -4
- package/x/driver/fns/host.d.ts +1 -2
- package/x/driver/fns/schematic.d.ts +6 -1
- package/x/driver/fns/work.d.ts +2 -4
- package/x/driver/fns/work.js +1 -100
- package/x/driver/fns/work.js.map +1 -1
- package/x/driver/parts/compositor.d.ts +15 -0
- package/x/driver/parts/compositor.js +152 -0
- package/x/driver/parts/compositor.js.map +1 -0
- package/x/driver/parts/machina.d.ts +0 -20
- package/x/driver/parts/machina.js +6 -10
- package/x/driver/parts/machina.js.map +1 -1
- package/x/driver/webworkerAll-BKJQW6P7.js +2 -0
- package/x/driver/webworkerAll-BKJQW6P7.js.map +7 -0
- package/x/features/speech/transcribe/parts/prep-audio.d.ts +1 -1
- package/x/features/speech/transcribe/worker.bundle.min.js +899 -899
- package/x/features/speech/transcribe/worker.bundle.min.js.map +4 -4
- package/x/index.d.ts +1 -0
- package/x/index.html +2 -2
- package/x/index.js +1 -0
- package/x/index.js.map +1 -1
- package/x/timeline/index.d.ts +1 -1
- package/x/timeline/index.js +1 -1
- package/x/timeline/index.js.map +1 -1
- package/x/timeline/parts/filmstrip.d.ts +1 -1
- package/x/timeline/parts/media.d.ts +2 -0
- package/x/timeline/parts/media.js +10 -2
- package/x/timeline/parts/media.js.map +1 -1
- package/x/timeline/parts/renderers/export.js.map +1 -0
- package/x/timeline/parts/{compositor → renderers}/parts/html-tree.js +2 -2
- package/x/timeline/parts/renderers/parts/html-tree.js.map +1 -0
- package/x/timeline/parts/renderers/parts/schedulers.js.map +1 -0
- package/x/timeline/parts/{compositor → renderers}/parts/tree-builder.js +4 -2
- package/x/timeline/parts/renderers/parts/tree-builder.js.map +1 -0
- package/x/timeline/parts/renderers/parts/webcodecs-tree.js.map +1 -0
- package/x/timeline/parts/{compositor → renderers}/playback.d.ts +2 -4
- package/x/timeline/parts/{compositor → renderers}/playback.js +5 -14
- package/x/timeline/parts/renderers/playback.js.map +1 -0
- package/x/timeline/parts/{compositor → renderers}/samplers/html.js +14 -5
- package/x/timeline/parts/renderers/samplers/html.js.map +1 -0
- package/x/timeline/parts/{compositor → renderers}/samplers/webcodecs.js +1 -1
- package/x/timeline/parts/renderers/samplers/webcodecs.js.map +1 -0
- package/x/timeline/parts/resource-pool.d.ts +2 -0
- package/x/timeline/parts/resource-pool.js +7 -4
- package/x/timeline/parts/resource-pool.js.map +1 -1
- package/x/timeline/parts/resource.d.ts +1 -0
- package/x/timeline/sugar/o.d.ts +4 -1
- package/x/timeline/sugar/o.js +4 -2
- package/x/timeline/sugar/o.js.map +1 -1
- package/x/timeline/sugar/omni-test.js +14 -7
- package/x/timeline/sugar/omni-test.js.map +1 -1
- package/x/timeline/sugar/omni.d.ts +1 -2
- package/x/timeline/sugar/omni.js +2 -2
- package/x/timeline/sugar/omni.js.map +1 -1
- package/x/timeline/utils/datafile.d.ts +4 -3
- package/x/timeline/utils/datafile.js +16 -5
- package/x/timeline/utils/datafile.js.map +1 -1
- package/x/timeline/utils/dummy-data.d.ts +1 -2
- package/x/timeline/utils/dummy-data.js +4 -2
- package/x/timeline/utils/dummy-data.js.map +1 -1
- package/x/timeline/parts/compositor/export.js.map +0 -1
- package/x/timeline/parts/compositor/parts/html-tree.js.map +0 -1
- package/x/timeline/parts/compositor/parts/schedulers.js.map +0 -1
- package/x/timeline/parts/compositor/parts/tree-builder.js.map +0 -1
- package/x/timeline/parts/compositor/parts/webcodecs-tree.js.map +0 -1
- package/x/timeline/parts/compositor/playback.js.map +0 -1
- package/x/timeline/parts/compositor/samplers/html.js.map +0 -1
- package/x/timeline/parts/compositor/samplers/webcodecs.js.map +0 -1
- /package/s/timeline/parts/{compositor → renderers}/export.ts +0 -0
- /package/s/timeline/parts/{compositor → renderers}/parts/schedulers.ts +0 -0
- /package/s/timeline/parts/{compositor → renderers}/parts/webcodecs-tree.ts +0 -0
- /package/x/timeline/parts/{compositor → renderers}/export.d.ts +0 -0
- /package/x/timeline/parts/{compositor → renderers}/export.js +0 -0
- /package/x/timeline/parts/{compositor → renderers}/parts/html-tree.d.ts +0 -0
- /package/x/timeline/parts/{compositor → renderers}/parts/schedulers.d.ts +0 -0
- /package/x/timeline/parts/{compositor → renderers}/parts/schedulers.js +0 -0
- /package/x/timeline/parts/{compositor → renderers}/parts/tree-builder.d.ts +0 -0
- /package/x/timeline/parts/{compositor → renderers}/parts/webcodecs-tree.d.ts +0 -0
- /package/x/timeline/parts/{compositor → renderers}/parts/webcodecs-tree.js +0 -0
- /package/x/timeline/parts/{compositor → renderers}/samplers/html.d.ts +0 -0
- /package/x/timeline/parts/{compositor → renderers}/samplers/webcodecs.d.ts +0 -0
|
@@ -1,27 +1,26 @@
|
|
|
1
|
-
import {WebMediaInfo} from "web-demuxer"
|
|
2
1
|
|
|
3
|
-
type Events =
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
type Handler = (event: Events) => void
|
|
2
|
+
// type Events =
|
|
3
|
+
// | {type: "config", config: {audio: AudioDecoderConfig, video: VideoDecoderConfig}}
|
|
4
|
+
// | {type: "info", data: WebMediaInfo}
|
|
5
|
+
// | {type: "encoderQueueSize", size: number}
|
|
6
|
+
//
|
|
7
|
+
// type Handler = (event: Events) => void
|
|
9
8
|
|
|
10
9
|
export class Machina {
|
|
11
10
|
count = 0
|
|
12
11
|
|
|
13
|
-
#handlers = new Map<number, Handler>()
|
|
14
|
-
|
|
15
|
-
register(id: number, handler: Handler) {
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
unregister(id: number) {
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
dispatch(id: number, event: Events) {
|
|
24
|
-
|
|
25
|
-
}
|
|
12
|
+
// #handlers = new Map<number, Handler>()
|
|
13
|
+
//
|
|
14
|
+
// register(id: number, handler: Handler) {
|
|
15
|
+
// this.#handlers.set(id, handler)
|
|
16
|
+
// }
|
|
17
|
+
//
|
|
18
|
+
// unregister(id: number) {
|
|
19
|
+
// this.#handlers.delete(id)
|
|
20
|
+
// }
|
|
21
|
+
//
|
|
22
|
+
// dispatch(id: number, event: Events) {
|
|
23
|
+
// this.#handlers.get(id)?.(event)
|
|
24
|
+
// }
|
|
26
25
|
}
|
|
27
26
|
|
package/s/index.ts
CHANGED
package/s/timeline/index.ts
CHANGED
|
@@ -6,7 +6,7 @@ export * from "./parts/resource-pool.js"
|
|
|
6
6
|
export * from "./parts/resource.js"
|
|
7
7
|
export * from "./parts/filmstrip.js"
|
|
8
8
|
export * from "./parts/waveform.js"
|
|
9
|
-
export * from "./parts/
|
|
9
|
+
export * from "./parts/renderers/playback.js"
|
|
10
10
|
|
|
11
11
|
export * from "./sugar/o.js"
|
|
12
12
|
export * from "./sugar/omni.js"
|
|
@@ -14,13 +14,22 @@ export class Media {
|
|
|
14
14
|
|
|
15
15
|
static async analyze(datafile: Datafile) {
|
|
16
16
|
const media = new this(datafile)
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
const duration = await this.duration(datafile.url) * 1000
|
|
18
|
+
media.duration = duration
|
|
19
|
+
const {video, audio} = await this.#has(datafile.url)
|
|
19
20
|
media.hasAudio = audio
|
|
20
21
|
media.hasVideo = video
|
|
21
22
|
return media
|
|
22
23
|
}
|
|
23
24
|
|
|
25
|
+
static async duration(source: DecoderSource) {
|
|
26
|
+
const input = new Input({
|
|
27
|
+
formats: ALL_FORMATS,
|
|
28
|
+
source: await loadDecoderSource(source)
|
|
29
|
+
})
|
|
30
|
+
return input.computeDuration()
|
|
31
|
+
}
|
|
32
|
+
|
|
24
33
|
static async #has(source: DecoderSource) {
|
|
25
34
|
const input = new Input({
|
|
26
35
|
formats: ALL_FORMATS,
|
|
@@ -18,9 +18,9 @@ class HTMLNodeBuilder extends TreeBuilder<AudioPlaybackComponent> {
|
|
|
18
18
|
composeAudio_Sequence(children: Node<AudioPlaybackComponent>[]) {
|
|
19
19
|
return {
|
|
20
20
|
onTimeUpdate: (time: number) => {
|
|
21
|
-
let localTime = time
|
|
21
|
+
let localTime = Math.round(time)
|
|
22
22
|
for (const child of children) {
|
|
23
|
-
if (localTime
|
|
23
|
+
if (localTime <= child.duration) {
|
|
24
24
|
if (child.audio) child.audio.onTimeUpdate(localTime)
|
|
25
25
|
break
|
|
26
26
|
}
|
|
@@ -66,6 +66,7 @@ export abstract class TreeBuilder<T> {
|
|
|
66
66
|
if (t < 0 || t >= root.duration)
|
|
67
67
|
return []
|
|
68
68
|
else return [{
|
|
69
|
+
id: root.id,
|
|
69
70
|
kind: "text",
|
|
70
71
|
content: root.content,
|
|
71
72
|
style: styleItem?.style,
|
|
@@ -110,9 +111,9 @@ export abstract class TreeBuilder<T> {
|
|
|
110
111
|
#composeVisuals_Sequence(children: Node<T>[]): VisualComponent {
|
|
111
112
|
return {
|
|
112
113
|
sampleAt: async (time) => {
|
|
113
|
-
let localTime = time
|
|
114
|
+
let localTime = Math.round(time)
|
|
114
115
|
for (const child of children) {
|
|
115
|
-
if (localTime
|
|
116
|
+
if (localTime <= child.duration) return child.visuals ? child.visuals.sampleAt(localTime) : []
|
|
116
117
|
localTime -= child.duration
|
|
117
118
|
}
|
|
118
119
|
return []
|
|
@@ -183,6 +184,7 @@ export abstract class TreeBuilder<T> {
|
|
|
183
184
|
const to = await incomingNode.visuals.sampleAt(localTime) as ImageLayer[]
|
|
184
185
|
if(!from[0]?.frame || !to[0]?.frame) return []
|
|
185
186
|
return [{
|
|
187
|
+
id: transitionItem.id,
|
|
186
188
|
kind: "transition",
|
|
187
189
|
name: "circle",
|
|
188
190
|
progress,
|
|
@@ -22,24 +22,17 @@ export class VideoPlayer {
|
|
|
22
22
|
public canvas: HTMLCanvasElement,
|
|
23
23
|
private root: Node<AudioPlaybackComponent>,
|
|
24
24
|
private sampler: HTMLSampler,
|
|
25
|
-
private resolveMedia: ResolveMedia = _hash => "/assets/temp/gl.mp4"
|
|
26
25
|
) {
|
|
27
26
|
this.#controller.setFPS(30)
|
|
28
27
|
}
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
return this.canvas.getContext("2d")!
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
static async create(driver: Driver, timeline: TimelineFile) {
|
|
29
|
+
static async create(driver: Driver, timeline: TimelineFile, resolveMedia: ResolveMedia) {
|
|
35
30
|
const rootItem = new Map(timeline.items.map(i => [i.id, i])).get(timeline.rootId)!
|
|
36
31
|
const items = new Map(timeline.items.map(i => [i.id, i]))
|
|
37
|
-
const sampler = makeHtmlSampler(
|
|
32
|
+
const sampler = makeHtmlSampler(resolveMedia)
|
|
38
33
|
const root = await buildHTMLNodeTree(rootItem, items, sampler)
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
canvas.height = 1080
|
|
42
|
-
return new this(driver, canvas, root, sampler)
|
|
34
|
+
const view = driver.compositor.pixi.renderer.canvas
|
|
35
|
+
return new this(driver, view, root, sampler)
|
|
43
36
|
}
|
|
44
37
|
|
|
45
38
|
async #tick(ms: number) {
|
|
@@ -48,7 +41,6 @@ export class VideoPlayer {
|
|
|
48
41
|
this.root.audio?.onTimeUpdate(tt)
|
|
49
42
|
const layers = await this.root.visuals?.sampleAt(tt) ?? []
|
|
50
43
|
const frame = await this.driver.composite(layers)
|
|
51
|
-
this.context.drawImage(frame, 0, 0)
|
|
52
44
|
frame.close()
|
|
53
45
|
if (ms >= duration) this.pause()
|
|
54
46
|
}
|
|
@@ -73,7 +65,6 @@ export class VideoPlayer {
|
|
|
73
65
|
this.root.audio?.onTimeUpdate(ms)
|
|
74
66
|
const layers = await this.root.visuals?.sampleAt(ms) ?? []
|
|
75
67
|
const frame = await this.driver.composite(layers)
|
|
76
|
-
this.context.drawImage(frame, 0, 0)
|
|
77
68
|
frame.close()
|
|
78
69
|
}
|
|
79
70
|
|
|
@@ -45,11 +45,16 @@ export function makeHtmlSampler(resolveMedia: (hash: string) => DecoderSource):
|
|
|
45
45
|
// if paused seek otherwise play
|
|
46
46
|
visuals: {
|
|
47
47
|
sampleAt: async (ms) => {
|
|
48
|
-
|
|
48
|
+
const mediaTime = item.start + ms
|
|
49
|
+
const endTime = item.start + item.duration
|
|
50
|
+
|
|
51
|
+
if (mediaTime < item.start || mediaTime >= endTime) {
|
|
52
|
+
video.pause()
|
|
49
53
|
return []
|
|
54
|
+
}
|
|
50
55
|
|
|
51
56
|
if(video.paused && paused) {
|
|
52
|
-
await seek(video,
|
|
57
|
+
await seek(video, mediaTime / 1000)
|
|
53
58
|
}
|
|
54
59
|
|
|
55
60
|
if(video.paused && !paused) {
|
|
@@ -57,7 +62,7 @@ export function makeHtmlSampler(resolveMedia: (hash: string) => DecoderSource):
|
|
|
57
62
|
}
|
|
58
63
|
|
|
59
64
|
const frame = new VideoFrame(video)
|
|
60
|
-
return frame ? [{kind: "image", frame, matrix}] : []
|
|
65
|
+
return frame ? [{kind: "image", frame, matrix, id: item.id}] : []
|
|
61
66
|
}
|
|
62
67
|
}
|
|
63
68
|
}
|
|
@@ -68,13 +73,22 @@ export function makeHtmlSampler(resolveMedia: (hash: string) => DecoderSource):
|
|
|
68
73
|
duration: item.duration,
|
|
69
74
|
audio: {
|
|
70
75
|
onTimeUpdate: async (ms) => {
|
|
71
|
-
const
|
|
76
|
+
const mediaTime = item.start + ms
|
|
77
|
+
const endTime = item.start + item.duration
|
|
78
|
+
|
|
79
|
+
if (mediaTime < item.start || mediaTime >= endTime) {
|
|
80
|
+
audio.pause()
|
|
81
|
+
return []
|
|
82
|
+
}
|
|
83
|
+
|
|
72
84
|
if(audio.paused && paused) {
|
|
73
|
-
await seek(audio,
|
|
85
|
+
await seek(audio, mediaTime / 1000)
|
|
74
86
|
}
|
|
87
|
+
|
|
75
88
|
if(audio.paused && !paused) {
|
|
76
89
|
await audio.play()
|
|
77
90
|
}
|
|
91
|
+
|
|
78
92
|
return []
|
|
79
93
|
}
|
|
80
94
|
}
|
|
@@ -31,7 +31,7 @@ export function makeWebCodecsSampler(
|
|
|
31
31
|
visuals: {
|
|
32
32
|
sampleAt: async (ms: number) => {
|
|
33
33
|
const frame = await cursor.atOrNear(baseUs + toUs(ms))
|
|
34
|
-
return frame ? [{kind: "image", frame, matrix}] : []
|
|
34
|
+
return frame ? [{kind: "image", frame, matrix, id: item.id}] : []
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
}
|
|
@@ -1,27 +1,31 @@
|
|
|
1
1
|
|
|
2
|
-
import {
|
|
2
|
+
import {GMap} from "@e280/stz"
|
|
3
3
|
import {Hash} from "./basics.js"
|
|
4
4
|
import {Media} from "./media.js"
|
|
5
5
|
import {Resource} from "./resource.js"
|
|
6
6
|
import {Datafile} from "../utils/datafile.js"
|
|
7
7
|
|
|
8
8
|
export class ResourcePool {
|
|
9
|
-
#map = new
|
|
9
|
+
#map = new GMap<Hash, Resource.Any>
|
|
10
10
|
|
|
11
11
|
/** store a media file (avoids duplicates via hash) */
|
|
12
12
|
async store(datafile: Datafile) {
|
|
13
13
|
const media = await Media.analyze(datafile)
|
|
14
14
|
const {hash} = media.datafile.checksum
|
|
15
|
-
const {filename, bytes} = media.datafile
|
|
15
|
+
const {filename, bytes, url} = media.datafile
|
|
16
16
|
|
|
17
17
|
if (this.#map.has(hash)) {
|
|
18
18
|
const alreadyExists = this.#map.require(hash)
|
|
19
19
|
alreadyExists.filename = filename
|
|
20
20
|
}
|
|
21
21
|
else
|
|
22
|
-
this.#map.set(hash, {kind: "media", filename, bytes})
|
|
22
|
+
this.#map.set(hash, {kind: "media", filename, bytes, url})
|
|
23
23
|
|
|
24
24
|
return media
|
|
25
25
|
}
|
|
26
|
+
|
|
27
|
+
require(hash: string) {
|
|
28
|
+
return this.#map.require(hash)
|
|
29
|
+
}
|
|
26
30
|
}
|
|
27
31
|
|
package/s/timeline/sugar/o.ts
CHANGED
|
@@ -114,13 +114,21 @@ export class O {
|
|
|
114
114
|
return item
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
text = (content: string
|
|
117
|
+
text = (content: string, options?: {
|
|
118
|
+
duration?: number,
|
|
119
|
+
styles?: TextStyleOptions
|
|
120
|
+
}): Item.Text => {
|
|
121
|
+
|
|
118
122
|
const item = {
|
|
119
123
|
id: this.#getId(),
|
|
120
124
|
content,
|
|
121
125
|
kind: Kind.Text,
|
|
122
|
-
duration: 2000
|
|
126
|
+
duration: options?.duration ?? 2000
|
|
123
127
|
} as Item.Text
|
|
128
|
+
|
|
129
|
+
if(options?.styles)
|
|
130
|
+
item.styleId = this.textStyle(options.styles).id
|
|
131
|
+
|
|
124
132
|
this.register(item)
|
|
125
133
|
return item
|
|
126
134
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
import {Omni} from "./omni.js"
|
|
3
3
|
import {Driver} from "../../driver/driver.js"
|
|
4
|
-
import {dummyData} from "../utils/dummy-data.js"
|
|
4
|
+
// import {dummyData} from "../utils/dummy-data.js"
|
|
5
5
|
|
|
6
6
|
const driver = await Driver.setup()
|
|
7
7
|
//
|
|
@@ -14,27 +14,27 @@ const omni = new Omni(driver)
|
|
|
14
14
|
// load in some media resources
|
|
15
15
|
//
|
|
16
16
|
|
|
17
|
-
const {mediaA, mediaB} = await omni.load({
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
})
|
|
17
|
+
// const {mediaA, mediaB} = await omni.load({
|
|
18
|
+
// mediaA: dummyData(),
|
|
19
|
+
// mediaB: dummyData(),
|
|
20
|
+
// })
|
|
21
21
|
|
|
22
22
|
//
|
|
23
23
|
// create a timeline
|
|
24
24
|
//
|
|
25
25
|
|
|
26
|
-
const timeline = omni.timeline(o => o.sequence(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
))
|
|
26
|
+
// const timeline = omni.timeline(o => o.sequence(
|
|
27
|
+
// o.video(mediaA),
|
|
28
|
+
// o.transition.crossfade(600),
|
|
29
|
+
// o.stack(
|
|
30
|
+
// o.video(mediaB),
|
|
31
|
+
// o.text("hello world"),
|
|
32
|
+
// ),
|
|
33
|
+
// ))
|
|
34
34
|
|
|
35
35
|
//
|
|
36
36
|
// log the timeline
|
|
37
37
|
//
|
|
38
38
|
|
|
39
|
-
console.log(JSON.stringify(timeline, undefined, " "))
|
|
39
|
+
// console.log(JSON.stringify(timeline, undefined, " "))
|
|
40
40
|
|
package/s/timeline/sugar/omni.ts
CHANGED
|
@@ -5,7 +5,7 @@ import {Media} from "../parts/media.js"
|
|
|
5
5
|
import {Driver} from "../../driver/driver.js"
|
|
6
6
|
import {Datafile} from "../utils/datafile.js"
|
|
7
7
|
import {TimelineFile} from "../parts/basics.js"
|
|
8
|
-
import {Export} from "../parts/
|
|
8
|
+
import {Export} from "../parts/renderers/export.js"
|
|
9
9
|
import {ResourcePool} from "../parts/resource-pool.js"
|
|
10
10
|
import {RenderConfig} from "../../driver/fns/schematic.js"
|
|
11
11
|
|
|
@@ -38,7 +38,7 @@ export class Omni {
|
|
|
38
38
|
return o.state.project
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
render = async (timeline: TimelineFile
|
|
41
|
+
render = async (timeline: TimelineFile) => {
|
|
42
42
|
await this.#export.render(timeline)
|
|
43
43
|
}
|
|
44
44
|
}
|
|
@@ -3,19 +3,29 @@ import {Checksum} from "./checksum.js"
|
|
|
3
3
|
|
|
4
4
|
export class Datafile {
|
|
5
5
|
constructor(
|
|
6
|
+
public url: string,
|
|
6
7
|
public bytes: Uint8Array,
|
|
7
8
|
public filename: string,
|
|
8
9
|
public checksum: Checksum,
|
|
9
10
|
) {}
|
|
10
11
|
|
|
11
|
-
static async make(
|
|
12
|
+
static async make(file: Blob, name?: string) {
|
|
13
|
+
const buffer = await file.arrayBuffer()
|
|
14
|
+
const bytes = new Uint8Array(buffer)
|
|
12
15
|
const checksum = await Checksum.make(bytes)
|
|
13
16
|
const filename = name ?? checksum.nickname
|
|
14
|
-
|
|
17
|
+
const url = URL.createObjectURL(file)
|
|
18
|
+
return new this(url, bytes, filename, checksum)
|
|
15
19
|
}
|
|
16
20
|
|
|
17
|
-
static async load(
|
|
18
|
-
|
|
21
|
+
static async load(path: string) {
|
|
22
|
+
// const file = await fetch(path)
|
|
23
|
+
// const buffer = await file.arrayBuffer()
|
|
24
|
+
// const bytes = new Uint8Array(buffer)
|
|
25
|
+
// const filename = file?.headers.get('Content-Disposition')?.split('filename=')[1] ?? "file"
|
|
26
|
+
// console.log(filename)
|
|
27
|
+
// const checksum = await Checksum.make(bytes)
|
|
28
|
+
// return new this(path, bytes, filename, checksum)
|
|
19
29
|
}
|
|
20
30
|
}
|
|
21
31
|
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as i,b as o,c as m,d as p,e}from"./chunk-TLDBHU4V.js";import"./chunk-LAJHJD2S.js";import"./chunk-2RBLPWNG.js";import"./chunk-TBWCKYN2.js";import{O as t,e as r}from"./chunk-LQU5JKKZ.js";r.add(i);r.mixin(t,o);r.add(m);r.mixin(t,p);r.add(e);
|
|
2
|
+
//# sourceMappingURL=browserAll-PGQYU756.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../node_modules/pixi.js/src/accessibility/init.ts", "../../node_modules/pixi.js/src/events/init.ts", "../../node_modules/pixi.js/src/dom/init.ts"],
|
|
4
|
+
"sourcesContent": ["import { extensions } from '../extensions/Extensions';\nimport { Container } from '../scene/container/Container';\nimport { AccessibilitySystem } from './AccessibilitySystem';\nimport { accessibilityTarget } from './accessibilityTarget';\n\nextensions.add(AccessibilitySystem);\nextensions.mixin(Container, accessibilityTarget);\n", "import { extensions } from '../extensions/Extensions';\nimport { Container } from '../scene/container/Container';\nimport { EventSystem } from './EventSystem';\nimport { FederatedContainer } from './FederatedEventTarget';\n\nextensions.add(EventSystem);\nextensions.mixin(Container, FederatedContainer);\n", "import { extensions } from '../extensions/Extensions';\nimport { DOMPipe } from './DOMPipe';\n\nexport * from './index';\n\nextensions.add(DOMPipe);\n"],
|
|
5
|
+
"mappings": "kMAKAA,EAAW,IAAIC,CAAmB,EAClCD,EAAW,MAAME,EAAWC,CAAmB,ECD/CC,EAAW,IAAIC,CAAW,EAC1BD,EAAW,MAAME,EAAWC,CAAkB,ECD9CC,EAAW,IAAIC,CAAO",
|
|
6
|
+
"names": ["extensions", "AccessibilitySystem", "Container", "accessibilityTarget", "extensions", "EventSystem", "Container", "FederatedContainer", "extensions", "DOMPipe"]
|
|
7
|
+
}
|