diff options
author | Kenan Gillet <kenan.gillet@gmail.com> | 2008-10-30 21:05:37 +0000 |
---|---|---|
committer | Vitor Sessak <vitor1001@gmail.com> | 2008-10-30 21:05:37 +0000 |
commit | 1fb0d4b8a65bc0b631ea2afdb2e0b80800efe82f (patch) | |
tree | f410411f82baecd89c63e189ae3ecd111a6d7295 | |
parent | 0bc484ad51f5c85a3c1298a718355724905cdd6b (diff) | |
download | ffmpeg-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.c | 21 | ||||
-rw-r--r-- | libavcodec/celp_filters.h | 24 |
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 */ |