Mercurial > libavcodec.hg
comparison sipr16k.c @ 11649:e4e4fce64e5d libavcodec
Make the Sipr16k postfilter function write data into the target/output buffer.
author | rbultje |
---|---|
date | Wed, 21 Apr 2010 17:46:59 +0000 |
parents | ff7c1c90b6f5 |
children | 8b6f3d3b55cb |
comparison
equal
deleted
inserted
replaced
11648:0516f4062307 | 11649:e4e4fce64e5d |
---|---|
92 return 3 * pitch_delay_min + index - 2; | 92 return 3 * pitch_delay_min + index - 2; |
93 } else | 93 } else |
94 return 3 * pitch_lag_prev; | 94 return 3 * pitch_lag_prev; |
95 } | 95 } |
96 | 96 |
97 static void postfilter(float* synth, float* iir_mem, float* filt_mem[2], | 97 static void postfilter(float *out_data, float* synth, float* iir_mem, |
98 float* mem_preemph) | 98 float* filt_mem[2], float* mem_preemph) |
99 { | 99 { |
100 float buf[30 + LP_FILTER_ORDER_16k]; | 100 float buf[30 + LP_FILTER_ORDER_16k]; |
101 float *tmpbuf = buf + LP_FILTER_ORDER_16k; | 101 float *tmpbuf = buf + LP_FILTER_ORDER_16k; |
102 float s; | 102 float s; |
103 int i; | 103 int i; |
112 LP_FILTER_ORDER_16k); | 112 LP_FILTER_ORDER_16k); |
113 | 113 |
114 memcpy(synth - LP_FILTER_ORDER_16k, mem_preemph, | 114 memcpy(synth - LP_FILTER_ORDER_16k, mem_preemph, |
115 LP_FILTER_ORDER_16k * sizeof(*synth)); | 115 LP_FILTER_ORDER_16k * sizeof(*synth)); |
116 | 116 |
117 ff_celp_lp_synthesis_filterf(synth, filt_mem[0], synth, 2*L_SUBFR_16k, | 117 ff_celp_lp_synthesis_filterf(synth, filt_mem[0], synth, 30, |
118 LP_FILTER_ORDER_16k); | 118 LP_FILTER_ORDER_16k); |
119 | 119 |
120 memcpy(mem_preemph, synth + 2*L_SUBFR_16k - LP_FILTER_ORDER_16k, | 120 memcpy(out_data + 30 - LP_FILTER_ORDER_16k, |
121 synth + 30 - LP_FILTER_ORDER_16k, | |
122 LP_FILTER_ORDER_16k * sizeof(*synth)); | |
123 | |
124 ff_celp_lp_synthesis_filterf(out_data + 30, filt_mem[0], | |
125 synth + 30, 2 * L_SUBFR_16k - 30, | |
126 LP_FILTER_ORDER_16k); | |
127 | |
128 | |
129 memcpy(mem_preemph, out_data + 2*L_SUBFR_16k - LP_FILTER_ORDER_16k, | |
121 LP_FILTER_ORDER_16k * sizeof(*synth)); | 130 LP_FILTER_ORDER_16k * sizeof(*synth)); |
122 | 131 |
123 FFSWAP(float *, filt_mem[0], filt_mem[1]); | 132 FFSWAP(float *, filt_mem[0], filt_mem[1]); |
124 for (i = 0, s = 0; i < 30; i++, s += 1.0/30) | 133 for (i = 0, s = 0; i < 30; i++, s += 1.0/30) |
125 synth[i] = tmpbuf[i] + s * (synth[i] - tmpbuf[i]); | 134 out_data[i] = tmpbuf[i] + s * (synth[i] - tmpbuf[i]); |
126 } | 135 } |
127 | 136 |
128 /** | 137 /** |
129 * Floating point version of ff_acelp_lp_decode(). | 138 * Floating point version of ff_acelp_lp_decode(). |
130 */ | 139 */ |
250 LP_FILTER_ORDER_16k * sizeof(*synth)); | 259 LP_FILTER_ORDER_16k * sizeof(*synth)); |
251 | 260 |
252 memmove(ctx->excitation, ctx->excitation + 2 * L_SUBFR_16k, | 261 memmove(ctx->excitation, ctx->excitation + 2 * L_SUBFR_16k, |
253 (L_INTERPOL+PITCH_MAX) * sizeof(float)); | 262 (L_INTERPOL+PITCH_MAX) * sizeof(float)); |
254 | 263 |
255 postfilter(synth, ctx->iir_mem, ctx->filt_mem, ctx->mem_preemph); | 264 postfilter(out_data, synth, ctx->iir_mem, ctx->filt_mem, ctx->mem_preemph); |
256 | 265 |
257 memcpy(ctx->iir_mem, Az[1], LP_FILTER_ORDER_16k * sizeof(float)); | 266 memcpy(ctx->iir_mem, Az[1], LP_FILTER_ORDER_16k * sizeof(float)); |
258 | 267 |
259 ctx->dsp.vector_clipf(out_data, synth, -1, 32767./(1<<15), frame_size); | 268 ctx->dsp.vector_clipf(out_data, out_data, -1, 32767./(1<<15), frame_size); |
260 | 269 |
261 } | 270 } |
262 | 271 |
263 void ff_sipr_init_16k(SiprContext *ctx) | 272 void ff_sipr_init_16k(SiprContext *ctx) |
264 { | 273 { |