Split input/output data arguments to ff_acelp_apply_order_2_transfer_function().
authorRonald S. Bultje <rsbultje@gmail.com>
Wed, 21 Apr 2010 17:45:24 +0000 (17:45 +0000)
committerRonald S. Bultje <rsbultje@gmail.com>
Wed, 21 Apr 2010 17:45:24 +0000 (17:45 +0000)
Originally committed as revision 22933 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/acelp_filters.c
libavcodec/acelp_filters.h
libavcodec/amrnbdec.c
libavcodec/sipr.c

index 0156d76..31f0e86 100644 (file)
@@ -114,7 +114,7 @@ void ff_acelp_high_pass_filter(int16_t* out, int hpf_f[2],
     }
 }
 
-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 @@ void ff_acelp_apply_order_2_transfer_function(float *buf,
     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 c5be5a6..09b5da4 100644 (file)
@@ -92,14 +92,15 @@ void ff_acelp_high_pass_filter(int16_t* out, int hpf_f[2],
 /**
  * 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 3e7515d..40cd91d 100644 (file)
@@ -1044,7 +1044,7 @@ static int amrnb_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
         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 5b7d87f..d409484 100644 (file)
@@ -490,14 +490,14 @@ static void decode_frame(SiprContext *ctx, SiprParameters *params,
     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);
 
 }