diff lsp.c @ 10502:f132cde57bbe libavcodec

Do not hardcode filter order in ff_acelp_lspd2lpc()
author vitor
date Mon, 09 Nov 2009 12:06:19 +0000
parents 9f35b262d3f0
children a1d84a5cf21d
line wrap: on
line diff
--- a/lsp.c	Mon Nov 09 09:11:35 2009 +0000
+++ b/lsp.c	Mon Nov 09 12:06:19 2009 +0000
@@ -155,20 +155,19 @@
     }
 }
 
-void ff_acelp_lspd2lpc(const double *lsp, float *lpc)
+void ff_acelp_lspd2lpc(const double *lsp, float *lpc, int lp_half_order)
 {
-    double pa[6], qa[6];
-    int   i;
-
-    lsp2polyf(lsp,     pa, 5);
-    lsp2polyf(lsp + 1, qa, 5);
+    double pa[lp_half_order+1], qa[lp_half_order+1];
+    float *lpc2 = lpc + (lp_half_order << 1) - 1;
 
-    for (i=4; i>=0; i--)
-    {
-        double paf = pa[i+1] + pa[i];
-        double qaf = qa[i+1] - qa[i];
+    lsp2polyf(lsp,     pa, lp_half_order);
+    lsp2polyf(lsp + 1, qa, lp_half_order);
 
-        lpc[i  ] = 0.5*(paf+qaf);
-        lpc[9-i] = 0.5*(paf-qaf);
+    while (lp_half_order--) {
+        double paf = pa[lp_half_order+1] + pa[lp_half_order];
+        double qaf = qa[lp_half_order+1] - qa[lp_half_order];
+
+        lpc [ lp_half_order] = 0.5*(paf+qaf);
+        lpc2[-lp_half_order] = 0.5*(paf-qaf);
     }
 }