@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
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseColorParameterBox = void 0;
4
+ const parseColorParameterBox = ({ iterator, }) => {
5
+ const byteString = iterator.getByteString(4);
6
+ if (byteString === 'nclx') {
7
+ const primaries = iterator.getUint16();
8
+ const transfer = iterator.getUint16();
9
+ const matrixIndex = iterator.getUint16();
10
+ iterator.startReadingBits();
11
+ const fullRangeFlag = Boolean(iterator.getBits(1));
12
+ iterator.stopReadingBits();
13
+ return {
14
+ type: 'colr-box',
15
+ fullRangeFlag,
16
+ matrixIndex,
17
+ primaries,
18
+ transfer,
19
+ };
20
+ }
21
+ if (byteString === 'nclc') {
22
+ const primaries = iterator.getUint16();
23
+ const transfer = iterator.getUint16();
24
+ const matrixIndex = iterator.getUint16();
25
+ return {
26
+ type: 'colr-box',
27
+ fullRangeFlag: false,
28
+ matrixIndex,
29
+ primaries,
30
+ transfer,
31
+ };
32
+ }
33
+ throw new Error('Unexpected box type ' + byteString);
34
+ };
35
+ exports.parseColorParameterBox = parseColorParameterBox;
@@ -0,0 +1,19 @@
1
+ import type { BufferIterator } from '../../../buffer-iterator';
2
+ import type { BaseBox } from '../base-type';
3
+ type CttsEntry = {
4
+ sampleCount: number;
5
+ sampleOffset: number;
6
+ };
7
+ export interface CttsBox extends BaseBox {
8
+ type: 'ctts-box';
9
+ version: number;
10
+ flags: number[];
11
+ entryCount: number;
12
+ entries: CttsEntry[];
13
+ }
14
+ export declare const parseCtts: ({ iterator, offset, size, }: {
15
+ iterator: BufferIterator;
16
+ offset: number;
17
+ size: number;
18
+ }) => CttsBox;
19
+ export {};
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseCtts = void 0;
4
+ const parseCtts = ({ iterator, offset, size, }) => {
5
+ const version = iterator.getUint8();
6
+ if (version !== 0) {
7
+ throw new Error(`Unsupported CTTS version ${version}`);
8
+ }
9
+ const flags = iterator.getSlice(3);
10
+ const entryCount = iterator.getUint32();
11
+ const entries = [];
12
+ for (let i = 0; i < entryCount; i++) {
13
+ const sampleCount = iterator.getUint32();
14
+ const sampleOffset = iterator.getUint32();
15
+ entries.push({
16
+ sampleCount,
17
+ sampleOffset,
18
+ });
19
+ }
20
+ return {
21
+ type: 'ctts-box',
22
+ boxSize: size,
23
+ offset,
24
+ version,
25
+ flags: [...flags],
26
+ entryCount,
27
+ entries,
28
+ };
29
+ };
30
+ exports.parseCtts = parseCtts;
@@ -0,0 +1,11 @@
1
+ import type { BufferIterator } from '../../../buffer-iterator';
2
+ export interface HvccBox {
3
+ type: 'hvcc-box';
4
+ data: Uint8Array;
5
+ configurationString: string;
6
+ }
7
+ export declare const parseHvcc: ({ data, size, offset, }: {
8
+ data: BufferIterator;
9
+ size: number;
10
+ offset: number;
11
+ }) => HvccBox;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseHvcc = void 0;
4
+ const make_hvc1_codec_strings_1 = require("../../../make-hvc1-codec-strings");
5
+ const parseHvcc = ({ data, size, offset, }) => {
6
+ const raw = data.getSlice(size - 8);
7
+ data.counter.decrement(size - 8);
8
+ const constraintString = (0, make_hvc1_codec_strings_1.getHvc1CodecString)(data);
9
+ const remaining = size - (data.counter.getOffset() - offset);
10
+ data.discard(remaining);
11
+ return {
12
+ type: 'hvcc-box',
13
+ data: raw,
14
+ configurationString: constraintString,
15
+ };
16
+ };
17
+ exports.parseHvcc = parseHvcc;
@@ -12,6 +12,7 @@ const parseKeys = (data, offset) => {
12
12
  if (atom !== 'keys') {
13
13
  throw new Error(`Expected keys type of keys, got ${atom}`);
14
14
  }
15
+ iterator.destroy();
15
16
  return {
16
17
  type: 'keys-box',
17
18
  boxSize: data.byteLength,
@@ -1,5 +1,6 @@
1
1
  import type { BufferIterator } from '../../../buffer-iterator';
2
2
  import type { AnySegment } from '../../../parse-result';
3
+ import type { ParserContext } from '../../../parser-context';
3
4
  import type { BaseBox } from '../base-type';
4
5
  export interface MebxBox extends BaseBox {
5
6
  type: 'mebx-box';
@@ -7,8 +8,9 @@ export interface MebxBox extends BaseBox {
7
8
  format: string;
8
9
  children: AnySegment[];
9
10
  }
10
- export declare const parseMebx: ({ iterator, offset, size, }: {
11
+ export declare const parseMebx: ({ iterator, offset, size, options, }: {
11
12
  iterator: BufferIterator;
12
13
  offset: number;
13
14
  size: number;
14
- }) => MebxBox;
15
+ options: ParserContext;
16
+ }) => Promise<MebxBox>;
@@ -2,15 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseMebx = void 0;
4
4
  const process_box_1 = require("../process-box");
5
- const parseMebx = ({ iterator, offset, size, }) => {
5
+ const parseMebx = async ({ iterator, offset, size, options, }) => {
6
6
  // reserved, 6 bit
7
7
  iterator.discard(6);
8
8
  const dataReferenceIndex = iterator.getUint16();
9
- const children = (0, process_box_1.parseBoxes)({
9
+ const children = await (0, process_box_1.parseBoxes)({
10
10
  iterator,
11
11
  maxBytes: iterator.counter.getOffset() - offset,
12
12
  allowIncompleteBoxes: false,
13
13
  initialBoxes: [],
14
+ options,
15
+ continueMdat: false,
14
16
  });
15
17
  if (children.status === 'incomplete') {
16
18
  throw new Error('Incomplete boxes are not allowed');
@@ -0,0 +1,12 @@
1
+ import type { BufferIterator } from '../../../buffer-iterator';
2
+ import type { BaseBox } from '../base-type';
3
+ export interface PaspBox extends BaseBox {
4
+ type: 'pasp-box';
5
+ hSpacing: number;
6
+ vSpacing: number;
7
+ }
8
+ export declare const parsePasp: ({ iterator, offset, size, }: {
9
+ iterator: BufferIterator;
10
+ offset: number;
11
+ size: number;
12
+ }) => PaspBox;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parsePasp = void 0;
4
+ const parsePasp = ({ iterator, offset, size, }) => {
5
+ const hSpacing = iterator.getUint32();
6
+ const vSpacing = iterator.getUint32();
7
+ const bytesRemainingInBox = size - (iterator.counter.getOffset() - offset);
8
+ iterator.discard(bytesRemainingInBox);
9
+ return {
10
+ type: 'pasp-box',
11
+ boxSize: size,
12
+ offset,
13
+ hSpacing,
14
+ vSpacing,
15
+ };
16
+ };
17
+ exports.parsePasp = parsePasp;
@@ -1,5 +1,6 @@
1
1
  import type { BufferIterator } from '../../../buffer-iterator';
2
2
  import type { AnySegment } from '../../../parse-result';
3
+ import type { ParserContext } from '../../../parser-context';
3
4
  type SampleBase = {
4
5
  format: string;
5
6
  offset: number;
@@ -9,7 +10,7 @@ type SampleBase = {
9
10
  vendor: number[];
10
11
  size: number;
11
12
  };
12
- type AudioSample = SampleBase & {
13
+ export type AudioSample = SampleBase & {
13
14
  type: 'audio';
14
15
  numberOfChannels: number;
15
16
  sampleSize: number;
@@ -22,7 +23,7 @@ type AudioSample = SampleBase & {
22
23
  bitsPerSample: number | null;
23
24
  children: AnySegment[];
24
25
  };
25
- type VideoSample = SampleBase & {
26
+ export type VideoSample = SampleBase & {
26
27
  type: 'video';
27
28
  temporalQuality: number;
28
29
  spacialQuality: number;
@@ -35,6 +36,7 @@ type VideoSample = SampleBase & {
35
36
  frameCountPerSample: number;
36
37
  depth: number;
37
38
  colorTableId: number;
39
+ descriptors: AnySegment[];
38
40
  };
39
41
  type UnknownSample = SampleBase & {
40
42
  type: 'unknown';
@@ -43,8 +45,13 @@ export type Sample = AudioSample | VideoSample | UnknownSample;
43
45
  type SampleAndNext = {
44
46
  sample: Sample | null;
45
47
  };
46
- export declare const processSample: ({ iterator, }: {
48
+ export declare const processSample: ({ iterator, options, }: {
47
49
  iterator: BufferIterator;
48
- }) => SampleAndNext;
49
- export declare const parseSamples: (iterator: BufferIterator, maxBytes: number) => Sample[];
50
+ options: ParserContext;
51
+ }) => Promise<SampleAndNext>;
52
+ export declare const parseSamples: ({ iterator, maxBytes, options, }: {
53
+ iterator: BufferIterator;
54
+ maxBytes: number;
55
+ options: ParserContext;
56
+ }) => Promise<Sample[]>;
50
57
  export {};
@@ -32,6 +32,7 @@ const videoTags = [
32
32
  'v210',
33
33
  'hvc1',
34
34
  'ap4h',
35
+ 'av01',
35
36
  ];
36
37
  // https://developer.apple.com/documentation/quicktime-file-format/sound_sample_descriptions
37
38
  const audioTags = [
@@ -60,7 +61,7 @@ const audioTags = [
60
61
  'mp4a',
61
62
  'ac-3',
62
63
  ];
63
- const processSample = ({ iterator, }) => {
64
+ const processSample = async ({ iterator, options, }) => {
64
65
  const fileOffset = iterator.counter.getOffset();
65
66
  const bytesRemaining = iterator.bytesRemaining();
66
67
  const boxSize = iterator.getUint32();
@@ -98,13 +99,15 @@ const processSample = ({ iterator, }) => {
98
99
  const sampleSize = iterator.getUint16();
99
100
  const compressionId = iterator.getUint16();
100
101
  const packetSize = iterator.getUint16();
101
- const sampleRate = iterator.getFixedPoint1616Number();
102
+ const sampleRate = iterator.getFixedPointUnsigned1616Number();
102
103
  const bytesRemainingInBox = boxSize - (iterator.counter.getOffset() - fileOffset);
103
- const children = (0, process_box_1.parseBoxes)({
104
+ const children = await (0, process_box_1.parseBoxes)({
104
105
  iterator,
105
106
  allowIncompleteBoxes: false,
106
107
  maxBytes: bytesRemainingInBox,
107
108
  initialBoxes: [],
109
+ options,
110
+ continueMdat: false,
108
111
  });
109
112
  if (children.status === 'incomplete') {
110
113
  throw new Error('Incomplete boxes are not allowed');
@@ -137,17 +140,19 @@ const processSample = ({ iterator, }) => {
137
140
  const sampleSize = iterator.getUint16();
138
141
  const compressionId = iterator.getInt16();
139
142
  const packetSize = iterator.getUint16();
140
- const sampleRate = iterator.getFixedPoint1616Number();
143
+ const sampleRate = iterator.getFixedPointUnsigned1616Number();
141
144
  const samplesPerPacket = iterator.getUint32();
142
145
  const bytesPerPacket = iterator.getUint32();
143
146
  const bytesPerFrame = iterator.getUint32();
144
147
  const bytesPerSample = iterator.getUint32();
145
148
  const bytesRemainingInBox = boxSize - (iterator.counter.getOffset() - fileOffset);
146
- const children = (0, process_box_1.parseBoxes)({
149
+ const children = await (0, process_box_1.parseBoxes)({
147
150
  iterator,
148
151
  allowIncompleteBoxes: false,
149
152
  maxBytes: bytesRemainingInBox,
150
153
  initialBoxes: [],
154
+ options,
155
+ continueMdat: false,
151
156
  });
152
157
  if (children.status === 'incomplete') {
153
158
  throw new Error('Incomplete boxes are not allowed');
@@ -182,15 +187,25 @@ const processSample = ({ iterator, }) => {
182
187
  const spacialQuality = iterator.getUint32();
183
188
  const width = iterator.getUint16();
184
189
  const height = iterator.getUint16();
185
- const horizontalResolution = iterator.getFixedPoint1616Number();
186
- const verticalResolution = iterator.getFixedPoint1616Number();
190
+ const horizontalResolution = iterator.getFixedPointUnsigned1616Number();
191
+ const verticalResolution = iterator.getFixedPointUnsigned1616Number();
187
192
  const dataSize = iterator.getUint32();
188
193
  const frameCountPerSample = iterator.getUint16();
189
194
  const compressorName = iterator.getPascalString();
190
195
  const depth = iterator.getUint16();
191
196
  const colorTableId = iterator.getInt16();
192
197
  const bytesRemainingInBox = boxSize - (iterator.counter.getOffset() - fileOffset);
193
- iterator.discard(bytesRemainingInBox);
198
+ const children = await (0, process_box_1.parseBoxes)({
199
+ iterator,
200
+ allowIncompleteBoxes: false,
201
+ maxBytes: bytesRemainingInBox,
202
+ initialBoxes: [],
203
+ options,
204
+ continueMdat: false,
205
+ });
206
+ if (children.status === 'incomplete') {
207
+ throw new Error('Incomplete boxes are not allowed');
208
+ }
194
209
  return {
195
210
  sample: {
196
211
  format: boxFormat,
@@ -212,19 +227,21 @@ const processSample = ({ iterator, }) => {
212
227
  compressorName,
213
228
  depth,
214
229
  colorTableId,
230
+ descriptors: children.segments,
215
231
  },
216
232
  };
217
233
  }
218
234
  throw new Error(`Unknown sample format ${boxFormat}`);
219
235
  };
220
236
  exports.processSample = processSample;
221
- const parseSamples = (iterator, maxBytes) => {
237
+ const parseSamples = async ({ iterator, maxBytes, options, }) => {
222
238
  const samples = [];
223
239
  const initialOffset = iterator.counter.getOffset();
224
240
  while (iterator.bytesRemaining() > 0 &&
225
241
  iterator.counter.getOffset() - initialOffset < maxBytes) {
226
- const { sample } = (0, exports.processSample)({
242
+ const { sample } = await (0, exports.processSample)({
227
243
  iterator,
244
+ options,
228
245
  });
229
246
  if (sample) {
230
247
  samples.push(sample);
@@ -0,0 +1,14 @@
1
+ import type { BufferIterator } from '../../../buffer-iterator';
2
+ import type { BaseBox } from '../base-type';
3
+ export interface StcoBox extends BaseBox {
4
+ type: 'stco-box';
5
+ version: number;
6
+ flags: number[];
7
+ entryCount: number;
8
+ entries: number[];
9
+ }
10
+ export declare const parseStco: ({ iterator, offset, size, }: {
11
+ iterator: BufferIterator;
12
+ offset: number;
13
+ size: number;
14
+ }) => StcoBox;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseStco = void 0;
4
+ const parseStco = ({ iterator, offset, size, }) => {
5
+ const version = iterator.getUint8();
6
+ if (version !== 0) {
7
+ throw new Error(`Unsupported STSD version ${version}`);
8
+ }
9
+ const flags = iterator.getSlice(3);
10
+ const entryCount = iterator.getUint32();
11
+ const entries = [];
12
+ for (let i = 0; i < entryCount; i++) {
13
+ const bytesRemaining = size - (iterator.counter.getOffset() - offset);
14
+ if (bytesRemaining < 4) {
15
+ break;
16
+ }
17
+ entries.push(iterator.getUint32());
18
+ }
19
+ iterator.discard(size - (iterator.counter.getOffset() - offset));
20
+ return {
21
+ type: 'stco-box',
22
+ boxSize: size,
23
+ offset,
24
+ version,
25
+ flags: [...flags],
26
+ entries,
27
+ entryCount,
28
+ };
29
+ };
30
+ exports.parseStco = parseStco;
@@ -0,0 +1,19 @@
1
+ import type { BufferIterator } from '../../../buffer-iterator';
2
+ import type { BaseBox } from '../base-type';
3
+ type StscEntry = {
4
+ firstChunk: number;
5
+ samplesPerChunk: number;
6
+ };
7
+ export interface StscBox extends BaseBox {
8
+ type: 'stsc-box';
9
+ version: number;
10
+ flags: number[];
11
+ entryCount: number;
12
+ entries: StscEntry[];
13
+ }
14
+ export declare const parseStsc: ({ iterator, offset, size, }: {
15
+ iterator: BufferIterator;
16
+ offset: number;
17
+ size: number;
18
+ }) => StscBox;
19
+ export {};
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseStsc = void 0;
4
+ const parseStsc = ({ iterator, offset, size, }) => {
5
+ const version = iterator.getUint8();
6
+ if (version !== 0) {
7
+ throw new Error(`Unsupported STSD version ${version}`);
8
+ }
9
+ const flags = iterator.getSlice(3);
10
+ const entryCount = iterator.getUint32();
11
+ const entries = [];
12
+ for (let i = 0; i < entryCount; i++) {
13
+ const firstChunk = iterator.getUint32();
14
+ const samplesPerChunk = iterator.getUint32();
15
+ const sampleDescriptionIndex = iterator.getUint32();
16
+ if (sampleDescriptionIndex !== 1) {
17
+ throw new Error(`Expected sampleDescriptionIndex to be 1, but got ${sampleDescriptionIndex}`);
18
+ }
19
+ entries.push({
20
+ firstChunk,
21
+ samplesPerChunk,
22
+ });
23
+ }
24
+ return {
25
+ type: 'stsc-box',
26
+ boxSize: size,
27
+ offset,
28
+ version,
29
+ flags: [...flags],
30
+ entryCount,
31
+ entries,
32
+ };
33
+ };
34
+ exports.parseStsc = parseStsc;
@@ -1,4 +1,5 @@
1
1
  import type { BufferIterator } from '../../../buffer-iterator';
2
+ import type { ParserContext } from '../../../parser-context';
2
3
  import type { BaseBox } from '../base-type';
3
4
  import type { Sample } from './samples';
4
5
  export interface StsdBox extends BaseBox {
@@ -6,8 +7,9 @@ export interface StsdBox extends BaseBox {
6
7
  numberOfEntries: number;
7
8
  samples: Sample[];
8
9
  }
9
- export declare const parseStsd: ({ iterator, offset, size, }: {
10
+ export declare const parseStsd: ({ iterator, offset, size, options, }: {
10
11
  iterator: BufferIterator;
11
12
  offset: number;
12
13
  size: number;
13
- }) => StsdBox;
14
+ options: ParserContext;
15
+ }) => Promise<StsdBox>;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseStsd = void 0;
4
4
  const samples_1 = require("./samples");
5
- const parseStsd = ({ iterator, offset, size, }) => {
5
+ const parseStsd = async ({ iterator, offset, size, options, }) => {
6
6
  const version = iterator.getUint8();
7
7
  if (version !== 0) {
8
8
  throw new Error(`Unsupported STSD version ${version}`);
@@ -11,7 +11,11 @@ const parseStsd = ({ iterator, offset, size, }) => {
11
11
  iterator.discard(3);
12
12
  const numberOfEntries = iterator.getUint32();
13
13
  const bytesRemainingInBox = size - (iterator.counter.getOffset() - offset);
14
- const boxes = (0, samples_1.parseSamples)(iterator, bytesRemainingInBox);
14
+ const boxes = await (0, samples_1.parseSamples)({
15
+ iterator,
16
+ maxBytes: bytesRemainingInBox,
17
+ options,
18
+ });
15
19
  if (boxes.length !== numberOfEntries) {
16
20
  throw new Error(`Expected ${numberOfEntries} sample descriptions, got ${boxes.length}`);
17
21
  }
@@ -0,0 +1,13 @@
1
+ import type { BufferIterator } from '../../../buffer-iterator';
2
+ import type { BaseBox } from '../base-type';
3
+ export interface StssBox extends BaseBox {
4
+ type: 'stss-box';
5
+ version: number;
6
+ flags: number[];
7
+ sampleNumber: number[];
8
+ }
9
+ export declare const parseStss: ({ iterator, offset, boxSize, }: {
10
+ iterator: BufferIterator;
11
+ offset: number;
12
+ boxSize: number;
13
+ }) => StssBox;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseStss = void 0;
4
+ const parseStss = ({ iterator, offset, boxSize, }) => {
5
+ const version = iterator.getUint8();
6
+ if (version !== 0) {
7
+ throw new Error(`Unsupported STSS version ${version}`);
8
+ }
9
+ const flags = iterator.getSlice(3);
10
+ const sampleCount = iterator.getUint32();
11
+ const sampleNumber = [];
12
+ for (let i = 0; i < sampleCount; i++) {
13
+ sampleNumber.push(iterator.getUint32());
14
+ }
15
+ const bytesRemainingInBox = boxSize - (iterator.counter.getOffset() - offset);
16
+ if (bytesRemainingInBox > 0) {
17
+ throw new Error(`Unexpected bytes remaining in box stss`);
18
+ }
19
+ return {
20
+ type: 'stss-box',
21
+ version,
22
+ flags: [...flags],
23
+ sampleNumber,
24
+ boxSize,
25
+ offset,
26
+ };
27
+ };
28
+ exports.parseStss = parseStss;
@@ -0,0 +1,21 @@
1
+ import type { BufferIterator } from '../../../buffer-iterator';
2
+ import type { BaseBox } from '../base-type';
3
+ type Discriminated = {
4
+ countType: 'fixed';
5
+ sampleSize: number;
6
+ } | {
7
+ countType: 'variable';
8
+ entries: number[];
9
+ };
10
+ export type StszBox = BaseBox & {
11
+ type: 'stsz-box';
12
+ version: number;
13
+ flags: number[];
14
+ sampleCount: number;
15
+ } & Discriminated;
16
+ export declare const parseStsz: ({ iterator, offset, size, }: {
17
+ iterator: BufferIterator;
18
+ offset: number;
19
+ size: number;
20
+ }) => StszBox;
21
+ export {};
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseStsz = void 0;
4
+ const parseStsz = ({ iterator, offset, size, }) => {
5
+ const version = iterator.getUint8();
6
+ if (version !== 0) {
7
+ throw new Error(`Unsupported STSD version ${version}`);
8
+ }
9
+ const flags = iterator.getSlice(3);
10
+ const sampleSize = iterator.getUint32();
11
+ const sampleCount = iterator.getUint32();
12
+ if (sampleSize !== 0) {
13
+ return {
14
+ type: 'stsz-box',
15
+ boxSize: size,
16
+ offset,
17
+ version,
18
+ flags: [...flags],
19
+ sampleCount,
20
+ countType: 'fixed',
21
+ sampleSize,
22
+ };
23
+ }
24
+ const samples = [];
25
+ for (let i = 0; i < sampleCount; i++) {
26
+ const bytesRemaining = size - (iterator.counter.getOffset() - offset);
27
+ if (bytesRemaining < 4) {
28
+ break;
29
+ }
30
+ samples.push(iterator.getUint32());
31
+ }
32
+ iterator.discard(size - (iterator.counter.getOffset() - offset));
33
+ return {
34
+ type: 'stsz-box',
35
+ boxSize: size,
36
+ offset,
37
+ version,
38
+ flags: [...flags],
39
+ sampleCount,
40
+ countType: 'variable',
41
+ entries: samples,
42
+ };
43
+ };
44
+ exports.parseStsz = parseStsz;
@@ -0,0 +1,15 @@
1
+ import type { BufferIterator } from '../../../buffer-iterator';
2
+ export interface SttsBox {
3
+ type: 'stts-box';
4
+ sampleDistribution: SampleDistribution[];
5
+ }
6
+ type SampleDistribution = {
7
+ sampleCount: number;
8
+ sampleDelta: number;
9
+ };
10
+ export declare const parseStts: ({ data, size, fileOffset, }: {
11
+ data: BufferIterator;
12
+ size: number;
13
+ fileOffset: number;
14
+ }) => SttsBox;
15
+ export {};
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseStts = void 0;
4
+ const parseStts = ({ data, size, fileOffset, }) => {
5
+ const initialOffset = data.counter.getOffset();
6
+ const initialCounter = initialOffset - fileOffset;
7
+ const version = data.getUint8();
8
+ if (version !== 0) {
9
+ throw new Error(`Unsupported STTS version ${version}`);
10
+ }
11
+ // flags, we discard them
12
+ data.discard(3);
13
+ // entry count
14
+ const entryCount = data.getUint32();
15
+ const sampleDistributions = [];
16
+ // entries
17
+ for (let i = 0; i < entryCount; i++) {
18
+ const sampleCount = data.getUint32();
19
+ const sampleDelta = data.getUint32();
20
+ const sampleDistribution = {
21
+ sampleCount,
22
+ sampleDelta,
23
+ };
24
+ sampleDistributions.push(sampleDistribution);
25
+ }
26
+ const bytesUsed = data.counter.getOffset() - initialOffset + initialCounter;
27
+ if (bytesUsed !== size) {
28
+ throw new Error(`Expected stts box to be ${size} bytes, but was ${bytesUsed} bytes`);
29
+ }
30
+ return {
31
+ type: 'stts-box',
32
+ sampleDistribution: sampleDistributions,
33
+ };
34
+ };
35
+ exports.parseStts = parseStts;