📄 sp_enc.cpp
字号:
Local Variables Needed: None.------------------------------------------------------------------------------ FUNCTION DESCRIPTION This function frees the memory used for state memory.------------------------------------------------------------------------------ REQUIREMENTS None.------------------------------------------------------------------------------ REFERENCES sp_enc.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001------------------------------------------------------------------------------ PSEUDO-CODE Note: Original function name of Speech_Encode_Frame_exit was changed to GSMEncodeFrameExit in the Code section.void Speech_Encode_Frame_exit (void **state_data){ Speech_Encode_FrameState **state = (Speech_Encode_FrameState **) state_data; if (state == NULL || *state == NULL) return; Pre_Process_exit(&(*state)->pre_state); cod_amr_exit(&(*state)->cod_amr_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 GSMEncodeFrameExit(void **state_data){ Speech_Encode_FrameState **state = (Speech_Encode_FrameState **) state_data; if (state == NULL || *state == NULL) return; Pre_Process_exit(&(*state)->pre_state); cod_amr_exit(&(*state)->cod_amr_state); /* deallocate memory */ oscl_free(*state); *state = NULL; return;}/****************************************************************************//*------------------------------------------------------------------------------ FUNCTION NAME: Speech_Encode_Frame_First------------------------------------------------------------------------------ INPUT AND OUTPUT DEFINITIONS Inputs: st = pointer to a structure of type Speech_Encode_FrameState that contains the post filter states new_speech = pointer to buffer of length L_FRAME that contains the speech input (Word16) Outputs: The structure of type Speech_Encode_FrameState pointed to by st is updated. Returns: return_value = 0 (int) Global Variables Used: None. Local Variables Needed: None.------------------------------------------------------------------------------ FUNCTION DESCRIPTION This function encodes the first frame of speech. It calls the pre-processing filter and the first frame encoder.------------------------------------------------------------------------------ REQUIREMENTS None.------------------------------------------------------------------------------ REFERENCES sp_enc.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001------------------------------------------------------------------------------ PSEUDO-CODEint Speech_Encode_Frame_First ( Speech_Encode_FrameState *st, // i/o : post filter states Word16 *new_speech) // i : speech input{#if !defined(NO13BIT) Word16 i;#endif setCounter(st->complexityCounter);#if !defined(NO13BIT) // Delete the 3 LSBs (13-bit input) for (i = 0; i < L_NEXT; i++) { new_speech[i] = new_speech[i] & 0xfff8; }#endif // filter + downscaling Pre_Process (st->pre_state, new_speech, L_NEXT); cod_amr_first(st->cod_amr_state, new_speech); Init_WMOPS_counter (); // reset WMOPS counter for the new frame 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 Speech_Encode_Frame_First( Speech_Encode_FrameState *st, /* i/o : post filter states */ Word16 *new_speech) /* i : speech input */{#if !defined(NO13BIT) Word16 i;#endif#if !defined(NO13BIT) /* Delete the 3 LSBs (13-bit input) */ for (i = 0; i < L_NEXT; i++) { new_speech[i] = new_speech[i] & 0xfff8; }#endif /* filter + downscaling */ Pre_Process(st->pre_state, new_speech, L_NEXT); cod_amr_first(st->cod_amr_state, new_speech); return;}/*------------------------------------------------------------------------------ FUNCTION NAME: cod_amr------------------------------------------------------------------------------ INPUT AND OUTPUT DEFINITIONS Inputs: state_data = a void pointer to the post filter states mode = AMR mode of type enum Mode new_speech = pointer to buffer of length L_FRAME that contains the speech input of type Word16 serial = pointer to the serial bit stream of type Word16 usedMode = pointer to the used mode of type enum Mode Outputs: serial -> encoded serial bit stream The value pointed to by usedMode is updated. Returns: return_value = 0 (int) Global Variables Used: None. Local Variables Needed: None.------------------------------------------------------------------------------ FUNCTION DESCRIPTION This function is the entry point to the GSM AMR encoder. The following operations are performed to generate one encoded frame: First, the incoming audio samples are passed through the pre-processing filter where they are filtered and downscaled. A call is then made to the main encoder cod_amr(). This generates the set of encoded parameters which include the LSP, adaptive codebook, and fixed codebook quantization indices (addresses and gains). The generated parameters are then converted to serial bits.------------------------------------------------------------------------------ REQUIREMENTS None.------------------------------------------------------------------------------ REFERENCES sp_enc.c, UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001------------------------------------------------------------------------------ PSEUDO-CODE Note: Original function name of Speech_Encode_Frame was changed to GSMEncodeFrame in the Code section.int Speech_Encode_Frame ( void *state_data, // i/o : post filter states enum Mode mode, // i : speech coder mode Word16 *new_speech, // i : speech input Word16 *serial, // o : serial bit stream enum Mode *usedMode // o : used speech coder mode ){ Speech_Encode_FrameState *st = (Speech_Encode_FrameState *) state_data; Word16 prm[MAX_PRM_SIZE]; // Analysis parameters Word16 syn[L_FRAME]; // Buffer for synthesis speech Word16 i; setCounter(st->complexityCounter); Reset_WMOPS_counter (); // reset WMOPS counter for the new frame // initialize the serial output frame to zero for (i = 0; i < MAX_SERIAL_SIZE; i++) { serial[i] = 0; }#if !defined(NO13BIT) // Delete the 3 LSBs (13-bit input) for (i = 0; i < L_FRAME; i++) { new_speech[i] = new_speech[i] & 0xfff8; }#endif // filter + downscaling Pre_Process (st->pre_state, new_speech, L_FRAME); // Call the speech encoder cod_amr(st->cod_amr_state, mode, new_speech, prm, usedMode, syn); // Parameters to serial bits Prm2bits (*usedMode, prm, &serial[0]); fwc(); 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 GSMEncodeFrame( void *state_data, /* i/o : post filter states */ enum Mode mode, /* i : speech coder mode */ Word16 *new_speech, /* i : speech input */ Word16 *serial, /* o : serial bit stream */ enum Mode *usedMode /* o : used speech coder mode */){ Speech_Encode_FrameState *st = (Speech_Encode_FrameState *) state_data; Word16 prm[MAX_PRM_SIZE]; /* Analysis parameters. */ Word16 syn[L_FRAME]; /* Buffer for synthesis speech */ Word16 i; /* initialize the serial output frame to zero */ for (i = 0; i < MAX_SERIAL_SIZE; i++) { serial[i] = 0; }#if !defined(NO13BIT) /* Delete the 3 LSBs (13-bit input) */ for (i = 0; i < L_FRAME; i++) { new_speech[i] = new_speech[i] & 0xfff8; }#endif /* filter + downscaling */ Pre_Process(st->pre_state, new_speech, L_FRAME); /* Call the speech encoder */ cod_amr(st->cod_amr_state, mode, new_speech, prm, usedMode, syn); /* Parameters to serial bits */ Prm2bits(*usedMode, prm, &serial[0]); return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -