[SCM] libav/experimental: Move scale factor computation to its own function. Patch by Kenan Gillet.

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:43:21 UTC 2013


The following commit has been merged in the experimental branch:
commit 809e07c6187626952778f4bd45180aabf1b98132
Author: Kenan Gillet <kenan.gillet at gmail.com>
Date:   Tue Apr 7 01:39:17 2009 +0000

    Move scale factor computation to its own function. Patch by Kenan
    Gillet.
    
    Originally committed as revision 18345 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/qcelpdec.c b/libavcodec/qcelpdec.c
index 32e74a6..9bef200 100644
--- a/libavcodec/qcelpdec.c
+++ b/libavcodec/qcelpdec.c
@@ -412,18 +412,39 @@ static void compute_svector(QCELPContext *q, const float *gain,
 }
 
 /**
- * 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, const float *v_ref,
 
     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];
     }

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list