@isomp4/box-moof
Version:
Implements encoding and decoding of the moof box type
54 lines (53 loc) • 1.8 kB
JavaScript
import { FullBoxEncoding, readSafeUInt64BE } from "@isomp4/core";
class TrackFragmentBaseMediaDecodeTimeBoxEncoding extends FullBoxEncoding {
constructor() {
super("tfdt");
}
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 baseMediaDecodeTime;
let offset = this.decodedBytes;
switch (superBox.version) {
case 0:
// 32-bit time
if (buffer.length < offset + 4) {
return offset + 4;
}
baseMediaDecodeTime = buffer.readUInt32BE(offset);
offset += 4;
break;
case 1:
// 64-bit time
if (buffer.length < offset + 8) {
return offset + 8;
}
baseMediaDecodeTime = readSafeUInt64BE(buffer, offset);
offset += 8;
break;
default:
throw new Error("Unsupported version of tfdt box: " + superBox.version);
}
this.decodedBytes = offset;
return {
...superBox,
baseMediaDecodeTime,
};
}
}
export const tfdt = new TrackFragmentBaseMediaDecodeTimeBoxEncoding();