mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
Move scale factor computation to its own function. Patch by Kenan
Gillet. Originally committed as revision 18345 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
38d5647a63
commit
809e07c618
@ -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_in gain-controlled vector
|
||||||
* @param v_ref vector to control gain of
|
* @param v_ref vector to control gain of
|
||||||
*
|
*
|
||||||
|
* @return gain control
|
||||||
|
*
|
||||||
* FIXME: If v_ref is a zero vector, it energy is zero
|
* FIXME: If v_ref is a zero vector, it energy is zero
|
||||||
* and the behavior of the gain control is
|
* and the behavior of the gain control is
|
||||||
* undefined in the specs.
|
* undefined in the specs.
|
||||||
*
|
*
|
||||||
* TIA/EIA/IS-733 2.4.8.3-2/3/4/5, 2.4.8.6
|
* 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,
|
static void apply_gain_ctrl(float *v_out, const float *v_ref,
|
||||||
const float *v_in)
|
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++)
|
for(i=0, j=0; i<4; i++)
|
||||||
{
|
{
|
||||||
scalefactor = ff_dot_productf(v_in + j, v_in + j, 40);
|
scalefactor = compute_gain_ctrl(v_ref + 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);
|
|
||||||
for(len=j+40; j<len; j++)
|
for(len=j+40; j<len; j++)
|
||||||
v_out[j] = scalefactor * v_in[j];
|
v_out[j] = scalefactor * v_in[j];
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user