@remotion/webcodecs 4.0.329 → 4.0.330

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.
@@ -5617,6 +5617,8 @@ var internalExtractFrames = ({
5617
5617
  };
5618
5618
  signal?.addEventListener("abort", abortListener, { once: true });
5619
5619
  let dur = null;
5620
+ let lastFrame;
5621
+ let lastFrameEmitted;
5620
5622
  parseMediaOnWebWorker({
5621
5623
  src: new URL(src, window.location.href),
5622
5624
  acknowledgeRemotionLicense,
@@ -5636,7 +5638,6 @@ var internalExtractFrames = ({
5636
5638
  throw new Error("expected at least one timestamp to extract but found zero");
5637
5639
  }
5638
5640
  controller.seek(timestampTargets[0]);
5639
- let lastFrame;
5640
5641
  const decoder = createVideoDecoder({
5641
5642
  onFrame: (frame) => {
5642
5643
  Log.trace(logLevel, "Received frame with timestamp", frame.timestamp);
@@ -5653,12 +5654,14 @@ var internalExtractFrames = ({
5653
5654
  }
5654
5655
  if (expectedFrames[0] + 6667 < frame.timestamp && lastFrame) {
5655
5656
  onFrame(lastFrame);
5657
+ lastFrameEmitted = lastFrame;
5656
5658
  expectedFrames.shift();
5657
5659
  lastFrame = frame;
5658
5660
  return;
5659
5661
  }
5660
5662
  expectedFrames.shift();
5661
5663
  onFrame(frame);
5664
+ lastFrameEmitted = frame;
5662
5665
  lastFrame = frame;
5663
5666
  },
5664
5667
  onError: (e) => {
@@ -5710,7 +5713,7 @@ var internalExtractFrames = ({
5710
5713
  return async () => {
5711
5714
  await doProcess();
5712
5715
  await decoder.flush();
5713
- if (lastFrame) {
5716
+ if (lastFrame && lastFrameEmitted !== lastFrame) {
5714
5717
  lastFrame.close();
5715
5718
  }
5716
5719
  };
@@ -5725,6 +5728,9 @@ var internalExtractFrames = ({
5725
5728
  resolvers.resolve();
5726
5729
  }
5727
5730
  }).finally(() => {
5731
+ if (lastFrame && lastFrameEmitted !== lastFrame) {
5732
+ lastFrame.close();
5733
+ }
5728
5734
  signal?.removeEventListener("abort", abortListener);
5729
5735
  });
5730
5736
  return resolvers.promise;
@@ -16,6 +16,8 @@ const internalExtractFrames = ({ src, onFrame, signal, timestampsInSeconds, ackn
16
16
  };
17
17
  signal?.addEventListener('abort', abortListener, { once: true });
18
18
  let dur = null;
19
+ let lastFrame;
20
+ let lastFrameEmitted;
19
21
  (0, worker_1.parseMediaOnWebWorker)({
20
22
  src: new URL(src, window.location.href),
21
23
  acknowledgeRemotionLicense,
@@ -37,7 +39,6 @@ const internalExtractFrames = ({ src, onFrame, signal, timestampsInSeconds, ackn
37
39
  throw new Error('expected at least one timestamp to extract but found zero');
38
40
  }
39
41
  controller.seek(timestampTargets[0]);
40
- let lastFrame;
41
42
  const decoder = (0, create_video_decoder_1.createVideoDecoder)({
42
43
  onFrame: (frame) => {
43
44
  log_1.Log.trace(logLevel, 'Received frame with timestamp', frame.timestamp);
@@ -57,12 +58,14 @@ const internalExtractFrames = ({ src, onFrame, signal, timestampsInSeconds, ackn
57
58
  // Solution: We allow a 10.000ms - 3.333ms = 6.667ms difference between the requested timestamp and the actual timestamp
58
59
  if (expectedFrames[0] + 6667 < frame.timestamp && lastFrame) {
59
60
  onFrame(lastFrame);
61
+ lastFrameEmitted = lastFrame;
60
62
  expectedFrames.shift();
61
63
  lastFrame = frame;
62
64
  return;
63
65
  }
64
66
  expectedFrames.shift();
65
67
  onFrame(frame);
68
+ lastFrameEmitted = frame;
66
69
  lastFrame = frame;
67
70
  },
68
71
  onError: (e) => {
@@ -117,7 +120,7 @@ const internalExtractFrames = ({ src, onFrame, signal, timestampsInSeconds, ackn
117
120
  return async () => {
118
121
  await doProcess();
119
122
  await decoder.flush();
120
- if (lastFrame) {
123
+ if (lastFrame && lastFrameEmitted !== lastFrame) {
121
124
  lastFrame.close();
122
125
  }
123
126
  };
@@ -136,6 +139,9 @@ const internalExtractFrames = ({ src, onFrame, signal, timestampsInSeconds, ackn
136
139
  }
137
140
  })
138
141
  .finally(() => {
142
+ if (lastFrame && lastFrameEmitted !== lastFrame) {
143
+ lastFrame.close();
144
+ }
139
145
  signal?.removeEventListener('abort', abortListener);
140
146
  });
141
147
  return resolvers.promise;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/webcodecs",
3
- "version": "4.0.329",
3
+ "version": "4.0.330",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "module": "dist/esm/index.mjs",
@@ -19,8 +19,8 @@
19
19
  "author": "Jonny Burger <jonny@remotion.dev>",
20
20
  "license": "Remotion License (See https://remotion.dev/docs/webcodecs#license)",
21
21
  "dependencies": {
22
- "@remotion/licensing": "4.0.329",
23
- "@remotion/media-parser": "4.0.329"
22
+ "@remotion/media-parser": "4.0.330",
23
+ "@remotion/licensing": "4.0.330"
24
24
  },
25
25
  "peerDependencies": {},
26
26
  "devDependencies": {
@@ -29,8 +29,8 @@
29
29
  "vite": "5.4.19",
30
30
  "@playwright/test": "1.51.1",
31
31
  "eslint": "9.19.0",
32
- "@remotion/example-videos": "4.0.329",
33
- "@remotion/eslint-config-internal": "4.0.329"
32
+ "@remotion/eslint-config-internal": "4.0.330",
33
+ "@remotion/example-videos": "4.0.330"
34
34
  },
35
35
  "keywords": [],
36
36
  "publishConfig": {