Home | History | Annotate | Download | only in boxes
      1 /*
      2  * Copyright 2008 CoreMedia AG, Hamburg
      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 
     22 import java.nio.ByteBuffer;
     23 
     24 import static com.googlecode.mp4parser.util.CastUtils.l2i;
     25 
     26 /**
     27  * The chunk offset table gives the index of each chunk into the containing file. Defined in ISO/IEC 14496-12.
     28  */
     29 public class StaticChunkOffsetBox extends ChunkOffsetBox {
     30     public static final String TYPE = "stco";
     31 
     32     private long[] chunkOffsets = new long[0];
     33 
     34     public StaticChunkOffsetBox() {
     35         super(TYPE);
     36     }
     37 
     38     public long[] getChunkOffsets() {
     39         return chunkOffsets;
     40     }
     41 
     42     protected long getContentSize() {
     43         return 8 + chunkOffsets.length * 4;
     44     }
     45 
     46     public void setChunkOffsets(long[] chunkOffsets) {
     47         this.chunkOffsets = chunkOffsets;
     48     }
     49 
     50     @Override
     51     public void _parseDetails(ByteBuffer content) {
     52         parseVersionAndFlags(content);
     53         int entryCount = l2i(IsoTypeReader.readUInt32(content));
     54         chunkOffsets = new long[entryCount];
     55         for (int i = 0; i < entryCount; i++) {
     56             chunkOffsets[i] = IsoTypeReader.readUInt32(content);
     57         }
     58 
     59     }
     60 
     61     @Override
     62     protected void getContent(ByteBuffer byteBuffer) {
     63         writeVersionAndFlags(byteBuffer);
     64         IsoTypeWriter.writeUInt32(byteBuffer, chunkOffsets.length);
     65         for (long chunkOffset : chunkOffsets) {
     66             IsoTypeWriter.writeUInt32(byteBuffer, chunkOffset);
     67         }
     68     }
     69 
     70 
     71 }
     72