Home | History | Annotate | Download | only in sampleentry
      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.sampleentry;
     18 
     19 
     20 import com.coremedia.iso.IsoFile;
     21 import com.coremedia.iso.IsoTypeReader;
     22 import com.coremedia.iso.IsoTypeWriter;
     23 import com.googlecode.mp4parser.AbstractBox;
     24 
     25 import java.nio.ByteBuffer;
     26 
     27 /**
     28  * AMR audio format specific subbox of an audio sample entry.
     29  *
     30  * @see com.coremedia.iso.boxes.sampleentry.AudioSampleEntry
     31  */
     32 public class AmrSpecificBox extends AbstractBox {
     33     public static final String TYPE = "damr";
     34 
     35     private String vendor;
     36     private int decoderVersion;
     37     private int modeSet;
     38     private int modeChangePeriod;
     39     private int framesPerSample;
     40 
     41     public AmrSpecificBox() {
     42         super(TYPE);
     43     }
     44 
     45     public String getVendor() {
     46         return vendor;
     47     }
     48 
     49     public int getDecoderVersion() {
     50         return decoderVersion;
     51     }
     52 
     53     public int getModeSet() {
     54         return modeSet;
     55     }
     56 
     57     public int getModeChangePeriod() {
     58         return modeChangePeriod;
     59     }
     60 
     61     public int getFramesPerSample() {
     62         return framesPerSample;
     63     }
     64 
     65     protected long getContentSize() {
     66         return 9;
     67     }
     68 
     69     @Override
     70     public void _parseDetails(ByteBuffer content) {
     71         byte[] v = new byte[4];
     72         content.get(v);
     73         vendor = IsoFile.bytesToFourCC(v);
     74 
     75         decoderVersion = IsoTypeReader.readUInt8(content);
     76         modeSet = IsoTypeReader.readUInt16(content);
     77         modeChangePeriod = IsoTypeReader.readUInt8(content);
     78         framesPerSample = IsoTypeReader.readUInt8(content);
     79 
     80     }
     81 
     82 
     83     public void getContent(ByteBuffer byteBuffer) {
     84         byteBuffer.put(IsoFile.fourCCtoBytes(vendor));
     85         IsoTypeWriter.writeUInt8(byteBuffer, decoderVersion);
     86         IsoTypeWriter.writeUInt16(byteBuffer, modeSet);
     87         IsoTypeWriter.writeUInt8(byteBuffer, modeChangePeriod);
     88         IsoTypeWriter.writeUInt8(byteBuffer, framesPerSample);
     89     }
     90 
     91     public String toString() {
     92         StringBuilder buffer = new StringBuilder();
     93         buffer.append("AmrSpecificBox[vendor=").append(getVendor());
     94         buffer.append(";decoderVersion=").append(getDecoderVersion());
     95         buffer.append(";modeSet=").append(getModeSet());
     96         buffer.append(";modeChangePeriod=").append(getModeChangePeriod());
     97         buffer.append(";framesPerSample=").append(getFramesPerSample());
     98         buffer.append("]");
     99         return buffer.toString();
    100     }
    101 }
    102