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

📄 dec_lpc.c

📁 MPEG2/MPEG4编解码参考程序(实现了MPEG4的部分功能)
💻 C
📖 第 1 页 / 共 2 页
字号:
  /* ---------------------------------------------------------------- */  /* Decoder Initialisation                                           */  /* ---------------------------------------------------------------- */  celp_initialisation_decoder(      hdrStream, bit_rate, complexity_level, reduced_order, DecEnhStage, DecBwsMode, PostFilterSW, &frame_size, &n_subframes, &sbfrm_size,		      &lpc_order,&num_lpc_indices,&num_shape_cbks,&num_gain_cbks,&org_frame_bit_allocation,			      &ExcitationMode,		  &SampleRateMode, &QuantizationMode, &FineRateControl, &LosslessCodingMode, &RPE_configuration, 		  &Wideband_VQ, &MPE_Configuration, &NumEnhLayers, &BandwidthScalabilityMode, &BWS_configuration,		  &InstanceContext,mp4ffFlag);  *frameNumSample = frame_size;  *delayNumSample = 0;  BsClose(hdrStream);}void DecLpcInitNew (  char *decPara,                   /* in: decoder parameter string     */  FRAME_DATA*  fD,  LPC_DATA*    lpcData,  int layer  )             /* out: decoder delay (num samples) */{  int parac;  char **parav;  int result;  int numChannel;#if 0  int MPE_conf;#endif  double frameLengthTime;#if 0  BsBitBuffer *bitHeader;#endif  BsBitStream *hdrStream=NULL;  AUDIO_SPECIFIC_CONFIG* audSpC ;  int mp4ffFlag    =1;    lpcData->coreBitBuf = BsAllocBuffer( 4000 );      /* just some large number. For G729 required: 160 */  if((lpcData->sampleBuf=(float**)(malloc(1 * sizeof (float*) )))==NULL)     CommonExit(1, "Memory allocation error in enc_lpc");  if((lpcData->sampleBuf[0] =(float*)malloc(sizeof(float)*1024))==NULL)         CommonExit(1, "Memory allocation error in enc_lpc");  audSpC = &fD->od->ESDescriptor[layer]->DecConfigDescr.audioSpecificConfig;#if 0  bitHeader=NULL;#endif      switch (audSpC->channelConfiguration.value) {  case 1 :numChannel=1;           break;  default: CommonExit(1,"wrong channel config");  }    /* evalute decoder parameter string */  parav = CmdLineParseString(decPara,SEPACHAR,&parac);  result = CmdLineEval(parac,parav,NULL,switchList,1,NULL);  if (result==1)     {      DecLpcInfo(stdout);      exit (1);    }  if (strstr(decPara, "-celp_sys") != NULL)     sysFlag = 1;  if ( (ExcitationMode == MultiPulseExc) && (SampleRateMode==fs16kHz) ) {    Wideband_VQ = Optimized_VQ;  }#if 0  /* -------------------------------------------------------------------*/  /* Memory allocation                                                  */  /* -------------------------------------------------------------------*/  if (bitHeader != NULL)    hdrStream = BsOpenBufferRead(bitHeader);  /* ---------------------------------------------------------------- */  /* Conversion of parameters from float to longs                     */  /* ---------------------------------------------------------------- */  bit_rate           = (long)(fD->od->ESDescriptor[layer]->DecConfigDescr.avgBitrate.value +.5);  sampling_frequency = (long)(samplFreqIndex[                                             fD->od->ESDescriptor[layer]->DecConfigDescr.audioSpecificConfig.samplingFreqencyIndex.value]+.5);  if (sampling_frequency==7350) {    sampling_frequency=8000;  }    MPE_conf=fD->od->ESDescriptor[0]->DecConfigDescr\       .audioSpecificConfig.specConf.celpSpecificConfig.MPE_Configuration.value;  lpcData->frameNumSample=MPE_Table[MPE_conf];  frameLengthTime=(double)lpcData->frameNumSample/(double)sampling_frequency;  lpcData->bitsPerFrame = (int)(bit_rate*frameLengthTime);     #endif  if (mp4ffFlag==1) {    int layer=0;     CELP_SPECIFIC_CONFIG *celpConf=      &fD->od->ESDescriptor[layer]->DecConfigDescr.audioSpecificConfig.specConf.celpSpecificConfig;        ExcitationMode           =   celpConf->excitationMode.value ;    SampleRateMode           =   celpConf->sampleRateMode.value ;    FineRateControl          =   celpConf->fineRateControl.value;    RPE_configuration        =   celpConf->RPE_Configuration.value;    MPE_Configuration        =   celpConf->MPE_Configuration.value ;    NumEnhLayers             =   celpConf->numEnhLayers.value;    BandwidthScalabilityMode =   celpConf->bandwidthScalabilityMode.value;    /* celp enhancement layer is not yet supported */    BWS_configuration       =   0; /*  in celpConf of celp enhancement layer */    if ( NumEnhLayers != 0 || BandwidthScalabilityMode != 0 ) {      CommonExit(1,"celp enhancement layer is not yet supported");    }  }  /* ---------------------------------------------------------------- */  /* Decoder Initialisation                                           */  /* ---------------------------------------------------------------- */  celp_initialisation_decoder(                              hdrStream,                               bit_rate,                               complexity_level,                               reduced_order,                               DecEnhStage,                               DecBwsMode,                               PostFilterSW,                               &frame_size,                               &n_subframes,                               &sbfrm_size,		                              &lpc_order,                              &num_lpc_indices,                              &num_shape_cbks,                              &num_gain_cbks,                              &org_frame_bit_allocation,                              &ExcitationMode,                              &SampleRateMode,                               &QuantizationMode,                               &FineRateControl,                               &LosslessCodingMode,                               &RPE_configuration,                               &Wideband_VQ,                               &MPE_Configuration,                               &NumEnhLayers,                               &BandwidthScalabilityMode,                               &BWS_configuration,                              &InstanceContext,                              mp4ffFlag);    lpcData->frameNumSample = frame_size;  lpcData->delayNumSample = 0;  bit_rate           = (long)(fD->od->ESDescriptor[layer]->DecConfigDescr.avgBitrate.value +.5);  sampling_frequency = (long)(samplFreqIndex[                                             fD->od->ESDescriptor[layer]->DecConfigDescr.audioSpecificConfig.samplingFreqencyIndex.value]+.5);  if (sampling_frequency==7350) {    sampling_frequency=8000;  }    frameLengthTime=(double)lpcData->frameNumSample/(double)sampling_frequency;  lpcData->bitsPerFrame = (int)(bit_rate*frameLengthTime);     /*   free(lpcData->p_bitstream); we use the memory in DecLpcFrameNew*/}/* ------------------------------------------------------------------- *//* DecLpcFrame()                                                       *//* Decode one bit stream frame into one audio frame with               *//* LPC-based decoder core.                                             *//* ------------------------------------------------------------------- */void DecLpcFrame (  BsBitBuffer *bitBuf,    /* in: bit stream frame                      */  float **sampleBuf,      /* out: audio frame samples                  */                          /*     sampleBuf[numChannel][frameNumSample] */  int *usedNumBit)        /* out: num bits used for this frame         */{  /* ----------------------------------------------------------------- */  /* Memory allocation                                                 */  /* ----------------------------------------------------------------- */  BsBitStream *bitStream = BsOpenBufferRead(bitBuf);  /* ----------------------------------------------------------------- */  /*Call Decoder                                                       */  /* ----------------------------------------------------------------- */  celp_decoder( bitStream, sampleBuf,	       ExcitationMode,		  SampleRateMode, QuantizationMode, FineRateControl, LosslessCodingMode,		  RPE_configuration, Wideband_VQ, MPE_Configuration, NumEnhLayers, BandwidthScalabilityMode,      BWS_configuration, frame_size,	n_subframes, sbfrm_size, lpc_order,	                num_lpc_indices, num_shape_cbks, num_gain_cbks,	                org_frame_bit_allocation,      InstanceContext  );    *usedNumBit = BsCurrentBit(bitStream);  BsCloseRemove(bitStream,1);#if 0  {    BsBitStream* layer_stream ;        layer_stream= BsOpenBufferRead(bitBuf);    BsGetSkip(layer_stream,p_bitstream->valid_bits);     BsCloseRemove(layer_stream,1);  }#endif    }void DecLpcFrameNew (  BsBitBuffer *bitBuf,    /* in: bit stream frame                      */  float **sampleBuf,      /* out: audio frame samples                  */                          /*     sampleBuf[numChannel][frameNumSample] */  LPC_DATA*    lpcData,  int *usedNumBit)        /* out: num bits used for this frame         */{  BsBitStream *bitStream = BsOpenBufferRead(bitBuf) ;   /* ----------------------------------------------------------------- */  /*Call Decoder                                                       */  /* ----------------------------------------------------------------- */  celp_decoder( bitStream, sampleBuf,                ExcitationMode,                SampleRateMode, QuantizationMode, FineRateControl, LosslessCodingMode,                RPE_configuration, Wideband_VQ, MPE_Configuration, NumEnhLayers, BandwidthScalabilityMode,                BWS_configuration, frame_size,	n_subframes, sbfrm_size, lpc_order,	                          num_lpc_indices, num_shape_cbks, num_gain_cbks,	                          org_frame_bit_allocation,                InstanceContext  );    *usedNumBit = BsCurrentBit(bitStream);  if (sysFlag) {    int celp_sys_align;    celp_sys_align = 8 - (*usedNumBit % 8);    if (celp_sys_align == 8) celp_sys_align = 0;    BsGetSkip(bitStream,celp_sys_align);    *usedNumBit = BsCurrentBit(bitStream);  }  BsCloseRemove(bitStream,1);/*  BsClose(bitStream); */#pragma warning "BsCloseRemove must be used instead of BsClose"}/* ------------------------------------------------------------------- *//* DeLpcrFree()                                                        *//* Free memory allocated by LPC-based decoder core.                    *//* ------------------------------------------------------------------- */void DecLpcFree (){   celp_close_decoder(ExcitationMode, SampleRateMode, BandwidthScalabilityMode, org_frame_bit_allocation, &InstanceContext);}int lpcframelength( CELP_SPECIFIC_CONFIG *celpConf ){  int frame_size;  if ( celpConf->excitationMode.value == RegularPulseExc ) {    if (celpConf->RPE_Configuration.value == 0)	{      frame_size = FIFTEEN_MS;    } else if (celpConf->RPE_Configuration.value == 1) {      frame_size  = TEN_MS;    } else if (celpConf->RPE_Configuration.value == 2) {      frame_size  = FIFTEEN_MS;    } else if (celpConf->RPE_Configuration.value == 3) {      frame_size  = FIFTEEN_MS;    } else {      fprintf(stderr, "ERROR: Illegal RPE Configuration\n");      exit(1);     }  }  if ( celpConf->excitationMode.value == MultiPulseExc ) {    if ( celpConf->sampleRateMode.value == fs8kHz) {      if ( celpConf->MPE_Configuration.value < 3 ) {	frame_size = NEC_FRAME40MS;      }      if ( celpConf->MPE_Configuration.value >= 3 &&	   celpConf->MPE_Configuration.value < 6 ) {	frame_size = NEC_FRAME30MS;      }      if ( celpConf->MPE_Configuration.value >= 6 &&	   celpConf->MPE_Configuration.value < 22 ) {	frame_size = NEC_FRAME20MS;      }      if ( celpConf->MPE_Configuration.value >= 22 &&	   celpConf->MPE_Configuration.value < 27 ) {	frame_size = NEC_FRAME10MS;      }      if ( celpConf->MPE_Configuration.value == 27 ) {	frame_size = NEC_FRAME30MS;      }      if ( celpConf->MPE_Configuration.value > 27 ) {	fprintf(stderr,"Error: Illegal MPE Configuration.\n");	exit(1);       }      if ( celpConf->bandwidthScalabilityMode.value == ON ) {	frame_size = 2 * frame_size;      }    }    if ( celpConf->sampleRateMode.value == fs16kHz) {      if ( celpConf->MPE_Configuration.value < 16 ) {	frame_size = NEC_FRAME20MS_FRQ16;      }      if ( celpConf->MPE_Configuration.value >= 16 &&	   celpConf->MPE_Configuration.value < 32 ) {	frame_size = NEC_FRAME10MS_FRQ16;      }      if ( celpConf->MPE_Configuration.value == 7 ||	   celpConf->MPE_Configuration.value == 23 ) {	fprintf(stderr,"Error: Illegal BitRate configuration.\n");	exit(1);       }    }  }  return( frame_size );}/* end of dec_lpc.c */

⌨️ 快捷键说明

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