@remotion/media 4.0.463 → 4.0.464
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.
|
@@ -87,6 +87,7 @@ export declare const drawPreviewOverlay: ({ context, audioTime, audioContextStat
|
|
|
87
87
|
};
|
|
88
88
|
} | null;
|
|
89
89
|
drawFrame: (frame: import("mediabunny").WrappedCanvas) => Promise<void>;
|
|
90
|
+
redrawCurrentFrame: () => Promise<void>;
|
|
90
91
|
getFramesRendered: () => number;
|
|
91
92
|
} | null;
|
|
92
93
|
playbackRate: number;
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1126,6 +1126,10 @@ var videoIteratorManager = async ({
|
|
|
1126
1126
|
let videoFrameIterator = null;
|
|
1127
1127
|
let framesRendered = 0;
|
|
1128
1128
|
let currentDelayHandle = null;
|
|
1129
|
+
let lastDrawnFrame = null;
|
|
1130
|
+
const clearLastDrawnFrame = () => {
|
|
1131
|
+
lastDrawnFrame = null;
|
|
1132
|
+
};
|
|
1129
1133
|
if (canvas) {
|
|
1130
1134
|
const displayWidth = await videoTrack.getDisplayWidth();
|
|
1131
1135
|
const displayHeight = await videoTrack.getDisplayHeight();
|
|
@@ -1140,7 +1144,7 @@ var videoIteratorManager = async ({
|
|
|
1140
1144
|
alpha: true
|
|
1141
1145
|
});
|
|
1142
1146
|
const prewarmedVideoIteratorCache = makePrewarmedVideoIteratorCache(canvasSink);
|
|
1143
|
-
const
|
|
1147
|
+
const paintFrame = async (frame) => {
|
|
1144
1148
|
if (context && canvas) {
|
|
1145
1149
|
const effects = getEffects();
|
|
1146
1150
|
const chainState = getEffectChainState(canvas.width, canvas.height);
|
|
@@ -1158,6 +1162,10 @@ var videoIteratorManager = async ({
|
|
|
1158
1162
|
context.drawImage(frame.canvas, 0, 0);
|
|
1159
1163
|
}
|
|
1160
1164
|
}
|
|
1165
|
+
};
|
|
1166
|
+
const drawFrame = async (frame) => {
|
|
1167
|
+
await paintFrame(frame);
|
|
1168
|
+
lastDrawnFrame = frame;
|
|
1161
1169
|
framesRendered++;
|
|
1162
1170
|
drawDebugOverlay();
|
|
1163
1171
|
const callback = getOnVideoFrameCallback();
|
|
@@ -1166,9 +1174,22 @@ var videoIteratorManager = async ({
|
|
|
1166
1174
|
}
|
|
1167
1175
|
Internals4.Log.trace({ logLevel, tag: "@remotion/media" }, `[MediaPlayer] Drew frame ${frame.timestamp.toFixed(3)}s`);
|
|
1168
1176
|
};
|
|
1177
|
+
const redrawCurrentFrame = async () => {
|
|
1178
|
+
if (!lastDrawnFrame) {
|
|
1179
|
+
return;
|
|
1180
|
+
}
|
|
1181
|
+
await paintFrame(lastDrawnFrame);
|
|
1182
|
+
drawDebugOverlay();
|
|
1183
|
+
const callback = getOnVideoFrameCallback();
|
|
1184
|
+
if (callback) {
|
|
1185
|
+
callback(lastDrawnFrame.canvas);
|
|
1186
|
+
}
|
|
1187
|
+
Internals4.Log.trace({ logLevel, tag: "@remotion/media" }, `[MediaPlayer] Redrew frame ${lastDrawnFrame.timestamp.toFixed(3)}s with updated effects`);
|
|
1188
|
+
};
|
|
1169
1189
|
const startVideoIterator = async (timeToSeek, nonce) => {
|
|
1170
1190
|
let __stack = [];
|
|
1171
1191
|
try {
|
|
1192
|
+
clearLastDrawnFrame();
|
|
1172
1193
|
videoFrameIterator?.destroy();
|
|
1173
1194
|
const delayHandle = __using(__stack, delayPlaybackHandleIfNotPremounting(), 0);
|
|
1174
1195
|
currentDelayHandle = delayHandle;
|
|
@@ -1220,6 +1241,7 @@ var videoIteratorManager = async ({
|
|
|
1220
1241
|
getVideoIteratorsCreated: () => videoIteratorsCreated,
|
|
1221
1242
|
seek,
|
|
1222
1243
|
destroy: () => {
|
|
1244
|
+
clearLastDrawnFrame();
|
|
1223
1245
|
prewarmedVideoIteratorCache.destroy();
|
|
1224
1246
|
videoFrameIterator?.destroy();
|
|
1225
1247
|
if (context && canvas) {
|
|
@@ -1233,6 +1255,7 @@ var videoIteratorManager = async ({
|
|
|
1233
1255
|
},
|
|
1234
1256
|
getVideoFrameIterator: () => videoFrameIterator,
|
|
1235
1257
|
drawFrame,
|
|
1258
|
+
redrawCurrentFrame,
|
|
1236
1259
|
getFramesRendered: () => framesRendered
|
|
1237
1260
|
};
|
|
1238
1261
|
};
|
|
@@ -1743,6 +1766,9 @@ class MediaPlayer {
|
|
|
1743
1766
|
setVideoFrameCallback(callback) {
|
|
1744
1767
|
this.onVideoFrameCallback = callback;
|
|
1745
1768
|
}
|
|
1769
|
+
async redrawVideoEffects() {
|
|
1770
|
+
await this.videoIteratorManager?.redrawCurrentFrame();
|
|
1771
|
+
}
|
|
1746
1772
|
drawDebugOverlay = () => {
|
|
1747
1773
|
if (!this.debugOverlay)
|
|
1748
1774
|
return;
|
|
@@ -4848,6 +4874,13 @@ var VideoForPreviewAssertedShowing = ({
|
|
|
4848
4874
|
}
|
|
4849
4875
|
mediaPlayer.setVideoFrameCallback(onVideoFrame ?? null);
|
|
4850
4876
|
}, [onVideoFrame, mediaPlayerReady]);
|
|
4877
|
+
useLayoutEffect3(() => {
|
|
4878
|
+
const mediaPlayer = mediaPlayerRef.current;
|
|
4879
|
+
if (!mediaPlayer || !mediaPlayerReady) {
|
|
4880
|
+
return;
|
|
4881
|
+
}
|
|
4882
|
+
mediaPlayer.redrawVideoEffects().catch(() => {});
|
|
4883
|
+
}, [_experimentalEffects, mediaPlayerReady, mediaPlayerRef]);
|
|
4851
4884
|
const actualStyle = useMemo4(() => {
|
|
4852
4885
|
return {
|
|
4853
4886
|
...style,
|
|
@@ -5256,7 +5289,7 @@ var videoSchema = {
|
|
|
5256
5289
|
description: "Hidden"
|
|
5257
5290
|
},
|
|
5258
5291
|
loop: { type: "boolean", default: false, description: "Loop" },
|
|
5259
|
-
...Internals20.
|
|
5292
|
+
...Internals20.sequenceVisualStyleSchema
|
|
5260
5293
|
};
|
|
5261
5294
|
var InnerVideo = ({
|
|
5262
5295
|
src,
|
package/dist/media-player.d.ts
CHANGED
|
@@ -105,6 +105,7 @@ export declare class MediaPlayer {
|
|
|
105
105
|
private getTargetTime;
|
|
106
106
|
private scheduleAudioNode;
|
|
107
107
|
setVideoFrameCallback(callback: null | ((frame: CanvasImageSource) => void)): void;
|
|
108
|
+
redrawVideoEffects(): Promise<void>;
|
|
108
109
|
private drawDebugOverlay;
|
|
109
110
|
audioSyncAnchorChanged: () => void;
|
|
110
111
|
}
|
|
@@ -36,6 +36,7 @@ export declare const videoIteratorManager: ({ delayPlaybackHandleIfNotPremountin
|
|
|
36
36
|
};
|
|
37
37
|
} | null;
|
|
38
38
|
drawFrame: (frame: WrappedCanvas) => Promise<void>;
|
|
39
|
+
redrawCurrentFrame: () => Promise<void>;
|
|
39
40
|
getFramesRendered: () => number;
|
|
40
41
|
}>;
|
|
41
42
|
export type VideoIteratorManager = Awaited<ReturnType<typeof videoIteratorManager>>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remotion/media",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.464",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"module": "dist/esm/index.mjs",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"mediabunny": "1.45.0",
|
|
26
|
-
"remotion": "4.0.
|
|
26
|
+
"remotion": "4.0.464",
|
|
27
27
|
"zod": "4.3.6"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"react-dom": ">=16.8.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
34
|
+
"@remotion/eslint-config-internal": "4.0.464",
|
|
35
35
|
"@vitest/browser-webdriverio": "4.0.9",
|
|
36
36
|
"eslint": "9.19.0",
|
|
37
37
|
"react": "19.2.3",
|