Browse Source

avfilter/af_sofalizer: use SIMD in compensate_volume()

Signed-off-by: Paul B Mahol <onemda@gmail.com>
tags/n3.0
Paul B Mahol 9 years ago
parent
commit
fa2c1eab95
1 changed files with 8 additions and 6 deletions
  1. +8
    -6
      libavfilter/af_sofalizer.c

+ 8
- 6
libavfilter/af_sofalizer.c View File

@@ -567,7 +567,7 @@ static int compensate_volume(AVFilterContext *ctx)
float compensate;
float energy = 0;
float *ir;
int m, j;
int m;

if (s->sofa.ncid) {
/* find IR at front center position in the SOFA file (IR closest to 0°,0°,1m) */
@@ -575,15 +575,17 @@ static int compensate_volume(AVFilterContext *ctx)
m = find_m(s, 0, 0, 1);
/* get energy of that IR and compensate volume */
ir = sofa->data_ir + 2 * m * sofa->n_samples;
for (j = 0; j < sofa->n_samples; j++) {
energy += *(ir + j) * *(ir + j);
if (sofa->n_samples & 31) {
energy = avpriv_scalarproduct_float_c(ir, ir, sofa->n_samples);
} else {
energy = s->fdsp->scalarproduct_float(ir, ir, sofa->n_samples);
}
compensate = 256 / (sofa->n_samples * sqrt(energy));
av_log(ctx, AV_LOG_DEBUG, "Compensate-factor: %f\n", compensate);
ir = sofa->data_ir;
for (j = 0; j < sofa->n_samples * sofa->m_dim * 2; j++) {
ir[j] *= compensate; /* apply volume compensation to IRs */
}
/* apply volume compensation to IRs */
s->fdsp->vector_fmul_scalar(ir, ir, compensate, sofa->n_samples * sofa->m_dim * 2);
emms_c();
}

return 0;


Loading…
Cancel
Save