Mercurial > libavcodec.hg
changeset 9353:70c3982d0bad libavcodec
Move scale factor computation to its own function. Patch by Kenan
Gillet.
author | reynaldo |
---|---|
date | Tue, 07 Apr 2009 01:39:17 +0000 |
parents | 03fd7ea4926b |
children | 174309386512 |
files | qcelpdec.c |
diffstat | 1 files changed, 27 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/qcelpdec.c Mon Apr 06 21:45:02 2009 +0000 +++ b/qcelpdec.c Tue Apr 07 01:39:17 2009 +0000 @@ -412,17 +412,38 @@ } /** + * Compute the gain control + * + * @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 * - * 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 + * 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 @@ 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]; }