@remotion/media-parser 4.0.193 → 4.0.195

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