@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.
- package/dist/add-new-matroska-tracks.d.ts +8 -0
- package/dist/add-new-matroska-tracks.js +14 -0
- package/dist/av1-codec-string.d.ts +3 -0
- package/dist/av1-codec-string.js +91 -0
- package/dist/boxes/iso-base-media/esds/decoder-specific-config.d.ts +14 -0
- package/dist/boxes/iso-base-media/esds/decoder-specific-config.js +38 -0
- package/dist/boxes/iso-base-media/esds/esds-descriptors.d.ts +8 -0
- package/dist/boxes/iso-base-media/esds/esds-descriptors.js +22 -2
- package/dist/boxes/iso-base-media/make-track.d.ts +3 -0
- package/dist/boxes/iso-base-media/make-track.js +112 -0
- package/dist/boxes/iso-base-media/mdat/mdat.d.ts +16 -0
- package/dist/boxes/iso-base-media/mdat/mdat.js +97 -0
- package/dist/boxes/iso-base-media/moov/moov.d.ts +4 -2
- package/dist/boxes/iso-base-media/moov/moov.js +4 -2
- package/dist/boxes/iso-base-media/mvhd.js +7 -1
- package/dist/boxes/iso-base-media/process-box.d.ts +20 -3
- package/dist/boxes/iso-base-media/process-box.js +356 -18
- package/dist/boxes/iso-base-media/stsd/av1c.d.ts +9 -0
- package/dist/boxes/iso-base-media/stsd/av1c.js +10 -0
- package/dist/boxes/iso-base-media/stsd/avcc-hvcc.d.ts +20 -0
- package/dist/boxes/iso-base-media/stsd/avcc-hvcc.js +73 -0
- package/dist/boxes/iso-base-media/stsd/avcc.d.ts +10 -0
- package/dist/boxes/iso-base-media/stsd/avcc.js +21 -0
- package/dist/boxes/iso-base-media/stsd/colr.d.ts +11 -0
- package/dist/boxes/iso-base-media/stsd/colr.js +35 -0
- package/dist/boxes/iso-base-media/stsd/ctts.d.ts +19 -0
- package/dist/boxes/iso-base-media/stsd/ctts.js +30 -0
- package/dist/boxes/iso-base-media/stsd/hvcc.d.ts +11 -0
- package/dist/boxes/iso-base-media/stsd/hvcc.js +17 -0
- package/dist/boxes/iso-base-media/stsd/keys.js +1 -0
- package/dist/boxes/iso-base-media/stsd/mebx.d.ts +4 -2
- package/dist/boxes/iso-base-media/stsd/mebx.js +4 -2
- package/dist/boxes/iso-base-media/stsd/pasp.d.ts +12 -0
- package/dist/boxes/iso-base-media/stsd/pasp.js +17 -0
- package/dist/boxes/iso-base-media/stsd/samples.d.ts +12 -5
- package/dist/boxes/iso-base-media/stsd/samples.js +27 -10
- package/dist/boxes/iso-base-media/stsd/stco.d.ts +14 -0
- package/dist/boxes/iso-base-media/stsd/stco.js +30 -0
- package/dist/boxes/iso-base-media/stsd/stsc.d.ts +19 -0
- package/dist/boxes/iso-base-media/stsd/stsc.js +34 -0
- package/dist/boxes/iso-base-media/stsd/stsd.d.ts +4 -2
- package/dist/boxes/iso-base-media/stsd/stsd.js +6 -2
- package/dist/boxes/iso-base-media/stsd/stss.d.ts +13 -0
- package/dist/boxes/iso-base-media/stsd/stss.js +28 -0
- package/dist/boxes/iso-base-media/stsd/stsz.d.ts +21 -0
- package/dist/boxes/iso-base-media/stsd/stsz.js +44 -0
- package/dist/boxes/iso-base-media/stsd/stts.d.ts +15 -0
- package/dist/boxes/iso-base-media/stsd/stts.js +35 -0
- package/dist/boxes/iso-base-media/tkhd.d.ts +3 -0
- package/dist/boxes/iso-base-media/tkhd.js +41 -14
- package/dist/boxes/iso-base-media/trak/trak.d.ts +4 -2
- package/dist/boxes/iso-base-media/trak/trak.js +4 -2
- package/dist/boxes/iso-base-media/void-box.d.ts +4 -0
- package/dist/boxes/iso-base-media/void-box.js +2 -0
- package/dist/boxes/webm/allowed-partial-segments.d.ts +1 -0
- package/dist/boxes/webm/allowed-partial-segments.js +4 -0
- package/dist/boxes/webm/av1-codec-private.d.ts +2 -0
- package/dist/boxes/webm/av1-codec-private.js +95 -0
- package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.d.ts +14 -0
- package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.js +67 -0
- package/dist/boxes/webm/bitstream/av1/bitstream-frame.d.ts +11 -0
- package/dist/boxes/webm/bitstream/av1/bitstream-frame.js +14 -0
- package/dist/boxes/webm/bitstream/av1/chroma-sample-position.d.ts +6 -0
- package/dist/boxes/webm/bitstream/av1/chroma-sample-position.js +9 -0
- package/dist/boxes/webm/bitstream/av1/color-config.d.ts +16 -0
- package/dist/boxes/webm/bitstream/av1/color-config.js +103 -0
- package/dist/boxes/webm/bitstream/av1/color-primaries.d.ts +14 -0
- package/dist/boxes/webm/bitstream/av1/color-primaries.js +17 -0
- package/dist/boxes/webm/bitstream/av1/decoder-model-info.d.ts +9 -0
- package/dist/boxes/webm/bitstream/av1/decoder-model-info.js +17 -0
- package/dist/boxes/webm/bitstream/av1/frame.d.ts +0 -0
- package/dist/boxes/webm/bitstream/av1/frame.js +1 -0
- package/dist/boxes/webm/bitstream/av1/header-segment.d.ts +51 -0
- package/dist/boxes/webm/bitstream/av1/header-segment.js +183 -0
- package/dist/boxes/webm/bitstream/av1/matrix-coefficients.d.ts +17 -0
- package/dist/boxes/webm/bitstream/av1/matrix-coefficients.js +20 -0
- package/dist/boxes/webm/bitstream/av1/operating-parameters-info.d.ts +10 -0
- package/dist/boxes/webm/bitstream/av1/operating-parameters-info.js +15 -0
- package/dist/boxes/webm/bitstream/av1/temporal-point-info.d.ts +5 -0
- package/dist/boxes/webm/bitstream/av1/temporal-point-info.js +8 -0
- package/dist/boxes/webm/bitstream/av1/timing-info.d.ts +8 -0
- package/dist/boxes/webm/bitstream/av1/timing-info.js +20 -0
- package/dist/boxes/webm/bitstream/av1/transfer-characteristics.d.ts +21 -0
- package/dist/boxes/webm/bitstream/av1/transfer-characteristics.js +24 -0
- package/dist/boxes/webm/bitstream/av1/uvlc.d.ts +2 -0
- package/dist/boxes/webm/bitstream/av1/uvlc.js +20 -0
- package/dist/boxes/webm/bitstream/av1.d.ts +20 -0
- package/dist/boxes/webm/bitstream/av1.js +118 -0
- package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.d.ts +0 -0
- package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.js +1 -0
- package/dist/boxes/webm/description.d.ts +2 -0
- package/dist/boxes/webm/description.js +83 -0
- package/dist/boxes/webm/get-ready-tracks.d.ts +3 -0
- package/dist/boxes/webm/get-ready-tracks.js +29 -0
- package/dist/boxes/webm/get-track.d.ts +6 -0
- package/dist/boxes/webm/get-track.js +183 -0
- package/dist/boxes/webm/parse-webm-header.d.ts +2 -1
- package/dist/boxes/webm/parse-webm-header.js +2 -2
- package/dist/boxes/webm/segments/all-segments.d.ts +269 -0
- package/dist/boxes/webm/segments/all-segments.js +277 -0
- package/dist/boxes/webm/segments/duration.d.ts +1 -1
- package/dist/boxes/webm/segments/duration.js +13 -9
- package/dist/boxes/webm/segments/info.d.ts +2 -1
- package/dist/boxes/webm/segments/info.js +12 -4
- package/dist/boxes/webm/segments/main.d.ts +0 -2
- package/dist/boxes/webm/segments/main.js +0 -11
- package/dist/boxes/webm/segments/muxing.d.ts +1 -1
- package/dist/boxes/webm/segments/muxing.js +1 -2
- package/dist/boxes/webm/segments/parse-children.d.ts +11 -1
- package/dist/boxes/webm/segments/parse-children.js +82 -6
- package/dist/boxes/webm/segments/seek-head.d.ts +2 -1
- package/dist/boxes/webm/segments/seek-head.js +12 -3
- package/dist/boxes/webm/segments/seek-position.d.ts +1 -1
- package/dist/boxes/webm/segments/seek-position.js +1 -2
- package/dist/boxes/webm/segments/seek.d.ts +7 -2
- package/dist/boxes/webm/segments/seek.js +22 -9
- package/dist/boxes/webm/segments/track-entry.d.ts +102 -22
- package/dist/boxes/webm/segments/track-entry.js +269 -57
- package/dist/boxes/webm/segments/tracks.d.ts +2 -1
- package/dist/boxes/webm/segments/tracks.js +12 -4
- package/dist/boxes/webm/segments/void.d.ts +1 -1
- package/dist/boxes/webm/segments/void.js +1 -2
- package/dist/boxes/webm/segments/writing.d.ts +1 -1
- package/dist/boxes/webm/segments/writing.js +1 -2
- package/dist/boxes/webm/segments.d.ts +8 -4
- package/dist/boxes/webm/segments.js +176 -40
- package/dist/boxes/webm/traversal.d.ts +7 -0
- package/dist/boxes/webm/traversal.js +25 -0
- package/dist/buffer-iterator.d.ts +16 -1
- package/dist/buffer-iterator.js +124 -41
- package/dist/combine-uint8array.d.ts +1 -0
- package/dist/combine-uint8array.js +13 -0
- package/dist/from-fetch.d.ts +2 -0
- package/dist/from-fetch.js +54 -0
- package/dist/from-node.js +12 -2
- package/dist/from-web-file.d.ts +2 -0
- package/dist/from-web-file.js +34 -0
- package/dist/get-audio-codec.d.ts +19 -0
- package/dist/get-audio-codec.js +153 -60
- package/dist/get-dimensions.d.ts +8 -2
- package/dist/get-dimensions.js +13 -91
- package/dist/get-duration.js +4 -7
- package/dist/get-fps.d.ts +4 -3
- package/dist/get-fps.js +17 -116
- package/dist/get-sample-aspect-ratio.d.ts +37 -0
- package/dist/get-sample-aspect-ratio.js +137 -0
- package/dist/get-sample-positions.d.ts +22 -0
- package/dist/get-sample-positions.js +54 -0
- package/dist/get-tracks.d.ts +49 -0
- package/dist/get-tracks.js +84 -0
- package/dist/get-video-codec.d.ts +2 -0
- package/dist/get-video-codec.js +47 -31
- package/dist/has-all-info.d.ts +2 -1
- package/dist/has-all-info.js +14 -5
- package/dist/index.d.ts +1 -0
- package/dist/make-hvc1-codec-strings.d.ts +2 -0
- package/dist/make-hvc1-codec-strings.js +47 -0
- package/dist/options.d.ts +26 -4
- package/dist/parse-media.js +76 -20
- package/dist/parse-result.d.ts +17 -5
- package/dist/parse-video.d.ts +12 -2
- package/dist/parse-video.js +15 -6
- package/dist/parser-context.d.ts +8 -0
- package/dist/parser-context.js +2 -0
- package/dist/parser-state.d.ts +23 -0
- package/dist/parser-state.js +112 -0
- package/dist/reader.d.ts +2 -2
- package/dist/traversal.d.ts +56 -0
- package/dist/traversal.js +331 -0
- package/dist/understand-vorbis.d.ts +1 -0
- package/dist/understand-vorbis.js +12 -0
- package/dist/webcodec-sample-types.d.ts +21 -0
- package/dist/webcodec-sample-types.js +2 -0
- package/package.json +10 -2
- package/src/add-new-matroska-tracks.ts +23 -0
- package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +61 -0
- package/src/boxes/iso-base-media/esds/esds-descriptors.ts +33 -2
- package/src/boxes/iso-base-media/make-track.ts +157 -0
- package/src/boxes/iso-base-media/mdat/mdat.ts +131 -0
- package/src/boxes/iso-base-media/moov/moov.ts +8 -3
- package/src/boxes/iso-base-media/mvhd.ts +7 -1
- package/src/boxes/iso-base-media/process-box.ts +426 -21
- package/src/boxes/iso-base-media/stsd/av1c.ts +19 -0
- package/src/boxes/iso-base-media/stsd/avcc.ts +36 -0
- package/src/boxes/iso-base-media/stsd/colr.ts +49 -0
- package/src/boxes/iso-base-media/stsd/ctts.ts +55 -0
- package/src/boxes/iso-base-media/stsd/hvcc.ts +32 -0
- package/src/boxes/iso-base-media/stsd/keys.ts +2 -0
- package/src/boxes/iso-base-media/stsd/mebx.ts +8 -3
- package/src/boxes/iso-base-media/stsd/pasp.ts +32 -0
- package/src/boxes/iso-base-media/stsd/samples.ts +43 -16
- package/src/boxes/iso-base-media/stsd/stco.ts +50 -0
- package/src/boxes/iso-base-media/stsd/stsc.ts +61 -0
- package/src/boxes/iso-base-media/stsd/stsd.ts +10 -3
- package/src/boxes/iso-base-media/stsd/stss.ts +47 -0
- package/src/boxes/iso-base-media/stsd/stsz.ts +75 -0
- package/src/boxes/iso-base-media/tkhd.ts +63 -16
- package/src/boxes/iso-base-media/trak/trak.ts +8 -3
- package/src/boxes/iso-base-media/void-box.ts +4 -0
- package/src/boxes/webm/allowed-partial-segments.ts +1 -0
- package/src/boxes/webm/av1-codec-private.ts +113 -0
- package/src/boxes/webm/description.ts +101 -0
- package/src/boxes/webm/get-ready-tracks.ts +36 -0
- package/src/boxes/webm/get-track.ts +250 -0
- package/src/boxes/webm/parse-webm-header.ts +6 -2
- package/src/boxes/webm/segments/all-segments.ts +285 -0
- package/src/boxes/webm/segments/duration.ts +15 -8
- package/src/boxes/webm/segments/info.ts +18 -4
- package/src/boxes/webm/segments/main.ts +0 -13
- package/src/boxes/webm/segments/muxing.ts +1 -1
- package/src/boxes/webm/segments/parse-children.ts +132 -9
- package/src/boxes/webm/segments/seek-head.ts +17 -4
- package/src/boxes/webm/segments/seek-position.ts +1 -2
- package/src/boxes/webm/segments/seek.ts +31 -9
- package/src/boxes/webm/segments/track-entry.ts +475 -65
- package/src/boxes/webm/segments/tracks.ts +17 -7
- package/src/boxes/webm/segments/void.ts +4 -2
- package/src/boxes/webm/segments/writing.ts +1 -1
- package/src/boxes/webm/segments.ts +266 -42
- package/src/boxes/webm/traversal.ts +32 -0
- package/src/buffer-iterator.ts +155 -40
- package/src/combine-uint8array.ts +13 -0
- package/src/{from-web.ts → from-fetch.ts} +18 -7
- package/src/from-node.ts +15 -2
- package/src/from-web-file.ts +39 -0
- package/src/get-audio-codec.ts +213 -84
- package/src/get-dimensions.ts +25 -132
- package/src/get-duration.ts +4 -8
- package/src/get-fps.ts +27 -172
- package/src/get-sample-aspect-ratio.ts +204 -0
- package/src/get-sample-positions.ts +93 -0
- package/src/get-tracks.ts +147 -0
- package/src/get-video-codec.ts +62 -47
- package/src/has-all-info.ts +35 -5
- package/src/index.ts +8 -0
- package/src/make-hvc1-codec-strings.ts +55 -0
- package/src/options.ts +48 -9
- package/src/parse-media.ts +112 -25
- package/src/parse-result.ts +29 -4
- package/src/parse-video.ts +32 -7
- package/src/parser-context.ts +9 -0
- package/src/parser-state.ts +151 -0
- package/src/reader.ts +3 -3
- package/src/test/aspect-ratio.test.ts +42 -0
- package/src/test/av1.test.ts +108 -0
- package/src/test/duration.test.ts +5 -21
- package/src/test/matroska.test.ts +350 -31
- package/src/test/mvhd.test.ts +6 -1
- package/src/test/parse-esds.test.ts +29 -6
- package/src/test/parse-stco.test.ts +59 -0
- package/src/test/parse-stsc.test.ts +104 -0
- package/src/test/parse-stsz.test.ts +57 -0
- package/src/test/parse-stts.test.ts +1 -1
- package/src/test/parse-video.test.ts +23 -35
- package/src/test/parse-webm.test.ts +5 -5
- package/src/test/stream-local.test.ts +543 -47
- package/src/test/stream-remote.test.ts +15 -13
- package/src/test/stream-samples.test.ts +259 -0
- package/src/test/stsd.test.ts +60 -8
- package/src/test/tkhd.test.ts +4 -1
- package/src/traversal.ts +496 -0
- package/src/webcodec-sample-types.ts +30 -0
- package/tsconfig.json +5 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/boxes.json +0 -1
- /package/src/boxes/iso-base-media/{stts → stsd}/stts.ts +0 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseAv1BitstreamHeaderSegment = void 0;
|
|
4
|
+
const color_config_1 = require("./color-config");
|
|
5
|
+
const decoder_model_info_1 = require("./decoder-model-info");
|
|
6
|
+
const operating_parameters_info_1 = require("./operating-parameters-info");
|
|
7
|
+
const timing_info_1 = require("./timing-info");
|
|
8
|
+
const makeSeqLevelIdx = () => {
|
|
9
|
+
return {
|
|
10
|
+
operating_point_idc: 0,
|
|
11
|
+
seq_level_idx: 0,
|
|
12
|
+
seq_tier: 0,
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
const SELECT_SCREEN_CONTENT_TOOLS = 2;
|
|
16
|
+
const SELECT_INTEGER_MV = 2;
|
|
17
|
+
const parseAv1BitstreamHeaderSegment = (stream) => {
|
|
18
|
+
// https://aomediacodec.github.io/av1-spec/av1-spec.pdf
|
|
19
|
+
// Page 41
|
|
20
|
+
const seq_profile = stream.getBits(3);
|
|
21
|
+
const still_picture = Boolean(stream.getBits(1));
|
|
22
|
+
const reduced_still_picture_header = Boolean(stream.getBits(1));
|
|
23
|
+
let timing_info_present_flag = false;
|
|
24
|
+
let decoder_model_info_present_flag = false;
|
|
25
|
+
let initial_display_delay_present_flag = false;
|
|
26
|
+
let operating_points_cnt_minus_1 = 1;
|
|
27
|
+
const seq_level = [];
|
|
28
|
+
let timing_info = null;
|
|
29
|
+
let decoder_model_info = null;
|
|
30
|
+
const operating_parameters_info = [];
|
|
31
|
+
const initial_display_delay_minus_1 = [];
|
|
32
|
+
if (reduced_still_picture_header) {
|
|
33
|
+
timing_info_present_flag = false;
|
|
34
|
+
decoder_model_info_present_flag = false;
|
|
35
|
+
initial_display_delay_present_flag = false;
|
|
36
|
+
operating_points_cnt_minus_1 = 0;
|
|
37
|
+
seq_level[0] = makeSeqLevelIdx();
|
|
38
|
+
seq_level[0].seq_level_idx = stream.getBits(5);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
timing_info_present_flag = Boolean(stream.getBits(1));
|
|
42
|
+
if (timing_info_present_flag) {
|
|
43
|
+
timing_info = (0, timing_info_1.getTimingInfo)(stream);
|
|
44
|
+
decoder_model_info_present_flag = Boolean(stream.getBits(1));
|
|
45
|
+
if (decoder_model_info_present_flag) {
|
|
46
|
+
decoder_model_info = (0, decoder_model_info_1.parseDecoderModelInfo)(stream);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
initial_display_delay_present_flag = Boolean(stream.getBits(1));
|
|
50
|
+
operating_points_cnt_minus_1 = stream.getBits(5);
|
|
51
|
+
for (let i = 0; i <= operating_points_cnt_minus_1; i++) {
|
|
52
|
+
seq_level[i] = makeSeqLevelIdx();
|
|
53
|
+
seq_level[i].operating_point_idc = stream.getBits(12);
|
|
54
|
+
seq_level[i].seq_level_idx = stream.getBits(5);
|
|
55
|
+
if (seq_level[i].seq_level_idx > 7) {
|
|
56
|
+
seq_level[i].seq_tier = stream.getBits(1);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
seq_level[i].seq_tier = 0;
|
|
60
|
+
}
|
|
61
|
+
if (decoder_model_info) {
|
|
62
|
+
const decoder_model_present_for_this_op = Boolean(stream.getBits(1));
|
|
63
|
+
if (decoder_model_present_for_this_op) {
|
|
64
|
+
operating_parameters_info.push((0, operating_parameters_info_1.parseOperatingParametersInfo)({
|
|
65
|
+
stream,
|
|
66
|
+
buffer_delay_length_minus_1: decoder_model_info.buffer_delay_length_minus_1,
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (initial_display_delay_present_flag) {
|
|
71
|
+
const initial_display_delay_present_for_this_op = Boolean(stream.getBits(1));
|
|
72
|
+
if (initial_display_delay_present_for_this_op) {
|
|
73
|
+
initial_display_delay_minus_1.push(stream.getBits(4));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const frame_width_bits_minus_1 = stream.getBits(4);
|
|
79
|
+
const frame_height_bits_minus_1 = stream.getBits(4);
|
|
80
|
+
const n = frame_width_bits_minus_1 + 1;
|
|
81
|
+
const max_frame_width_minus_1 = stream.getBits(n);
|
|
82
|
+
const m = frame_height_bits_minus_1 + 1;
|
|
83
|
+
const max_frame_height_minus_1 = stream.getBits(m);
|
|
84
|
+
let frame_id_numbers_present_flag = false;
|
|
85
|
+
if (!reduced_still_picture_header) {
|
|
86
|
+
frame_id_numbers_present_flag = Boolean(stream.getBits(1));
|
|
87
|
+
}
|
|
88
|
+
let delta_frame_id_length_minus_2 = null;
|
|
89
|
+
let additional_frame_id_length_minus_1 = null;
|
|
90
|
+
if (frame_id_numbers_present_flag) {
|
|
91
|
+
delta_frame_id_length_minus_2 = stream.getBits(4);
|
|
92
|
+
additional_frame_id_length_minus_1 = stream.getBits(3);
|
|
93
|
+
}
|
|
94
|
+
const use_128x128_superblock = Boolean(stream.getBits(1));
|
|
95
|
+
const enable_filter_intra = Boolean(stream.getBits(1));
|
|
96
|
+
const enable_intra_edge_filter = Boolean(stream.getBits(1));
|
|
97
|
+
let enable_interintra_compound = 0;
|
|
98
|
+
let enable_masked_compound = 0;
|
|
99
|
+
let enable_warped_motion = 0;
|
|
100
|
+
let enable_dual_filter = 0;
|
|
101
|
+
let enable_order_hint = 0;
|
|
102
|
+
let enable_jnt_comp = false;
|
|
103
|
+
let enable_ref_frame_mvs = false;
|
|
104
|
+
let seq_force_screen_content_tools = SELECT_SCREEN_CONTENT_TOOLS;
|
|
105
|
+
let seq_force_integer_mv = SELECT_INTEGER_MV;
|
|
106
|
+
let orderHintBits = 0;
|
|
107
|
+
if (!reduced_still_picture_header) {
|
|
108
|
+
enable_interintra_compound = stream.getBits(1);
|
|
109
|
+
enable_masked_compound = stream.getBits(1);
|
|
110
|
+
enable_warped_motion = stream.getBits(1);
|
|
111
|
+
enable_dual_filter = stream.getBits(1);
|
|
112
|
+
enable_order_hint = stream.getBits(1);
|
|
113
|
+
enable_jnt_comp = enable_order_hint ? Boolean(stream.getBits(1)) : false;
|
|
114
|
+
enable_ref_frame_mvs = enable_order_hint
|
|
115
|
+
? Boolean(stream.getBits(1))
|
|
116
|
+
: false;
|
|
117
|
+
const seq_choose_screen_content_tools = stream.getBits(1);
|
|
118
|
+
seq_force_screen_content_tools = seq_choose_screen_content_tools
|
|
119
|
+
? SELECT_SCREEN_CONTENT_TOOLS
|
|
120
|
+
: stream.getBits(1);
|
|
121
|
+
if (seq_choose_screen_content_tools > 0) {
|
|
122
|
+
const seq_choose_integer_mv = stream.getBits(1);
|
|
123
|
+
seq_force_integer_mv = seq_choose_integer_mv
|
|
124
|
+
? SELECT_INTEGER_MV
|
|
125
|
+
: stream.getBits(1);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
seq_force_integer_mv = SELECT_INTEGER_MV;
|
|
129
|
+
}
|
|
130
|
+
if (enable_order_hint) {
|
|
131
|
+
const order_hint_bits_minus_1 = stream.getBits(3);
|
|
132
|
+
orderHintBits = order_hint_bits_minus_1 + 1;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
orderHintBits = 0;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
const enable_superres = Boolean(stream.getBits(1));
|
|
139
|
+
const enable_cdef = Boolean(stream.getBits(1));
|
|
140
|
+
const enable_restoration = Boolean(stream.getBits(1));
|
|
141
|
+
const color_config = (0, color_config_1.getColorConfig)(stream, seq_profile);
|
|
142
|
+
const film_grain_params_present = Boolean(stream.getBits(1));
|
|
143
|
+
return {
|
|
144
|
+
type: 'av1-bitstream-header',
|
|
145
|
+
seq_profile,
|
|
146
|
+
still_picture,
|
|
147
|
+
reduced_still_picture_header,
|
|
148
|
+
timing_info_present_flag,
|
|
149
|
+
decoder_model_info_present_flag,
|
|
150
|
+
initial_display_delay_present_flag,
|
|
151
|
+
operating_points_cnt_minus_1,
|
|
152
|
+
seq_level,
|
|
153
|
+
timing_info,
|
|
154
|
+
decoder_model_info,
|
|
155
|
+
operating_parameters_info,
|
|
156
|
+
initial_display_delay_minus_1,
|
|
157
|
+
frame_width_bits_minus_1,
|
|
158
|
+
frame_height_bits_minus_1,
|
|
159
|
+
max_frame_width_minus_1,
|
|
160
|
+
max_frame_height_minus_1,
|
|
161
|
+
delta_frame_id_length_minus_2,
|
|
162
|
+
additional_frame_id_length_minus_1,
|
|
163
|
+
use_128x128_superblock,
|
|
164
|
+
enable_filter_intra,
|
|
165
|
+
enable_intra_edge_filter,
|
|
166
|
+
color_config,
|
|
167
|
+
film_grain_params_present,
|
|
168
|
+
enable_interintra_compound,
|
|
169
|
+
enable_masked_compound,
|
|
170
|
+
enable_warped_motion,
|
|
171
|
+
enable_order_hint,
|
|
172
|
+
enable_dual_filter,
|
|
173
|
+
enable_jnt_comp,
|
|
174
|
+
enable_ref_frame_mvs,
|
|
175
|
+
seq_force_screen_content_tools,
|
|
176
|
+
seq_force_integer_mv,
|
|
177
|
+
enable_superres,
|
|
178
|
+
enable_cdef,
|
|
179
|
+
enable_restoration,
|
|
180
|
+
orderHintBits,
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
exports.parseAv1BitstreamHeaderSegment = parseAv1BitstreamHeaderSegment;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const matrixCoefficients: {
|
|
2
|
+
MC_IDENTITY: number;
|
|
3
|
+
MC_BT_709: number;
|
|
4
|
+
MC_UNSPECIFIED: number;
|
|
5
|
+
MC_RESERVED_3: number;
|
|
6
|
+
MC_FCC: number;
|
|
7
|
+
MC_BT_470_B_G: number;
|
|
8
|
+
MC_BT_601: number;
|
|
9
|
+
MC_SMPTE_240: number;
|
|
10
|
+
MC_SMPTE_YCGCO: number;
|
|
11
|
+
MC_BT_2020_NCL: number;
|
|
12
|
+
MC_BT_2020_CL: number;
|
|
13
|
+
MC_SMPTE_2085: number;
|
|
14
|
+
MC_CHROMAT_NCL: number;
|
|
15
|
+
MC_CHROMAT_CL: number;
|
|
16
|
+
MC_ICTCP: number;
|
|
17
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.matrixCoefficients = void 0;
|
|
4
|
+
exports.matrixCoefficients = {
|
|
5
|
+
MC_IDENTITY: 0,
|
|
6
|
+
MC_BT_709: 1,
|
|
7
|
+
MC_UNSPECIFIED: 2,
|
|
8
|
+
MC_RESERVED_3: 3,
|
|
9
|
+
MC_FCC: 4,
|
|
10
|
+
MC_BT_470_B_G: 5,
|
|
11
|
+
MC_BT_601: 6,
|
|
12
|
+
MC_SMPTE_240: 7,
|
|
13
|
+
MC_SMPTE_YCGCO: 8,
|
|
14
|
+
MC_BT_2020_NCL: 9,
|
|
15
|
+
MC_BT_2020_CL: 10,
|
|
16
|
+
MC_SMPTE_2085: 11,
|
|
17
|
+
MC_CHROMAT_NCL: 12,
|
|
18
|
+
MC_CHROMAT_CL: 13,
|
|
19
|
+
MC_ICTCP: 14,
|
|
20
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { BufferIterator } from '../../../../buffer-iterator';
|
|
2
|
+
export type OperatingParametersInfo = {
|
|
3
|
+
decoder_buffer_delay: number;
|
|
4
|
+
encoder_buffer_delay: number;
|
|
5
|
+
low_delay_mode_flag: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare const parseOperatingParametersInfo: ({ stream, buffer_delay_length_minus_1, }: {
|
|
8
|
+
stream: BufferIterator;
|
|
9
|
+
buffer_delay_length_minus_1: number;
|
|
10
|
+
}) => OperatingParametersInfo;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseOperatingParametersInfo = void 0;
|
|
4
|
+
const parseOperatingParametersInfo = ({ stream, buffer_delay_length_minus_1, }) => {
|
|
5
|
+
const n = buffer_delay_length_minus_1 + 1;
|
|
6
|
+
const decoder_buffer_delay = stream.getBits(n);
|
|
7
|
+
const encoder_buffer_delay = stream.getBits(n);
|
|
8
|
+
const low_delay_mode_flag = Boolean(stream.getBits(1));
|
|
9
|
+
return {
|
|
10
|
+
decoder_buffer_delay,
|
|
11
|
+
encoder_buffer_delay,
|
|
12
|
+
low_delay_mode_flag,
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
exports.parseOperatingParametersInfo = parseOperatingParametersInfo;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTemporalPointInfo = void 0;
|
|
4
|
+
const getTemporalPointInfo = ({ stream, frame_presentation_time_length_minus_1, }) => {
|
|
5
|
+
const n = frame_presentation_time_length_minus_1 + 1;
|
|
6
|
+
return stream.getBits(n);
|
|
7
|
+
};
|
|
8
|
+
exports.getTemporalPointInfo = getTemporalPointInfo;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { BufferIterator } from '../../../../buffer-iterator';
|
|
2
|
+
export type TimingInfo = {
|
|
3
|
+
num_units_in_display_tick: number;
|
|
4
|
+
time_scale: number;
|
|
5
|
+
equal_picture_interval: boolean;
|
|
6
|
+
num_ticks_per_picture_minus_1: number;
|
|
7
|
+
};
|
|
8
|
+
export declare const getTimingInfo: (stream: BufferIterator) => TimingInfo;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTimingInfo = void 0;
|
|
4
|
+
const uvlc_1 = require("./uvlc");
|
|
5
|
+
const getTimingInfo = (stream) => {
|
|
6
|
+
const num_units_in_display_tick = stream.getBits(32);
|
|
7
|
+
const time_scale = stream.getBits(32);
|
|
8
|
+
const equal_picture_interval = Boolean(stream.getBits(1));
|
|
9
|
+
let num_ticks_per_picture_minus_1 = 0;
|
|
10
|
+
if (equal_picture_interval) {
|
|
11
|
+
num_ticks_per_picture_minus_1 = (0, uvlc_1.uvlc)(stream);
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
num_units_in_display_tick,
|
|
15
|
+
time_scale,
|
|
16
|
+
equal_picture_interval,
|
|
17
|
+
num_ticks_per_picture_minus_1,
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
exports.getTimingInfo = getTimingInfo;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const transferCharacteristics: {
|
|
2
|
+
TC_RESERVED_0: number;
|
|
3
|
+
TC_BT_709: number;
|
|
4
|
+
TC_UNSPECIFIED: number;
|
|
5
|
+
TC_RESERVED_3: number;
|
|
6
|
+
TC_BT_470_M: number;
|
|
7
|
+
TC_BT_470_B_G: number;
|
|
8
|
+
TC_BT_601: number;
|
|
9
|
+
TC_SMPTE_240: number;
|
|
10
|
+
TC_LINEAR: number;
|
|
11
|
+
TC_LOG_100: number;
|
|
12
|
+
TC_LOG_100_SQRT10: number;
|
|
13
|
+
TC_IEC_61966: number;
|
|
14
|
+
TC_BT_1361: number;
|
|
15
|
+
TC_SRGB: number;
|
|
16
|
+
TC_BT_2020_10_BIT: number;
|
|
17
|
+
TC_BT_2020_12_BIT: number;
|
|
18
|
+
TC_SMPTE_2084: number;
|
|
19
|
+
TC_SMPTE_428: number;
|
|
20
|
+
TC_HLG: number;
|
|
21
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.transferCharacteristics = void 0;
|
|
4
|
+
exports.transferCharacteristics = {
|
|
5
|
+
TC_RESERVED_0: 0,
|
|
6
|
+
TC_BT_709: 1,
|
|
7
|
+
TC_UNSPECIFIED: 2,
|
|
8
|
+
TC_RESERVED_3: 3,
|
|
9
|
+
TC_BT_470_M: 4,
|
|
10
|
+
TC_BT_470_B_G: 5,
|
|
11
|
+
TC_BT_601: 6,
|
|
12
|
+
TC_SMPTE_240: 7,
|
|
13
|
+
TC_LINEAR: 8,
|
|
14
|
+
TC_LOG_100: 9,
|
|
15
|
+
TC_LOG_100_SQRT10: 10,
|
|
16
|
+
TC_IEC_61966: 11,
|
|
17
|
+
TC_BT_1361: 12,
|
|
18
|
+
TC_SRGB: 13,
|
|
19
|
+
TC_BT_2020_10_BIT: 14,
|
|
20
|
+
TC_BT_2020_12_BIT: 15,
|
|
21
|
+
TC_SMPTE_2084: 16,
|
|
22
|
+
TC_SMPTE_428: 17,
|
|
23
|
+
TC_HLG: 18,
|
|
24
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.uvlc = void 0;
|
|
4
|
+
const uvlc = (stream) => {
|
|
5
|
+
let leadingZeroBits = 0;
|
|
6
|
+
// eslint-disable-next-line no-constant-condition
|
|
7
|
+
while (true) {
|
|
8
|
+
const done = stream.getBits(1);
|
|
9
|
+
if (done) {
|
|
10
|
+
break;
|
|
11
|
+
}
|
|
12
|
+
leadingZeroBits++;
|
|
13
|
+
}
|
|
14
|
+
if (leadingZeroBits >= 32) {
|
|
15
|
+
return (1 << 32) - 1;
|
|
16
|
+
}
|
|
17
|
+
const value = stream.getBits(leadingZeroBits);
|
|
18
|
+
return value + (1 << leadingZeroBits) - 1;
|
|
19
|
+
};
|
|
20
|
+
exports.uvlc = uvlc;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { BufferIterator } from '../../../buffer-iterator';
|
|
2
|
+
import type { ParserContext } from '../../../parser-context';
|
|
3
|
+
import type { VideoSample } from '../../../webcodec-sample-types';
|
|
4
|
+
import { type Av1BitstreamHeaderSegment } from './av1/header-segment';
|
|
5
|
+
type Av1BitstreamUimplementedSegment = {
|
|
6
|
+
type: 'av1-bitstream-unimplemented';
|
|
7
|
+
};
|
|
8
|
+
export type Av1BitstreamSegment = Av1BitstreamHeaderSegment | Av1BitstreamUimplementedSegment;
|
|
9
|
+
export declare const av1Bitstream: ({ stream, length, onVideoSample, trackNumber, context, timecode, }: {
|
|
10
|
+
stream: BufferIterator;
|
|
11
|
+
length: number;
|
|
12
|
+
onVideoSample: (trackId: number, sample: VideoSample) => void;
|
|
13
|
+
trackNumber: number;
|
|
14
|
+
context: ParserContext;
|
|
15
|
+
timecode: number;
|
|
16
|
+
}) => {
|
|
17
|
+
discarded: boolean;
|
|
18
|
+
segment: Av1BitstreamSegment;
|
|
19
|
+
};
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.av1Bitstream = void 0;
|
|
4
|
+
const combine_uint8array_1 = require("../../../combine-uint8array");
|
|
5
|
+
const bitstream_frame_1 = require("./av1/bitstream-frame");
|
|
6
|
+
const header_segment_1 = require("./av1/header-segment");
|
|
7
|
+
const av1Bitstream = ({ stream, length, onVideoSample, trackNumber, context, timecode, }) => {
|
|
8
|
+
var _a, _b;
|
|
9
|
+
const address = stream.counter.getOffset();
|
|
10
|
+
stream.startReadingBits();
|
|
11
|
+
// log this to understand:
|
|
12
|
+
// (firstByte.toString(2).padStart(8, '0'));
|
|
13
|
+
// get bit 0
|
|
14
|
+
const obuForbiddenBit = stream.getBits(1);
|
|
15
|
+
if (obuForbiddenBit) {
|
|
16
|
+
throw new Error('obuForbiddenBit is not 0');
|
|
17
|
+
}
|
|
18
|
+
// get bits 1-3
|
|
19
|
+
const obuType = stream.getBits(4);
|
|
20
|
+
// get bit 4
|
|
21
|
+
const obuExtensionFlag = stream.getBits(1);
|
|
22
|
+
// get bit 5
|
|
23
|
+
const obuHasSizeField = stream.getBits(1);
|
|
24
|
+
// reserved bit
|
|
25
|
+
stream.getBits(1);
|
|
26
|
+
let size = null;
|
|
27
|
+
if (obuExtensionFlag) {
|
|
28
|
+
// extension
|
|
29
|
+
stream.getBits(6);
|
|
30
|
+
}
|
|
31
|
+
if (obuHasSizeField) {
|
|
32
|
+
// size
|
|
33
|
+
size = stream.leb128();
|
|
34
|
+
}
|
|
35
|
+
/*
|
|
36
|
+
console.log(
|
|
37
|
+
address.toString(16),
|
|
38
|
+
firstByte.toString(2).padStart(8, '0'),
|
|
39
|
+
obuForbiddenBit,
|
|
40
|
+
obuType,
|
|
41
|
+
obuExtensionFlag,
|
|
42
|
+
obuHasSizeField,
|
|
43
|
+
reservedBit,
|
|
44
|
+
size,
|
|
45
|
+
);
|
|
46
|
+
*/
|
|
47
|
+
const bytesReadSoFar = stream.counter.getOffset() - address;
|
|
48
|
+
const segment = obuType === 1
|
|
49
|
+
? (0, header_segment_1.parseAv1BitstreamHeaderSegment)(stream)
|
|
50
|
+
: {
|
|
51
|
+
type: 'av1-bitstream-unimplemented',
|
|
52
|
+
};
|
|
53
|
+
if (obuType === 6) {
|
|
54
|
+
const head = context.parserState.getAv1BitstreamHeaderSegment();
|
|
55
|
+
if (!head) {
|
|
56
|
+
throw new Error('Expected header segment');
|
|
57
|
+
}
|
|
58
|
+
const header = (0, bitstream_frame_1.parseAv1Frame)({
|
|
59
|
+
stream,
|
|
60
|
+
headerSegment: head.segment,
|
|
61
|
+
});
|
|
62
|
+
const bytesAdvanced = stream.counter.getOffset() - address;
|
|
63
|
+
stream.counter.decrement(bytesAdvanced);
|
|
64
|
+
if (size === null) {
|
|
65
|
+
throw new Error('Expected size in OBU');
|
|
66
|
+
}
|
|
67
|
+
const clusterTimestamp = context.parserState.getClusterTimestamp();
|
|
68
|
+
if (clusterTimestamp === null) {
|
|
69
|
+
throw new Error('Expected cluster timestamp');
|
|
70
|
+
}
|
|
71
|
+
const toSlice = size + bytesReadSoFar;
|
|
72
|
+
const frame = stream.getSlice(toSlice);
|
|
73
|
+
let extraBytes = null;
|
|
74
|
+
if (!context.parserState.getIsFirstAv1FrameRead()) {
|
|
75
|
+
context.parserState.setIsFirstAv1FrameRead();
|
|
76
|
+
extraBytes =
|
|
77
|
+
(_b = (_a = context.parserState.getAv1BitstreamHeaderSegment()) === null || _a === void 0 ? void 0 : _a.header) !== null && _b !== void 0 ? _b : null;
|
|
78
|
+
if (!extraBytes) {
|
|
79
|
+
throw new Error('Expected extra bytes');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
onVideoSample(trackNumber, {
|
|
83
|
+
data: (0, combine_uint8array_1.combineUint8Arrays)(extraBytes, frame),
|
|
84
|
+
timestamp: timecode + clusterTimestamp,
|
|
85
|
+
duration: undefined,
|
|
86
|
+
trackId: trackNumber,
|
|
87
|
+
cts: null,
|
|
88
|
+
dts: null,
|
|
89
|
+
type: header.header.frameType === 'key' ? 'key' : 'delta',
|
|
90
|
+
});
|
|
91
|
+
stream.stopReadingBits();
|
|
92
|
+
return {
|
|
93
|
+
discarded: true,
|
|
94
|
+
segment,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
stream.stopReadingBits();
|
|
98
|
+
if (size === null) {
|
|
99
|
+
return {
|
|
100
|
+
discarded: false,
|
|
101
|
+
segment,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
const end = stream.counter.getOffset();
|
|
105
|
+
const remaining = (size === null ? length : size + bytesReadSoFar) - (end - address);
|
|
106
|
+
if (remaining > 0) {
|
|
107
|
+
stream.discard(remaining);
|
|
108
|
+
}
|
|
109
|
+
const remainingNow = length - (stream.counter.getOffset() - address);
|
|
110
|
+
if (remainingNow > 0 && remainingNow <= 2) {
|
|
111
|
+
throw new Error('remainingNow > 0 && remainingNow <= 2');
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
discarded: Boolean(size),
|
|
115
|
+
segment,
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
exports.av1Bitstream = av1Bitstream;
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAudioDescription = void 0;
|
|
4
|
+
const buffer_iterator_1 = require("../../buffer-iterator");
|
|
5
|
+
const traversal_1 = require("../../traversal");
|
|
6
|
+
const getAudioDescription = (track) => {
|
|
7
|
+
const codec = (0, traversal_1.getCodecSegment)(track);
|
|
8
|
+
if (!codec || codec.codec !== 'A_VORBIS') {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
// how to parse vorbis private
|
|
12
|
+
// https://github.com/google/ExoPlayer/blob/dd430f7053a1a3958deea3ead6a0565150c06bfc/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java#L2466
|
|
13
|
+
const privateData = (0, traversal_1.getPrivateData)(track);
|
|
14
|
+
if (!privateData) {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
if (privateData[0] !== 2) {
|
|
18
|
+
throw new Error('Expected vorbis private data version 2');
|
|
19
|
+
}
|
|
20
|
+
let offset = 1;
|
|
21
|
+
let vorbisInfoLength = 0;
|
|
22
|
+
let vorbisSkipLength = 0;
|
|
23
|
+
while ((privateData[offset] & 0xff) === 0xff) {
|
|
24
|
+
vorbisInfoLength += 0xff;
|
|
25
|
+
offset++;
|
|
26
|
+
}
|
|
27
|
+
vorbisInfoLength += privateData[offset++] & 0xff;
|
|
28
|
+
while ((privateData[offset] & 0xff) === 0xff) {
|
|
29
|
+
vorbisSkipLength += 0xff;
|
|
30
|
+
offset++;
|
|
31
|
+
}
|
|
32
|
+
vorbisSkipLength += privateData[offset++] & 0xff;
|
|
33
|
+
if (privateData[offset] !== 0x01) {
|
|
34
|
+
throw new Error('Error parsing vorbis codec private');
|
|
35
|
+
}
|
|
36
|
+
const vorbisInfo = privateData.slice(offset, offset + vorbisInfoLength);
|
|
37
|
+
offset += vorbisInfoLength;
|
|
38
|
+
if (privateData[offset] !== 0x03) {
|
|
39
|
+
throw new Error('Error parsing vorbis codec private');
|
|
40
|
+
}
|
|
41
|
+
const vorbisComments = privateData.slice(offset, offset + vorbisSkipLength);
|
|
42
|
+
offset += vorbisSkipLength;
|
|
43
|
+
if (privateData[offset] !== 0x05) {
|
|
44
|
+
throw new Error('Error parsing vorbis codec private');
|
|
45
|
+
}
|
|
46
|
+
const vorbisBooks = privateData.slice(offset);
|
|
47
|
+
const bufferIterator = (0, buffer_iterator_1.getArrayBufferIterator)(vorbisInfo.slice(0));
|
|
48
|
+
// type
|
|
49
|
+
bufferIterator.getUint8();
|
|
50
|
+
// vorbis
|
|
51
|
+
const vorbis = bufferIterator.getByteString(6);
|
|
52
|
+
if (vorbis !== 'vorbis') {
|
|
53
|
+
throw new Error('Error parsing vorbis codec private');
|
|
54
|
+
}
|
|
55
|
+
const vorbisVersion = bufferIterator.getUint32Le();
|
|
56
|
+
if (vorbisVersion !== 0) {
|
|
57
|
+
throw new Error('Error parsing vorbis codec private');
|
|
58
|
+
}
|
|
59
|
+
const vorbisDescription = new Uint8Array([
|
|
60
|
+
// constructing the vorbis description
|
|
61
|
+
// This format consists in the page_segments field
|
|
62
|
+
/**
|
|
63
|
+
* The number of segment entries to appear in the segment table.
|
|
64
|
+
* The maximum number of 255 segments (255 bytes each) sets the maximum possible physical page size at 65307 bytes or just under 64kB (thus we know that a header corrupted so as destroy sizing/alignment information will not cause a runaway bitstream.
|
|
65
|
+
* We'll read in the page according to the corrupted size information that's guaranteed to be a reasonable size regardless, notice the checksum mismatch, drop sync and then look for recapture).
|
|
66
|
+
*/
|
|
67
|
+
2,
|
|
68
|
+
// followed by the segment_table field
|
|
69
|
+
// offset of the comments table
|
|
70
|
+
vorbisInfo.length,
|
|
71
|
+
// offset of the codebooks table
|
|
72
|
+
vorbisComments.length,
|
|
73
|
+
// followed by the three Vorbis header packets,
|
|
74
|
+
// respectively the identification header,
|
|
75
|
+
...vorbisInfo,
|
|
76
|
+
// the comments header,
|
|
77
|
+
...vorbisComments,
|
|
78
|
+
// and the setup header, in this order, as described in section 4.2 of [VORBIS].
|
|
79
|
+
...vorbisBooks,
|
|
80
|
+
]);
|
|
81
|
+
return vorbisDescription;
|
|
82
|
+
};
|
|
83
|
+
exports.getAudioDescription = getAudioDescription;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTracksFromMatroska = void 0;
|
|
4
|
+
const traversal_1 = require("../../traversal");
|
|
5
|
+
const get_track_1 = require("./get-track");
|
|
6
|
+
const getTracksFromMatroska = (segment, timescale) => {
|
|
7
|
+
const tracksSegment = (0, traversal_1.getTracksSegment)(segment);
|
|
8
|
+
if (!tracksSegment) {
|
|
9
|
+
throw new Error('No tracks segment');
|
|
10
|
+
}
|
|
11
|
+
const tracks = [];
|
|
12
|
+
for (const trackEntrySegment of tracksSegment.children) {
|
|
13
|
+
if (trackEntrySegment.type === 'crc32-segment') {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
if (trackEntrySegment.type !== 'track-entry-segment') {
|
|
17
|
+
throw new Error('Expected track entry segment');
|
|
18
|
+
}
|
|
19
|
+
const track = (0, get_track_1.getTrack)({
|
|
20
|
+
track: trackEntrySegment,
|
|
21
|
+
timescale,
|
|
22
|
+
});
|
|
23
|
+
if (track) {
|
|
24
|
+
tracks.push(track);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return tracks;
|
|
28
|
+
};
|
|
29
|
+
exports.getTracksFromMatroska = getTracksFromMatroska;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AudioTrack, VideoTrack } from '../../get-tracks';
|
|
2
|
+
import type { TrackEntrySegment } from './segments/track-entry';
|
|
3
|
+
export declare const getTrack: ({ timescale, track, }: {
|
|
4
|
+
timescale: number;
|
|
5
|
+
track: TrackEntrySegment;
|
|
6
|
+
}) => VideoTrack | AudioTrack | null;
|