[FFmpeg-devel] [PATCH] split input and output parameters for ff_acelp_apply_order_2_transfer_function

Ronald S. Bultje rsbultje
Sat Mar 27 17:14:57 CET 2010


Hi,

as per $subj again. The patch also slightly modifies sipr.c so that it
directly writes into the output buffer. This makes the future patch to
remove clipping easier (it's just a remove-3-liner).

Ronald
-------------- next part --------------
Index: ffmpeg-svn/libavcodec/acelp_filters.c
===================================================================
--- ffmpeg-svn.orig/libavcodec/acelp_filters.c	2010-03-27 11:47:27.000000000 -0400
+++ ffmpeg-svn/libavcodec/acelp_filters.c	2010-03-27 11:48:00.000000000 -0400
@@ -114,7 +114,7 @@
     }
 }
 
-void ff_acelp_apply_order_2_transfer_function(float *buf,
+void ff_acelp_apply_order_2_transfer_function(float *out, const float *in,
                                               const float zero_coeffs[2],
                                               const float pole_coeffs[2],
                                               float gain, float mem[2], int n)
@@ -123,8 +123,8 @@
     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];
+        tmp = gain * in[i] - pole_coeffs[0] * mem[0] - pole_coeffs[1] * mem[1];
+        out[i] =       tmp + zero_coeffs[0] * mem[0] + zero_coeffs[1] * mem[1];
 
         mem[1] = mem[0];
         mem[0] = tmp;
Index: ffmpeg-svn/libavcodec/acelp_filters.h
===================================================================
--- ffmpeg-svn.orig/libavcodec/acelp_filters.h	2010-03-27 11:47:27.000000000 -0400
+++ ffmpeg-svn/libavcodec/acelp_filters.h	2010-03-27 11:48:00.000000000 -0400
@@ -92,14 +92,15 @@
 /**
  * Apply an order 2 rational transfer function in-place.
  *
- * @param samples [in/out]
+ * @param out output buffer for filtered speech samples
+ * @param in input buffer containing speech data (may be the same as 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,
+void ff_acelp_apply_order_2_transfer_function(float *out, const float *in,
                                               const float zero_coeffs[2],
                                               const float pole_coeffs[2],
                                               float gain,
Index: ffmpeg-svn/libavcodec/amrnbdec.c
===================================================================
--- ffmpeg-svn.orig/libavcodec/amrnbdec.c	2010-03-27 11:47:52.000000000 -0400
+++ ffmpeg-svn/libavcodec/amrnbdec.c	2010-03-27 11:48:37.000000000 -0400
@@ -1044,7 +1044,7 @@
         update_state(p);
     }
 
-    ff_acelp_apply_order_2_transfer_function(buf_out, highpass_zeros,
+    ff_acelp_apply_order_2_transfer_function(buf_out, buf_out, highpass_zeros,
                                              highpass_poles, highpass_gain,
                                              p->high_pass_mem, AMR_BLOCK_SIZE);
 
Index: ffmpeg-svn/libavcodec/sipr.c
===================================================================
--- ffmpeg-svn.orig/libavcodec/sipr.c	2010-03-27 11:47:52.000000000 -0400
+++ ffmpeg-svn/libavcodec/sipr.c	2010-03-27 11:49:10.000000000 -0400
@@ -490,14 +490,14 @@
     memcpy(ctx->excitation, excitation - PITCH_DELAY_MAX - L_INTERPOL,
            (PITCH_DELAY_MAX + L_INTERPOL) * sizeof(float));
 
-    ff_acelp_apply_order_2_transfer_function(synth,
+    ff_acelp_apply_order_2_transfer_function(out_data, synth,
                                              (const float[2]) {-1.99997   , 1.000000000},
                                              (const float[2]) {-1.93307352, 0.935891986},
                                              0.939805806,
                                              ctx->highpass_filt_mem,
                                              frame_size);
 
-    ctx->dsp.vector_clipf(out_data, synth, -1, 32767./(1<<15), frame_size);
+    ctx->dsp.vector_clipf(out_data, out_data, -1, 32767./(1<<15), frame_size);
 
 }
 



More information about the ffmpeg-devel mailing list