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

📄 sp_enc.c

📁 AMR-NB 的编码实现,纯C, VC下建立工程即可用.
💻 C
📖 第 1 页 / 共 2 页
字号:
 
 #include "sp_enc.h"
 
#include "typedef.h"#include "basic_op.h" 
 
#include "prm2bits.h"
#include "cod_amr.h"#ifdef MMS_IO #include "bitno_tab.h"
#endif 
/*************************************************************************
  Function:    Speech_Encode_Frame_init
  Purpose:    Allocates memory for filter structure and initializes  state memory
  Input    :
              state      : pointer of Speech_Encode_FrameState struct pointer 
              sidstate : pointer of sid_syncState struct pointer
              
  Output :
              state      : pointer of Speech_Encode_FrameState struct pointer 
              sidstate : pointer of sid_syncState struct pointer

***************************************************************************/
int Speech_Encode_Frame_init (void **amrcoder , Flag dtx)
{   AmrNBCoder * amrnbcoder;
   Speech_Encode_FrameState* s;
   Pre_ProcessState* pProState;   //cod_amrState * pAmrSate;
   sid_syncState* pSidstate;
	
#if 1	   
  if ((AmrNBCoder**)amrcoder == (AmrNBCoder**) NULL)
  {      //fprintf(stderr, "Speech_Encode_Frame_init: invalid parameter\n");
      return -1;  }
 *amrcoder = NULL;
 #endif
 
  /* allocate memory */  if ((amrnbcoder = (AmrNBCoder*) malloc(sizeof(AmrNBCoder))) == NULL)
   {      //fprintf(stderr, "Speech_Encode_Frame_init: can not malloc state structure\n");
      return -1;  }

  amrnbcoder->SidsyncState = NULL;
  amrnbcoder->SpeechEncodeFrameState =  NULL;

  
   /* allocate memory */  if ((s= (Speech_Encode_FrameState *) malloc(sizeof(Speech_Encode_FrameState))) == NULL)   {      //fprintf(stderr, "Speech_Encode_Frame_init: can not malloc state structure\n");
      return -1;  }  s->pre_state = NULL;
  s->cod_amr_state = NULL;  s->dtx = dtx;   /* allocate memory : Pre_Process_init(&s->pre_state)*/  if ((&s->pre_state) == (Pre_ProcessState **) NULL)  {      //fprintf(stderr, "Pre_Process_init: invalid parameter\n");
      return -1;  }    s->pre_state = NULL;   if ((pProState = (Pre_ProcessState *) malloc(sizeof(Pre_ProcessState))) == NULL)  {      //fprintf(stderr, "Pre_Process_init: can not malloc state structure\n");
      return -1;  }     // Pre_Process_reset(s);   pProState->y2_hi = 0;   pProState->y2_lo = 0;   pProState->y1_hi = 0;   pProState->y1_lo = 0;   pProState->x0 = 0;   pProState->x1 = 0;     s->pre_state = pProState;  if (cod_amr_init(&s->cod_amr_state, s->dtx))   {      //Speech_Encode_Frame_exit((void**)&s, (void**)&pSidstate );
      Speech_Encode_Frame_exit(amrcoder);
	  
      return -1;  }   Speech_Encode_Frame_reset(s);
    // *state = (void*)s;
    amrnbcoder->SpeechEncodeFrameState =  s;
  
#if 0 	
    if (sidstate == (sid_syncState **) NULL)
   {        //fprintf(stderr, "sid_sync_init:invalid state parameter\n");
        return -1;    }       *sidstate = NULL;
#endif

   // sidstate = NULL;
    /* allocate memory */    if ((pSidstate = (sid_syncState *)malloc(sizeof(sid_syncState))) == NULL)
    {       // fprintf(stderr,"sid_sync_init: " "can not malloc state structure\n");
        return -1;    }    pSidstate->sid_update_rate = 8;
	
    pSidstate->sid_update_counter = 3;
    pSidstate->sid_handover_debt = 0;
    pSidstate->prev_ft = TX_SPEECH_GOOD;

    //*sidstate = (void*)pSidstate;

    amrnbcoder->SidsyncState = pSidstate;

    *amrcoder  = amrnbcoder;
	
    
#if 0
   Speech_Encode_FrameState* s;   Pre_ProcessState* pProState;   cod_amrState * pAmrSate;
   sid_syncState* pSidstate;
	
#if 1	   
  if (state == (Speech_Encode_FrameState **) NULL)  {      //fprintf(stderr, "Speech_Encode_Frame_init: invalid parameter\n");
      return -1;  }
 *state = NULL;
 #endif
 // state = NULL;
 
   /* allocate memory */  if ((s= (Speech_Encode_FrameState *) malloc(sizeof(Speech_Encode_FrameState))) == NULL)   {      //fprintf(stderr, "Speech_Encode_Frame_init: can not malloc state structure\n");
      return -1;  }  s->pre_state = NULL;
  s->cod_amr_state = NULL;  s->dtx = dtx;   /* allocate memory : Pre_Process_init(&s->pre_state)*/  if ((&s->pre_state) == (Pre_ProcessState **) NULL)  {      //fprintf(stderr, "Pre_Process_init: invalid parameter\n");
      return -1;  }    s->pre_state = NULL;   if ((pProState = (Pre_ProcessState *) malloc(sizeof(Pre_ProcessState))) == NULL)  {      //fprintf(stderr, "Pre_Process_init: can not malloc state structure\n");
      return -1;  }     // Pre_Process_reset(s);   pProState->y2_hi = 0;   pProState->y2_lo = 0;   pProState->y1_hi = 0;   pProState->y1_lo = 0;   pProState->x0 = 0;   pProState->x1 = 0;     s->pre_state = pProState;  if (cod_amr_init(&s->cod_amr_state, s->dtx))   {      Speech_Encode_Frame_exit((void**)&s, (void**)&pSidstate );
      return -1;  }   Speech_Encode_Frame_reset(s);
     *state = (void*)s;

#if 1  	
    if (sidstate == (sid_syncState **) NULL)
   {        //fprintf(stderr, "sid_sync_init:invalid state parameter\n");
        return -1;    }       *sidstate = NULL;
#endif

   // sidstate = NULL;
    /* allocate memory */    if ((pSidstate = (sid_syncState *)malloc(sizeof(sid_syncState))) == NULL)
    {       // fprintf(stderr,"sid_sync_init: " "can not malloc state structure\n");
        return -1;    }    pSidstate->sid_update_rate = 8;
	
    pSidstate->sid_update_counter = 3;
    pSidstate->sid_handover_debt = 0;
    pSidstate->prev_ft = TX_SPEECH_GOOD;

    *sidstate = (void*)pSidstate;
	

 #endif
  return 0;
} /*************************************************************************
    Function:   Speech_Encode_Frame_reset
    
    Purpose:    Resetses state memory
    Inputs:       state : frame-encoding state pointer
    Outputs:
    Return:

**************************************************************************/

int Speech_Encode_Frame_reset (Speech_Encode_FrameState *state)
{
	Speech_Encode_FrameState *pstate = state;

	pstate->pre_state->y2_hi = 0;
	pstate->pre_state->y2_lo = 0;
	pstate->pre_state->y1_hi = 0;
	pstate->pre_state->y1_lo = 0;
	pstate->pre_state->x0 = 0;
	pstate->pre_state->x1 = 0;

	cod_amr_reset(pstate->cod_amr_state);

	return 0;
} /*************************************************************************
  Function:   Speech_Encode_Frame_exit
  Purpose:    The memory used for state memory is freed
   

***************************************************************************/
void Speech_Encode_Frame_exit (void **amrcoder)
{
      AmrNBCoder **pamrcoder = (AmrNBCoder**)amrcoder;

      Speech_Encode_FrameState **pstate;
      sid_syncState **psidstate;

      if(pamrcoder == NULL || *pamrcoder == NULL)
	  	return;
	  	
	  
	  
       pstate      = (Speech_Encode_FrameState **)(&((*pamrcoder)->SpeechEncodeFrameState));
	psidstate = (sid_syncState **)(&((*pamrcoder)->SidsyncState));
	
	if (pstate == NULL || *pstate == NULL)
		return;	//Pre_Process_exit(&(*state)->pre_state);	if (&(*pstate)->pre_state == NULL || (*pstate)->pre_state == NULL)
		return;	/* deallocate memory */	free( (*pstate)->pre_state);
	(*pstate)->pre_state = NULL;
	cod_amr_exit(&(*pstate)->cod_amr_state);
	/* deallocate memory */	free(*pstate);
	*pstate = NULL;

	//sid_sync_exit (&sid_state);
	if (psidstate == NULL || *psidstate == NULL)
	return;

	/* deallocate memory */
	free(*psidstate);
	*psidstate = NULL;


	free(*pamrcoder);
	   *pamrcoder = NULL;
  
#if 0	  
      Speech_Encode_FrameState **pstate;
      sid_syncState **psidstate;
	  
       pstate      = (Speech_Encode_FrameState **)state;
	psidstate = (sid_syncState **)sidstate;
	
	if (pstate == NULL || *pstate == NULL)
		return;	//Pre_Process_exit(&(*state)->pre_state);	if (&(*pstate)->pre_state == NULL || (*pstate)->pre_state == NULL)
		return;	/* deallocate memory */	free( (*pstate)->pre_state);
	(*pstate)->pre_state = NULL;
	cod_amr_exit(&(*pstate)->cod_amr_state);
	/* deallocate memory */	free(*pstate);
	*pstate = NULL;

	//sid_sync_exit (&sid_state);
	if (psidstate == NULL || *psidstate == NULL)
	return;

	/* deallocate memory */
	free(*psidstate);
	*psidstate = NULL;
  #endif

  return;}

⌨️ 快捷键说明

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