| package com.coremedia.iso.boxes.apple; |
| |
| import com.googlecode.mp4parser.AbstractFullBox; |
| |
| import java.nio.ByteBuffer; |
| |
| /** |
| * Most stupid box of the world. Encapsulates actual data within |
| */ |
| public final class AppleDataBox extends AbstractFullBox { |
| public static final String TYPE = "data"; |
| |
| private byte[] fourBytes = new byte[4]; |
| private byte[] data; |
| |
| private static AppleDataBox getEmpty() { |
| AppleDataBox appleDataBox = new AppleDataBox(); |
| appleDataBox.setVersion(0); |
| appleDataBox.setFourBytes(new byte[4]); |
| return appleDataBox; |
| } |
| |
| public static AppleDataBox getStringAppleDataBox() { |
| AppleDataBox appleDataBox = getEmpty(); |
| appleDataBox.setFlags(1); |
| appleDataBox.setData(new byte[]{0}); |
| return appleDataBox; |
| } |
| |
| public static AppleDataBox getUint8AppleDataBox() { |
| AppleDataBox appleDataBox = new AppleDataBox(); |
| appleDataBox.setFlags(21); |
| appleDataBox.setData(new byte[]{0}); |
| return appleDataBox; |
| } |
| |
| public static AppleDataBox getUint16AppleDataBox() { |
| AppleDataBox appleDataBox = new AppleDataBox(); |
| appleDataBox.setFlags(21); |
| appleDataBox.setData(new byte[]{0, 0}); |
| return appleDataBox; |
| } |
| |
| public static AppleDataBox getUint32AppleDataBox() { |
| AppleDataBox appleDataBox = new AppleDataBox(); |
| appleDataBox.setFlags(21); |
| appleDataBox.setData(new byte[]{0, 0, 0, 0}); |
| return appleDataBox; |
| } |
| |
| public AppleDataBox() { |
| super(TYPE); |
| } |
| |
| protected long getContentSize() { |
| return data.length + 8; |
| } |
| |
| public void setData(byte[] data) { |
| this.data = new byte[data.length]; |
| System.arraycopy(data, 0, this.data, 0, data.length); |
| } |
| |
| public void setFourBytes(byte[] fourBytes) { |
| System.arraycopy(fourBytes, 0, this.fourBytes, 0, 4); |
| } |
| |
| @Override |
| public void _parseDetails(ByteBuffer content) { |
| parseVersionAndFlags(content); |
| fourBytes = new byte[4]; |
| content.get(fourBytes); |
| data = new byte[content.remaining()]; |
| content.get(data); |
| } |
| |
| |
| @Override |
| protected void getContent(ByteBuffer byteBuffer) { |
| writeVersionAndFlags(byteBuffer); |
| byteBuffer.put(fourBytes, 0, 4); |
| byteBuffer.put(data); |
| } |
| |
| public byte[] getFourBytes() { |
| return fourBytes; |
| } |
| |
| public byte[] getData() { |
| return data; |
| } |
| } |