⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp4audec.c

📁 MPEG2/MPEG4编解码参考程序(实现了MPEG4的部分功能)
💻 C
📖 第 1 页 / 共 5 页
字号:
    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 + -