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; | |
} | |
} |