X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Facelp_filters.h;h=b8715d266fbf9163bf6ee22fdcbeea3a932bd660;hb=a88ef93b4abbea9f18c8750113dc9e99931f2f8a;hp=9c46afa35893f75cbc5b3e470333936a27cd0fea;hpb=cd523888f304d297bb7dec5d358d0ee92576cc44;p=ffmpeg diff --git a/libavcodec/acelp_filters.h b/libavcodec/acelp_filters.h index 9c46afa3589..b8715d266fb 100644 --- a/libavcodec/acelp_filters.h +++ b/libavcodec/acelp_filters.h @@ -3,25 +3,25 @@ * * Copyright (c) 2008 Vladimir Voroshilov * - * This file is part of FFmpeg. + * This file is part of Libav. * - * FFmpeg is free software; you can redistribute it and/or + * Libav is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * - * FFmpeg is distributed in the hope that it will be useful, + * Libav is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software + * License along with Libav; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef FFMPEG_ACELP_FILTERS_H -#define FFMPEG_ACELP_FILTERS_H +#ifndef AVCODEC_ACELP_FILTERS_H +#define AVCODEC_ACELP_FILTERS_H #include @@ -38,7 +38,7 @@ extern const int16_t ff_acelp_interp_filter[61]; /** * Generic FIR interpolation routine. - * @param out [out] buffer for interpolated data + * @param[out] out buffer for interpolated data * @param in input data * @param filter_coeffs interpolation filter coefficients (0.15) * @param precision sub sample factor, that is the precision of the position @@ -51,64 +51,22 @@ extern const int16_t ff_acelp_interp_filter[61]; * See ff_acelp_interp_filter for an example. * */ -void ff_acelp_interpolate( - int16_t* out, - const int16_t* in, - const int16_t* filter_coeffs, - int precision, - int frac_pos, - int filter_length, - int length); +void ff_acelp_interpolate(int16_t* out, const int16_t* in, + const int16_t* filter_coeffs, int precision, + int frac_pos, int filter_length, int length); /** - * Circularly convolve fixed vector with a phase dispersion impulse - * response filter (D.6.2 of G.729 and 6.1.5 of AMR). - * @param fc_out vector with filter applied - * @param fc_in source vector - * @param filter phase filter coefficients - * - * fc_out[n] = sum(i,0,len-1){ fc_in[i] * filter[(len + n - i)%len] } - * - * \note fc_in and fc_out should not overlap! - */ -void ff_acelp_convolve_circ( - int16_t* fc_out, - const int16_t* fc_in, - const int16_t* filter, - int len); - -/** - * LP synthesis filter. - * @param out [out] pointer to output buffer - * @param filter_coeffs filter coefficients (-0x8000 <= (3.12) < 0x8000) - * @param in input signal - * @param buffer_length amount of data to process - * @param filter_length filter length (10 for 10th order LP filter) - * @param stop_on_overflow 1 - return immediately if overflow occurs - * 0 - ignore overflows - * @param rounder the amount to add for rounding (usually 0x800 or 0xfff) - * - * @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. + * Floating point version of ff_acelp_interpolate() */ -int ff_acelp_lp_synthesis_filter( - int16_t *out, - const int16_t* filter_coeffs, - const int16_t* in, - int buffer_length, - int filter_length, - int stop_on_overflow, - int rounder); +void ff_acelp_interpolatef(float *out, const float *in, + const float *filter_coeffs, int precision, + int frac_pos, int filter_length, int length); /** * high-pass filtering and upscaling (4.2.5 of G.729). - * @param out [out] output buffer for filtered speech data - * @param hpf_f [in/out] past filtered data from previous (2 items long) + * @param[out] out output buffer for filtered speech data + * @param[in,out] hpf_f past filtered data from previous (2 items long) * frames (-0x20000000 <= (14.13) < 0x20000000) * @param in speech data to process * @param length input data size @@ -116,7 +74,7 @@ int ff_acelp_lp_synthesis_filter( * out[i] = 0.93980581 * in[i] - 1.8795834 * in[i-1] + 0.93980581 * in[i-2] + * 1.9330735 * out[i-1] - 0.93589199 * out[i-2] * - * The filter has a cut-off frequency of 100Hz + * The filter has a cut-off frequency of 1/80 of the sampling freq * * @note Two items before the top of the out buffer must contain two items from the * tail of the previous subframe. @@ -128,10 +86,35 @@ int ff_acelp_lp_synthesis_filter( * fixed-point all coefficients are the same as in G.729. Thus this * routine can be used for the fixed-point AMR decoder, too. */ -void ff_acelp_high_pass_filter( - int16_t* out, - int hpf_f[2], - const int16_t* in, - int length); +void ff_acelp_high_pass_filter(int16_t* out, int hpf_f[2], + const int16_t* in, int length); + +/** + * Apply an order 2 rational transfer function in-place. + * + * @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 *out, const float *in, + const float zero_coeffs[2], + const float pole_coeffs[2], + float gain, + float mem[2], int n); + +/** + * Apply tilt compensation filter, 1 - tilt * z-1. + * + * @param mem pointer to the filter's state (one single float) + * @param tilt tilt factor + * @param samples array where the filter is applied + * @param size the size of the samples array + */ +void ff_tilt_compensation(float *mem, float tilt, float *samples, int size); + -#endif /* FFMPEG_ACELP_FILTERS_H */ +#endif /* AVCODEC_ACELP_FILTERS_H */