@omnimedia/omnitool 1.1.0-87 → 1.1.0-89

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/x/tests.html CHANGED
@@ -295,7 +295,7 @@ canvas {
295
295
  }
296
296
  }
297
297
  </style>
298
- <script type=module src="tests.bundle.min.js?v=a389627bcfcb"></script>
298
+ <script type=module src="tests.bundle.min.js?v=f2fc3d471a11"></script>
299
299
 
300
300
 
301
301
  <meta name="theme-color" content="#3cff9c">
@@ -2,17 +2,34 @@ import { Ms } from "../../../../units/ms.js";
2
2
  import { Driver } from "../../../../driver/driver.js";
3
3
  import { TimelineFile } from "../../../parts/basics.js";
4
4
  import { DecoderSource } from "../../../../driver/fns/schematic.js";
5
+ type StreamCursor<T> = {
6
+ next(target: number): Promise<T | undefined>;
7
+ cancel(): Promise<void>;
8
+ };
9
+ type VideoFrameCursor = StreamCursor<VideoFrame>;
10
+ declare abstract class BaseVisualSampler {
11
+ #private;
12
+ protected driver: Driver;
13
+ protected resolveMedia: (hash: string) => DecoderSource;
14
+ protected timeline: TimelineFile;
15
+ constructor(driver: Driver, resolveMedia: (hash: string) => DecoderSource, timeline: TimelineFile);
16
+ protected abstract createCursor(source: DecoderSource, startUs: number, endUs: number): VideoFrameCursor;
17
+ protected sample(timecode: Ms): Promise<import("../../../../driver/fns/schematic.js").Layer[]>;
18
+ cancel(): Promise<void>;
19
+ }
5
20
  /**
6
21
  * forward-only frame cursor optimized for export purposes.
7
22
  * it uses mediabunny internally so the support for non-clients
8
23
  * should be done from mediabunny custom decoder/encoder
9
24
  */
10
- export declare class CursorVisualSampler {
25
+ export declare class CursorVisualSampler extends BaseVisualSampler {
11
26
  #private;
12
- private driver;
13
- private resolveMedia;
14
- private timeline;
15
- constructor(driver: Driver, resolveMedia: (hash: string) => DecoderSource, timeline: TimelineFile);
16
27
  next(timecode: Ms): Promise<import("../../../../driver/fns/schematic.js").Layer[]>;
17
- cancel(): Promise<void>;
28
+ protected createCursor(source: DecoderSource, startUs: number, endUs: number): VideoFrameCursor;
29
+ }
30
+ export declare class ReverseCursorVisualSampler extends BaseVisualSampler {
31
+ #private;
32
+ next(timecode: Ms): Promise<import("../../../../driver/fns/schematic.js").Layer[]>;
33
+ protected createCursor(source: DecoderSource, _initialTargetUs: number, endUs: number): VideoFrameCursor;
18
34
  }
35
+ export {};
@@ -1,15 +1,11 @@
1
+ import { ALL_FORMATS, Input, VideoSampleSink } from "mediabunny";
1
2
  import { ms } from "../../../../units/ms.js";
3
+ import { loadDecoderSource } from "../../../../driver/utils/load-decoder-source.js";
2
4
  import { createVisualSampler } from "../../parts/samplers/visual/sampler.js";
3
- /**
4
- * forward-only frame cursor optimized for export purposes.
5
- * it uses mediabunny internally so the support for non-clients
6
- * should be done from mediabunny custom decoder/encoder
7
- */
8
- export class CursorVisualSampler {
5
+ class BaseVisualSampler {
9
6
  driver;
10
7
  resolveMedia;
11
8
  timeline;
12
- #lastTimecode = -Infinity;
13
9
  #videoCursors = new Map();
14
10
  #sampler;
15
11
  constructor(driver, resolveMedia, timeline) {
@@ -22,23 +18,34 @@ export class CursorVisualSampler {
22
18
  if (!cursor) {
23
19
  const source = this.resolveMedia(item.mediaHash);
24
20
  const endUs = toUs(ms(item.start + item.duration));
25
- cursor = this.#createVideoCursor(source, targetUs, endUs);
21
+ cursor = this.createCursor(source, targetUs, endUs);
26
22
  this.#videoCursors.set(item.id, cursor);
27
23
  }
28
24
  return cursor.next(targetUs);
29
25
  });
30
26
  }
31
- next(timecode) {
32
- if (timecode < this.#lastTimecode)
33
- throw new Error(`Forward-only cursor regression: ${timecode}ms < ${this.#lastTimecode}ms`);
34
- this.#lastTimecode = timecode;
27
+ sample(timecode) {
35
28
  return this.#sampler.sample(this.timeline, timecode);
36
29
  }
37
30
  async cancel() {
38
31
  await Promise.all([...this.#videoCursors.values()].map(c => c.cancel()));
39
32
  this.#videoCursors.clear();
40
33
  }
41
- #createVideoCursor(source, startUs, endUs) {
34
+ }
35
+ /**
36
+ * forward-only frame cursor optimized for export purposes.
37
+ * it uses mediabunny internally so the support for non-clients
38
+ * should be done from mediabunny custom decoder/encoder
39
+ */
40
+ export class CursorVisualSampler extends BaseVisualSampler {
41
+ #lastTimecode = -Infinity;
42
+ next(timecode) {
43
+ if (timecode < this.#lastTimecode)
44
+ throw new Error(`Forward-only cursor regression: ${timecode}ms < ${this.#lastTimecode}ms`);
45
+ this.#lastTimecode = timecode;
46
+ return this.sample(timecode);
47
+ }
48
+ createCursor(source, startUs, endUs) {
42
49
  const video = this.driver.decodeVideo({ source, start: startUs / 1_000_000, end: endUs / 1_000_000 });
43
50
  const reader = video.readable.getReader();
44
51
  let current = null;
@@ -95,5 +102,120 @@ export class CursorVisualSampler {
95
102
  };
96
103
  }
97
104
  }
105
+ export class ReverseCursorVisualSampler extends BaseVisualSampler {
106
+ #lastTimecode = Infinity;
107
+ next(timecode) {
108
+ if (timecode > this.#lastTimecode)
109
+ throw new Error(`Reverse-only cursor regression: ${timecode}ms > ${this.#lastTimecode}ms`);
110
+ this.#lastTimecode = timecode;
111
+ return this.sample(timecode);
112
+ }
113
+ createCursor(source, _initialTargetUs, endUs) {
114
+ const startUs = 0;
115
+ const windowUs = 1_000_000;
116
+ const prefetchThreshold = windowUs * 0.5;
117
+ let frames = [];
118
+ let windowStart = Infinity;
119
+ let windowEnd = -Infinity;
120
+ let input = null;
121
+ let sink = null;
122
+ let prefetchPromise = null;
123
+ let canceled = false;
124
+ const clear = () => {
125
+ for (const frame of frames)
126
+ frame.close();
127
+ frames = [];
128
+ };
129
+ const getSink = async () => {
130
+ if (sink)
131
+ return sink;
132
+ input = new Input({
133
+ source: await loadDecoderSource(source),
134
+ formats: ALL_FORMATS,
135
+ });
136
+ const track = await input.getPrimaryVideoTrack();
137
+ sink = track && await track.canDecode()
138
+ ? new VideoSampleSink(track)
139
+ : null;
140
+ return sink;
141
+ };
142
+ const fetchFrames = async (targetUs) => {
143
+ const wEnd = Math.min(endUs, targetUs + 1);
144
+ const wStart = Math.max(startUs, wEnd - windowUs);
145
+ const newFrames = [];
146
+ const videoSink = await getSink();
147
+ if (videoSink) {
148
+ for await (const sample of videoSink.samples(wStart / 1_000_000, wEnd / 1_000_000)) {
149
+ newFrames.push(sample.toVideoFrame());
150
+ sample.close();
151
+ }
152
+ }
153
+ return { frames: newFrames, windowStart: wStart, windowEnd: wEnd };
154
+ };
155
+ const loadWindow = async (targetUs) => {
156
+ clear();
157
+ const result = await fetchFrames(targetUs);
158
+ frames = result.frames;
159
+ windowStart = result.windowStart;
160
+ windowEnd = result.windowEnd;
161
+ };
162
+ return {
163
+ async next(targetUs) {
164
+ if (canceled)
165
+ return undefined;
166
+ if (targetUs < windowStart || targetUs > windowEnd) {
167
+ if (prefetchPromise) {
168
+ const prefetched = await prefetchPromise;
169
+ prefetchPromise = null;
170
+ if (canceled) {
171
+ for (const f of prefetched.frames)
172
+ f.close();
173
+ return undefined;
174
+ }
175
+ if (targetUs >= prefetched.windowStart && targetUs <= prefetched.windowEnd) {
176
+ clear();
177
+ frames = prefetched.frames;
178
+ windowStart = prefetched.windowStart;
179
+ windowEnd = prefetched.windowEnd;
180
+ }
181
+ else {
182
+ for (const f of prefetched.frames)
183
+ f.close();
184
+ await loadWindow(targetUs);
185
+ }
186
+ }
187
+ else {
188
+ await loadWindow(targetUs);
189
+ }
190
+ }
191
+ if (!prefetchPromise && targetUs < windowStart + prefetchThreshold && windowStart > startUs)
192
+ prefetchPromise = fetchFrames(windowStart - 1);
193
+ let best;
194
+ let bestDistance = Infinity;
195
+ for (const frame of frames) {
196
+ const distance = Math.abs((frame.timestamp ?? targetUs) - targetUs);
197
+ if (distance < bestDistance) {
198
+ best = frame;
199
+ bestDistance = distance;
200
+ }
201
+ }
202
+ return best ? new VideoFrame(best) : undefined;
203
+ },
204
+ async cancel() {
205
+ canceled = true;
206
+ const pending = prefetchPromise;
207
+ prefetchPromise = null;
208
+ const prefetched = await pending?.catch(() => null);
209
+ if (prefetched)
210
+ for (const f of prefetched.frames)
211
+ f.close();
212
+ clear();
213
+ input?.dispose();
214
+ input = null;
215
+ sink = null;
216
+ }
217
+ };
218
+ }
219
+ }
98
220
  const toUs = (ms) => Math.round(ms * 1_000);
99
221
  //# sourceMappingURL=cursor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../../../s/timeline/renderers/export/parts/cursor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../../../s/timeline/renderers/export/parts/cursor.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { Fps } from '../../../../units/fps.js';
2
2
  import { Ms } from '../../../../units/ms.js';
3
3
  import { Driver } from '../../../../driver/driver.js';
4
4
  import { TimelineFile } from '../../../parts/basics.js';
5
- import { CursorVisualSampler } from '../../export/parts/cursor.js';
5
+ import { CursorVisualSampler, ReverseCursorVisualSampler } from '../../export/parts/cursor.js';
6
6
  import { DecoderSource } from '../../../../driver/fns/schematic.js';
7
7
  export declare class Playback {
8
8
  #private;
@@ -20,6 +20,7 @@ export declare class Playback {
20
20
  sample(timeline: TimelineFile, timecode: Ms): Promise<import("../../../../driver/fns/schematic.js").Layer[]>;
21
21
  };
22
22
  playVisualSampler: CursorVisualSampler | null;
23
+ reversePlayVisualSampler: ReverseCursorVisualSampler | null;
23
24
  onTick: import("@e280/stz").Pub<[]>;
24
25
  audioContext: AudioContext;
25
26
  audioGain: GainNode;
@@ -32,5 +33,7 @@ export declare class Playback {
32
33
  pause(): void;
33
34
  get duration(): Ms;
34
35
  get currentTime(): Ms;
36
+ get playbackRate(): number;
37
+ set playbackRate(rate: number);
35
38
  setFps(fps: Fps): void;
36
39
  }
@@ -1,8 +1,8 @@
1
1
  import { ms } from '../../../../units/ms.js';
2
2
  import { realtime } from '../../parts/schedulers.js';
3
- import { computeItemDuration } from '../../parts/handy.js';
4
3
  import { seconds } from '../../../../units/seconds.js';
5
- import { CursorVisualSampler } from '../../export/parts/cursor.js';
4
+ import { computeItemDuration } from '../../parts/handy.js';
5
+ import { CursorVisualSampler, ReverseCursorVisualSampler } from '../../export/parts/cursor.js';
6
6
  import { createAudioSampler } from '../../parts/samplers/audio/sampler.js';
7
7
  import { createVisualSampler } from '../../parts/samplers/visual/sampler.js';
8
8
  export class Playback {
@@ -12,8 +12,10 @@ export class Playback {
12
12
  audioSampler;
13
13
  seekVisualSampler;
14
14
  playVisualSampler = null;
15
+ reversePlayVisualSampler = null;
15
16
  #playbackStart = ms(0);
16
17
  #audioStartSec = null;
18
+ #playbackRate = 1;
17
19
  #controller = realtime();
18
20
  onTick = this.#controller.onTick;
19
21
  audioContext = new AudioContext({ sampleRate: 48000 });
@@ -38,10 +40,16 @@ export class Playback {
38
40
  }
39
41
  async #samples() {
40
42
  for await (const _ of this.#controller.ticks()) {
41
- const layers = await this.playVisualSampler?.next(this.currentTime) ?? [];
43
+ const time = this.currentTime;
44
+ const layers = this.#playbackRate >= 0
45
+ ? await this.playVisualSampler?.next(time) ?? []
46
+ : await this.reversePlayVisualSampler?.next(time) ?? [];
42
47
  const frame = await this.driver.composite(layers);
43
48
  frame.close();
44
- if (this.currentTime >= this.duration)
49
+ const hasEnded = this.#playbackRate >= 0
50
+ ? time >= this.duration
51
+ : time <= 0;
52
+ if (hasEnded)
45
53
  this.pause();
46
54
  }
47
55
  }
@@ -56,26 +64,24 @@ export class Playback {
56
64
  await this.audioContext.resume();
57
65
  this.#playbackStart = this.currentTime;
58
66
  this.#audioStartSec = this.audioContext.currentTime;
59
- this.#audioAbort?.abort();
60
- this.#audioAbort = new AbortController();
61
- for (const node of this.audioNodes)
62
- node.stop();
63
- this.audioNodes.clear();
67
+ this.#stopAudio();
64
68
  this.playVisualSampler = new CursorVisualSampler(this.driver, this.resolveMedia, this.timeline);
69
+ this.reversePlayVisualSampler = new ReverseCursorVisualSampler(this.driver, this.resolveMedia, this.timeline);
65
70
  this.#controller.play();
66
- this.#startAudio(this.#audioAbort.signal, seconds(this.#playbackStart / 1000));
71
+ this.#startAudio();
67
72
  }
68
73
  pause() {
69
74
  this.#playbackStart = this.currentTime;
70
75
  this.#controller.pause();
71
- this.#audioAbort?.abort();
72
- for (const node of this.audioNodes)
73
- node.stop();
74
- this.audioNodes.clear();
76
+ this.#stopAudio();
75
77
  if (this.playVisualSampler) {
76
78
  this.playVisualSampler.cancel();
77
79
  this.playVisualSampler = null;
78
80
  }
81
+ if (this.reversePlayVisualSampler) {
82
+ this.reversePlayVisualSampler.cancel();
83
+ this.reversePlayVisualSampler = null;
84
+ }
79
85
  }
80
86
  get duration() {
81
87
  return computeItemDuration(this.timeline.rootId, this.timeline);
@@ -84,12 +90,53 @@ export class Playback {
84
90
  if (!this.#controller.isPlaying() || this.#audioStartSec === null)
85
91
  return this.#playbackStart;
86
92
  const elapsedMs = (this.audioContext.currentTime - this.#audioStartSec) * 1000;
87
- return ms(this.#playbackStart + elapsedMs);
93
+ const current = this.#playbackStart + elapsedMs * this.#playbackRate;
94
+ return ms(Math.max(0, Math.min(this.duration, current)));
95
+ }
96
+ get playbackRate() {
97
+ return this.#playbackRate;
98
+ }
99
+ set playbackRate(rate) {
100
+ if (!Number.isFinite(rate) || rate === 0)
101
+ throw new Error(`Invalid playback rate "${rate}".`);
102
+ this.#playbackStart = this.currentTime;
103
+ this.#audioStartSec = this.#controller.isPlaying()
104
+ ? this.audioContext.currentTime
105
+ : null;
106
+ const wasReversed = this.#playbackRate < 0;
107
+ this.#playbackRate = rate;
108
+ if (this.#controller.isPlaying()) {
109
+ if (wasReversed && rate > 0) {
110
+ this.playVisualSampler?.cancel();
111
+ this.playVisualSampler = new CursorVisualSampler(this.driver, this.resolveMedia, this.timeline);
112
+ }
113
+ else if (!wasReversed && rate < 0) {
114
+ this.reversePlayVisualSampler?.cancel();
115
+ this.reversePlayVisualSampler = new ReverseCursorVisualSampler(this.driver, this.resolveMedia, this.timeline);
116
+ }
117
+ this.#syncAudio();
118
+ }
88
119
  }
89
120
  setFps(fps) {
90
121
  this.#controller.setFPS(fps);
91
122
  }
92
- async #startAudio(signal, from) {
123
+ #syncAudio() {
124
+ this.#stopAudio();
125
+ this.#startAudio();
126
+ }
127
+ #stopAudio() {
128
+ this.#audioAbort?.abort();
129
+ this.#audioAbort = null;
130
+ for (const node of this.audioNodes)
131
+ node.stop();
132
+ this.audioNodes.clear();
133
+ }
134
+ async #startAudio() {
135
+ if (this.#playbackRate !== 1)
136
+ return;
137
+ const from = seconds(this.#playbackStart / 1000);
138
+ this.#audioAbort = new AbortController();
139
+ const signal = this.#audioAbort.signal;
93
140
  const ctx = this.audioContext;
94
141
  if (this.#audioStartSec === null)
95
142
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"playback.js","sourceRoot":"","sources":["../../../../../s/timeline/renderers/player/parts/playback.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,EAAE,EAAK,MAAM,yBAAyB,CAAA;AAE9C,OAAO,EAAC,QAAQ,EAAC,MAAM,2BAA2B,CAAA;AAElD,OAAO,EAAC,mBAAmB,EAAC,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAC,OAAO,EAAU,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAC,mBAAmB,EAAC,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAA;AACxE,OAAO,EAAC,mBAAmB,EAAC,MAAM,wCAAwC,CAAA;AAE1E,MAAM,OAAO,QAAQ;IAiBX;IACA;IACA;IAlBT,YAAY,CAAA;IACZ,iBAAiB,CAAA;IACjB,iBAAiB,GAA+B,IAAI,CAAA;IAEpD,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;IACtB,cAAc,GAAkB,IAAI,CAAA;IAEpC,WAAW,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAA;IAEhC,YAAY,GAAG,IAAI,YAAY,CAAC,EAAC,UAAU,EAAE,KAAK,EAAC,CAAC,CAAA;IACpD,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAA;IAC1C,UAAU,GAAG,IAAI,GAAG,EAAyB,CAAA;IAC7C,WAAW,GAA2B,IAAI,CAAA;IAE1C,YACS,MAAc,EACd,QAAsB,EACtB,YAA6C;QAF7C,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAc;QACtB,iBAAY,GAAZ,YAAY,CAAiC;QAErD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;QACrD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,CAAA;QACpC,IAAI,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC/D,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACzD,IAAI,CAAC,QAAQ,EAAE,CAAA;IAChB,CAAC;IAED,MAAM,CAAC,QAAsB;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACzB,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAA;IACpC,CAAC;IAED,KAAK,CAAC,QAAQ;QACb,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;YAEzE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YACjD,KAAK,CAAC,KAAK,EAAE,CAAA;YAEb,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ;gBACpC,IAAI,CAAC,KAAK,EAAE,CAAA;QACd,CAAC;IACF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAQ;QAClB,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC1B,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAChE,CAAC;IAED,KAAK,CAAC,KAAK;QACV,IAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;YAC9B,OAAM;QAEP,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAA;QAEhC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAA;QACtC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAA;QAEnD,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAA;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,eAAe,EAAE,CAAA;QAExC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU;YACjC,IAAI,CAAC,IAAI,EAAE,CAAA;QAEZ,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;QAEvB,IAAI,CAAC,iBAAiB,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAE/F,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;QACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,CAAA;IAC/E,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAA;QACtC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;QACxB,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAA;QAEzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU;YACjC,IAAI,CAAC,IAAI,EAAE,CAAA;QAEZ,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;QAEvB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAA;YAC/B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;QAC9B,CAAC;IAEF,CAAC;IAED,IAAI,QAAQ;QACX,OAAO,mBAAmB,CACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,EACpB,IAAI,CAAC,QAAQ,CACb,CAAA;IACF,CAAC;IAED,IAAI,WAAW;QACd,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI;YAChE,OAAO,IAAI,CAAC,cAAc,CAAA;QAE3B,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAA;QAC9E,OAAO,EAAE,CAAC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,CAAC,GAAQ;QACd,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAmB,EAAE,IAAa;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAA;QAE7B,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI;YAC/B,OAAM;QAEP,IAAI,KAAK,EAAE,MAAM,EAAC,MAAM,EAAE,SAAS,EAAC,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CACpE,IAAI,CAAC,QAAQ,EACb,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,CACf,EAAE,CAAC;YAEH,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;gBAClD,OAAM;YAEP,OAAO,SAAS,GAAG,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,IAAI;gBACvE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;YAE1C,MAAM,IAAI,GAAG,GAAG,CAAC,kBAAkB,EAAE,CAAA;YACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,EAAE,CAAA;YACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC5B,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACjD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAEzB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,GAAG,SAAS,GAAG,IAAI,CAAA;YAEtD,OAAO,IAAI,GAAG,CAAC,WAAW;gBACzB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBACrB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,CAAA;QAE1D,CAAC;IACF,CAAC;CACD"}
1
+ {"version":3,"file":"playback.js","sourceRoot":"","sources":["../../../../../s/timeline/renderers/player/parts/playback.ts"],"names":[],"mappings":"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"}
@@ -17,9 +17,11 @@ export declare class VideoPlayer {
17
17
  get isPlaying(): boolean;
18
18
  get duration(): import("../../../units/ms.js").Ms;
19
19
  get currentTime(): import("../../../units/ms.js").Ms;
20
+ get playbackRate(): number;
21
+ set playbackRate(rate: number);
20
22
  /**
21
23
  call this whenever your timeline state changes
22
24
  */
23
- update(timeline: TimelineFile): void;
25
+ update(timeline: TimelineFile): Promise<void>;
24
26
  }
25
27
  export {};
@@ -37,11 +37,19 @@ export class VideoPlayer {
37
37
  get currentTime() {
38
38
  return this.playback.currentTime;
39
39
  }
40
+ get playbackRate() {
41
+ return this.playback.playbackRate;
42
+ }
43
+ set playbackRate(rate) {
44
+ this.playback.playbackRate = rate;
45
+ }
40
46
  /**
41
47
  call this whenever your timeline state changes
42
48
  */
43
- update(timeline) {
49
+ async update(timeline) {
44
50
  this.playback.update(timeline);
51
+ if (!this.isPlaying)
52
+ await this.seek(this.currentTime);
45
53
  }
46
54
  async #flushSeeks() {
47
55
  while (this.#pendingSeek !== null) {
@@ -1 +1 @@
1
- {"version":3,"file":"player.js","sourceRoot":"","sources":["../../../../s/timeline/renderers/player/player.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAC,MAAM,sBAAsB,CAAA;AACvC,OAAO,EAAC,GAAG,EAAC,MAAM,uBAAuB,CAAA;AACzC,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAO5C,MAAM,OAAO,WAAW;IAQd;IAPT,MAAM,CAAmB;IACzB,QAAQ,CAAU;IAElB,YAAY,GAAkB,IAAI,CAAA;IAClC,UAAU,GAAyB,IAAI,CAAA;IAEvC,YACS,MAAc,EACtB,YAA0B,EAC1B,QAAsB;QAFd,WAAM,GAAN,MAAM,CAAQ;QAItB,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAA;QAC5D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAA;IACrD,CAAC;IAED,KAAK,CAAC,IAAI;QACT,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IAED,IAAI,CAAC,MAAc;QAClB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAA;QAC1B,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;IACpF,CAAC;IAED,MAAM,CAAC,KAAa;QACnB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAA;IAChC,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAA;IAC/B,CAAC;IAED,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAA;IAC9B,CAAC;IAED,IAAI,WAAW;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAA;IACjC,CAAC;IAED;;MAEE;IACF,MAAM,CAAC,QAAsB;QAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC/B,CAAC;IAED,KAAK,CAAC,WAAW;QAChB,OAAO,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAA;YAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;YACxB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YACjD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YACjD,KAAK,CAAC,KAAK,EAAE,CAAA;QACd,CAAC;IACF,CAAC;CACD"}
1
+ {"version":3,"file":"player.js","sourceRoot":"","sources":["../../../../s/timeline/renderers/player/player.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAC,MAAM,sBAAsB,CAAA;AACvC,OAAO,EAAC,GAAG,EAAC,MAAM,uBAAuB,CAAA;AACzC,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAO5C,MAAM,OAAO,WAAW;IAQd;IAPT,MAAM,CAAmB;IACzB,QAAQ,CAAU;IAElB,YAAY,GAAkB,IAAI,CAAA;IAClC,UAAU,GAAyB,IAAI,CAAA;IAEvC,YACS,MAAc,EACtB,YAA0B,EAC1B,QAAsB;QAFd,WAAM,GAAN,MAAM,CAAQ;QAItB,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAA;QAC5D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAA;IACrD,CAAC;IAED,KAAK,CAAC,IAAI;QACT,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IAED,IAAI,CAAC,MAAc;QAClB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAA;QAC1B,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;IACpF,CAAC;IAED,MAAM,CAAC,KAAa;QACnB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAA;IAChC,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAA;IAC/B,CAAC;IAED,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAA;IAC9B,CAAC;IAED,IAAI,WAAW;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAA;IACjC,CAAC;IAED,IAAI,YAAY;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAA;IAClC,CAAC;IAED,IAAI,YAAY,CAAC,IAAY;QAC5B,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAA;IAClC,CAAC;IAED;;MAEE;IACF,KAAK,CAAC,MAAM,CAAC,QAAsB;QAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS;YAClB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,WAAW;QAChB,OAAO,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAA;YAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;YACxB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YACjD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YACjD,KAAK,CAAC,KAAK,EAAE,CAAA;QACd,CAAC;IACF,CAAC;CACD"}