Home | History | Annotate | Download | only in boxes
      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;
     18 
     19 import com.coremedia.iso.IsoTypeReader;
     20 import com.coremedia.iso.IsoTypeWriter;
     21 import com.googlecode.mp4parser.AbstractFullBox;
     22 
     23 import java.nio.ByteBuffer;
     24 import java.util.LinkedList;
     25 import java.util.List;
     26 
     27 import static com.googlecode.mp4parser.util.CastUtils.l2i;
     28 
     29 /*
     30 aligned(8) class SampleAuxiliaryInformationOffsetsBox
     31             extends FullBox(saio, version, flags)
     32 {
     33             if (flags & 1) {
     34                         unsigned int(32) aux_info_type;
     35                         unsigned int(32) aux_info_type_parameter;
     36             }
     37             unsigned int(32) entry_count;
     38             if ( version == 0 )
     39             {
     40                         unsigned int(32) offset[ entry_count ];
     41             }
     42             else
     43             {
     44                         unsigned int(64) offset[ entry_count ];
     45             }
     46 }
     47  */
     48 public class SampleAuxiliaryInformationOffsetsBox extends AbstractFullBox {
     49     public static final String TYPE = "saio";
     50 
     51     private List<Long> offsets = new LinkedList<Long>();
     52     private long auxInfoType;
     53     private long auxInfoTypeParameter;
     54 
     55     public SampleAuxiliaryInformationOffsetsBox() {
     56         super(TYPE);
     57     }
     58 
     59     @Override
     60     protected long getContentSize() {
     61         return 8 + (getVersion() == 0 ? 4 * offsets.size() : 8 * offsets.size()) + ((getFlags() & 1) == 1 ? 8 : 0);
     62     }
     63 
     64     @Override
     65     protected void getContent(ByteBuffer byteBuffer) {
     66         writeVersionAndFlags(byteBuffer);
     67         if ((getFlags() & 1) == 1) {
     68             IsoTypeWriter.writeUInt32(byteBuffer, auxInfoType);
     69             IsoTypeWriter.writeUInt32(byteBuffer, auxInfoTypeParameter);
     70         }
     71 
     72         IsoTypeWriter.writeUInt32(byteBuffer, offsets.size());
     73         for (Long offset : offsets) {
     74             if (getVersion() == 0) {
     75                 IsoTypeWriter.writeUInt32(byteBuffer, offset);
     76             } else {
     77                 IsoTypeWriter.writeUInt64(byteBuffer, offset);
     78             }
     79         }
     80     }
     81 
     82     @Override
     83     public void _parseDetails(ByteBuffer content) {
     84         parseVersionAndFlags(content);
     85 
     86         if ((getFlags() & 1) == 1) {
     87             auxInfoType = IsoTypeReader.readUInt32(content);
     88             auxInfoTypeParameter = IsoTypeReader.readUInt32(content);
     89         }
     90 
     91         int entryCount = l2i(IsoTypeReader.readUInt32(content));
     92         offsets.clear();
     93 
     94         for (int i = 0; i < entryCount; i++) {
     95             if (getVersion() == 0) {
     96                 offsets.add(IsoTypeReader.readUInt32(content));
     97             } else {
     98                 offsets.add(IsoTypeReader.readUInt64(content));
     99             }
    100         }
    101     }
    102 
    103 
    104     public long getAuxInfoType() {
    105         return auxInfoType;
    106     }
    107 
    108     public void setAuxInfoType(long auxInfoType) {
    109         this.auxInfoType = auxInfoType;
    110     }
    111 
    112     public long getAuxInfoTypeParameter() {
    113         return auxInfoTypeParameter;
    114     }
    115 
    116     public void setAuxInfoTypeParameter(long auxInfoTypeParameter) {
    117         this.auxInfoTypeParameter = auxInfoTypeParameter;
    118     }
    119 
    120     public List<Long> getOffsets() {
    121         return offsets;
    122     }
    123 
    124     public void setOffsets(List<Long> offsets) {
    125         this.offsets = offsets;
    126     }
    127 }
    128