OSDN Git Service

g723.1: make scale_vector() output to a separate buffer
authorMans Rullgard <mans@mansr.com>
Sat, 11 Aug 2012 11:21:41 +0000 (12:21 +0100)
committerMans Rullgard <mans@mansr.com>
Mon, 13 Aug 2012 00:03:25 +0000 (01:03 +0100)
Signed-off-by: Mans Rullgard <mans@mansr.com>
libavcodec/g723_1.c

index e1d8591..6f4898c 100644 (file)
@@ -278,7 +278,7 @@ static int normalize_bits(int num, int width)
 /**
  * Scale vector contents based on the largest of their absolutes.
  */
-static int scale_vector(int16_t *vector, int length)
+static int scale_vector(int16_t *dst, const int16_t *vector, int length)
 {
     int bits, max = 0;
     int i;
@@ -292,10 +292,10 @@ static int scale_vector(int16_t *vector, int length)
 
     if (bits == 15)
         for (i = 0; i < length; i++)
-            vector[i] = vector[i] * 0x7fff >> 3;
+            dst[i] = vector[i] * 0x7fff >> 3;
     else
         for (i = 0; i < length; i++)
-            vector[i] = vector[i] << bits >> 3;
+            dst[i] = vector[i] << bits >> 3;
 
     return bits - 3;
 }
@@ -791,11 +791,11 @@ static int comp_interp_index(G723_1_Context *p, int pitch_lag,
                              int *exc_eng, int *scale)
 {
     int offset = PITCH_MAX + 2 * SUBFRAME_LEN;
-    int16_t *buf = p->excitation + offset;
+    const int16_t *buf = p->excitation + offset;
 
     int index, ccr, tgt_eng, best_eng, temp;
 
-    *scale = scale_vector(p->excitation, FRAME_LEN + PITCH_MAX);
+    *scale = scale_vector(p->excitation, p->excitation, FRAME_LEN + PITCH_MAX);
 
     /* Compute maximum backward cross-correlation */
     ccr   = 0;
@@ -958,8 +958,7 @@ static void formant_postfilter(G723_1_Context *p, int16_t *lpc, int16_t *buf)
         int scale, energy;
 
         /* Normalize */
-        memcpy(temp_vector, buf_ptr, SUBFRAME_LEN * sizeof(*temp_vector));
-        scale = scale_vector(temp_vector, SUBFRAME_LEN);
+        scale = scale_vector(temp_vector, buf_ptr, SUBFRAME_LEN);
 
         /* Compute auto correlation coefficients */
         auto_corr[0] = dot_product(temp_vector, temp_vector + 1,