Mercurial > libavcodec.hg
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 |