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 Zhuimport com.coremedia.iso.BoxParser; 20dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.IsoTypeReader; 21dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.IsoTypeWriter; 22dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.boxes.Box; 23dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.boxes.ContainerBox; 24dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 25dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.nio.ByteBuffer; 26dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 27dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/** 28dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Contains basic information about the audio samples in this track. Format-specific information 29dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * is appened as boxes after the data described in ISO/IEC 14496-12 chapter 8.16.2. 30dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */ 31dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupublic class AudioSampleEntry extends SampleEntry implements ContainerBox { 32dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 33dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static final String TYPE1 = "samr"; 34dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static final String TYPE2 = "sawb"; 35dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static final String TYPE3 = "mp4a"; 36dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static final String TYPE4 = "drms"; 37dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static final String TYPE5 = "alac"; 38dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static final String TYPE7 = "owma"; 39dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static final String TYPE8 = "ac-3"; /* ETSI TS 102 366 1.2.1 Annex F */ 40dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static final String TYPE9 = "ec-3"; /* ETSI TS 102 366 1.2.1 Annex F */ 41dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static final String TYPE10 = "mlpa"; 42dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static final String TYPE11 = "dtsl"; 43dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static final String TYPE12 = "dtsh"; 44dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static final String TYPE13 = "dtse"; 45dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 46dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu /** 47dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Identifier for an encrypted audio track. 48dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * 49dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * @see com.coremedia.iso.boxes.ProtectionSchemeInformationBox 50dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */ 51dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static final String TYPE_ENCRYPTED = "enca"; 52dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 53dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private int channelCount; 54dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private int sampleSize; 55dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private long sampleRate; 56dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private int soundVersion; 57dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private int compressionId; 58dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private int packetSize; 59dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private long samplesPerPacket; 60dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private long bytesPerPacket; 61dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private long bytesPerFrame; 62dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private long bytesPerSample; 63dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 64dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private int reserved1; 65dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private long reserved2; 66dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private byte[] soundVersion2Data; 67dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private BoxParser boxParser; 68dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 69dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public AudioSampleEntry(String type) { 70dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu super(type); 71dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 72dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 73dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getChannelCount() { 74dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return channelCount; 75dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 76dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 77dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getSampleSize() { 78dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return sampleSize; 79dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 80dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 81dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public long getSampleRate() { 82dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return sampleRate; 83dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 84dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 85dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getSoundVersion() { 86dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return soundVersion; 87dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 88dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 89dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getCompressionId() { 90dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return compressionId; 91dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 92dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 93dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getPacketSize() { 94dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return packetSize; 95dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 96dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 97dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public long getSamplesPerPacket() { 98dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return samplesPerPacket; 99dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 100dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 101dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public long getBytesPerPacket() { 102dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return bytesPerPacket; 103dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 104dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 105dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public long getBytesPerFrame() { 106dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return bytesPerFrame; 107dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 108dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 109dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public long getBytesPerSample() { 110dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return bytesPerSample; 111dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 112dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 113dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public byte[] getSoundVersion2Data() { 114dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return soundVersion2Data; 115dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 116dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 117dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getReserved1() { 118dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return reserved1; 119dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 120dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 121dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public long getReserved2() { 122dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return reserved2; 123dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 124dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 125dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setChannelCount(int channelCount) { 126dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.channelCount = channelCount; 127dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 128dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 129dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setSampleSize(int sampleSize) { 130dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.sampleSize = sampleSize; 131dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 132dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 133dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setSampleRate(long sampleRate) { 134dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.sampleRate = sampleRate; 135dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 136dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 137dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setSoundVersion(int soundVersion) { 138dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.soundVersion = soundVersion; 139dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 140dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 141dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setCompressionId(int compressionId) { 142dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.compressionId = compressionId; 143dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 144dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 145dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setPacketSize(int packetSize) { 146dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.packetSize = packetSize; 147dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 148dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 149dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setSamplesPerPacket(long samplesPerPacket) { 150dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.samplesPerPacket = samplesPerPacket; 151dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 152dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 153dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setBytesPerPacket(long bytesPerPacket) { 154dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.bytesPerPacket = bytesPerPacket; 155dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 156dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 157dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setBytesPerFrame(long bytesPerFrame) { 158dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.bytesPerFrame = bytesPerFrame; 159dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 160dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 161dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setBytesPerSample(long bytesPerSample) { 162dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.bytesPerSample = bytesPerSample; 163dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 164dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 165dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setReserved1(int reserved1) { 166dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.reserved1 = reserved1; 167dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 168dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 169dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setReserved2(long reserved2) { 170dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.reserved2 = reserved2; 171dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 172dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 173dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setSoundVersion2Data(byte[] soundVersion2Data) { 174dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.soundVersion2Data = soundVersion2Data; 175dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 176dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 177dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setBoxParser(BoxParser boxParser) { 178dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.boxParser = boxParser; 179dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 180dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 181dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 182dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void _parseDetails(ByteBuffer content) { 183dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu _parseReservedAndDataReferenceIndex(content); //parses the six reserved bytes and dataReferenceIndex 184dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu // 8 bytes already parsed 185dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //reserved bits - used by qt 186dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu soundVersion = IsoTypeReader.readUInt16(content); 187dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 188dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //reserved 189dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu reserved1 = IsoTypeReader.readUInt16(content); 190dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu reserved2 = IsoTypeReader.readUInt32(content); 191dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 192dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu channelCount = IsoTypeReader.readUInt16(content); 193dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sampleSize = IsoTypeReader.readUInt16(content); 194dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //reserved bits - used by qt 195dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu compressionId = IsoTypeReader.readUInt16(content); 196dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //reserved bits - used by qt 197dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu packetSize = IsoTypeReader.readUInt16(content); 198dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //sampleRate = in.readFixedPoint1616(); 199dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sampleRate = IsoTypeReader.readUInt32(content); 200dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (!type.equals("mlpa")) { 201dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sampleRate = sampleRate >>> 16; 202dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 203dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 204dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //more qt stuff - see http://mp4v2.googlecode.com/svn-history/r388/trunk/src/atom_sound.cpp 205dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (soundVersion > 0) { 206dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu samplesPerPacket = IsoTypeReader.readUInt32(content); 207dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu bytesPerPacket = IsoTypeReader.readUInt32(content); 208dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu bytesPerFrame = IsoTypeReader.readUInt32(content); 209dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu bytesPerSample = IsoTypeReader.readUInt32(content); 210dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 211dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (soundVersion == 2) { 212dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 213dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu soundVersion2Data = new byte[20]; 214dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu content.get(20); 215dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 216dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu _parseChildBoxes(content); 217dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 218dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 219dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 220dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 221dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 222dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu protected long getContentSize() { 223dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu long contentSize = 28; 224dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu contentSize += soundVersion > 0 ? 16 : 0; 225dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu contentSize += soundVersion == 2 ? 20 : 0; 226dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu for (Box boxe : boxes) { 227dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu contentSize += boxe.getSize(); 228dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 229dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return contentSize; 230dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 231dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 232dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 233dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public String toString() { 234dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return "AudioSampleEntry{" + 235dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "bytesPerSample=" + bytesPerSample + 236dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ", bytesPerFrame=" + bytesPerFrame + 237dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ", bytesPerPacket=" + bytesPerPacket + 238dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ", samplesPerPacket=" + samplesPerPacket + 239dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ", packetSize=" + packetSize + 240dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ", compressionId=" + compressionId + 241dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ", soundVersion=" + soundVersion + 242dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ", sampleRate=" + sampleRate + 243dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ", sampleSize=" + sampleSize + 244dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ", channelCount=" + channelCount + 245dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ", boxes=" + getBoxes() + 246dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu '}'; 247dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 248dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 249dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 250dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu protected void getContent(ByteBuffer byteBuffer) { 251dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu _writeReservedAndDataReferenceIndex(byteBuffer); 252dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt16(byteBuffer, soundVersion); 253dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt16(byteBuffer, reserved1); 254dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt32(byteBuffer, reserved2); 255dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt16(byteBuffer, channelCount); 256dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt16(byteBuffer, sampleSize); 257dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt16(byteBuffer, compressionId); 258dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt16(byteBuffer, packetSize); 259dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //isos.writeFixedPont1616(getSampleRate()); 260dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (type.equals("mlpa")) { 261dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt32(byteBuffer, getSampleRate()); 262dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } else { 263dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt32(byteBuffer, getSampleRate() << 16); 264dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 265dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 266dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (soundVersion > 0) { 267dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt32(byteBuffer, samplesPerPacket); 268dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt32(byteBuffer, bytesPerPacket); 269dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt32(byteBuffer, bytesPerFrame); 270dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt32(byteBuffer, bytesPerSample); 271dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 272dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 273dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (soundVersion == 2) { 274dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu byteBuffer.put(soundVersion2Data); 275dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 276dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu _writeChildBoxes(byteBuffer); 277dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 278dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu} 279