[FFmpeg-cvslog] r19649 - in trunk/libavcodec: acelp_filters.c acelp_filters.h

superdump subversion
Sat Aug 15 13:22:55 CEST 2009


Author: superdump
Date: Sat Aug 15 13:22:55 2009
New Revision: 19649

Log:
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 )

Modified:
   trunk/libavcodec/acelp_filters.c
   trunk/libavcodec/acelp_filters.h

Modified: trunk/libavcodec/acelp_filters.c
==============================================================================
--- trunk/libavcodec/acelp_filters.c	Sat Aug 15 13:12:47 2009	(r19648)
+++ trunk/libavcodec/acelp_filters.c	Sat Aug 15 13:22:55 2009	(r19649)
@@ -93,3 +93,20 @@ void ff_acelp_high_pass_filter(int16_t* 
         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;
+    }
+}

Modified: trunk/libavcodec/acelp_filters.h
==============================================================================
--- trunk/libavcodec/acelp_filters.h	Sat Aug 15 13:12:47 2009	(r19648)
+++ trunk/libavcodec/acelp_filters.h	Sat Aug 15 13:22:55 2009	(r19649)
@@ -81,4 +81,20 @@ void ff_acelp_interpolate(int16_t* out, 
 void ff_acelp_high_pass_filter(int16_t* out, int hpf_f[2],
                                const int16_t* in, int length);
 
+/**
+ * Apply an order 2 rational transfer function in-place.
+ *
+ * @param samples [in/out]
+ * @param zero_coeffs z^-1 and z^-2 coefficients of the numerator
+ * @param pole_coeffs z^-1 and z^-2 coefficients of the denominator
+ * @param gain scale factor for final output
+ * @param mem intermediate values used by filter (should be 0 initially)
+ * @param n number of samples
+ */
+void ff_acelp_apply_order_2_transfer_function(float *samples,
+                                              const float zero_coeffs[2],
+                                              const float pole_coeffs[2],
+                                              float gain,
+                                              float mem[2], int n);
+
 #endif /* AVCODEC_ACELP_FILTERS_H */



More information about the ffmpeg-cvslog mailing list