// 8 -> 48 resampler void WebRtcSpl_Resample8khzTo48khz(const WebRtc_Word16* in, WebRtc_Word16* out, WebRtcSpl_State8khzTo48khz* state, WebRtc_Word32* tmpmem) { ///// 8 --> 16 ///// // WebRtc_Word16 in[80] // WebRtc_Word32 out[160] ///// WebRtcSpl_UpBy2ShortToInt(in, 80, tmpmem + 264, state->S_8_16); ///// 16 --> 12 ///// // WebRtc_Word32 in[160] // WebRtc_Word32 out[120] ///// // copy state to and from input array memcpy(tmpmem + 256, state->S_16_12, 8 * sizeof(WebRtc_Word32)); memcpy(state->S_16_12, tmpmem + 416, 8 * sizeof(WebRtc_Word32)); WebRtcSpl_Resample32khzTo24khz(tmpmem + 256, tmpmem + 240, 40); ///// 12 --> 24 ///// // WebRtc_Word32 in[120] // WebRtc_Word16 out[240] ///// WebRtcSpl_UpBy2IntToInt(tmpmem + 240, 120, tmpmem, state->S_12_24); ///// 24 --> 48 ///// // WebRtc_Word32 in[240] // WebRtc_Word16 out[480] ///// WebRtcSpl_UpBy2IntToShort(tmpmem, 240, out, state->S_24_48); }
// 8 -> 22 resampler void WebRtcSpl_Resample8khzTo22khz(const int16_t* in, int16_t* out, WebRtcSpl_State8khzTo22khz* state, int32_t* tmpmem) { int k; // process two blocks of 10/SUB_BLOCKS_8_22 ms (to reduce temp buffer size) for (k = 0; k < SUB_BLOCKS_8_22; k++) { ///// 8 --> 16 ///// // int16_t in[80/SUB_BLOCKS_8_22] // int32_t out[160/SUB_BLOCKS_8_22] ///// WebRtcSpl_UpBy2ShortToInt(in, 80 / SUB_BLOCKS_8_22, tmpmem + 18, state->S_8_16); ///// 16 --> 11 ///// // int32_t in[160/SUB_BLOCKS_8_22] // int32_t out[110/SUB_BLOCKS_8_22] ///// // copy state to and from input array tmpmem[10] = state->S_16_11[0]; tmpmem[11] = state->S_16_11[1]; tmpmem[12] = state->S_16_11[2]; tmpmem[13] = state->S_16_11[3]; tmpmem[14] = state->S_16_11[4]; tmpmem[15] = state->S_16_11[5]; tmpmem[16] = state->S_16_11[6]; tmpmem[17] = state->S_16_11[7]; state->S_16_11[0] = tmpmem[160 / SUB_BLOCKS_8_22 + 10]; state->S_16_11[1] = tmpmem[160 / SUB_BLOCKS_8_22 + 11]; state->S_16_11[2] = tmpmem[160 / SUB_BLOCKS_8_22 + 12]; state->S_16_11[3] = tmpmem[160 / SUB_BLOCKS_8_22 + 13]; state->S_16_11[4] = tmpmem[160 / SUB_BLOCKS_8_22 + 14]; state->S_16_11[5] = tmpmem[160 / SUB_BLOCKS_8_22 + 15]; state->S_16_11[6] = tmpmem[160 / SUB_BLOCKS_8_22 + 16]; state->S_16_11[7] = tmpmem[160 / SUB_BLOCKS_8_22 + 17]; WebRtcSpl_32khzTo22khzIntToInt(tmpmem + 10, tmpmem, 10 / SUB_BLOCKS_8_22); ///// 11 --> 22 ///// // int32_t in[110/SUB_BLOCKS_8_22] // int16_t out[220/SUB_BLOCKS_8_22] ///// WebRtcSpl_UpBy2IntToShort(tmpmem, 110 / SUB_BLOCKS_8_22, out, state->S_11_22); // move input/output pointers 10/SUB_BLOCKS_8_22 ms seconds ahead in += 80 / SUB_BLOCKS_8_22; out += 220 / SUB_BLOCKS_8_22; } }
// 16 -> 48 resampler void WebRtcSpl_Resample16khzTo48khz(const WebRtc_Word16* in, WebRtc_Word16* out, WebRtcSpl_State16khzTo48khz* state, WebRtc_Word32* tmpmem) { ///// 16 --> 32 ///// // WebRtc_Word16 in[160] // WebRtc_Word32 out[320] ///// WebRtcSpl_UpBy2ShortToInt(in, 160, tmpmem + 16, state->S_16_32); ///// 32 --> 24 ///// // WebRtc_Word32 in[320] // WebRtc_Word32 out[240] // copy state to and from input array ///// memcpy(tmpmem + 8, state->S_32_24, 8 * sizeof(WebRtc_Word32)); memcpy(state->S_32_24, tmpmem + 328, 8 * sizeof(WebRtc_Word32)); WebRtcSpl_Resample32khzTo24khz(tmpmem + 8, tmpmem, 80); ///// 24 --> 48 ///// // WebRtc_Word32 in[240] // WebRtc_Word16 out[480] ///// WebRtcSpl_UpBy2IntToShort(tmpmem, 240, out, state->S_24_48); }