UNPKG

@isomp4/box-moof

Version:

Implements encoding and decoding of the moof box type

99 lines (98 loc) 3.51 kB
import { FullBoxEncoding, readSafeUInt64BE } from "@isomp4/core"; export 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 || (TrackFragmentHeaderBox = {})); class TrackFragmentHeaderBoxEncoding extends 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 = 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, }; } } export const tfhd = new TrackFragmentHeaderBoxEncoding();