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

📄 celp_decoder.c

📁 MPEG2/MPEG4编解码参考程序(实现了MPEG4的部分功能)
💻 C
📖 第 1 页 / 共 4 页
字号:
       if((*org_frame_bit_allocation=(long *)calloc(num_indices, 						    sizeof(long)))==NULL) {	 fprintf(stderr,"\n memory allocation error in initialization_encoder\n");	 exit(3);       }       ctr = 0;       *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP22_0;       *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP22_1;       *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP22_2;       *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP22_3;       *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP22_4;       *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_MODE;       *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_RMS;       for ( i = 0; i < *n_subframes; i++ ) {	 *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_ACB;	 *(*org_frame_bit_allocation+(ctr++)) =  mp_pos_bits;	 *(*org_frame_bit_allocation+(ctr++)) =  mp_sgn_bits;	 *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_GAIN;       }       for ( i = 0; i < num_enhstages; i++ ) {	 for ( j = 0; j < *n_subframes; j++ ) {	   *(*org_frame_bit_allocation+(ctr++)) =  0;	   *(*org_frame_bit_allocation+(ctr++)) =  enh_pos_bits;	   *(*org_frame_bit_allocation+(ctr++)) =  enh_sgn_bits;	   *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_ENH_GAIN;	 }       }       if (*BandwidthScalabilityMode==ON) {	 *(*org_frame_bit_allocation+(ctr++)) = NEC_BIT_LSP1620_0;	 *(*org_frame_bit_allocation+(ctr++)) = NEC_BIT_LSP1620_1;	 *(*org_frame_bit_allocation+(ctr++)) = NEC_BIT_LSP1620_2;	 *(*org_frame_bit_allocation+(ctr++)) = NEC_BIT_LSP1620_3; 	 *(*org_frame_bit_allocation+(ctr++)) = NEC_BIT_LSP1620_4; 	 *(*org_frame_bit_allocation+(ctr++)) = NEC_BIT_LSP1620_5;	 for ( i = 0; i < n_subframes_bws; i++ ) {	   *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_ACB_FRQ16;	   *(*org_frame_bit_allocation+(ctr++)) =  bws_pos_bits;	   *(*org_frame_bit_allocation+(ctr++)) =  bws_sgn_bits;	   *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_GAIN_FRQ16;	 }       }       if((prev_Qlsp_coefficients=(float *)calloc(*lpc_order,						  sizeof(float)))==NULL) {	 fprintf(stderr,"\n memory allocation error in initialization_decoder\n");	 exit(5);       }       for(i=0;i<(*lpc_order);i++) 	 *(prev_Qlsp_coefficients+i) = (i+1)/(float)((*lpc_order)+1);       if (*BandwidthScalabilityMode==ON) {	 if((buf_Qlsp_coefficients_bws=(float *)calloc(*lpc_order,						      sizeof(float)))==NULL) {	   fprintf(stderr,"\n memory allocation error in initialization_decoder\n");	   exit(5);	 }	 if((prev_Qlsp_coefficients_bws=(float *)calloc(lpc_order_bws,							sizeof(float)))==NULL) {	   fprintf(stderr,"\n memory allocation error in initialization_decoder\n");	   exit(5);	 }	 for(i=0;i<(lpc_order_bws);i++) 	   *(prev_Qlsp_coefficients_bws+i) = PAN_PI * (i+1)	     / (float)(lpc_order_bws+1);       }       /* submodules for initialization */       if ((*BandwidthScalabilityMode==ON)&&(dec_bwsmode)) {	 PHI_InitLpcAnalysisDecoder(lpc_order_bws, *lpc_order, InstCtxt->PHI_Priv);       } else {	 PHI_InitLpcAnalysisDecoder(*lpc_order, *lpc_order, InstCtxt->PHI_Priv);       }       if (*LosslessCodingMode == ON) {	 *num_lpc_indices     = 10;          }     }     if (*SampleRateMode == fs16kHz) {       int i, j;       long	ctr;		       num_enhstages = *NumEnhLayers;       dec_enhstages = DecEnhStage;       if ((*MPE_Configuration>=0) && (*MPE_Configuration<7)) {	 *frame_size = NEC_FRAME20MS_FRQ16;	 *n_subframes = NEC_NSF4;       } else if((*MPE_Configuration>=8)&&(*MPE_Configuration<16)) {	 *frame_size = NEC_FRAME20MS_FRQ16;	 *n_subframes = NEC_NSF8;       } else if((*MPE_Configuration>=16)&&(*MPE_Configuration<23)) {	 *frame_size = NEC_FRAME10MS_FRQ16;	 *n_subframes = NEC_NSF2;       } else if((*MPE_Configuration>=24)&&(*MPE_Configuration<32)) {	 *frame_size = NEC_FRAME10MS_FRQ16;	 *n_subframes = NEC_NSF4;       } else {	 fprintf(stderr,"Error: Illegal BitRate configuration.\n");	 exit(1);        }       *sbfrm_size = *frame_size/(*n_subframes);       *lpc_order = NEC_LPC_ORDER_FRQ16;       *num_shape_cbks = NEC_NUM_SHAPE_CBKS;       *num_gain_cbks = NEC_NUM_GAIN_CBKS;       *num_lpc_indices = PAN_NUM_LPC_INDICES_W;              num_indices = NEC_NUM_OTHER_INDICES + PAN_NUM_LPC_INDICES_W	 + (num_enhstages + 1) * (*n_subframes) *	   (NEC_NUM_SHAPE_CBKS+NEC_NUM_GAIN_CBKS);       switch ( *MPE_Configuration ) {       case 0:	 mp_pos_bits = 20; mp_sgn_bits =  5; break;       case 1:	 mp_pos_bits = 22; mp_sgn_bits =  6; break;       case 2:	 mp_pos_bits = 24; mp_sgn_bits =  7; break;       case 3:	 mp_pos_bits = 26; mp_sgn_bits =  8; break;       case 4:	 mp_pos_bits = 28; mp_sgn_bits =  9; break;       case 5:	 mp_pos_bits = 30; mp_sgn_bits =  10; break;       case 6:	 mp_pos_bits = 31; mp_sgn_bits =  11; break;       case 7:	 break;       case 8:	 mp_pos_bits = 11; mp_sgn_bits =  3; break;       case 9:	 mp_pos_bits = 13; mp_sgn_bits =  4; break;       case 10:	 mp_pos_bits = 15; mp_sgn_bits =  5; break;       case 11:	 mp_pos_bits = 16; mp_sgn_bits =  6; break;       case 12:	 mp_pos_bits = 17; mp_sgn_bits =  7; break;       case 13:	 mp_pos_bits = 18; mp_sgn_bits =  8; break;       case 14:	 mp_pos_bits = 19; mp_sgn_bits =  9; break;       case 15:	 mp_pos_bits = 20; mp_sgn_bits =  10; break;       case 16:	 mp_pos_bits = 20; mp_sgn_bits =  5; break;       case 17:	 mp_pos_bits = 22; mp_sgn_bits =  6; break;       case 18:	 mp_pos_bits = 24; mp_sgn_bits =  7; break;       case 19:	 mp_pos_bits = 26; mp_sgn_bits =  8; break;       case 20:	 mp_pos_bits = 28; mp_sgn_bits =  9; break;       case 21:	 mp_pos_bits = 30; mp_sgn_bits =  10; break;       case 22:	 mp_pos_bits = 31; mp_sgn_bits =  11; break;       case 23:	 break;       case 24:	 mp_pos_bits = 11; mp_sgn_bits =  3; break;       case 25:	 mp_pos_bits = 13; mp_sgn_bits =  4; break;       case 26:	 mp_pos_bits = 15; mp_sgn_bits =  5; break;       case 27:	 mp_pos_bits = 16; mp_sgn_bits =  6; break;       case 28:	 mp_pos_bits = 17; mp_sgn_bits =  7; break;       case 29:	 mp_pos_bits = 18; mp_sgn_bits =  8; break;       case 30:	 mp_pos_bits = 19; mp_sgn_bits =  9; break;       case 31:	 mp_pos_bits = 20; mp_sgn_bits =  10; break;       }       if ( *sbfrm_size == NEC_SBFRM_SIZE40 ) {	 enh_pos_bits = NEC_BIT_ENH_POS40_2;	 enh_sgn_bits = NEC_BIT_ENH_SGN40_2;       } else {	 enh_pos_bits = NEC_BIT_ENH_POS80_4;	 enh_sgn_bits = NEC_BIT_ENH_SGN80_4;       }       if((*org_frame_bit_allocation=(long *)calloc(num_indices, 						    sizeof(long)))==NULL) {	 fprintf(stderr,"\n memory allocation error in initialization_encoder\n");	 exit(3);       }       ctr = 0;       *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WL_0;       *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WL_1;       *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WL_2;       *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WL_3;       *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WL_4;       *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WU_0;       *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WU_1;       *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WU_2;       *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WU_3;       *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WU_4;       *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_MODE;       *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_RMS;       for ( i = 0; i < *n_subframes; i++ ) {	 *(*org_frame_bit_allocation+(ctr++)) =  NEC_ACB_BIT_WB;	 *(*org_frame_bit_allocation+(ctr++)) =  mp_pos_bits;	 *(*org_frame_bit_allocation+(ctr++)) =  mp_sgn_bits;	 *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_GAIN_WB;       }       for ( i = 0; i < num_enhstages; i++ ) {	 for ( j = 0; j < *n_subframes; j++ ) {	   *(*org_frame_bit_allocation+(ctr++)) =  0;	   *(*org_frame_bit_allocation+(ctr++)) =  enh_pos_bits;	   *(*org_frame_bit_allocation+(ctr++)) =  enh_sgn_bits;	   *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_ENH_GAIN;	 }       }       if((prev_Qlsp_coefficients=(float *)calloc(*lpc_order,						  sizeof(float)))==NULL) {	 fprintf(stderr,"\n memory allocation error in initialization_decoder\n");	 exit(5);       }       for(i=0;i<(*lpc_order);i++) 	 *(prev_Qlsp_coefficients+i) = (i+1)/(float)((*lpc_order)+1);       /* submodules for initialization */       PHI_InitLpcAnalysisDecoder(*lpc_order, *lpc_order, InstCtxt->PHI_Priv);     }   }}/*======================================================================*//*   Function Definition: celp_close_decoder                            *//*======================================================================*/void celp_close_decoder(   long ExcitationMode,   long SampleRateMode,   long BandwidthScalabilityMode,   long frame_bit_allocation[],         /* In: bit num. for each index */   void **InstanceContext               /* In/Out: handle to instance context */){  INST_CONTEXT_LPC_DEC_TYPE *InstCtxt;  PHI_PRIV_TYPE *PHI_Priv;    /* -----------------------------------------------------------------*/  /* Set up pointers to private data                                  */  /* -----------------------------------------------------------------*/  PHI_Priv = ((INST_CONTEXT_LPC_DEC_TYPE *) *InstanceContext)->PHI_Priv;  /* -----------------------------------------------------------------*/  /*                                                                  */  /* -----------------------------------------------------------------*/   if (ExcitationMode == RegularPulseExc)  {  	PHI_ClosePostProcessor(PHI_Priv);    	PHI_close_excitation_generation(PHI_Priv);    	PHI_FreeLpcAnalysisDecoder(PHI_Priv);     	PHI_free_bit_allocation(frame_bit_allocation);  }	  if (ExcitationMode == MultiPulseExc)  {    	free(prev_Qlsp_coefficients); 	PHI_FreeLpcAnalysisDecoder(PHI_Priv);	if (BandwidthScalabilityMode == ON)	{	  free(buf_Qlsp_coefficients_bws);	  free(prev_Qlsp_coefficients_bws);	}  }	    /* -----------------------------------------------------------------*/    /* Print Total Frames Processed                                     */    /* -----------------------------------------------------------------*/     if (CELPdecDebugLevel) {	/* HP 971120 */      fprintf(stderr,"\n");      fprintf(stderr,"Total Frames:  %ld \n", frame_ctr);    }    /* -----------------------------------------------------------------*/    /* Dispose of private storage for instance context                  */    /* -----------------------------------------------------------------*/    InstCtxt = (INST_CONTEXT_LPC_DEC_TYPE *)*InstanceContext;    free(InstCtxt->PHI_Priv);    free(InstCtxt);    *InstanceContext = NULL;}/*======================================================================*//*      H I S T O R Y                                                   *//*======================================================================*//* 01-09-96 R. Taori  Initial Version                                   *//* 18-09-96 R. Taori  Brought in line with MPEG-4 Interface             *//* 05-05-98 R. Funken Brought in line with MPEG-4 FCD: 3 complexity levels */

⌨️ 快捷键说明

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