@remotion/media 4.0.508 → 4.0.509

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/dist/caches.d.ts CHANGED
@@ -90,8 +90,8 @@ export declare const makeMediaCache: () => {
90
90
  totalSize: number;
91
91
  };
92
92
  isDisposed: () => boolean;
93
- queueFrameExtraction: <T>(extract: () => Promise<T>) => Promise<T>;
94
- queueAudioExtraction: <T>(extract: () => Promise<T>) => Promise<T>;
93
+ queueFrameExtraction: <T>(fn: () => T | Promise<T>) => Promise<T>;
94
+ queueAudioExtraction: <T>(fn: () => T | Promise<T>) => Promise<T>;
95
95
  dispose: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
96
96
  };
97
97
  export type MediaCache = ReturnType<typeof makeMediaCache>;
@@ -185,8 +185,8 @@ export declare const globalMediaCache: {
185
185
  totalSize: number;
186
186
  };
187
187
  isDisposed: () => boolean;
188
- queueFrameExtraction: <T>(extract: () => Promise<T>) => Promise<T>;
189
- queueAudioExtraction: <T>(extract: () => Promise<T>) => Promise<T>;
188
+ queueFrameExtraction: <T>(fn: () => T | Promise<T>) => Promise<T>;
189
+ queueAudioExtraction: <T>(fn: () => T | Promise<T>) => Promise<T>;
190
190
  dispose: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
191
191
  };
192
192
  export declare const keyframeManager: {
@@ -352,8 +352,8 @@ export declare const useRenderMediaCache: (logLevel: "error" | "info" | "trace"
352
352
  totalSize: number;
353
353
  };
354
354
  isDisposed: () => boolean;
355
- queueFrameExtraction: <T>(extract: () => Promise<T>) => Promise<T>;
356
- queueAudioExtraction: <T>(extract: () => Promise<T>) => Promise<T>;
355
+ queueFrameExtraction: <T>(fn: () => T | Promise<T>) => Promise<T>;
356
+ queueAudioExtraction: <T>(fn: () => T | Promise<T>) => Promise<T>;
357
357
  dispose: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
358
358
  };
359
359
  export { getMaxVideoCacheSize };
@@ -1845,8 +1845,7 @@ class MediaPlayer {
1845
1845
  this.getEffectChainState = getEffectChainState;
1846
1846
  if (canvas) {
1847
1847
  const context = canvas.getContext("2d", {
1848
- alpha: true,
1849
- desynchronized: true
1848
+ alpha: true
1850
1849
  });
1851
1850
  if (!context) {
1852
1851
  throw new Error("Could not get 2D context from canvas");
@@ -2844,6 +2843,20 @@ import { Internals as Internals15 } from "remotion";
2844
2843
  // src/audio-extraction/audio-manager.ts
2845
2844
  import { Internals as Internals10 } from "remotion";
2846
2845
 
2846
+ // src/serialized-queue.ts
2847
+ var makeSerializedQueue = () => {
2848
+ let tail = Promise.resolve(undefined);
2849
+ return (fn) => {
2850
+ const result = tail.then(() => fn());
2851
+ tail = result.then(() => {
2852
+ return;
2853
+ }, () => {
2854
+ return;
2855
+ });
2856
+ return result;
2857
+ };
2858
+ };
2859
+
2847
2860
  // src/audio-extraction/audio-iterator.ts
2848
2861
  import { Internals as Internals9 } from "remotion";
2849
2862
 
@@ -3192,7 +3205,7 @@ var makeAudioManager = ({
3192
3205
  disposed = true;
3193
3206
  clearAll();
3194
3207
  };
3195
- let queue = Promise.resolve(undefined);
3208
+ const enqueue = makeSerializedQueue();
3196
3209
  return {
3197
3210
  getIterator: ({
3198
3211
  src,
@@ -3203,7 +3216,7 @@ var makeAudioManager = ({
3203
3216
  logLevel,
3204
3217
  maxCacheSize
3205
3218
  }) => {
3206
- queue = queue.then(() => getIterator({
3219
+ return enqueue(() => getIterator({
3207
3220
  src,
3208
3221
  timeInSeconds,
3209
3222
  audioSampleSink,
@@ -3212,7 +3225,6 @@ var makeAudioManager = ({
3212
3225
  logLevel,
3213
3226
  maxCacheSize
3214
3227
  }));
3215
- return queue;
3216
3228
  },
3217
3229
  getCacheStats,
3218
3230
  getIteratorMostInThePast,
@@ -3634,7 +3646,7 @@ var makeKeyframeBank = async ({
3634
3646
  const getLastUsed = () => {
3635
3647
  return lastUsed;
3636
3648
  };
3637
- let queue = Promise.resolve(undefined);
3649
+ const enqueue = makeSerializedQueue();
3638
3650
  const firstFrame = await sampleIterator.next();
3639
3651
  if (!firstFrame.value) {
3640
3652
  throw new Error("No first frame found");
@@ -3699,18 +3711,16 @@ var makeKeyframeBank = async ({
3699
3711
  const keyframeBank = {
3700
3712
  getFrameFromTimestamp: (timestamp, fps) => {
3701
3713
  pendingOperations++;
3702
- queue = queue.then(() => getFrameFromTimestamp(timestamp, fps)).finally(() => {
3714
+ return enqueue(() => getFrameFromTimestamp(timestamp, fps)).finally(() => {
3703
3715
  pendingOperations--;
3704
3716
  });
3705
- return queue;
3706
3717
  },
3707
3718
  prepareForDeletion,
3708
3719
  hasTimestampInSecond: (timestamp, fps) => {
3709
3720
  pendingOperations++;
3710
- queue = queue.then(() => hasTimestampInSecond(timestamp, fps)).finally(() => {
3721
+ return enqueue(() => hasTimestampInSecond(timestamp, fps)).finally(() => {
3711
3722
  pendingOperations--;
3712
3723
  });
3713
- return queue;
3714
3724
  },
3715
3725
  addFrame,
3716
3726
  deleteFramesBeforeTimestamp,
@@ -3958,7 +3968,7 @@ var makeKeyframeManager = ({
3958
3968
  disposed = true;
3959
3969
  clearAll(logLevel);
3960
3970
  };
3961
- let queue = Promise.resolve(undefined);
3971
+ const enqueue = makeSerializedQueue();
3962
3972
  return {
3963
3973
  requestKeyframeBank: ({
3964
3974
  timestamp,
@@ -3968,7 +3978,7 @@ var makeKeyframeManager = ({
3968
3978
  maxCacheSize,
3969
3979
  fps
3970
3980
  }) => {
3971
- queue = queue.then(() => requestKeyframeBank({
3981
+ return enqueue(() => requestKeyframeBank({
3972
3982
  timestamp,
3973
3983
  videoSampleSink,
3974
3984
  src,
@@ -3976,7 +3986,6 @@ var makeKeyframeManager = ({
3976
3986
  maxCacheSize,
3977
3987
  fps
3978
3988
  }));
3979
- return queue;
3980
3989
  },
3981
3990
  getCacheStats,
3982
3991
  clearAll,
@@ -4012,8 +4021,8 @@ var makeMediaCache = () => {
4012
4021
  });
4013
4022
  managerInstances.keyframe = keyframeManagerInstance;
4014
4023
  managerInstances.audio = audioManagerInstance;
4015
- let frameExtractionQueue = Promise.resolve(undefined);
4016
- let audioExtractionQueue = Promise.resolve(undefined);
4024
+ const queueFrameExtraction = makeSerializedQueue();
4025
+ const queueAudioExtraction = makeSerializedQueue();
4017
4026
  let disposed = false;
4018
4027
  return {
4019
4028
  sinkManager,
@@ -4021,20 +4030,8 @@ var makeMediaCache = () => {
4021
4030
  audioManager: audioManagerInstance,
4022
4031
  getTotalCacheStats: getCacheStats,
4023
4032
  isDisposed: () => disposed,
4024
- queueFrameExtraction: (extract) => {
4025
- const extraction = frameExtractionQueue.then(extract);
4026
- frameExtractionQueue = extraction.catch(() => {
4027
- return;
4028
- });
4029
- return extraction;
4030
- },
4031
- queueAudioExtraction: (extract) => {
4032
- const extraction = audioExtractionQueue.then(extract);
4033
- audioExtractionQueue = extraction.catch(() => {
4034
- return;
4035
- });
4036
- return extraction;
4037
- },
4033
+ queueFrameExtraction,
4034
+ queueAudioExtraction,
4038
4035
  dispose: (logLevel) => {
4039
4036
  if (disposed) {
4040
4037
  return;
@@ -5566,8 +5563,7 @@ var VideoForPreviewAssertedShowing = ({
5566
5563
  canvas.width = cached.width;
5567
5564
  canvas.height = cached.height;
5568
5565
  const ctx = canvas.getContext("2d", {
5569
- alpha: true,
5570
- desynchronized: true
5566
+ alpha: true
5571
5567
  });
5572
5568
  if (!ctx) {
5573
5569
  return;
@@ -106,8 +106,8 @@ export declare const extractFrameAndAudio: ({ src, timeInSeconds, logLevel, dura
106
106
  totalSize: number;
107
107
  };
108
108
  isDisposed: () => boolean;
109
- queueFrameExtraction: <T>(extract: () => Promise<T>) => Promise<T>;
110
- queueAudioExtraction: <T>(extract: () => Promise<T>) => Promise<T>;
109
+ queueFrameExtraction: <T>(fn: () => T | Promise<T>) => Promise<T>;
110
+ queueAudioExtraction: <T>(fn: () => T | Promise<T>) => Promise<T>;
111
111
  dispose: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
112
112
  };
113
113
  }) => Promise<ExtractFrameViaBroadcastChannelResult>;
@@ -0,0 +1 @@
1
+ export declare const makeSerializedQueue: () => <T>(fn: () => T | Promise<T>) => Promise<T>;
@@ -126,8 +126,8 @@ export declare const extractFrameViaBroadcastChannel: ({ src, timeInSeconds, log
126
126
  totalSize: number;
127
127
  };
128
128
  isDisposed: () => boolean;
129
- queueFrameExtraction: <T>(extract: () => Promise<T>) => Promise<T>;
130
- queueAudioExtraction: <T>(extract: () => Promise<T>) => Promise<T>;
129
+ queueFrameExtraction: <T>(fn: () => T | Promise<T>) => Promise<T>;
130
+ queueAudioExtraction: <T>(fn: () => T | Promise<T>) => Promise<T>;
131
131
  dispose: (logLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
132
132
  };
133
133
  }) => Promise<ExtractFrameViaBroadcastChannelResult>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/media",
3
- "version": "4.0.508",
3
+ "version": "4.0.509",
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.50.8",
26
- "remotion": "4.0.508",
26
+ "remotion": "4.0.509",
27
27
  "zod": "4.4.3"
28
28
  },
29
29
  "peerDependencies": {
@@ -31,8 +31,8 @@
31
31
  "react-dom": ">=16.8.0"
32
32
  },
33
33
  "devDependencies": {
34
- "@remotion/eslint-config-internal": "4.0.508",
35
- "@remotion/player": "4.0.508",
34
+ "@remotion/eslint-config-internal": "4.0.509",
35
+ "@remotion/player": "4.0.509",
36
36
  "@vitest/browser-webdriverio": "4.0.9",
37
37
  "eslint": "9.19.0",
38
38
  "react": "19.2.3",