[FFmpeg-soc] [soc]: r5436 - amr/amrnbdec.c

vitor subversion at mplayerhq.hu
Tue Nov 10 06:11:12 CET 2009


Author: vitor
Date: Tue Nov 10 06:11:11 2009
New Revision: 5436

Log:
Use ff_adaptative_gain_control(). Again, output changes slightly.

Modified:
   amr/amrnbdec.c

Modified: amr/amrnbdec.c
==============================================================================
--- amr/amrnbdec.c	Tue Nov 10 06:08:44 2009	(r5435)
+++ amr/amrnbdec.c	Tue Nov 10 06:11:11 2009	(r5436)
@@ -1071,10 +1071,8 @@ static void postfilter(AMRContext *p, fl
     int i;
     float *samples          = p->samples_in + LP_FILTER_ORDER; // Start of input
 
-    float gain_scale_factor = 1.0;
     float speech_gain       = ff_dot_productf(samples, samples,
                                               AMR_SUBFRAME_SIZE);
-    float postfilter_gain;
 
     float pole_out[AMR_SUBFRAME_SIZE + LP_FILTER_ORDER];  // Output of pole filter
     const float *gamma_n, *gamma_d;                       // Formant filter factor table
@@ -1106,16 +1104,8 @@ static void postfilter(AMRContext *p, fl
     ff_tilt_compensation(&p->tilt_mem, tilt_factor(lpc_n, lpc_d), buf_out,
                          AMR_SUBFRAME_SIZE);
 
-    // Adaptive gain control
-    postfilter_gain = ff_dot_productf(buf_out, buf_out, AMR_SUBFRAME_SIZE);
-    if (postfilter_gain)
-        gain_scale_factor = sqrt(speech_gain / postfilter_gain);
-
-    for (i = 0; i < AMR_SUBFRAME_SIZE; i++) {
-        p->postfilter_agc = AMR_AGC_ALPHA * p->postfilter_agc +
-                            (1.0 - AMR_AGC_ALPHA) * gain_scale_factor;
-        buf_out[i] *= p->postfilter_agc;
-    }
+    ff_adaptative_gain_control(buf_out, speech_gain, AMR_SUBFRAME_SIZE,
+                               AMR_AGC_ALPHA, &p->postfilter_agc);
 }
 
 /// @}


More information about the FFmpeg-soc mailing list