diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2008-07-03 11:50:44 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2008-07-03 11:50:44 +0000 |
commit | 2b150e9a0cb5ffabf771f9a48a3ab22e604b4db1 (patch) | |
tree | aa0ef9755fe33220647a142418fd6e8de2cc41f9 | |
parent | 58cc7dd9fc30eb7fd5fb255b58c2ca6470b31dd0 (diff) | |
download | ffmpeg-2b150e9a0cb5ffabf771f9a48a3ab22e604b4db1.tar.gz |
make sum_of_squares() more generic
Originally committed as revision 14056 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/acelp_math.h | 16 | ||||
-rw-r--r-- | libavcodec/acelp_pitch_delay.c | 4 |
2 files changed, 9 insertions, 11 deletions
diff --git a/libavcodec/acelp_math.h b/libavcodec/acelp_math.h index e503df8984..6e1344b5bd 100644 --- a/libavcodec/acelp_math.h +++ b/libavcodec/acelp_math.h @@ -51,23 +51,21 @@ int ff_exp2(uint16_t power); int ff_log2(uint32_t value); /** - * \brief Calculates sum of array element multiplications - * \param speech input data array + * \brief Calculates the dot product + * \param a input data array + * \param b input data array * \param length number of elements - * \param offset offset for calculation of sum of s[i]*s[i+offset] * \param shift right shift by this value will be done before multiplication * * \return sum of multiplications - * - * \note array must be at least length+offset long! */ -static int sum_of_squares(const int16_t* speech, int length, int offset, int shift) +static int dot_product(const int16_t* a, const int16_t* b, int length, int shift) { - const int16_t* speech_end; int sum = 0; + int i; - for(speech_end=speech+length; speech<speech_end; speech++) - sum += (speech[0] * speech[offset]) >> shift; + for(i=0; i<length; i++) + sum += (a[i] * b[i]) >> shift; return sum; } diff --git a/libavcodec/acelp_pitch_delay.c b/libavcodec/acelp_pitch_delay.c index 9b35fcc892..0746588a22 100644 --- a/libavcodec/acelp_pitch_delay.c +++ b/libavcodec/acelp_pitch_delay.c @@ -103,7 +103,7 @@ int16_t ff_acelp_decode_gain_code( mr_energy += quant_energy[i] * ma_prediction_coeff[i]; #ifdef G729_BITEXACT - mr_energy += (((-6165LL * ff_log2(sum_of_squares(fc_v, subframe_size, 0, 0))) >> 3) & ~0x3ff); + mr_energy += (((-6165LL * ff_log2(dot_product(fc_v, fc_v, subframe_size, 0))) >> 3) & ~0x3ff); mr_energy = (5439 * (mr_energy >> 15)) >> 8; // (0.15) = (0.15) * (7.23) @@ -113,7 +113,7 @@ int16_t ff_acelp_decode_gain_code( ); #else mr_energy = gain_corr_factor * exp(M_LN10 / (20 << 23) * mr_energy) / - sqrt(sum_of_squares(fc_v, subframe_size, 0, 0)); + sqrt(dot_product(fc_v, fc_v, subframe_size, 0)); return mr_energy >> 12; #endif } |