UNPKG

@isomp4/box-moof

Version:

Implements encoding and decoding of the moof box type

102 lines (101 loc) 3.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.tfhd = exports.TrackFragmentHeaderBox = void 0; const core_1 = require("@isomp4/core"); var TrackFragmentHeaderBox; (function (TrackFragmentHeaderBox) { function parseFlags(flags) { return { baseDataOffsetPresent: (flags & 0x000001) !== 0, sampleDescriptionIndexPresent: (flags & 0x000002) !== 0, defaultSampleDurationPresent: (flags & 0x000008) !== 0, defaultSampleSizePresent: (flags & 0x000010) !== 0, defaultSampleFlagsPresent: (flags & 0x000020) !== 0, durationIsEmpty: (flags & 0x010000) !== 0, defaultBaseIsMoof: (flags & 0x020000) !== 0, }; } TrackFragmentHeaderBox.parseFlags = parseFlags; })(TrackFragmentHeaderBox = exports.TrackFragmentHeaderBox || (exports.TrackFragmentHeaderBox = {})); class TrackFragmentHeaderBoxEncoding extends core_1.FullBoxEncoding { constructor() { super("tfhd"); } encodingLength(obj) { return super.encodingLength(obj); // TODO implement } encodeTo(obj, buffer) { const requiredBytes = super.encodeTo(obj, buffer); if (requiredBytes > 0) { return requiredBytes; } // let offset = this.encodedBytes; // // TODO implementing encoding // this.encodedBytes = offset; return 0; } decode(buffer, header) { const superBox = super.decode(buffer, header); if (typeof superBox === "number") { return superBox; } let offset = this.decodedBytes; if (buffer.length < offset + 4) { return offset + 4; } const trackID = buffer.readUInt32BE(offset); offset += 4; const flags = TrackFragmentHeaderBox.parseFlags(superBox.flags); let baseDataOffset; if (flags.baseDataOffsetPresent) { if (buffer.length < offset + 8) { return offset + 8; } baseDataOffset = core_1.readSafeUInt64BE(buffer, offset); offset += 8; } let sampleDescriptionIndex; if (flags.sampleDescriptionIndexPresent) { if (buffer.length < offset + 4) { return offset + 4; } sampleDescriptionIndex = buffer.readUInt32BE(offset); offset += 4; } let defaultSampleDuration; if (flags.defaultSampleDurationPresent) { if (buffer.length < offset + 4) { return offset + 4; } defaultSampleDuration = buffer.readUInt32BE(offset); offset += 4; } let defaultSampleSize; if (flags.defaultSampleSizePresent) { if (buffer.length < offset + 4) { return offset + 4; } defaultSampleSize = buffer.readUInt32BE(offset); offset += 4; } let defaultSampleFlags; if (flags.defaultSampleFlagsPresent) { if (buffer.length < offset + 4) { return offset + 4; } defaultSampleFlags = buffer.readUInt32BE(offset); offset += 4; } this.decodedBytes = offset; return { ...superBox, trackID, baseDataOffset, sampleDescriptionIndex, defaultSampleDuration, defaultSampleSize, defaultSampleFlags, }; } } exports.tfhd = new TrackFragmentHeaderBoxEncoding();