@remotion/media-parser 4.0.229 → 4.0.231

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 (182) hide show
  1. package/dist/boxes/iso-base-media/esds/decoder-specific-config.d.ts +3 -2
  2. package/dist/boxes/iso-base-media/esds/decoder-specific-config.js +7 -8
  3. package/dist/boxes/iso-base-media/esds/esds-descriptors.d.ts +4 -2
  4. package/dist/boxes/iso-base-media/esds/esds-descriptors.js +5 -4
  5. package/dist/boxes/iso-base-media/esds/esds.d.ts +3 -1
  6. package/dist/boxes/iso-base-media/esds/esds.js +2 -2
  7. package/dist/boxes/iso-base-media/make-track.js +2 -1
  8. package/dist/boxes/iso-base-media/mdat/mdat.js +13 -7
  9. package/dist/boxes/iso-base-media/moov/moov.d.ts +3 -1
  10. package/dist/boxes/iso-base-media/moov/moov.js +2 -2
  11. package/dist/boxes/iso-base-media/mvhd.js +11 -9
  12. package/dist/boxes/iso-base-media/parse-icc-profile.d.ts +36 -0
  13. package/dist/boxes/iso-base-media/parse-icc-profile.js +115 -0
  14. package/dist/boxes/iso-base-media/process-box.d.ts +5 -4
  15. package/dist/boxes/iso-base-media/process-box.js +17 -14
  16. package/dist/boxes/iso-base-media/stsd/colr.d.ts +14 -4
  17. package/dist/boxes/iso-base-media/stsd/colr.js +13 -1
  18. package/dist/boxes/iso-base-media/stsd/mebx.d.ts +1 -2
  19. package/dist/boxes/iso-base-media/stsd/mebx.js +2 -2
  20. package/dist/boxes/iso-base-media/stsd/samples.d.ts +5 -2
  21. package/dist/boxes/iso-base-media/stsd/samples.js +7 -6
  22. package/dist/boxes/iso-base-media/stsd/stsd.js +1 -0
  23. package/dist/boxes/iso-base-media/to-date.d.ts +1 -0
  24. package/dist/boxes/iso-base-media/to-date.js +9 -1
  25. package/dist/boxes/iso-base-media/trak/trak.d.ts +3 -1
  26. package/dist/boxes/iso-base-media/trak/trak.js +2 -2
  27. package/dist/boxes/webm/av1-codec-private.js +1 -1
  28. package/dist/boxes/webm/ebml.d.ts +1 -1
  29. package/dist/boxes/webm/get-sample-from-block.d.ts +4 -4
  30. package/dist/boxes/webm/get-sample-from-block.js +4 -2
  31. package/dist/boxes/webm/make-track.js +1 -0
  32. package/dist/boxes/webm/parse-webm-header.js +23 -4
  33. package/dist/boxes/webm/segments/parse-children.d.ts +12 -7
  34. package/dist/boxes/webm/segments/parse-children.js +67 -57
  35. package/dist/boxes/webm/segments.d.ts +8 -3
  36. package/dist/boxes/webm/segments.js +70 -39
  37. package/dist/buffer-iterator.d.ts +1 -1
  38. package/dist/buffer-iterator.js +1 -8
  39. package/dist/create/iso-base-media/codec-specific/avc1.d.ts +2 -0
  40. package/dist/create/iso-base-media/codec-specific/avc1.js +48 -0
  41. package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.d.ts +22 -0
  42. package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.js +36 -0
  43. package/dist/create/iso-base-media/codec-specific/mp4a.d.ts +2 -0
  44. package/dist/create/iso-base-media/codec-specific/mp4a.js +90 -0
  45. package/dist/create/iso-base-media/create-colr.d.ts +6 -0
  46. package/dist/create/iso-base-media/create-colr.js +26 -0
  47. package/dist/create/iso-base-media/create-ftyp.d.ts +10 -0
  48. package/dist/create/iso-base-media/create-ftyp.js +22 -0
  49. package/dist/create/iso-base-media/create-ilst.d.ts +1 -0
  50. package/dist/create/iso-base-media/create-ilst.js +14 -0
  51. package/dist/create/iso-base-media/create-iso-base-media.d.ts +2 -0
  52. package/dist/create/iso-base-media/create-iso-base-media.js +167 -0
  53. package/dist/create/iso-base-media/create-mdia.d.ts +5 -0
  54. package/dist/create/iso-base-media/create-mdia.js +18 -0
  55. package/dist/create/iso-base-media/create-moov.d.ts +5 -0
  56. package/dist/create/iso-base-media/create-moov.js +18 -0
  57. package/dist/create/iso-base-media/create-mvhd.d.ts +10 -0
  58. package/dist/create/iso-base-media/create-mvhd.js +48 -0
  59. package/dist/create/iso-base-media/create-trak.d.ts +4 -0
  60. package/dist/create/iso-base-media/create-trak.js +17 -0
  61. package/dist/create/iso-base-media/create-udta.d.ts +1 -0
  62. package/dist/create/iso-base-media/create-udta.js +14 -0
  63. package/dist/create/iso-base-media/create-url.d.ts +1 -0
  64. package/dist/create/iso-base-media/create-url.js +16 -0
  65. package/dist/create/iso-base-media/example-stts.d.ts +3 -0
  66. package/dist/create/iso-base-media/example-stts.js +2797 -0
  67. package/dist/create/iso-base-media/ilst/create-cmt.d.ts +1 -0
  68. package/dist/create/iso-base-media/ilst/create-cmt.js +26 -0
  69. package/dist/create/iso-base-media/ilst/create-too.d.ts +1 -0
  70. package/dist/create/iso-base-media/ilst/create-too.js +27 -0
  71. package/dist/create/iso-base-media/mdia/create-mdhd.d.ts +6 -0
  72. package/dist/create/iso-base-media/mdia/create-mdhd.js +33 -0
  73. package/dist/create/iso-base-media/mp4-header.d.ts +6 -0
  74. package/dist/create/iso-base-media/mp4-header.js +47 -0
  75. package/dist/create/iso-base-media/primitives.d.ts +15 -0
  76. package/dist/create/iso-base-media/primitives.js +133 -0
  77. package/dist/create/iso-base-media/serialize-track.d.ts +9 -0
  78. package/dist/create/iso-base-media/serialize-track.js +63 -0
  79. package/dist/create/iso-base-media/trak/create-tkhd.d.ts +27 -0
  80. package/dist/create/iso-base-media/trak/create-tkhd.js +97 -0
  81. package/dist/create/iso-base-media/trak/mdia/create-minf.d.ts +4 -0
  82. package/dist/create/iso-base-media/trak/mdia/create-minf.js +19 -0
  83. package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.d.ts +1 -0
  84. package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.js +22 -0
  85. package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.d.ts +1 -0
  86. package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.js +20 -0
  87. package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.d.ts +6 -0
  88. package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.js +35 -0
  89. package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.d.ts +1 -0
  90. package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.js +20 -0
  91. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.d.ts +2 -0
  92. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.js +45 -0
  93. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.d.ts +2 -0
  94. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.js +28 -0
  95. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.d.ts +2 -0
  96. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.js +56 -0
  97. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.d.ts +2 -0
  98. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.js +23 -0
  99. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.d.ts +2 -0
  100. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.js +25 -0
  101. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.d.ts +2 -0
  102. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.js +48 -0
  103. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.d.ts +1 -0
  104. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.js +20 -0
  105. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.d.ts +1 -0
  106. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.js +16 -0
  107. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.d.ts +1 -0
  108. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.js +13 -0
  109. package/dist/create/iso-base-media/udta/create-meta.d.ts +4 -0
  110. package/dist/create/iso-base-media/udta/create-meta.js +20 -0
  111. package/dist/create/iso-base-media/udta/meta/create-hdlr.d.ts +1 -0
  112. package/dist/create/iso-base-media/udta/meta/create-hdlr.js +32 -0
  113. package/dist/create/make-track-info.d.ts +20 -0
  114. package/dist/create/make-track-info.js +2 -0
  115. package/dist/create/{cluster-segment.d.ts → matroska/cluster-segment.d.ts} +1 -1
  116. package/dist/create/{cluster-segment.js → matroska/cluster-segment.js} +2 -2
  117. package/dist/create/{cluster.d.ts → matroska/cluster.d.ts} +12 -5
  118. package/dist/create/{cluster.js → matroska/cluster.js} +23 -20
  119. package/dist/create/matroska/create-matroska-media.d.ts +2 -0
  120. package/dist/create/{create-media.js → matroska/create-matroska-media.js} +49 -25
  121. package/dist/create/matroska/make-duration-with-padding.d.ts +1 -0
  122. package/dist/create/{make-duration-with-padding.js → matroska/make-duration-with-padding.js} +1 -1
  123. package/dist/create/{matroska-cues.d.ts → matroska/matroska-cues.d.ts} +1 -1
  124. package/dist/create/{matroska-cues.js → matroska/matroska-cues.js} +1 -1
  125. package/dist/create/matroska/matroska-header.d.ts +1 -0
  126. package/dist/create/{matroska-header.js → matroska/matroska-header.js} +1 -1
  127. package/dist/create/{matroska-info.d.ts → matroska/matroska-info.d.ts} +1 -1
  128. package/dist/create/{matroska-info.js → matroska/matroska-info.js} +1 -1
  129. package/dist/create/matroska/matroska-seek.d.ts +6 -0
  130. package/dist/create/{matroska-seek.js → matroska/matroska-seek.js} +1 -1
  131. package/dist/create/{matroska-segment.d.ts → matroska/matroska-segment.d.ts} +1 -1
  132. package/dist/create/{matroska-segment.js → matroska/matroska-segment.js} +1 -1
  133. package/dist/create/matroska/matroska-trackentry.d.ts +10 -0
  134. package/dist/create/{matroska-trackentry.js → matroska/matroska-trackentry.js} +9 -3
  135. package/dist/create/{create-media.d.ts → media-fn.d.ts} +17 -4
  136. package/dist/create/media-fn.js +2 -0
  137. package/dist/create/timescale.d.ts +1 -1
  138. package/dist/create/timescale.js +2 -2
  139. package/dist/emit-available-info.d.ts +1 -1
  140. package/dist/emit-available-info.js +23 -10
  141. package/dist/esm/buffer.mjs +3 -3
  142. package/dist/esm/index.mjs +2104 -735
  143. package/dist/esm/web-fs.mjs +2 -2
  144. package/dist/get-audio-codec.d.ts +2 -1
  145. package/dist/get-audio-codec.js +29 -10
  146. package/dist/get-duration.d.ts +5 -0
  147. package/dist/get-duration.js +7 -3
  148. package/dist/get-fps.d.ts +1 -0
  149. package/dist/get-fps.js +24 -13
  150. package/dist/get-sample-positions.d.ts +1 -0
  151. package/dist/get-sample-positions.js +1 -0
  152. package/dist/get-tracks.d.ts +1 -0
  153. package/dist/get-video-codec.d.ts +2 -2
  154. package/dist/get-video-codec.js +6 -6
  155. package/dist/has-all-info.d.ts +1 -1
  156. package/dist/has-all-info.js +8 -8
  157. package/dist/index.d.ts +6 -8
  158. package/dist/index.js +7 -3
  159. package/dist/options.d.ts +10 -1
  160. package/dist/parse-media.js +42 -14
  161. package/dist/parse-result.d.ts +15 -0
  162. package/dist/parse-video.d.ts +3 -1
  163. package/dist/parse-video.js +6 -14
  164. package/dist/parser-state.d.ts +3 -3
  165. package/dist/readers/reader.d.ts +2 -2
  166. package/dist/samples-from-moof.js +1 -0
  167. package/dist/version.d.ts +1 -0
  168. package/dist/version.js +5 -0
  169. package/dist/webcodec-sample-types.d.ts +7 -20
  170. package/dist/writers/buffer-implementation/writer.d.ts +2 -2
  171. package/dist/writers/buffer-implementation/writer.js +3 -3
  172. package/dist/writers/web-fs.js +2 -3
  173. package/dist/writers/writer.d.ts +5 -3
  174. package/package.json +3 -3
  175. package/dist/create/make-duration-with-padding.d.ts +0 -1
  176. package/dist/create/matroska-header.d.ts +0 -1
  177. package/dist/create/matroska-seek.d.ts +0 -6
  178. package/dist/create/matroska-trackentry.d.ts +0 -27
  179. package/dist/create/polyfill-audio-sample.d.ts +0 -3
  180. package/dist/create/polyfill-audio-sample.js +0 -15
  181. package/dist/writers/buffer-implementation/multi-buffer.d.ts +0 -0
  182. package/dist/writers/buffer-implementation/multi-buffer.js +0 -1
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseColorParameterBox = void 0;
4
- const parseColorParameterBox = ({ iterator, }) => {
4
+ const parse_icc_profile_1 = require("../parse-icc-profile");
5
+ const parseColorParameterBox = ({ iterator, size, }) => {
5
6
  const byteString = iterator.getByteString(4);
6
7
  if (byteString === 'nclx') {
7
8
  const primaries = iterator.getUint16();
@@ -12,6 +13,7 @@ const parseColorParameterBox = ({ iterator, }) => {
12
13
  iterator.stopReadingBits();
13
14
  return {
14
15
  type: 'colr-box',
16
+ colorType: 'transfer-characteristics',
15
17
  fullRangeFlag,
16
18
  matrixIndex,
17
19
  primaries,
@@ -24,12 +26,22 @@ const parseColorParameterBox = ({ iterator, }) => {
24
26
  const matrixIndex = iterator.getUint16();
25
27
  return {
26
28
  type: 'colr-box',
29
+ colorType: 'transfer-characteristics',
27
30
  fullRangeFlag: false,
28
31
  matrixIndex,
29
32
  primaries,
30
33
  transfer,
31
34
  };
32
35
  }
36
+ if (byteString === 'prof') {
37
+ const profile = iterator.getSlice(size - 12);
38
+ return {
39
+ type: 'colr-box',
40
+ colorType: 'icc-profile',
41
+ profile,
42
+ parsed: (0, parse_icc_profile_1.parseIccProfile)(profile),
43
+ };
44
+ }
33
45
  throw new Error('Unexpected box type ' + byteString);
34
46
  };
35
47
  exports.parseColorParameterBox = parseColorParameterBox;
@@ -8,11 +8,10 @@ export interface MebxBox extends BaseBox {
8
8
  format: string;
9
9
  children: AnySegment[];
10
10
  }
11
- export declare const parseMebx: ({ iterator, offset, size, options, littleEndian, signal, }: {
11
+ export declare const parseMebx: ({ iterator, offset, size, options, signal, }: {
12
12
  iterator: BufferIterator;
13
13
  offset: number;
14
14
  size: number;
15
15
  options: ParserContext;
16
- littleEndian: boolean;
17
16
  signal: AbortSignal | null;
18
17
  }) => Promise<MebxBox>;
@@ -2,7 +2,7 @@
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 = async ({ iterator, offset, size, options, littleEndian, signal, }) => {
5
+ const parseMebx = async ({ iterator, offset, size, options, signal, }) => {
6
6
  // reserved, 6 bit
7
7
  iterator.discard(6);
8
8
  const dataReferenceIndex = iterator.getUint16();
@@ -13,8 +13,8 @@ const parseMebx = async ({ iterator, offset, size, options, littleEndian, signal
13
13
  initialBoxes: [],
14
14
  options,
15
15
  continueMdat: false,
16
- littleEndian,
17
16
  signal,
17
+ logLevel: 'info',
18
18
  });
19
19
  if (children.status === 'incomplete') {
20
20
  throw new Error('Incomplete boxes are not allowed');
@@ -1,4 +1,5 @@
1
1
  import type { BufferIterator } from '../../../buffer-iterator';
2
+ import type { LogLevel } from '../../../log';
2
3
  import type { AnySegment } from '../../../parse-result';
3
4
  import type { ParserContext } from '../../../parser-context';
4
5
  type SampleBase = {
@@ -48,15 +49,17 @@ export type Sample = AudioSample | VideoSample | UnknownSample;
48
49
  type SampleAndNext = {
49
50
  sample: Sample | null;
50
51
  };
51
- export declare const processSample: ({ iterator, options, signal, }: {
52
+ export declare const processSample: ({ iterator, options, signal, logLevel, }: {
52
53
  iterator: BufferIterator;
53
54
  options: ParserContext;
54
55
  signal: AbortSignal | null;
56
+ logLevel: LogLevel;
55
57
  }) => Promise<SampleAndNext>;
56
- export declare const parseSamples: ({ iterator, maxBytes, options, signal, }: {
58
+ export declare const parseSamples: ({ iterator, maxBytes, options, signal, logLevel, }: {
57
59
  iterator: BufferIterator;
58
60
  maxBytes: number;
59
61
  options: ParserContext;
60
62
  signal: AbortSignal | null;
63
+ logLevel: LogLevel;
61
64
  }) => Promise<Sample[]>;
62
65
  export {};
@@ -61,7 +61,7 @@ const audioTags = [
61
61
  'mp4a',
62
62
  'ac-3',
63
63
  ];
64
- const processSample = async ({ iterator, options, signal, }) => {
64
+ const processSample = async ({ iterator, options, signal, logLevel, }) => {
65
65
  const fileOffset = iterator.counter.getOffset();
66
66
  const bytesRemaining = iterator.bytesRemaining();
67
67
  const boxSize = iterator.getUint32();
@@ -105,8 +105,8 @@ const processSample = async ({ iterator, options, signal, }) => {
105
105
  initialBoxes: [],
106
106
  options,
107
107
  continueMdat: false,
108
- littleEndian: false,
109
108
  signal,
109
+ logLevel,
110
110
  });
111
111
  if (children.status === 'incomplete') {
112
112
  throw new Error('Incomplete boxes are not allowed');
@@ -152,8 +152,8 @@ const processSample = async ({ iterator, options, signal, }) => {
152
152
  initialBoxes: [],
153
153
  options,
154
154
  continueMdat: false,
155
- littleEndian: false,
156
155
  signal,
156
+ logLevel,
157
157
  });
158
158
  if (children.status === 'incomplete') {
159
159
  throw new Error('Incomplete boxes are not allowed');
@@ -203,8 +203,8 @@ const processSample = async ({ iterator, options, signal, }) => {
203
203
  initialBoxes: [],
204
204
  options,
205
205
  continueMdat: false,
206
- littleEndian: false,
207
206
  signal,
207
+ logLevel,
208
208
  });
209
209
  if (children.status === 'incomplete') {
210
210
  throw new Error('Incomplete boxes are not allowed');
@@ -258,8 +258,8 @@ const processSample = async ({ iterator, options, signal, }) => {
258
258
  initialBoxes: [],
259
259
  options,
260
260
  continueMdat: false,
261
- littleEndian: false,
262
261
  signal,
262
+ logLevel,
263
263
  })
264
264
  : (iterator.discard(bytesRemainingInBox),
265
265
  { status: 'done', segments: [] });
@@ -294,7 +294,7 @@ const processSample = async ({ iterator, options, signal, }) => {
294
294
  throw new Error(`Unknown sample format ${boxFormat}`);
295
295
  };
296
296
  exports.processSample = processSample;
297
- const parseSamples = async ({ iterator, maxBytes, options, signal, }) => {
297
+ const parseSamples = async ({ iterator, maxBytes, options, signal, logLevel, }) => {
298
298
  const samples = [];
299
299
  const initialOffset = iterator.counter.getOffset();
300
300
  while (iterator.bytesRemaining() > 0 &&
@@ -303,6 +303,7 @@ const parseSamples = async ({ iterator, maxBytes, options, signal, }) => {
303
303
  iterator,
304
304
  options,
305
305
  signal,
306
+ logLevel,
306
307
  });
307
308
  if (sample) {
308
309
  samples.push(sample);
@@ -16,6 +16,7 @@ const parseStsd = async ({ iterator, offset, size, options, signal, }) => {
16
16
  maxBytes: bytesRemainingInBox,
17
17
  options,
18
18
  signal,
19
+ logLevel: 'info',
19
20
  });
20
21
  if (boxes.length !== numberOfEntries) {
21
22
  throw new Error(`Expected ${numberOfEntries} sample descriptions, got ${boxes.length}`);
@@ -1 +1,2 @@
1
1
  export declare const toUnixTimestamp: (value: number) => number | null;
2
+ export declare const fromUnixTimestamp: (value: number | null) => number;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toUnixTimestamp = void 0;
3
+ exports.fromUnixTimestamp = exports.toUnixTimestamp = void 0;
4
4
  const toUnixTimestamp = (value) => {
5
5
  if (value === 0) {
6
6
  return null;
@@ -9,3 +9,11 @@ const toUnixTimestamp = (value) => {
9
9
  return Math.floor(value + baseDate.getTime() / 1000) * 1000;
10
10
  };
11
11
  exports.toUnixTimestamp = toUnixTimestamp;
12
+ const fromUnixTimestamp = (value) => {
13
+ if (value === null) {
14
+ return 0;
15
+ }
16
+ const baseDate = new Date('1904-01-01T00:00:00Z');
17
+ return Math.floor(value / 1000 - baseDate.getTime() / 1000);
18
+ };
19
+ exports.fromUnixTimestamp = fromUnixTimestamp;
@@ -1,4 +1,5 @@
1
1
  import type { BufferIterator } from '../../../buffer-iterator';
2
+ import type { LogLevel } from '../../../log';
2
3
  import type { AnySegment } from '../../../parse-result';
3
4
  import type { ParserContext } from '../../../parser-context';
4
5
  import type { BaseBox } from '../base-type';
@@ -6,10 +7,11 @@ export interface TrakBox extends BaseBox {
6
7
  type: 'trak-box';
7
8
  children: AnySegment[];
8
9
  }
9
- export declare const parseTrak: ({ data, size, offsetAtStart, options, signal, }: {
10
+ export declare const parseTrak: ({ data, size, offsetAtStart, options, signal, logLevel, }: {
10
11
  data: BufferIterator;
11
12
  size: number;
12
13
  offsetAtStart: number;
13
14
  options: ParserContext;
14
15
  signal: AbortSignal | null;
16
+ logLevel: LogLevel;
15
17
  }) => Promise<TrakBox>;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseTrak = void 0;
4
4
  const process_box_1 = require("../process-box");
5
- const parseTrak = async ({ data, size, offsetAtStart, options, signal, }) => {
5
+ const parseTrak = async ({ data, size, offsetAtStart, options, signal, logLevel, }) => {
6
6
  const children = await (0, process_box_1.parseBoxes)({
7
7
  iterator: data,
8
8
  maxBytes: size - (data.counter.getOffset() - offsetAtStart),
@@ -10,8 +10,8 @@ const parseTrak = async ({ data, size, offsetAtStart, options, signal, }) => {
10
10
  initialBoxes: [],
11
11
  options,
12
12
  continueMdat: false,
13
- littleEndian: false,
14
13
  signal,
14
+ logLevel,
15
15
  });
16
16
  if (children.status === 'incomplete') {
17
17
  throw new Error('Incomplete boxes are not allowed');
@@ -61,7 +61,7 @@ const parseAv1PrivateData = (data, colrAtom) => {
61
61
  : '0'
62
62
  : '0';
63
63
  str += '.';
64
- if (colrAtom) {
64
+ if (colrAtom && colrAtom.colorType === 'transfer-characteristics') {
65
65
  str += colrAtom.primaries.toString().padStart(2, '0');
66
66
  str += '.';
67
67
  str += colrAtom.transfer.toString().padStart(2, '0');
@@ -1,2 +1,2 @@
1
- export declare const measureEBMLVarInt: (value: number) => 1 | 4 | 2 | 3 | 5 | 6;
1
+ export declare const measureEBMLVarInt: (value: number) => 1 | 2 | 3 | 4 | 5 | 6;
2
2
  export declare const getVariableInt: (value: number, minWidth: number | null) => Uint8Array;
@@ -1,15 +1,15 @@
1
1
  import type { ParserContext } from '../../parser-context';
2
- import type { AudioSample, VideoSample } from '../../webcodec-sample-types';
2
+ import type { AudioOrVideoSample } from '../../webcodec-sample-types';
3
3
  import type { BlockSegment, SimpleBlockSegment } from './segments/all-segments';
4
4
  type SampleResult = {
5
5
  type: 'video-sample';
6
- videoSample: VideoSample;
6
+ videoSample: AudioOrVideoSample;
7
7
  } | {
8
8
  type: 'audio-sample';
9
- audioSample: AudioSample;
9
+ audioSample: AudioOrVideoSample;
10
10
  } | {
11
11
  type: 'partial-video-sample';
12
- partialVideoSample: Omit<VideoSample, 'type'>;
12
+ partialVideoSample: Omit<AudioOrVideoSample, 'type'>;
13
13
  } | {
14
14
  type: 'no-sample';
15
15
  };
@@ -34,8 +34,8 @@ const getSampleFromBlock = (ebml, parserContext, offset) => {
34
34
  if (codec.startsWith('V_')) {
35
35
  const partialVideoSample = {
36
36
  data: iterator.getSlice(remainingNow),
37
- cts: null,
38
- dts: null,
37
+ cts: timecodeInMicroseconds,
38
+ dts: timecodeInMicroseconds,
39
39
  duration: undefined,
40
40
  trackId: trackNumber,
41
41
  timestamp: timecodeInMicroseconds,
@@ -64,6 +64,8 @@ const getSampleFromBlock = (ebml, parserContext, offset) => {
64
64
  timestamp: timecodeInMicroseconds,
65
65
  type: 'key',
66
66
  duration: undefined,
67
+ cts: timecodeInMicroseconds,
68
+ dts: timecodeInMicroseconds,
67
69
  };
68
70
  iterator.destroy();
69
71
  return {
@@ -231,6 +231,7 @@ const getTrack = ({ timescale, track, }) => {
231
231
  codecWithoutConfig: getMatroskaVideoCodecWithoutConfigString({
232
232
  codecSegment: codec,
233
233
  }),
234
+ fps: null,
234
235
  };
235
236
  }
236
237
  if ((0, track_entry_1.trackTypeToString)(trackType.value.value) === 'audio') {
@@ -2,14 +2,33 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseWebm = void 0;
4
4
  const parse_children_1 = require("./segments/parse-children");
5
+ const continueAfterMatroskaResult = (result, children) => {
6
+ if (result.status === 'done') {
7
+ return {
8
+ status: 'done',
9
+ segments: children,
10
+ };
11
+ }
12
+ return {
13
+ status: 'incomplete',
14
+ segments: children,
15
+ continueParsing: async () => {
16
+ const newResult = await result.continueParsing();
17
+ return continueAfterMatroskaResult(newResult, children);
18
+ },
19
+ skipTo: null,
20
+ };
21
+ };
5
22
  // Parsing according to https://darkcoding.net/software/reading-mediarecorders-webm-opus-output/
6
- const parseWebm = (counter, parserContext) => {
7
- return (0, parse_children_1.expectChildren)({
23
+ const parseWebm = async (counter, parserContext) => {
24
+ const children = [];
25
+ const results = await (0, parse_children_1.expectChildren)({
8
26
  iterator: counter,
9
27
  length: Infinity,
10
- initialChildren: [],
11
- wrap: null,
28
+ children,
12
29
  parserContext,
30
+ startOffset: counter.counter.getOffset(),
13
31
  });
32
+ return continueAfterMatroskaResult(results, children);
14
33
  };
15
34
  exports.parseWebm = parseWebm;
@@ -1,13 +1,18 @@
1
1
  import type { BufferIterator } from '../../../buffer-iterator';
2
- import type { ParseResult } from '../../../parse-result';
2
+ import type { ExpectSegmentParseResult, MatroskaParseResult } from '../../../parse-result';
3
3
  import type { ParserContext } from '../../../parser-context';
4
4
  import type { MatroskaSegment } from '../segments';
5
- type WrapChildren = (segments: MatroskaSegment[]) => MatroskaSegment;
6
- export declare const expectChildren: ({ iterator, length, initialChildren, wrap, parserContext, }: {
5
+ import type { PossibleEbml } from './all-segments';
6
+ export declare const expectAndProcessSegment: ({ iterator, parserContext, offset, children, }: {
7
+ iterator: BufferIterator;
8
+ parserContext: ParserContext;
9
+ offset: number;
10
+ children: PossibleEbml[];
11
+ }) => Promise<ExpectSegmentParseResult>;
12
+ export declare const expectChildren: ({ iterator, length, children, parserContext, startOffset, }: {
7
13
  iterator: BufferIterator;
8
14
  length: number;
9
- initialChildren: MatroskaSegment[];
10
- wrap: WrapChildren | null;
15
+ children: MatroskaSegment[];
11
16
  parserContext: ParserContext;
12
- }) => Promise<ParseResult>;
13
- export {};
17
+ startOffset: number;
18
+ }) => Promise<MatroskaParseResult>;
@@ -1,100 +1,110 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.expectChildren = void 0;
3
+ exports.expectChildren = exports.expectAndProcessSegment = void 0;
4
4
  const segments_1 = require("../segments");
5
- const processParseResult = ({ parseResult, children, wrap, }) => {
5
+ const processParseResult = ({ parseResult, children, }) => {
6
+ if (parseResult.segment && !children.includes(parseResult.segment)) {
7
+ children.push(parseResult.segment);
8
+ }
6
9
  if (parseResult.status === 'incomplete') {
7
10
  // No need to decrement because expectSegment already does it
8
11
  return {
9
12
  status: 'incomplete',
10
- segments: [],
13
+ segment: parseResult.segment,
11
14
  continueParsing: async () => {
12
15
  const newParseResult = await parseResult.continueParsing();
13
16
  return processParseResult({
14
17
  children,
15
18
  parseResult: newParseResult,
16
- wrap,
17
19
  });
18
20
  },
19
- skipTo: null,
20
21
  };
21
22
  }
22
- for (const segment of parseResult.segments) {
23
- children.push(segment);
24
- }
25
23
  return {
26
24
  status: 'done',
27
- segments: wrap ? [wrap(children)] : children,
25
+ segment: parseResult.segment,
28
26
  };
29
27
  };
30
- const continueParsingfunction = ({ result, iterator, children, wrap, parserContext, length, }) => async () => {
31
- if (result.status !== 'incomplete') {
32
- throw new Error('expected incomplete');
28
+ const expectAndProcessSegment = async ({ iterator, parserContext, offset, children, }) => {
29
+ const segment = await (0, segments_1.expectSegment)({
30
+ iterator,
31
+ parserContext,
32
+ offset,
33
+ children,
34
+ });
35
+ return processParseResult({
36
+ children,
37
+ parseResult: segment,
38
+ });
39
+ };
40
+ exports.expectAndProcessSegment = expectAndProcessSegment;
41
+ const continueAfterSegmentResult = async ({ result, length, children, parserContext, iterator, startOffset, }) => {
42
+ if (result.status === 'done') {
43
+ throw new Error('Should not continue after done');
33
44
  }
34
- const offset = iterator.counter.getOffset();
35
- const continued = await result.continueParsing();
36
- if (continued.status === 'incomplete') {
37
- if (!parserContext.supportsContentRange) {
38
- throw new Error('Content-Range header is not supported by the reader, but was asked to seek');
39
- }
45
+ const segmentResult = await result.continueParsing();
46
+ if (segmentResult.status === 'done') {
40
47
  return {
41
48
  status: 'incomplete',
42
- continueParsing: continueParsingfunction({
43
- result: continued,
44
- iterator,
45
- children,
46
- wrap,
47
- parserContext,
48
- length: length - (iterator.counter.getOffset() - offset),
49
- }),
50
- skipTo: continued.skipTo,
51
- segments: wrap ? [wrap(children)] : children,
49
+ continueParsing: () => {
50
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
51
+ return (0, exports.expectChildren)({
52
+ children,
53
+ iterator,
54
+ length,
55
+ parserContext,
56
+ startOffset,
57
+ });
58
+ },
59
+ skipTo: null,
52
60
  };
53
61
  }
54
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
55
- return (0, exports.expectChildren)({
56
- iterator,
57
- length: length - (iterator.counter.getOffset() - offset),
58
- initialChildren: children,
59
- wrap,
60
- parserContext,
61
- });
62
+ return {
63
+ status: 'incomplete',
64
+ continueParsing: () => {
65
+ return continueAfterSegmentResult({
66
+ result: segmentResult,
67
+ children,
68
+ iterator,
69
+ length,
70
+ parserContext,
71
+ startOffset,
72
+ });
73
+ },
74
+ skipTo: null,
75
+ };
62
76
  };
63
- const expectChildren = async ({ iterator, length, initialChildren, wrap, parserContext, }) => {
64
- const children = [...initialChildren];
65
- const startOffset = iterator.counter.getOffset();
77
+ const expectChildren = async ({ iterator, length, children, parserContext, startOffset, }) => {
66
78
  while (iterator.counter.getOffset() < startOffset + length) {
67
79
  if (iterator.bytesRemaining() === 0) {
68
80
  break;
69
81
  }
70
- const parseResult = await (0, segments_1.expectSegment)(iterator, parserContext);
71
- const child = processParseResult({
82
+ const currentOffset = iterator.counter.getOffset();
83
+ const child = await (0, exports.expectAndProcessSegment)({
84
+ iterator,
85
+ parserContext,
86
+ offset: currentOffset,
72
87
  children,
73
- parseResult,
74
- wrap,
75
88
  });
76
89
  if (child.status === 'incomplete') {
77
- if (!parserContext.supportsContentRange) {
78
- throw new Error('Content-Range header is not supported by the reader, but was asked to seek');
79
- }
80
90
  return {
81
91
  status: 'incomplete',
82
- continueParsing: continueParsingfunction({
83
- result: child,
84
- iterator,
85
- children,
86
- wrap,
87
- parserContext,
88
- length: length - (iterator.counter.getOffset() - startOffset),
89
- }),
90
- skipTo: child.skipTo,
91
- segments: wrap ? [wrap(children)] : children,
92
+ continueParsing: () => {
93
+ return continueAfterSegmentResult({
94
+ result: child,
95
+ children,
96
+ iterator,
97
+ length: length - (currentOffset - startOffset),
98
+ parserContext,
99
+ startOffset: currentOffset,
100
+ });
101
+ },
102
+ skipTo: null,
92
103
  };
93
104
  }
94
105
  }
95
106
  return {
96
107
  status: 'done',
97
- segments: wrap ? [wrap(children)] : children,
98
108
  };
99
109
  };
100
110
  exports.expectChildren = expectChildren;
@@ -1,7 +1,12 @@
1
1
  import type { BufferIterator } from '../../buffer-iterator';
2
- import type { ParseResult } from '../../parse-result';
2
+ import type { ExpectSegmentParseResult } from '../../parse-result';
3
3
  import type { ParserContext } from '../../parser-context';
4
- import type { PossibleEbml, TrackEntry } from './segments/all-segments';
4
+ import { type PossibleEbml, type TrackEntry } from './segments/all-segments';
5
5
  export type MatroskaSegment = PossibleEbml;
6
6
  export type OnTrackEntrySegment = (trackEntry: TrackEntry) => void;
7
- export declare const expectSegment: (iterator: BufferIterator, parserContext: ParserContext) => Promise<ParseResult>;
7
+ export declare const expectSegment: ({ iterator, parserContext, offset, children, }: {
8
+ iterator: BufferIterator;
9
+ parserContext: ParserContext;
10
+ offset: number;
11
+ children: PossibleEbml[];
12
+ }) => Promise<ExpectSegmentParseResult>;