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

📄 dec_par.c

📁 C写的MPEG4音频源代码(G.723/G.729)
💻 C
📖 第 1 页 / 共 2 页
字号:
    max(DPdelayNumSample-ILdelayNumSample,DPdelayNumSample-HVXdelayNumSample);  if (CommonFreeAlloc((void**)&tmpSampleBuf,		      *frameMaxNumSample*sizeof(float)) == NULL)    CommonExit(1,"DecParInit: memory allocation error");  if (CommonFreeAlloc((void**)&mixSampleBuf,		      mixSampleBufSize*sizeof(float)) == NULL)    CommonExit(1,"DecParInit: memory allocation error");  for (i=0; i<mixSampleBufSize; i++)    mixSampleBuf[i] = 0;  if (DPdebugLevel >= 1) {    printf("DecParInit: encDlyMode=%d  vrMode=%d  rateMode=%d\n",	   DPdelayMode,DPvarMode,DPrateMode);    printf("DecParInit: dly=%d  frm=%d  mixBuf=%d  ILdly=%d  HVXdly=%d\n",	   DPframeMaxNumSample,DPdelayNumSample,	   mixSampleBufSize,ILdelayNumSample,HVXdelayNumSample);  }}/* DecParFrame() *//* Decode one bit stream frame into one audio frame with *//* parametric decoder core. */void DecParFrame (  BsBitBuffer *bitBuf,		/* in: bit stream frame */  float **sampleBuf,		/* out: audio frame samples */				/*     sampleBuf[numChannel][frameNumSample] */  int *usedNumBit,		/* out: num bits used for this frame */  int *frameBufNumSample,	/* out: num samples in sampleBuf[][] */  float speedFact,		/* in: speed change factor (AI 990209) */  float pitchFact		/* in: pitch change factor (AI 990209) */  ){  BsBitStream *stream;  unsigned int il_hvxc;  int i;  int hvxcFrame1;  if (DPdebugLevel >= 1) {    printf("DecParFrame: availNum=%ld\n",BsBufferNumBit(bitBuf));    printf("DecParFrame: speedFact=%f  pitchFact=%f\n",	   speedFact,pitchFact);  }  stream = BsOpenBufferRead(bitBuf);  switch (DPmode) {  case MODEPAR_HVX:    DecParFrameHvx(stream,sampleBuf[0],frameBufNumSample,speedFact,pitchFact		   );    break;  }  *usedNumBit = BsCurrentBit(stream);  BsCloseRemove(stream,1);  if (DPdebugLevel >= 1)    printf("DecParFrame: numBit=%d  numSample=%d\n",	   *usedNumBit,*frameBufNumSample);}/* DecParFree() *//* Free memory allocated by parametric decoder core. */void DecParFree (){  if (DPdebugLevel >= 1)    printf("DecParFree: ...\n");  if (!DPfree)    return;  if (DPmode != MODEPAR_IL)    DecParFreeHvx();}/* DecHvxcInitNew() *//* Init HVXC decoder core for system interface(AI 99060X) */HvxcDecStatus *DecHvxcInitNew (  char *decPara,		/* in: decoder parameter string */  FRAME_DATA *fD,		/* in: system interface */  int layer			/* in: number of layer */  ){  int i;  int parac;  char **parav;  int result;  BsBitBuffer *bitHeader;  BsBitStream *hdrStream;  AUDIO_SPECIFIC_CONFIG* audSpC;  int numChannel;  float fSample;  float bitRate;  HvxcDecStatus *hvxcD;  sysFlag = 1;	/* use system interface(flexmux) */    /* evalute decoder parameter string */  parav = CmdLineParseString(decPara,SEPACHAR,&parac);  result = CmdLineEval(parac,parav,NULL,switchList,1,NULL);  if (result) {    if (result==1) {      DecParInfo(stdout);      exit (1);    }    else      CommonExit(1,"decoder parameter string error");  }  audSpC = &fD->od->ESDescriptor[layer]->DecConfigDescr.audioSpecificConfig;  switch (audSpC->channelConfiguration.value) {  case 1 :numChannel=1;           break;  default: CommonExit(1,"wrong channel config");  }  bitRate = fD->od->ESDescriptor[layer]->DecConfigDescr.avgBitrate.value;  if (fD->od->ESDescriptor[layer]->DecConfigDescr.audioSpecificConfig.samplingFreqencyIndex.value != 11) {    CommonExit(1,"illegal sampling frequency config");  }  else {    fSample = 8000.0f;  }    if (DPdebugLevel >= 1) {    printf("DecHvxcInit: numChannel=%d  fSample=%f  bitRate=%f\n",	   numChannel,fSample,bitRate);    printf("DecHvxcInit: decPara=\"%s\"\n",	   decPara);    printf("DecHvxcInit: debugLevel=%d\n",	   DPdebugLevel);    if (DPtestMode != TM_NORMAL) {      printf("DecHvxcInit: test_mode=%x(for HVXC decoder conformance testing)\n", DPtestMode);      if (DPtestMode & TM_POSFIL_DISABLE) {	printf("  - postfilter and post processing are skipped.\n");      }      if (DPtestMode & TM_INIT_PHASE_ZERO) {	printf("  - initial values of harmonic phase are reset to zeros.\n");      }      if (DPtestMode & TM_NOISE_ADD_DISABLE) {	printf("  - noise component addition are disabled.\n");      }      if (DPtestMode & TM_VXC_DISABLE) {	printf("  - the output of Time Domain Decoder is disabled.\n");      }    }  }  if (numChannel != 1)    CommonExit(1,"DecHvxcInit:audio data has more the one channel (%d)",	       numChannel);  CmdLineParseFree(parav);  DPfSample = fSample;  DPbitRate = bitRate;  if (sysFlag) {    DPvarMode = audSpC->specConf.hvxcSpecificConfig.HVXCvarMode.value;    DPrateMode = audSpC->specConf.hvxcSpecificConfig.HVXCrateMode.value;    DPextensionFlag = audSpC->specConf.hvxcSpecificConfig.extensionFlag.value;  }  else {	/* not necessary any more ? */        hdrStream = BsOpenBufferRead(bitHeader);    if (BsGetBitInt(hdrStream,(unsigned int*)&DPvarMode,1))      CommonExit(1,"DecHvxcInit: error reading bit stream header");    if (BsGetBitInt(hdrStream,(unsigned int*)&DPrateMode,2))      CommonExit(1,"DecHvxcInit: error reading bit stream header");    if (BsGetBitInt(hdrStream,(unsigned int*)&DPextensionFlag,1))      CommonExit(1,"DecHvxcInit: error reading bit stream header");    BsClose(hdrStream);  }    DPframeMaxNumSample = 160 * (int) ceil(1.0 / MINSPEEDFACT);    if (DPdelayMode == DM_LONG)	/* HP 971023 */    DPdelayNumSample = 80;	/* 10 ms */  else    DPdelayNumSample = 60;	/* 7.5 ms */  hvxcD = hvxc_decode_init(DPvarMode,			   DPrateMode,			   DPextensionFlag,			   DPdelayMode,			   DPtestMode);  hvxcD->frameNumSample = DPframeMaxNumSample;  hvxcD->delayNumSample = DPdelayNumSample;  if (DPdebugLevel >= 1) {    printf("DecHvxcInitNew: decDlyMode=%d  vrMode=%d  rateMode=%d\n",	   DPdelayMode,DPvarMode,DPrateMode);  }    if ((hvxcD->sampleBuf=(float**)malloc(numChannel*sizeof(float*)))==NULL)    CommonExit(1,"DecHvxcInitNew: memory allocation error");  for (i=0; i<numChannel; i++)    if ((hvxcD->sampleBuf[i]=(float*)malloc(DPframeMaxNumSample*sizeof(float)))==NULL)      CommonExit(1,"DecHvxcInitNew: memory allocation error");  return(hvxcD);}/* DecHvxcInit() *//* Init parametric decoder core. */HvxcDecStatus *DecHvxcInit (  int numChannel,		/* in: num audio channels */  float fSample,		/* in: sampling frequency [Hz] */  float bitRate,		/* in: total bit rate [bit/sec] */  char *decPara,		/* in: decoder parameter string */  BsBitBuffer *bitHeader,	/* in: header from bit stream */  int *frameMaxNumSample,	/* out: max num samples per frame */  int *delayNumSample		/* out: decoder delay (num samples) */  ){  int parac;  char **parav;  int result;  BsBitStream *hdrStream;  HvxcDecStatus *hvxcD;    /* evalute decoder parameter string */  parav = CmdLineParseString(decPara,SEPACHAR,&parac);  result = CmdLineEval(parac,parav,NULL,switchList,1,NULL);  if (result) {    if (result==1) {      DecParInfo(stdout);      exit (1);    }    else      CommonExit(1,"decoder parameter string error");  }  if (DPdebugLevel >= 1) {    printf("DecHvxcInit: numChannel=%d  fSample=%f  bitRate=%f\n",	   numChannel,fSample,bitRate);    printf("DecHvxcInit: decPara=\"%s\"\n",	   decPara);    printf("DecHvxcInit: debugLevel=%d\n",	   DPdebugLevel);    if (DPtestMode != TM_NORMAL) {      printf("DecHvxcInit: test_mode=%x(for HVXC decoder conformance testing)\n", DPtestMode);      if (DPtestMode & TM_POSFIL_DISABLE) {	printf("  - postfilter and post processing are skipped.\n");      }      if (DPtestMode & TM_INIT_PHASE_ZERO) {	printf("  - initial values of harmonic phase are reset to zeros.\n");      }      if (DPtestMode & TM_NOISE_ADD_DISABLE) {	printf("  - noise component addition are disabled.\n");      }      if (DPtestMode & TM_VXC_DISABLE) {	printf("  - the output of Time Domain Decoder is disabled.\n");      }    }  }  if (numChannel != 1)    CommonExit(1,"DecHvxcInit: audio data has more the one channel (%d)",	       numChannel);  CmdLineParseFree(parav);  DPfSample = fSample;  DPbitRate = bitRate;  hdrStream = BsOpenBufferRead(bitHeader);  if (BsGetBitInt(hdrStream,(unsigned int*)&DPvarMode,1))    CommonExit(1,"DecHvxcInit: error reading bit stream header");  if (BsGetBitInt(hdrStream,(unsigned int*)&DPrateMode,2))    CommonExit(1,"DecHvxcInit: error reading bit stream header");  if (BsGetBitInt(hdrStream,(unsigned int*)&DPextensionFlag,1))    CommonExit(1,"DecHvxcInit: error reading bit stream header");  DPframeMaxNumSample = 160 * (int) ceil(1.0 / MINSPEEDFACT);    if (DPdelayMode == DM_LONG)	/* HP 971023 */    DPdelayNumSample = 80;	/* 10 ms */  else    DPdelayNumSample = 60;	/* 7.5 ms */  hvxcD = hvxc_decode_init(DPvarMode,			 DPrateMode,			 DPextensionFlag,			 DPdelayMode,			 DPtestMode);    BsClose(hdrStream);  *frameMaxNumSample = DPframeMaxNumSample;  *delayNumSample = DPdelayNumSample;  if (DPdebugLevel >= 1) {    printf("DecHvxcInit: decDlyMode=%d  vrMode=%d  rateMode=%d\n",	   DPdelayMode,DPvarMode,DPrateMode);  }  return(hvxcD);}/* DecHvxcFrame() *//* Decode one bit stream frame into one audio frame with *//* HVXC decoder core. */void DecHvxcFrame (  HvxcDecStatus *hvxcD,		/* in: HVXC decoder status handle */  BsBitBuffer *bitBuf,		/* in: bit stream frame */  float **sampleBuf,		/* out: audio frame samples */				/*     sampleBuf[numChannel][frameNumSample] */  int *usedNumBit,		/* out: num bits used for this frame */  int *frameBufNumSample,	/* out: num samples in sampleBuf[][] */  float speedFact,		/* in: speed change factor(AI 990127) */  float pitchFact		/* in: pitch change factor(AI 990127) */  ){  BsBitStream *stream;  int i, j;  unsigned char tmpIdVUV;  unsigned char tmpEncBit;  unsigned char encBit[10];  if (DPdebugLevel >= 1)    printf("DecHvxcFrame: availNum=%ld\n",BsBufferNumBit(bitBuf));  if (speedFact<MINSPEEDFACT) {    speedFact = MINSPEEDFACT;    CommonWarning("DecParFrameIl: speedFact below %f",MINSPEEDFACT);  }    stream = BsOpenBufferRead(bitBuf);  if (DPdebugLevel >= 2) {    printf("DecHvxcFrame: stream=%s\n",stream?"valid":"NULL");    printf("DecHvxcFrame: decMode=");    switch (DPrateMode) {    case DEC0K : printf("DEC0K\n"); break;    case DEC2K : printf("DEC2K\n"); break;    case DEC3K : printf("DEC3K\n"); break;    case DEC4K : printf("DEC4K\n"); break;    default : printf("ERROR!!!\n");    }  }  for (i = 0; i < 5; i++) encBit[i] = 0;    if (DPrateMode == DEC4K || DPrateMode == DEC3K)	/* Modified on 07/04/97 by Y.Maeda */  {    {      for(j = 0; j < 9; j++)        if(BsGetBitChar(stream, &encBit[j], 8))	  CommonExit(1,"DecParFrameHvx: error reading bit stream");      if (DPrateMode == DEC4K) {        if(BsGetBitChar(stream, &encBit[9], 8)) /* MN 971106 */	  CommonExit(1,"DecParFrameHvx: error reading bit stream");      }      else {        /* MN 971107 */        if(BsGetBitChar(stream, &tmpEncBit, 8-6))	  CommonExit(1,"DecParFrameHvx: error reading bit stream");        encBit[9] = (tmpEncBit & 0x3) << 6;      }    }  }  else if(DPrateMode == DEC2K)  {    if(DPvarMode == BM_VARIABLE)    {      if(BsGetBitChar(stream, &tmpIdVUV, 2))	CommonExit(1,"DecParFrameHvx: error reading bit stream");      encBit[0] = (tmpIdVUV << 6) & 0xc0;      /* HP 971111 */      if (DPdebugLevel >= 2)	printf("DecHvxcFrame: tmpIdVUV=%d\n", tmpIdVUV);      switch(tmpIdVUV)      {      case 0:	if(BsGetBitChar(stream, &tmpEncBit, 6))	  CommonExit(1,"DecParFrameHvx: error reading bit stream");	encBit[0] |= (tmpEncBit & 0x3f);	for(j = 1; j < 3; j++)	  if(BsGetBitChar(stream, &encBit[j], 8))	    CommonExit(1,"DecParFrameHvx: error reading bit stream");	if(BsGetBitChar(stream, &tmpEncBit, 4))	  CommonExit(1,"DecParFrameHvx: error reading bit stream");	encBit[3] = (tmpEncBit & 0xf) << 4;		if (sysFlag) {		  /* when system interface(flexmux) is used, data is byte aligned, */	  /* then extra reading is necessary(AI 990616) */	  if(BsGetBitChar(stream, &tmpEncBit, 4))	    CommonExit(1,"DecParFrameHvx: error reading bit stream");	}		break;      case 1:	/*** reading padded bits necessary(AI 990528) ***/	if(BsGetBitChar(stream, &tmpEncBit, 6))		  CommonExit(1,"DecParFrameHvx: error reading bit stream");	break;      case 2:      case 3:	if(BsGetBitChar(stream, &tmpEncBit, 6))	  CommonExit(1,"DecParFrameHvx: error reading bit stream");	encBit[0] |= (tmpEncBit & 0x3f);	for(j = 1; j < 5; j++)	  if(BsGetBitChar(stream, &encBit[j], 8))	    CommonExit(1,"DecParFrameHvx: error reading bit stream");	break;      }    }    else	/* DPvarMode == BM_CONSTANT */    {      for(j = 0; j < 5; j++)	if(BsGetBitChar(stream, &encBit[j], 8))	  CommonExit(1,"DecParFrameHvx: error reading bit stream");    }  }/* scalable mode (YM 990730) */  if (DPbitRate == 2000.0) DPdecMode = DEC2K;  else DPdecMode = DPrateMode;  hvxc_decode(hvxcD, 	      encBit, 	      sampleBuf[0], 	      frameBufNumSample,	      speedFact,	      pitchFact,	      DPdecMode	/* DPrateMode : scalability (YM 990730) */	      );  *usedNumBit = BsCurrentBit(stream);  BsCloseRemove(stream,1);  if (DPdebugLevel >= 1)    printf("DecHvxcFrame: numBit=%d  numSample=%d\n",	   *usedNumBit,*frameBufNumSample);}/* DecParFree() *//* Free memory allocated by parametric decoder core. */void DecHvxcFree(HvxcDecStatus *hvxcD		/* in: HVXC decoder status handle */) {  if (DPdebugLevel >= 1)    printf("DecHvxcFree: ...\n");  if (sysFlag) {      free( hvxcD->sampleBuf[0] );      free( hvxcD->sampleBuf );  }  hvxc_decode_free(hvxcD);}/* end of dec_par.c */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -