@remotion/media-parser 4.0.249 → 4.0.250

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 (121) hide show
  1. package/dist/boxes/iso-base-media/continue-mdat-routine.d.ts +14 -0
  2. package/dist/boxes/iso-base-media/continue-mdat-routine.js +74 -0
  3. package/dist/boxes/iso-base-media/get-children.d.ts +2 -8
  4. package/dist/boxes/iso-base-media/get-children.js +14 -30
  5. package/dist/boxes/iso-base-media/mdat/mdat.d.ts +3 -23
  6. package/dist/boxes/iso-base-media/mdat/mdat.js +80 -130
  7. package/dist/boxes/iso-base-media/moov/moov.d.ts +1 -6
  8. package/dist/boxes/iso-base-media/moov/moov.js +5 -14
  9. package/dist/boxes/iso-base-media/parse-all-children.d.ts +8 -0
  10. package/dist/boxes/iso-base-media/parse-all-children.js +20 -0
  11. package/dist/boxes/iso-base-media/parse-boxes.d.ts +2 -10
  12. package/dist/boxes/iso-base-media/parse-boxes.js +33 -116
  13. package/dist/boxes/iso-base-media/parse-mdat-partially.d.ts +1 -4
  14. package/dist/boxes/iso-base-media/parse-mdat-partially.js +2 -11
  15. package/dist/boxes/iso-base-media/process-box.d.ts +1 -9
  16. package/dist/boxes/iso-base-media/process-box.js +49 -143
  17. package/dist/boxes/iso-base-media/stsd/mebx.d.ts +1 -4
  18. package/dist/boxes/iso-base-media/stsd/mebx.js +5 -14
  19. package/dist/boxes/iso-base-media/stsd/samples.d.ts +4 -12
  20. package/dist/boxes/iso-base-media/stsd/samples.js +24 -66
  21. package/dist/boxes/iso-base-media/stsd/stsd.d.ts +1 -4
  22. package/dist/boxes/iso-base-media/stsd/stsd.js +2 -5
  23. package/dist/boxes/iso-base-media/trak/trak.d.ts +1 -6
  24. package/dist/boxes/iso-base-media/trak/trak.js +5 -14
  25. package/dist/boxes/iso-base-media/traversal.d.ts +0 -2
  26. package/dist/boxes/iso-base-media/traversal.js +1 -12
  27. package/dist/boxes/mp3/id3.d.ts +1 -3
  28. package/dist/boxes/mp3/id3.js +7 -5
  29. package/dist/boxes/mp3/parse-mp3.d.ts +2 -3
  30. package/dist/boxes/mp3/parse-mp3.js +3 -19
  31. package/dist/boxes/riff/expect-riff-box.d.ts +1 -9
  32. package/dist/boxes/riff/expect-riff-box.js +47 -25
  33. package/dist/boxes/riff/get-tracks-from-avi.d.ts +1 -1
  34. package/dist/boxes/riff/get-tracks-from-avi.js +6 -10
  35. package/dist/boxes/riff/parse-fmt-box.d.ts +3 -2
  36. package/dist/boxes/riff/parse-fmt-box.js +7 -5
  37. package/dist/boxes/riff/parse-list-box.d.ts +1 -3
  38. package/dist/boxes/riff/parse-list-box.js +16 -16
  39. package/dist/boxes/riff/parse-movi.d.ts +2 -5
  40. package/dist/boxes/riff/parse-movi.js +34 -56
  41. package/dist/boxes/riff/parse-riff-body.d.ts +2 -6
  42. package/dist/boxes/riff/parse-riff-body.js +15 -95
  43. package/dist/boxes/riff/parse-riff-box.d.ts +1 -4
  44. package/dist/boxes/riff/parse-riff-box.js +3 -7
  45. package/dist/boxes/riff/parse-riff-header.d.ts +7 -0
  46. package/dist/boxes/riff/parse-riff-header.js +23 -0
  47. package/dist/boxes/riff/parse-riff.d.ts +7 -0
  48. package/dist/boxes/riff/parse-riff.js +15 -0
  49. package/dist/boxes/riff/parse-strf.d.ts +4 -4
  50. package/dist/boxes/riff/parse-strf.js +4 -8
  51. package/dist/boxes/riff/parse-strh.js +11 -0
  52. package/dist/boxes/riff/parse-video-section.d.ts +6 -0
  53. package/dist/boxes/riff/parse-video-section.js +20 -0
  54. package/dist/boxes/riff/riff-box.d.ts +4 -5
  55. package/dist/boxes/riff/traversal.d.ts +1 -2
  56. package/dist/boxes/riff/traversal.js +1 -6
  57. package/dist/boxes/transport-stream/get-tracks.d.ts +2 -3
  58. package/dist/boxes/transport-stream/get-tracks.js +4 -3
  59. package/dist/boxes/transport-stream/parse-packet.d.ts +1 -7
  60. package/dist/boxes/transport-stream/parse-packet.js +3 -4
  61. package/dist/boxes/transport-stream/parse-stream-packet.d.ts +1 -5
  62. package/dist/boxes/transport-stream/parse-stream-packet.js +10 -12
  63. package/dist/boxes/transport-stream/parse-transport-stream.d.ts +1 -7
  64. package/dist/boxes/transport-stream/parse-transport-stream.js +7 -26
  65. package/dist/boxes/transport-stream/process-stream-buffers.d.ts +1 -2
  66. package/dist/boxes/transport-stream/process-stream-buffers.js +3 -3
  67. package/dist/boxes/webm/parse-ebml.js +3 -0
  68. package/dist/boxes/webm/parse-webm-header.d.ts +2 -4
  69. package/dist/boxes/webm/parse-webm-header.js +41 -25
  70. package/dist/boxes/webm/segments/parse-children.d.ts +2 -16
  71. package/dist/boxes/webm/segments/parse-children.js +7 -130
  72. package/dist/boxes/webm/segments.d.ts +4 -8
  73. package/dist/boxes/webm/segments.js +41 -123
  74. package/dist/buffer-iterator.d.ts +0 -3
  75. package/dist/buffer-iterator.js +6 -16
  76. package/dist/bun-reader.d.ts +1 -0
  77. package/dist/bun-reader.js +17 -0
  78. package/dist/emit-available-info.js +4 -4
  79. package/dist/esm/from-node.mjs +8 -9
  80. package/dist/esm/index.mjs +4224 -4950
  81. package/dist/file-types/detect-file-type.js +4 -2
  82. package/dist/get-audio-codec.d.ts +1 -1
  83. package/dist/get-audio-codec.js +2 -2
  84. package/dist/get-dimensions.js +1 -1
  85. package/dist/get-duration.js +1 -1
  86. package/dist/get-is-hdr.d.ts +1 -1
  87. package/dist/get-is-hdr.js +2 -2
  88. package/dist/get-tracks.d.ts +1 -1
  89. package/dist/get-tracks.js +14 -13
  90. package/dist/get-video-codec.d.ts +1 -1
  91. package/dist/get-video-codec.js +2 -2
  92. package/dist/index.d.ts +50 -24
  93. package/dist/index.js +1 -1
  94. package/dist/may-skip-video-data/may-skip-video-data.js +6 -2
  95. package/dist/parse-media.js +45 -30
  96. package/dist/parse-result.d.ts +1 -18
  97. package/dist/parse-video.d.ts +3 -17
  98. package/dist/parse-video.js +45 -32
  99. package/dist/readers/from-node.js +7 -8
  100. package/dist/state/can-skip-tracks.d.ts +8 -1
  101. package/dist/state/can-skip-tracks.js +38 -27
  102. package/dist/state/iso-base-media/cached-sample-positions.d.ts +15 -0
  103. package/dist/state/iso-base-media/cached-sample-positions.js +42 -0
  104. package/dist/state/iso-base-media/iso-state.d.ts +8 -0
  105. package/dist/state/iso-base-media/iso-state.js +15 -0
  106. package/dist/state/iso-state.d.ts +4 -0
  107. package/dist/state/iso-state.js +13 -0
  108. package/dist/state/parser-state.d.ts +49 -14
  109. package/dist/state/parser-state.js +11 -3
  110. package/dist/state/sample-callbacks.d.ts +5 -1
  111. package/dist/state/sample-callbacks.js +4 -1
  112. package/dist/state/transport-stream.d.ts +8 -0
  113. package/dist/state/transport-stream.js +11 -0
  114. package/dist/state/video-section.d.ts +16 -0
  115. package/dist/state/video-section.js +37 -0
  116. package/dist/state/webm.d.ts +15 -0
  117. package/dist/state/webm.js +32 -0
  118. package/dist/version.d.ts +1 -1
  119. package/dist/version.js +1 -1
  120. package/package.json +3 -3
  121. package/test.json +663 -0
@@ -1,129 +1,46 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseIsoBaseMediaBoxes = void 0;
4
- const continue_mdat_routine_1 = require("../../continue-mdat-routine");
5
- const has_all_info_1 = require("../../has-all-info");
6
- const may_skip_video_data_1 = require("../../may-skip-video-data/may-skip-video-data");
3
+ exports.parseIsoBaseMedia = void 0;
4
+ const mdat_1 = require("./mdat/mdat");
7
5
  const process_box_1 = require("./process-box");
8
- const traversal_1 = require("./traversal");
9
- const parseIsoBaseMediaBoxes = async ({ iterator, maxBytes, allowIncompleteBoxes, initialBoxes, state, signal, logLevel, fields, }) => {
10
- var _a;
11
- const initialOffset = iterator.counter.getOffset();
12
- const continueParsing = () => {
13
- return (0, exports.parseIsoBaseMediaBoxes)({
6
+ const parseIsoBaseMedia = async ({ iterator, state, }) => {
7
+ const videoSectionState = state.videoSection.isInVideoSectionState(iterator);
8
+ if (videoSectionState === 'in-section') {
9
+ const skipTo = await (0, mdat_1.parseMdatSection)({
14
10
  iterator,
15
- maxBytes,
16
- allowIncompleteBoxes,
17
- initialBoxes,
18
11
  state,
19
- signal,
20
- logLevel,
21
- fields,
22
12
  });
23
- };
24
- const alreadyHasMdat = (_a = state.structure
25
- .getStructureOrNull()) === null || _a === void 0 ? void 0 : _a.boxes.find((b) => b.type === 'mdat-box');
26
- while (iterator.bytesRemaining() > 0 &&
27
- iterator.counter.getOffset() - initialOffset < maxBytes) {
28
- const result = await (0, process_box_1.processBox)({
29
- iterator,
30
- allowIncompleteBoxes,
31
- parsedBoxes: initialBoxes,
32
- state,
33
- signal,
34
- logLevel,
35
- fields,
36
- });
37
- if (result.type === 'incomplete') {
38
- if (Number.isFinite(maxBytes)) {
39
- throw new Error('maxBytes must be Infinity for top-level boxes');
40
- }
41
- return {
42
- status: 'incomplete',
43
- continueParsing,
44
- skipTo: null,
45
- };
46
- }
47
- if (result.type === 'partial-mdat-box') {
48
- return {
49
- status: 'incomplete',
50
- continueParsing: () => {
51
- return Promise.resolve((0, continue_mdat_routine_1.continueMdatRoutine)({
52
- iterator,
53
- maxBytes,
54
- allowIncompleteBoxes,
55
- initialBoxes,
56
- state,
57
- continueMdat: result,
58
- signal,
59
- logLevel,
60
- fields,
61
- }));
62
- },
63
- skipTo: null,
64
- };
65
- }
66
- if (result.box.type === 'mdat-box' && alreadyHasMdat) {
67
- initialBoxes = initialBoxes.filter((b) => b.type !== 'mdat-box');
68
- initialBoxes.push(result.box);
69
- iterator.allowDiscard();
70
- break;
71
- }
72
- else {
73
- initialBoxes.push(result.box);
74
- if ((0, has_all_info_1.hasAllInfo)({ fields, state })) {
75
- return {
76
- status: 'done',
77
- };
78
- }
79
- }
80
- if (result.skipTo !== null) {
81
- if (!state.supportsContentRange) {
82
- throw new Error('Content-Range header is not supported by the reader, but was asked to seek');
83
- }
84
- return {
85
- status: 'incomplete',
86
- continueParsing,
87
- skipTo: result.skipTo,
88
- };
89
- }
90
- if (iterator.bytesRemaining() < 0) {
91
- return {
92
- status: 'incomplete',
93
- continueParsing,
94
- skipTo: null,
95
- };
96
- }
97
- iterator.removeBytesRead();
13
+ return {
14
+ skipTo,
15
+ };
16
+ }
17
+ const result = await (0, process_box_1.processBox)({
18
+ iterator,
19
+ state,
20
+ });
21
+ if (result.box) {
22
+ state.structure.getStructure().boxes.push(result.box);
23
+ }
24
+ if (iterator.counter.getOffset() === state.contentLength &&
25
+ state.iso.getShouldReturnToVideoSectionAfterEnd()) {
26
+ state.iso.setShouldReturnToVideoSectionAfterEnd(false);
27
+ return {
28
+ skipTo: state.videoSection.getVideoSection().start,
29
+ };
30
+ }
31
+ if (result.skipTo !== null) {
32
+ return {
33
+ skipTo: result.skipTo,
34
+ };
98
35
  }
99
- const mdatState = (0, traversal_1.getMdatBox)(initialBoxes);
100
- const skipped = (mdatState === null || mdatState === void 0 ? void 0 : mdatState.status) === 'samples-skipped' &&
101
- !(0, may_skip_video_data_1.maySkipVideoData)({ state }) &&
102
- state.supportsContentRange;
103
- const buffered = (mdatState === null || mdatState === void 0 ? void 0 : mdatState.status) === 'samples-buffered' && !(0, may_skip_video_data_1.maySkipVideoData)({ state });
104
- if (skipped || buffered) {
36
+ if (iterator.bytesRemaining() < 0) {
105
37
  return {
106
- status: 'incomplete',
107
- continueParsing: () => {
108
- if (buffered) {
109
- iterator.skipTo(mdatState.fileOffset, false);
110
- }
111
- return (0, exports.parseIsoBaseMediaBoxes)({
112
- iterator,
113
- maxBytes,
114
- allowIncompleteBoxes: false,
115
- initialBoxes,
116
- state,
117
- signal,
118
- logLevel,
119
- fields,
120
- });
121
- },
122
- skipTo: skipped ? mdatState.fileOffset : null,
38
+ skipTo: null,
123
39
  };
124
40
  }
41
+ iterator.removeBytesRead();
125
42
  return {
126
- status: 'done',
43
+ skipTo: null,
127
44
  };
128
45
  };
129
- exports.parseIsoBaseMediaBoxes = parseIsoBaseMediaBoxes;
46
+ exports.parseIsoBaseMedia = parseIsoBaseMedia;
@@ -1,12 +1,9 @@
1
1
  import type { BufferIterator } from '../../buffer-iterator';
2
- import type { IsoBaseMediaBox } from '../../parse-result';
3
2
  import type { BoxAndNext } from '../../parse-video';
4
3
  import type { ParserState } from '../../state/parser-state';
5
- export declare const parseMdatPartially: ({ iterator, boxSize, fileOffset, parsedBoxes, state, signal, }: {
4
+ export declare const parseMdatPartially: ({ iterator, boxSize, fileOffset, state, }: {
6
5
  iterator: BufferIterator;
7
6
  boxSize: number;
8
7
  fileOffset: number;
9
- parsedBoxes: IsoBaseMediaBox[];
10
8
  state: ParserState;
11
- signal: AbortSignal | null;
12
9
  }) => Promise<BoxAndNext>;
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseMdatPartially = void 0;
4
4
  const mdat_1 = require("./mdat/mdat");
5
- const parseMdatPartially = async ({ iterator, boxSize, fileOffset, parsedBoxes, state, signal, }) => {
6
- const box = await (0, mdat_1.parseMdat)({
5
+ const parseMdatPartially = async ({ iterator, boxSize, fileOffset, state, }) => {
6
+ const box = await (0, mdat_1.parseMdatSection)({
7
7
  data: iterator,
8
8
  size: boxSize,
9
9
  fileOffset,
@@ -15,15 +15,6 @@ const parseMdatPartially = async ({ iterator, boxSize, fileOffset, parsedBoxes,
15
15
  if (box.type === 'partial-mdat-box') {
16
16
  return box;
17
17
  }
18
- if ((box.status === 'samples-processed' || box.status === 'samples-buffered') &&
19
- box.fileOffset + boxSize === iterator.counter.getOffset()) {
20
- return {
21
- type: 'complete',
22
- box,
23
- size: boxSize,
24
- skipTo: null,
25
- };
26
- }
27
18
  return {
28
19
  type: 'partial-mdat-box',
29
20
  boxSize,
@@ -1,15 +1,7 @@
1
1
  import type { BufferIterator } from '../../buffer-iterator';
2
- import type { LogLevel } from '../../log';
3
- import type { Options, ParseMediaFields } from '../../options';
4
- import type { IsoBaseMediaBox } from '../../parse-result';
5
2
  import type { BoxAndNext } from '../../parse-video';
6
3
  import type { ParserState } from '../../state/parser-state';
7
- export declare const processBox: ({ iterator, allowIncompleteBoxes, parsedBoxes, state, signal, logLevel, fields, }: {
4
+ export declare const processBox: ({ iterator, state, }: {
8
5
  iterator: BufferIterator;
9
- allowIncompleteBoxes: boolean;
10
- parsedBoxes: IsoBaseMediaBox[];
11
6
  state: ParserState;
12
- signal: AbortSignal | null;
13
- logLevel: LogLevel;
14
- fields: Options<ParseMediaFields>;
15
7
  }) => Promise<BoxAndNext>;
@@ -1,20 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.processBox = void 0;
4
- const get_tracks_1 = require("../../get-tracks");
5
- const may_skip_video_data_1 = require("../../may-skip-video-data/may-skip-video-data");
4
+ const log_1 = require("../../log");
6
5
  const register_track_1 = require("../../register-track");
7
6
  const esds_1 = require("./esds/esds");
8
7
  const ftyp_1 = require("./ftyp");
9
8
  const get_children_1 = require("./get-children");
10
9
  const make_track_1 = require("./make-track");
11
- const mdat_1 = require("./mdat/mdat");
12
10
  const mdhd_1 = require("./mdhd");
13
11
  const hdlr_1 = require("./meta/hdlr");
14
12
  const ilst_1 = require("./meta/ilst");
15
13
  const moov_1 = require("./moov/moov");
16
14
  const mvhd_1 = require("./mvhd");
17
- const parse_mdat_partially_1 = require("./parse-mdat-partially");
18
15
  const av1c_1 = require("./stsd/av1c");
19
16
  const avcc_1 = require("./stsd/avcc");
20
17
  const colr_1 = require("./stsd/colr");
@@ -34,18 +31,17 @@ const tfhd_1 = require("./tfhd");
34
31
  const tkhd_1 = require("./tkhd");
35
32
  const trak_1 = require("./trak/trak");
36
33
  const trun_1 = require("./trun");
37
- const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state, signal, logLevel, fields, }) => {
34
+ const processBox = async ({ iterator, state, }) => {
38
35
  const fileOffset = iterator.counter.getOffset();
36
+ const { returnToCheckpoint } = iterator.startCheckpoint();
39
37
  const bytesRemaining = iterator.bytesRemaining();
40
38
  const boxSizeRaw = iterator.getFourByteNumber();
41
39
  if (boxSizeRaw === 0) {
42
40
  return {
43
- type: 'complete',
44
41
  box: {
45
42
  type: 'void-box',
46
43
  boxSize: 0,
47
44
  },
48
- size: 4,
49
45
  skipTo: null,
50
46
  };
51
47
  }
@@ -53,64 +49,32 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
53
49
  if ((boxSizeRaw === 1 && iterator.bytesRemaining() < 12) ||
54
50
  iterator.bytesRemaining() < 4) {
55
51
  iterator.counter.decrement(iterator.counter.getOffset() - fileOffset);
56
- if (!allowIncompleteBoxes) {
57
- throw new Error(`Expected box size of ${bytesRemaining}, got ${boxSizeRaw}. Incomplete boxes are not allowed.`);
58
- }
59
- return {
60
- type: 'incomplete',
61
- };
52
+ throw new Error(`Expected box size of ${bytesRemaining}, got ${boxSizeRaw}. Incomplete boxes are not allowed.`);
62
53
  }
63
54
  const boxType = iterator.getByteString(4, false);
64
55
  const boxSize = boxSizeRaw === 1 ? iterator.getEightByteNumber() : boxSizeRaw;
56
+ log_1.Log.trace(state.logLevel, 'Found box', boxType, boxSize);
57
+ if (boxType === 'mdat') {
58
+ state.videoSection.setVideoSection({
59
+ size: boxSize - 8,
60
+ start: iterator.counter.getOffset(),
61
+ });
62
+ return {
63
+ box: null,
64
+ skipTo: null,
65
+ };
66
+ }
65
67
  if (bytesRemaining < boxSize) {
66
- if (boxType !== 'mdat') {
67
- iterator.counter.decrement(iterator.counter.getOffset() - fileOffset);
68
- if (!allowIncompleteBoxes) {
69
- throw new Error(`Expected box size of ${bytesRemaining}, got ${boxSize}. Incomplete boxes are not allowed.`);
70
- }
71
- return {
72
- type: 'incomplete',
73
- };
74
- }
75
- // Check if the moov atom is at the end
76
- const shouldSkip = (0, may_skip_video_data_1.maySkipVideoData)({ state }) ||
77
- (!(0, get_tracks_1.getHasTracks)({ type: 'iso-base-media', boxes: parsedBoxes }, state) &&
78
- state.supportsContentRange);
79
- if (shouldSkip) {
80
- const skipTo = fileOffset + boxSize;
81
- const bytesToSkip = skipTo - iterator.counter.getOffset();
82
- // If there is a huge mdat chunk, we can skip it because we don't need it for the metadata
83
- if (bytesToSkip > 1000000) {
84
- return {
85
- type: 'complete',
86
- box: {
87
- type: 'mdat-box',
88
- boxSize,
89
- fileOffset,
90
- status: 'samples-skipped',
91
- },
92
- size: boxSize,
93
- skipTo: fileOffset + boxSize,
94
- };
95
- }
96
- }
97
- else {
98
- return (0, parse_mdat_partially_1.parseMdatPartially)({
99
- iterator,
100
- boxSize,
101
- fileOffset,
102
- parsedBoxes,
103
- state,
104
- signal,
105
- });
106
- }
68
+ returnToCheckpoint();
69
+ return {
70
+ box: null,
71
+ skipTo: null,
72
+ };
107
73
  }
108
74
  if (boxType === 'ftyp') {
109
75
  const box = (0, ftyp_1.parseFtyp)({ iterator, size: boxSize, offset: fileOffset });
110
76
  return {
111
- type: 'complete',
112
77
  box,
113
- size: boxSize,
114
78
  skipTo: null,
115
79
  };
116
80
  }
@@ -120,45 +84,35 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
120
84
  size: boxSize,
121
85
  });
122
86
  return {
123
- type: 'complete',
124
87
  box,
125
- size: boxSize,
126
88
  skipTo: null,
127
89
  };
128
90
  }
129
91
  if (boxType === 'mvhd') {
130
92
  const box = (0, mvhd_1.parseMvhd)({ iterator, offset: fileOffset, size: boxSize });
131
93
  return {
132
- type: 'complete',
133
94
  box,
134
- size: boxSize,
135
95
  skipTo: null,
136
96
  };
137
97
  }
138
98
  if (boxType === 'tkhd') {
139
99
  const box = (0, tkhd_1.parseTkhd)({ iterator, offset: fileOffset, size: boxSize });
140
100
  return {
141
- type: 'complete',
142
101
  box,
143
- size: boxSize,
144
102
  skipTo: null,
145
103
  };
146
104
  }
147
105
  if (boxType === 'trun') {
148
106
  const box = (0, trun_1.parseTrun)({ iterator, offset: fileOffset, size: boxSize });
149
107
  return {
150
- type: 'complete',
151
108
  box,
152
- size: boxSize,
153
109
  skipTo: null,
154
110
  };
155
111
  }
156
112
  if (boxType === 'tfdt') {
157
113
  const box = (0, tfdt_1.parseTfdt)({ iterator, size: boxSize, offset: fileOffset });
158
114
  return {
159
- type: 'complete',
160
115
  box,
161
- size: boxSize,
162
116
  skipTo: null,
163
117
  };
164
118
  }
@@ -168,13 +122,9 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
168
122
  offset: fileOffset,
169
123
  size: boxSize,
170
124
  state,
171
- signal,
172
- fields,
173
125
  });
174
126
  return {
175
- type: 'complete',
176
127
  box,
177
- size: boxSize,
178
128
  skipTo: null,
179
129
  };
180
130
  }
@@ -185,9 +135,7 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
185
135
  size: boxSize,
186
136
  });
187
137
  return {
188
- type: 'complete',
189
138
  box,
190
- size: boxSize,
191
139
  skipTo: null,
192
140
  };
193
141
  }
@@ -199,9 +147,7 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
199
147
  mode64Bit: boxType === 'co64',
200
148
  });
201
149
  return {
202
- type: 'complete',
203
150
  box,
204
- size: boxSize,
205
151
  skipTo: null,
206
152
  };
207
153
  }
@@ -212,9 +158,7 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
212
158
  size: boxSize,
213
159
  });
214
160
  return {
215
- type: 'complete',
216
161
  box,
217
- size: boxSize,
218
162
  skipTo: null,
219
163
  };
220
164
  }
@@ -225,9 +169,7 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
225
169
  boxSize,
226
170
  });
227
171
  return {
228
- type: 'complete',
229
172
  box,
230
- size: boxSize,
231
173
  skipTo: null,
232
174
  };
233
175
  }
@@ -238,9 +180,7 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
238
180
  size: boxSize,
239
181
  });
240
182
  return {
241
- type: 'complete',
242
183
  box,
243
- size: boxSize,
244
184
  skipTo: null,
245
185
  };
246
186
  }
@@ -251,9 +191,7 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
251
191
  size: boxSize,
252
192
  });
253
193
  return {
254
- type: 'complete',
255
194
  box,
256
- size: boxSize,
257
195
  skipTo: null,
258
196
  };
259
197
  }
@@ -263,31 +201,23 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
263
201
  offset: fileOffset,
264
202
  size: boxSize,
265
203
  state,
266
- signal,
267
- fields,
268
204
  });
269
205
  return {
270
- type: 'complete',
271
206
  box,
272
- size: boxSize,
273
207
  skipTo: null,
274
208
  };
275
209
  }
276
210
  if (boxType === 'hdlr') {
277
211
  const box = await (0, hdlr_1.parseHdlr)({ iterator, size: boxSize, offset: fileOffset });
278
212
  return {
279
- type: 'complete',
280
213
  box,
281
- size: boxSize,
282
214
  skipTo: null,
283
215
  };
284
216
  }
285
217
  if (boxType === 'keys') {
286
218
  const box = (0, keys_1.parseKeys)({ iterator, size: boxSize, offset: fileOffset });
287
219
  return {
288
- type: 'complete',
289
220
  box,
290
- size: boxSize,
291
221
  skipTo: null,
292
222
  };
293
223
  }
@@ -298,27 +228,27 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
298
228
  size: boxSize,
299
229
  });
300
230
  return {
301
- type: 'complete',
302
231
  box,
303
- size: boxSize,
304
232
  skipTo: null,
305
233
  };
306
234
  }
307
235
  if (boxType === 'moov') {
236
+ if (state.callbacks.tracks.hasAllTracks()) {
237
+ iterator.discard(boxSize - 8);
238
+ return {
239
+ box: null,
240
+ skipTo: null,
241
+ };
242
+ }
308
243
  const box = await (0, moov_1.parseMoov)({
309
244
  iterator,
310
245
  offset: fileOffset,
311
246
  size: boxSize,
312
247
  state,
313
- signal,
314
- logLevel,
315
- fields,
316
248
  });
317
249
  state.callbacks.tracks.setIsDone();
318
250
  return {
319
- type: 'complete',
320
251
  box,
321
- size: boxSize,
322
252
  skipTo: null,
323
253
  };
324
254
  }
@@ -328,9 +258,6 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
328
258
  size: boxSize,
329
259
  offsetAtStart: fileOffset,
330
260
  state,
331
- signal,
332
- logLevel,
333
- fields,
334
261
  });
335
262
  const transformedTrack = (0, make_track_1.makeBaseMediaTrack)(box);
336
263
  if (transformedTrack) {
@@ -341,9 +268,7 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
341
268
  });
342
269
  }
343
270
  return {
344
- type: 'complete',
345
271
  box,
346
- size: boxSize,
347
272
  skipTo: null,
348
273
  };
349
274
  }
@@ -354,9 +279,7 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
354
279
  fileOffset,
355
280
  });
356
281
  return {
357
- type: 'complete',
358
282
  box,
359
- size: boxSize,
360
283
  skipTo: null,
361
284
  };
362
285
  }
@@ -366,9 +289,7 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
366
289
  size: boxSize,
367
290
  });
368
291
  return {
369
- type: 'complete',
370
292
  box,
371
- size: boxSize,
372
293
  skipTo: null,
373
294
  };
374
295
  }
@@ -378,9 +299,7 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
378
299
  size: boxSize,
379
300
  });
380
301
  return {
381
- type: 'complete',
382
302
  box,
383
- size: boxSize,
384
303
  skipTo: null,
385
304
  };
386
305
  }
@@ -391,9 +310,7 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
391
310
  offset: fileOffset,
392
311
  });
393
312
  return {
394
- type: 'complete',
395
313
  box,
396
- size: boxSize,
397
314
  skipTo: null,
398
315
  };
399
316
  }
@@ -404,9 +321,7 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
404
321
  size: boxSize,
405
322
  });
406
323
  return {
407
- type: 'complete',
408
324
  box,
409
- size: boxSize,
410
325
  skipTo: null,
411
326
  };
412
327
  }
@@ -417,9 +332,7 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
417
332
  fileOffset,
418
333
  });
419
334
  return {
420
- type: 'complete',
421
335
  box,
422
- size: boxSize,
423
336
  skipTo: null,
424
337
  };
425
338
  }
@@ -430,52 +343,45 @@ const processBox = async ({ iterator, allowIncompleteBoxes, parsedBoxes, state,
430
343
  fileOffset,
431
344
  });
432
345
  return {
433
- type: 'complete',
434
346
  box,
435
- size: boxSize,
436
347
  skipTo: null,
437
348
  };
438
349
  }
439
- if (boxType === 'mdat') {
440
- const box = await (0, mdat_1.parseMdat)({
441
- data: iterator,
442
- size: boxSize,
443
- fileOffset,
444
- existingBoxes: parsedBoxes,
350
+ if (boxType === 'mdia' ||
351
+ boxType === 'minf' ||
352
+ boxType === 'stbl' ||
353
+ boxType === 'udta' ||
354
+ boxType === 'moof' ||
355
+ boxType === 'dims' ||
356
+ boxType === 'meta' ||
357
+ boxType === 'wave' ||
358
+ boxType === 'traf' ||
359
+ boxType === 'stsb') {
360
+ const children = await (0, get_children_1.getIsoBaseMediaChildren)({
361
+ iterator,
445
362
  state,
446
- signal,
447
- maySkipSampleProcessing: state.supportsContentRange,
363
+ size: boxSize - 8,
448
364
  });
449
- if (box.type === 'partial-mdat-box') {
450
- return box;
451
- }
452
365
  return {
453
- type: 'complete',
454
- box,
455
- size: boxSize,
366
+ box: {
367
+ type: 'regular-box',
368
+ boxType,
369
+ boxSize,
370
+ children,
371
+ offset: fileOffset,
372
+ },
456
373
  skipTo: null,
457
374
  };
458
375
  }
459
- const bytesRemainingInBox = boxSize - (iterator.counter.getOffset() - fileOffset);
460
- const children = await (0, get_children_1.getChildren)({
461
- boxType,
462
- iterator,
463
- bytesRemainingInBox,
464
- state,
465
- signal,
466
- logLevel,
467
- fields,
468
- });
376
+ iterator.discard(boxSize - 8);
469
377
  return {
470
- type: 'complete',
471
378
  box: {
472
379
  type: 'regular-box',
473
380
  boxType,
474
381
  boxSize,
475
- children,
382
+ children: [],
476
383
  offset: fileOffset,
477
384
  },
478
- size: boxSize,
479
385
  skipTo: null,
480
386
  };
481
387
  };