@remotion/media-parser 4.0.316 → 4.0.318

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 (36) 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 +234 -75
  23. package/dist/esm/worker-server-entry.mjs +233 -74
  24. package/dist/esm/worker-web-entry.mjs +233 -74
  25. package/dist/index.d.ts +5 -1
  26. package/dist/iterator/buffer-iterator.d.ts +6 -1
  27. package/dist/iterator/buffer-iterator.js +25 -25
  28. package/dist/iterator/buffer-manager.d.ts +5 -3
  29. package/dist/iterator/buffer-manager.js +24 -23
  30. package/dist/iterator/polyfilled-arraybuffer.d.ts +6 -0
  31. package/dist/iterator/polyfilled-arraybuffer.js +21 -0
  32. package/dist/remotion-license-acknowledge.js +1 -2
  33. package/dist/state/parser-state.js +5 -1
  34. package/dist/version.d.ts +1 -1
  35. package/dist/version.js +1 -1
  36. package/package.json +3 -3
@@ -218,7 +218,11 @@ const findEnd = (buffer) => {
218
218
  return null;
219
219
  };
220
220
  const inspect = (buffer, avcState) => {
221
- const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(buffer, buffer.byteLength);
221
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
222
+ initialData: buffer,
223
+ maxBytes: buffer.byteLength,
224
+ logLevel: 'error',
225
+ });
222
226
  iterator.startReadingBits();
223
227
  iterator.getBits(1); // forbidden_zero_bit
224
228
  const nal_ref_idc = iterator.getBits(2); // nal_ref_idc
@@ -64,7 +64,11 @@ const parseFrameHeader = ({ iterator, state, }) => {
64
64
  };
65
65
  exports.parseFrameHeader = parseFrameHeader;
66
66
  const emitSample = async ({ state, data, offset, }) => {
67
- const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(data, data.length);
67
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
68
+ initialData: data,
69
+ maxBytes: data.length,
70
+ logLevel: 'error',
71
+ });
68
72
  const parsed = (0, exports.parseFrameHeader)({ iterator, state });
69
73
  if (!parsed) {
70
74
  throw new Error('Invalid CRC');
@@ -54,7 +54,11 @@ const getMoovAtom = async ({ endOfMdat, state, }) => {
54
54
  return null;
55
55
  }
56
56
  : null;
57
- const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(new Uint8Array([]), state.contentLength - endOfMdat);
57
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
58
+ initialData: new Uint8Array([]),
59
+ maxBytes: state.contentLength - endOfMdat,
60
+ logLevel: 'error',
61
+ });
58
62
  while (true) {
59
63
  const result = await reader.reader.read();
60
64
  if (result.value) {
@@ -10,7 +10,11 @@ const getMfraAtom = async ({ src, contentLength, readerInterface, controller, pa
10
10
  logLevel,
11
11
  prefetchCache,
12
12
  });
13
- const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(new Uint8Array(), parentSize);
13
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
14
+ initialData: new Uint8Array(),
15
+ maxBytes: parentSize,
16
+ logLevel: 'error',
17
+ });
14
18
  while (true) {
15
19
  const res = await result.reader.reader.read();
16
20
  if (res.value) {
@@ -15,7 +15,11 @@ const getMfroAtom = async ({ src, contentLength, readerInterface, controller, lo
15
15
  return null;
16
16
  }
17
17
  result.reader.abort();
18
- const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(value, value.length);
18
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
19
+ initialData: value,
20
+ maxBytes: value.length,
21
+ logLevel: 'error',
22
+ });
19
23
  const size = iterator.getUint32();
20
24
  if (size !== 16) {
21
25
  iterator.destroy();
@@ -13,13 +13,21 @@ const parseMvhd = ({ iterator, offset, size, }) => {
13
13
  const durationInUnits = version === 1 ? iterator.getUint64() : iterator.getUint32();
14
14
  const durationInSeconds = Number(durationInUnits) / timeScale;
15
15
  const rateArray = iterator.getSlice(4);
16
- const rateView = (0, buffer_iterator_1.getArrayBufferIterator)(rateArray, rateArray.length);
16
+ const rateView = (0, buffer_iterator_1.getArrayBufferIterator)({
17
+ initialData: rateArray,
18
+ maxBytes: rateArray.length,
19
+ logLevel: 'error',
20
+ });
17
21
  const rate = rateView.getInt8() * 10 +
18
22
  rateView.getInt8() +
19
23
  rateView.getInt8() * 0.1 +
20
24
  rateView.getInt8() * 0.01;
21
25
  const volumeArray = iterator.getSlice(2);
22
- const volumeView = (0, buffer_iterator_1.getArrayBufferIterator)(volumeArray, volumeArray.length);
26
+ const volumeView = (0, buffer_iterator_1.getArrayBufferIterator)({
27
+ initialData: volumeArray,
28
+ maxBytes: volumeArray.length,
29
+ logLevel: 'error',
30
+ });
23
31
  const volume = volumeView.getInt8() + volumeView.getInt8() * 0.1;
24
32
  // reserved 16bit
25
33
  iterator.discard(2);
@@ -3,7 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseIccProfile = void 0;
4
4
  const buffer_iterator_1 = require("../../iterator/buffer-iterator");
5
5
  const parseIccProfile = (data) => {
6
- const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(data, data.length);
6
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
7
+ initialData: data,
8
+ maxBytes: data.length,
9
+ logLevel: 'error',
10
+ });
7
11
  const size = iterator.getUint32();
8
12
  if (size !== data.length) {
9
13
  throw new Error('Invalid ICC profile size');
@@ -52,7 +56,11 @@ const parseIccProfile = (data) => {
52
56
  entry.tag === 'gXYZ' ||
53
57
  entry.tag === 'bXYZ' ||
54
58
  entry.tag === 'wtpt') {
55
- const it = (0, buffer_iterator_1.getArrayBufferIterator)(found, found.length);
59
+ const it = (0, buffer_iterator_1.getArrayBufferIterator)({
60
+ initialData: found,
61
+ maxBytes: found.length,
62
+ logLevel: 'error',
63
+ });
56
64
  it.discard(4);
57
65
  const x = it.getInt32() / 65536;
58
66
  const y = it.getInt32() / 65536;
@@ -16,7 +16,11 @@ const fetchIdx1 = async ({ src, readerInterface, controller, position, logLevel,
16
16
  if (result.contentLength === null) {
17
17
  throw new Error('Content length is null');
18
18
  }
19
- const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(new Uint8Array(), contentLength - position + 1);
19
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
20
+ initialData: new Uint8Array(),
21
+ maxBytes: contentLength - position + 1,
22
+ logLevel: 'error',
23
+ });
20
24
  while (true) {
21
25
  const res = await result.reader.reader.read();
22
26
  if (res.value) {
@@ -7,7 +7,11 @@ const readAdtsHeader = (buffer) => {
7
7
  if (buffer.byteLength < 9) {
8
8
  return null;
9
9
  }
10
- const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(buffer, buffer.byteLength);
10
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
11
+ initialData: buffer,
12
+ maxBytes: buffer.byteLength,
13
+ logLevel: 'error',
14
+ });
11
15
  iterator.startReadingBits();
12
16
  const bits = iterator.getBits(12);
13
17
  if (bits !== 0xfff) {
@@ -0,0 +1,5 @@
1
+ import type { ParseResult } from '../../parse-result';
2
+ import type { ParserState } from '../../state/parser-state';
3
+ export declare const parseFact: ({ state, }: {
4
+ state: ParserState;
5
+ }) => Promise<ParseResult>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseFact = void 0;
4
+ const parseFact = ({ state, }) => {
5
+ const { iterator } = state;
6
+ const size = iterator.getUint32Le();
7
+ if (size !== 4) {
8
+ throw new Error(`Expected size 4 for fact box, got ${size}`);
9
+ }
10
+ const numberOfSamplesPerChannel = iterator.getUint32Le();
11
+ const factBox = {
12
+ type: 'wav-fact',
13
+ numberOfSamplesPerChannel,
14
+ };
15
+ state.structure.getWavStructure().boxes.push(factBox);
16
+ return Promise.resolve(null);
17
+ };
18
+ exports.parseFact = parseFact;
@@ -4,6 +4,7 @@ exports.parseFmt = void 0;
4
4
  exports.getChannelsFromMask = getChannelsFromMask;
5
5
  const register_track_1 = require("../../register-track");
6
6
  const webcodecs_timescale_1 = require("../../webcodecs-timescale");
7
+ const subformats_1 = require("./subformats");
7
8
  const CHANNELS = {
8
9
  0: 'Front Left',
9
10
  1: 'Front Right',
@@ -84,11 +85,14 @@ const parseFmt = async ({ state, }) => {
84
85
  if (subFormat.length !== 16) {
85
86
  throw new Error(`Only supporting WAVE with PCM audio format, but got ${subFormat.length}`);
86
87
  }
87
- for (let i = 0; i < 16; i++) {
88
- if (subFormat[i] !==
89
- [1, 0, 0, 0, 0, 0, 16, 0, 128, 0, 0, 170, 0, 56, 155, 113][i]) {
90
- throw new Error(`Only supporting WAVE with PCM audio format, but got subformat ${subFormat[i]}`);
91
- }
88
+ if ((0, subformats_1.subformatIsPcm)(subFormat)) {
89
+ // is pcm
90
+ }
91
+ else if ((0, subformats_1.subformatIsIeeeFloat)(subFormat)) {
92
+ // is ieee float
93
+ }
94
+ else {
95
+ throw new Error(`Unsupported subformat: ${subFormat}`);
92
96
  }
93
97
  const channels = getChannelsFromMask(channelMask);
94
98
  wavHeader.numberOfChannels = channels.length;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseWav = void 0;
4
4
  const log_1 = require("../../log");
5
5
  const parse_data_1 = require("./parse-data");
6
+ const parse_fact_1 = require("./parse-fact");
6
7
  const parse_fmt_1 = require("./parse-fmt");
7
8
  const parse_header_1 = require("./parse-header");
8
9
  const parse_id3_1 = require("./parse-id3");
@@ -35,6 +36,9 @@ const parseWav = (state) => {
35
36
  if (type === 'JUNK' || type === 'FLLR') {
36
37
  return (0, parse_junk_1.parseJunk)({ state });
37
38
  }
39
+ if (type === 'fact') {
40
+ return (0, parse_fact_1.parseFact)({ state });
41
+ }
38
42
  if (type === '\u0000') {
39
43
  return Promise.resolve(null);
40
44
  }
@@ -0,0 +1,4 @@
1
+ export declare const WMMEDIASUBTYPE_PCM: number[];
2
+ export declare const KSDATAFORMAT_SUBTYPE_IEEE_FLOAT: number[];
3
+ export declare const subformatIsPcm: (subformat: Uint8Array) => boolean;
4
+ export declare const subformatIsIeeeFloat: (subformat: Uint8Array) => boolean;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.subformatIsIeeeFloat = exports.subformatIsPcm = exports.KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = exports.WMMEDIASUBTYPE_PCM = void 0;
4
+ exports.WMMEDIASUBTYPE_PCM = [
5
+ 1, 0, 0, 0, 0, 0, 16, 0, 128, 0, 0, 170, 0, 56, 155, 113,
6
+ ];
7
+ exports.KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = [
8
+ 3, 0, 0, 0, 0, 0, 16, 0, 128, 0, 0, 170, 0, 56, 155, 113,
9
+ ];
10
+ const subformatIsPcm = (subformat) => {
11
+ return subformat.every((value, index) => value === exports.WMMEDIASUBTYPE_PCM[index]);
12
+ };
13
+ exports.subformatIsPcm = subformatIsPcm;
14
+ const subformatIsIeeeFloat = (subformat) => {
15
+ return subformat.every((value, index) => value === exports.KSDATAFORMAT_SUBTYPE_IEEE_FLOAT[index]);
16
+ };
17
+ exports.subformatIsIeeeFloat = subformatIsIeeeFloat;
@@ -18,11 +18,15 @@ export type WavList = {
18
18
  export type WavId3 = {
19
19
  type: 'wav-id3';
20
20
  };
21
+ export type WavFact = {
22
+ type: 'wav-fact';
23
+ numberOfSamplesPerChannel: number;
24
+ };
21
25
  export type WavData = {
22
26
  type: 'wav-data';
23
27
  dataSize: number;
24
28
  };
25
- type WavBox = WavHeader | WavFmt | WavList | WavId3 | WavData;
29
+ type WavBox = WavHeader | WavFmt | WavList | WavId3 | WavData | WavFact;
26
30
  export type WavStructure = {
27
31
  type: 'wav';
28
32
  boxes: WavBox[];
@@ -3,7 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseAv1PrivateData = void 0;
4
4
  const buffer_iterator_1 = require("../../iterator/buffer-iterator");
5
5
  const parseAv1PrivateData = (data, colrAtom) => {
6
- const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(data, data.byteLength);
6
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
7
+ initialData: data,
8
+ maxBytes: data.byteLength,
9
+ logLevel: 'error',
10
+ });
7
11
  iterator.startReadingBits();
8
12
  if (iterator.getBits(1) !== 1) {
9
13
  iterator.destroy();
@@ -44,7 +44,11 @@ const getAudioDescription = (track) => {
44
44
  throw new Error('Error parsing vorbis codec private');
45
45
  }
46
46
  const vorbisBooks = privateData.slice(offset);
47
- const bufferIterator = (0, buffer_iterator_1.getArrayBufferIterator)(vorbisInfo.slice(0), vorbisInfo.length);
47
+ const bufferIterator = (0, buffer_iterator_1.getArrayBufferIterator)({
48
+ initialData: vorbisInfo.slice(0),
49
+ maxBytes: vorbisInfo.length,
50
+ logLevel: 'error',
51
+ });
48
52
  // type
49
53
  bufferIterator.getUint8();
50
54
  // vorbis
@@ -47,7 +47,11 @@ const addAvcToTrackAndActivateTrackIfNecessary = async ({ partialVideoSample, co
47
47
  }
48
48
  };
49
49
  const getSampleFromBlock = async ({ ebml, webmState, offset, structureState, callbacks, logLevel, onVideoTrack, avcState, }) => {
50
- const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(ebml.value, ebml.value.length);
50
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
51
+ initialData: ebml.value,
52
+ maxBytes: ebml.value.length,
53
+ logLevel: 'error',
54
+ });
51
55
  const trackNumber = iterator.getVint();
52
56
  if (trackNumber === null) {
53
57
  throw new Error('Not enough data to get track number, should not happen');
@@ -62,7 +62,11 @@ const getMatroskaVideoCodecString = ({ track, codecSegment: codec, }) => {
62
62
  }
63
63
  if (codec.value === 'V_MPEGH/ISO/HEVC') {
64
64
  const priv = (0, traversal_1.getPrivateData)(track);
65
- const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(priv, priv.length);
65
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
66
+ initialData: priv,
67
+ maxBytes: priv.length,
68
+ logLevel: 'error',
69
+ });
66
70
  return 'hvc1.' + (0, make_hvc1_codec_strings_1.getHvc1CodecString)(iterator);
67
71
  }
68
72
  if (codec.value === 'V_AV1') {
@@ -137,7 +141,11 @@ const getMatroskaAudioCodecString = (track) => {
137
141
  }
138
142
  if (codec.value === 'A_AAC') {
139
143
  const priv = (0, traversal_1.getPrivateData)(track);
140
- const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(priv, priv.length);
144
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
145
+ initialData: priv,
146
+ maxBytes: priv.length,
147
+ logLevel: 'error',
148
+ });
141
149
  iterator.startReadingBits();
142
150
  /**
143
151
  * ChatGPT
@@ -17,7 +17,11 @@ const fetchWebmCues = async ({ src, readerInterface, controller, position, logLe
17
17
  return null;
18
18
  }
19
19
  result.reader.abort();
20
- const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(value, value.length);
20
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)({
21
+ initialData: value,
22
+ maxBytes: value.length,
23
+ logLevel: 'error',
24
+ });
21
25
  const segment = await (0, segments_1.expectSegment)({
22
26
  iterator,
23
27
  logLevel,