1dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/* 2dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Copyright 2011 castLabs, Berlin 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 Zhupackage com.googlecode.mp4parser.boxes.mp4.objectdescriptors; 17dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 18dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.Hex; 19dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.IsoTypeWriter; 20dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 21dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.io.IOException; 22dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.nio.ByteBuffer; 23dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.util.Arrays; 24dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.util.HashMap; 25dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.util.Map; 26dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 27dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 28dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// 29dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//GetAudioObjectType() 30dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//{ 31dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//audioObjectType; 5 uimsbf 32dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if (audioObjectType == 31) { 33dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//audioObjectType = 32 + audioObjectTypeExt; 6 uimsbf 34dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 35dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//return audioObjectType; 36dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 37dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//AudioSpecificConfig () 38dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//{ 39dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//audioObjectType = GetAudioObjectType(); 40dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//samplingFrequencyIndex; 4 bslbf 41dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( samplingFrequencyIndex == 0xf ) { 42dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//samplingFrequency; 24 uimsbf 43dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 44dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//channelConfiguration; 4 bslbf 45dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//sbrPresentFlag = -1; 46dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//psPresentFlag = -1; 47dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( audioObjectType == 5 || 48dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//audioObjectType == 29 ) { 49dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//extensionAudioObjectType = 5; 50dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//sbrPresentFlag = 1; 51dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( audioObjectType == 29 ) { 52dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//psPresentFlag = 1; 53dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 54dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//extensionSamplingFrequencyIndex; 4 uimsbf 55dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( extensionSamplingFrequencyIndex == 0xf ) 56dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//extensionSamplingFrequency; 24 uimsbf 57dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//audioObjectType = GetAudioObjectType(); 58dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( audioObjectType == 22 ) 59dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//extensionChannelConfiguration; 4 uimsbf 60dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 61dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//else { 62dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//extensionAudioObjectType = 0; 63dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 64dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//switch (audioObjectType) { 65dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 1: 66dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 2: 67dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 3: 68dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 4: 69dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 6: 70dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 7: 71dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 17: 72dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 19: 73dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 20: 74dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 21: 75dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 22: 76dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 23: 77dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//GASpecificConfig(); 78dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//break: 79dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 8: 80dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//CelpSpecificConfig(); 81dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//break; 82dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 9: 83dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//HvxcSpecificConfig(); 84dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//break: 85dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 12: 86dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//TTSSpecificConfig(); 87dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//break; 88dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 13: 89dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 14: 90dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 15: 91dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 16: 92dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//StructuredAudioSpecificConfig(); 93dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//break; 94dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 24: 95dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//ErrorResilientCelpSpecificConfig(); 96dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//break; 97dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 25: 98dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//ErrorResilientHvxcSpecificConfig(); 99dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//break; 100dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 26: 101dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 27: 102dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//ParametricSpecificConfig(); 103dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//break; 104dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// case 28: 105dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//SSCSpecificConfig(); 106dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//break; 107dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 30: 108dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//sacPayloadEmbedding; 1 uimsbf 109dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//SpatialSpecificConfig(); 110dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//break; 111dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 32: 112dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 33: 113dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 34: 114dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//MPEG_1_2_SpecificConfig(); 115dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//break; 116dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 35: 117dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//DSTSpecificConfig(); 118dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//break; 119dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 36: 120dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//fillBits; 5 bslbf 121dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//ALSSpecificConfig(); 122dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//break; 123dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 37: 124dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 38: 125dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//SLSSpecificConfig(); 126dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//break; 127dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 39: 128dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//ELDSpecificConfig(channelConfiguration); 129dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//break: 130dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 40: 131dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 41: 132dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//SymbolicMusicSpecificConfig(); 133dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//break; 134dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//default: 135dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu///* reserved */ 136dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 137dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//switch (audioObjectType) { 138dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 17: 139dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 19: 140dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 20: 141dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 21: 142dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 22: 143dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 23: 144dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 24: 145dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 25: 146dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 26: 147dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 27: 148dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//case 39: 149dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//epConfig; 2 bslbf 150dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( epConfig == 2 || epConfig == 3 ) { 151dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//ErrorProtectionSpecificConfig(); 152dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 153dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( epConfig == 3 ) { 154dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//directMapping; 1 bslbf 155dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( ! directMapping ) { 156dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu///* tbd */ 157dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 158dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 159dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 160dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( extensionAudioObjectType != 5 && bits_to_decode() >= 16 ) { 161dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//syncExtensionType; 11 bslbf 162dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if (syncExtensionType == 0x2b7) { 163dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// extensionAudioObjectType = GetAudioObjectType(); 164dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( extensionAudioObjectType == 5 ) { 165dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//sbrPresentFlag; 1 uimsbf 166dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if (sbrPresentFlag == 1) { 167dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//extensionSamplingFrequencyIndex; 4 uimsbf 168dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( extensionSamplingFrequencyIndex == 0xf ) { 169dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//extensionSamplingFrequency; 24 uimsbf 170dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 171dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( bits_to_decode() >= 12 ) { 172dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//syncExtensionType; 11 bslbf 173dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if (syncExtesionType == 0x548) { 174dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//psPresentFlag; 1 uimsbf 175dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 176dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 177dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 178dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 179dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( extensionAudioObjectType == 22 ) { 180dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//sbrPresentFlag; 1 uimsbf 181dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if (sbrPresentFlag == 1) { 182dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//extensionSamplingFrequencyIndex; 4 uimsbf 183dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( extensionSamplingFrequencyIndex == 0xf ) { 184dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//extensionSamplingFrequency; 24 uimsbf 185dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 186dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 187dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//extensionChannelConfiguration; 4 uimsbf 188dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 189dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 190dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 191dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 192dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// } 193dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// 194dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// TFCodingType 195dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0x0 AAC scaleable 196dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0x1 BSAC 197dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0x2 TwinVQ 198dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0x3 AAC non scaleable (i.e. multichannel) 199dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// 200dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// class TFSpecificConfig( uint(4) samplingFrequencyIndex, uint(4) channelConfiguration ) { 201dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//uint(2) TFCodingType; 202dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//uint(1) frameLength; 203dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//uint(1) dependsOnCoreCoder; 204dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if (dependsOnCoreCoder == 1){ 205dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//uint(14)coreCoderDelay 206dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 207dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if (TFCodingType==BSAC) { 208dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//uint(11) lslayer_length 209dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 210dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//uint (1) extensionFlag; 211dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if (channelConfiguration == 0 ){ 212dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//program_config_element(); 213dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 214dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if (extensionFlag==1){ 215dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//<to be defined in mpeg4 phase 2> 216dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 217dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 218dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// 219dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//program_config_element() 220dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//{ 221dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//element_instance_tag 4 uimsbf 222dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//profile 2 uimsbf 223dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//sampling_frequency_index 4 uimsbf 224dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//num_front_channel_elements 4 uimsbf 225dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//num_side_channel_elements 4 uimsbf 226dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//num_back_channel_elements 4 uimsbf 227dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// num_lfe_channel_elements 2 uimsbf 228dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//num_assoc_data_elements 3 uimsbf 229dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//num_valid_cc_elements 4 uimsbf 230dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//mono_mixdown_present 1 uimsbf 231dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( mono_mixdown_present == 1 ) 232dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//mono_mixdown_element_number 4 uimsbf 233dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//stereo_mixdown_present 1 uimsbf 234dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( stereo_mixdown_present == 1 ) 235dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//stereo_mixdown_element_number 4 uimsbf 236dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//matrix_mixdown_idx_present 1 uimsbf 237dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//if ( matrix_mixdown_idx_present == 1 ) { 238dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//matrix_mixdown_idx 2 uimsbf 239dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//pseudo_surround_enable 1 uimsbf 240dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 241dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//for ( i = 0; i < num_front_channel_elements; i++) { 242dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//front_element_is_cpe[i]; 1 bslbf 243dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//front_element_tag_select[i]; 4 uimsbf 244dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 245dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//for ( i = 0; i < num_side_channel_elements; i++) { 246dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//side_element_is_cpe[i]; 1 bslbf 247dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//side_element_tag_select[i]; 4 uimsbf 248dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 249dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//for ( i = 0; i < num_back_channel_elements; i++) { 250dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//back_element_is_cpe[i]; 1 bslbf 251dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//back_element_tag_select[i]; 4 uimsbf 252dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 253dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//for ( i = 0; i < num_lfe_channel_elements; i++) 254dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//lfe_element_tag_select[i]; 4 uimsbf 255dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//for ( i = 0; i < num_assoc_data_elements; i++) 256dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//assoc_data_element_tag_select[i]; 4 uimsbf 257dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//for ( i = 0; i < num_valid_cc_elements; i++) { 258dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//cc_element_is_ind_sw[i]; 1 uimsbf 259dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//valid_cc_element_tag_select[i]; 4 uimsbf 260dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 261dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//byte_alignment() 262dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//comment_field_bytes 8 uimsbf 263dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//for ( i = 0; i < comment_field_bytes; i++) 264dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//comment_field_data[i]; 8 uimsbf 265dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//} 266dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 267dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu@Descriptor(tags = 0x5, objectTypeIndication = 0x40) 268dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupublic class AudioSpecificConfig extends BaseDescriptor { 269dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu byte[] configBytes; 270dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 271dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static Map<Integer, Integer> samplingFrequencyIndexMap = new HashMap<Integer, Integer>(); 272dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static Map<Integer, String> audioObjectTypeMap = new HashMap<Integer, String>(); 273dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int audioObjectType; 274dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int samplingFrequencyIndex; 275dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int samplingFrequency; 276dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int channelConfiguration; 277dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int extensionAudioObjectType; 278dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int sbrPresentFlag; 279dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int psPresentFlag; 280dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int extensionSamplingFrequencyIndex; 281dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int extensionSamplingFrequency; 282dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int extensionChannelConfiguration; 283dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int sacPayloadEmbedding; 284dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int fillBits; 285dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int epConfig; 286dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int directMapping; 287dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int syncExtensionType; 288dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 289dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //GASpecificConfig 290dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int frameLengthFlag; 291dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int dependsOnCoreCoder; 292dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int coreCoderDelay; 293dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int extensionFlag; 294dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int layerNr; 295dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int numOfSubFrame; 296dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int layer_length; 297dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int aacSectionDataResilienceFlag; 298dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int aacScalefactorDataResilienceFlag; 299dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int aacSpectralDataResilienceFlag; 300dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int extensionFlag3; 301dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu boolean gaSpecificConfig; 302dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 303dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //ParametricSpecificConfig 304dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int isBaseLayer; 305dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int paraMode; 306dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int paraExtensionFlag; 307dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int hvxcVarMode; 308dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int hvxcRateMode; 309dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int erHvxcExtensionFlag; 310dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int var_ScalableFlag; 311dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int hilnQuantMode; 312dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int hilnMaxNumLine; 313dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int hilnSampleRateCode; 314dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int hilnFrameLength; 315dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int hilnContMode; 316dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int hilnEnhaLayer; 317dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int hilnEnhaQuantMode; 318dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu boolean parametricSpecificConfig; 319dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 320dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 321dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void parseDetail(ByteBuffer bb) throws IOException { 322dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ByteBuffer configBytes = bb.slice(); 323dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu configBytes.limit(sizeOfInstance); 324dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu bb.position(bb.position() + sizeOfInstance); 325dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 326dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //copy original bytes to internal array for constructing codec config strings (todo until writing of the config is supported) 327dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.configBytes = new byte[sizeOfInstance]; 328dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu configBytes.get(this.configBytes); 329dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu configBytes.rewind(); 330dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 331dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu BitReaderBuffer bitReaderBuffer = new BitReaderBuffer(configBytes); 332dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectType = getAudioObjectType(bitReaderBuffer); 333dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu samplingFrequencyIndex = bitReaderBuffer.readBits(4); 334dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 335dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (samplingFrequencyIndex == 0xf) { 336dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu samplingFrequency = bitReaderBuffer.readBits(24); 337dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 338dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 339dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu channelConfiguration = bitReaderBuffer.readBits(4); 340dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 341dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (audioObjectType == 5 || 342dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectType == 29) { 343dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extensionAudioObjectType = 5; 344dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sbrPresentFlag = 1; 345dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (audioObjectType == 29) { 346dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu psPresentFlag = 1; 347dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 348dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extensionSamplingFrequencyIndex = bitReaderBuffer.readBits(4); 349dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extensionSamplingFrequencyIndex == 0xf) 350dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extensionSamplingFrequency = bitReaderBuffer.readBits(24); 351dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectType = getAudioObjectType(bitReaderBuffer); 352dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (audioObjectType == 22) 353dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extensionChannelConfiguration = bitReaderBuffer.readBits(4); 354dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } else { 355dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extensionAudioObjectType = 0; 356dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 357dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 358dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu switch (audioObjectType) { 359dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 1: 360dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 2: 361dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 3: 362dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 4: 363dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 6: 364dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 7: 365dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 17: 366dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 19: 367dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 20: 368dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 21: 369dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 22: 370dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 23: 371dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu parseGaSpecificConfig(samplingFrequencyIndex, channelConfiguration, audioObjectType, bitReaderBuffer); 372dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //GASpecificConfig(); 373dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu break; 374dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 8: 375dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't parse CelpSpecificConfig yet"); 376dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //CelpSpecificConfig(); 377dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //break; 378dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 9: 379dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't parse HvxcSpecificConfig yet"); 380dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //HvxcSpecificConfig(); 381dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //break; 382dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 12: 383dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't parse TTSSpecificConfig yet"); 384dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //TTSSpecificConfig(); 385dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //break; 386dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 13: 387dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 14: 388dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 15: 389dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 16: 390dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't parse StructuredAudioSpecificConfig yet"); 391dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //StructuredAudioSpecificConfig(); 392dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //break; 393dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 24: 394dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't parse ErrorResilientCelpSpecificConfig yet"); 395dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //ErrorResilientCelpSpecificConfig(); 396dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //break; 397dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 25: 398dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't parse ErrorResilientHvxcSpecificConfig yet"); 399dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //ErrorResilientHvxcSpecificConfig(); 400dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //break; 401dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 26: 402dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 27: 403dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu parseParametricSpecificConfig(samplingFrequencyIndex, channelConfiguration, audioObjectType, bitReaderBuffer); 404dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //ParametricSpecificConfig(); 405dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu break; 406dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 28: 407dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't parse SSCSpecificConfig yet"); 408dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //SSCSpecificConfig(); 409dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //break; 410dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 30: 411dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sacPayloadEmbedding = bitReaderBuffer.readBits(1); 412dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't parse SpatialSpecificConfig yet"); 413dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //SpatialSpecificConfig(); 414dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //break; 415dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 32: 416dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 33: 417dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 34: 418dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't parse MPEG_1_2_SpecificConfig yet"); 419dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //MPEG_1_2_SpecificConfig(); 420dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //break; 421dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 35: 422dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't parse DSTSpecificConfig yet"); 423dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //DSTSpecificConfig(); 424dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //break; 425dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 36: 426dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu fillBits = bitReaderBuffer.readBits(5); 427dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't parse ALSSpecificConfig yet"); 428dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //ALSSpecificConfig(); 429dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //break; 430dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 37: 431dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 38: 432dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't parse SLSSpecificConfig yet"); 433dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //SLSSpecificConfig(); 434dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //break; 435dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 39: 436dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't parse ELDSpecificConfig yet"); 437dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //ELDSpecificConfig(channelConfiguration); 438dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //break; 439dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 40: 440dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 41: 441dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't parse SymbolicMusicSpecificConfig yet"); 442dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //SymbolicMusicSpecificConfig(); 443dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //break; 444dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu default: 445dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu /* reserved */ 446dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 447dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 448dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu switch (audioObjectType) { 449dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 17: 450dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 19: 451dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 20: 452dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 21: 453dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 22: 454dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 23: 455dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 24: 456dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 25: 457dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 26: 458dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 27: 459dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu case 39: 460dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu epConfig = bitReaderBuffer.readBits(2); 461dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (epConfig == 2 || epConfig == 3) { 462dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't parse ErrorProtectionSpecificConfig yet"); 463dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //ErrorProtectionSpecificConfig(); 464dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 465dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (epConfig == 3) { 466dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu directMapping = bitReaderBuffer.readBits(1); 467dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (directMapping == 0) { 468dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu /* tbd */ 469dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new RuntimeException("not implemented"); 470dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 471dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 472dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 473dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 474dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extensionAudioObjectType != 5 && bitReaderBuffer.remainingBits() >= 16) { 475dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu syncExtensionType = bitReaderBuffer.readBits(11); 476dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (syncExtensionType == 0x2b7) { 477dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extensionAudioObjectType = getAudioObjectType(bitReaderBuffer); 478dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extensionAudioObjectType == 5) { 479dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sbrPresentFlag = bitReaderBuffer.readBits(1); 480dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (sbrPresentFlag == 1) { 481dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extensionSamplingFrequencyIndex = bitReaderBuffer.readBits(4); 482dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extensionSamplingFrequencyIndex == 0xf) { 483dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extensionSamplingFrequency = bitReaderBuffer.readBits(24); 484dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 485dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (bitReaderBuffer.remainingBits() >= 12) { 486dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu syncExtensionType = bitReaderBuffer.readBits(11); //10101001000 487dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (syncExtensionType == 0x548) { 488dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu psPresentFlag = bitReaderBuffer.readBits(1); 489dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 490dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 491dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 492dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 493dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extensionAudioObjectType == 22) { 494dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sbrPresentFlag = bitReaderBuffer.readBits(1); 495dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (sbrPresentFlag == 1) { 496dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extensionSamplingFrequencyIndex = bitReaderBuffer.readBits(4); 497dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extensionSamplingFrequencyIndex == 0xf) { 498dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extensionSamplingFrequency = bitReaderBuffer.readBits(24); 499dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 500dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 501dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extensionChannelConfiguration = bitReaderBuffer.readBits(4); 502dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 503dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 504dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 505dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 506dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 507dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private int gaSpecificConfigSize() { 508dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return 0; 509dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 510dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 511dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int serializedSize() { 512dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int out = 4; 513dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (audioObjectType == 2) { 514dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu out += gaSpecificConfigSize(); 515dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } else { 516dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't serialize that yet"); 517dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 518dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return out; 519dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 520dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 521dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public ByteBuffer serialize() { 522dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ByteBuffer out = ByteBuffer.allocate(serializedSize()); 523dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt8(out, 5); 524dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt8(out, serializedSize() - 2); 525dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu BitWriterBuffer bwb = new BitWriterBuffer(out); 526dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu bwb.writeBits(audioObjectType, 5); 527dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu bwb.writeBits(samplingFrequencyIndex, 4); 528dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (samplingFrequencyIndex == 0xf) { 529dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't serialize that yet"); 530dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 531dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu bwb.writeBits(channelConfiguration, 4); 532dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 533dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu // Don't support any extensions, unusual GASpecificConfig other than the default or anything... 534dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 535dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return out; 536dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 537dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 538dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private int getAudioObjectType(BitReaderBuffer in) throws IOException { 539dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int audioObjectType = in.readBits(5); 540dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (audioObjectType == 31) { 541dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectType = 32 + in.readBits(6); 542dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 543dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return audioObjectType; 544dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 545dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 546dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private void parseGaSpecificConfig(int samplingFrequencyIndex, int channelConfiguration, int audioObjectType, BitReaderBuffer in) throws IOException { 547dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// GASpecificConfig (samplingFrequencyIndex, 548dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// channelConfiguration, 549dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// audioObjectType) 550dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// { 551dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu frameLengthFlag = in.readBits(1); 552dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu dependsOnCoreCoder = in.readBits(1); 553dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (dependsOnCoreCoder == 1) { 554dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu coreCoderDelay = in.readBits(14); 555dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 556dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extensionFlag = in.readBits(1); 557dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (channelConfiguration == 0) { 558dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu throw new UnsupportedOperationException("can't parse program_config_element yet"); 559dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //program_config_element (); 560dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 561dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if ((audioObjectType == 6) || (audioObjectType == 20)) { 562dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu layerNr = in.readBits(3); 563dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 564dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extensionFlag == 1) { 565dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (audioObjectType == 22) { 566dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu numOfSubFrame = in.readBits(5); 567dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu layer_length = in.readBits(11); 568dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 569dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (audioObjectType == 17 || audioObjectType == 19 || 570dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectType == 20 || audioObjectType == 23) { 571dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu aacSectionDataResilienceFlag = in.readBits(1); 572dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu aacScalefactorDataResilienceFlag = in.readBits(1); 573dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu aacSpectralDataResilienceFlag = in.readBits(1); 574dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 575dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extensionFlag3 = in.readBits(1); 576dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extensionFlag3 == 1) { 577dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu /* tbd in version 3 */ 578dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 579dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 580dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// } 581dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu gaSpecificConfig = true; 582dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 583dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 584dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private void parseParametricSpecificConfig(int samplingFrequencyIndex, int channelConfiguration, int audioObjectType, BitReaderBuffer in) throws IOException { 585dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu /* 586dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ParametricSpecificConfig() { 587dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu isBaseLayer; 1 uimsbf 588dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (isBaseLayer) { 589dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu PARAconfig(); 590dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } else { 591dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu HILNenexConfig(); 592dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 593dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 594dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */ 595dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu isBaseLayer = in.readBits(1); 596dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (isBaseLayer == 1) { 597dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu parseParaConfig(samplingFrequencyIndex, channelConfiguration, audioObjectType, in); 598dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } else { 599dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu parseHilnEnexConfig(samplingFrequencyIndex, channelConfiguration, audioObjectType, in); 600dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 601dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 602dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 603dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private void parseParaConfig(int samplingFrequencyIndex, int channelConfiguration, int audioObjectType, BitReaderBuffer in) throws IOException { 604dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu /* 605dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu PARAconfig() 606dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu { 607dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu PARAmode; 2 uimsbf 608dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (PARAmode != 1) { 609dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ErHVXCconfig(); 610dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 611dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (PARAmode != 0) { 612dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu HILNconfig(); 613dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 614dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu PARAextensionFlag; 1 uimsbf 615dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (PARAextensionFlag) { 616dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu // to be defined in MPEG-4 Phase 3 617dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 618dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 619dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */ 620dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu paraMode = in.readBits(2); 621dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 622dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (paraMode != 1) { 623dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu parseErHvxcConfig(samplingFrequencyIndex, channelConfiguration, audioObjectType, in); 624dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 625dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (paraMode != 0) { 626dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu parseHilnConfig(samplingFrequencyIndex, channelConfiguration, audioObjectType, in); 627dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 628dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 629dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu paraExtensionFlag = in.readBits(1); 630dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu parametricSpecificConfig = true; 631dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 632dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 633dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private void parseErHvxcConfig(int samplingFrequencyIndex, int channelConfiguration, int audioObjectType, BitReaderBuffer in) throws IOException { 634dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu /* 635dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ErHVXCconfig() 636dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu { 637dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu HVXCvarMode; 1 uimsbf 638dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu HVXCrateMode; 2 uimsbf 639dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extensionFlag; 1 uimsbf 640dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extensionFlag) { 641dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu var_ScalableFlag; 1 uimsbf 642dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 643dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 644dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */ 645dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu hvxcVarMode = in.readBits(1); 646dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu hvxcRateMode = in.readBits(2); 647dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu erHvxcExtensionFlag = in.readBits(1); 648dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 649dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (erHvxcExtensionFlag == 1) { 650dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu var_ScalableFlag = in.readBits(1); 651dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 652dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 653dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 654dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private void parseHilnConfig(int samplingFrequencyIndex, int channelConfiguration, int audioObjectType, BitReaderBuffer in) throws IOException { 655dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu /* 656dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu HILNconfig() 657dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu { 658dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu HILNquantMode; 1 uimsbf 659dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu HILNmaxNumLine; 8 uimsbf 660dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu HILNsampleRateCode; 4 uimsbf 661dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu HILNframeLength; 12 uimsbf 662dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu HILNcontMode; 2 uimsbf 663dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 664dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */ 665dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu hilnQuantMode = in.readBits(1); 666dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu hilnMaxNumLine = in.readBits(8); 667dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu hilnSampleRateCode = in.readBits(4); 668dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu hilnFrameLength = in.readBits(12); 669dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu hilnContMode = in.readBits(2); 670dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 671dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 672dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu private void parseHilnEnexConfig(int samplingFrequencyIndex, int channelConfiguration, int audioObjectType, BitReaderBuffer in) throws IOException { 673dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu /* 674dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu HILNenexConfig() 675dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu { 676dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu HILNenhaLayer; 1 uimsbf 677dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (HILNenhaLayer) { 678dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu HILNenhaQuantMode; 2 uimsbf 679dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 680dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 681dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */ 682dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu hilnEnhaLayer = in.readBits(1); 683dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (hilnEnhaLayer == 1) { 684dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu hilnEnhaQuantMode = in.readBits(2); 685dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 686dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 687dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 688dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public byte[] getConfigBytes() { 689dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return configBytes; 690dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 691dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 692dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getAudioObjectType() { 693dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return audioObjectType; 694dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 695dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 696dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getExtensionAudioObjectType() { 697dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return extensionAudioObjectType; 698dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 699dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 700dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getSbrPresentFlag() { 701dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return sbrPresentFlag; 702dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 703dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 704dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getPsPresentFlag() { 705dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return psPresentFlag; 706dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 707dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 708dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setAudioObjectType(int audioObjectType) { 709dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.audioObjectType = audioObjectType; 710dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 711dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 712dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setSamplingFrequencyIndex(int samplingFrequencyIndex) { 713dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.samplingFrequencyIndex = samplingFrequencyIndex; 714dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 715dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 716dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setSamplingFrequency(int samplingFrequency) { 717dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.samplingFrequency = samplingFrequency; 718dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 719dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 720dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setChannelConfiguration(int channelConfiguration) { 721dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.channelConfiguration = channelConfiguration; 722dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 723dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 724dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 725dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public String toString() { 726dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu final StringBuilder sb = new StringBuilder(); 727dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append("AudioSpecificConfig"); 728dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append("{configBytes=").append(Hex.encodeHex(configBytes)); 729dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", audioObjectType=").append(audioObjectType).append(" (").append(audioObjectTypeMap.get(audioObjectType)).append(")"); 730dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", samplingFrequencyIndex=").append(samplingFrequencyIndex).append(" (").append(samplingFrequencyIndexMap.get(samplingFrequencyIndex)).append(")"); 731dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", samplingFrequency=").append(samplingFrequency); 732dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", channelConfiguration=").append(channelConfiguration); 733dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extensionAudioObjectType > 0) { 734dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", extensionAudioObjectType=").append(extensionAudioObjectType).append(" (").append(audioObjectTypeMap.get(extensionAudioObjectType)).append(")"); 735dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", sbrPresentFlag=").append(sbrPresentFlag); 736dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", psPresentFlag=").append(psPresentFlag); 737dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", extensionSamplingFrequencyIndex=").append(extensionSamplingFrequencyIndex).append(" (").append(samplingFrequencyIndexMap.get(extensionSamplingFrequencyIndex)).append(")"); 738dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", extensionSamplingFrequency=").append(extensionSamplingFrequency); 739dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", extensionChannelConfiguration=").append(extensionChannelConfiguration); 740dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 741dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// sb.append(", sacPayloadEmbedding=").append(sacPayloadEmbedding); 742dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// sb.append(", fillBits=").append(fillBits); 743dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// sb.append(", epConfig=").append(epConfig); 744dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu// sb.append(", directMapping=").append(directMapping); 745dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", syncExtensionType=").append(syncExtensionType); 746dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (gaSpecificConfig) { 747dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", frameLengthFlag=").append(frameLengthFlag); 748dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", dependsOnCoreCoder=").append(dependsOnCoreCoder); 749dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", coreCoderDelay=").append(coreCoderDelay); 750dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", extensionFlag=").append(extensionFlag); 751dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", layerNr=").append(layerNr); 752dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", numOfSubFrame=").append(numOfSubFrame); 753dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", layer_length=").append(layer_length); 754dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", aacSectionDataResilienceFlag=").append(aacSectionDataResilienceFlag); 755dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", aacScalefactorDataResilienceFlag=").append(aacScalefactorDataResilienceFlag); 756dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", aacSpectralDataResilienceFlag=").append(aacSpectralDataResilienceFlag); 757dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", extensionFlag3=").append(extensionFlag3); 758dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 759dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (parametricSpecificConfig) { 760dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", isBaseLayer=").append(isBaseLayer); 761dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", paraMode=").append(paraMode); 762dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", paraExtensionFlag=").append(paraExtensionFlag); 763dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", hvxcVarMode=").append(hvxcVarMode); 764dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", hvxcRateMode=").append(hvxcRateMode); 765dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", erHvxcExtensionFlag=").append(erHvxcExtensionFlag); 766dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", var_ScalableFlag=").append(var_ScalableFlag); 767dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", hilnQuantMode=").append(hilnQuantMode); 768dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", hilnMaxNumLine=").append(hilnMaxNumLine); 769dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", hilnSampleRateCode=").append(hilnSampleRateCode); 770dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", hilnFrameLength=").append(hilnFrameLength); 771dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", hilnContMode=").append(hilnContMode); 772dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", hilnEnhaLayer=").append(hilnEnhaLayer); 773dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append(", hilnEnhaQuantMode=").append(hilnEnhaQuantMode); 774dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 775dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu sb.append('}'); 776dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return sb.toString(); 777dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 778dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 779dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu static { 780dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu // sampling_frequency_index sampling frequeny 781dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0x0 96000 782dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0x1 88200 783dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0x2 64000 784dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0x3 48000 785dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0x4 44100 786dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0x5 32000 787dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0x6 24000 788dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0x7 22050 789dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0x8 16000 790dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0x9 12000 791dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0xa 11025 792dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0xb 8000 793dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0xc reserved 794dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0xd reserved 795dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0xe reserved 796dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu//0xf reserved 797dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu samplingFrequencyIndexMap.put(0x0, 96000); 798dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu samplingFrequencyIndexMap.put(0x1, 88200); 799dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu samplingFrequencyIndexMap.put(0x2, 64000); 800dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu samplingFrequencyIndexMap.put(0x3, 48000); 801dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu samplingFrequencyIndexMap.put(0x4, 44100); 802dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu samplingFrequencyIndexMap.put(0x5, 32000); 803dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu samplingFrequencyIndexMap.put(0x6, 24000); 804dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu samplingFrequencyIndexMap.put(0x7, 22050); 805dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu samplingFrequencyIndexMap.put(0x8, 16000); 806dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu samplingFrequencyIndexMap.put(0x9, 12000); 807dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu samplingFrequencyIndexMap.put(0xa, 11025); 808dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu samplingFrequencyIndexMap.put(0xb, 8000); 809dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 810dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu /* audioObjectType IDs 811dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0 Null 812dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 1 AAC main X X 813dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 2 AAC LC X X X X X X X 814dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 3 AAC SSR X X 815dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 4 AAC LTP X X X X 816dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 5 SBR X X 817dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 6 AAC Scalable X X X X 818dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 7 TwinVQ X X X 819dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 8 CELP X X X X X X 820dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 9 HVXC X X X X X 821dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 10 (reserved) 822dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 11 (reserved) 823dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 12 TTSI X X X X X X 824dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 13 Main synthetic X X 825dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 14 Wavetable synthesis X* X* 826dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 15 General MIDI X* X* 827dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 16 Algorithmic Synthesis and Audio FX X* X* 828dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 17 ER AAC LC X X X 829dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 18 (reserved) 830dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 19 ER AAC LTP X X 831dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 20 ER AAC Scalable X X X 832dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 21 ER TwinVQ X X 833dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 22 ER BSAC X X 834dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 23 ER AAC LD X X X X 835dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 24 ER CELP X X X 836dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 25 ER HVXC X X 837dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 26 ER HILN X 838dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 27 ER Parametric X 839dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 28 SSC 840dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 29 PS X 841dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 30 MPEG Surround 842dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 31 (escape) 843dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 32 Layer-1 844dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 33 Layer-2 845dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 34 Layer-3 846dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 35 DST 847dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 36 ALS 848dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 37 SLS 849dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 38 SLS non-core 850dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 39 ER AAC ELD 851dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 40 SMR Simple 852dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 41 SMR Main 853dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */ 854dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(1, "AAC main"); 855dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(2, "AAC LC"); 856dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(3, "AAC SSR"); 857dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(4, "AAC LTP"); 858dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(5, "SBR"); 859dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(6, "AAC Scalable"); 860dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(7, "TwinVQ"); 861dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(8, "CELP"); 862dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(9, "HVXC"); 863dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(10, "(reserved)"); 864dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(11, "(reserved)"); 865dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(12, "TTSI"); 866dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(13, "Main synthetic"); 867dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(14, "Wavetable synthesis"); 868dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(15, "General MIDI"); 869dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(16, "Algorithmic Synthesis and Audio FX"); 870dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(17, "ER AAC LC"); 871dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(18, "(reserved)"); 872dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(19, "ER AAC LTP"); 873dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(20, "ER AAC Scalable"); 874dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(21, "ER TwinVQ"); 875dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(22, "ER BSAC"); 876dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(23, "ER AAC LD"); 877dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(24, "ER CELP"); 878dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(25, "ER HVXC"); 879dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(26, "ER HILN"); 880dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(27, "ER Parametric"); 881dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(28, "SSC"); 882dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(29, "PS"); 883dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(30, "MPEG Surround"); 884dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(31, "(escape)"); 885dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(32, "Layer-1"); 886dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(33, "Layer-2"); 887dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(34, "Layer-3"); 888dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(35, "DST"); 889dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(36, "ALS"); 890dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(37, "SLS"); 891dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(38, "SLS non-core"); 892dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(39, "ER AAC ELD"); 893dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(40, "SMR Simple"); 894dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu audioObjectTypeMap.put(41, "SMR Main"); 895dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 896dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu /* profileLevelIds 897dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x00 Reserved for ISO use - 898dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x01 Main Audio Profile L1 899dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x02 Main Audio Profile L2 900dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x03 Main Audio Profile L3 901dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x04 Main Audio Profile L4 902dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x05 Scalable Audio Profile L1 903dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x06 Scalable Audio Profile L2 904dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x07 Scalable Audio Profile L3 905dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x08 Scalable Audio Profile L4 906dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x09 Speech Audio Profile L1 907dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x0A Speech Audio Profile L2 908dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x0B Synthetic Audio Profile L1 909dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x0C Synthetic Audio Profile L2 910dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x0D Synthetic Audio Profile L3 911dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x0E High Quality Audio Profile L1 912dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x0F High Quality Audio Profile L2 913dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x10 High Quality Audio Profile L3 914dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x11 High Quality Audio Profile L4 915dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x12 High Quality Audio Profile L5 916dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x13 High Quality Audio Profile L6 917dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x14 High Quality Audio Profile L7 918dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x15 High Quality Audio Profile L8 919dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x16 Low Delay Audio Profile L1 920dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x17 Low Delay Audio Profile L2 921dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x18 Low Delay Audio Profile L3 922dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x19 Low Delay Audio Profile L4 923dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x1A Low Delay Audio Profile L5 924dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x1B Low Delay Audio Profile L6 925dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x1C Low Delay Audio Profile L7 926dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x1D Low Delay Audio Profile L8 927dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x1E Natural Audio Profile L1 928dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x1F Natural Audio Profile L2 929dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x20 Natural Audio Profile L3 930dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x21 Natural Audio Profile L4 931dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x22 Mobile Audio Internetworking Profile L1 932dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x23 Mobile Audio Internetworking Profile L2 933dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x24 Mobile Audio Internetworking Profile L3 934dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x25 Mobile Audio Internetworking Profile L4 935dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x26 Mobile Audio Internetworking Profile L5 936dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x27 Mobile Audio Internetworking Profile L6 937dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x28 AAC Profile L1 938dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x29 AAC Profile L2 939dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x2A AAC Profile L4 940dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x2B AAC Profile L5 941dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x2C High Efficiency AAC Profile L2 942dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x2D High Efficiency AAC Profile L3 943dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x2E High Efficiency AAC Profile L4 944dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x2F High Efficiency AAC Profile L5 945dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x30 High Efficiency AAC v2 Profile L2 946dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x31 High Efficiency AAC v2 Profile L3 947dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x32 High Efficiency AAC v2 Profile L4 948dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x33 High Efficiency AAC v2 Profile L5 949dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x34 Low Delay AAC Profile L1 950dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x35 Baseline MPEG Surround Profile (see ISO/IEC 951dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 23003-1) 952dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu L1 953dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x36 Baseline MPEG Surround Profile (see ISO/IEC 954dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 23003-1) 955dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu L2 956dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x37 Baseline MPEG Surround Profile (see ISO/IEC 957dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 23003-1) 958dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu L3 959dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x38 Baseline MPEG Surround Profile (see ISO/IEC 960dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 23003-1) 961dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu L4 962dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0c39 Baseline MPEG Surround Profile (see ISO/IEC 963dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 23003-1) 964dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu L5 965dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x3A Baseline MPEG Surround Profile (see ISO/IEC 966dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 23003-1) 967dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu L6 968dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x3B - 0x7F reserved for ISO use - 969dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0x80 - 0xFD user private - 970dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0xFE no audio profile specified - 971dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 0xFF no audio capability required - 972dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 973dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */ 974dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 975dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 976dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 977dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getSamplingFrequency() { 978dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return samplingFrequencyIndex == 0xf ? samplingFrequency : samplingFrequencyIndexMap.get(samplingFrequencyIndex); 979dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 980dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 981dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getChannelConfiguration() { 982dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return channelConfiguration; 983dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 984dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 985dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 986dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public boolean equals(Object o) { 987dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (this == o) { 988dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return true; 989dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 990dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (o == null || getClass() != o.getClass()) { 991dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 992dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 993dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 994dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu AudioSpecificConfig that = (AudioSpecificConfig) o; 995dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 996dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (aacScalefactorDataResilienceFlag != that.aacScalefactorDataResilienceFlag) { 997dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 998dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 999dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (aacSectionDataResilienceFlag != that.aacSectionDataResilienceFlag) { 1000dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1001dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1002dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (aacSpectralDataResilienceFlag != that.aacSpectralDataResilienceFlag) { 1003dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1004dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1005dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (audioObjectType != that.audioObjectType) { 1006dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1007dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1008dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (channelConfiguration != that.channelConfiguration) { 1009dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1010dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1011dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (coreCoderDelay != that.coreCoderDelay) { 1012dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1013dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1014dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (dependsOnCoreCoder != that.dependsOnCoreCoder) { 1015dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1016dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1017dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (directMapping != that.directMapping) { 1018dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1019dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1020dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (epConfig != that.epConfig) { 1021dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1022dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1023dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (erHvxcExtensionFlag != that.erHvxcExtensionFlag) { 1024dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1025dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1026dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extensionAudioObjectType != that.extensionAudioObjectType) { 1027dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1028dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1029dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extensionChannelConfiguration != that.extensionChannelConfiguration) { 1030dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1031dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1032dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extensionFlag != that.extensionFlag) { 1033dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1034dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1035dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extensionFlag3 != that.extensionFlag3) { 1036dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1037dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1038dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extensionSamplingFrequency != that.extensionSamplingFrequency) { 1039dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1040dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1041dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extensionSamplingFrequencyIndex != that.extensionSamplingFrequencyIndex) { 1042dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1043dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1044dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (fillBits != that.fillBits) { 1045dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1046dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1047dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (frameLengthFlag != that.frameLengthFlag) { 1048dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1049dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1050dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (gaSpecificConfig != that.gaSpecificConfig) { 1051dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1052dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1053dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (hilnContMode != that.hilnContMode) { 1054dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1055dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1056dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (hilnEnhaLayer != that.hilnEnhaLayer) { 1057dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1058dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1059dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (hilnEnhaQuantMode != that.hilnEnhaQuantMode) { 1060dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1061dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1062dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (hilnFrameLength != that.hilnFrameLength) { 1063dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1064dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1065dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (hilnMaxNumLine != that.hilnMaxNumLine) { 1066dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1067dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1068dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (hilnQuantMode != that.hilnQuantMode) { 1069dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1070dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1071dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (hilnSampleRateCode != that.hilnSampleRateCode) { 1072dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1073dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1074dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (hvxcRateMode != that.hvxcRateMode) { 1075dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1076dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1077dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (hvxcVarMode != that.hvxcVarMode) { 1078dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1079dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1080dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (isBaseLayer != that.isBaseLayer) { 1081dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1082dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1083dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (layerNr != that.layerNr) { 1084dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1085dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1086dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (layer_length != that.layer_length) { 1087dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1088dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1089dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (numOfSubFrame != that.numOfSubFrame) { 1090dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1091dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1092dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (paraExtensionFlag != that.paraExtensionFlag) { 1093dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1094dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1095dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (paraMode != that.paraMode) { 1096dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1097dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1098dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (parametricSpecificConfig != that.parametricSpecificConfig) { 1099dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1100dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1101dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (psPresentFlag != that.psPresentFlag) { 1102dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1103dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1104dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (sacPayloadEmbedding != that.sacPayloadEmbedding) { 1105dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1106dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1107dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (samplingFrequency != that.samplingFrequency) { 1108dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1109dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1110dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (samplingFrequencyIndex != that.samplingFrequencyIndex) { 1111dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1112dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1113dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (sbrPresentFlag != that.sbrPresentFlag) { 1114dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1115dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1116dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (syncExtensionType != that.syncExtensionType) { 1117dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1118dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1119dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (var_ScalableFlag != that.var_ScalableFlag) { 1120dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1121dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1122dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (!Arrays.equals(configBytes, that.configBytes)) { 1123dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 1124dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1125dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 1126dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return true; 1127dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1128dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 1129dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 1130dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int hashCode() { 1131dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int result = configBytes != null ? Arrays.hashCode(configBytes) : 0; 1132dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + audioObjectType; 1133dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + samplingFrequencyIndex; 1134dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + samplingFrequency; 1135dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + channelConfiguration; 1136dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + extensionAudioObjectType; 1137dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + sbrPresentFlag; 1138dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + psPresentFlag; 1139dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + extensionSamplingFrequencyIndex; 1140dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + extensionSamplingFrequency; 1141dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + extensionChannelConfiguration; 1142dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + sacPayloadEmbedding; 1143dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + fillBits; 1144dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + epConfig; 1145dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + directMapping; 1146dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + syncExtensionType; 1147dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + frameLengthFlag; 1148dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + dependsOnCoreCoder; 1149dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + coreCoderDelay; 1150dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + extensionFlag; 1151dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + layerNr; 1152dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + numOfSubFrame; 1153dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + layer_length; 1154dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + aacSectionDataResilienceFlag; 1155dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + aacScalefactorDataResilienceFlag; 1156dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + aacSpectralDataResilienceFlag; 1157dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + extensionFlag3; 1158dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + (gaSpecificConfig ? 1 : 0); 1159dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + isBaseLayer; 1160dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + paraMode; 1161dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + paraExtensionFlag; 1162dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + hvxcVarMode; 1163dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + hvxcRateMode; 1164dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + erHvxcExtensionFlag; 1165dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + var_ScalableFlag; 1166dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + hilnQuantMode; 1167dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + hilnMaxNumLine; 1168dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + hilnSampleRateCode; 1169dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + hilnFrameLength; 1170dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + hilnContMode; 1171dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + hilnEnhaLayer; 1172dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + hilnEnhaQuantMode; 1173dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = 31 * result + (parametricSpecificConfig ? 1 : 0); 1174dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return result; 1175dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 1176dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu} 1177