@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;
@@ -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 drawFrame = async (frame) => {
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.sequenceStyleSchema
5292
+ ...Internals20.sequenceVisualStyleSchema
5260
5293
  };
5261
5294
  var InnerVideo = ({
5262
5295
  src,
@@ -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.463",
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.463",
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.463",
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",