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 UuidBasedProtectionSystemSpecificHeaderBox()35 public UuidBasedProtectionSystemSpecificHeaderBox() { 36 super("uuid", USER_TYPE); 37 } 38 39 @Override getContentSize()40 protected long getContentSize() { 41 return 24 + protectionSpecificHeader.getData().limit(); 42 } 43 44 @Override getUserType()45 public byte[] getUserType() { 46 return USER_TYPE; 47 } 48 49 @Override getContent(ByteBuffer byteBuffer)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 _parseDetails(ByteBuffer content)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 getSystemId()70 public UUID getSystemId() { 71 return systemId; 72 } 73 setSystemId(UUID systemId)74 public void setSystemId(UUID systemId) { 75 this.systemId = systemId; 76 } 77 getSystemIdString()78 public String getSystemIdString() { 79 return systemId.toString(); 80 } 81 getProtectionSpecificHeader()82 public ProtectionSpecificHeader getProtectionSpecificHeader() { 83 return protectionSpecificHeader; 84 } 85 getProtectionSpecificHeaderString()86 public String getProtectionSpecificHeaderString() { 87 return protectionSpecificHeader.toString(); 88 } 89 setProtectionSpecificHeader(ProtectionSpecificHeader protectionSpecificHeader)90 public void setProtectionSpecificHeader(ProtectionSpecificHeader protectionSpecificHeader) { 91 this.protectionSpecificHeader = protectionSpecificHeader; 92 } 93 94 @Override toString()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