Home | History | Annotate | Download | only in piff
      1 package com.googlecode.mp4parser.boxes.piff;
      2 
      3 import com.coremedia.iso.IsoFile;
      4 import com.coremedia.iso.IsoTypeReader;
      5 import com.coremedia.iso.IsoTypeWriter;
      6 import com.googlecode.mp4parser.AbstractFullBox;
      7 import com.googlecode.mp4parser.util.Path;
      8 import com.googlecode.mp4parser.util.UUIDConverter;
      9 
     10 import java.io.FileInputStream;
     11 import java.io.IOException;
     12 import java.lang.Override;import java.lang.String;import java.lang.StringBuilder;import java.nio.ByteBuffer;
     13 import java.util.UUID;
     14 
     15 import static com.googlecode.mp4parser.util.CastUtils.l2i;
     16 
     17 /**
     18  * aligned(8) class UuidBasedProtectionSystemSpecificHeaderBox extends FullBox(uuid,
     19  * extended_type=0xd08a4f18-10f3-4a82-b6c8-32d8aba183d3,
     20  * version=0, flags=0)
     21  * {
     22  * unsigned int(8)[16] SystemID;
     23  * unsigned int(32) DataSize;
     24  * unsigned int(8)[DataSize] Data;
     25  * }
     26  */
     27 public class UuidBasedProtectionSystemSpecificHeaderBox extends AbstractFullBox {
     28     public static byte[] USER_TYPE = new byte[]{(byte) 0xd0, (byte) 0x8a, 0x4f, 0x18, 0x10, (byte) 0xf3, 0x4a, (byte) 0x82,
     29                 (byte) 0xb6, (byte) 0xc8, 0x32, (byte) 0xd8, (byte) 0xab, (byte) 0xa1, (byte) 0x83, (byte) 0xd3};
     30 
     31     UUID systemId;
     32 
     33     ProtectionSpecificHeader protectionSpecificHeader;
     34 
     35     public UuidBasedProtectionSystemSpecificHeaderBox() {
     36         super("uuid", USER_TYPE);
     37     }
     38 
     39     @Override
     40     protected long getContentSize() {
     41         return 24 + protectionSpecificHeader.getData().limit();
     42     }
     43 
     44     @Override
     45     public byte[] getUserType() {
     46         return USER_TYPE;
     47     }
     48 
     49     @Override
     50     protected void getContent(ByteBuffer byteBuffer) {
     51         writeVersionAndFlags(byteBuffer);
     52         IsoTypeWriter.writeUInt64(byteBuffer, systemId.getMostSignificantBits());
     53         IsoTypeWriter.writeUInt64(byteBuffer, systemId.getLeastSignificantBits());
     54         ByteBuffer data = protectionSpecificHeader.getData();
     55         data.rewind();
     56         IsoTypeWriter.writeUInt32(byteBuffer, data.limit());
     57         byteBuffer.put(data);
     58     }
     59 
     60     @Override
     61     protected void _parseDetails(ByteBuffer content) {
     62         parseVersionAndFlags(content);
     63         byte[] systemIdBytes = new byte[16];
     64         content.get(systemIdBytes);
     65         systemId = UUIDConverter.convert(systemIdBytes);
     66         int dataSize = l2i(IsoTypeReader.readUInt32(content));
     67         protectionSpecificHeader = ProtectionSpecificHeader.createFor(systemId, content);
     68     }
     69 
     70     public UUID getSystemId() {
     71         return systemId;
     72     }
     73 
     74     public void setSystemId(UUID systemId) {
     75         this.systemId = systemId;
     76     }
     77 
     78     public String getSystemIdString() {
     79         return systemId.toString();
     80     }
     81 
     82     public ProtectionSpecificHeader getProtectionSpecificHeader() {
     83         return protectionSpecificHeader;
     84     }
     85 
     86     public String getProtectionSpecificHeaderString() {
     87         return protectionSpecificHeader.toString();
     88     }
     89 
     90     public void setProtectionSpecificHeader(ProtectionSpecificHeader protectionSpecificHeader) {
     91         this.protectionSpecificHeader = protectionSpecificHeader;
     92     }
     93 
     94     @Override
     95     public String toString() {
     96         final StringBuilder sb = new StringBuilder();
     97         sb.append("UuidBasedProtectionSystemSpecificHeaderBox");
     98         sb.append("{systemId=").append(systemId.toString());
     99         sb.append(", dataSize=").append(protectionSpecificHeader.getData().limit());
    100         sb.append('}');
    101         return sb.toString();
    102     }
    103 
    104 
    105 
    106 }
    107