@remotion/media-parser 4.0.194 → 4.0.196

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 (275) 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/ftype.d.ts +9 -0
  10. package/dist/boxes/iso-base-media/ftype.js +31 -0
  11. package/dist/boxes/iso-base-media/make-track.d.ts +3 -0
  12. package/dist/boxes/iso-base-media/make-track.js +112 -0
  13. package/dist/boxes/iso-base-media/mdat/mdat.d.ts +6 -2
  14. package/dist/boxes/iso-base-media/mdat/mdat.js +90 -6
  15. package/dist/boxes/iso-base-media/moov/moov.d.ts +4 -2
  16. package/dist/boxes/iso-base-media/moov/moov.js +4 -2
  17. package/dist/boxes/iso-base-media/mvhd.js +7 -1
  18. package/dist/boxes/iso-base-media/process-box.d.ts +20 -3
  19. package/dist/boxes/iso-base-media/process-box.js +322 -34
  20. package/dist/boxes/iso-base-media/stsd/av1c.d.ts +9 -0
  21. package/dist/boxes/iso-base-media/stsd/av1c.js +10 -0
  22. package/dist/boxes/iso-base-media/stsd/avcc-hvcc.d.ts +20 -0
  23. package/dist/boxes/iso-base-media/stsd/avcc-hvcc.js +73 -0
  24. package/dist/boxes/iso-base-media/stsd/avcc.d.ts +10 -0
  25. package/dist/boxes/iso-base-media/stsd/avcc.js +21 -0
  26. package/dist/boxes/iso-base-media/stsd/colr.d.ts +11 -0
  27. package/dist/boxes/iso-base-media/stsd/colr.js +35 -0
  28. package/dist/boxes/iso-base-media/stsd/ctts.d.ts +19 -0
  29. package/dist/boxes/iso-base-media/stsd/ctts.js +30 -0
  30. package/dist/boxes/iso-base-media/stsd/hvcc.d.ts +11 -0
  31. package/dist/boxes/iso-base-media/stsd/hvcc.js +17 -0
  32. package/dist/boxes/iso-base-media/stsd/keys.js +1 -0
  33. package/dist/boxes/iso-base-media/stsd/mebx.d.ts +4 -2
  34. package/dist/boxes/iso-base-media/stsd/mebx.js +4 -2
  35. package/dist/boxes/iso-base-media/stsd/pasp.d.ts +12 -0
  36. package/dist/boxes/iso-base-media/stsd/pasp.js +17 -0
  37. package/dist/boxes/iso-base-media/stsd/samples.d.ts +12 -5
  38. package/dist/boxes/iso-base-media/stsd/samples.js +27 -10
  39. package/dist/boxes/iso-base-media/stsd/stsd.d.ts +4 -2
  40. package/dist/boxes/iso-base-media/stsd/stsd.js +6 -2
  41. package/dist/boxes/iso-base-media/stsd/stss.d.ts +13 -0
  42. package/dist/boxes/iso-base-media/stsd/stss.js +28 -0
  43. package/dist/boxes/iso-base-media/stsd/stsz.d.ts +9 -3
  44. package/dist/boxes/iso-base-media/stsd/stsz.js +14 -2
  45. package/dist/boxes/iso-base-media/stsd/stts.d.ts +15 -0
  46. package/dist/boxes/iso-base-media/stsd/stts.js +35 -0
  47. package/dist/boxes/iso-base-media/tkhd.d.ts +3 -0
  48. package/dist/boxes/iso-base-media/tkhd.js +41 -14
  49. package/dist/boxes/iso-base-media/trak/trak.d.ts +4 -2
  50. package/dist/boxes/iso-base-media/trak/trak.js +4 -2
  51. package/dist/boxes/iso-base-media/void-box.d.ts +4 -0
  52. package/dist/boxes/iso-base-media/void-box.js +2 -0
  53. package/dist/boxes/webm/allowed-partial-segments.d.ts +1 -0
  54. package/dist/boxes/webm/allowed-partial-segments.js +4 -0
  55. package/dist/boxes/webm/av1-codec-private.d.ts +2 -0
  56. package/dist/boxes/webm/av1-codec-private.js +95 -0
  57. package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.d.ts +14 -0
  58. package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.js +67 -0
  59. package/dist/boxes/webm/bitstream/av1/bitstream-frame.d.ts +11 -0
  60. package/dist/boxes/webm/bitstream/av1/bitstream-frame.js +14 -0
  61. package/dist/boxes/webm/bitstream/av1/chroma-sample-position.d.ts +6 -0
  62. package/dist/boxes/webm/bitstream/av1/chroma-sample-position.js +9 -0
  63. package/dist/boxes/webm/bitstream/av1/color-config.d.ts +16 -0
  64. package/dist/boxes/webm/bitstream/av1/color-config.js +103 -0
  65. package/dist/boxes/webm/bitstream/av1/color-primaries.d.ts +14 -0
  66. package/dist/boxes/webm/bitstream/av1/color-primaries.js +17 -0
  67. package/dist/boxes/webm/bitstream/av1/decoder-model-info.d.ts +9 -0
  68. package/dist/boxes/webm/bitstream/av1/decoder-model-info.js +17 -0
  69. package/dist/boxes/webm/bitstream/av1/header-segment.d.ts +51 -0
  70. package/dist/boxes/webm/bitstream/av1/header-segment.js +183 -0
  71. package/dist/boxes/webm/bitstream/av1/matrix-coefficients.d.ts +17 -0
  72. package/dist/boxes/webm/bitstream/av1/matrix-coefficients.js +20 -0
  73. package/dist/boxes/webm/bitstream/av1/operating-parameters-info.d.ts +10 -0
  74. package/dist/boxes/webm/bitstream/av1/operating-parameters-info.js +15 -0
  75. package/dist/boxes/webm/bitstream/av1/temporal-point-info.d.ts +5 -0
  76. package/dist/boxes/webm/bitstream/av1/temporal-point-info.js +8 -0
  77. package/dist/boxes/webm/bitstream/av1/timing-info.d.ts +8 -0
  78. package/dist/boxes/webm/bitstream/av1/timing-info.js +20 -0
  79. package/dist/boxes/webm/bitstream/av1/transfer-characteristics.d.ts +21 -0
  80. package/dist/boxes/webm/bitstream/av1/transfer-characteristics.js +24 -0
  81. package/dist/boxes/webm/bitstream/av1/uvlc.d.ts +2 -0
  82. package/dist/boxes/webm/bitstream/av1/uvlc.js +20 -0
  83. package/dist/boxes/webm/bitstream/av1.d.ts +20 -0
  84. package/dist/boxes/webm/bitstream/av1.js +118 -0
  85. package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.d.ts +0 -0
  86. package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.js +1 -0
  87. package/dist/boxes/webm/description.d.ts +2 -0
  88. package/dist/boxes/webm/description.js +83 -0
  89. package/dist/boxes/webm/get-ready-tracks.d.ts +3 -0
  90. package/dist/boxes/webm/get-ready-tracks.js +29 -0
  91. package/dist/boxes/webm/get-track.d.ts +6 -0
  92. package/dist/boxes/webm/get-track.js +183 -0
  93. package/dist/boxes/webm/parse-webm-header.d.ts +2 -1
  94. package/dist/boxes/webm/parse-webm-header.js +2 -2
  95. package/dist/boxes/webm/segments/all-segments.d.ts +269 -0
  96. package/dist/boxes/webm/segments/all-segments.js +277 -0
  97. package/dist/boxes/webm/segments/duration.d.ts +1 -1
  98. package/dist/boxes/webm/segments/duration.js +13 -9
  99. package/dist/boxes/webm/segments/info.d.ts +2 -1
  100. package/dist/boxes/webm/segments/info.js +12 -4
  101. package/dist/boxes/webm/segments/main.d.ts +0 -2
  102. package/dist/boxes/webm/segments/main.js +0 -11
  103. package/dist/boxes/webm/segments/muxing.d.ts +1 -1
  104. package/dist/boxes/webm/segments/muxing.js +1 -2
  105. package/dist/boxes/webm/segments/parse-children.d.ts +11 -1
  106. package/dist/boxes/webm/segments/parse-children.js +82 -6
  107. package/dist/boxes/webm/segments/seek-head.d.ts +2 -1
  108. package/dist/boxes/webm/segments/seek-head.js +12 -3
  109. package/dist/boxes/webm/segments/seek-position.d.ts +1 -1
  110. package/dist/boxes/webm/segments/seek-position.js +1 -2
  111. package/dist/boxes/webm/segments/seek.d.ts +7 -2
  112. package/dist/boxes/webm/segments/seek.js +22 -9
  113. package/dist/boxes/webm/segments/track-entry.d.ts +102 -22
  114. package/dist/boxes/webm/segments/track-entry.js +269 -57
  115. package/dist/boxes/webm/segments/tracks.d.ts +2 -1
  116. package/dist/boxes/webm/segments/tracks.js +12 -4
  117. package/dist/boxes/webm/segments/void.d.ts +1 -1
  118. package/dist/boxes/webm/segments/void.js +1 -2
  119. package/dist/boxes/webm/segments/writing.d.ts +1 -1
  120. package/dist/boxes/webm/segments/writing.js +1 -2
  121. package/dist/boxes/webm/segments.d.ts +8 -4
  122. package/dist/boxes/webm/segments.js +176 -40
  123. package/dist/boxes/webm/traversal.d.ts +7 -0
  124. package/dist/boxes/webm/traversal.js +25 -0
  125. package/dist/buffer-iterator.d.ts +15 -1
  126. package/dist/buffer-iterator.js +115 -46
  127. package/dist/combine-uint8array.d.ts +1 -0
  128. package/dist/combine-uint8array.js +13 -0
  129. package/dist/from-fetch.d.ts +2 -0
  130. package/dist/from-fetch.js +54 -0
  131. package/dist/from-node.js +6 -0
  132. package/dist/from-web-file.d.ts +2 -0
  133. package/dist/from-web-file.js +34 -0
  134. package/dist/from-web.js +6 -9
  135. package/dist/get-audio-codec.d.ts +19 -0
  136. package/dist/get-audio-codec.js +153 -60
  137. package/dist/get-dimensions.d.ts +8 -2
  138. package/dist/get-dimensions.js +13 -91
  139. package/dist/get-duration.js +4 -7
  140. package/dist/get-fps.d.ts +4 -3
  141. package/dist/get-fps.js +17 -116
  142. package/dist/get-sample-aspect-ratio.d.ts +37 -0
  143. package/dist/get-sample-aspect-ratio.js +137 -0
  144. package/dist/get-sample-positions.d.ts +11 -1
  145. package/dist/get-sample-positions.js +31 -2
  146. package/dist/get-tracks.d.ts +44 -5
  147. package/dist/get-tracks.js +66 -48
  148. package/dist/get-video-codec.d.ts +2 -0
  149. package/dist/get-video-codec.js +47 -31
  150. package/dist/get-video-metadata.d.ts +2 -0
  151. package/dist/get-video-metadata.js +44 -0
  152. package/dist/has-all-info.d.ts +2 -1
  153. package/dist/has-all-info.js +14 -5
  154. package/dist/index.d.ts +1 -0
  155. package/dist/make-hvc1-codec-strings.d.ts +2 -0
  156. package/dist/make-hvc1-codec-strings.js +47 -0
  157. package/dist/options.d.ts +26 -4
  158. package/dist/parse-media.js +62 -17
  159. package/dist/parse-result.d.ts +16 -5
  160. package/dist/parse-video.d.ts +11 -2
  161. package/dist/parse-video.js +14 -6
  162. package/dist/parser-context.d.ts +8 -0
  163. package/dist/parser-context.js +2 -0
  164. package/dist/parser-state.d.ts +23 -0
  165. package/dist/parser-state.js +112 -0
  166. package/dist/read-and-increment-offset.d.ts +28 -0
  167. package/dist/read-and-increment-offset.js +177 -0
  168. package/dist/reader.d.ts +2 -2
  169. package/dist/traversal.d.ts +37 -0
  170. package/dist/traversal.js +244 -1
  171. package/dist/understand-vorbis.d.ts +1 -0
  172. package/dist/understand-vorbis.js +12 -0
  173. package/dist/webcodec-sample-types.d.ts +21 -0
  174. package/dist/webcodec-sample-types.js +2 -0
  175. package/package.json +10 -2
  176. package/src/add-new-matroska-tracks.ts +23 -0
  177. package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +61 -0
  178. package/src/boxes/iso-base-media/esds/esds-descriptors.ts +33 -2
  179. package/src/boxes/iso-base-media/make-track.ts +157 -0
  180. package/src/boxes/iso-base-media/mdat/mdat.ts +131 -0
  181. package/src/boxes/iso-base-media/moov/moov.ts +8 -3
  182. package/src/boxes/iso-base-media/mvhd.ts +7 -1
  183. package/src/boxes/iso-base-media/process-box.ts +388 -38
  184. package/src/boxes/iso-base-media/stsd/av1c.ts +19 -0
  185. package/src/boxes/iso-base-media/stsd/avcc.ts +36 -0
  186. package/src/boxes/iso-base-media/stsd/colr.ts +49 -0
  187. package/src/boxes/iso-base-media/stsd/ctts.ts +55 -0
  188. package/src/boxes/iso-base-media/stsd/hvcc.ts +32 -0
  189. package/src/boxes/iso-base-media/stsd/keys.ts +2 -0
  190. package/src/boxes/iso-base-media/stsd/mebx.ts +8 -3
  191. package/src/boxes/iso-base-media/stsd/pasp.ts +32 -0
  192. package/src/boxes/iso-base-media/stsd/samples.ts +43 -16
  193. package/src/boxes/iso-base-media/stsd/stco.ts +50 -0
  194. package/src/boxes/iso-base-media/stsd/stsc.ts +61 -0
  195. package/src/boxes/iso-base-media/stsd/stsd.ts +10 -3
  196. package/src/boxes/iso-base-media/stsd/stss.ts +47 -0
  197. package/src/boxes/iso-base-media/stsd/stsz.ts +75 -0
  198. package/src/boxes/iso-base-media/tkhd.ts +63 -16
  199. package/src/boxes/iso-base-media/trak/trak.ts +8 -3
  200. package/src/boxes/iso-base-media/void-box.ts +4 -0
  201. package/src/boxes/webm/allowed-partial-segments.ts +1 -0
  202. package/src/boxes/webm/av1-codec-private.ts +113 -0
  203. package/src/boxes/webm/description.ts +101 -0
  204. package/src/boxes/webm/get-ready-tracks.ts +36 -0
  205. package/src/boxes/webm/get-track.ts +250 -0
  206. package/src/boxes/webm/parse-webm-header.ts +6 -2
  207. package/src/boxes/webm/segments/all-segments.ts +285 -0
  208. package/src/boxes/webm/segments/duration.ts +15 -8
  209. package/src/boxes/webm/segments/info.ts +18 -4
  210. package/src/boxes/webm/segments/main.ts +0 -13
  211. package/src/boxes/webm/segments/muxing.ts +1 -1
  212. package/src/boxes/webm/segments/parse-children.ts +132 -9
  213. package/src/boxes/webm/segments/seek-head.ts +17 -4
  214. package/src/boxes/webm/segments/seek-position.ts +1 -2
  215. package/src/boxes/webm/segments/seek.ts +31 -9
  216. package/src/boxes/webm/segments/track-entry.ts +475 -65
  217. package/src/boxes/webm/segments/tracks.ts +17 -7
  218. package/src/boxes/webm/segments/void.ts +4 -2
  219. package/src/boxes/webm/segments/writing.ts +1 -1
  220. package/src/boxes/webm/segments.ts +266 -42
  221. package/src/boxes/webm/traversal.ts +32 -0
  222. package/src/buffer-iterator.ts +140 -45
  223. package/src/combine-uint8array.ts +13 -0
  224. package/src/{from-web.ts → from-fetch.ts} +9 -1
  225. package/src/from-node.ts +8 -0
  226. package/src/from-web-file.ts +39 -0
  227. package/src/get-audio-codec.ts +213 -84
  228. package/src/get-dimensions.ts +25 -132
  229. package/src/get-duration.ts +4 -8
  230. package/src/get-fps.ts +27 -172
  231. package/src/get-sample-aspect-ratio.ts +204 -0
  232. package/src/get-sample-positions.ts +93 -0
  233. package/src/get-tracks.ts +147 -0
  234. package/src/get-video-codec.ts +62 -47
  235. package/src/has-all-info.ts +35 -5
  236. package/src/index.ts +8 -0
  237. package/src/make-hvc1-codec-strings.ts +55 -0
  238. package/src/options.ts +48 -9
  239. package/src/parse-media.ts +90 -21
  240. package/src/parse-result.ts +28 -4
  241. package/src/parse-video.ts +30 -7
  242. package/src/parser-context.ts +9 -0
  243. package/src/parser-state.ts +151 -0
  244. package/src/reader.ts +2 -2
  245. package/src/test/aspect-ratio.test.ts +42 -0
  246. package/src/test/av1.test.ts +108 -0
  247. package/src/test/duration.test.ts +5 -21
  248. package/src/test/matroska.test.ts +350 -31
  249. package/src/test/mvhd.test.ts +6 -1
  250. package/src/test/parse-esds.test.ts +29 -6
  251. package/src/test/parse-stco.test.ts +59 -0
  252. package/src/test/parse-stsc.test.ts +104 -0
  253. package/src/test/parse-stsz.test.ts +57 -0
  254. package/src/test/parse-stts.test.ts +1 -1
  255. package/src/test/parse-video.test.ts +23 -35
  256. package/src/test/parse-webm.test.ts +5 -5
  257. package/src/test/stream-local.test.ts +542 -46
  258. package/src/test/stream-remote.test.ts +15 -13
  259. package/src/test/stream-samples.test.ts +259 -0
  260. package/src/test/stsd.test.ts +60 -8
  261. package/src/test/tkhd.test.ts +4 -1
  262. package/src/traversal.ts +496 -0
  263. package/src/webcodec-sample-types.ts +30 -0
  264. package/tsconfig.json +5 -1
  265. package/tsconfig.tsbuildinfo +1 -1
  266. package/boxes.json +0 -1
  267. package/dist/boxes/iso-base-media/esds-descriptors.d.ts +0 -21
  268. package/dist/boxes/iso-base-media/esds-descriptors.js +0 -62
  269. package/dist/boxes/iso-base-media/esds.d.ts +0 -15
  270. package/dist/boxes/iso-base-media/esds.js +0 -27
  271. package/dist/get-codec.d.ts +0 -4
  272. package/dist/get-codec.js +0 -22
  273. /package/dist/{get-samples.d.ts → boxes/webm/bitstream/av1/frame.d.ts} +0 -0
  274. /package/dist/{get-samples.js → boxes/webm/bitstream/av1/frame.js} +0 -0
  275. /package/src/boxes/iso-base-media/{stts → stsd}/stts.ts +0 -0
@@ -0,0 +1,285 @@
1
+ export const matroskaElements = {
2
+ EBMLMaxIDLength: '0x42f2',
3
+ EBMLMaxSizeLength: '0x42f3',
4
+ Segment: '0x18538067',
5
+ SeekHead: '0x114d9b74',
6
+ Seek: '0x4dbb',
7
+ SeekID: '0x53ab',
8
+ SeekPosition: '0x53ac',
9
+ Info: '0x1549a966',
10
+ SegmentUUID: '0x73a4',
11
+ SegmentFilename: '0x7384',
12
+ PrevUUID: '0x3cb923',
13
+ PrevFilename: '0x3c83ab',
14
+ NextUUID: '0x3eb923',
15
+ NextFilename: '0x3e83bb',
16
+ SegmentFamily: '0x4444',
17
+ ChapterTranslate: '0x6924',
18
+ ChapterTranslateID: '0x69a5',
19
+ ChapterTranslateCodec: '0x69bf',
20
+ ChapterTranslateEditionUID: '0x69fc',
21
+ TimestampScale: '0x2ad7b1',
22
+ Duration: '0x4489',
23
+ DateUTC: '0x4461',
24
+ Title: '0x7ba9',
25
+ MuxingApp: '0x4d80',
26
+ WritingApp: '0x5741',
27
+ Cluster: '0x1f43b675',
28
+ Timestamp: '0xe7',
29
+ SilentTracks: '0x5854',
30
+ SilentTrackNumber: '0x58d7',
31
+ Position: '0xa7',
32
+ PrevSize: '0xab',
33
+ SimpleBlock: '0xa3',
34
+ BlockGroup: '0xa0',
35
+ Block: '0xa1',
36
+ BlockVirtual: '0xa2',
37
+ BlockAdditions: '0x75a1',
38
+ BlockMore: '0xa6',
39
+ BlockAdditional: '0xa5',
40
+ BlockAddID: '0xee',
41
+ BlockDuration: '0x9b',
42
+ ReferencePriority: '0xfa',
43
+ ReferenceBlock: '0xfb',
44
+ ReferenceVirtual: '0xfd',
45
+ CodecState: '0xa4',
46
+ DiscardPadding: '0x75a2',
47
+ Slices: '0x8e',
48
+ TimeSlice: '0xe8',
49
+ LaceNumber: '0xcc',
50
+ FrameNumber: '0xcd',
51
+ BlockAdditionID: '0xcb',
52
+ Delay: '0xce',
53
+ SliceDuration: '0xcf',
54
+ ReferenceFrame: '0xc8',
55
+ ReferenceOffset: '0xc9',
56
+ ReferenceTimestamp: '0xca',
57
+ EncryptedBlock: '0xaf',
58
+ Tracks: '0x1654ae6b',
59
+ TrackEntry: '0xae',
60
+ TrackNumber: '0xd7',
61
+ TrackUID: '0x73c5',
62
+ TrackType: '0x83',
63
+ FlagEnabled: '0xb9',
64
+ FlagDefault: '0x88',
65
+ FlagForced: '0x55aa',
66
+ FlagHearingImpaired: '0x55ab',
67
+ FlagVisualImpaired: '0x55ac',
68
+ FlagTextDescriptions: '0x55ad',
69
+ FlagOriginal: '0x55ae',
70
+ FlagCommentary: '0x55af',
71
+ FlagLacing: '0x9c',
72
+ MinCache: '0x6de7',
73
+ MaxCache: '0x6df8',
74
+ DefaultDuration: '0x23e383',
75
+ DefaultDecodedFieldDuration: '0x234e7a',
76
+ TrackTimestampScale: '0x23314f',
77
+ TrackOffset: '0x537f',
78
+ MaxBlockAdditionID: '0x55ee',
79
+ BlockAdditionMapping: '0x41e4',
80
+ BlockAddIDValue: '0x41f0',
81
+ BlockAddIDName: '0x41a4',
82
+ BlockAddIDType: '0x41e7',
83
+ BlockAddIDExtraData: '0x41ed',
84
+ Name: '0x536e',
85
+ Language: '0x22b59c',
86
+ LanguageBCP47: '0x22b59d',
87
+ CodecID: '0x86',
88
+ CodecPrivate: '0x63a2',
89
+ CodecName: '0x258688',
90
+ AttachmentLink: '0x7446',
91
+ CodecSettings: '0x3a9697',
92
+ CodecInfoURL: '0x3b4040',
93
+ CodecDownloadURL: '0x26b240',
94
+ CodecDecodeAll: '0xaa',
95
+ TrackOverlay: '0x6fab',
96
+ CodecDelay: '0x56aa',
97
+ SeekPreRoll: '0x56bb',
98
+ TrackTranslate: '0x6624',
99
+ TrackTranslateTrackID: '0x66a5',
100
+ TrackTranslateCodec: '0x66bf',
101
+ TrackTranslateEditionUID: '0x66fc',
102
+ Video: '0xe0',
103
+ FlagInterlaced: '0x9a',
104
+ FieldOrder: '0x9d',
105
+ StereoMode: '0x53b8',
106
+ AlphaMode: '0x53c0',
107
+ OldStereoMode: '0x53b9',
108
+ PixelWidth: '0xb0',
109
+ PixelHeight: '0xba',
110
+ PixelCropBottom: '0x54aa',
111
+ PixelCropTop: '0x54bb',
112
+ PixelCropLeft: '0x54cc',
113
+ PixelCropRight: '0x54dd',
114
+ DisplayWidth: '0x54b0',
115
+ DisplayHeight: '0x54ba',
116
+ DisplayUnit: '0x54b2',
117
+ AspectRatioType: '0x54b3',
118
+ UncompressedFourCC: '0x2eb524',
119
+ GammaValue: '0x2fb523',
120
+ FrameRate: '0x2383e3',
121
+ Colour: '0x55b0',
122
+ MatrixCoefficients: '0x55b1',
123
+ BitsPerChannel: '0x55b2',
124
+ ChromaSubsamplingHorz: '0x55b3',
125
+ ChromaSubsamplingVert: '0x55b4',
126
+ CbSubsamplingHorz: '0x55b5',
127
+ CbSubsamplingVert: '0x55b6',
128
+ ChromaSitingHorz: '0x55b7',
129
+ ChromaSitingVert: '0x55b8',
130
+ Range: '0x55b9',
131
+ TransferCharacteristics: '0x55ba',
132
+ Primaries: '0x55bb',
133
+ MaxCLL: '0x55bc',
134
+ MaxFALL: '0x55bd',
135
+ MasteringMetadata: '0x55d0',
136
+ PrimaryRChromaticityX: '0x55d1',
137
+ PrimaryRChromaticityY: '0x55d2',
138
+ PrimaryGChromaticityX: '0x55d3',
139
+ PrimaryGChromaticityY: '0x55d4',
140
+ PrimaryBChromaticityX: '0x55d5',
141
+ PrimaryBChromaticityY: '0x55d6',
142
+ WhitePointChromaticityX: '0x55d7',
143
+ WhitePointChromaticityY: '0x55d8',
144
+ LuminanceMax: '0x55d9',
145
+ LuminanceMin: '0x55da',
146
+ Projection: '0x7670',
147
+ ProjectionType: '0x7671',
148
+ ProjectionPrivate: '0x7672',
149
+ ProjectionPoseYaw: '0x7673',
150
+ ProjectionPosePitch: '0x7674',
151
+ ProjectionPoseRoll: '0x7675',
152
+ Audio: '0xe1',
153
+ SamplingFrequency: '0xb5',
154
+ OutputSamplingFrequency: '0x78b5',
155
+ Channels: '0x9f',
156
+ ChannelPositions: '0x7d7b',
157
+ BitDepth: '0x6264',
158
+ Emphasis: '0x52f1',
159
+ TrackOperation: '0xe2',
160
+ TrackCombinePlanes: '0xe3',
161
+ TrackPlane: '0xe4',
162
+ TrackPlaneUID: '0xe5',
163
+ TrackPlaneType: '0xe6',
164
+ TrackJoinBlocks: '0xe9',
165
+ TrackJoinUID: '0xed',
166
+ TrickTrackUID: '0xc0',
167
+ TrickTrackSegmentUID: '0xc1',
168
+ TrickTrackFlag: '0xc6',
169
+ TrickMasterTrackUID: '0xc7',
170
+ TrickMasterTrackSegmentUID: '0xc4',
171
+ ContentEncodings: '0x6d80',
172
+ ContentEncoding: '0x6240',
173
+ ContentEncodingOrder: '0x5031',
174
+ ContentEncodingScope: '0x5032',
175
+ ContentEncodingType: '0x5033',
176
+ ContentCompression: '0x5034',
177
+ ContentCompAlgo: '0x4254',
178
+ ContentCompSettings: '0x4255',
179
+ ContentEncryption: '0x5035',
180
+ ContentEncAlgo: '0x47e1',
181
+ ContentEncKeyID: '0x47e2',
182
+ ContentEncAESSettings: '0x47e7',
183
+ AESSettingsCipherMode: '0x47e8',
184
+ ContentSignature: '0x47e3',
185
+ ContentSigKeyID: '0x47e4',
186
+ ContentSigAlgo: '0x47e5',
187
+ ContentSigHashAlgo: '0x47e6',
188
+ Cues: '0x1c53bb6b',
189
+ CuePoint: '0xbb',
190
+ CueTime: '0xb3',
191
+ CueTrackPositions: '0xb7',
192
+ CueTrack: '0xf7',
193
+ CueClusterPosition: '0xf1',
194
+ CueRelativePosition: '0xf0',
195
+ CueDuration: '0xb2',
196
+ CueBlockNumber: '0x5378',
197
+ CueCodecState: '0xea',
198
+ CueReference: '0xdb',
199
+ CueRefTime: '0x96',
200
+ CueRefCluster: '0x97',
201
+ CueRefNumber: '0x535f',
202
+ CueRefCodecState: '0xeb',
203
+ Attachments: '0x1941a469',
204
+ AttachedFile: '0x61a7',
205
+ FileDescription: '0x467e',
206
+ FileName: '0x466e',
207
+ FileMediaType: '0x4660',
208
+ FileData: '0x465c',
209
+ FileUID: '0x46ae',
210
+ FileReferral: '0x4675',
211
+ FileUsedStartTime: '0x4661',
212
+ FileUsedEndTime: '0x4662',
213
+ Chapters: '0x1043a770',
214
+ EditionEntry: '0x45b9',
215
+ EditionUID: '0x45bc',
216
+ EditionFlagHidden: '0x45bd',
217
+ EditionFlagDefault: '0x45db',
218
+ EditionFlagOrdered: '0x45dd',
219
+ EditionDisplay: '0x4520',
220
+ EditionString: '0x4521',
221
+ EditionLanguageIETF: '0x45e4',
222
+ ChapterAtom: '0xb6',
223
+ ChapterUID: '0x73c4',
224
+ ChapterStringUID: '0x5654',
225
+ ChapterTimeStart: '0x91',
226
+ ChapterTimeEnd: '0x92',
227
+ ChapterFlagHidden: '0x98',
228
+ ChapterFlagEnabled: '0x4598',
229
+ ChapterSegmentUUID: '0x6e67',
230
+ ChapterSkipType: '0x4588',
231
+ ChapterSegmentEditionUID: '0x6ebc',
232
+ ChapterPhysicalEquiv: '0x63c3',
233
+ ChapterTrack: '0x8f',
234
+ ChapterTrackUID: '0x89',
235
+ ChapterDisplay: '0x80',
236
+ ChapString: '0x85',
237
+ ChapLanguage: '0x437c',
238
+ ChapLanguageBCP47: '0x437d',
239
+ ChapCountry: '0x437e',
240
+ ChapProcess: '0x6944',
241
+ ChapProcessCodecID: '0x6955',
242
+ ChapProcessPrivate: '0x450d',
243
+ ChapProcessCommand: '0x6911',
244
+ ChapProcessTime: '0x6922',
245
+ ChapProcessData: '0x6933',
246
+ Tags: '0x1254c367',
247
+ Tag: '0x7373',
248
+ Targets: '0x63c0',
249
+ TargetTypeValue: '0x68ca',
250
+ TargetType: '0x63ca',
251
+ TagTrackUID: '0x63c5',
252
+ TagEditionUID: '0x63c9',
253
+ TagChapterUID: '0x63c4',
254
+ TagAttachmentUID: '0x63c6',
255
+ SimpleTag: '0x67c8',
256
+ TagName: '0x45a3',
257
+ TagLanguage: '0x447a',
258
+ TagLanguageBCP47: '0x447b',
259
+ TagDefault: '0x4484',
260
+ TagDefaultBogus: '0x44b4',
261
+ TagString: '0x4487',
262
+ TagBinary: '0x4485',
263
+ Void: '0xec',
264
+ Crc32: '0xbf',
265
+ } as const;
266
+
267
+ const matroskaIds = Object.values(matroskaElements);
268
+
269
+ export const knownIdsWithOneLength = matroskaIds.filter(
270
+ (id) => id.length === 4,
271
+ ) as string[];
272
+
273
+ export const knownIdsWithTwoLength = matroskaIds.filter(
274
+ (id) => id.length === 6,
275
+ ) as string[];
276
+
277
+ export const knownIdsWithThreeLength = matroskaIds.filter(
278
+ (id) => id.length === 8,
279
+ ) as string[];
280
+
281
+ export const getSegmentName = (id: string) => {
282
+ return Object.entries(matroskaElements).find(
283
+ ([, value]) => value === id,
284
+ )?.[0];
285
+ };
@@ -7,16 +7,23 @@ export type DurationSegment = {
7
7
 
8
8
  export const parseDurationSegment = (
9
9
  iterator: BufferIterator,
10
+ length: number,
10
11
  ): DurationSegment => {
11
- const length = iterator.getVint();
12
- if (length !== 8) {
13
- throw new Error('Expected duration segment to be 8 bytes');
12
+ if (length === 8) {
13
+ return {
14
+ type: 'duration-segment',
15
+ duration: iterator.getFloat64(),
16
+ };
14
17
  }
15
18
 
16
- const duration = iterator.getFloat64();
19
+ if (length === 4) {
20
+ return {
21
+ type: 'duration-segment',
22
+ duration: iterator.getFloat32(),
23
+ };
24
+ }
17
25
 
18
- return {
19
- type: 'duration-segment',
20
- duration,
21
- };
26
+ throw new Error(
27
+ 'Expected duration segment to be 4 or 8 bytes, but it is ' + length,
28
+ );
22
29
  };
@@ -1,4 +1,5 @@
1
1
  import type {BufferIterator} from '../../../buffer-iterator';
2
+ import type {ParserContext} from '../../../parser-context';
2
3
  import type {MatroskaSegment} from '../segments';
3
4
  import {expectChildren} from './parse-children';
4
5
 
@@ -8,13 +9,26 @@ export type InfoSegment = {
8
9
  children: MatroskaSegment[];
9
10
  };
10
11
 
11
- export const parseInfoSegment = (iterator: BufferIterator): InfoSegment => {
12
- const length = iterator.getVint();
13
- const children = expectChildren(iterator, length);
12
+ export const parseInfoSegment = async (
13
+ iterator: BufferIterator,
14
+ length: number,
15
+ parserContext: ParserContext,
16
+ ): Promise<InfoSegment> => {
17
+ const children = await expectChildren({
18
+ iterator,
19
+ length,
20
+ initialChildren: [],
21
+ wrap: null,
22
+ parserContext,
23
+ });
24
+
25
+ if (children.status === 'incomplete') {
26
+ throw new Error('Incomplete children');
27
+ }
14
28
 
15
29
  return {
16
30
  type: 'info-segment',
17
31
  length,
18
- children,
32
+ children: children.segments as MatroskaSegment[],
19
33
  };
20
34
  };
@@ -1,19 +1,6 @@
1
- import type {BufferIterator} from '../../../buffer-iterator';
2
1
  import {type MatroskaSegment} from '../segments';
3
- import {expectChildren} from './parse-children';
4
2
 
5
3
  export type MainSegment = {
6
4
  type: 'main-segment';
7
5
  children: MatroskaSegment[];
8
6
  };
9
-
10
- export const parseMainSegment = (iterator: BufferIterator): MainSegment => {
11
- const length = iterator.getVint();
12
-
13
- const children = expectChildren(iterator, length);
14
-
15
- return {
16
- type: 'main-segment',
17
- children,
18
- };
19
- };
@@ -7,8 +7,8 @@ export type MuxingAppSegment = {
7
7
 
8
8
  export const parseMuxingSegment = (
9
9
  iterator: BufferIterator,
10
+ length: number,
10
11
  ): MuxingAppSegment => {
11
- const length = iterator.getVint();
12
12
  const value = iterator.getByteString(length);
13
13
 
14
14
  return {
@@ -1,21 +1,144 @@
1
1
  import type {BufferIterator} from '../../../buffer-iterator';
2
+ import type {ParseResult} from '../../../parse-result';
3
+ import type {ParserContext} from '../../../parser-context';
2
4
  import type {MatroskaSegment} from '../segments';
3
5
  import {expectSegment} from '../segments';
4
6
 
5
- export const expectChildren = (
6
- iterator: BufferIterator,
7
- length: number,
8
- ): MatroskaSegment[] => {
9
- const children: MatroskaSegment[] = [];
7
+ type WrapChildren = (segments: MatroskaSegment[]) => MatroskaSegment;
8
+
9
+ const processParseResult = ({
10
+ parseResult,
11
+ children,
12
+ wrap,
13
+ }: {
14
+ children: MatroskaSegment[];
15
+ parseResult: ParseResult;
16
+ wrap: WrapChildren | null;
17
+ }): ParseResult => {
18
+ if (parseResult.status === 'incomplete') {
19
+ // No need to decrement because expectSegment already does it
20
+ return {
21
+ status: 'incomplete',
22
+ segments: [],
23
+ continueParsing: async () => {
24
+ const newParseResult = await parseResult.continueParsing();
25
+ return processParseResult({
26
+ children,
27
+ parseResult: newParseResult,
28
+ wrap,
29
+ });
30
+ },
31
+ skipTo: null,
32
+ };
33
+ }
34
+
35
+ for (const segment of parseResult.segments) {
36
+ children.push(segment as MatroskaSegment);
37
+ }
38
+
39
+ return {
40
+ status: 'done',
41
+ segments: wrap ? [wrap(children)] : children,
42
+ };
43
+ };
44
+
45
+ const continueParsingfunction =
46
+ ({
47
+ result,
48
+ iterator,
49
+ children,
50
+ wrap,
51
+ parserContext,
52
+ length,
53
+ }: {
54
+ result: ParseResult;
55
+ iterator: BufferIterator;
56
+ children: MatroskaSegment[];
57
+ wrap: WrapChildren | null;
58
+ parserContext: ParserContext;
59
+ length: number;
60
+ }) =>
61
+ async (): Promise<ParseResult> => {
62
+ if (result.status !== 'incomplete') {
63
+ throw new Error('expected incomplete');
64
+ }
65
+
66
+ const offset = iterator.counter.getOffset();
67
+
68
+ const continued = await result.continueParsing();
69
+ if (continued.status === 'incomplete') {
70
+ return {
71
+ status: 'incomplete',
72
+ continueParsing: continueParsingfunction({
73
+ result: continued,
74
+ iterator,
75
+ children,
76
+ wrap,
77
+ parserContext,
78
+ length: length - (iterator.counter.getOffset() - offset),
79
+ }),
80
+ skipTo: continued.skipTo,
81
+ segments: wrap ? [wrap(children)] : children,
82
+ };
83
+ }
84
+
85
+ return expectChildren({
86
+ iterator,
87
+ length: length - (iterator.counter.getOffset() - offset),
88
+ initialChildren: children,
89
+ wrap,
90
+ parserContext,
91
+ });
92
+ };
93
+
94
+ export const expectChildren = async ({
95
+ iterator,
96
+ length,
97
+ initialChildren,
98
+ wrap,
99
+ parserContext,
100
+ }: {
101
+ iterator: BufferIterator;
102
+ length: number;
103
+ initialChildren: MatroskaSegment[];
104
+ wrap: WrapChildren | null;
105
+ parserContext: ParserContext;
106
+ }): Promise<ParseResult> => {
107
+ const children: MatroskaSegment[] = [...initialChildren];
10
108
  const startOffset = iterator.counter.getOffset();
11
109
 
12
110
  while (iterator.counter.getOffset() < startOffset + length) {
13
- const child = expectSegment(iterator);
14
- children.push(child);
15
- if (child.type === 'unknown-segment') {
111
+ if (iterator.bytesRemaining() === 0) {
16
112
  break;
17
113
  }
114
+
115
+ const parseResult = await expectSegment(iterator, parserContext);
116
+
117
+ const child = processParseResult({
118
+ children,
119
+ parseResult,
120
+ wrap,
121
+ });
122
+
123
+ if (child.status === 'incomplete') {
124
+ return {
125
+ status: 'incomplete',
126
+ continueParsing: continueParsingfunction({
127
+ result: child,
128
+ iterator,
129
+ children,
130
+ wrap,
131
+ parserContext,
132
+ length: length - (iterator.counter.getOffset() - startOffset),
133
+ }),
134
+ skipTo: child.skipTo,
135
+ segments: wrap ? [wrap(children)] : children,
136
+ };
137
+ }
18
138
  }
19
139
 
20
- return children;
140
+ return {
141
+ status: 'done',
142
+ segments: wrap ? [wrap(children)] : children,
143
+ };
21
144
  };
@@ -1,4 +1,5 @@
1
1
  import type {BufferIterator} from '../../../buffer-iterator';
2
+ import type {ParserContext} from '../../../parser-context';
2
3
  import {type MatroskaSegment} from '../segments';
3
4
  import {expectChildren} from './parse-children';
4
5
 
@@ -8,14 +9,26 @@ export type SeekHeadSegment = {
8
9
  length: number;
9
10
  };
10
11
 
11
- export const parseSeekHeadSegment = (
12
+ export const parseSeekHeadSegment = async (
12
13
  iterator: BufferIterator,
13
- ): SeekHeadSegment => {
14
- const length = iterator.getVint();
14
+ length: number,
15
+ parserContext: ParserContext,
16
+ ): Promise<SeekHeadSegment> => {
17
+ const children = await expectChildren({
18
+ iterator,
19
+ length,
20
+ initialChildren: [],
21
+ wrap: null,
22
+ parserContext,
23
+ });
24
+
25
+ if (children.status === 'incomplete') {
26
+ throw new Error('Incomplete children');
27
+ }
15
28
 
16
29
  return {
17
30
  type: 'seek-head-segment',
18
31
  length,
19
- children: expectChildren(iterator, length),
32
+ children: children.segments as MatroskaSegment[],
20
33
  };
21
34
  };
@@ -7,9 +7,8 @@ export type SeekPositionSegment = {
7
7
 
8
8
  export const parseSeekPositionSegment = (
9
9
  iterator: BufferIterator,
10
+ length: number,
10
11
  ): SeekPositionSegment => {
11
- const length = iterator.getVint();
12
-
13
12
  const seekPosition = iterator.getDecimalBytes(length);
14
13
 
15
14
  return {
@@ -1,23 +1,45 @@
1
1
  import type {BufferIterator} from '../../../buffer-iterator';
2
+ import type {ParserContext} from '../../../parser-context';
2
3
  import type {MatroskaSegment} from '../segments';
3
- import {expectSegment} from '../segments';
4
+ import {expectChildren} from './parse-children';
4
5
 
5
6
  export type SeekSegment = {
6
7
  type: 'seek-segment';
7
- seekId: string;
8
- child: MatroskaSegment;
8
+ children: MatroskaSegment[];
9
+ };
10
+
11
+ export const parseSeekSegment = async (
12
+ iterator: BufferIterator,
13
+ length: number,
14
+ parserContext: ParserContext,
15
+ ): Promise<SeekSegment> => {
16
+ const children = await expectChildren({
17
+ iterator,
18
+ length,
19
+ initialChildren: [],
20
+ wrap: null,
21
+ parserContext,
22
+ });
23
+ if (children.status === 'incomplete') {
24
+ throw new Error('Incomplete children');
25
+ }
26
+
27
+ return {
28
+ type: 'seek-segment',
29
+ children: children.segments as MatroskaSegment[],
30
+ };
9
31
  };
10
32
 
11
- export const parseSeekSegment = (iterator: BufferIterator): SeekSegment => {
12
- // length
13
- iterator.discard(4);
33
+ export type SeekIdSegment = {
34
+ type: 'seek-id-segment';
35
+ seekId: string;
36
+ };
14
37
 
38
+ export const parseSeekIdSegment = (iterator: BufferIterator): SeekIdSegment => {
15
39
  const seekId = iterator.getMatroskaSegmentId();
16
- const child = expectSegment(iterator);
17
40
 
18
41
  return {
19
- type: 'seek-segment',
42
+ type: 'seek-id-segment',
20
43
  seekId,
21
- child,
22
44
  };
23
45
  };