📄 mp4audec.c
字号:
return 1; } if ((mainDebugLevel >= 3) && (info != NULL)) printf("info=\"%s\"\n",info); /* read bit stream header */ bitHeader = BsAllocBuffer(BITHEADERBUFSIZE); if (!((strstr(decPara, "-aac_raw") != NULL) || (strstr(decPara, "-aac_sca") != NULL) || (strstr(decPara, "-aac_core_bsac") != NULL))) { if (strstr(decPara, "-aac_sys") != NULL || strstr(decPara, "-aac_sys_bsac") != NULL || strstr(decPara, "-mp4ff") != NULL) { unsigned long length,align,dummy,odStartByte; bitHeaderNumBit=0; adifInfo.profile = LC_Profile; if (BsGetBit(bitStream,&(objDescr.ODLength.value),objDescr.ODLength.length) ) CommonExit(1,"Decode: error reading bit stream header (frame)"); odStartByte=BsCurrentBit(bitStream)/8; if (BsCurrentBit(bitStream) % 8 != 0 )CommonExit(-1,"error in reading object descr"); if ( BsGetBit(bitStream,&(objDescr.ODescrId.value),objDescr.ODescrId.length) || BsGetBit(bitStream,&(objDescr.streamCount.value),objDescr.streamCount.length) || BsGetBit(bitStream,&(objDescr.extensionFlag.value),objDescr.extensionFlag.length)) CommonExit(1,"Decode: error reading bit stream header (frame)"); if (mainDebugLevel >= 3) { printf("ObjectDescriptor.streamCount: %ld \n",objDescr.streamCount.value); } frameNumBit=0; bitRateLong=0; bitReservSize = 0; for (x=0;x<objDescr.streamCount.value;x++){ int frameNumBitLay; initESDescr(&(objDescr.ESDescriptor[x])); advanceESDescr(bitStream,objDescr.ESDescriptor[x],0); fSampleLong=samplFreqIndex[objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.samplingFreqencyIndex.value]; frameNumBitLay = ( objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.frameLength.value ? 960:1024) * objDescr.ESDescriptor[x]->DecConfigDescr.avgBitrate.value / fSampleLong ; sn_ovrhd = objDescr.ESDescriptor[x]->ALConfigDescriptor.seqNumLength.value%8 ? 1:0; frameNumBitLay += (3+sn_ovrhd)*8*(1 + (frameNumBitLay/2040)) ; /* overhead for flexMux transport */ frameNumBit += frameNumBitLay; bitRateLong += objDescr.ESDescriptor[x]->DecConfigDescr.avgBitrate.value; bitReservSize += objDescr.ESDescriptor[x]->DecConfigDescr.bufferSizeDB.value; if (mainDebugLevel >= 3) { printf("\nESDescriptor.ESNumber: %ld \n",objDescr.ESDescriptor[x]->ESNumber.value); printf(" ESDescriptor.streamDependence: %ld \n",objDescr.ESDescriptor[x]->streamDependence.value); printf(" ESDescriptor.dependsOn_Es_number: %ld \n",objDescr.ESDescriptor[x]->dependsOn_Es_number.value); printf(" ESDescriptor.DecConfigDescr.streamType: %ld \n",objDescr.ESDescriptor[x]->DecConfigDescr.streamType.value); printf(" ESDescriptor.DecConfigDescr.bufferSizeDB: %ld \n",objDescr.ESDescriptor[x]->DecConfigDescr.bufferSizeDB.value); printf(" ESDescriptor.DecConfigDescr.avgBitrate: %ld \n",objDescr.ESDescriptor[x]->DecConfigDescr.avgBitrate.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.audioDecoderType: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.audioDecoderType.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.samplingFreqencyIndex: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.samplingFreqencyIndex.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.channelConfiguration: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.channelConfiguration.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.TFCodingType: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.TFCodingType.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.frameLength: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.frameLength.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.dependsOnCoreCoder: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.dependsOnCoreCoder.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.coreCoderDelay: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.coreCoderDelay.value); printf(" ESDescriptor.ALConfigDescriptor.useAccessUnitStartFlag.value: %ld \n", objDescr.ESDescriptor[x]->ALConfigDescriptor.useAccessUnitStartFlag.value); printf(" ESDescriptor.ALConfigDescriptor.useRandomAccessPointFlag.value: %ld \n", objDescr.ESDescriptor[x]->ALConfigDescriptor.useRandomAccessPointFlag.value); printf(" ESDescriptor.ALConfigDescriptor.usePaddingFlag.value: %ld \n", objDescr.ESDescriptor[x]->ALConfigDescriptor.usePaddingFlag.value); printf(" ESDescriptor.ALConfigDescriptor.seqNumLength.value: %ld \n", objDescr.ESDescriptor[x]->ALConfigDescriptor.seqNumLength.value); } } frameMinNumBit=0; length= BsCurrentBit(bitStream)/8; align = 8 - BsCurrentBit(bitStream) % 8; if (align == 8) align = 0; if (align != 0) { length += 1; } BsGetBit(bitStream,&(dummy),align) ; if ( (length-odStartByte) != objDescr.ODLength.value) CommonExit(-1,"error in object descriptor read"); bitReservInit= bitReservSize; /* BT 971105 */ bitHeaderNumBit=0; mode = MODE_TF; numChannelOri=objDescr.ESDescriptor[0]->DecConfigDescr.audioSpecificConfig.channelConfiguration.value; frameData.od = &objDescr; } else if(strstr(decPara, "-tvq_sys") !=NULL) { unsigned long length,align,dummy,odStartByte; int frameNumBitLay=0;/* T.Ishikawa 980703 */ int FlexNumBitLay=0; /* T.Ishikawa 980727 */ adifInfo.profile = LC_Profile; bitHeaderNumBit=0; if (mainDebugLevel >= 3) { printf("Decode: Init : %ld\n",BsCurrentBit(bitStream)); } if (BsGetBit(bitStream,&(objDescr.ODLength.value),objDescr.ODLength.length) ) CommonExit(1,"Decode: error reading bit stream header (frame)"); odStartByte=BsCurrentBit(bitStream)/8; if (BsCurrentBit(bitStream) % 8 != 0 )CommonExit(-1,"error in reading object descr"); if ( BsGetBit(bitStream,&(objDescr.ODescrId.value),objDescr.ODescrId.length) || BsGetBit(bitStream,&(objDescr.streamCount.value),objDescr.streamCount.length) || BsGetBit(bitStream,&(objDescr.extensionFlag.value),objDescr.extensionFlag.length)) CommonExit(1,"Decode: error reading bit stream header (frame)"); if (mainDebugLevel >= 3) { printf("ObjectDescriptor.streamCount: %ld \n",objDescr.streamCount.value); } frameNumBit=0; bitRateLong=0; for (x=0;x<objDescr.streamCount.value;x++){ int frameNumBitLay; initESDescr(&(objDescr.ESDescriptor[x]) ); advanceESDescr(bitStream,objDescr.ESDescriptor[x],0); fSampleLong=samplFreqIndex[objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.samplingFreqencyIndex.value]; /* T.Ishikawa 980703 */ frameNumBitLay =(int)( (float)( objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.frameLength.value ? 960:1024) * (float)objDescr.ESDescriptor[x]->DecConfigDescr.avgBitrate.value / (float)fSampleLong+0.5) ; frameNumBit += frameNumBitLay; if (mainDebugLevel >= 3) { printf("mp4dec: frameNumBitLay[%d] %d\n",x,frameNumBitLay); } bitRateLong += (int)(objDescr.ESDescriptor[x]->DecConfigDescr.avgBitrate.value); frameNumBit += 3*8*(1+(frameNumBitLay/2040)); FlexNumBitLay += 3*8*(1+(frameNumBitLay/2040));/* T.Ishikawa 980727 */ /* if (mainDebugLevel) { printf("mp4dec : avgBitrate %d[%d]\n",objDescr.ESDescriptor[x]->DecConfigDescr.avgBitrate.value,x); }*/ } if (mainDebugLevel >= 3) { printf("mp4dec: FlexNumBitLay %d\n",FlexNumBitLay); } frameNumBit = (int)(bitRateLong*( objDescr.ESDescriptor[0]->DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.frameLength.value ? 960:1024)/(float)fSampleLong + 0.5)+FlexNumBitLay; /* T.Ishikawa 980727 */ /* bitRateLong += ((int)( (31.0*fSampleLong/(float)(objDescr.ESDescriptor[0]->DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.frameLength.value ? 960:1024)) * (float)objDescr.streamCount.value + 25.0*fSampleLong/(float)(objDescr.ESDescriptor[0]->DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.frameLength.value ? 960:1024)));*/ if (mainDebugLevel >= 3) { printf("mp4dec : bitRateLong %ld\n",bitRateLong); } /* frameNumBit=(int)(((float)bitRateLong*(objDescr.ESDescriptor[0]->DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.frameLength.value ? 960:1024)/fSampleLong)+0.5);*/ if (mainDebugLevel >= 3) { printf("mp4dec : frameNumBit(tvq_sys Init) %d, frameNumBitLay %d\n",frameNumBit,frameNumBitLay); } /* Notice! : frameNumBit=1141 */ /* frameNumBit -= 3*8*(1 + (objDescr.streamCount.value/2040)) ;*/ /* overhead for flexMux transport */ #if 0 for (x=1;x<objDescr.streamCount.value;x++){ int frameNumBitLay=0; frameNumBitLay +=(int)( (float)( objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.frameLength.value ? 960:1024) * (float)objDescr.ESDescriptor[x]->DecConfigDescr.avgBitrate.value / (float)fSampleLong) ; frameNumBitLay += 3*8*(1 + (frameNumBitLay/2040)) ; /* overhead for flexMux transport */ }#endif for (x=0;x<objDescr.streamCount.value;x++){ if (mainDebugLevel >= 3) { printf("\nESDescriptor.ESNumber: %ld \n",objDescr.ESDescriptor[x]->ESNumber.value); printf(" ESDescriptor.streamDependence: %ld \n",objDescr.ESDescriptor[x]->streamDependence.value); printf(" ESDescriptor.dependsOn_Es_number: %ld \n",objDescr.ESDescriptor[x]->dependsOn_Es_number.value); printf(" ESDescriptor.DecConfigDescr.streamType: %ld \n",objDescr.ESDescriptor[x]->DecConfigDescr.streamType.value); printf(" ESDescriptor.DecConfigDescr.bufferSizeDB: %ld \n",objDescr.ESDescriptor[x]->DecConfigDescr.bufferSizeDB.value); printf(" ESDescriptor.DecConfigDescr.avgBitrate: %ld \n",objDescr.ESDescriptor[x]->DecConfigDescr.avgBitrate.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.audioDecoderType: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.audioDecoderType.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.samplingFreqencyIndex: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.samplingFreqencyIndex.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.channelConfiguration: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.channelConfiguration.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.TFCodingType: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.TFCodingType.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.frameLength: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.frameLength.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.dependsOnCoreCoder: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.dependsOnCoreCoder.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.coreCoderDelay: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.coreCoderDelay.value); } } frameMinNumBit=frameNumBit; length= BsCurrentBit(bitStream)/8; align = 8 - BsCurrentBit(bitStream) % 8; if (align == 8) align = 0; if (align != 0) { length += 1; } BsGetBit(bitStream,&(dummy),align) ; if ( (length-odStartByte) != objDescr.ODLength.value) { CommonExit(-1,"error in object descriptor read"); } if (mainDebugLevel >= 3) { printf("#### Decoder : length %ld #####\n",length); } bitReservSize= 0; /* T.Ishikawa */ bitReservInit= 0; bitHeaderNumBit=0; mode = MODE_TF; numChannelOri=objDescr.ESDescriptor[0]->DecConfigDescr.audioSpecificConfig.channelConfiguration.value; frameData.od = &objDescr; } else if(strstr(decPara, "-hvxc_sys") !=NULL) { /* AI 990616 */ unsigned long length,align,dummy,odStartByte; bitHeaderNumBit=0; if (BsGetBit(bitStream,&(objDescr.ODLength.value),objDescr.ODLength.length) ) CommonExit(1,"Decode: error reading bit stream header (frame)"); odStartByte=BsCurrentBit(bitStream)/8; if (BsCurrentBit(bitStream) % 8 != 0 )CommonExit(-1,"error in reading object descr"); if ( BsGetBit(bitStream,&(objDescr.ODescrId.value),objDescr.ODescrId.length) || BsGetBit(bitStream,&(objDescr.streamCount.value),objDescr.streamCount.length) || BsGetBit(bitStream,&(objDescr.extensionFlag.value),objDescr.extensionFlag.length)) CommonExit(1,"Decode: error reading bit stream header (frame)"); if (mainDebugLevel >= 3) { printf("ObjectDescriptor.ODLength: %ld \n",objDescr.ODLength.value); printf("ObjectDescriptor.ODescrId: %ld \n",objDescr.ODescrId.value); printf("ObjectDescriptor.streamCount: %ld \n",objDescr.streamCount.value); printf("ObjectDescriptor.extensionFlag: %ld \n",objDescr.extensionFlag.value); } frameNumBit=0; bitRateLong=0; bitReservSize = 0; for (x=0;x<objDescr.streamCount.value;x++){ int frameNumBitLay; initESDescr(&(objDescr.ESDescriptor[x])); advanceESDescr(bitStream,objDescr.ESDescriptor[x],0); fSampleLong=samplFreqIndex[objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.samplingFreqencyIndex.value]; frameNumBitLay = ( objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.specConf.TFSpecificConfig.frameLength.value ? 960:1024) * objDescr.ESDescriptor[x]->DecConfigDescr.avgBitrate.value / fSampleLong ; sn_ovrhd = objDescr.ESDescriptor[x]->ALConfigDescriptor.seqNumLength.value%8 ? 1:0; frameNumBitLay += (3+sn_ovrhd)*8*(1 + (frameNumBitLay/2040)) ; /* overhead for flexMux transport */ frameNumBit += frameNumBitLay; bitRateLong += objDescr.ESDescriptor[x]->DecConfigDescr.avgBitrate.value; bitReservSize += objDescr.ESDescriptor[x]->DecConfigDescr.bufferSizeDB.value; if (mainDebugLevel >= 3) { printf("\nESDescriptor.ESNumber: %ld \n",objDescr.ESDescriptor[x]->ESNumber.value); printf(" ESDescriptor.streamDependence: %ld \n",objDescr.ESDescriptor[x]->streamDependence.value); printf(" ESDescriptor.dependsOn_Es_number: %ld \n",objDescr.ESDescriptor[x]->dependsOn_Es_number.value); printf(" ESDescriptor.DecConfigDescr.streamType: %ld \n",objDescr.ESDescriptor[x]->DecConfigDescr.streamType.value); printf(" ESDescriptor.DecConfigDescr.bufferSizeDB: %ld \n",objDescr.ESDescriptor[x]->DecConfigDescr.bufferSizeDB.value); printf(" ESDescriptor.DecConfigDescr.avgBitrate: %ld \n",objDescr.ESDescriptor[x]->DecConfigDescr.avgBitrate.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.audioDecoderType: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.audioDecoderType.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.samplingFreqencyIndex: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.samplingFreqencyIndex.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.channelConfiguration: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.channelConfiguration.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.specConf.hvxcSpecificConfig.HVXCvarMode: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.specConf.hvxcSpecificConfig.HVXCvarMode.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.specConf.hvxcSpecificConfig.HVXCrateMode: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.specConf.hvxcSpecificConfig.HVXCrateMode.value); printf(" ESDescriptor.DecConfigDescr.audioSpecificConfig.specConf.hvxcSpecificConfig.extensionFlag: %ld \n", objDescr.ESDescriptor[x]->DecConfigDescr.audioSpecificConfig.specConf.hvxcSpecificConfig.extensionFlag.value); printf(" ESDescriptor.ALConfigDescriptor.useAccessUnitStartFlag.value: %ld \n", objDescr.ESDescriptor[x]->ALConfigDescriptor.useAccessUnitStartFlag.value); printf(" ESDescriptor.ALConfigDescriptor.useRandomAccessPointFlag.value: %ld \n", objDescr.ESDescriptor[x]->ALConfigDescriptor.useRandomAccessPointFlag.value); printf(" ESDescriptor.ALConfigDescriptor.usePaddingFlag.value: %ld \n", objDescr.ESDescriptor[x]->ALConfigDescriptor.usePaddingFlag.value); printf(" ESDescriptor.ALConfigDescriptor.seqNumLength.value: %ld \n", objDescr.ESDescriptor[x]->ALConfigDescriptor.seqNumLength.value); } } frameMinNumBit=0; length= BsCurrentBit(bitStream)/8; align = 8 - BsCurrentBit(bitStream) % 8; if (align == 8) align = 0; if (align != 0) { length += 1; } BsGetBit(bitStream,&(dummy),align) ; if ( (length-odStartByte) != objDescr.ODLength.value) CommonExit(-1,"error in object descriptor read"); bitReservInit= bitReservSize; bitHeaderNumBit=0; mode = MODE_HVXC; numChannelOri=objDescr.ESDescriptor[0]->DecConfigDescr.audioSpecificConfig.channelConfiguration.value; frameData.od = &objDescr; } else if(strstr(decPara, "-celp_sys") !=NULL) { unsigned long length,align,dummy,odStartByte; bitHeaderNumBit=0; if (BsGetBit(bitStream,&(objDescr.ODLength.value),objDescr.ODLength.length) ) CommonExit(1,"Decode: error reading bit stream header (frame)"); odStartByte=BsCurrentBit(bitStream)/8; if (BsCurrentBit(bitStream) % 8 != 0 )CommonExit(-1,"error in reading object descr"); if ( BsGetBit(bitStream,&(objDescr.ODescrId.value),objDescr.ODescrId.length) || BsGetBit(bitStream,&(objDescr.streamCount.value),objDescr.streamCount.length) || BsGetBit(bitStream,&(objDescr.extensionFlag.value),objDescr.extensionFlag.length)) CommonExit(1,"Decode: error reading bit stream header (frame)"); if (mainDebugLevel >= 3) { printf("ObjectDescriptor.ODLength: %ld \n",objDescr.ODLength.value);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -