Revision bb2dd9ef

View differences:

libavcodec/acelp_vectors.c
207 207
               + weight_coeff_b * in_b[i];
208 208
}
209 209

  
210
void ff_adaptive_gain_control(float *buf_out, float speech_energ,
210
void ff_adaptive_gain_control(float *out, const float *in, float speech_energ,
211 211
                              int size, float alpha, float *gain_mem)
212 212
{
213 213
    int i;
214
    float postfilter_energ = ff_dot_productf(buf_out, buf_out, size);
214
    float postfilter_energ = ff_dot_productf(in, in, size);
215 215
    float gain_scale_factor = 1.0;
216 216
    float mem = *gain_mem;
217 217

  
......
222 222

  
223 223
    for (i = 0; i < size; i++) {
224 224
        mem = alpha * mem + gain_scale_factor;
225
        buf_out[i] *= mem;
225
        out[i] = in[i] * mem;
226 226
    }
227 227

  
228 228
    *gain_mem = mem;
libavcodec/acelp_vectors.h
214 214
/**
215 215
 * Adaptive gain control (as used in AMR postfiltering)
216 216
 *
217
 * @param buf_out the input speech buffer
217
 * @param out output buffer for filtered speech data
218
 * @param in the input speech buffer (may be the same as out)
218 219
 * @param speech_energ input energy
219 220
 * @param size the input buffer size
220 221
 * @param alpha exponential filter factor
221 222
 * @param gain_mem a pointer to the filter memory (single float of size)
222 223
 */
223
void ff_adaptive_gain_control(float *buf_out, float speech_energ,
224
void ff_adaptive_gain_control(float *out, const float *in, float speech_energ,
224 225
                              int size, float alpha, float *gain_mem);
225 226

  
226 227
/**
libavcodec/amrnbdec.c
943 943
    ff_tilt_compensation(&p->tilt_mem, tilt_factor(lpc_n, lpc_d), buf_out,
944 944
                         AMR_SUBFRAME_SIZE);
945 945

  
946
    ff_adaptive_gain_control(buf_out, speech_gain, AMR_SUBFRAME_SIZE,
946
    ff_adaptive_gain_control(buf_out, buf_out, speech_gain, AMR_SUBFRAME_SIZE,
947 947
                             AMR_AGC_ALPHA, &p->postfilter_agc);
948 948
}
949 949

  
libavcodec/sipr.c
479 479
            float energy = ff_dot_productf(ctx->postfilter_syn5k0 + LP_FILTER_ORDER + i*SUBFR_SIZE,
480 480
                                           ctx->postfilter_syn5k0 + LP_FILTER_ORDER + i*SUBFR_SIZE,
481 481
                                           SUBFR_SIZE);
482
            ff_adaptive_gain_control(&synth[i * SUBFR_SIZE], energy,
482
            ff_adaptive_gain_control(&synth[i * SUBFR_SIZE],
483
                                     &synth[i * SUBFR_SIZE], energy,
483 484
                                     SUBFR_SIZE, 0.9, &ctx->postfilter_agc);
484 485
        }
485 486

  

Also available in: Unified diff