Commit 809e07c6 authored by Kenan Gillet's avatar Kenan Gillet Committed by Reynaldo H. Verdejo Pinochet

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

Gillet.

Originally committed as revision 18345 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 38d5647a
......@@ -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];
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment