@remotion/webcodecs 4.0.304 → 4.0.306

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.
Files changed (48) hide show
  1. package/dist/audio-decoder.d.ts +15 -10
  2. package/dist/audio-decoder.js +49 -52
  3. package/dist/audio-encoder.d.ts +5 -5
  4. package/dist/audio-encoder.js +20 -42
  5. package/dist/convert-encoded-chunk.d.ts +1 -1
  6. package/dist/convert-encoded-chunk.js +2 -5
  7. package/dist/convert-media.js +2 -2
  8. package/dist/copy-audio-track.d.ts +11 -0
  9. package/dist/copy-audio-track.js +31 -0
  10. package/dist/copy-video-track.d.ts +11 -0
  11. package/dist/copy-video-track.js +32 -0
  12. package/dist/create/event-emitter.d.ts +0 -1
  13. package/dist/create/iso-base-media/create-iso-base-media.js +3 -3
  14. package/dist/create/iso-base-media/example-stts.js +620 -620
  15. package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.js +3 -1
  16. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.js +1 -1
  17. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.js +3 -2
  18. package/dist/create/matroska/create-matroska-media.js +1 -1
  19. package/dist/create/progress-tracker.d.ts +0 -2
  20. package/dist/create/progress-tracker.js +3 -20
  21. package/dist/esm/index.mjs +583 -496
  22. package/dist/get-wave-audio-decoder.d.ts +6 -1
  23. package/dist/get-wave-audio-decoder.js +16 -11
  24. package/dist/io-manager/io-synchronizer.d.ts +6 -13
  25. package/dist/io-manager/io-synchronizer.js +31 -72
  26. package/dist/io-manager/make-timeout-promise.d.ts +1 -1
  27. package/dist/io-manager/make-timeout-promise.js +8 -4
  28. package/dist/on-audio-track.d.ts +2 -2
  29. package/dist/on-audio-track.js +15 -150
  30. package/dist/on-frame.d.ts +2 -4
  31. package/dist/on-frame.js +8 -9
  32. package/dist/on-video-track.d.ts +2 -2
  33. package/dist/on-video-track.js +18 -129
  34. package/dist/processing-queue.d.ts +19 -0
  35. package/dist/processing-queue.js +47 -0
  36. package/dist/reencode-audio-track.d.ts +18 -0
  37. package/dist/reencode-audio-track.js +164 -0
  38. package/dist/reencode-video-track.d.ts +19 -0
  39. package/dist/reencode-video-track.js +151 -0
  40. package/dist/sort-video-frames.d.ts +4 -3
  41. package/dist/sort-video-frames.js +7 -3
  42. package/dist/video-decoder.d.ts +14 -8
  43. package/dist/video-decoder.js +37 -72
  44. package/dist/video-encoder.d.ts +6 -5
  45. package/dist/video-encoder.js +16 -40
  46. package/dist/wav-audio-encoder.d.ts +4 -1
  47. package/dist/wav-audio-encoder.js +3 -2
  48. package/package.json +5 -5
@@ -17,7 +17,9 @@ const createStbl = ({ samplePositions, codecSpecificData, isVideo, }) => {
17
17
  // The sample entries are ordered by time stamps; therefore, the deltas are all nonnegative.
18
18
  // For the other tables, there doesn't seem to be a requirement for them to be sorted
19
19
  // -> ordering the sample positions by dts
20
- const sorted = samplePositions.slice().sort((a, b) => a.dts - b.dts);
20
+ const sorted = samplePositions
21
+ .slice()
22
+ .sort((a, b) => a.decodingTimestamp - b.decodingTimestamp);
21
23
  return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
22
24
  (0, primitives_1.stringsToUint8Array)('stbl'),
23
25
  (0, create_avc1_1.createStsdData)(codecSpecificData),
@@ -10,7 +10,7 @@ const makeEntry = (entry) => {
10
10
  ]);
11
11
  };
12
12
  const createCttsBox = (samplePositions) => {
13
- const offsets = samplePositions.map((s) => s.cts - s.dts);
13
+ const offsets = samplePositions.map((s) => s.timestamp - s.decodingTimestamp);
14
14
  const entries = [];
15
15
  let lastOffset = null;
16
16
  for (const offset of offsets) {
@@ -18,9 +18,10 @@ const createSttsAtom = (samplePositions) => {
18
18
  // TODO: Why does 0 appear here?
19
19
  if (a[i].duration === undefined || a[i].duration === 0) {
20
20
  if (a[i + 1] === undefined) {
21
- return a[i].dts - (a[i - 1]?.dts ?? a[i].dts);
21
+ return (a[i].decodingTimestamp -
22
+ (a[i - 1]?.decodingTimestamp ?? a[i].decodingTimestamp));
22
23
  }
23
- return a[i + 1].dts - a[i].dts;
24
+ return a[i + 1].decodingTimestamp - a[i].decodingTimestamp;
24
25
  }
25
26
  return a[i].duration;
26
27
  });
@@ -88,7 +88,7 @@ const createMatroskaMedia = async ({ writer, onBytesProgress, onMillisecondsProg
88
88
  // In Safari, samples can arrive out of order, e.g public/bigbuckbunny.mp4
89
89
  // Therefore, only updating track number progress if it is a keyframe
90
90
  // to allow for timestamps to be lower than the previous one
91
- progressTracker.setPossibleLowestTimestamp(Math.min(chunk.timestamp, chunk.cts ?? Infinity, chunk.dts ?? Infinity));
91
+ progressTracker.setPossibleLowestTimestamp(Math.min(chunk.timestamp, chunk.decodingTimestamp ?? Infinity));
92
92
  const smallestProgress = progressTracker.getSmallestProgress();
93
93
  if (!currentCluster.shouldMakeNewCluster({
94
94
  newT: smallestProgress,
@@ -2,8 +2,6 @@ export declare const makeProgressTracker: () => {
2
2
  registerTrack: (trackNumber: number) => void;
3
3
  getSmallestProgress: () => number;
4
4
  updateTrackProgress: (trackNumber: number, progress: number) => void;
5
- waitForProgress: () => Promise<void>;
6
- getStartingTimestamp: () => number;
7
5
  setPossibleLowestTimestamp: (timestamp: number) => void;
8
6
  };
9
7
  export type ProgressTracker = ReturnType<typeof makeProgressTracker>;
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeProgressTracker = void 0;
4
4
  const event_emitter_1 = require("./event-emitter");
5
- const with_resolvers_1 = require("./with-resolvers");
6
5
  // Make sure to distinguish null and undefined here
7
6
  const makeProgressTracker = () => {
8
7
  const trackNumberProgresses = {};
@@ -16,13 +15,7 @@ const makeProgressTracker = () => {
16
15
  startingTimestamp = Math.min(startingTimestamp, timestamp);
17
16
  }
18
17
  };
19
- const getStartingTimestamp = () => {
20
- if (startingTimestamp === null) {
21
- throw new Error('No starting timestamp');
22
- }
23
- return startingTimestamp;
24
- };
25
- const calculateSmallestProgress = () => {
18
+ const getSmallestProgress = () => {
26
19
  const progressValues = Object.values(trackNumberProgresses).map((p) => {
27
20
  if (p !== null) {
28
21
  return p;
@@ -41,26 +34,16 @@ const makeProgressTracker = () => {
41
34
  registerTrack: (trackNumber) => {
42
35
  trackNumberProgresses[trackNumber] = null;
43
36
  },
44
- getSmallestProgress: calculateSmallestProgress,
37
+ getSmallestProgress,
45
38
  updateTrackProgress: (trackNumber, progress) => {
46
39
  if (trackNumberProgresses[trackNumber] === undefined) {
47
40
  throw new Error(`Tried to update progress for a track that was not registered: ${trackNumber}`);
48
41
  }
49
42
  trackNumberProgresses[trackNumber] = progress;
50
43
  eventEmitter.dispatchEvent('progress', {
51
- smallestProgress: calculateSmallestProgress(),
44
+ smallestProgress: getSmallestProgress(),
52
45
  });
53
46
  },
54
- waitForProgress: () => {
55
- const { promise, resolve } = (0, with_resolvers_1.withResolvers)();
56
- const on = () => {
57
- eventEmitter.removeEventListener('progress', on);
58
- resolve();
59
- };
60
- eventEmitter.addEventListener('progress', on);
61
- return promise;
62
- },
63
- getStartingTimestamp,
64
47
  setPossibleLowestTimestamp,
65
48
  };
66
49
  };