@remotion/media-parser 4.0.208 → 4.0.210

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 (215) hide show
  1. package/buffer.js +2 -0
  2. package/dist/boxes/iso-base-media/get-sample-positions-from-track.js +1 -1
  3. package/dist/boxes/iso-base-media/make-track.js +14 -2
  4. package/dist/boxes/iso-base-media/mdat/mdat.d.ts +2 -1
  5. package/dist/boxes/iso-base-media/mdat/mdat.js +8 -3
  6. package/dist/boxes/iso-base-media/moov/moov.d.ts +2 -1
  7. package/dist/boxes/iso-base-media/moov/moov.js +2 -1
  8. package/dist/boxes/iso-base-media/process-box.d.ts +6 -3
  9. package/dist/boxes/iso-base-media/process-box.js +20 -5
  10. package/dist/boxes/iso-base-media/stsd/avcc.d.ts +1 -1
  11. package/dist/boxes/iso-base-media/stsd/avcc.js +2 -2
  12. package/dist/boxes/iso-base-media/stsd/ctts.js +2 -5
  13. package/dist/boxes/iso-base-media/stsd/hvcc.d.ts +1 -1
  14. package/dist/boxes/iso-base-media/stsd/hvcc.js +2 -2
  15. package/dist/boxes/iso-base-media/stsd/mebx.d.ts +2 -1
  16. package/dist/boxes/iso-base-media/stsd/mebx.js +2 -1
  17. package/dist/boxes/iso-base-media/stsd/samples.d.ts +4 -2
  18. package/dist/boxes/iso-base-media/stsd/samples.js +69 -11
  19. package/dist/boxes/iso-base-media/stsd/stsd.d.ts +2 -1
  20. package/dist/boxes/iso-base-media/stsd/stsd.js +2 -1
  21. package/dist/boxes/iso-base-media/trak/trak.d.ts +2 -1
  22. package/dist/boxes/iso-base-media/trak/trak.js +2 -1
  23. package/dist/boxes/iso-base-media/traversal.d.ts +44 -0
  24. package/dist/boxes/iso-base-media/traversal.js +211 -0
  25. package/dist/boxes/webm/color.d.ts +4 -0
  26. package/dist/boxes/webm/color.js +120 -0
  27. package/dist/boxes/webm/description.js +1 -1
  28. package/dist/boxes/webm/get-ready-tracks.js +3 -3
  29. package/dist/boxes/webm/get-sample-from-block.js +1 -1
  30. package/dist/boxes/webm/get-track.js +16 -1
  31. package/dist/boxes/webm/make-track.d.ts +9 -0
  32. package/dist/boxes/webm/make-track.js +260 -0
  33. package/dist/boxes/webm/parse-ebml.js +5 -2
  34. package/dist/boxes/webm/segments/all-segments.d.ts +36 -3
  35. package/dist/boxes/webm/segments/all-segments.js +34 -6
  36. package/dist/boxes/webm/traversal.d.ts +26 -1
  37. package/dist/boxes/webm/traversal.js +214 -1
  38. package/dist/buffer-iterator.js +6 -0
  39. package/dist/create/cluster-segment.d.ts +1 -1
  40. package/dist/create/cluster-segment.js +3 -5
  41. package/dist/create/cluster.d.ts +13 -0
  42. package/dist/create/cluster.js +54 -0
  43. package/dist/create/create-media.d.ts +4 -2
  44. package/dist/create/create-media.js +87 -47
  45. package/dist/create/cues.d.ts +0 -0
  46. package/dist/create/cues.js +1 -0
  47. package/dist/create/make-duration-with-padding.d.ts +1 -0
  48. package/dist/create/make-duration-with-padding.js +15 -0
  49. package/dist/create/matroska-cues.d.ts +6 -0
  50. package/dist/create/matroska-cues.js +50 -0
  51. package/dist/create/matroska-info.d.ts +1 -2
  52. package/dist/create/matroska-info.js +3 -11
  53. package/dist/create/matroska-seek.d.ts +6 -0
  54. package/dist/create/matroska-seek.js +32 -0
  55. package/dist/create/matroska-segment.d.ts +1 -0
  56. package/dist/create/matroska-segment.js +3 -2
  57. package/dist/create/matroska-trackentry.d.ts +9 -14
  58. package/dist/create/matroska-trackentry.js +79 -94
  59. package/dist/create/timescale.d.ts +1 -0
  60. package/dist/create/timescale.js +4 -0
  61. package/dist/emit-available-info.d.ts +12 -0
  62. package/dist/emit-available-info.js +133 -0
  63. package/dist/esm/buffer.mjs +57 -0
  64. package/dist/esm/from-fetch.mjs +72 -0
  65. package/dist/esm/from-node.mjs +48 -0
  66. package/dist/esm/from-web-file.mjs +48 -0
  67. package/dist/esm/index.mjs +6689 -0
  68. package/dist/esm/web-fs.mjs +67 -0
  69. package/dist/get-audio-codec.d.ts +5 -5
  70. package/dist/get-audio-codec.js +41 -57
  71. package/dist/get-container.d.ts +4 -0
  72. package/dist/get-container.js +26 -0
  73. package/dist/get-duration.js +1 -1
  74. package/dist/get-fps.js +1 -1
  75. package/dist/get-sample-aspect-ratio.d.ts +1 -1
  76. package/dist/get-sample-aspect-ratio.js +19 -19
  77. package/dist/get-tracks.d.ts +13 -0
  78. package/dist/get-tracks.js +8 -8
  79. package/dist/get-video-codec.d.ts +5 -2
  80. package/dist/get-video-codec.js +111 -21
  81. package/dist/has-all-info.d.ts +2 -2
  82. package/dist/has-all-info.js +23 -9
  83. package/dist/index.d.ts +3 -1
  84. package/dist/options.d.ts +97 -30
  85. package/dist/parse-media.js +43 -62
  86. package/dist/parse-video.d.ts +2 -1
  87. package/dist/parse-video.js +3 -1
  88. package/dist/parser-state.js +1 -2
  89. package/dist/readers/from-fetch.js +24 -4
  90. package/dist/readers/from-node.js +13 -3
  91. package/dist/readers/from-web-file.js +14 -2
  92. package/dist/readers/reader.d.ts +6 -1
  93. package/dist/samples-from-moof.js +1 -1
  94. package/dist/traversal.d.ts +0 -21
  95. package/dist/traversal.js +1 -158
  96. package/dist/truthy.d.ts +3 -0
  97. package/dist/truthy.js +7 -0
  98. package/dist/writers/buffer.d.ts +2 -0
  99. package/dist/writers/buffer.js +58 -0
  100. package/dist/writers/web-fs.d.ts +1 -0
  101. package/dist/writers/web-fs.js +42 -18
  102. package/dist/writers/writer.d.ts +4 -2
  103. package/fetch.js +2 -0
  104. package/node.js +2 -0
  105. package/package.json +43 -8
  106. package/web-file.js +2 -0
  107. package/web-fs.js +2 -0
  108. package/.eslintrc +0 -8
  109. package/input.webm +0 -0
  110. package/src/add-new-matroska-tracks.ts +0 -23
  111. package/src/boxes/iso-base-media/base-type.ts +0 -4
  112. package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +0 -68
  113. package/src/boxes/iso-base-media/esds/esds-descriptors.ts +0 -135
  114. package/src/boxes/iso-base-media/esds/esds.ts +0 -49
  115. package/src/boxes/iso-base-media/ftyp.ts +0 -39
  116. package/src/boxes/iso-base-media/get-sample-positions-from-track.ts +0 -69
  117. package/src/boxes/iso-base-media/make-track.ts +0 -116
  118. package/src/boxes/iso-base-media/mdat/mdat.ts +0 -140
  119. package/src/boxes/iso-base-media/mdhd.ts +0 -59
  120. package/src/boxes/iso-base-media/moov/moov.ts +0 -43
  121. package/src/boxes/iso-base-media/mvhd.ts +0 -114
  122. package/src/boxes/iso-base-media/process-box.ts +0 -748
  123. package/src/boxes/iso-base-media/stsd/av1c.ts +0 -19
  124. package/src/boxes/iso-base-media/stsd/avcc.ts +0 -36
  125. package/src/boxes/iso-base-media/stsd/colr.ts +0 -49
  126. package/src/boxes/iso-base-media/stsd/ctts.ts +0 -64
  127. package/src/boxes/iso-base-media/stsd/hvcc.ts +0 -32
  128. package/src/boxes/iso-base-media/stsd/keys.ts +0 -27
  129. package/src/boxes/iso-base-media/stsd/mebx.ts +0 -54
  130. package/src/boxes/iso-base-media/stsd/pasp.ts +0 -32
  131. package/src/boxes/iso-base-media/stsd/samples.ts +0 -359
  132. package/src/boxes/iso-base-media/stsd/stco.ts +0 -52
  133. package/src/boxes/iso-base-media/stsd/stsc.ts +0 -61
  134. package/src/boxes/iso-base-media/stsd/stsd.ts +0 -55
  135. package/src/boxes/iso-base-media/stsd/stss.ts +0 -47
  136. package/src/boxes/iso-base-media/stsd/stsz.ts +0 -75
  137. package/src/boxes/iso-base-media/stsd/stts.ts +0 -62
  138. package/src/boxes/iso-base-media/tfdt.ts +0 -37
  139. package/src/boxes/iso-base-media/tfhd.ts +0 -66
  140. package/src/boxes/iso-base-media/tkhd.ts +0 -150
  141. package/src/boxes/iso-base-media/to-date.ts +0 -9
  142. package/src/boxes/iso-base-media/trak/trak.ts +0 -43
  143. package/src/boxes/iso-base-media/trun.ts +0 -74
  144. package/src/boxes/iso-base-media/void-box.ts +0 -4
  145. package/src/boxes/webm/allowed-partial-segments.ts +0 -1
  146. package/src/boxes/webm/av1-codec-private.ts +0 -113
  147. package/src/boxes/webm/description.ts +0 -104
  148. package/src/boxes/webm/ebml.ts +0 -98
  149. package/src/boxes/webm/get-ready-tracks.ts +0 -36
  150. package/src/boxes/webm/get-sample-from-block.ts +0 -125
  151. package/src/boxes/webm/get-track.ts +0 -257
  152. package/src/boxes/webm/make-header.ts +0 -253
  153. package/src/boxes/webm/parse-ebml.ts +0 -255
  154. package/src/boxes/webm/parse-webm-header.ts +0 -18
  155. package/src/boxes/webm/segments/all-segments.ts +0 -888
  156. package/src/boxes/webm/segments/block-simple-block-flags.ts +0 -52
  157. package/src/boxes/webm/segments/parse-children.ts +0 -144
  158. package/src/boxes/webm/segments/track-entry.ts +0 -38
  159. package/src/boxes/webm/segments.ts +0 -147
  160. package/src/boxes/webm/traversal.ts +0 -45
  161. package/src/buffer-iterator.ts +0 -548
  162. package/src/create/cluster-segment.ts +0 -62
  163. package/src/create/create-media.ts +0 -172
  164. package/src/create/matroska-header.ts +0 -63
  165. package/src/create/matroska-info.ts +0 -46
  166. package/src/create/matroska-segment.ts +0 -10
  167. package/src/create/matroska-trackentry.ts +0 -325
  168. package/src/get-audio-codec.ts +0 -270
  169. package/src/get-dimensions.ts +0 -47
  170. package/src/get-duration.ts +0 -103
  171. package/src/get-fps.ts +0 -113
  172. package/src/get-sample-aspect-ratio.ts +0 -204
  173. package/src/get-sample-positions.ts +0 -93
  174. package/src/get-tracks.ts +0 -147
  175. package/src/get-video-codec.ts +0 -117
  176. package/src/has-all-info.ts +0 -81
  177. package/src/index.ts +0 -18
  178. package/src/make-hvc1-codec-strings.ts +0 -55
  179. package/src/options.ts +0 -118
  180. package/src/parse-media.ts +0 -183
  181. package/src/parse-result.ts +0 -79
  182. package/src/parse-video.ts +0 -83
  183. package/src/parser-context.ts +0 -10
  184. package/src/parser-state.ts +0 -178
  185. package/src/readers/from-fetch.ts +0 -90
  186. package/src/readers/from-node.ts +0 -51
  187. package/src/readers/from-web-file.ts +0 -49
  188. package/src/readers/reader.ts +0 -15
  189. package/src/samples-from-moof.ts +0 -102
  190. package/src/test/aspect-ratio.test.ts +0 -42
  191. package/src/test/av1.test.ts +0 -108
  192. package/src/test/create-matroska.test.ts +0 -287
  193. package/src/test/duration.test.ts +0 -18
  194. package/src/test/keys.test.ts +0 -47
  195. package/src/test/matroska.test.ts +0 -463
  196. package/src/test/mvhd.test.ts +0 -94
  197. package/src/test/parse-esds.test.ts +0 -98
  198. package/src/test/parse-stco.test.ts +0 -61
  199. package/src/test/parse-stsc.test.ts +0 -104
  200. package/src/test/parse-stsz.test.ts +0 -57
  201. package/src/test/parse-stts.test.ts +0 -38
  202. package/src/test/parse-video.test.ts +0 -101
  203. package/src/test/parse-webm.test.ts +0 -17
  204. package/src/test/samples-from-moof.test.ts +0 -2496
  205. package/src/test/stream-local.test.ts +0 -743
  206. package/src/test/stream-remote.test.ts +0 -59
  207. package/src/test/stream-samples.test.ts +0 -181
  208. package/src/test/stsd.test.ts +0 -265
  209. package/src/test/tkhd.test.ts +0 -87
  210. package/src/traversal.ts +0 -528
  211. package/src/webcodec-sample-types.ts +0 -29
  212. package/src/writers/web-fs.ts +0 -50
  213. package/src/writers/writer.ts +0 -12
  214. package/tsconfig.json +0 -14
  215. package/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,44 @@
1
+ import type { AnySegment, IsoBaseMediaBox, RegularBox } from '../../parse-result';
2
+ import type { FtypBox } from './ftyp';
3
+ import type { MdhdBox } from './mdhd';
4
+ import type { MoovBox } from './moov/moov';
5
+ import type { MvhdBox } from './mvhd';
6
+ import type { CttsBox } from './stsd/ctts';
7
+ import type { StcoBox } from './stsd/stco';
8
+ import type { StscBox } from './stsd/stsc';
9
+ import type { StsdBox } from './stsd/stsd';
10
+ import type { StssBox } from './stsd/stss';
11
+ import type { StszBox } from './stsd/stsz';
12
+ import type { SttsBox } from './stsd/stts';
13
+ import type { TfdtBox } from './tfdt';
14
+ import type { TfhdBox } from './tfhd';
15
+ import type { TkhdBox } from './tkhd';
16
+ import type { TrakBox } from './trak/trak';
17
+ import type { TrunBox } from './trun';
18
+ export declare const getFtypBox: (segments: AnySegment[]) => FtypBox | null;
19
+ export declare const getMoovBox: (segments: AnySegment[]) => MoovBox | null;
20
+ export declare const getMoofBox: (main: AnySegment[]) => IsoBaseMediaBox | null;
21
+ export declare const getMvhdBox: (moovBox: MoovBox) => MvhdBox | null;
22
+ export declare const getTraks: (moovBox: MoovBox) => TrakBox[];
23
+ export declare const getTkhdBox: (trakBox: TrakBox) => TkhdBox | null;
24
+ export declare const getMdiaBox: (trakBox: TrakBox) => RegularBox | null;
25
+ export declare const getMdhdBox: (trakBox: TrakBox) => MdhdBox | null;
26
+ export declare const getStblBox: (trakBox: TrakBox) => RegularBox | null;
27
+ export declare const getStsdBox: (trakBox: TrakBox) => StsdBox | null;
28
+ export declare const getVideoDescriptors: (trakBox: TrakBox) => Uint8Array | null;
29
+ export declare const getStcoBox: (trakBox: TrakBox) => StcoBox | null;
30
+ export declare const getSttsBox: (trakBox: TrakBox) => SttsBox | null;
31
+ export declare const getCttsBox: (trakBox: TrakBox) => CttsBox | null;
32
+ export declare const getStszBox: (trakBox: TrakBox) => StszBox | null;
33
+ export declare const getStscBox: (trakBox: TrakBox) => StscBox | null;
34
+ export declare const getStssBox: (trakBox: TrakBox) => StssBox | null;
35
+ export declare const getTfdtBox: (segment: IsoBaseMediaBox) => TfdtBox | null;
36
+ export declare const getTfhdBox: (segment: IsoBaseMediaBox) => TfhdBox | null;
37
+ export declare const getTrunBoxes: (segment: IsoBaseMediaBox) => TrunBox[];
38
+ export declare const hasSkippedMdatProcessing: (anySegment: AnySegment[]) => {
39
+ skipped: false;
40
+ fileOffset?: undefined;
41
+ } | {
42
+ skipped: boolean;
43
+ fileOffset: number;
44
+ };
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasSkippedMdatProcessing = exports.getTrunBoxes = exports.getTfhdBox = exports.getTfdtBox = exports.getStssBox = exports.getStscBox = exports.getStszBox = exports.getCttsBox = exports.getSttsBox = exports.getStcoBox = exports.getVideoDescriptors = exports.getStsdBox = exports.getStblBox = exports.getMdhdBox = exports.getMdiaBox = exports.getTkhdBox = exports.getTraks = exports.getMvhdBox = exports.getMoofBox = exports.getMoovBox = exports.getFtypBox = void 0;
4
+ const getFtypBox = (segments) => {
5
+ const ftypBox = segments.find((s) => s.type === 'ftyp-box');
6
+ if (!ftypBox || ftypBox.type !== 'ftyp-box') {
7
+ return null;
8
+ }
9
+ return ftypBox;
10
+ };
11
+ exports.getFtypBox = getFtypBox;
12
+ const getMoovBox = (segments) => {
13
+ const moovBox = segments.find((s) => s.type === 'moov-box');
14
+ if (!moovBox || moovBox.type !== 'moov-box') {
15
+ return null;
16
+ }
17
+ return moovBox;
18
+ };
19
+ exports.getMoovBox = getMoovBox;
20
+ const getMoofBox = (main) => {
21
+ const moofBox = main.find((s) => s.type === 'regular-box' && s.boxType === 'moof');
22
+ if (!moofBox || moofBox.type !== 'regular-box') {
23
+ return null;
24
+ }
25
+ return moofBox;
26
+ };
27
+ exports.getMoofBox = getMoofBox;
28
+ const getMvhdBox = (moovBox) => {
29
+ const mvHdBox = moovBox.children.find((s) => s.type === 'mvhd-box');
30
+ if (!mvHdBox || mvHdBox.type !== 'mvhd-box') {
31
+ return null;
32
+ }
33
+ return mvHdBox;
34
+ };
35
+ exports.getMvhdBox = getMvhdBox;
36
+ const getTraks = (moovBox) => {
37
+ return moovBox.children.filter((s) => s.type === 'trak-box');
38
+ };
39
+ exports.getTraks = getTraks;
40
+ const getTkhdBox = (trakBox) => {
41
+ const tkhdBox = trakBox.children.find((s) => s.type === 'tkhd-box');
42
+ return tkhdBox;
43
+ };
44
+ exports.getTkhdBox = getTkhdBox;
45
+ const getMdiaBox = (trakBox) => {
46
+ const mdiaBox = trakBox.children.find((s) => s.type === 'regular-box' && s.boxType === 'mdia');
47
+ if (!mdiaBox || mdiaBox.type !== 'regular-box') {
48
+ return null;
49
+ }
50
+ return mdiaBox;
51
+ };
52
+ exports.getMdiaBox = getMdiaBox;
53
+ const getMdhdBox = (trakBox) => {
54
+ const mdiaBox = (0, exports.getMdiaBox)(trakBox);
55
+ if (!mdiaBox) {
56
+ return null;
57
+ }
58
+ const mdhdBox = mdiaBox.children.find((c) => c.type === 'mdhd-box');
59
+ return mdhdBox;
60
+ };
61
+ exports.getMdhdBox = getMdhdBox;
62
+ const getStblBox = (trakBox) => {
63
+ const mdiaBox = (0, exports.getMdiaBox)(trakBox);
64
+ if (!mdiaBox) {
65
+ return null;
66
+ }
67
+ const minfBox = mdiaBox.children.find((s) => s.type === 'regular-box' && s.boxType === 'minf');
68
+ if (!minfBox || minfBox.type !== 'regular-box') {
69
+ return null;
70
+ }
71
+ const stblBox = minfBox.children.find((s) => s.type === 'regular-box' && s.boxType === 'stbl');
72
+ if (!stblBox || stblBox.type !== 'regular-box') {
73
+ return null;
74
+ }
75
+ return stblBox;
76
+ };
77
+ exports.getStblBox = getStblBox;
78
+ const getStsdBox = (trakBox) => {
79
+ const stblBox = (0, exports.getStblBox)(trakBox);
80
+ if (!stblBox || stblBox.type !== 'regular-box') {
81
+ return null;
82
+ }
83
+ const stsdBox = stblBox.children.find((s) => s.type === 'stsd-box');
84
+ return stsdBox;
85
+ };
86
+ exports.getStsdBox = getStsdBox;
87
+ const getVideoDescriptors = (trakBox) => {
88
+ var _a;
89
+ const stsdBox = (0, exports.getStsdBox)(trakBox);
90
+ if (!stsdBox) {
91
+ return null;
92
+ }
93
+ const descriptors = stsdBox.samples.map((s) => {
94
+ return s.type === 'video'
95
+ ? s.descriptors.map((d) => {
96
+ return d.type === 'avcc-box'
97
+ ? d.privateData
98
+ : d.type === 'hvcc-box'
99
+ ? d.privateData
100
+ : null;
101
+ })
102
+ : [];
103
+ });
104
+ return (_a = descriptors.flat(1).filter(Boolean)[0]) !== null && _a !== void 0 ? _a : null;
105
+ };
106
+ exports.getVideoDescriptors = getVideoDescriptors;
107
+ const getStcoBox = (trakBox) => {
108
+ const stblBox = (0, exports.getStblBox)(trakBox);
109
+ if (!stblBox || stblBox.type !== 'regular-box') {
110
+ return null;
111
+ }
112
+ const stcoBox = stblBox.children.find((s) => s.type === 'stco-box');
113
+ return stcoBox;
114
+ };
115
+ exports.getStcoBox = getStcoBox;
116
+ const getSttsBox = (trakBox) => {
117
+ const stblBox = (0, exports.getStblBox)(trakBox);
118
+ if (!stblBox || stblBox.type !== 'regular-box') {
119
+ return null;
120
+ }
121
+ const sttsBox = stblBox.children.find((s) => s.type === 'stts-box');
122
+ return sttsBox;
123
+ };
124
+ exports.getSttsBox = getSttsBox;
125
+ const getCttsBox = (trakBox) => {
126
+ const stblBox = (0, exports.getStblBox)(trakBox);
127
+ if (!stblBox || stblBox.type !== 'regular-box') {
128
+ return null;
129
+ }
130
+ const cttsBox = stblBox.children.find((s) => s.type === 'ctts-box');
131
+ return cttsBox;
132
+ };
133
+ exports.getCttsBox = getCttsBox;
134
+ const getStszBox = (trakBox) => {
135
+ const stblBox = (0, exports.getStblBox)(trakBox);
136
+ if (!stblBox || stblBox.type !== 'regular-box') {
137
+ return null;
138
+ }
139
+ const stszBox = stblBox.children.find((s) => s.type === 'stsz-box');
140
+ return stszBox;
141
+ };
142
+ exports.getStszBox = getStszBox;
143
+ const getStscBox = (trakBox) => {
144
+ const stblBox = (0, exports.getStblBox)(trakBox);
145
+ if (!stblBox || stblBox.type !== 'regular-box') {
146
+ return null;
147
+ }
148
+ const stcoBox = stblBox.children.find((b) => b.type === 'stsc-box');
149
+ return stcoBox;
150
+ };
151
+ exports.getStscBox = getStscBox;
152
+ const getStssBox = (trakBox) => {
153
+ const stblBox = (0, exports.getStblBox)(trakBox);
154
+ if (!stblBox || stblBox.type !== 'regular-box') {
155
+ return null;
156
+ }
157
+ const stssBox = stblBox.children.find((b) => b.type === 'stss-box');
158
+ return stssBox;
159
+ };
160
+ exports.getStssBox = getStssBox;
161
+ const getTfdtBox = (segment) => {
162
+ if (segment.type !== 'regular-box' || segment.boxType !== 'traf') {
163
+ throw new Error('Expected traf-box');
164
+ }
165
+ const tfhdBox = segment.children.find((c) => c.type === 'tfdt-box');
166
+ if (!tfhdBox || tfhdBox.type !== 'tfdt-box') {
167
+ throw new Error('Expected tfhd-box');
168
+ }
169
+ return tfhdBox;
170
+ };
171
+ exports.getTfdtBox = getTfdtBox;
172
+ const getTfhdBox = (segment) => {
173
+ if (segment.type !== 'regular-box' || segment.boxType !== 'traf') {
174
+ throw new Error('Expected traf-box');
175
+ }
176
+ const tfhdBox = segment.children.find((c) => c.type === 'tfhd-box');
177
+ if (!tfhdBox || tfhdBox.type !== 'tfhd-box') {
178
+ throw new Error('Expected tfhd-box');
179
+ }
180
+ return tfhdBox;
181
+ };
182
+ exports.getTfhdBox = getTfhdBox;
183
+ const getTrunBoxes = (segment) => {
184
+ if (segment.type !== 'regular-box' || segment.boxType !== 'traf') {
185
+ throw new Error('Expected traf-box');
186
+ }
187
+ const trunBoxes = segment.children.filter((c) => c.type === 'trun-box');
188
+ return trunBoxes;
189
+ };
190
+ exports.getTrunBoxes = getTrunBoxes;
191
+ const hasSkippedMdatProcessing = (anySegment) => {
192
+ const mdat = anySegment.find((b) => b.type === 'mdat-box');
193
+ if (!mdat) {
194
+ return {
195
+ skipped: false,
196
+ };
197
+ }
198
+ if (mdat.type !== 'mdat-box') {
199
+ throw new Error('Expected mdat-box');
200
+ }
201
+ if (mdat.samplesProcessed) {
202
+ return {
203
+ skipped: false,
204
+ };
205
+ }
206
+ return {
207
+ skipped: true,
208
+ fileOffset: mdat.fileOffset,
209
+ };
210
+ };
211
+ exports.hasSkippedMdatProcessing = hasSkippedMdatProcessing;
@@ -0,0 +1,4 @@
1
+ import type { VideoTrackColorParams } from '../../get-tracks';
2
+ import type { ColourSegment } from './segments/all-segments';
3
+ export declare const parseColorSegment: (colourSegment: ColourSegment) => VideoTrackColorParams;
4
+ export declare const makeMatroskaColorBytes: ({ transferCharacteristics, matrixCoefficients, primaries, fullRange, }: VideoTrackColorParams) => import("./segments/all-segments").BytesAndOffset;
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeMatroskaColorBytes = exports.parseColorSegment = void 0;
4
+ const make_header_1 = require("./make-header");
5
+ const traversal_1 = require("./traversal");
6
+ const parseColorSegment = (colourSegment) => {
7
+ const transferCharacteristics = (0, traversal_1.getTransferCharacteristicsSegment)(colourSegment);
8
+ const matrixCoefficients = (0, traversal_1.getMatrixCoefficientsSegment)(colourSegment);
9
+ const primaries = (0, traversal_1.getPrimariesSegment)(colourSegment);
10
+ const range = (0, traversal_1.getRangeSegment)(colourSegment);
11
+ return {
12
+ transferCharacteristics: transferCharacteristics
13
+ ? transferCharacteristics.value.value === 1
14
+ ? 'bt709'
15
+ : transferCharacteristics.value.value === 6
16
+ ? 'smpte170m'
17
+ : transferCharacteristics.value.value === 13
18
+ ? 'iec61966-2-1'
19
+ : null
20
+ : null,
21
+ matrixCoefficients: matrixCoefficients
22
+ ? matrixCoefficients.value.value === 1
23
+ ? 'bt709'
24
+ : matrixCoefficients.value.value === 6
25
+ ? 'smpte170m'
26
+ : matrixCoefficients.value.value === 5
27
+ ? 'bt470bg'
28
+ : null
29
+ : null,
30
+ primaries: primaries
31
+ ? primaries.value.value === 1
32
+ ? 'bt709'
33
+ : primaries.value.value === 6
34
+ ? 'smpte170m'
35
+ : primaries.value.value === 5
36
+ ? 'bt470bg'
37
+ : null
38
+ : null,
39
+ fullRange: (transferCharacteristics === null || transferCharacteristics === void 0 ? void 0 : transferCharacteristics.value.value) && (matrixCoefficients === null || matrixCoefficients === void 0 ? void 0 : matrixCoefficients.value.value)
40
+ ? null
41
+ : range
42
+ ? Boolean(range === null || range === void 0 ? void 0 : range.value.value)
43
+ : null,
44
+ };
45
+ };
46
+ exports.parseColorSegment = parseColorSegment;
47
+ const makeMatroskaColorBytes = ({ transferCharacteristics, matrixCoefficients, primaries, fullRange, }) => {
48
+ const rangeValue = transferCharacteristics && matrixCoefficients
49
+ ? 3
50
+ : fullRange === true
51
+ ? 2
52
+ : fullRange === false
53
+ ? 1
54
+ : 0;
55
+ // https://datatracker.ietf.org/doc/draft-ietf-cellar-matroska/
56
+ // 5.1.4.1.28.27
57
+ const primariesValue = primaries === 'bt709'
58
+ ? 1
59
+ : primaries === 'smpte170m'
60
+ ? 6
61
+ : primaries === 'bt470bg'
62
+ ? 5
63
+ : 2;
64
+ const transferChracteristicsValue = transferCharacteristics === 'bt709'
65
+ ? 1
66
+ : transferCharacteristics === 'smpte170m'
67
+ ? 6
68
+ : transferCharacteristics === 'iec61966-2-1'
69
+ ? 13
70
+ : 2;
71
+ if (matrixCoefficients === 'rgb') {
72
+ throw new Error('Cannot encode Matroska in RGB');
73
+ }
74
+ const matrixCoefficientsValue = matrixCoefficients === 'bt709'
75
+ ? 1
76
+ : matrixCoefficients === 'bt470bg'
77
+ ? 5
78
+ : matrixCoefficients === 'smpte170m'
79
+ ? 6
80
+ : 2;
81
+ return (0, make_header_1.makeMatroskaBytes)({
82
+ type: 'Colour',
83
+ minVintWidth: null,
84
+ value: [
85
+ {
86
+ type: 'TransferCharacteristics',
87
+ value: {
88
+ value: transferChracteristicsValue,
89
+ byteLength: null,
90
+ },
91
+ minVintWidth: null,
92
+ },
93
+ {
94
+ type: 'MatrixCoefficients',
95
+ value: {
96
+ value: matrixCoefficientsValue,
97
+ byteLength: null,
98
+ },
99
+ minVintWidth: null,
100
+ },
101
+ {
102
+ type: 'Primaries',
103
+ value: {
104
+ value: primariesValue,
105
+ byteLength: null,
106
+ },
107
+ minVintWidth: null,
108
+ },
109
+ {
110
+ type: 'Range',
111
+ value: {
112
+ value: rangeValue,
113
+ byteLength: null,
114
+ },
115
+ minVintWidth: null,
116
+ },
117
+ ],
118
+ });
119
+ };
120
+ exports.makeMatroskaColorBytes = makeMatroskaColorBytes;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getAudioDescription = void 0;
4
4
  const buffer_iterator_1 = require("../../buffer-iterator");
5
- const traversal_1 = require("../../traversal");
5
+ const traversal_1 = require("./traversal");
6
6
  const getAudioDescription = (track) => {
7
7
  const codec = (0, traversal_1.getCodecSegment)(track);
8
8
  if (!codec || codec.value !== 'A_VORBIS') {
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getTracksFromMatroska = void 0;
4
- const traversal_1 = require("../../traversal");
5
- const get_track_1 = require("./get-track");
4
+ const make_track_1 = require("./make-track");
5
+ const traversal_1 = require("./traversal");
6
6
  const getTracksFromMatroska = (segment, timescale) => {
7
7
  const tracksSegment = (0, traversal_1.getTracksSegment)(segment);
8
8
  if (!tracksSegment) {
@@ -16,7 +16,7 @@ const getTracksFromMatroska = (segment, timescale) => {
16
16
  if (trackEntrySegment.type !== 'TrackEntry') {
17
17
  throw new Error('Expected track entry segment');
18
18
  }
19
- const track = (0, get_track_1.getTrack)({
19
+ const track = (0, make_track_1.getTrack)({
20
20
  track: trackEntrySegment,
21
21
  timescale,
22
22
  });
@@ -10,7 +10,7 @@ const getSampleFromBlock = (ebml, parserContext, offset) => {
10
10
  if (trackNumber === null) {
11
11
  throw new Error('Not enough data to get track number, should not happen');
12
12
  }
13
- const timecodeRelativeToCluster = iterator.getUint16();
13
+ const timecodeRelativeToCluster = iterator.getInt16();
14
14
  const { keyframe } = (0, block_simple_block_flags_1.parseBlockFlags)(iterator, ebml.type === 'SimpleBlock'
15
15
  ? all_segments_1.matroskaElements.SimpleBlock
16
16
  : all_segments_1.matroskaElements.Block);
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getTrack = void 0;
4
4
  const buffer_iterator_1 = require("../../buffer-iterator");
5
5
  const make_hvc1_codec_strings_1 = require("../../make-hvc1-codec-strings");
6
- const traversal_1 = require("../../traversal");
7
6
  const av1_codec_private_1 = require("./av1-codec-private");
8
7
  const description_1 = require("./description");
9
8
  const track_entry_1 = require("./segments/track-entry");
9
+ const traversal_1 = require("./traversal");
10
10
  const getDescription = (track) => {
11
11
  const codec = (0, traversal_1.getCodecSegment)(track);
12
12
  if (!codec) {
@@ -128,6 +128,7 @@ const getTrack = ({ timescale, track, }) => {
128
128
  const displayHeight = (0, traversal_1.getDisplayHeightSegment)(track);
129
129
  const displayWidth = (0, traversal_1.getDisplayWidthSegment)(track);
130
130
  const codec = (0, traversal_1.getCodecSegment)(track);
131
+ const codecPrivate = (0, traversal_1.getPrivateData)(track);
131
132
  if (!codec) {
132
133
  return null;
133
134
  }
@@ -160,11 +161,24 @@ const getTrack = ({ timescale, track, }) => {
160
161
  : width.value.value,
161
162
  rotation: 0,
162
163
  trakBox: null,
164
+ codecPrivate,
165
+ // TODO: Parse colors
166
+ color: {
167
+ // TODO: Set transferCharacteristics
168
+ transferCharacteristics: null,
169
+ // TODO matrixCoefficients
170
+ matrixCoefficients: null,
171
+ // TODO primaries
172
+ primaries: null,
173
+ // TODO fullRange
174
+ fullRange: null,
175
+ },
163
176
  };
164
177
  }
165
178
  if ((0, track_entry_1.trackTypeToString)(trackType.value.value) === 'audio') {
166
179
  const sampleRate = (0, traversal_1.getSampleRate)(track);
167
180
  const numberOfChannels = (0, traversal_1.getNumberOfChannels)(track);
181
+ const codecPrivate = (0, traversal_1.getPrivateData)(track);
168
182
  if (sampleRate === null) {
169
183
  throw new Error('Could not find sample rate or number of channels');
170
184
  }
@@ -177,6 +191,7 @@ const getTrack = ({ timescale, track, }) => {
177
191
  sampleRate,
178
192
  description: (0, description_1.getAudioDescription)(track),
179
193
  trakBox: null,
194
+ codecPrivate,
180
195
  };
181
196
  }
182
197
  return null;
@@ -0,0 +1,9 @@
1
+ import type { AudioTrack, MediaParserAudioCodec, VideoTrack } from '../../get-tracks';
2
+ import type { TrackEntry } from './segments/all-segments';
3
+ export declare const getMatroskaAudioCodecWithoutConfigString: ({ track, }: {
4
+ track: TrackEntry;
5
+ }) => MediaParserAudioCodec;
6
+ export declare const getTrack: ({ timescale, track, }: {
7
+ timescale: number;
8
+ track: TrackEntry;
9
+ }) => VideoTrack | AudioTrack | null;