@revideo/2d 0.4.7 → 0.4.8-alpha.1032
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/editor/editor/tsconfig.build.tsbuildinfo +1 -1
- package/lib/components/Media.d.ts.map +1 -1
- package/lib/components/Media.js +1 -6
- package/lib/components/Video.d.ts.map +1 -1
- package/lib/components/Video.js +3 -2
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.d.ts.map +1 -1
- package/lib/components/index.js +2 -1
- package/lib/scenes/Scene2D.d.ts +1 -0
- package/lib/scenes/Scene2D.d.ts.map +1 -1
- package/lib/scenes/Scene2D.js +10 -2
- package/lib/tsconfig.build.tsbuildinfo +1 -1
- package/lib/utils/video/parser/parser.js +2 -2
- package/lib/utils/video/parser/segment.d.ts +1 -1
- package/lib/utils/video/parser/segment.d.ts.map +1 -1
- package/lib/utils/video/parser/segment.js +37 -3
- package/package.json +5 -5
- package/src/lib/components/Media.ts +0 -6
- package/src/lib/components/Video.ts +2 -1
- package/src/lib/components/index.ts +1 -0
- package/src/lib/scenes/Scene2D.ts +11 -1
- package/src/lib/utils/video/parser/parser.ts +1 -1
- package/src/lib/utils/video/parser/segment.ts +43 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segment.d.ts","sourceRoot":"","sources":["../../../../src/lib/utils/video/parser/segment.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,SAAS,CAAC;AAE7B,qBAAa,OAAO;IAClB,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,GAAG,CAAS;IAEpB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,IAAI,CAAO;IAEnB,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,OAAO,CAAe;IAE9B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAAoB;IAEvC,OAAO,CAAC,QAAQ,CAAuC;gBAGrD,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,IAAI,EAAE,EACb,cAAc,EAAE,MAAM,EACtB,SAAS,GAAE,MAAU;IAsBV,KAAK,CAAC,aAAa,EAAE,kBAAkB;
|
|
1
|
+
{"version":3,"file":"segment.d.ts","sourceRoot":"","sources":["../../../../src/lib/utils/video/parser/segment.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,SAAS,CAAC;AAE7B,qBAAa,OAAO;IAClB,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,GAAG,CAAS;IAEpB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,IAAI,CAAO;IAEnB,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,OAAO,CAAe;IAE9B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAAoB;IAEvC,OAAO,CAAC,QAAQ,CAAuC;gBAGrD,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,IAAI,EAAE,EACb,cAAc,EAAE,MAAM,EACtB,SAAS,GAAE,MAAU;IAsBV,KAAK,CAAC,aAAa,EAAE,kBAAkB;IAoDpD;;;;;;OAMG;YACW,sBAAsB;IAgCpC;;;OAGG;IACH,OAAO,CAAC,SAAS;IAiBjB;;;OAGG;IACH,OAAO,CAAC,OAAO;YA4BD,cAAc;IA2Bf,YAAY;IASzB;;OAEG;IACU,KAAK;IAaX,kBAAkB;IAIlB,YAAY;CAGpB"}
|
|
@@ -24,6 +24,32 @@ export class Segment {
|
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
26
|
async start(decoderConfig) {
|
|
27
|
+
// If this is an empty edit, we just need to fill the buffer with empty frames.
|
|
28
|
+
if (this.edit.mediaTime === -1) {
|
|
29
|
+
this.done = true;
|
|
30
|
+
this.responseFinished = true;
|
|
31
|
+
this.decoder.close();
|
|
32
|
+
const segmentDurationInSeconds = this.edit.segmentDuration /
|
|
33
|
+
this.file.getInfo().videoTracks[0].movie_timescale;
|
|
34
|
+
const framesToFill = segmentDurationInSeconds * this.edit.fps;
|
|
35
|
+
const height = this.file.getInfo().videoTracks[0].track_height;
|
|
36
|
+
const width = this.file.getInfo().videoTracks[0].track_width;
|
|
37
|
+
const bufferSize = height * width * 4;
|
|
38
|
+
const buffer = new ArrayBuffer(bufferSize);
|
|
39
|
+
const uint8Array = new Uint8Array(buffer);
|
|
40
|
+
// Make the frame black
|
|
41
|
+
uint8Array.fill(0);
|
|
42
|
+
this.frameBuffer = Array.from({ length: framesToFill }, () => {
|
|
43
|
+
return new VideoFrame(uint8Array, {
|
|
44
|
+
timestamp: 0,
|
|
45
|
+
duration: 1 / this.edit.fps,
|
|
46
|
+
codedHeight: height,
|
|
47
|
+
codedWidth: width,
|
|
48
|
+
format: 'BGRA',
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
27
53
|
this.decoder.configure(decoderConfig);
|
|
28
54
|
const videoTrack = this.file.getInfo().videoTracks[0];
|
|
29
55
|
const trak = this.file.getTrackById(videoTrack.id);
|
|
@@ -146,10 +172,18 @@ export class Segment {
|
|
|
146
172
|
/**
|
|
147
173
|
* Called when we are done with the extractor.
|
|
148
174
|
*/
|
|
149
|
-
close() {
|
|
175
|
+
async close() {
|
|
150
176
|
this.abortController.abort();
|
|
151
177
|
this.frameBuffer.forEach(frame => frame.close());
|
|
152
|
-
|
|
178
|
+
try {
|
|
179
|
+
if (this.decoder.state === 'configured') {
|
|
180
|
+
await this.decoder.flush();
|
|
181
|
+
this.decoder.close();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch (e) {
|
|
185
|
+
// Ignore
|
|
186
|
+
}
|
|
153
187
|
}
|
|
154
188
|
getFramesProcessed() {
|
|
155
189
|
return this.framesProcessed;
|
|
@@ -158,4 +192,4 @@ export class Segment {
|
|
|
158
192
|
return this.startTime;
|
|
159
193
|
}
|
|
160
194
|
}
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvdmlkZW8vcGFyc2VyL3NlZ21lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUduQyxNQUFNLE9BQU8sT0FBTztJQWtCbEIsWUFDRSxHQUFXLEVBQ1gsSUFBUyxFQUNULEtBQWEsRUFDYixjQUFzQixFQUN0QixZQUFvQixDQUFDO1FBdEJmLFNBQUksR0FBWSxLQUFLLENBQUM7UUFDdEIsb0JBQWUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBTXhDLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUdsQyxvQkFBZSxHQUFHLENBQUMsQ0FBQztRQUVwQixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsZ0JBQVcsR0FBaUIsRUFBRSxDQUFDO1FBRS9CLGFBQVEsR0FBd0IsS0FBSyxJQUFJLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFTckQsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFFZixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUUzQixrR0FBa0c7UUFDbEcsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGVBQWUsSUFBSSxhQUFhLENBQUM7UUFFdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVks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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@revideo/2d",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.8-alpha.1032+c87f8411",
|
|
4
4
|
"description": "A 2D renderer for revideo",
|
|
5
5
|
"author": "revideo",
|
|
6
6
|
"homepage": "https://re.video/",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
],
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@preact/signals": "^1.2.1",
|
|
32
|
-
"@revideo/internal": "0.0.0",
|
|
33
|
-
"@revideo/ui": "0.4.
|
|
32
|
+
"@revideo/internal": "^0.0.0",
|
|
33
|
+
"@revideo/ui": "^0.4.8-alpha.1032+c87f8411",
|
|
34
34
|
"clsx": "^2.0.0",
|
|
35
35
|
"jsdom": "^22.1.0",
|
|
36
36
|
"preact": "^10.19.2",
|
|
@@ -40,12 +40,12 @@
|
|
|
40
40
|
"@codemirror/language": "^6.10.1",
|
|
41
41
|
"@lezer/common": "^1.2.1",
|
|
42
42
|
"@lezer/highlight": "^1.2.0",
|
|
43
|
-
"@revideo/core": "0.4.
|
|
43
|
+
"@revideo/core": "^0.4.8-alpha.1032+c87f8411",
|
|
44
44
|
"code-fns": "^0.8.2",
|
|
45
45
|
"hls.js": "^1.5.11",
|
|
46
46
|
"mathjax-full": "^3.2.2",
|
|
47
47
|
"mp4box": "^0.5.2",
|
|
48
48
|
"parse-svg-path": "^0.1.2"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "c87f841121fcdf09215d782516482ee0090ca11a"
|
|
51
51
|
}
|
|
@@ -9,7 +9,6 @@ import {
|
|
|
9
9
|
useThread,
|
|
10
10
|
} from '@revideo/core';
|
|
11
11
|
import {computed, initial, nodeName, signal} from '../decorators';
|
|
12
|
-
import {useScene2D} from '../scenes';
|
|
13
12
|
import {Rect, RectProps} from './Rect';
|
|
14
13
|
import reactivePlaybackRate from './__logs__/reactive-playback-rate.md';
|
|
15
14
|
|
|
@@ -178,11 +177,6 @@ export abstract class Media extends Rect {
|
|
|
178
177
|
const playbackRate = this.playbackRate();
|
|
179
178
|
this.playing(true);
|
|
180
179
|
this.time(() => this.clampTime(offset + (time() - start) * playbackRate));
|
|
181
|
-
|
|
182
|
-
const scene = useScene2D();
|
|
183
|
-
scene.onFinished.subscribe(() => {
|
|
184
|
-
this.dispose();
|
|
185
|
-
});
|
|
186
180
|
}
|
|
187
181
|
|
|
188
182
|
public pause() {
|
|
@@ -195,7 +195,8 @@ export class Video extends Media {
|
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
-
|
|
198
|
+
// reseek when video is out of sync by more than one second
|
|
199
|
+
if (Math.abs(video.currentTime - time) > 1) {
|
|
199
200
|
this.setCurrentTime(time);
|
|
200
201
|
} else if (!playing) {
|
|
201
202
|
video.currentTime = time;
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
Vector2,
|
|
12
12
|
useLogger,
|
|
13
13
|
} from '@revideo/core';
|
|
14
|
-
import {Audio, Node, Video, View2D} from '../components';
|
|
14
|
+
import {Audio, Media, Node, Video, View2D} from '../components';
|
|
15
15
|
|
|
16
16
|
export class Scene2D extends GeneratorScene<View2D> implements Inspectable {
|
|
17
17
|
private view: View2D | null = null;
|
|
@@ -199,6 +199,16 @@ export class Scene2D extends GeneratorScene<View2D> implements Inspectable {
|
|
|
199
199
|
return returnObjects;
|
|
200
200
|
}
|
|
201
201
|
|
|
202
|
+
public override stopAllMedia() {
|
|
203
|
+
const playingMedia = Array.from(this.registeredNodes.values())
|
|
204
|
+
.filter((node): node is Media => node instanceof Media)
|
|
205
|
+
.filter(video => (video as Media).isPlaying());
|
|
206
|
+
|
|
207
|
+
for (const media of playingMedia) {
|
|
208
|
+
media.dispose();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
202
212
|
protected recreateView() {
|
|
203
213
|
this.execute(() => {
|
|
204
214
|
const size = this.getSize();
|
|
@@ -194,7 +194,7 @@ export class Mp4Parser {
|
|
|
194
194
|
frame = this.sampler.getLastFrame();
|
|
195
195
|
|
|
196
196
|
// We can close the segment
|
|
197
|
-
this.sampler.getSegment().close();
|
|
197
|
+
await this.sampler.getSegment().close();
|
|
198
198
|
|
|
199
199
|
// If we still don't have a frame, throw an error
|
|
200
200
|
if (!frame) {
|
|
@@ -47,6 +47,40 @@ export class Segment {
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
public async start(decoderConfig: VideoDecoderConfig) {
|
|
50
|
+
// If this is an empty edit, we just need to fill the buffer with empty frames.
|
|
51
|
+
if (this.edit.mediaTime === -1) {
|
|
52
|
+
this.done = true;
|
|
53
|
+
this.responseFinished = true;
|
|
54
|
+
this.decoder.close();
|
|
55
|
+
|
|
56
|
+
const segmentDurationInSeconds =
|
|
57
|
+
this.edit.segmentDuration /
|
|
58
|
+
this.file.getInfo().videoTracks[0].movie_timescale;
|
|
59
|
+
const framesToFill = segmentDurationInSeconds * this.edit.fps;
|
|
60
|
+
|
|
61
|
+
const height = this.file.getInfo().videoTracks[0].track_height;
|
|
62
|
+
const width = this.file.getInfo().videoTracks[0].track_width;
|
|
63
|
+
|
|
64
|
+
const bufferSize = height * width * 4;
|
|
65
|
+
const buffer = new ArrayBuffer(bufferSize);
|
|
66
|
+
const uint8Array = new Uint8Array(buffer);
|
|
67
|
+
|
|
68
|
+
// Make the frame black
|
|
69
|
+
uint8Array.fill(0);
|
|
70
|
+
|
|
71
|
+
this.frameBuffer = Array.from({length: framesToFill}, () => {
|
|
72
|
+
return new VideoFrame(uint8Array, {
|
|
73
|
+
timestamp: 0,
|
|
74
|
+
duration: 1 / this.edit.fps,
|
|
75
|
+
codedHeight: height,
|
|
76
|
+
codedWidth: width,
|
|
77
|
+
format: 'BGRA',
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
|
|
50
84
|
this.decoder.configure(decoderConfig);
|
|
51
85
|
const videoTrack = this.file.getInfo().videoTracks[0];
|
|
52
86
|
const trak = this.file.getTrackById(videoTrack.id);
|
|
@@ -195,10 +229,17 @@ export class Segment {
|
|
|
195
229
|
/**
|
|
196
230
|
* Called when we are done with the extractor.
|
|
197
231
|
*/
|
|
198
|
-
public close() {
|
|
232
|
+
public async close() {
|
|
199
233
|
this.abortController.abort();
|
|
200
234
|
this.frameBuffer.forEach(frame => frame.close());
|
|
201
|
-
|
|
235
|
+
try {
|
|
236
|
+
if (this.decoder.state === 'configured') {
|
|
237
|
+
await this.decoder.flush();
|
|
238
|
+
this.decoder.close();
|
|
239
|
+
}
|
|
240
|
+
} catch (e) {
|
|
241
|
+
// Ignore
|
|
242
|
+
}
|
|
202
243
|
}
|
|
203
244
|
|
|
204
245
|
public getFramesProcessed() {
|