diff acelp_filters.c @ 10057:cfb009484d2d libavcodec

Add a function that can apply an order 2 rational transfer function in-place. This function will be used in the upcoming AMR-NB floating point decoder for high-pass filtering. Patch by Colin McQuillan ( m.niloc googlemail com )
author superdump
date Sat, 15 Aug 2009 11:22:55 +0000
parents 05ea4942df9b
children 9f35b262d3f0
line wrap: on
line diff
--- a/acelp_filters.c	Sat Aug 15 11:12:47 2009 +0000
+++ b/acelp_filters.c	Sat Aug 15 11:22:55 2009 +0000
@@ -93,3 +93,20 @@
         hpf_f[0] = tmp;
     }
 }
+
+void ff_acelp_apply_order_2_transfer_function(float *buf,
+                                              const float zero_coeffs[2],
+                                              const float pole_coeffs[2],
+                                              float gain, float mem[2], int n)
+{
+    int i;
+    float tmp;
+
+    for (i = 0; i < n; i++) {
+        tmp = gain * buf[i] - pole_coeffs[0] * mem[0] - pole_coeffs[1] * mem[1];
+        buf[i] =        tmp + zero_coeffs[0] * mem[0] + zero_coeffs[1] * mem[1];
+
+        mem[1] = mem[0];
+        mem[0] = tmp;
+    }
+}