1dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/* 2dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Copyright 2008 CoreMedia AG, Hamburg 3dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * 4dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Licensed under the Apache License, Version 2.0 (the License); 5dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * you may not use this file except in compliance with the License. 6dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * You may obtain a copy of the License at 7dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * 8dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * http://www.apache.org/licenses/LICENSE-2.0 9dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * 10dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Unless required by applicable law or agreed to in writing, software 11dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * distributed under the License is distributed on an AS IS BASIS, 12dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * See the License for the specific language governing permissions and 14dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * limitations under the License. 15dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */ 16dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 17dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupackage com.coremedia.iso.boxes.sampleentry; 18dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 19dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 20dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.IsoFile; 21dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.IsoTypeReader; 22dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.IsoTypeWriter; 23dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.googlecode.mp4parser.AbstractBox; 24dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 25dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.nio.ByteBuffer; 26dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 27dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/** 28dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * AMR audio format specific subbox of an audio sample entry. 29dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * 30dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * @see com.coremedia.iso.boxes.sampleentry.AudioSampleEntry 31dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */ 32dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupublic class AmrSpecificBox extends AbstractBox { 33dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static final String TYPE = "damr"; 34dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 35dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private String vendor; 36dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private int decoderVersion; 37dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private int modeSet; 38dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private int modeChangePeriod; 39dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private int framesPerSample; 40dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 41dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public AmrSpecificBox() { 42dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu super(TYPE); 43dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 44dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 45dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public String getVendor() { 46dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return vendor; 47dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 48dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 49dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getDecoderVersion() { 50dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return decoderVersion; 51dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 52dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 53dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getModeSet() { 54dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return modeSet; 55dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 56dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 57dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getModeChangePeriod() { 58dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return modeChangePeriod; 59dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 60dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 61dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getFramesPerSample() { 62dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return framesPerSample; 63dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 64dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 65dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu protected long getContentSize() { 66dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return 9; 67dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 68dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 69dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 70dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void _parseDetails(ByteBuffer content) { 71dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu byte[] v = new byte[4]; 72dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu content.get(v); 73dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu vendor = IsoFile.bytesToFourCC(v); 74dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 75dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu decoderVersion = IsoTypeReader.readUInt8(content); 76dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu modeSet = IsoTypeReader.readUInt16(content); 77dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu modeChangePeriod = IsoTypeReader.readUInt8(content); 78dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu framesPerSample = IsoTypeReader.readUInt8(content); 79dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 80dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 81dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 82dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 83dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void getContent(ByteBuffer byteBuffer) { 84dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu byteBuffer.put(IsoFile.fourCCtoBytes(vendor)); 85dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt8(byteBuffer, decoderVersion); 86dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt16(byteBuffer, modeSet); 87dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt8(byteBuffer, modeChangePeriod); 88dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt8(byteBuffer, framesPerSample); 89dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 90dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 91dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public String toString() { 92dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu StringBuilder buffer = new StringBuilder(); 93dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu buffer.append("AmrSpecificBox[vendor=").append(getVendor()); 94dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu buffer.append(";decoderVersion=").append(getDecoderVersion()); 95dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu buffer.append(";modeSet=").append(getModeSet()); 96dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu buffer.append(";modeChangePeriod=").append(getModeChangePeriod()); 97dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu buffer.append(";framesPerSample=").append(getFramesPerSample()); 98dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu buffer.append("]"); 99dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return buffer.toString(); 100dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 101dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu} 102