Home | History | Annotate | Download | only in piff
      1 package com.googlecode.mp4parser.boxes.piff;
      2 
      3 import com.coremedia.iso.IsoTypeReader;
      4 import com.coremedia.iso.IsoTypeWriter;
      5 import com.googlecode.mp4parser.AbstractFullBox;
      6 
      7 import java.nio.ByteBuffer;
      8 
      9 /**
     10  * The syntax of the fields defined in this section, specified in ABNF [RFC5234], is as follows:
     11  * TfxdBox = TfxdBoxLength TfxdBoxType [TfxdBoxLongLength] TfxdBoxUUID TfxdBoxFields
     12  * TfxdBoxChildren
     13  * TfxdBoxType = "u" "u" "i" "d"
     14  * TfxdBoxLength = BoxLength
     15  * TfxdBoxLongLength = LongBoxLength
     16  * TfxdBoxUUID = %x6D %x1D %x9B %x05 %x42 %xD5 %x44 %xE6
     17  * %x80 %xE2 %x14 %x1D %xAF %xF7 %x57 %xB2
     18  * TfxdBoxFields = TfxdBoxVersion
     19  * TfxdBoxFlags
     20  * TfxdBoxDataFields32 / TfxdBoxDataFields64
     21  * TfxdBoxVersion = %x00 / %x01
     22  * TfxdBoxFlags = 24*24 RESERVED_BIT
     23  * TfxdBoxDataFields32 = FragmentAbsoluteTime32
     24  * FragmentDuration32
     25  * TfxdBoxDataFields64 = FragmentAbsoluteTime64
     26  * FragmentDuration64
     27  * FragmentAbsoluteTime64 = UNSIGNED_INT32
     28  * FragmentDuration64 = UNSIGNED_INT32
     29  * FragmentAbsoluteTime64 = UNSIGNED_INT64
     30  * FragmentDuration64 = UNSIGNED_INT64
     31  * TfxdBoxChildren = *( VendorExtensionUUIDBox )
     32  */
     33 //@ExtendedUserType(uuid = "6d1d9b05-42d5-44e6-80e2-141daff757b2")
     34 public class TfxdBox extends AbstractFullBox {
     35     public long fragmentAbsoluteTime;
     36     public long fragmentAbsoluteDuration;
     37 
     38     public TfxdBox() {
     39         super("uuid");
     40     }
     41 
     42     @Override
     43     public byte[] getUserType() {
     44         return new byte[]{(byte) 0x6d, (byte) 0x1d, (byte) 0x9b, (byte) 0x05, (byte) 0x42, (byte) 0xd5, (byte) 0x44,
     45                 (byte) 0xe6, (byte) 0x80, (byte) 0xe2, 0x14, (byte) 0x1d, (byte) 0xaf, (byte) 0xf7, (byte) 0x57, (byte) 0xb2};
     46     }
     47 
     48     @Override
     49     protected long getContentSize() {
     50         return getVersion() == 0x01 ? 20 : 12;
     51     }
     52 
     53     @Override
     54     public void _parseDetails(ByteBuffer content) {
     55         parseVersionAndFlags(content);
     56 
     57         if (getVersion() == 0x01) {
     58             fragmentAbsoluteTime = IsoTypeReader.readUInt64(content);
     59             fragmentAbsoluteDuration = IsoTypeReader.readUInt64(content);
     60         } else {
     61             fragmentAbsoluteTime = IsoTypeReader.readUInt32(content);
     62             fragmentAbsoluteDuration = IsoTypeReader.readUInt32(content);
     63         }
     64     }
     65 
     66     @Override
     67     protected void getContent(ByteBuffer byteBuffer) {
     68         writeVersionAndFlags(byteBuffer);
     69         if (getVersion() == 0x01) {
     70             IsoTypeWriter.writeUInt64(byteBuffer, fragmentAbsoluteTime);
     71             IsoTypeWriter.writeUInt64(byteBuffer, fragmentAbsoluteDuration);
     72         } else {
     73             IsoTypeWriter.writeUInt32(byteBuffer, fragmentAbsoluteTime);
     74             IsoTypeWriter.writeUInt32(byteBuffer, fragmentAbsoluteDuration);
     75         }
     76     }
     77 
     78     public long getFragmentAbsoluteTime() {
     79         return fragmentAbsoluteTime;
     80     }
     81 
     82     public long getFragmentAbsoluteDuration() {
     83         return fragmentAbsoluteDuration;
     84     }
     85 }
     86