[FFmpeg-cvslog] r18345 - trunk/libavcodec/qcelpdec.c

reynaldo subversion
Tue Apr 7 03:39:18 CEST 2009


Author: reynaldo
Date: Tue Apr  7 03:39:17 2009
New Revision: 18345

Log:
Move scale factor computation to its own function. Patch by Kenan
Gillet.

Modified:
   trunk/libavcodec/qcelpdec.c

Modified: trunk/libavcodec/qcelpdec.c
==============================================================================
--- trunk/libavcodec/qcelpdec.c	Mon Apr  6 23:45:02 2009	(r18344)
+++ trunk/libavcodec/qcelpdec.c	Tue Apr  7 03:39:17 2009	(r18345)
@@ -412,18 +412,39 @@ static void compute_svector(QCELPContext
 }
 
 /**
- * Apply generic gain control.
+ * Compute the gain control
  *
- * @param v_out output vector
  * @param v_in gain-controlled vector
  * @param v_ref vector to control gain of
  *
+ * @return gain control
+ *
  * FIXME: If v_ref is a zero vector, it energy is zero
  *        and the behavior of the gain control is
  *        undefined in the specs.
  *
  * TIA/EIA/IS-733 2.4.8.3-2/3/4/5, 2.4.8.6
  */
+static float compute_gain_ctrl(const float *v_ref, const float *v_in, const int len)
+{
+    float scalefactor = ff_dot_productf(v_in, v_in, len);
+
+    if(scalefactor)
+        scalefactor = sqrt(ff_dot_productf(v_ref, v_ref, len) / scalefactor);
+    else
+        ff_log_missing_feature(NULL, "Zero energy for gain control", 1);
+    return scalefactor;
+}
+
+/**
+ * Apply generic gain control.
+ *
+ * @param v_out output vector
+ * @param v_in gain-controlled vector
+ * @param v_ref vector to control gain of
+ *
+ * TIA/EIA/IS-733 2.4.8.3, 2.4.8.6
+ */
 static void apply_gain_ctrl(float *v_out, const float *v_ref,
                             const float *v_in)
 {
@@ -432,12 +453,7 @@ static void apply_gain_ctrl(float *v_out
 
     for(i=0, j=0; i<4; i++)
     {
-        scalefactor = ff_dot_productf(v_in + j, v_in + j, 40);
-        if(scalefactor)
-            scalefactor = sqrt(ff_dot_productf(v_ref + j, v_ref + j, 40)
-                        / scalefactor);
-        else
-            ff_log_missing_feature(NULL, "Zero energy for gain control", 1);
+        scalefactor = compute_gain_ctrl(v_ref + j, v_in + j, 40);
         for(len=j+40; j<len; j++)
             v_out[j] = scalefactor * v_in[j];
     }



More information about the ffmpeg-cvslog mailing list