package com.googlecode.mp4parser.boxes.piff; import com.coremedia.iso.IsoTypeReader; import com.coremedia.iso.IsoTypeWriter; import com.googlecode.mp4parser.AbstractFullBox; import java.nio.ByteBuffer; /** * The syntax of the fields defined in this section, specified in ABNF [RFC5234], is as follows: * TfxdBox = TfxdBoxLength TfxdBoxType [TfxdBoxLongLength] TfxdBoxUUID TfxdBoxFields * TfxdBoxChildren * TfxdBoxType = "u" "u" "i" "d" * TfxdBoxLength = BoxLength * TfxdBoxLongLength = LongBoxLength * TfxdBoxUUID = %x6D %x1D %x9B %x05 %x42 %xD5 %x44 %xE6 * %x80 %xE2 %x14 %x1D %xAF %xF7 %x57 %xB2 * TfxdBoxFields = TfxdBoxVersion * TfxdBoxFlags * TfxdBoxDataFields32 / TfxdBoxDataFields64 * TfxdBoxVersion = %x00 / %x01 * TfxdBoxFlags = 24*24 RESERVED_BIT * TfxdBoxDataFields32 = FragmentAbsoluteTime32 * FragmentDuration32 * TfxdBoxDataFields64 = FragmentAbsoluteTime64 * FragmentDuration64 * FragmentAbsoluteTime64 = UNSIGNED_INT32 * FragmentDuration64 = UNSIGNED_INT32 * FragmentAbsoluteTime64 = UNSIGNED_INT64 * FragmentDuration64 = UNSIGNED_INT64 * TfxdBoxChildren = *( VendorExtensionUUIDBox ) */ //@ExtendedUserType(uuid = "6d1d9b05-42d5-44e6-80e2-141daff757b2") public class TfxdBox extends AbstractFullBox { public long fragmentAbsoluteTime; public long fragmentAbsoluteDuration; public TfxdBox() { super("uuid"); } @Override public byte[] getUserType() { return new byte[]{(byte) 0x6d, (byte) 0x1d, (byte) 0x9b, (byte) 0x05, (byte) 0x42, (byte) 0xd5, (byte) 0x44, (byte) 0xe6, (byte) 0x80, (byte) 0xe2, 0x14, (byte) 0x1d, (byte) 0xaf, (byte) 0xf7, (byte) 0x57, (byte) 0xb2}; } @Override protected long getContentSize() { return getVersion() == 0x01 ? 20 : 12; } @Override public void _parseDetails(ByteBuffer content) { parseVersionAndFlags(content); if (getVersion() == 0x01) { fragmentAbsoluteTime = IsoTypeReader.readUInt64(content); fragmentAbsoluteDuration = IsoTypeReader.readUInt64(content); } else { fragmentAbsoluteTime = IsoTypeReader.readUInt32(content); fragmentAbsoluteDuration = IsoTypeReader.readUInt32(content); } } @Override protected void getContent(ByteBuffer byteBuffer) { writeVersionAndFlags(byteBuffer); if (getVersion() == 0x01) { IsoTypeWriter.writeUInt64(byteBuffer, fragmentAbsoluteTime); IsoTypeWriter.writeUInt64(byteBuffer, fragmentAbsoluteDuration); } else { IsoTypeWriter.writeUInt32(byteBuffer, fragmentAbsoluteTime); IsoTypeWriter.writeUInt32(byteBuffer, fragmentAbsoluteDuration); } } public long getFragmentAbsoluteTime() { return fragmentAbsoluteTime; } public long getFragmentAbsoluteDuration() { return fragmentAbsoluteDuration; } }