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

📄 sp_dec.cpp

📁 实现3GPP的GSM中AMR语音的CODECS。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
 When the code is written for a specific target processor the the resources used should be documented below. HEAP MEMORY USED: x bytes STACK MEMORY USED: x bytes CLOCK CYCLES: (cycle count equation for this function) + (variable                used to represent cycle count for each subroutine                called)     where: (cycle count variable) = cycle count for [subroutine                                     name]------------------------------------------------------------------------------ CAUTION [optional] [State any special notes, constraints or cautions for users of this function]------------------------------------------------------------------------------*/Word16 Speech_Decode_Frame_reset(void *state_data){    Speech_Decode_FrameState *state =        (Speech_Decode_FrameState *) state_data;    if (state_data ==  NULL)    {        /*  fprintf(stderr, "Speech_Decode_Frame_reset:                             invalid parameter\n");  */        return (-1);    }    Decoder_amr_reset(&(state->decoder_amrState), MR475);    Post_Filter_reset(&(state->post_state));    Post_Process_reset(&(state->postHP_state));    state->prev_mode = MR475;    return (0);}/****************************************************************************//*------------------------------------------------------------------------------ FUNCTION NAME: GSMDecodeFrameExit------------------------------------------------------------------------------ INPUT AND OUTPUT DEFINITIONS Inputs:    state = pointer to an array of pointers to structures of type            Speech_Decode_FrameState Outputs:    state contents is set to NULL Returns:    None Global Variables Used:    None Local Variables Needed:    None------------------------------------------------------------------------------ FUNCTION DESCRIPTION This function frees up the memory used for the state memory of the GSM AMR decoder.------------------------------------------------------------------------------ REQUIREMENTS None------------------------------------------------------------------------------ REFERENCES sp_dec.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001------------------------------------------------------------------------------ PSEUDO-CODE Note: The original function name of Speech_Decode_Frame_exit was changed to       GSMDecodeFrameExit in the Code section.void Speech_Decode_Frame_exit (Speech_Decode_FrameState **state){  if (state == NULL || *state == NULL)      return;  Decoder_amr_exit(&(*state)->decoder_amrState);  Post_Filter_exit(&(*state)->post_state);  Post_Process_exit(&(*state)->postHP_state);  setCounter((*state)->complexityCounter);  WMOPS_output(0);  setCounter(0); // set counter to global counter  // deallocate memory  free(*state);  *state = NULL;  return;}------------------------------------------------------------------------------ RESOURCES USED [optional] When the code is written for a specific target processor the the resources used should be documented below. HEAP MEMORY USED: x bytes STACK MEMORY USED: x bytes CLOCK CYCLES: (cycle count equation for this function) + (variable                used to represent cycle count for each subroutine                called)     where: (cycle count variable) = cycle count for [subroutine                                     name]------------------------------------------------------------------------------ CAUTION [optional] [State any special notes, constraints or cautions for users of this function]------------------------------------------------------------------------------*/void GSMDecodeFrameExit(void **state_data){    Speech_Decode_FrameState **state =        (Speech_Decode_FrameState **) state_data;    if (state == NULL || *state == NULL)    {        return;    }    /* deallocate memory */    oscl_free(*state);    *state = NULL;    return;}/****************************************************************************//*------------------------------------------------------------------------------ FUNCTION NAME: GSMFrameDecode------------------------------------------------------------------------------ INPUT AND OUTPUT DEFINITIONS Inputs:    st = pointer to structures of type Speech_Decode_FrameState    mode = GSM AMR codec mode (enum Mode)    serial = pointer to the serial bit stream buffer (unsigned char)    frame_type = GSM AMR receive frame type (enum RXFrameType)    synth = pointer to the output synthesis speech buffer (Word16) Outputs:    synth contents are truncated to 13 bits if NO13BIT is not defined,      otherwise, its contents are left at 16 bits Returns:    return_value = set to zero (int) Global Variables Used:    None Local Variables Needed:    None------------------------------------------------------------------------------ FUNCTION DESCRIPTION This function is the entry point to the GSM AMR decoder. The following operations are performed on one received frame: First, the codec parameters are parsed from the buffer pointed to by serial according to frame_type. Then the AMR decoder is invoked via a call to Decoder_amr. Post filtering of the decoded data is done via a call to Post_Filter function. Lastly, the decoded data is post-processed via a call to Post_Process function. If NO13BIT is not defined, the contents of the buffer pointed to by synth is truncated to 13 bits. It remains unchanged otherwise.------------------------------------------------------------------------------ REQUIREMENTS None------------------------------------------------------------------------------ REFERENCES sp_dec.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001------------------------------------------------------------------------------ PSEUDO-CODE Note: The original function name of Speech_Decode_Frame_exit was changed to       GSMFrameDecode in the Code section.int Speech_Decode_Frame (    Speech_Decode_FrameState *st, // io: post filter states    enum Mode mode,               // i : AMR mode    Word16 *serial,               // i : serial bit stream    enum RXFrameType frame_type,  // i : Frame type    Word16 *synth                 // o : synthesis speech (postfiltered                                  //     output)){  Word16 parm[MAX_PRM_SIZE + 1];  // Synthesis parameters  Word16 Az_dec[AZ_SIZE];         // Decoded Az for post-filter                                  // in 4 subframes#if !defined(NO13BIT)  Word16 i;#endif  setCounter(st->complexityCounter);  Reset_WMOPS_counter ();          // reset WMOPS counter for the new frame  // Serial to parameters  if ((frame_type == RX_SID_BAD) ||      (frame_type == RX_SID_UPDATE)) {    // Override mode to MRDTX    Bits2prm (MRDTX, serial, parm);  } else {    Bits2prm (mode, serial, parm);  }  // Synthesis  Decoder_amr(st->decoder_amrState, mode, parm, frame_type,              synth, Az_dec);  Post_Filter(st->post_state, mode, synth, Az_dec);   // Post-filter  // post HP filter, and 15->16 bits  Post_Process(st->postHP_state, synth, L_FRAME);#if !defined(NO13BIT)  // Truncate to 13 bits  for (i = 0; i < L_FRAME; i++)  {     synth[i] = synth[i] & 0xfff8;  }#endif  setCounter(0); // set counter to global counter  return 0;}------------------------------------------------------------------------------ RESOURCES USED [optional] When the code is written for a specific target processor the the resources used should be documented below. HEAP MEMORY USED: x bytes STACK MEMORY USED: x bytes CLOCK CYCLES: (cycle count equation for this function) + (variable                used to represent cycle count for each subroutine                called)     where: (cycle count variable) = cycle count for [subroutine                                     name]------------------------------------------------------------------------------ CAUTION [optional] [State any special notes, constraints or cautions for users of this function]------------------------------------------------------------------------------*/void GSMFrameDecode(    Speech_Decode_FrameState *st, /* io: post filter states                */    enum Mode mode,               /* i : AMR mode                          */    Word16 *serial,               /* i : serial bit stream                 */    enum RXFrameType frame_type,  /* i : Frame type                        */    Word16 *synth)                /* o : synthesis speech (postfiltered    *//*     output)                           */{    Word16 parm[MAX_PRM_SIZE + 1];  /* Synthesis parameters                */    Word16 Az_dec[AZ_SIZE];         /* Decoded Az for post-filter          */    /* in 4 subframes                      */    Flag *pOverflow = &(st->decoder_amrState.overflow);  /* Overflow flag  */#if !defined(NO13BIT)    Word16 i;#endif    /* Serial to parameters   */    if ((frame_type == RX_SID_BAD) ||            (frame_type == RX_SID_UPDATE))    {        /* Override mode to MRDTX */        Bits2prm(MRDTX, serial, parm);    }    else    {        Bits2prm(mode, serial, parm);    }    /* Synthesis */    Decoder_amr(        &(st->decoder_amrState),        mode,        parm,        frame_type,        synth,        Az_dec);    /* Post-filter */    Post_Filter(        &(st->post_state),        mode,        synth,        Az_dec,        pOverflow);    /* post HP filter, and 15->16 bits */    Post_Process(        &(st->postHP_state),        synth,        L_FRAME,        pOverflow);#if !defined(NO13BIT)    /* Truncate to 13 bits */    for (i = 0; i < L_FRAME; i++)    {        synth[i] = synth[i] & 0xfff8;    }#endif    return;}

⌨️ 快捷键说明

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