@remotion/media-parser 4.0.200 → 4.0.202

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 (180) hide show
  1. package/dist/av1-codec-string.d.ts +5 -0
  2. package/dist/av1-codec-string.js +18 -1
  3. package/dist/bitstream/av1.d.ts +2 -0
  4. package/dist/bitstream/av1.js +12 -0
  5. package/dist/boxes/iso-base-media/avcc-hvcc.d.ts +20 -0
  6. package/dist/boxes/iso-base-media/avcc-hvcc.js +73 -0
  7. package/dist/boxes/iso-base-media/avcc.d.ts +18 -0
  8. package/dist/boxes/iso-base-media/avcc.js +27 -0
  9. package/dist/boxes/iso-base-media/esds-descriptors.d.ts +21 -0
  10. package/dist/boxes/iso-base-media/esds-descriptors.js +62 -0
  11. package/dist/boxes/iso-base-media/esds.d.ts +15 -0
  12. package/dist/boxes/iso-base-media/esds.js +27 -0
  13. package/dist/boxes/iso-base-media/mdat/mdat.js +2 -1
  14. package/dist/boxes/iso-base-media/moov/moov.js +1 -0
  15. package/dist/boxes/iso-base-media/mvhd.js +2 -2
  16. package/dist/boxes/iso-base-media/process-box.d.ts +4 -2
  17. package/dist/boxes/iso-base-media/process-box.js +56 -40
  18. package/dist/boxes/iso-base-media/stsd/keys.js +1 -1
  19. package/dist/boxes/iso-base-media/stsd/mebx.d.ts +2 -1
  20. package/dist/boxes/iso-base-media/stsd/mebx.js +2 -1
  21. package/dist/boxes/iso-base-media/stsd/samples.js +3 -0
  22. package/dist/boxes/iso-base-media/stsd/stco.d.ts +3 -2
  23. package/dist/boxes/iso-base-media/stsd/stco.js +2 -2
  24. package/dist/boxes/iso-base-media/trak/trak.js +1 -0
  25. package/dist/boxes/webm/av1-codec-private.js +1 -1
  26. package/dist/boxes/webm/bitstream/av1.js +10 -1
  27. package/dist/boxes/webm/description.d.ts +2 -2
  28. package/dist/boxes/webm/description.js +2 -2
  29. package/dist/boxes/webm/ebml.d.ts +2 -2
  30. package/dist/boxes/webm/ebml.js +23 -1
  31. package/dist/boxes/webm/get-ready-tracks.d.ts +1 -1
  32. package/dist/boxes/webm/get-ready-tracks.js +3 -3
  33. package/dist/boxes/webm/get-sample-from-block.d.ts +17 -0
  34. package/dist/boxes/webm/get-sample-from-block.js +78 -0
  35. package/dist/boxes/webm/get-track.d.ts +2 -2
  36. package/dist/boxes/webm/get-track.js +26 -25
  37. package/dist/boxes/webm/make-header.d.ts +3 -1
  38. package/dist/boxes/webm/make-header.js +90 -32
  39. package/dist/boxes/webm/parse-ebml.d.ts +12 -0
  40. package/dist/boxes/webm/parse-ebml.js +175 -0
  41. package/dist/boxes/webm/parse-webm-header.js +8 -9
  42. package/dist/boxes/webm/segments/all-segments.d.ts +572 -1
  43. package/dist/boxes/webm/segments/all-segments.js +353 -2
  44. package/dist/boxes/webm/segments/track-entry.d.ts +5 -189
  45. package/dist/boxes/webm/segments/track-entry.js +2 -457
  46. package/dist/boxes/webm/segments.d.ts +3 -16
  47. package/dist/boxes/webm/segments.js +40 -219
  48. package/dist/boxes/webm/traversal.d.ts +5 -5
  49. package/dist/boxes/webm/traversal.js +17 -6
  50. package/dist/buffer-iterator.d.ts +10 -7
  51. package/dist/buffer-iterator.js +83 -7
  52. package/dist/create/create-media.d.ts +2 -0
  53. package/dist/create/create-media.js +36 -0
  54. package/dist/create/matroska-header.d.ts +1 -0
  55. package/dist/create/matroska-header.js +66 -0
  56. package/dist/create/matroska-info.d.ts +4 -0
  57. package/dist/create/matroska-info.js +39 -0
  58. package/dist/create/matroska-segment.d.ts +1 -0
  59. package/dist/create/matroska-segment.js +12 -0
  60. package/dist/create/matroska-trackentry.d.ts +21 -0
  61. package/dist/create/matroska-trackentry.js +191 -0
  62. package/dist/create-media.d.ts +1 -0
  63. package/dist/create-media.js +78 -0
  64. package/dist/from-fetch.js +13 -3
  65. package/dist/from-input-type-file.d.ts +2 -0
  66. package/dist/from-input-type-file.js +37 -0
  67. package/dist/from-node.js +9 -2
  68. package/dist/from-web-file.js +6 -1
  69. package/dist/from-web.js +15 -6
  70. package/dist/get-audio-codec.d.ts +2 -2
  71. package/dist/get-audio-codec.js +13 -13
  72. package/dist/get-codec.d.ts +4 -0
  73. package/dist/get-codec.js +22 -0
  74. package/dist/get-duration.js +12 -14
  75. package/dist/get-sample-positions.js +1 -1
  76. package/dist/get-tracks.js +2 -2
  77. package/dist/get-video-codec.js +13 -13
  78. package/dist/has-all-info.js +1 -1
  79. package/dist/options.d.ts +3 -2
  80. package/dist/parse-media.js +17 -10
  81. package/dist/parse-video.js +16 -0
  82. package/dist/parser-context.d.ts +1 -0
  83. package/dist/parser-state.d.ts +4 -3
  84. package/dist/parser-state.js +16 -3
  85. package/dist/reader.d.ts +1 -1
  86. package/dist/readers/from-fetch.d.ts +2 -0
  87. package/dist/readers/from-fetch.js +64 -0
  88. package/dist/readers/from-node.d.ts +2 -0
  89. package/dist/readers/from-node.js +40 -0
  90. package/dist/readers/from-web-file.d.ts +2 -0
  91. package/dist/readers/from-web-file.js +39 -0
  92. package/dist/readers/reader.d.ts +11 -0
  93. package/dist/readers/reader.js +2 -0
  94. package/dist/traversal.d.ts +19 -17
  95. package/dist/traversal.js +38 -39
  96. package/dist/web-file.d.ts +2 -0
  97. package/dist/web-file.js +37 -0
  98. package/dist/writers/web-fs.d.ts +2 -0
  99. package/dist/writers/web-fs.js +28 -0
  100. package/dist/writers/writer.d.ts +9 -0
  101. package/dist/writers/writer.js +2 -0
  102. package/input.webm +0 -0
  103. package/package.json +2 -2
  104. package/src/boxes/iso-base-media/mdat/mdat.ts +2 -1
  105. package/src/boxes/iso-base-media/moov/moov.ts +1 -0
  106. package/src/boxes/iso-base-media/mvhd.ts +2 -2
  107. package/src/boxes/iso-base-media/process-box.ts +70 -40
  108. package/src/boxes/iso-base-media/stsd/keys.ts +1 -1
  109. package/src/boxes/iso-base-media/stsd/mebx.ts +3 -0
  110. package/src/boxes/iso-base-media/stsd/samples.ts +3 -0
  111. package/src/boxes/iso-base-media/stsd/stco.ts +5 -3
  112. package/src/boxes/iso-base-media/trak/trak.ts +1 -0
  113. package/src/boxes/webm/av1-codec-private.ts +1 -1
  114. package/src/boxes/webm/description.ts +7 -4
  115. package/src/boxes/webm/ebml.ts +24 -4
  116. package/src/boxes/webm/get-ready-tracks.ts +4 -4
  117. package/src/boxes/webm/get-sample-from-block.ts +125 -0
  118. package/src/boxes/webm/get-track.ts +38 -31
  119. package/src/boxes/webm/make-header.ts +129 -32
  120. package/src/boxes/webm/parse-ebml.ts +247 -0
  121. package/src/boxes/webm/parse-webm-header.ts +8 -12
  122. package/src/boxes/webm/segments/all-segments.ts +539 -1
  123. package/src/boxes/webm/segments/track-entry.ts +5 -843
  124. package/src/boxes/webm/segments.ts +48 -435
  125. package/src/boxes/webm/traversal.ts +28 -15
  126. package/src/buffer-iterator.ts +104 -10
  127. package/src/from-fetch.ts +22 -3
  128. package/src/from-node.ts +18 -4
  129. package/src/from-web-file.ts +11 -1
  130. package/src/get-audio-codec.ts +14 -16
  131. package/src/get-duration.ts +15 -16
  132. package/src/get-sample-positions.ts +1 -1
  133. package/src/get-tracks.ts +2 -2
  134. package/src/get-video-codec.ts +13 -15
  135. package/src/has-all-info.ts +1 -1
  136. package/src/options.ts +3 -2
  137. package/src/parse-media.ts +20 -9
  138. package/src/parse-video.ts +17 -0
  139. package/src/parser-context.ts +1 -0
  140. package/src/parser-state.ts +22 -5
  141. package/src/reader.ts +1 -0
  142. package/src/test/create-matroska.test.ts +255 -7
  143. package/src/test/matroska.test.ts +311 -334
  144. package/src/test/mvhd.test.ts +1 -1
  145. package/src/test/parse-esds.test.ts +2 -2
  146. package/src/test/parse-stco.test.ts +4 -2
  147. package/src/test/parse-stsc.test.ts +2 -2
  148. package/src/test/parse-stsz.test.ts +2 -2
  149. package/src/test/parse-stts.test.ts +1 -1
  150. package/src/test/stream-local.test.ts +23 -9
  151. package/src/test/stream-remote.test.ts +23 -19
  152. package/src/test/stsd.test.ts +6 -2
  153. package/src/test/tkhd.test.ts +1 -1
  154. package/src/traversal.ts +62 -85
  155. package/tsconfig.tsbuildinfo +1 -1
  156. package/dist/boxes/iso-base-media/ftype.d.ts +0 -9
  157. package/dist/boxes/iso-base-media/ftype.js +0 -31
  158. package/dist/get-video-metadata.d.ts +0 -2
  159. package/dist/get-video-metadata.js +0 -44
  160. package/dist/read-and-increment-offset.d.ts +0 -28
  161. package/dist/read-and-increment-offset.js +0 -177
  162. package/dist/understand-vorbis.d.ts +0 -1
  163. package/dist/understand-vorbis.js +0 -12
  164. package/src/boxes/webm/segments/duration.ts +0 -29
  165. package/src/boxes/webm/segments/info.ts +0 -34
  166. package/src/boxes/webm/segments/main.ts +0 -6
  167. package/src/boxes/webm/segments/muxing.ts +0 -18
  168. package/src/boxes/webm/segments/seek-head.ts +0 -34
  169. package/src/boxes/webm/segments/seek-position.ts +0 -18
  170. package/src/boxes/webm/segments/seek.ts +0 -45
  171. package/src/boxes/webm/segments/timestamp-scale.ts +0 -17
  172. package/src/boxes/webm/segments/tracks.ts +0 -32
  173. package/src/boxes/webm/segments/unknown.ts +0 -19
  174. package/src/boxes/webm/segments/void.ts +0 -18
  175. package/src/boxes/webm/segments/writing.ts +0 -18
  176. package/src/combine-uint8array.ts +0 -13
  177. /package/dist/{boxes/webm/bitstream/av1/frame.d.ts → get-samples.d.ts} +0 -0
  178. /package/dist/{boxes/webm/bitstream/av1/frame.js → get-samples.js} +0 -0
  179. /package/dist/{boxes/webm/bitstream/h264/get-h264-descriptor.d.ts → sample-aspect-ratio.d.ts} +0 -0
  180. /package/dist/{boxes/webm/bitstream/h264/get-h264-descriptor.js → sample-aspect-ratio.js} +0 -0
@@ -1,71 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseBitDepthSegment = exports.parseChannelsSegment = exports.parseSamplingFrequencySegment = exports.parseBlockElementSegment = exports.parseBlockAdditionsSegment = exports.parseReferenceBlockSegment = exports.parseBlockGroupSegment = exports.parseTrackNumber = exports.parseSimpleBlockOrBlockSegment = exports.parseTimestampSegment = exports.parseTagSegment = exports.parseTagsSegment = exports.parseDefaultFlagSegment = exports.parseSegmentUUIDSegment = exports.parseCrc32Segment = exports.parseCodecPrivateSegment = exports.parseInterlacedSegment = exports.parseTitleSegment = exports.parseColorSegment = exports.parseMaxBlockAdditionId = exports.parseAlphaModeSegment = exports.parseDisplayHeightSegment = exports.parseDisplayWidthSegment = exports.parseHeightSegment = exports.parseWidthSegment = exports.parseAudioSegment = exports.parseVideoSegment = exports.parseDefaultDurationSegment = exports.parseTrackTypeSegment = exports.parseCodecSegment = exports.parseLanguageSegment = exports.parseFlagLacing = exports.parseTrackUID = exports.parseTrackEntry = void 0;
4
- const block_simple_block_flags_1 = require("./block-simple-block-flags");
5
- const parse_children_1 = require("./parse-children");
6
- const parseTrackEntry = async (iterator, length, parserContext) => {
7
- const children = await (0, parse_children_1.expectChildren)({
8
- iterator,
9
- length,
10
- initialChildren: [],
11
- wrap: null,
12
- parserContext,
13
- });
14
- if (children.status === 'incomplete') {
15
- throw new Error('Incomplete children ' + length);
16
- }
17
- return {
18
- type: 'track-entry-segment',
19
- children: children.segments,
20
- };
21
- };
22
- exports.parseTrackEntry = parseTrackEntry;
23
- const parseTrackUID = (iterator, length) => {
24
- const bytes = iterator.getSlice(length);
25
- const asString = [...bytes]
26
- .map((b) => b.toString(16).padStart(2, '0'))
27
- .join('');
28
- return {
29
- type: 'track-uid-segment',
30
- trackUid: asString,
31
- };
32
- };
33
- exports.parseTrackUID = parseTrackUID;
34
- const parseFlagLacing = (iterator, length) => {
35
- if (length !== 1) {
36
- throw new Error('Expected flag lacing to be 1 byte');
37
- }
38
- const bytes = iterator.getSlice(length);
39
- if (bytes[0] !== 1 && bytes[0] !== 0) {
40
- throw new Error('Expected lacing to be 1 or 0');
41
- }
42
- return {
43
- type: 'flag-lacing-segment',
44
- lacing: Boolean(bytes[0]),
45
- };
46
- };
47
- exports.parseFlagLacing = parseFlagLacing;
48
- const parseLanguageSegment = (iterator, length) => {
49
- if (length !== 3) {
50
- throw new Error('Expected language segment to be 3 bytes');
51
- }
52
- const language = iterator.getByteString(length);
53
- return {
54
- type: 'language-segment',
55
- language,
56
- };
57
- };
58
- exports.parseLanguageSegment = parseLanguageSegment;
59
- const parseCodecSegment = (iterator, length) => {
60
- // Could make a TypeScript enum with it
61
- // https://www.matroska.org/technical/codec_specs.html
62
- const codec = iterator.getByteString(length);
63
- return {
64
- type: 'codec-segment',
65
- codec,
66
- };
67
- };
68
- exports.parseCodecSegment = parseCodecSegment;
3
+ exports.trackTypeToString = void 0;
69
4
  const trackTypeToString = (trackType) => {
70
5
  switch (trackType) {
71
6
  case 1:
@@ -86,394 +21,4 @@ const trackTypeToString = (trackType) => {
86
21
  throw new Error(`Unknown track type: ${trackType}`);
87
22
  }
88
23
  };
89
- const parseTrackTypeSegment = (iterator, length) => {
90
- if (length !== 1) {
91
- throw new Error('Expected track type segment to be 1 byte');
92
- }
93
- const trackType = iterator.getUint8();
94
- const trackTypeString = trackTypeToString(trackType);
95
- // Could make the return type nicer
96
- /* 1 - video,
97
- 2 - audio,
98
- 3 - complex,
99
- 16 - logo,
100
- 17 - subtitle,
101
- 18 - buttons,
102
- 32 - control,
103
- 33 - metadata;
104
- */
105
- return {
106
- type: 'track-type-segment',
107
- trackType: trackTypeString,
108
- };
109
- };
110
- exports.parseTrackTypeSegment = parseTrackTypeSegment;
111
- const parseDefaultDurationSegment = (iterator, length) => {
112
- const defaultDuration = iterator.getDecimalBytes(length);
113
- return {
114
- type: 'default-duration-segment',
115
- defaultDuration,
116
- };
117
- };
118
- exports.parseDefaultDurationSegment = parseDefaultDurationSegment;
119
- const parseVideoSegment = async (iterator, length, parserContext) => {
120
- const children = await (0, parse_children_1.expectChildren)({
121
- iterator,
122
- length,
123
- initialChildren: [],
124
- wrap: null,
125
- parserContext,
126
- });
127
- if (children.status === 'incomplete') {
128
- throw new Error('Incomplete children');
129
- }
130
- return {
131
- type: 'video-segment',
132
- children: children.segments,
133
- };
134
- };
135
- exports.parseVideoSegment = parseVideoSegment;
136
- const parseAudioSegment = async (iterator, length, parserContext) => {
137
- const children = await (0, parse_children_1.expectChildren)({
138
- iterator,
139
- length,
140
- initialChildren: [],
141
- wrap: null,
142
- parserContext,
143
- });
144
- if (children.status === 'incomplete') {
145
- throw new Error('Incomplete children');
146
- }
147
- return {
148
- type: 'audio-segment',
149
- children: children.segments,
150
- };
151
- };
152
- exports.parseAudioSegment = parseAudioSegment;
153
- const parseWidthSegment = (iterator, length) => {
154
- if (length !== 2) {
155
- throw new Error('Expected width segment to be 2 bytes');
156
- }
157
- const width = iterator.getUint16();
158
- return {
159
- type: 'width-segment',
160
- width,
161
- };
162
- };
163
- exports.parseWidthSegment = parseWidthSegment;
164
- const parseHeightSegment = (iterator, length) => {
165
- if (length !== 2) {
166
- throw new Error('Expected height segment to be 2 bytes');
167
- }
168
- const height = iterator.getUint16();
169
- return {
170
- type: 'height-segment',
171
- height,
172
- };
173
- };
174
- exports.parseHeightSegment = parseHeightSegment;
175
- const parseDisplayWidthSegment = (iterator, length) => {
176
- if (length !== 2) {
177
- throw new Error(`Expected display width segment to be 2 bytes, got ${length}`);
178
- }
179
- const displayWidth = iterator.getUint16();
180
- return {
181
- type: 'display-width-segment',
182
- displayWidth,
183
- };
184
- };
185
- exports.parseDisplayWidthSegment = parseDisplayWidthSegment;
186
- const parseDisplayHeightSegment = (iterator, length) => {
187
- if (length !== 2) {
188
- throw new Error(`Expected display height segment to be 2 bytes, got ${length}`);
189
- }
190
- const displayHeight = iterator.getUint16();
191
- return {
192
- type: 'display-height-segment',
193
- displayHeight,
194
- };
195
- };
196
- exports.parseDisplayHeightSegment = parseDisplayHeightSegment;
197
- const parseAlphaModeSegment = (iterator, length) => {
198
- if (length !== 1) {
199
- throw new Error('Expected alpha mode segment to be 1 byte');
200
- }
201
- const alphaMode = iterator.getUint8();
202
- return {
203
- type: 'alpha-mode-segment',
204
- alphaMode,
205
- };
206
- };
207
- exports.parseAlphaModeSegment = parseAlphaModeSegment;
208
- const parseMaxBlockAdditionId = (iterator, length) => {
209
- if (length !== 1) {
210
- throw new Error('Expected alpha mode segment to be 1 byte');
211
- }
212
- const maxBlockAdditionId = iterator.getUint8();
213
- return {
214
- type: 'max-block-addition-id-segment',
215
- maxBlockAdditionId,
216
- };
217
- };
218
- exports.parseMaxBlockAdditionId = parseMaxBlockAdditionId;
219
- const parseColorSegment = (iterator, length) => {
220
- iterator.discard(length);
221
- return {
222
- type: 'color-segment',
223
- length,
224
- };
225
- };
226
- exports.parseColorSegment = parseColorSegment;
227
- const parseTitleSegment = (iterator, length) => {
228
- const title = iterator.getByteString(length);
229
- return {
230
- type: 'title-segment',
231
- title,
232
- };
233
- };
234
- exports.parseTitleSegment = parseTitleSegment;
235
- const parseInterlacedSegment = (iterator, length) => {
236
- if (length !== 1) {
237
- throw new Error('Expected interlaced segment to be 1 byte, but is ' + length);
238
- }
239
- const interlaced = iterator.getUint8();
240
- return {
241
- type: 'interlaced-segment',
242
- interlaced: Boolean(interlaced),
243
- };
244
- };
245
- exports.parseInterlacedSegment = parseInterlacedSegment;
246
- const parseCodecPrivateSegment = (iterator, length) => {
247
- return {
248
- type: 'codec-private-segment',
249
- codecPrivateData: iterator.getSlice(length),
250
- };
251
- };
252
- exports.parseCodecPrivateSegment = parseCodecPrivateSegment;
253
- const parseCrc32Segment = (iterator, length) => {
254
- return {
255
- type: 'crc32-segment',
256
- crc32: [...iterator.getSlice(length)],
257
- };
258
- };
259
- exports.parseCrc32Segment = parseCrc32Segment;
260
- const parseSegmentUUIDSegment = (iterator, length) => {
261
- return {
262
- type: 'segment-uuid-segment',
263
- segmentUUID: iterator.getSlice(length).toString(),
264
- };
265
- };
266
- exports.parseSegmentUUIDSegment = parseSegmentUUIDSegment;
267
- const parseDefaultFlagSegment = (iterator, length) => {
268
- if (length !== 1) {
269
- throw new Error('Expected default flag segment to be 1 byte');
270
- }
271
- return {
272
- type: 'default-flag-segment',
273
- defaultFlag: Boolean(iterator.getUint8()),
274
- };
275
- };
276
- exports.parseDefaultFlagSegment = parseDefaultFlagSegment;
277
- const parseTagsSegment = async (iterator, length, parserContext) => {
278
- const children = await (0, parse_children_1.expectChildren)({
279
- iterator,
280
- length,
281
- initialChildren: [],
282
- wrap: null,
283
- parserContext,
284
- });
285
- if (children.status === 'incomplete') {
286
- throw new Error('Incomplete children');
287
- }
288
- return {
289
- type: 'tags-segment',
290
- children: children.segments,
291
- };
292
- };
293
- exports.parseTagsSegment = parseTagsSegment;
294
- const parseTagSegment = (iterator, length) => {
295
- iterator.discard(length);
296
- return {
297
- type: 'tag-segment',
298
- length,
299
- };
300
- };
301
- exports.parseTagSegment = parseTagSegment;
302
- const parseTimestampSegment = (iterator, length) => {
303
- if (length > 3) {
304
- throw new Error('Expected timestamp segment to be 1 byte or 2 bytes, but is ' + length);
305
- }
306
- if (length === 3) {
307
- const val = iterator.getUint24();
308
- return {
309
- type: 'timestamp-segment',
310
- timestamp: val,
311
- };
312
- }
313
- const value = length === 2 ? iterator.getUint16() : iterator.getUint8();
314
- return {
315
- type: 'timestamp-segment',
316
- timestamp: value,
317
- };
318
- };
319
- exports.parseTimestampSegment = parseTimestampSegment;
320
- const parseSimpleBlockOrBlockSegment = async ({ iterator, length, parserContext, type, }) => {
321
- const start = iterator.counter.getOffset();
322
- const trackNumber = iterator.getVint();
323
- const timecodeRelativeToCluster = iterator.getUint16();
324
- const { invisible, lacing, keyframe } = (0, block_simple_block_flags_1.parseBlockFlags)(iterator, type);
325
- const codec = parserContext.parserState.getTrackInfoByNumber(trackNumber);
326
- const clusterOffset = parserContext.parserState.getTimestampOffsetForByteOffset(iterator.counter.getOffset());
327
- if (clusterOffset === undefined) {
328
- throw new Error('Could not find offset for byte offset ' + iterator.counter.getOffset());
329
- }
330
- const timecode = timecodeRelativeToCluster + clusterOffset;
331
- if (!codec) {
332
- throw new Error('Could not find codec for track ' + trackNumber);
333
- }
334
- const remainingNow = length - (iterator.counter.getOffset() - start);
335
- let videoSample = null;
336
- if (codec.codec.startsWith('V_')) {
337
- const partialVideoSample = {
338
- data: iterator.getSlice(remainingNow),
339
- cts: null,
340
- dts: null,
341
- duration: undefined,
342
- trackId: trackNumber,
343
- timestamp: timecode,
344
- };
345
- if (keyframe === null) {
346
- // If we don't know if this is a keyframe, we know after we emit the BlockGroup
347
- videoSample = partialVideoSample;
348
- }
349
- else {
350
- const sample = {
351
- ...partialVideoSample,
352
- type: keyframe ? 'key' : 'delta',
353
- };
354
- await parserContext.parserState.onVideoSample(trackNumber, sample);
355
- }
356
- }
357
- if (codec.codec.startsWith('A_')) {
358
- await parserContext.parserState.onAudioSample(trackNumber, {
359
- data: iterator.getSlice(remainingNow),
360
- trackId: trackNumber,
361
- timestamp: timecode,
362
- type: 'key',
363
- });
364
- }
365
- const remainingNowAfter = length - (iterator.counter.getOffset() - start);
366
- if (remainingNowAfter > 0) {
367
- iterator.discard(remainingNowAfter);
368
- }
369
- return {
370
- type: 'simple-block-or-block-segment',
371
- length,
372
- trackNumber,
373
- timecode,
374
- keyframe,
375
- lacing,
376
- invisible,
377
- videoSample,
378
- };
379
- };
380
- exports.parseSimpleBlockOrBlockSegment = parseSimpleBlockOrBlockSegment;
381
- const parseTrackNumber = (iterator, length) => {
382
- if (length !== 1) {
383
- throw new Error('Expected track number to be 1 byte');
384
- }
385
- const trackNumber = iterator.getUint8();
386
- return {
387
- type: 'track-number-segment',
388
- trackNumber,
389
- };
390
- };
391
- exports.parseTrackNumber = parseTrackNumber;
392
- const parseBlockGroupSegment = async (iterator, length, parserContext) => {
393
- const children = await (0, parse_children_1.expectChildren)({
394
- iterator,
395
- length,
396
- initialChildren: [],
397
- wrap: null,
398
- parserContext,
399
- });
400
- if (children.status === 'incomplete') {
401
- throw new Error('Incomplete boxes are not allowed');
402
- }
403
- return {
404
- type: 'block-group-segment',
405
- children: children.segments,
406
- };
407
- };
408
- exports.parseBlockGroupSegment = parseBlockGroupSegment;
409
- const parseReferenceBlockSegment = (iterator, length) => {
410
- if (length > 4) {
411
- throw new Error(`Expected reference block segment to be 4 bytes, but got ${length}`);
412
- }
413
- const referenceBlock = length === 4
414
- ? iterator.getUint32()
415
- : length === 3
416
- ? iterator.getUint24()
417
- : length === 2
418
- ? iterator.getUint16()
419
- : iterator.getUint8();
420
- return {
421
- type: 'reference-block-segment',
422
- referenceBlock,
423
- };
424
- };
425
- exports.parseReferenceBlockSegment = parseReferenceBlockSegment;
426
- const parseBlockAdditionsSegment = (iterator, length) => {
427
- const blockAdditions = iterator.getSlice(length);
428
- return {
429
- type: 'block-additions-segment',
430
- blockAdditions,
431
- };
432
- };
433
- exports.parseBlockAdditionsSegment = parseBlockAdditionsSegment;
434
- const parseBlockElementSegment = (iterator, length) => {
435
- iterator.discard(length);
436
- return {
437
- type: 'block-element-segment',
438
- length,
439
- };
440
- };
441
- exports.parseBlockElementSegment = parseBlockElementSegment;
442
- const parseSamplingFrequencySegment = (iterator, length) => {
443
- if (length === 4) {
444
- return {
445
- type: 'sampling-frequency-segment',
446
- samplingFrequency: iterator.getFloat32(),
447
- };
448
- }
449
- if (length === 8) {
450
- return {
451
- type: 'sampling-frequency-segment',
452
- samplingFrequency: iterator.getFloat64(),
453
- };
454
- }
455
- throw new Error(`Expected length of sampling frequency segment to be 4 or 8, got ${length}`);
456
- };
457
- exports.parseSamplingFrequencySegment = parseSamplingFrequencySegment;
458
- const parseChannelsSegment = (iterator, length) => {
459
- if (length !== 1) {
460
- throw new Error(`Expected length of channels segment to be 1, got ${length}`);
461
- }
462
- const channels = iterator.getUint8();
463
- return {
464
- type: 'channels-segment',
465
- channels,
466
- };
467
- };
468
- exports.parseChannelsSegment = parseChannelsSegment;
469
- const parseBitDepthSegment = (iterator, length) => {
470
- if (length !== 1) {
471
- throw new Error(`Expected length of bit depth segment to be 1, got ${length}`);
472
- }
473
- const bitDepth = iterator.getUint8();
474
- return {
475
- type: 'bit-depth-segment',
476
- bitDepth,
477
- };
478
- };
479
- exports.parseBitDepthSegment = parseBitDepthSegment;
24
+ exports.trackTypeToString = trackTypeToString;
@@ -1,20 +1,7 @@
1
1
  import type { BufferIterator } from '../../buffer-iterator';
2
2
  import type { ParseResult } from '../../parse-result';
3
3
  import type { ParserContext } from '../../parser-context';
4
- import type { DurationSegment } from './segments/duration';
5
- import type { InfoSegment } from './segments/info';
6
- import { type MainSegment } from './segments/main';
7
- import { type MuxingAppSegment } from './segments/muxing';
8
- import type { SeekIdSegment } from './segments/seek';
9
- import { type SeekSegment } from './segments/seek';
10
- import type { SeekHeadSegment } from './segments/seek-head';
11
- import { type SeekPositionSegment } from './segments/seek-position';
12
- import type { TimestampScaleSegment } from './segments/timestamp-scale';
13
- import type { AlphaModeSegment, AudioSegment, BitDepthSegment, BlockAdditionsSegment, BlockElement, BlockGroupSegment, ChannelsSegment, ClusterSegment, CodecPrivateSegment, CodecSegment, ColorSegment, Crc32Segment, DefaultDurationSegment, DefaultFlagSegment, DisplayHeightSegment, DisplayWidthSegment, FlagLacingSegment, HeightSegment, InterlacedSegment, LanguageSegment, MaxBlockAdditionId, ReferenceBlockSegment, SamplingFrequencySegment, SegmentUUIDSegment, SimpleBlockOrBlockSegment, TagSegment, TagsSegment, TimestampSegment, TitleSegment, TrackEntrySegment, TrackNumberSegment, TrackTypeSegment, TrackUIDSegment, VideoSegment, WidthSegment } from './segments/track-entry';
14
- import type { TracksSegment } from './segments/tracks';
15
- import type { UnknownSegment } from './segments/unknown';
16
- import type { VoidSegment } from './segments/void';
17
- import type { WritingAppSegment } from './segments/writing';
18
- export type MatroskaSegment = MainSegment | UnknownSegment | SeekHeadSegment | SeekSegment | SeekPositionSegment | VoidSegment | InfoSegment | TimestampScaleSegment | MuxingAppSegment | WritingAppSegment | DurationSegment | TracksSegment | TrackEntrySegment | TrackNumberSegment | TrackUIDSegment | FlagLacingSegment | LanguageSegment | CodecSegment | TrackTypeSegment | DefaultDurationSegment | VideoSegment | WidthSegment | HeightSegment | DisplayWidthSegment | DisplayHeightSegment | AlphaModeSegment | MaxBlockAdditionId | ColorSegment | TitleSegment | InterlacedSegment | CodecPrivateSegment | Crc32Segment | SegmentUUIDSegment | DefaultFlagSegment | TagsSegment | TagSegment | ClusterSegment | TimestampSegment | SimpleBlockOrBlockSegment | BlockGroupSegment | BlockElement | SeekIdSegment | AudioSegment | SamplingFrequencySegment | ChannelsSegment | BitDepthSegment | ReferenceBlockSegment | BlockAdditionsSegment;
19
- export type OnTrackEntrySegment = (trackEntry: TrackEntrySegment) => void;
4
+ import type { PossibleEbml, TrackEntry } from './segments/all-segments';
5
+ export type MatroskaSegment = PossibleEbml;
6
+ export type OnTrackEntrySegment = (trackEntry: TrackEntry) => void;
20
7
  export declare const expectSegment: (iterator: BufferIterator, parserContext: ParserContext) => Promise<ParseResult>;