📄 sp_dec.cpp
字号:
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 + -