Home | History | Annotate | Download | only in apple
      1 package com.coremedia.iso.boxes.apple;
      2 
      3 import com.googlecode.mp4parser.AbstractFullBox;
      4 
      5 import java.nio.ByteBuffer;
      6 
      7 /**
      8  * Most stupid box of the world. Encapsulates actual data within
      9  */
     10 public final class AppleDataBox extends AbstractFullBox {
     11     public static final String TYPE = "data";
     12 
     13     private byte[] fourBytes = new byte[4];
     14     private byte[] data;
     15 
     16     private static AppleDataBox getEmpty() {
     17         AppleDataBox appleDataBox = new AppleDataBox();
     18         appleDataBox.setVersion(0);
     19         appleDataBox.setFourBytes(new byte[4]);
     20         return appleDataBox;
     21     }
     22 
     23     public static AppleDataBox getStringAppleDataBox() {
     24         AppleDataBox appleDataBox = getEmpty();
     25         appleDataBox.setFlags(1);
     26         appleDataBox.setData(new byte[]{0});
     27         return appleDataBox;
     28     }
     29 
     30     public static AppleDataBox getUint8AppleDataBox() {
     31         AppleDataBox appleDataBox = new AppleDataBox();
     32         appleDataBox.setFlags(21);
     33         appleDataBox.setData(new byte[]{0});
     34         return appleDataBox;
     35     }
     36 
     37     public static AppleDataBox getUint16AppleDataBox() {
     38         AppleDataBox appleDataBox = new AppleDataBox();
     39         appleDataBox.setFlags(21);
     40         appleDataBox.setData(new byte[]{0, 0});
     41         return appleDataBox;
     42     }
     43 
     44     public static AppleDataBox getUint32AppleDataBox() {
     45         AppleDataBox appleDataBox = new AppleDataBox();
     46         appleDataBox.setFlags(21);
     47         appleDataBox.setData(new byte[]{0, 0, 0, 0});
     48         return appleDataBox;
     49     }
     50 
     51     public AppleDataBox() {
     52         super(TYPE);
     53     }
     54 
     55     protected long getContentSize() {
     56         return data.length + 8;
     57     }
     58 
     59     public void setData(byte[] data) {
     60         this.data = new byte[data.length];
     61         System.arraycopy(data, 0, this.data, 0, data.length);
     62     }
     63 
     64     public void setFourBytes(byte[] fourBytes) {
     65         System.arraycopy(fourBytes, 0, this.fourBytes, 0, 4);
     66     }
     67 
     68     @Override
     69     public void _parseDetails(ByteBuffer content) {
     70         parseVersionAndFlags(content);
     71         fourBytes = new byte[4];
     72         content.get(fourBytes);
     73         data = new byte[content.remaining()];
     74         content.get(data);
     75     }
     76 
     77 
     78     @Override
     79     protected void getContent(ByteBuffer byteBuffer) {
     80         writeVersionAndFlags(byteBuffer);
     81         byteBuffer.put(fourBytes, 0, 4);
     82         byteBuffer.put(data);
     83     }
     84 
     85     public byte[] getFourBytes() {
     86         return fourBytes;
     87     }
     88 
     89     public byte[] getData() {
     90         return data;
     91     }
     92 }
     93