@remotion/media-parser 4.0.254 → 4.0.256
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/boxes/avc/parse-avc.d.ts +18 -0
- package/dist/boxes/avc/parse-avc.js +96 -0
- package/dist/boxes/iso-base-media/base-type.d.ts +4 -0
- package/dist/boxes/iso-base-media/base-type.js +2 -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 +29 -0
- package/dist/boxes/iso-base-media/esds/esds-descriptors.js +82 -0
- package/dist/boxes/iso-base-media/esds/esds.d.ts +15 -0
- package/dist/boxes/iso-base-media/esds/esds.js +27 -0
- package/dist/boxes/iso-base-media/ftyp.d.ts +13 -0
- package/dist/boxes/iso-base-media/ftyp.js +22 -0
- package/dist/boxes/iso-base-media/get-actual-number-of-channels.d.ts +13 -0
- package/dist/boxes/iso-base-media/get-actual-number-of-channels.js +22 -0
- package/dist/boxes/iso-base-media/get-sample-positions-from-track.d.ts +4 -0
- package/dist/boxes/iso-base-media/get-sample-positions-from-track.js +54 -0
- package/dist/boxes/iso-base-media/make-track.d.ts +3 -0
- package/dist/boxes/iso-base-media/make-track.js +107 -0
- package/dist/boxes/iso-base-media/mdat/mdat.d.ts +25 -0
- package/dist/boxes/iso-base-media/mdat/mdat.js +122 -0
- package/dist/boxes/iso-base-media/mdhd.d.ts +16 -0
- package/dist/boxes/iso-base-media/mdhd.js +32 -0
- package/dist/boxes/iso-base-media/meta/hdlr.d.ts +12 -0
- package/dist/boxes/iso-base-media/meta/hdlr.js +33 -0
- package/dist/boxes/iso-base-media/meta/ilst.d.ts +28 -0
- package/dist/boxes/iso-base-media/meta/ilst.js +86 -0
- package/dist/boxes/iso-base-media/moov/moov.d.ts +19 -0
- package/dist/boxes/iso-base-media/moov/moov.js +27 -0
- package/dist/boxes/iso-base-media/mvhd.d.ts +30 -0
- package/dist/boxes/iso-base-media/mvhd.js +65 -0
- package/dist/boxes/iso-base-media/parse-icc-profile.d.ts +36 -0
- package/dist/boxes/iso-base-media/parse-icc-profile.js +115 -0
- package/dist/boxes/iso-base-media/process-box.d.ts +34 -0
- package/dist/boxes/iso-base-media/process-box.js +710 -0
- 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.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 +21 -0
- package/dist/boxes/iso-base-media/stsd/colr.js +47 -0
- package/dist/boxes/iso-base-media/stsd/ctts.d.ts +19 -0
- package/dist/boxes/iso-base-media/stsd/ctts.js +34 -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.d.ts +19 -0
- package/dist/boxes/iso-base-media/stsd/keys.js +35 -0
- package/dist/boxes/iso-base-media/stsd/mebx.d.ts +19 -0
- package/dist/boxes/iso-base-media/stsd/mebx.js +32 -0
- 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 +68 -0
- package/dist/boxes/iso-base-media/stsd/samples.js +320 -0
- package/dist/boxes/iso-base-media/stsd/stco.d.ts +15 -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 +18 -0
- package/dist/boxes/iso-base-media/stsd/stsd.js +33 -0
- 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/tfdt.d.ts +12 -0
- package/dist/boxes/iso-base-media/tfdt.js +20 -0
- package/dist/boxes/iso-base-media/tfhd.d.ts +16 -0
- package/dist/boxes/iso-base-media/tfhd.js +41 -0
- package/dist/boxes/iso-base-media/tkhd.d.ts +25 -0
- package/dist/boxes/iso-base-media/tkhd.js +87 -0
- package/dist/boxes/iso-base-media/to-date.d.ts +2 -0
- package/dist/boxes/iso-base-media/to-date.js +19 -0
- package/dist/boxes/iso-base-media/trak/trak.d.ts +19 -0
- package/dist/boxes/iso-base-media/trak/trak.js +27 -0
- package/dist/boxes/iso-base-media/traversal.d.ts +39 -0
- package/dist/boxes/iso-base-media/traversal.js +201 -0
- package/dist/boxes/iso-base-media/trun.d.ts +21 -0
- package/dist/boxes/iso-base-media/trun.js +44 -0
- 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/riff/expect-riff-box.d.ts +17 -0
- package/dist/boxes/riff/expect-riff-box.js +49 -0
- package/dist/boxes/riff/get-tracks-from-avi.d.ts +22 -0
- package/dist/boxes/riff/get-tracks-from-avi.js +114 -0
- package/dist/boxes/riff/is-movi.d.ts +2 -0
- package/dist/boxes/riff/is-movi.js +12 -0
- package/dist/boxes/riff/parse-avih.d.ts +6 -0
- package/dist/boxes/riff/parse-avih.js +32 -0
- package/dist/boxes/riff/parse-box.d.ts +15 -0
- package/dist/boxes/riff/parse-box.js +146 -0
- package/dist/boxes/riff/parse-fmt-box.d.ts +7 -0
- package/dist/boxes/riff/parse-fmt-box.js +33 -0
- package/dist/boxes/riff/parse-isft.d.ts +6 -0
- package/dist/boxes/riff/parse-isft.js +17 -0
- package/dist/boxes/riff/parse-list-box.d.ts +8 -0
- package/dist/boxes/riff/parse-list-box.js +30 -0
- package/dist/boxes/riff/parse-movi.d.ts +17 -0
- package/dist/boxes/riff/parse-movi.js +133 -0
- package/dist/boxes/riff/parse-riff-box.d.ts +10 -0
- package/dist/boxes/riff/parse-riff-box.js +37 -0
- package/dist/boxes/riff/parse-strf.d.ts +7 -0
- package/dist/boxes/riff/parse-strf.js +67 -0
- package/dist/boxes/riff/parse-strh.d.ts +6 -0
- package/dist/boxes/riff/parse-strh.js +46 -0
- package/dist/boxes/riff/riff-box.d.ts +85 -0
- package/dist/boxes/riff/riff-box.js +2 -0
- package/dist/boxes/riff/timescale.d.ts +1 -0
- package/dist/boxes/riff/timescale.js +4 -0
- package/dist/boxes/riff/traversal.d.ts +8 -0
- package/dist/boxes/riff/traversal.js +36 -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/color.d.ts +4 -0
- package/dist/boxes/webm/color.js +127 -0
- package/dist/boxes/webm/description.d.ts +2 -0
- package/dist/boxes/webm/description.js +83 -0
- package/dist/boxes/webm/ebml.d.ts +2 -0
- package/dist/boxes/webm/ebml.js +94 -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-sample-from-block.d.ts +17 -0
- package/dist/boxes/webm/get-sample-from-block.js +81 -0
- package/dist/boxes/webm/make-header.d.ts +8 -0
- package/dist/boxes/webm/make-header.js +187 -0
- package/dist/boxes/webm/make-track.d.ts +9 -0
- package/dist/boxes/webm/make-track.js +261 -0
- package/dist/boxes/webm/parse-ebml.d.ts +12 -0
- package/dist/boxes/webm/parse-ebml.js +185 -0
- package/dist/boxes/webm/parse-webm-header.d.ts +9 -0
- package/dist/boxes/webm/parse-webm-header.js +36 -0
- package/dist/boxes/webm/segments/all-segments.d.ts +976 -0
- package/dist/boxes/webm/segments/all-segments.js +724 -0
- package/dist/boxes/webm/segments/block-simple-block-flags.d.ts +9 -0
- package/dist/boxes/webm/segments/block-simple-block-flags.js +38 -0
- package/dist/boxes/webm/segments/parse-children.d.ts +23 -0
- package/dist/boxes/webm/segments/parse-children.js +145 -0
- package/dist/boxes/webm/segments/track-entry.d.ts +9 -0
- package/dist/boxes/webm/segments/track-entry.js +24 -0
- package/dist/boxes/webm/segments.d.ts +15 -0
- package/dist/boxes/webm/segments.js +161 -0
- package/dist/boxes/webm/traversal.d.ts +33 -0
- package/dist/boxes/webm/traversal.js +265 -0
- package/dist/containers/flac/get-channel-count.d.ts +1 -1
- package/dist/create/cluster-segment.d.ts +10 -0
- package/dist/create/cluster-segment.js +39 -0
- package/dist/create/cluster.d.ts +19 -0
- package/dist/create/cluster.js +55 -0
- package/dist/create/create-media.d.ts +15 -0
- package/dist/create/create-media.js +165 -0
- package/dist/create/event-emitter.d.ts +31 -0
- package/dist/create/event-emitter.js +25 -0
- package/dist/create/iso-base-media/codec-specific/avc1.d.ts +2 -0
- package/dist/create/iso-base-media/codec-specific/avc1.js +48 -0
- package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.d.ts +22 -0
- package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.js +36 -0
- package/dist/create/iso-base-media/codec-specific/mp4a.d.ts +2 -0
- package/dist/create/iso-base-media/codec-specific/mp4a.js +74 -0
- package/dist/create/iso-base-media/create-colr.d.ts +6 -0
- package/dist/create/iso-base-media/create-colr.js +26 -0
- package/dist/create/iso-base-media/create-ftyp.d.ts +10 -0
- package/dist/create/iso-base-media/create-ftyp.js +22 -0
- package/dist/create/iso-base-media/create-ilst.d.ts +1 -0
- package/dist/create/iso-base-media/create-ilst.js +14 -0
- package/dist/create/iso-base-media/create-iso-base-media.d.ts +2 -0
- package/dist/create/iso-base-media/create-iso-base-media.js +165 -0
- package/dist/create/iso-base-media/create-mdia.d.ts +5 -0
- package/dist/create/iso-base-media/create-mdia.js +18 -0
- package/dist/create/iso-base-media/create-moov.d.ts +5 -0
- package/dist/create/iso-base-media/create-moov.js +18 -0
- package/dist/create/iso-base-media/create-mvhd.d.ts +10 -0
- package/dist/create/iso-base-media/create-mvhd.js +48 -0
- package/dist/create/iso-base-media/create-trak.d.ts +4 -0
- package/dist/create/iso-base-media/create-trak.js +17 -0
- package/dist/create/iso-base-media/create-udta.d.ts +1 -0
- package/dist/create/iso-base-media/create-udta.js +14 -0
- package/dist/create/iso-base-media/create-url.d.ts +1 -0
- package/dist/create/iso-base-media/create-url.js +16 -0
- package/dist/create/iso-base-media/example-stts.d.ts +3 -0
- package/dist/create/iso-base-media/example-stts.js +2797 -0
- package/dist/create/iso-base-media/ilst/create-cmt.d.ts +1 -0
- package/dist/create/iso-base-media/ilst/create-cmt.js +26 -0
- package/dist/create/iso-base-media/ilst/create-too.d.ts +1 -0
- package/dist/create/iso-base-media/ilst/create-too.js +27 -0
- package/dist/create/iso-base-media/mdia/create-mdhd.d.ts +6 -0
- package/dist/create/iso-base-media/mdia/create-mdhd.js +33 -0
- package/dist/create/iso-base-media/mp4-header.d.ts +6 -0
- package/dist/create/iso-base-media/mp4-header.js +48 -0
- package/dist/create/iso-base-media/primitives.d.ts +15 -0
- package/dist/create/iso-base-media/primitives.js +133 -0
- package/dist/create/iso-base-media/serialize-track.d.ts +9 -0
- package/dist/create/iso-base-media/serialize-track.js +63 -0
- package/dist/create/iso-base-media/trak/create-tkhd.d.ts +27 -0
- package/dist/create/iso-base-media/trak/create-tkhd.js +97 -0
- package/dist/create/iso-base-media/trak/mdia/create-minf.d.ts +4 -0
- package/dist/create/iso-base-media/trak/mdia/create-minf.js +19 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.js +22 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.js +20 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.d.ts +6 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.js +35 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.js +20 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.js +45 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.js +28 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.js +56 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.js +23 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.js +25 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.js +48 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.js +20 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.js +16 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.js +13 -0
- package/dist/create/iso-base-media/udta/create-meta.d.ts +4 -0
- package/dist/create/iso-base-media/udta/create-meta.js +20 -0
- package/dist/create/iso-base-media/udta/meta/create-hdlr.d.ts +1 -0
- package/dist/create/iso-base-media/udta/meta/create-hdlr.js +32 -0
- package/dist/create/make-duration-with-padding.d.ts +1 -0
- package/dist/create/make-duration-with-padding.js +15 -0
- package/dist/create/make-track-info.d.ts +20 -0
- package/dist/create/make-track-info.js +2 -0
- package/dist/create/matroska/cluster-segment.d.ts +10 -0
- package/dist/create/matroska/cluster-segment.js +39 -0
- package/dist/create/matroska/cluster.d.ts +25 -0
- package/dist/create/matroska/cluster.js +77 -0
- package/dist/create/matroska/create-matroska-media.d.ts +2 -0
- package/dist/create/matroska/create-matroska-media.js +187 -0
- package/dist/create/matroska/make-duration-with-padding.d.ts +1 -0
- package/dist/create/matroska/make-duration-with-padding.js +15 -0
- package/dist/create/matroska/matroska-cues.d.ts +6 -0
- package/dist/create/matroska/matroska-cues.js +49 -0
- package/dist/create/matroska/matroska-header.d.ts +1 -0
- package/dist/create/matroska/matroska-header.js +66 -0
- package/dist/create/matroska/matroska-info.d.ts +3 -0
- package/dist/create/matroska/matroska-info.js +33 -0
- package/dist/create/matroska/matroska-seek.d.ts +6 -0
- package/dist/create/matroska/matroska-seek.js +32 -0
- package/dist/create/matroska/matroska-segment.d.ts +3 -0
- package/dist/create/matroska/matroska-segment.js +13 -0
- package/dist/create/matroska/matroska-trackentry.d.ts +10 -0
- package/dist/create/matroska/matroska-trackentry.js +249 -0
- package/dist/create/matroska-cues.d.ts +6 -0
- package/dist/create/matroska-cues.js +49 -0
- package/dist/create/matroska-header.d.ts +1 -0
- package/dist/create/matroska-header.js +66 -0
- package/dist/create/matroska-info.d.ts +3 -0
- package/dist/create/matroska-info.js +33 -0
- package/dist/create/matroska-seek.d.ts +6 -0
- package/dist/create/matroska-seek.js +32 -0
- package/dist/create/matroska-segment.d.ts +3 -0
- package/dist/create/matroska-segment.js +13 -0
- package/dist/create/matroska-trackentry.d.ts +27 -0
- package/dist/create/matroska-trackentry.js +243 -0
- package/dist/create/media-fn.d.ts +33 -0
- package/dist/create/media-fn.js +2 -0
- package/dist/create/progress-tracker.d.ts +7 -0
- package/dist/create/progress-tracker.js +43 -0
- package/dist/create/timescale.d.ts +1 -0
- package/dist/create/timescale.js +4 -0
- package/dist/create/wav/create-wav.d.ts +2 -0
- package/dist/create/wav/create-wav.js +110 -0
- package/dist/create/with-resolvers.d.ts +10 -0
- package/dist/create/with-resolvers.js +28 -0
- package/dist/esm/buffer.mjs +56 -0
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/web-fs.mjs +73 -0
- package/dist/parse-video.d.ts +25 -0
- package/dist/parse-video.js +39 -0
- package/dist/parser-context.d.ts +10 -0
- package/dist/parser-context.js +2 -0
- package/dist/parser-state.d.ts +22 -0
- package/dist/parser-state.js +132 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/writers/buffer-implementation/writer.d.ts +2 -0
- package/dist/writers/buffer-implementation/writer.js +54 -0
- package/dist/writers/buffer.d.ts +2 -0
- package/dist/writers/buffer.js +7 -0
- package/dist/writers/web-fs.d.ts +3 -0
- package/dist/writers/web-fs.js +74 -0
- package/package.json +3 -3
- package/dist/abort.d.ts +0 -1
- package/dist/abort.js +0 -7
- package/dist/controller.d.ts +0 -17
- package/dist/controller.js +0 -31
- package/dist/parse-and-download-media.d.ts +0 -2
- package/dist/parse-and-download-media.js +0 -57
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseMdat = void 0;
|
|
4
|
+
const get_tracks_1 = require("../../../get-tracks");
|
|
5
|
+
const get_sample_positions_from_track_1 = require("../get-sample-positions-from-track");
|
|
6
|
+
const traversal_1 = require("../traversal");
|
|
7
|
+
const parseMdat = async ({ data, size, fileOffset, existingBoxes, options, signal, maySkipSampleProcessing, }) => {
|
|
8
|
+
const alreadyHas = (0, get_tracks_1.hasTracks)({
|
|
9
|
+
type: 'iso-base-media',
|
|
10
|
+
boxes: existingBoxes,
|
|
11
|
+
}, options.parserState);
|
|
12
|
+
if (!alreadyHas) {
|
|
13
|
+
if (maySkipSampleProcessing) {
|
|
14
|
+
data.discard(size - (data.counter.getOffset() - fileOffset));
|
|
15
|
+
return Promise.resolve({
|
|
16
|
+
type: 'mdat-box',
|
|
17
|
+
boxSize: size,
|
|
18
|
+
status: 'samples-skipped',
|
|
19
|
+
fileOffset,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
data.discard(size - (data.counter.getOffset() - fileOffset));
|
|
23
|
+
data.disallowDiscard();
|
|
24
|
+
return Promise.resolve({
|
|
25
|
+
type: 'mdat-box',
|
|
26
|
+
boxSize: size,
|
|
27
|
+
status: 'samples-buffered',
|
|
28
|
+
fileOffset,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const tracks = (0, get_tracks_1.getTracks)({ type: 'iso-base-media', boxes: existingBoxes }, options.parserState);
|
|
32
|
+
const allTracks = [
|
|
33
|
+
...tracks.videoTracks,
|
|
34
|
+
...tracks.audioTracks,
|
|
35
|
+
...tracks.otherTracks,
|
|
36
|
+
];
|
|
37
|
+
const flatSamples = allTracks
|
|
38
|
+
.map((track) => {
|
|
39
|
+
const samplePositions = (0, get_sample_positions_from_track_1.getSamplePositionsFromTrack)(track.trakBox, (0, traversal_1.getMoofBox)(existingBoxes));
|
|
40
|
+
if (!samplePositions) {
|
|
41
|
+
throw new Error('No sample positions');
|
|
42
|
+
}
|
|
43
|
+
return samplePositions.map((samplePosition) => {
|
|
44
|
+
return {
|
|
45
|
+
track: { ...track },
|
|
46
|
+
samplePosition,
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
})
|
|
50
|
+
.flat(1);
|
|
51
|
+
while (true) {
|
|
52
|
+
if (signal && signal.aborted) {
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
const samplesWithIndex = flatSamples.find((sample) => {
|
|
56
|
+
return sample.samplePosition.offset === data.counter.getOffset();
|
|
57
|
+
});
|
|
58
|
+
if (!samplesWithIndex) {
|
|
59
|
+
// There are various reasons why in mdat we find weird stuff:
|
|
60
|
+
// - iphonevideo.hevc has a fake hoov atom which is not mapped
|
|
61
|
+
// - corrupted.mp4 has a corrupt table
|
|
62
|
+
const nextSample_ = flatSamples
|
|
63
|
+
.filter((s) => s.samplePosition.offset > data.counter.getOffset())
|
|
64
|
+
.sort((a, b) => a.samplePosition.offset - b.samplePosition.offset)[0];
|
|
65
|
+
if (nextSample_) {
|
|
66
|
+
data.discard(nextSample_.samplePosition.offset - data.counter.getOffset());
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const bytesRemaining = size + fileOffset - data.counter.getOffset();
|
|
71
|
+
data.discard(bytesRemaining);
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (data.bytesRemaining() < samplesWithIndex.samplePosition.size) {
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
const bytes = data.getSlice(samplesWithIndex.samplePosition.size);
|
|
79
|
+
const timestamp = (samplesWithIndex.samplePosition.cts * 1000000) /
|
|
80
|
+
samplesWithIndex.track.timescale;
|
|
81
|
+
const duration = (samplesWithIndex.samplePosition.duration * 1000000) /
|
|
82
|
+
samplesWithIndex.track.timescale;
|
|
83
|
+
const cts = (samplesWithIndex.samplePosition.cts * 1000000) /
|
|
84
|
+
samplesWithIndex.track.timescale;
|
|
85
|
+
const dts = (samplesWithIndex.samplePosition.dts * 1000000) /
|
|
86
|
+
samplesWithIndex.track.timescale;
|
|
87
|
+
if (samplesWithIndex.track.type === 'audio') {
|
|
88
|
+
await options.parserState.onAudioSample(samplesWithIndex.track.trackId, {
|
|
89
|
+
data: bytes,
|
|
90
|
+
timestamp,
|
|
91
|
+
duration,
|
|
92
|
+
cts,
|
|
93
|
+
dts,
|
|
94
|
+
trackId: samplesWithIndex.track.trackId,
|
|
95
|
+
type: samplesWithIndex.samplePosition.isKeyframe ? 'key' : 'delta',
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
if (samplesWithIndex.track.type === 'video') {
|
|
99
|
+
await options.parserState.onVideoSample(samplesWithIndex.track.trackId, {
|
|
100
|
+
data: bytes,
|
|
101
|
+
timestamp,
|
|
102
|
+
duration,
|
|
103
|
+
cts,
|
|
104
|
+
dts,
|
|
105
|
+
trackId: samplesWithIndex.track.trackId,
|
|
106
|
+
type: samplesWithIndex.samplePosition.isKeyframe ? 'key' : 'delta',
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
const remaining = size - (data.counter.getOffset() - fileOffset);
|
|
110
|
+
data.removeBytesRead();
|
|
111
|
+
if (remaining === 0) {
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return Promise.resolve({
|
|
116
|
+
type: 'mdat-box',
|
|
117
|
+
boxSize: size,
|
|
118
|
+
status: 'samples-processed',
|
|
119
|
+
fileOffset,
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
exports.parseMdat = parseMdat;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { BufferIterator } from '../../buffer-iterator';
|
|
2
|
+
export interface MdhdBox {
|
|
3
|
+
type: 'mdhd-box';
|
|
4
|
+
version: number;
|
|
5
|
+
timescale: number;
|
|
6
|
+
duration: number;
|
|
7
|
+
language: number;
|
|
8
|
+
quality: number;
|
|
9
|
+
creationTime: number | null;
|
|
10
|
+
modificationTime: number | null;
|
|
11
|
+
}
|
|
12
|
+
export declare const parseMdhd: ({ data, size, fileOffset, }: {
|
|
13
|
+
data: BufferIterator;
|
|
14
|
+
size: number;
|
|
15
|
+
fileOffset: number;
|
|
16
|
+
}) => MdhdBox;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseMdhd = void 0;
|
|
4
|
+
const parseMdhd = ({ data, size, fileOffset, }) => {
|
|
5
|
+
const version = data.getUint8();
|
|
6
|
+
// flags, we discard them
|
|
7
|
+
data.discard(3);
|
|
8
|
+
// creation time
|
|
9
|
+
const creationTime = version === 1 ? Number(data.getUint64()) : data.getUint32();
|
|
10
|
+
// modification time
|
|
11
|
+
const modificationTime = version === 1 ? Number(data.getUint64()) : data.getUint32();
|
|
12
|
+
const timescale = data.getUint32();
|
|
13
|
+
const duration = version === 1 ? data.getUint64() : data.getUint32();
|
|
14
|
+
const language = data.getUint16();
|
|
15
|
+
// quality
|
|
16
|
+
const quality = data.getUint16();
|
|
17
|
+
const remaining = size - (data.counter.getOffset() - fileOffset);
|
|
18
|
+
if (remaining !== 0) {
|
|
19
|
+
throw new Error(`Expected remaining bytes to be 0, got ${remaining}`);
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
type: 'mdhd-box',
|
|
23
|
+
duration: Number(duration),
|
|
24
|
+
timescale,
|
|
25
|
+
version,
|
|
26
|
+
language,
|
|
27
|
+
quality,
|
|
28
|
+
creationTime,
|
|
29
|
+
modificationTime,
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
exports.parseMdhd = parseMdhd;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BufferIterator } from '../../../buffer-iterator';
|
|
2
|
+
import type { BaseBox } from '../base-type';
|
|
3
|
+
export interface HdlrBox extends BaseBox {
|
|
4
|
+
type: 'hdlr-box';
|
|
5
|
+
hdlrType: string;
|
|
6
|
+
componentName: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const parseHdlr: ({ iterator, size, offset, }: {
|
|
9
|
+
iterator: BufferIterator;
|
|
10
|
+
size: number;
|
|
11
|
+
offset: number;
|
|
12
|
+
}) => Promise<HdlrBox>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseHdlr = void 0;
|
|
4
|
+
const parseHdlr = ({ iterator, size, offset, }) => {
|
|
5
|
+
const box = iterator.startBox(size - 8);
|
|
6
|
+
const version = iterator.getUint8();
|
|
7
|
+
if (version !== 0) {
|
|
8
|
+
throw new Error(`Unsupported hdlr version: ${version}`);
|
|
9
|
+
}
|
|
10
|
+
// version
|
|
11
|
+
iterator.discard(3);
|
|
12
|
+
// predefined
|
|
13
|
+
iterator.discard(4);
|
|
14
|
+
// type
|
|
15
|
+
const hdlrType = iterator.getByteString(4);
|
|
16
|
+
// component manufactor
|
|
17
|
+
iterator.discard(4);
|
|
18
|
+
// component flags
|
|
19
|
+
iterator.discard(4);
|
|
20
|
+
// component flags mask
|
|
21
|
+
iterator.discard(4);
|
|
22
|
+
// component name
|
|
23
|
+
const componentName = iterator.readUntilNullTerminator();
|
|
24
|
+
box.discardRest();
|
|
25
|
+
return Promise.resolve({
|
|
26
|
+
type: 'hdlr-box',
|
|
27
|
+
boxSize: size,
|
|
28
|
+
offset,
|
|
29
|
+
hdlrType,
|
|
30
|
+
componentName,
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
exports.parseHdlr = parseHdlr;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { BufferIterator } from '../../../buffer-iterator';
|
|
2
|
+
import type { BaseBox } from '../base-type';
|
|
3
|
+
type IlstEntry = {
|
|
4
|
+
index: number;
|
|
5
|
+
wellKnownType: number;
|
|
6
|
+
type: string;
|
|
7
|
+
value: Value;
|
|
8
|
+
};
|
|
9
|
+
export type Value = {
|
|
10
|
+
type: 'text';
|
|
11
|
+
value: string;
|
|
12
|
+
} | {
|
|
13
|
+
type: 'number';
|
|
14
|
+
value: number;
|
|
15
|
+
} | {
|
|
16
|
+
type: 'unknown';
|
|
17
|
+
value: unknown;
|
|
18
|
+
};
|
|
19
|
+
export interface IlstBox extends BaseBox {
|
|
20
|
+
type: 'ilst-box';
|
|
21
|
+
entries: IlstEntry[];
|
|
22
|
+
}
|
|
23
|
+
export declare const parseIlstBox: ({ iterator, size, offset, }: {
|
|
24
|
+
iterator: BufferIterator;
|
|
25
|
+
size: number;
|
|
26
|
+
offset: number;
|
|
27
|
+
}) => IlstBox;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseIlstBox = void 0;
|
|
4
|
+
// https://developer.apple.com/documentation/quicktime-file-format/well-known_types
|
|
5
|
+
const parseFromWellKnownType = (wellKnownType, iterator, size) => {
|
|
6
|
+
if (wellKnownType === 1) {
|
|
7
|
+
const value = iterator.getByteString(size);
|
|
8
|
+
return { type: 'text', value };
|
|
9
|
+
}
|
|
10
|
+
if (wellKnownType === 21) {
|
|
11
|
+
if (size === 1) {
|
|
12
|
+
return { type: 'number', value: iterator.getInt8() };
|
|
13
|
+
}
|
|
14
|
+
if (size === 2) {
|
|
15
|
+
return { type: 'number', value: iterator.getInt16() };
|
|
16
|
+
}
|
|
17
|
+
if (size === 3) {
|
|
18
|
+
return { type: 'number', value: iterator.getInt24() };
|
|
19
|
+
}
|
|
20
|
+
if (size === 4) {
|
|
21
|
+
return { type: 'number', value: iterator.getInt32() };
|
|
22
|
+
}
|
|
23
|
+
if (size === 8) {
|
|
24
|
+
return { type: 'number', value: Number(iterator.getInt64()) };
|
|
25
|
+
}
|
|
26
|
+
throw new Error(`Weird size for number ${size}`);
|
|
27
|
+
}
|
|
28
|
+
if (wellKnownType === 22) {
|
|
29
|
+
if (size === 1) {
|
|
30
|
+
return { type: 'number', value: iterator.getUint8() };
|
|
31
|
+
}
|
|
32
|
+
if (size === 2) {
|
|
33
|
+
return { type: 'number', value: iterator.getUint16() };
|
|
34
|
+
}
|
|
35
|
+
if (size === 3) {
|
|
36
|
+
return { type: 'number', value: iterator.getUint24() };
|
|
37
|
+
}
|
|
38
|
+
if (size === 4) {
|
|
39
|
+
return { type: 'number', value: iterator.getUint32() };
|
|
40
|
+
}
|
|
41
|
+
throw new Error(`Weird size for number ${size}`);
|
|
42
|
+
}
|
|
43
|
+
if (wellKnownType === 23) {
|
|
44
|
+
if (size === 4) {
|
|
45
|
+
return { type: 'number', value: iterator.getFloat32() };
|
|
46
|
+
}
|
|
47
|
+
if (size === 8) {
|
|
48
|
+
return { type: 'number', value: iterator.getFloat64() };
|
|
49
|
+
}
|
|
50
|
+
throw new Error(`Weird size for number ${size}`);
|
|
51
|
+
}
|
|
52
|
+
iterator.discard(size);
|
|
53
|
+
return { type: 'unknown', value: null };
|
|
54
|
+
};
|
|
55
|
+
const parseIlstBox = ({ iterator, size, offset, }) => {
|
|
56
|
+
const box = iterator.startBox(size - 8);
|
|
57
|
+
const entries = [];
|
|
58
|
+
while (iterator.counter.getOffset() < size + offset) {
|
|
59
|
+
// metadata size
|
|
60
|
+
const metadataSize = iterator.getUint32();
|
|
61
|
+
const index = iterator.getUint32();
|
|
62
|
+
// "skip" as a number
|
|
63
|
+
if (index === 1936419184) {
|
|
64
|
+
iterator.discard(metadataSize - 8);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const innerSize = iterator.getUint32();
|
|
68
|
+
const type = iterator.getAtom();
|
|
69
|
+
const typeIndicator = iterator.getUint8();
|
|
70
|
+
if (typeIndicator !== 0) {
|
|
71
|
+
throw new Error('Expected type indicator to be 0');
|
|
72
|
+
}
|
|
73
|
+
const wellKnownType = iterator.getUint24();
|
|
74
|
+
iterator.discard(4);
|
|
75
|
+
const value = parseFromWellKnownType(wellKnownType, iterator, innerSize - 16);
|
|
76
|
+
entries.push({ index, type, wellKnownType, value });
|
|
77
|
+
}
|
|
78
|
+
box.discardRest();
|
|
79
|
+
return {
|
|
80
|
+
type: 'ilst-box',
|
|
81
|
+
boxSize: size,
|
|
82
|
+
offset,
|
|
83
|
+
entries,
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
exports.parseIlstBox = parseIlstBox;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { BufferIterator } from '../../../buffer-iterator';
|
|
2
|
+
import type { LogLevel } from '../../../log';
|
|
3
|
+
import type { Options, ParseMediaFields } from '../../../options';
|
|
4
|
+
import type { AnySegment } from '../../../parse-result';
|
|
5
|
+
import type { ParserContext } from '../../../parser-context';
|
|
6
|
+
import type { BaseBox } from '../base-type';
|
|
7
|
+
export interface MoovBox extends BaseBox {
|
|
8
|
+
type: 'moov-box';
|
|
9
|
+
children: AnySegment[];
|
|
10
|
+
}
|
|
11
|
+
export declare const parseMoov: ({ iterator, offset, size, options, signal, logLevel, fields, }: {
|
|
12
|
+
iterator: BufferIterator;
|
|
13
|
+
offset: number;
|
|
14
|
+
size: number;
|
|
15
|
+
options: ParserContext;
|
|
16
|
+
signal: AbortSignal | null;
|
|
17
|
+
logLevel: LogLevel;
|
|
18
|
+
fields: Options<ParseMediaFields>;
|
|
19
|
+
}) => Promise<MoovBox>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseMoov = void 0;
|
|
4
|
+
const process_box_1 = require("../process-box");
|
|
5
|
+
const parseMoov = async ({ iterator, offset, size, options, signal, logLevel, fields, }) => {
|
|
6
|
+
const children = await (0, process_box_1.parseIsoBaseMediaBoxes)({
|
|
7
|
+
iterator,
|
|
8
|
+
maxBytes: size - (iterator.counter.getOffset() - offset),
|
|
9
|
+
allowIncompleteBoxes: false,
|
|
10
|
+
initialBoxes: [],
|
|
11
|
+
options,
|
|
12
|
+
continueMdat: false,
|
|
13
|
+
signal,
|
|
14
|
+
logLevel,
|
|
15
|
+
fields,
|
|
16
|
+
});
|
|
17
|
+
if (children.status === 'incomplete') {
|
|
18
|
+
throw new Error('Incomplete boxes are not allowed');
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
offset,
|
|
22
|
+
boxSize: size,
|
|
23
|
+
type: 'moov-box',
|
|
24
|
+
children: children.segments.boxes,
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
exports.parseMoov = parseMoov;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { BufferIterator } from '../../buffer-iterator';
|
|
2
|
+
import type { BaseBox } from './base-type';
|
|
3
|
+
export type ThreeDMatrix = [
|
|
4
|
+
number,
|
|
5
|
+
number,
|
|
6
|
+
number,
|
|
7
|
+
number,
|
|
8
|
+
number,
|
|
9
|
+
number,
|
|
10
|
+
number,
|
|
11
|
+
number,
|
|
12
|
+
number
|
|
13
|
+
];
|
|
14
|
+
export interface MvhdBox extends BaseBox {
|
|
15
|
+
durationInUnits: number;
|
|
16
|
+
durationInSeconds: number;
|
|
17
|
+
creationTime: number | null;
|
|
18
|
+
modificationTime: number | null;
|
|
19
|
+
timeScale: number;
|
|
20
|
+
rate: number;
|
|
21
|
+
volume: number;
|
|
22
|
+
matrix: ThreeDMatrix;
|
|
23
|
+
nextTrackId: number;
|
|
24
|
+
type: 'mvhd-box';
|
|
25
|
+
}
|
|
26
|
+
export declare const parseMvhd: ({ iterator, offset, size, }: {
|
|
27
|
+
iterator: BufferIterator;
|
|
28
|
+
offset: number;
|
|
29
|
+
size: number;
|
|
30
|
+
}) => MvhdBox;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseMvhd = void 0;
|
|
4
|
+
const buffer_iterator_1 = require("../../buffer-iterator");
|
|
5
|
+
const to_date_1 = require("./to-date");
|
|
6
|
+
const parseMvhd = ({ iterator, offset, size, }) => {
|
|
7
|
+
const version = iterator.getUint8();
|
|
8
|
+
// Flags, we discard them
|
|
9
|
+
iterator.discard(3);
|
|
10
|
+
const creationTime = version === 1 ? iterator.getUint64() : iterator.getUint32();
|
|
11
|
+
const modificationTime = version === 1 ? iterator.getUint64() : iterator.getUint32();
|
|
12
|
+
const timeScale = iterator.getUint32();
|
|
13
|
+
const durationInUnits = version === 1 ? iterator.getUint64() : iterator.getUint32();
|
|
14
|
+
const durationInSeconds = Number(durationInUnits) / timeScale;
|
|
15
|
+
const rateArray = iterator.getSlice(4);
|
|
16
|
+
const rateView = (0, buffer_iterator_1.getArrayBufferIterator)(rateArray, rateArray.length);
|
|
17
|
+
const rate = rateView.getInt8() * 10 +
|
|
18
|
+
rateView.getInt8() +
|
|
19
|
+
rateView.getInt8() * 0.1 +
|
|
20
|
+
rateView.getInt8() * 0.01;
|
|
21
|
+
const volumeArray = iterator.getSlice(2);
|
|
22
|
+
const volumeView = (0, buffer_iterator_1.getArrayBufferIterator)(volumeArray, volumeArray.length);
|
|
23
|
+
const volume = volumeView.getInt8() + volumeView.getInt8() * 0.1;
|
|
24
|
+
// reserved 16bit
|
|
25
|
+
iterator.discard(2);
|
|
26
|
+
// reserved 32bit x2
|
|
27
|
+
iterator.discard(4);
|
|
28
|
+
iterator.discard(4);
|
|
29
|
+
// matrix
|
|
30
|
+
const matrix = [
|
|
31
|
+
iterator.getFixedPointSigned1616Number(),
|
|
32
|
+
iterator.getFixedPointSigned1616Number(),
|
|
33
|
+
iterator.getFixedPointSigned230Number(),
|
|
34
|
+
iterator.getFixedPointSigned1616Number(),
|
|
35
|
+
iterator.getFixedPointSigned1616Number(),
|
|
36
|
+
iterator.getFixedPointSigned230Number(),
|
|
37
|
+
iterator.getFixedPointSigned1616Number(),
|
|
38
|
+
iterator.getFixedPointSigned1616Number(),
|
|
39
|
+
iterator.getFixedPointSigned230Number(),
|
|
40
|
+
];
|
|
41
|
+
// pre-defined
|
|
42
|
+
iterator.discard(4 * 6);
|
|
43
|
+
// next track id
|
|
44
|
+
const nextTrackId = iterator.getUint32();
|
|
45
|
+
volumeView.destroy();
|
|
46
|
+
const bytesRemaining = size - (iterator.counter.getOffset() - offset);
|
|
47
|
+
if (bytesRemaining !== 0) {
|
|
48
|
+
throw new Error('expected 0 bytes ' + bytesRemaining);
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
creationTime: (0, to_date_1.toUnixTimestamp)(Number(creationTime)),
|
|
52
|
+
modificationTime: (0, to_date_1.toUnixTimestamp)(Number(modificationTime)),
|
|
53
|
+
timeScale,
|
|
54
|
+
durationInUnits: Number(durationInUnits),
|
|
55
|
+
durationInSeconds,
|
|
56
|
+
rate,
|
|
57
|
+
volume,
|
|
58
|
+
matrix: matrix,
|
|
59
|
+
nextTrackId,
|
|
60
|
+
type: 'mvhd-box',
|
|
61
|
+
boxSize: size,
|
|
62
|
+
offset,
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
exports.parseMvhd = parseMvhd;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
type Point = {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
z: number;
|
|
5
|
+
};
|
|
6
|
+
export type IccProfile = {
|
|
7
|
+
size: number;
|
|
8
|
+
preferredCMMType: string;
|
|
9
|
+
profileVersion: string;
|
|
10
|
+
profileDeviceClass: string;
|
|
11
|
+
colorSpace: string;
|
|
12
|
+
pcs: string;
|
|
13
|
+
dateTime: Uint8Array;
|
|
14
|
+
signature: string;
|
|
15
|
+
primaryPlatform: string;
|
|
16
|
+
profileFlags: number;
|
|
17
|
+
deviceManufacturer: string;
|
|
18
|
+
deviceModel: string;
|
|
19
|
+
deviceAttributes: bigint;
|
|
20
|
+
renderingIntent: number;
|
|
21
|
+
pcsIlluminant: [number, number, number];
|
|
22
|
+
profileCreator: string;
|
|
23
|
+
profileId: string;
|
|
24
|
+
entries: Entry[];
|
|
25
|
+
rXYZ: Point | null;
|
|
26
|
+
gXYZ: Point | null;
|
|
27
|
+
bXYZ: Point | null;
|
|
28
|
+
whitePoint: Point | null;
|
|
29
|
+
};
|
|
30
|
+
type Entry = {
|
|
31
|
+
tag: string;
|
|
32
|
+
size: number;
|
|
33
|
+
offset: number;
|
|
34
|
+
};
|
|
35
|
+
export declare const parseIccProfile: (data: Uint8Array) => IccProfile;
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseIccProfile = void 0;
|
|
4
|
+
const buffer_iterator_1 = require("../../buffer-iterator");
|
|
5
|
+
const parseIccProfile = (data) => {
|
|
6
|
+
const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(data, Infinity);
|
|
7
|
+
const size = iterator.getUint32();
|
|
8
|
+
if (size !== data.length) {
|
|
9
|
+
throw new Error('Invalid ICC profile size');
|
|
10
|
+
}
|
|
11
|
+
const preferredCMMType = iterator.getByteString(4);
|
|
12
|
+
const profileVersion = iterator.getByteString(4);
|
|
13
|
+
const profileDeviceClass = iterator.getByteString(4);
|
|
14
|
+
const colorSpace = iterator.getByteString(4);
|
|
15
|
+
const pcs = iterator.getByteString(4);
|
|
16
|
+
const dateTime = iterator.getSlice(12);
|
|
17
|
+
const signature = iterator.getByteString(4);
|
|
18
|
+
if (signature !== 'acsp') {
|
|
19
|
+
throw new Error('Invalid ICC profile signature');
|
|
20
|
+
}
|
|
21
|
+
const primaryPlatform = iterator.getByteString(4);
|
|
22
|
+
const profileFlags = iterator.getUint32();
|
|
23
|
+
const deviceManufacturer = iterator.getByteString(4);
|
|
24
|
+
const deviceModel = iterator.getByteString(4);
|
|
25
|
+
const deviceAttributes = iterator.getUint64();
|
|
26
|
+
const renderingIntent = iterator.getUint32();
|
|
27
|
+
const pcsIlluminant1 = iterator.getUint32();
|
|
28
|
+
const pcsIlluminant2 = iterator.getUint32();
|
|
29
|
+
const pcsIlluminant3 = iterator.getUint32();
|
|
30
|
+
const profileCreator = iterator.getByteString(4);
|
|
31
|
+
const profileId = iterator.getByteString(16);
|
|
32
|
+
// reserved
|
|
33
|
+
iterator.discard(28);
|
|
34
|
+
const tagCount = iterator.getUint32();
|
|
35
|
+
const entries = [];
|
|
36
|
+
for (let i = 0; i < tagCount; i++) {
|
|
37
|
+
const entry = {
|
|
38
|
+
tag: iterator.getByteString(4),
|
|
39
|
+
offset: iterator.getUint32(),
|
|
40
|
+
size: iterator.getUint32(),
|
|
41
|
+
};
|
|
42
|
+
entries.push(entry);
|
|
43
|
+
}
|
|
44
|
+
let lastOffset = -1;
|
|
45
|
+
let rXYZ = null;
|
|
46
|
+
let gXYZ = null;
|
|
47
|
+
let bXYZ = null;
|
|
48
|
+
let whitePoint = null;
|
|
49
|
+
for (const entry of entries) {
|
|
50
|
+
const found = data.slice(entry.offset, entry.offset + entry.size);
|
|
51
|
+
if (entry.tag === 'rXYZ' ||
|
|
52
|
+
entry.tag === 'gXYZ' ||
|
|
53
|
+
entry.tag === 'bXYZ' ||
|
|
54
|
+
entry.tag === 'wtpt') {
|
|
55
|
+
const it = (0, buffer_iterator_1.getArrayBufferIterator)(found, Infinity);
|
|
56
|
+
it.discard(4);
|
|
57
|
+
const x = it.getInt32() / 65536;
|
|
58
|
+
const y = it.getInt32() / 65536;
|
|
59
|
+
const z = it.getInt32() / 65536;
|
|
60
|
+
it.destroy();
|
|
61
|
+
const point = { x, y, z };
|
|
62
|
+
if (entry.tag === 'rXYZ') {
|
|
63
|
+
rXYZ = point;
|
|
64
|
+
}
|
|
65
|
+
else if (entry.tag === 'gXYZ') {
|
|
66
|
+
gXYZ = point;
|
|
67
|
+
}
|
|
68
|
+
else if (entry.tag === 'bXYZ') {
|
|
69
|
+
bXYZ = point;
|
|
70
|
+
}
|
|
71
|
+
else if (entry.tag === 'wtpt') {
|
|
72
|
+
whitePoint = point;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (lastOffset !== -1) {
|
|
76
|
+
const bytesToAdvance = entry.offset - lastOffset;
|
|
77
|
+
const bytesToGoBackwards = entry.size - bytesToAdvance;
|
|
78
|
+
if (bytesToGoBackwards > 0) {
|
|
79
|
+
iterator.counter.decrement(bytesToGoBackwards);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
lastOffset = entry.offset;
|
|
83
|
+
}
|
|
84
|
+
const profile = {
|
|
85
|
+
size,
|
|
86
|
+
preferredCMMType,
|
|
87
|
+
profileVersion,
|
|
88
|
+
profileDeviceClass,
|
|
89
|
+
colorSpace,
|
|
90
|
+
pcs,
|
|
91
|
+
dateTime,
|
|
92
|
+
signature,
|
|
93
|
+
primaryPlatform,
|
|
94
|
+
profileFlags,
|
|
95
|
+
deviceManufacturer,
|
|
96
|
+
deviceModel,
|
|
97
|
+
deviceAttributes,
|
|
98
|
+
renderingIntent,
|
|
99
|
+
pcsIlluminant: [
|
|
100
|
+
pcsIlluminant1 / 65536,
|
|
101
|
+
pcsIlluminant2 / 65536,
|
|
102
|
+
pcsIlluminant3 / 65536,
|
|
103
|
+
],
|
|
104
|
+
profileCreator,
|
|
105
|
+
profileId,
|
|
106
|
+
entries,
|
|
107
|
+
bXYZ,
|
|
108
|
+
gXYZ,
|
|
109
|
+
rXYZ,
|
|
110
|
+
whitePoint,
|
|
111
|
+
};
|
|
112
|
+
iterator.destroy();
|
|
113
|
+
return profile;
|
|
114
|
+
};
|
|
115
|
+
exports.parseIccProfile = parseIccProfile;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { BufferIterator } from '../../buffer-iterator';
|
|
2
|
+
import type { LogLevel } from '../../log';
|
|
3
|
+
import type { Options, ParseMediaFields } from '../../options';
|
|
4
|
+
import type { IsoBaseMediaBox, IsoBaseMediaStructure, ParseResult } from '../../parse-result';
|
|
5
|
+
import type { BoxAndNext, PartialMdatBox } from '../../parse-video';
|
|
6
|
+
import type { ParserContext } from '../../parser-context';
|
|
7
|
+
export declare const parseMdatPartially: ({ iterator, boxSize, fileOffset, parsedBoxes, options, signal, }: {
|
|
8
|
+
iterator: BufferIterator;
|
|
9
|
+
boxSize: number;
|
|
10
|
+
fileOffset: number;
|
|
11
|
+
parsedBoxes: IsoBaseMediaBox[];
|
|
12
|
+
options: ParserContext;
|
|
13
|
+
signal: AbortSignal | null;
|
|
14
|
+
}) => Promise<BoxAndNext>;
|
|
15
|
+
export declare const processBox: ({ iterator, allowIncompleteBoxes, parsedBoxes, options, signal, logLevel, fields, }: {
|
|
16
|
+
iterator: BufferIterator;
|
|
17
|
+
allowIncompleteBoxes: boolean;
|
|
18
|
+
parsedBoxes: IsoBaseMediaBox[];
|
|
19
|
+
options: ParserContext;
|
|
20
|
+
signal: AbortSignal | null;
|
|
21
|
+
logLevel: LogLevel;
|
|
22
|
+
fields: Options<ParseMediaFields>;
|
|
23
|
+
}) => Promise<BoxAndNext>;
|
|
24
|
+
export declare const parseIsoBaseMediaBoxes: ({ iterator, maxBytes, allowIncompleteBoxes, initialBoxes, options, continueMdat, signal, logLevel, fields, }: {
|
|
25
|
+
iterator: BufferIterator;
|
|
26
|
+
maxBytes: number;
|
|
27
|
+
allowIncompleteBoxes: boolean;
|
|
28
|
+
initialBoxes: IsoBaseMediaBox[];
|
|
29
|
+
options: ParserContext;
|
|
30
|
+
continueMdat: false | PartialMdatBox;
|
|
31
|
+
signal: AbortSignal | null;
|
|
32
|
+
logLevel: LogLevel;
|
|
33
|
+
fields: Options<ParseMediaFields>;
|
|
34
|
+
}) => Promise<ParseResult<IsoBaseMediaStructure>>;
|