aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenan Gillet <kenan.gillet@gmail.com>2008-10-30 21:05:37 +0000
committerVitor Sessak <vitor1001@gmail.com>2008-10-30 21:05:37 +0000
commit1fb0d4b8a65bc0b631ea2afdb2e0b80800efe82f (patch)
treef410411f82baecd89c63e189ae3ecd111a6d7295
parent0bc484ad51f5c85a3c1298a718355724905cdd6b (diff)
downloadffmpeg-1fb0d4b8a65bc0b631ea2afdb2e0b80800efe82f.tar.gz
Add a LPC filter
Part of the QCELP patch by Kenan Gillet, kenan.gillet gmail com Originally committed as revision 15754 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/celp_filters.c21
-rw-r--r--libavcodec/celp_filters.h24
2 files changed, 45 insertions, 0 deletions
diff --git a/libavcodec/celp_filters.c b/libavcodec/celp_filters.c
index 758c9b0a90..3d983c4f75 100644
--- a/libavcodec/celp_filters.c
+++ b/libavcodec/celp_filters.c
@@ -84,3 +84,24 @@ int ff_celp_lp_synthesis_filter(
return 0;
}
+
+void ff_celp_lp_synthesis_filterf(
+ float *out,
+ const float* filter_coeffs,
+ const float* in,
+ int buffer_length,
+ int filter_length)
+{
+ int i,n;
+
+ // These two lines are to avoid a -1 subtraction in the main loop
+ filter_length++;
+ filter_coeffs--;
+
+ for(n=0; n<buffer_length; n++)
+ {
+ out[n] = in[n];
+ for(i=1; i<filter_length; i++)
+ out[n] += filter_coeffs[i] * out[n-i];
+ }
+}
diff --git a/libavcodec/celp_filters.h b/libavcodec/celp_filters.h
index cb73aa8869..f46dcd2d2a 100644
--- a/libavcodec/celp_filters.h
+++ b/libavcodec/celp_filters.h
@@ -69,4 +69,28 @@ int ff_celp_lp_synthesis_filter(
int stop_on_overflow,
int rounder);
+/**
+ * LP synthesis filter.
+ * @param out [out] pointer to output buffer
+ * - the array out[-filter_length, -1] must
+ * contain the previous result of this filter
+ * @param filter_coeffs filter coefficients.
+ * @param in input signal
+ * @param buffer_length amount of data to process
+ * @param filter_length filter length (10 for 10th order LP filter)
+ *
+ * @return 1 if overflow occurred, 0 - otherwise
+ *
+ * @note Output buffer must contain 10 samples of past
+ * speech data before pointer.
+ *
+ * Routine applies 1/A(z) filter to given speech data.
+ */
+void ff_celp_lp_synthesis_filterf(
+ float *out,
+ const float* filter_coeffs,
+ const float* in,
+ int buffer_length,
+ int filter_length);
+
#endif /* AVCODEC_CELP_FILTERS_H */