Split the input/output data arguments to ff_adaptive_gain_control().
Originally committed as revision 22932 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
8e6daa4a95
commit
bb2dd9efd8
@ -207,11 +207,11 @@ void ff_weighted_vector_sumf(float *out, const float *in_a, const float *in_b,
|
|||||||
+ weight_coeff_b * in_b[i];
|
+ weight_coeff_b * in_b[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
void ff_adaptive_gain_control(float *buf_out, float speech_energ,
|
void ff_adaptive_gain_control(float *out, const float *in, float speech_energ,
|
||||||
int size, float alpha, float *gain_mem)
|
int size, float alpha, float *gain_mem)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
float postfilter_energ = ff_dot_productf(buf_out, buf_out, size);
|
float postfilter_energ = ff_dot_productf(in, in, size);
|
||||||
float gain_scale_factor = 1.0;
|
float gain_scale_factor = 1.0;
|
||||||
float mem = *gain_mem;
|
float mem = *gain_mem;
|
||||||
|
|
||||||
@ -222,7 +222,7 @@ void ff_adaptive_gain_control(float *buf_out, float speech_energ,
|
|||||||
|
|
||||||
for (i = 0; i < size; i++) {
|
for (i = 0; i < size; i++) {
|
||||||
mem = alpha * mem + gain_scale_factor;
|
mem = alpha * mem + gain_scale_factor;
|
||||||
buf_out[i] *= mem;
|
out[i] = in[i] * mem;
|
||||||
}
|
}
|
||||||
|
|
||||||
*gain_mem = mem;
|
*gain_mem = mem;
|
||||||
|
@ -214,13 +214,14 @@ void ff_weighted_vector_sumf(float *out, const float *in_a, const float *in_b,
|
|||||||
/**
|
/**
|
||||||
* Adaptive gain control (as used in AMR postfiltering)
|
* Adaptive gain control (as used in AMR postfiltering)
|
||||||
*
|
*
|
||||||
* @param buf_out the input speech buffer
|
* @param out output buffer for filtered speech data
|
||||||
|
* @param in the input speech buffer (may be the same as out)
|
||||||
* @param speech_energ input energy
|
* @param speech_energ input energy
|
||||||
* @param size the input buffer size
|
* @param size the input buffer size
|
||||||
* @param alpha exponential filter factor
|
* @param alpha exponential filter factor
|
||||||
* @param gain_mem a pointer to the filter memory (single float of size)
|
* @param gain_mem a pointer to the filter memory (single float of size)
|
||||||
*/
|
*/
|
||||||
void ff_adaptive_gain_control(float *buf_out, float speech_energ,
|
void ff_adaptive_gain_control(float *out, const float *in, float speech_energ,
|
||||||
int size, float alpha, float *gain_mem);
|
int size, float alpha, float *gain_mem);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -943,7 +943,7 @@ static void postfilter(AMRContext *p, float *lpc, float *buf_out)
|
|||||||
ff_tilt_compensation(&p->tilt_mem, tilt_factor(lpc_n, lpc_d), buf_out,
|
ff_tilt_compensation(&p->tilt_mem, tilt_factor(lpc_n, lpc_d), buf_out,
|
||||||
AMR_SUBFRAME_SIZE);
|
AMR_SUBFRAME_SIZE);
|
||||||
|
|
||||||
ff_adaptive_gain_control(buf_out, speech_gain, AMR_SUBFRAME_SIZE,
|
ff_adaptive_gain_control(buf_out, buf_out, speech_gain, AMR_SUBFRAME_SIZE,
|
||||||
AMR_AGC_ALPHA, &p->postfilter_agc);
|
AMR_AGC_ALPHA, &p->postfilter_agc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -479,7 +479,8 @@ static void decode_frame(SiprContext *ctx, SiprParameters *params,
|
|||||||
float energy = ff_dot_productf(ctx->postfilter_syn5k0 + LP_FILTER_ORDER + i*SUBFR_SIZE,
|
float energy = ff_dot_productf(ctx->postfilter_syn5k0 + LP_FILTER_ORDER + i*SUBFR_SIZE,
|
||||||
ctx->postfilter_syn5k0 + LP_FILTER_ORDER + i*SUBFR_SIZE,
|
ctx->postfilter_syn5k0 + LP_FILTER_ORDER + i*SUBFR_SIZE,
|
||||||
SUBFR_SIZE);
|
SUBFR_SIZE);
|
||||||
ff_adaptive_gain_control(&synth[i * SUBFR_SIZE], energy,
|
ff_adaptive_gain_control(&synth[i * SUBFR_SIZE],
|
||||||
|
&synth[i * SUBFR_SIZE], energy,
|
||||||
SUBFR_SIZE, 0.9, &ctx->postfilter_agc);
|
SUBFR_SIZE, 0.9, &ctx->postfilter_agc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user