Split the input/output data arguments to ff_adaptive_gain_control().
authorRonald S. Bultje <rsbultje@gmail.com>
Wed, 21 Apr 2010 17:43:52 +0000 (17:43 +0000)
committerRonald S. Bultje <rsbultje@gmail.com>
Wed, 21 Apr 2010 17:43:52 +0000 (17:43 +0000)
Originally committed as revision 22932 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/acelp_vectors.c
libavcodec/acelp_vectors.h
libavcodec/amrnbdec.c
libavcodec/sipr.c

index a25011f..e41e5fa 100644 (file)
@@ -207,11 +207,11 @@ void ff_weighted_vector_sumf(float *out, const float *in_a, const float *in_b,
                + weight_coeff_b * in_b[i];
 }
 
-void ff_adaptive_gain_control(float *buf_out, float speech_energ,
+void ff_adaptive_gain_control(float *out, const float *in, float speech_energ,
                               int size, float alpha, float *gain_mem)
 {
     int i;
-    float postfilter_energ = ff_dot_productf(buf_out, buf_out, size);
+    float postfilter_energ = ff_dot_productf(in, in, size);
     float gain_scale_factor = 1.0;
     float mem = *gain_mem;
 
@@ -222,7 +222,7 @@ void ff_adaptive_gain_control(float *buf_out, float speech_energ,
 
     for (i = 0; i < size; i++) {
         mem = alpha * mem + gain_scale_factor;
-        buf_out[i] *= mem;
+        out[i] = in[i] * mem;
     }
 
     *gain_mem = mem;
index 3e6652f..ba3437f 100644 (file)
@@ -214,13 +214,14 @@ void ff_weighted_vector_sumf(float *out, const float *in_a, const float *in_b,
 /**
  * Adaptive gain control (as used in AMR postfiltering)
  *
- * @param buf_out the input speech buffer
+ * @param out output buffer for filtered speech data
+ * @param in the input speech buffer (may be the same as out)
  * @param speech_energ input energy
  * @param size the input buffer size
  * @param alpha exponential filter factor
  * @param gain_mem a pointer to the filter memory (single float of size)
  */
-void ff_adaptive_gain_control(float *buf_out, float speech_energ,
+void ff_adaptive_gain_control(float *out, const float *in, float speech_energ,
                               int size, float alpha, float *gain_mem);
 
 /**
index 08ad952..3e7515d 100644 (file)
@@ -943,7 +943,7 @@ static void postfilter(AMRContext *p, float *lpc, float *buf_out)
     ff_tilt_compensation(&p->tilt_mem, tilt_factor(lpc_n, lpc_d), buf_out,
                          AMR_SUBFRAME_SIZE);
 
-    ff_adaptive_gain_control(buf_out, speech_gain, AMR_SUBFRAME_SIZE,
+    ff_adaptive_gain_control(buf_out, buf_out, speech_gain, AMR_SUBFRAME_SIZE,
                              AMR_AGC_ALPHA, &p->postfilter_agc);
 }
 
index fc19ecd..5b7d87f 100644 (file)
@@ -479,7 +479,8 @@ static void decode_frame(SiprContext *ctx, SiprParameters *params,
             float energy = ff_dot_productf(ctx->postfilter_syn5k0 + LP_FILTER_ORDER + i*SUBFR_SIZE,
                                            ctx->postfilter_syn5k0 + LP_FILTER_ORDER + i*SUBFR_SIZE,
                                            SUBFR_SIZE);
-            ff_adaptive_gain_control(&synth[i * SUBFR_SIZE], energy,
+            ff_adaptive_gain_control(&synth[i * SUBFR_SIZE],
+                                     &synth[i * SUBFR_SIZE], energy,
                                      SUBFR_SIZE, 0.9, &ctx->postfilter_agc);
         }