comparison sipr.c @ 12465:1921e24d5886 libavcodec

Move lsp2lpc_sipr() function to common code so it can be reused in a AMRWB decoder. Patch by Marcelo Galvo Pvoa.
author vitor
date Tue, 07 Sep 2010 20:46:29 +0000
parents fdafbcef52f5
children b3f9612d4ea7
comparison
equal deleted inserted replaced
12464:2dd67ed2f947 12465:1921e24d5886
207 207
208 parms->gc_index[i] = get_bits(pgb, p->gc_index_bits); 208 parms->gc_index[i] = get_bits(pgb, p->gc_index_bits);
209 } 209 }
210 } 210 }
211 211
212 static void lsp2lpc_sipr(const double *lsp, float *Az)
213 {
214 int lp_half_order = LP_FILTER_ORDER >> 1;
215 double buf[(LP_FILTER_ORDER >> 1) + 1];
216 double pa[(LP_FILTER_ORDER >> 1) + 1];
217 double *qa = buf + 1;
218 int i,j;
219
220 qa[-1] = 0.0;
221
222 ff_lsp2polyf(lsp , pa, lp_half_order );
223 ff_lsp2polyf(lsp + 1, qa, lp_half_order - 1);
224
225 for (i = 1, j = LP_FILTER_ORDER - 1; i < lp_half_order; i++, j--) {
226 double paf = pa[i] * (1 + lsp[LP_FILTER_ORDER - 1]);
227 double qaf = (qa[i] - qa[i-2]) * (1 - lsp[LP_FILTER_ORDER - 1]);
228 Az[i-1] = (paf + qaf) * 0.5;
229 Az[j-1] = (paf - qaf) * 0.5;
230 }
231
232 Az[lp_half_order - 1] = (1.0 + lsp[LP_FILTER_ORDER - 1]) *
233 pa[lp_half_order] * 0.5;
234
235 Az[LP_FILTER_ORDER - 1] = lsp[LP_FILTER_ORDER - 1];
236 }
237
238 static void sipr_decode_lp(float *lsfnew, const float *lsfold, float *Az, 212 static void sipr_decode_lp(float *lsfnew, const float *lsfold, float *Az,
239 int num_subfr) 213 int num_subfr)
240 { 214 {
241 double lsfint[LP_FILTER_ORDER]; 215 double lsfint[LP_FILTER_ORDER];
242 int i,j; 216 int i,j;
245 t = t0 * 0.5; 219 t = t0 * 0.5;
246 for (i = 0; i < num_subfr; i++) { 220 for (i = 0; i < num_subfr; i++) {
247 for (j = 0; j < LP_FILTER_ORDER; j++) 221 for (j = 0; j < LP_FILTER_ORDER; j++)
248 lsfint[j] = lsfold[j] * (1 - t) + t * lsfnew[j]; 222 lsfint[j] = lsfold[j] * (1 - t) + t * lsfnew[j];
249 223
250 lsp2lpc_sipr(lsfint, Az); 224 ff_amrwb_lsp2lpc(lsfint, Az, LP_FILTER_ORDER);
251 Az += LP_FILTER_ORDER; 225 Az += LP_FILTER_ORDER;
252 t += t0; 226 t += t0;
253 } 227 }
254 } 228 }
255 229