Commit d4d6ae16 authored by Colin McQuillan's avatar Colin McQuillan Committed by Robert Swain

Add ff_celp_circ_addf() function to be used for sparse vector circular

convolution in the upcoming AMR-NB floating point decoder. The function scales
and adds a vector, that is lagged by some offset, to another vector with the
same number of elements.

Patch by Colin McQuillan ( m.niloc googlemail com )

Originally committed as revision 19634 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 51fdb6f0
...@@ -47,6 +47,16 @@ void ff_celp_convolve_circ(int16_t* fc_out, ...@@ -47,6 +47,16 @@ void ff_celp_convolve_circ(int16_t* fc_out,
} }
} }
void ff_celp_circ_addf(float *out, const float *in,
const float *lagged, int lag, float fac, int n)
{
int k;
for (k = 0; k < lag; k++)
out[k] = in[k] + fac * lagged[n + k - lag];
for (; k < n; k++)
out[k] = in[k] + fac * lagged[ k - lag];
}
int ff_celp_lp_synthesis_filter(int16_t *out, int ff_celp_lp_synthesis_filter(int16_t *out,
const int16_t* filter_coeffs, const int16_t* filter_coeffs,
const int16_t* in, const int16_t* in,
......
...@@ -41,6 +41,21 @@ void ff_celp_convolve_circ(int16_t* fc_out, ...@@ -41,6 +41,21 @@ void ff_celp_convolve_circ(int16_t* fc_out,
const int16_t* filter, const int16_t* filter,
int len); int len);
/**
* Add an array to a rotated array.
*
* out[k] = in[k] + fac * lagged[k-lag] with wrap-around
*
* @param out result vector
* @param in samples to be added unfiltered
* @param lagged samples to be rotated, multiplied and added
* @param lag lagged vector delay in the range [0, n]
* @param fac scalefactor for lagged samples
* @param n number of samples
*/
void ff_celp_circ_addf(float *out, const float *in,
const float *lagged, int lag, float fac, int n);
/** /**
* LP synthesis filter. * LP synthesis filter.
* @param out [out] pointer to output buffer * @param out [out] pointer to output buffer
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment