1 /* 2 * Copyright 2009 castLabs GmbH, Berlin 3 * 4 * Licensed under the Apache License, Version 2.0 (the License); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an AS IS BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.coremedia.iso.boxes.apple; 18 19 import com.coremedia.iso.IsoFile; 20 import com.coremedia.iso.IsoTypeReader; 21 import com.coremedia.iso.IsoTypeWriter; 22 import com.coremedia.iso.Utf8; 23 import com.googlecode.mp4parser.AbstractFullBox; 24 25 import java.nio.ByteBuffer; 26 27 import static com.googlecode.mp4parser.util.CastUtils.l2i; 28 29 public class AppleDataReferenceBox extends AbstractFullBox { 30 public static final String TYPE = "rdrf"; 31 private int dataReferenceSize; 32 private String dataReferenceType; 33 private String dataReference; 34 AppleDataReferenceBox()35 public AppleDataReferenceBox() { 36 super(TYPE); 37 } 38 39 getContentSize()40 protected long getContentSize() { 41 return 12 + dataReferenceSize; 42 } 43 44 @Override _parseDetails(ByteBuffer content)45 public void _parseDetails(ByteBuffer content) { 46 parseVersionAndFlags(content); 47 dataReferenceType = IsoTypeReader.read4cc(content); 48 dataReferenceSize = l2i(IsoTypeReader.readUInt32(content)); 49 dataReference = IsoTypeReader.readString(content, dataReferenceSize); 50 } 51 52 @Override getContent(ByteBuffer byteBuffer)53 protected void getContent(ByteBuffer byteBuffer) { 54 writeVersionAndFlags(byteBuffer); 55 byteBuffer.put(IsoFile.fourCCtoBytes(dataReferenceType)); 56 IsoTypeWriter.writeUInt32(byteBuffer, dataReferenceSize); 57 byteBuffer.put(Utf8.convert(dataReference)); 58 } 59 getDataReferenceSize()60 public long getDataReferenceSize() { 61 return dataReferenceSize; 62 } 63 getDataReferenceType()64 public String getDataReferenceType() { 65 return dataReferenceType; 66 } 67 getDataReference()68 public String getDataReference() { 69 return dataReference; 70 } 71 } 72