[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