@remotion/media-parser 4.0.317 → 4.0.319

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 (39) hide show
  1. package/dist/containers/avc/parse-avc.js +5 -1
  2. package/dist/containers/flac/parse-flac-frame.js +5 -1
  3. package/dist/containers/iso-base-media/get-moov-atom.js +5 -1
  4. package/dist/containers/iso-base-media/mfra/get-mfra-atom.js +5 -1
  5. package/dist/containers/iso-base-media/mfra/get-mfro-atom.js +5 -1
  6. package/dist/containers/iso-base-media/moov/mvhd.js +10 -2
  7. package/dist/containers/iso-base-media/parse-icc-profile.js +10 -2
  8. package/dist/containers/riff/seek/fetch-idx1.js +5 -1
  9. package/dist/containers/transport-stream/adts-header.js +5 -1
  10. package/dist/containers/wav/parse-fact.d.ts +5 -0
  11. package/dist/containers/wav/parse-fact.js +18 -0
  12. package/dist/containers/wav/parse-fmt.js +9 -5
  13. package/dist/containers/wav/parse-wav.js +4 -0
  14. package/dist/containers/wav/subformats.d.ts +4 -0
  15. package/dist/containers/wav/subformats.js +17 -0
  16. package/dist/containers/wav/types.d.ts +5 -1
  17. package/dist/containers/webm/av1-codec-private.js +5 -1
  18. package/dist/containers/webm/description.js +5 -1
  19. package/dist/containers/webm/get-sample-from-block.js +5 -1
  20. package/dist/containers/webm/make-track.js +10 -2
  21. package/dist/containers/webm/seek/fetch-web-cues.js +5 -1
  22. package/dist/esm/index.mjs +237 -78
  23. package/dist/esm/universal.mjs +3 -3
  24. package/dist/esm/web.mjs +3 -3
  25. package/dist/esm/worker-server-entry.mjs +236 -77
  26. package/dist/esm/worker-web-entry.mjs +236 -77
  27. package/dist/index.d.ts +5 -1
  28. package/dist/iterator/buffer-iterator.d.ts +6 -1
  29. package/dist/iterator/buffer-iterator.js +25 -25
  30. package/dist/iterator/buffer-manager.d.ts +5 -3
  31. package/dist/iterator/buffer-manager.js +24 -23
  32. package/dist/iterator/polyfilled-arraybuffer.d.ts +6 -0
  33. package/dist/iterator/polyfilled-arraybuffer.js +21 -0
  34. package/dist/readers/from-fetch.js +3 -4
  35. package/dist/remotion-license-acknowledge.js +1 -2
  36. package/dist/state/parser-state.js +5 -1
  37. package/dist/version.d.ts +1 -1
  38. package/dist/version.js +1 -1
  39. package/package.json +4 -4
@@ -243,6 +243,9 @@ var makeFetchRequest = async ({
243
243
  });
244
244
  const contentRange = res.headers.get("content-range");
245
245
  const parsedContentRange = contentRange ? parseContentRange(contentRange) : null;
246
+ if (!res.ok) {
247
+ throw new Error(`Server returned status code ${res.status} for ${resolvedUrl} and range ${requestedRange}`);
248
+ }
246
249
  const { supportsContentRange } = validateContentRangeAndDetectIfSupported({
247
250
  requestedRange,
248
251
  parsedContentRange,
@@ -253,9 +256,6 @@ var makeFetchRequest = async ({
253
256
  ownController.abort(new MediaParserAbortError("Aborted by user"));
254
257
  }, { once: true });
255
258
  }
256
- if (res.status.toString().startsWith("4") || res.status.toString().startsWith("5")) {
257
- throw new Error(`Server returned status code ${res.status} for ${resolvedUrl} and range ${requestedRange}`);
258
- }
259
259
  const contentDisposition = res.headers.get("content-disposition");
260
260
  const name = contentDisposition?.match(/filename="([^"]+)"/)?.[1];
261
261
  const { contentLength, needsContentRange, reader } = await getLengthAndReader({
@@ -2351,6 +2351,26 @@ var detectFileType = (data) => {
2351
2351
  return { type: "unknown" };
2352
2352
  };
2353
2353
 
2354
+ // src/iterator/polyfilled-arraybuffer.ts
2355
+ class ResizableBuffer {
2356
+ buffer;
2357
+ uintarray;
2358
+ constructor(buffer) {
2359
+ this.buffer = buffer;
2360
+ this.uintarray = new Uint8Array(buffer);
2361
+ }
2362
+ resize(newLength) {
2363
+ if (typeof this.buffer.resize === "function") {
2364
+ this.buffer.resize(newLength);
2365
+ } else {
2366
+ const newBuffer = new ArrayBuffer(newLength);
2367
+ new Uint8Array(newBuffer).set(new Uint8Array(this.buffer).subarray(0, Math.min(this.buffer.byteLength, newLength)));
2368
+ this.buffer = newBuffer;
2369
+ this.uintarray = new Uint8Array(newBuffer);
2370
+ }
2371
+ }
2372
+ }
2373
+
2354
2374
  // src/iterator/buffer-manager.ts
2355
2375
  var makeBufferWithMaxBytes = (initialData, maxBytes) => {
2356
2376
  const maxByteLength = Math.min(maxBytes, 2 ** 31);
@@ -2358,12 +2378,12 @@ var makeBufferWithMaxBytes = (initialData, maxBytes) => {
2358
2378
  const buf = new ArrayBuffer(initialData.byteLength, {
2359
2379
  maxByteLength
2360
2380
  });
2361
- return buf;
2381
+ return new ResizableBuffer(buf);
2362
2382
  } catch (e) {
2363
2383
  if (e instanceof RangeError && maxBytes > 2 ** 27) {
2364
- return new ArrayBuffer(initialData.byteLength, {
2384
+ return new ResizableBuffer(new ArrayBuffer(initialData.byteLength, {
2365
2385
  maxByteLength: 2 ** 27
2366
- });
2386
+ }));
2367
2387
  }
2368
2388
  throw e;
2369
2389
  }
@@ -2371,17 +2391,17 @@ var makeBufferWithMaxBytes = (initialData, maxBytes) => {
2371
2391
  var bufferManager = ({
2372
2392
  initialData,
2373
2393
  maxBytes,
2374
- counter
2394
+ counter,
2395
+ logLevel
2375
2396
  }) => {
2376
2397
  const buf = makeBufferWithMaxBytes(initialData, maxBytes);
2377
- if (!buf.resize) {
2378
- throw new Error("`ArrayBuffer.resize` is not supported in this Runtime. On the server: Use at least Node.js 20 or Bun. In the browser: Chrome 111, Edge 111, Safari 16.4, Firefox 128, Opera 111");
2398
+ if (!buf.buffer.resize) {
2399
+ Log.warn(logLevel, "`ArrayBuffer.resize` is not supported in this Runtime. Using slow polyfill.");
2379
2400
  }
2380
- let uintArray = new Uint8Array(buf);
2381
- uintArray.set(initialData);
2382
- let view = new DataView(uintArray.buffer);
2401
+ buf.uintarray.set(initialData);
2402
+ let view = new DataView(buf.uintarray.buffer);
2383
2403
  const destroy = () => {
2384
- uintArray = new Uint8Array(0);
2404
+ buf.uintarray = new Uint8Array(0);
2385
2405
  buf.resize(0);
2386
2406
  };
2387
2407
  const flushBytesRead = (force, mode) => {
@@ -2393,11 +2413,11 @@ var bufferManager = ({
2393
2413
  return { bytesRemoved: 0, removedData: null };
2394
2414
  }
2395
2415
  counter.discardBytes(bytesToRemove);
2396
- const removedData = mode === "download" ? uintArray.slice(0, bytesToRemove) : null;
2397
- const newData = uintArray.slice(bytesToRemove);
2398
- uintArray.set(newData);
2416
+ const removedData = mode === "download" ? buf.uintarray.slice(0, bytesToRemove) : null;
2417
+ const newData = buf.uintarray.slice(bytesToRemove);
2418
+ buf.uintarray.set(newData);
2399
2419
  buf.resize(newData.byteLength);
2400
- view = new DataView(uintArray.buffer);
2420
+ view = new DataView(buf.uintarray.buffer);
2401
2421
  return { bytesRemoved: bytesToRemove, removedData };
2402
2422
  };
2403
2423
  const skipTo = (offset) => {
@@ -2413,7 +2433,7 @@ var bufferManager = ({
2413
2433
  counter.increment(offset - currentOffset);
2414
2434
  };
2415
2435
  const addData = (newData) => {
2416
- const oldLength = buf.byteLength;
2436
+ const oldLength = buf.buffer.byteLength;
2417
2437
  const newLength = oldLength + newData.byteLength;
2418
2438
  if (newLength < oldLength) {
2419
2439
  throw new Error("Cannot decrement size");
@@ -2422,22 +2442,22 @@ var bufferManager = ({
2422
2442
  throw new Error(`Exceeded maximum byte length ${maxBytes} with ${newLength}`);
2423
2443
  }
2424
2444
  buf.resize(newLength);
2425
- uintArray = new Uint8Array(buf);
2426
- uintArray.set(newData, oldLength);
2427
- view = new DataView(uintArray.buffer);
2445
+ buf.uintarray = new Uint8Array(buf.buffer);
2446
+ buf.uintarray.set(newData, oldLength);
2447
+ view = new DataView(buf.uintarray.buffer);
2428
2448
  };
2429
2449
  const replaceData = (newData, seekTo) => {
2430
2450
  buf.resize(newData.byteLength);
2431
- uintArray = new Uint8Array(buf);
2432
- uintArray.set(newData);
2433
- view = new DataView(uintArray.buffer);
2451
+ buf.uintarray = new Uint8Array(buf.buffer);
2452
+ buf.uintarray.set(newData);
2453
+ view = new DataView(buf.uintarray.buffer);
2434
2454
  counter.setDiscardedOffset(seekTo);
2435
2455
  counter.decrement(counter.getOffset());
2436
2456
  counter.increment(seekTo);
2437
2457
  };
2438
2458
  return {
2439
- view,
2440
- uintArray,
2459
+ getView: () => view,
2460
+ getUint8Array: () => buf.uintarray,
2441
2461
  destroy,
2442
2462
  addData,
2443
2463
  skipTo,
@@ -2476,17 +2496,21 @@ var makeOffsetCounter = (initial) => {
2476
2496
  };
2477
2497
 
2478
2498
  // src/iterator/buffer-iterator.ts
2479
- var getArrayBufferIterator = (initialData, maxBytes) => {
2499
+ var getArrayBufferIterator = ({
2500
+ initialData,
2501
+ maxBytes,
2502
+ logLevel
2503
+ }) => {
2480
2504
  const counter = makeOffsetCounter(0);
2481
2505
  const {
2482
- uintArray,
2483
- view,
2506
+ getUint8Array,
2507
+ getView,
2484
2508
  addData,
2485
2509
  destroy,
2486
2510
  removeBytesRead,
2487
2511
  skipTo,
2488
2512
  replaceData
2489
- } = bufferManager({ initialData, maxBytes, counter });
2513
+ } = bufferManager({ initialData, maxBytes, counter, logLevel });
2490
2514
  const startCheckpoint = () => {
2491
2515
  const checkpoint = counter.getOffset();
2492
2516
  return {
@@ -2496,7 +2520,7 @@ var getArrayBufferIterator = (initialData, maxBytes) => {
2496
2520
  };
2497
2521
  };
2498
2522
  const getSlice = (amount) => {
2499
- const value = uintArray.slice(counter.getDiscardedOffset(), counter.getDiscardedOffset() + amount);
2523
+ const value = getUint8Array().slice(counter.getDiscardedOffset(), counter.getDiscardedOffset() + amount);
2500
2524
  counter.increment(value.length);
2501
2525
  return value;
2502
2526
  };
@@ -2528,7 +2552,7 @@ var getArrayBufferIterator = (initialData, maxBytes) => {
2528
2552
  return str;
2529
2553
  };
2530
2554
  const getUint8 = () => {
2531
- const val = view.getUint8(counter.getDiscardedOffset());
2555
+ const val = getView().getUint8(counter.getDiscardedOffset());
2532
2556
  counter.increment(1);
2533
2557
  return val;
2534
2558
  };
@@ -2573,22 +2597,22 @@ var getArrayBufferIterator = (initialData, maxBytes) => {
2573
2597
  return lastInt;
2574
2598
  };
2575
2599
  const getUint32 = () => {
2576
- const val = view.getUint32(counter.getDiscardedOffset());
2600
+ const val = getView().getUint32(counter.getDiscardedOffset());
2577
2601
  counter.increment(4);
2578
2602
  return val;
2579
2603
  };
2580
2604
  const getSyncSafeInt32 = () => {
2581
- const val = view.getUint32(counter.getDiscardedOffset());
2605
+ const val = getView().getUint32(counter.getDiscardedOffset());
2582
2606
  counter.increment(4);
2583
2607
  return (val & 2130706432) >> 3 | (val & 8323072) >> 2 | (val & 32512) >> 1 | val & 127;
2584
2608
  };
2585
2609
  const getUint64 = (littleEndian = false) => {
2586
- const val = view.getBigUint64(counter.getDiscardedOffset(), littleEndian);
2610
+ const val = getView().getBigUint64(counter.getDiscardedOffset(), littleEndian);
2587
2611
  counter.increment(8);
2588
2612
  return val;
2589
2613
  };
2590
2614
  const getInt64 = (littleEndian = false) => {
2591
- const val = view.getBigInt64(counter.getDiscardedOffset(), littleEndian);
2615
+ const val = getView().getBigInt64(counter.getDiscardedOffset(), littleEndian);
2592
2616
  counter.increment(8);
2593
2617
  return val;
2594
2618
  };
@@ -2605,22 +2629,22 @@ var getArrayBufferIterator = (initialData, maxBytes) => {
2605
2629
  };
2606
2630
  };
2607
2631
  const getUint32Le = () => {
2608
- const val = view.getUint32(counter.getDiscardedOffset(), true);
2632
+ const val = getView().getUint32(counter.getDiscardedOffset(), true);
2609
2633
  counter.increment(4);
2610
2634
  return val;
2611
2635
  };
2612
2636
  const getInt32Le = () => {
2613
- const val = view.getInt32(counter.getDiscardedOffset(), true);
2637
+ const val = getView().getInt32(counter.getDiscardedOffset(), true);
2614
2638
  counter.increment(4);
2615
2639
  return val;
2616
2640
  };
2617
2641
  const getInt32 = () => {
2618
- const val = view.getInt32(counter.getDiscardedOffset());
2642
+ const val = getView().getInt32(counter.getDiscardedOffset());
2619
2643
  counter.increment(4);
2620
2644
  return val;
2621
2645
  };
2622
2646
  const bytesRemaining = () => {
2623
- return uintArray.byteLength - counter.getDiscardedOffset();
2647
+ return getUint8Array().byteLength - counter.getDiscardedOffset();
2624
2648
  };
2625
2649
  const readExpGolomb = () => {
2626
2650
  if (!bitReadingMode) {
@@ -2735,7 +2759,7 @@ var getArrayBufferIterator = (initialData, maxBytes) => {
2735
2759
  return new TextDecoder().decode(atom);
2736
2760
  },
2737
2761
  detectFileType: () => {
2738
- return detectFileType(uintArray);
2762
+ return detectFileType(getUint8Array());
2739
2763
  },
2740
2764
  getPaddedFourByteNumber,
2741
2765
  getMatroskaSegmentId: () => {
@@ -2813,36 +2837,36 @@ var getArrayBufferIterator = (initialData, maxBytes) => {
2813
2837
  return actualValue;
2814
2838
  },
2815
2839
  getInt8: () => {
2816
- const val = view.getInt8(counter.getDiscardedOffset());
2840
+ const val = getView().getInt8(counter.getDiscardedOffset());
2817
2841
  counter.increment(1);
2818
2842
  return val;
2819
2843
  },
2820
2844
  getUint16: () => {
2821
- const val = view.getUint16(counter.getDiscardedOffset());
2845
+ const val = getView().getUint16(counter.getDiscardedOffset());
2822
2846
  counter.increment(2);
2823
2847
  return val;
2824
2848
  },
2825
2849
  getUint16Le: () => {
2826
- const val = view.getUint16(counter.getDiscardedOffset(), true);
2850
+ const val = getView().getUint16(counter.getDiscardedOffset(), true);
2827
2851
  counter.increment(2);
2828
2852
  return val;
2829
2853
  },
2830
2854
  getUint24: () => {
2831
- const val1 = view.getUint8(counter.getDiscardedOffset());
2832
- const val2 = view.getUint8(counter.getDiscardedOffset() + 1);
2833
- const val3 = view.getUint8(counter.getDiscardedOffset() + 2);
2855
+ const val1 = getView().getUint8(counter.getDiscardedOffset());
2856
+ const val2 = getView().getUint8(counter.getDiscardedOffset() + 1);
2857
+ const val3 = getView().getUint8(counter.getDiscardedOffset() + 2);
2834
2858
  counter.increment(3);
2835
2859
  return val1 << 16 | val2 << 8 | val3;
2836
2860
  },
2837
2861
  getInt24: () => {
2838
- const val1 = view.getInt8(counter.getDiscardedOffset());
2839
- const val2 = view.getUint8(counter.getDiscardedOffset() + 1);
2840
- const val3 = view.getUint8(counter.getDiscardedOffset() + 2);
2862
+ const val1 = getView().getInt8(counter.getDiscardedOffset());
2863
+ const val2 = getView().getUint8(counter.getDiscardedOffset() + 1);
2864
+ const val3 = getView().getUint8(counter.getDiscardedOffset() + 2);
2841
2865
  counter.increment(3);
2842
2866
  return val1 << 16 | val2 << 8 | val3;
2843
2867
  },
2844
2868
  getInt16: () => {
2845
- const val = view.getInt16(counter.getDiscardedOffset());
2869
+ const val = getView().getInt16(counter.getDiscardedOffset());
2846
2870
  counter.increment(2);
2847
2871
  return val;
2848
2872
  },
@@ -2890,13 +2914,13 @@ var getArrayBufferIterator = (initialData, maxBytes) => {
2890
2914
  };
2891
2915
  },
2892
2916
  getFloat64: () => {
2893
- const val = view.getFloat64(counter.getDiscardedOffset());
2917
+ const val = getView().getFloat64(counter.getDiscardedOffset());
2894
2918
  counter.increment(8);
2895
2919
  return val;
2896
2920
  },
2897
2921
  readUntilNullTerminator,
2898
2922
  getFloat32: () => {
2899
- const val = view.getFloat32(counter.getDiscardedOffset());
2923
+ const val = getView().getFloat32(counter.getDiscardedOffset());
2900
2924
  counter.increment(4);
2901
2925
  return val;
2902
2926
  },
@@ -2916,7 +2940,11 @@ var getArrayBufferIterator = (initialData, maxBytes) => {
2916
2940
 
2917
2941
  // src/containers/webm/av1-codec-private.ts
2918
2942
  var parseAv1PrivateData = (data, colrAtom) => {
2919
- const iterator = getArrayBufferIterator(data, data.byteLength);
2943
+ const iterator = getArrayBufferIterator({
2944
+ initialData: data,
2945
+ maxBytes: data.byteLength,
2946
+ logLevel: "error"
2947
+ });
2920
2948
  iterator.startReadingBits();
2921
2949
  if (iterator.getBits(1) !== 1) {
2922
2950
  iterator.destroy();
@@ -3944,7 +3972,11 @@ var getAudioDescription = (track) => {
3944
3972
  throw new Error("Error parsing vorbis codec private");
3945
3973
  }
3946
3974
  const vorbisBooks = privateData.slice(offset);
3947
- const bufferIterator = getArrayBufferIterator(vorbisInfo.slice(0), vorbisInfo.length);
3975
+ const bufferIterator = getArrayBufferIterator({
3976
+ initialData: vorbisInfo.slice(0),
3977
+ maxBytes: vorbisInfo.length,
3978
+ logLevel: "error"
3979
+ });
3948
3980
  bufferIterator.getUint8();
3949
3981
  const vorbis = bufferIterator.getByteString(6, false);
3950
3982
  if (vorbis !== "vorbis") {
@@ -4045,7 +4077,11 @@ var getMatroskaVideoCodecString = ({
4045
4077
  }
4046
4078
  if (codec.value === "V_MPEGH/ISO/HEVC") {
4047
4079
  const priv = getPrivateData(track);
4048
- const iterator = getArrayBufferIterator(priv, priv.length);
4080
+ const iterator = getArrayBufferIterator({
4081
+ initialData: priv,
4082
+ maxBytes: priv.length,
4083
+ logLevel: "error"
4084
+ });
4049
4085
  return "hvc1." + getHvc1CodecString(iterator);
4050
4086
  }
4051
4087
  if (codec.value === "V_AV1") {
@@ -4117,7 +4153,11 @@ var getMatroskaAudioCodecString = (track) => {
4117
4153
  }
4118
4154
  if (codec.value === "A_AAC") {
4119
4155
  const priv = getPrivateData(track);
4120
- const iterator = getArrayBufferIterator(priv, priv.length);
4156
+ const iterator = getArrayBufferIterator({
4157
+ initialData: priv,
4158
+ maxBytes: priv.length,
4159
+ logLevel: "error"
4160
+ });
4121
4161
  iterator.startReadingBits();
4122
4162
  const profile = iterator.getBits(5);
4123
4163
  iterator.stopReadingBits();
@@ -6897,7 +6937,11 @@ var findEnd = (buffer) => {
6897
6937
  return null;
6898
6938
  };
6899
6939
  var inspect = (buffer, avcState) => {
6900
- const iterator = getArrayBufferIterator(buffer, buffer.byteLength);
6940
+ const iterator = getArrayBufferIterator({
6941
+ initialData: buffer,
6942
+ maxBytes: buffer.byteLength,
6943
+ logLevel: "error"
6944
+ });
6901
6945
  iterator.startReadingBits();
6902
6946
  iterator.getBits(1);
6903
6947
  const nal_ref_idc = iterator.getBits(2);
@@ -8927,7 +8971,11 @@ var emitSample = async ({
8927
8971
  data,
8928
8972
  offset
8929
8973
  }) => {
8930
- const iterator = getArrayBufferIterator(data, data.length);
8974
+ const iterator = getArrayBufferIterator({
8975
+ initialData: data,
8976
+ maxBytes: data.length,
8977
+ logLevel: "error"
8978
+ });
8931
8979
  const parsed = parseFrameHeader({ iterator, state });
8932
8980
  if (!parsed) {
8933
8981
  throw new Error("Invalid CRC");
@@ -9961,10 +10009,18 @@ var parseMvhd = ({
9961
10009
  const durationInUnits = version === 1 ? iterator.getUint64() : iterator.getUint32();
9962
10010
  const durationInSeconds = Number(durationInUnits) / timeScale;
9963
10011
  const rateArray = iterator.getSlice(4);
9964
- const rateView = getArrayBufferIterator(rateArray, rateArray.length);
10012
+ const rateView = getArrayBufferIterator({
10013
+ initialData: rateArray,
10014
+ maxBytes: rateArray.length,
10015
+ logLevel: "error"
10016
+ });
9965
10017
  const rate = rateView.getInt8() * 10 + rateView.getInt8() + rateView.getInt8() * 0.1 + rateView.getInt8() * 0.01;
9966
10018
  const volumeArray = iterator.getSlice(2);
9967
- const volumeView = getArrayBufferIterator(volumeArray, volumeArray.length);
10019
+ const volumeView = getArrayBufferIterator({
10020
+ initialData: volumeArray,
10021
+ maxBytes: volumeArray.length,
10022
+ logLevel: "error"
10023
+ });
9968
10024
  const volume = volumeView.getInt8() + volumeView.getInt8() * 0.1;
9969
10025
  iterator.discard(2);
9970
10026
  iterator.discard(4);
@@ -10066,7 +10122,11 @@ var parseAvcc = ({
10066
10122
 
10067
10123
  // src/containers/iso-base-media/parse-icc-profile.ts
10068
10124
  var parseIccProfile = (data) => {
10069
- const iterator = getArrayBufferIterator(data, data.length);
10125
+ const iterator = getArrayBufferIterator({
10126
+ initialData: data,
10127
+ maxBytes: data.length,
10128
+ logLevel: "error"
10129
+ });
10070
10130
  const size = iterator.getUint32();
10071
10131
  if (size !== data.length) {
10072
10132
  throw new Error("Invalid ICC profile size");
@@ -10111,7 +10171,11 @@ var parseIccProfile = (data) => {
10111
10171
  for (const entry of entries) {
10112
10172
  const found = data.slice(entry.offset, entry.offset + entry.size);
10113
10173
  if (entry.tag === "rXYZ" || entry.tag === "gXYZ" || entry.tag === "bXYZ" || entry.tag === "wtpt") {
10114
- const it = getArrayBufferIterator(found, found.length);
10174
+ const it = getArrayBufferIterator({
10175
+ initialData: found,
10176
+ maxBytes: found.length,
10177
+ logLevel: "error"
10178
+ });
10115
10179
  it.discard(4);
10116
10180
  const x = it.getInt32() / 65536;
10117
10181
  const y = it.getInt32() / 65536;
@@ -11489,7 +11553,11 @@ var getMoovAtom = async ({
11489
11553
  });
11490
11554
  return null;
11491
11555
  } : null;
11492
- const iterator = getArrayBufferIterator(new Uint8Array([]), state.contentLength - endOfMdat);
11556
+ const iterator = getArrayBufferIterator({
11557
+ initialData: new Uint8Array([]),
11558
+ maxBytes: state.contentLength - endOfMdat,
11559
+ logLevel: "error"
11560
+ });
11493
11561
  while (true) {
11494
11562
  const result = await reader.reader.read();
11495
11563
  if (result.value) {
@@ -14116,7 +14184,11 @@ var readAdtsHeader = (buffer) => {
14116
14184
  if (buffer.byteLength < 9) {
14117
14185
  return null;
14118
14186
  }
14119
- const iterator = getArrayBufferIterator(buffer, buffer.byteLength);
14187
+ const iterator = getArrayBufferIterator({
14188
+ initialData: buffer,
14189
+ maxBytes: buffer.byteLength,
14190
+ logLevel: "error"
14191
+ });
14120
14192
  iterator.startReadingBits();
14121
14193
  const bits = iterator.getBits(12);
14122
14194
  if (bits !== 4095) {
@@ -14678,6 +14750,68 @@ var parseData = ({
14678
14750
  return Promise.resolve(null);
14679
14751
  };
14680
14752
 
14753
+ // src/containers/wav/parse-fact.ts
14754
+ var parseFact = ({
14755
+ state
14756
+ }) => {
14757
+ const { iterator } = state;
14758
+ const size = iterator.getUint32Le();
14759
+ if (size !== 4) {
14760
+ throw new Error(`Expected size 4 for fact box, got ${size}`);
14761
+ }
14762
+ const numberOfSamplesPerChannel = iterator.getUint32Le();
14763
+ const factBox = {
14764
+ type: "wav-fact",
14765
+ numberOfSamplesPerChannel
14766
+ };
14767
+ state.structure.getWavStructure().boxes.push(factBox);
14768
+ return Promise.resolve(null);
14769
+ };
14770
+
14771
+ // src/containers/wav/subformats.ts
14772
+ var WMMEDIASUBTYPE_PCM = [
14773
+ 1,
14774
+ 0,
14775
+ 0,
14776
+ 0,
14777
+ 0,
14778
+ 0,
14779
+ 16,
14780
+ 0,
14781
+ 128,
14782
+ 0,
14783
+ 0,
14784
+ 170,
14785
+ 0,
14786
+ 56,
14787
+ 155,
14788
+ 113
14789
+ ];
14790
+ var KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = [
14791
+ 3,
14792
+ 0,
14793
+ 0,
14794
+ 0,
14795
+ 0,
14796
+ 0,
14797
+ 16,
14798
+ 0,
14799
+ 128,
14800
+ 0,
14801
+ 0,
14802
+ 170,
14803
+ 0,
14804
+ 56,
14805
+ 155,
14806
+ 113
14807
+ ];
14808
+ var subformatIsPcm = (subformat) => {
14809
+ return subformat.every((value, index) => value === WMMEDIASUBTYPE_PCM[index]);
14810
+ };
14811
+ var subformatIsIeeeFloat = (subformat) => {
14812
+ return subformat.every((value, index) => value === KSDATAFORMAT_SUBTYPE_IEEE_FLOAT[index]);
14813
+ };
14814
+
14681
14815
  // src/containers/wav/parse-fmt.ts
14682
14816
  var CHANNELS = {
14683
14817
  0: "Front Left",
@@ -14752,10 +14886,8 @@ var parseFmt = async ({
14752
14886
  if (subFormat.length !== 16) {
14753
14887
  throw new Error(`Only supporting WAVE with PCM audio format, but got ${subFormat.length}`);
14754
14888
  }
14755
- for (let i = 0;i < 16; i++) {
14756
- if (subFormat[i] !== [1, 0, 0, 0, 0, 0, 16, 0, 128, 0, 0, 170, 0, 56, 155, 113][i]) {
14757
- throw new Error(`Only supporting WAVE with PCM audio format, but got subformat ${subFormat[i]}`);
14758
- }
14889
+ if (subformatIsPcm(subFormat)) {} else if (subformatIsIeeeFloat(subFormat)) {} else {
14890
+ throw new Error(`Unsupported subformat: ${subFormat}`);
14759
14891
  }
14760
14892
  const channels2 = getChannelsFromMask(channelMask);
14761
14893
  wavHeader.numberOfChannels = channels2.length;
@@ -14927,6 +15059,9 @@ var parseWav = (state) => {
14927
15059
  if (type === "JUNK" || type === "FLLR") {
14928
15060
  return parseJunk({ state });
14929
15061
  }
15062
+ if (type === "fact") {
15063
+ return parseFact({ state });
15064
+ }
14930
15065
  if (type === "\x00") {
14931
15066
  return Promise.resolve(null);
14932
15067
  }
@@ -15053,7 +15188,11 @@ var getSampleFromBlock = async ({
15053
15188
  onVideoTrack,
15054
15189
  avcState
15055
15190
  }) => {
15056
- const iterator = getArrayBufferIterator(ebml.value, ebml.value.length);
15191
+ const iterator = getArrayBufferIterator({
15192
+ initialData: ebml.value,
15193
+ maxBytes: ebml.value.length,
15194
+ logLevel: "error"
15195
+ });
15057
15196
  const trackNumber2 = iterator.getVint();
15058
15197
  if (trackNumber2 === null) {
15059
15198
  throw new Error("Not enough data to get track number, should not happen");
@@ -15870,8 +16009,8 @@ var warnIfRemotionLicenseNotAcknowledged = ({
15870
16009
  return;
15871
16010
  }
15872
16011
  warningShown = true;
15873
- Log.warn(logLevel, "Note: Some companies are required to obtain a license to use @remotion/media-parser. See: https://remotion.dev/license");
15874
- Log.warn(logLevel, `Pass \`acknowledgeRemotionLicense: true\` to \`${apiName}\` function to make this message disappear.`);
16012
+ Log.warn(logLevel, `Note: Some companies are required to obtain a license to use @remotion/media-parser. See: https://remotion.dev/license
16013
+ Pass \`acknowledgeRemotionLicense: true\` to \`${apiName}\` function to make this message disappear.`);
15875
16014
  };
15876
16015
 
15877
16016
  // src/set-seeking-hints.ts
@@ -16156,7 +16295,11 @@ var getMfraAtom = async ({
16156
16295
  logLevel,
16157
16296
  prefetchCache
16158
16297
  });
16159
- const iterator = getArrayBufferIterator(new Uint8Array, parentSize);
16298
+ const iterator = getArrayBufferIterator({
16299
+ initialData: new Uint8Array,
16300
+ maxBytes: parentSize,
16301
+ logLevel: "error"
16302
+ });
16160
16303
  while (true) {
16161
16304
  const res = await result.reader.reader.read();
16162
16305
  if (res.value) {
@@ -16190,7 +16333,11 @@ var getMfroAtom = async ({
16190
16333
  return null;
16191
16334
  }
16192
16335
  result.reader.abort();
16193
- const iterator = getArrayBufferIterator(value, value.length);
16336
+ const iterator = getArrayBufferIterator({
16337
+ initialData: value,
16338
+ maxBytes: value.length,
16339
+ logLevel: "error"
16340
+ });
16194
16341
  const size = iterator.getUint32();
16195
16342
  if (size !== 16) {
16196
16343
  iterator.destroy();
@@ -16645,7 +16792,11 @@ var fetchWebmCues = async ({
16645
16792
  return null;
16646
16793
  }
16647
16794
  result.reader.abort();
16648
- const iterator = getArrayBufferIterator(value, value.length);
16795
+ const iterator = getArrayBufferIterator({
16796
+ initialData: value,
16797
+ maxBytes: value.length,
16798
+ logLevel: "error"
16799
+ });
16649
16800
  const segment = await expectSegment({
16650
16801
  iterator,
16651
16802
  logLevel,
@@ -16910,7 +17061,11 @@ var fetchIdx1 = async ({
16910
17061
  if (result.contentLength === null) {
16911
17062
  throw new Error("Content length is null");
16912
17063
  }
16913
- const iterator = getArrayBufferIterator(new Uint8Array, contentLength - position + 1);
17064
+ const iterator = getArrayBufferIterator({
17065
+ initialData: new Uint8Array,
17066
+ maxBytes: contentLength - position + 1,
17067
+ logLevel: "error"
17068
+ });
16914
17069
  while (true) {
16915
17070
  const res = await result.reader.reader.read();
16916
17071
  if (res.value) {
@@ -17533,7 +17688,11 @@ var makeParserState = ({
17533
17688
  }) => {
17534
17689
  let skippedBytes = 0;
17535
17690
  const returnValue = {};
17536
- const iterator = getArrayBufferIterator(new Uint8Array([]), contentLength);
17691
+ const iterator = getArrayBufferIterator({
17692
+ initialData: new Uint8Array([]),
17693
+ maxBytes: contentLength,
17694
+ logLevel
17695
+ });
17537
17696
  const increaseSkippedBytes = (bytes) => {
17538
17697
  skippedBytes += bytes;
17539
17698
  };
package/dist/index.d.ts CHANGED
@@ -669,7 +669,11 @@ export declare const MediaParserInternals: {
669
669
  offset: number;
670
670
  size: number;
671
671
  }) => import("./containers/iso-base-media/tkhd").TkhdBox;
672
- getArrayBufferIterator: (initialData: Uint8Array, maxBytes: number) => {
672
+ getArrayBufferIterator: ({ initialData, maxBytes, logLevel, }: {
673
+ initialData: Uint8Array;
674
+ maxBytes: number;
675
+ logLevel: MediaParserLogLevel;
676
+ }) => {
673
677
  startReadingBits: () => void;
674
678
  stopReadingBits: () => void;
675
679
  skipTo: (offset: number) => void;
@@ -1,4 +1,9 @@
1
- export declare const getArrayBufferIterator: (initialData: Uint8Array, maxBytes: number) => {
1
+ import type { MediaParserLogLevel } from '../log';
2
+ export declare const getArrayBufferIterator: ({ initialData, maxBytes, logLevel, }: {
3
+ initialData: Uint8Array;
4
+ maxBytes: number;
5
+ logLevel: MediaParserLogLevel;
6
+ }) => {
2
7
  startReadingBits: () => void;
3
8
  stopReadingBits: () => void;
4
9
  skipTo: (offset: number) => void;