changeset 7186:ff5ef7becd94 libavcodec

make sum_of_squares() more generic
author michael
date Thu, 03 Jul 2008 11:50:44 +0000
parents 82ab987bca8a
children 205d198d05e5
files acelp_math.h acelp_pitch_delay.c
diffstat 2 files changed, 9 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/acelp_math.h	Wed Jul 02 22:28:47 2008 +0000
+++ b/acelp_math.h	Thu Jul 03 11:50:44 2008 +0000
@@ -51,23 +51,21 @@
 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;
 }
--- a/acelp_pitch_delay.c	Wed Jul 02 22:28:47 2008 +0000
+++ b/acelp_pitch_delay.c	Thu Jul 03 11:50:44 2008 +0000
@@ -103,7 +103,7 @@
         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 @@
            );
 #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
 }