// 22 -> 8 resampler void WebRtcSpl_Resample22khzTo8khz(const int16_t* in, int16_t* out, WebRtcSpl_State22khzTo8khz* state, int32_t* tmpmem) { int k; // process two blocks of 10/SUB_BLOCKS_22_8 ms (to reduce temp buffer size) for (k = 0; k < SUB_BLOCKS_22_8; k++) { ///// 22 --> 22 lowpass ///// // int16_t in[220/SUB_BLOCKS_22_8] // int32_t out[220/SUB_BLOCKS_22_8] ///// WebRtcSpl_LPBy2ShortToInt(in, 220 / SUB_BLOCKS_22_8, tmpmem + 16, state->S_22_22); ///// 22 --> 16 ///// // int32_t in[220/SUB_BLOCKS_22_8] // int32_t out[160/SUB_BLOCKS_22_8] ///// // copy state to and from input array tmpmem[8] = state->S_22_16[0]; tmpmem[9] = state->S_22_16[1]; tmpmem[10] = state->S_22_16[2]; tmpmem[11] = state->S_22_16[3]; tmpmem[12] = state->S_22_16[4]; tmpmem[13] = state->S_22_16[5]; tmpmem[14] = state->S_22_16[6]; tmpmem[15] = state->S_22_16[7]; state->S_22_16[0] = tmpmem[220 / SUB_BLOCKS_22_8 + 8]; state->S_22_16[1] = tmpmem[220 / SUB_BLOCKS_22_8 + 9]; state->S_22_16[2] = tmpmem[220 / SUB_BLOCKS_22_8 + 10]; state->S_22_16[3] = tmpmem[220 / SUB_BLOCKS_22_8 + 11]; state->S_22_16[4] = tmpmem[220 / SUB_BLOCKS_22_8 + 12]; state->S_22_16[5] = tmpmem[220 / SUB_BLOCKS_22_8 + 13]; state->S_22_16[6] = tmpmem[220 / SUB_BLOCKS_22_8 + 14]; state->S_22_16[7] = tmpmem[220 / SUB_BLOCKS_22_8 + 15]; WebRtcSpl_Resample44khzTo32khz(tmpmem + 8, tmpmem, 20 / SUB_BLOCKS_22_8); ///// 16 --> 8 ///// // int32_t in[160/SUB_BLOCKS_22_8] // int32_t out[80/SUB_BLOCKS_22_8] ///// WebRtcSpl_DownBy2IntToShort(tmpmem, 160 / SUB_BLOCKS_22_8, out, state->S_16_8); // move input/output pointers 10/SUB_BLOCKS_22_8 ms seconds ahead in += 220 / SUB_BLOCKS_22_8; out += 80 / SUB_BLOCKS_22_8; } }
// 48 -> 16 resampler void WebRtcSpl_Resample48khzTo16khz(const WebRtc_Word16* in, WebRtc_Word16* out, WebRtcSpl_State48khzTo16khz* state, WebRtc_Word32* tmpmem) { ///// 48 --> 48(LP) ///// // WebRtc_Word16 in[480] // WebRtc_Word32 out[480] ///// WebRtcSpl_LPBy2ShortToInt(in, 480, tmpmem + 16, state->S_48_48); ///// 48 --> 32 ///// // WebRtc_Word32 in[480] // WebRtc_Word32 out[320] ///// // copy state to and from input array memcpy(tmpmem + 8, state->S_48_32, 8 * sizeof(WebRtc_Word32)); memcpy(state->S_48_32, tmpmem + 488, 8 * sizeof(WebRtc_Word32)); WebRtcSpl_Resample48khzTo32khz(tmpmem + 8, tmpmem, 160); ///// 32 --> 16 ///// // WebRtc_Word32 in[320] // WebRtc_Word16 out[160] ///// WebRtcSpl_DownBy2IntToShort(tmpmem, 320, out, state->S_32_16); }