diff options
author | Paul B Mahol <onemda@gmail.com> | 2016-03-04 10:36:11 +0100 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2016-03-04 10:38:40 +0100 |
commit | 79a54f30c8ba02cbf2b02c650120246b260977ec (patch) | |
tree | f04f85d4e7bd8f9829dba4d5a3576a66e6113640 | |
parent | 2761e250cc87e950a8949dafc56b0877c14b53e8 (diff) | |
download | ffmpeg-79a54f30c8ba02cbf2b02c650120246b260977ec.tar.gz |
avfilter/af_sofalizer: fix crash when ir size is not aligned, usually when n_samples are not power of 2
Signed-off-by: Paul B Mahol <onemda@gmail.com>
-rw-r--r-- | libavfilter/af_sofalizer.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/libavfilter/af_sofalizer.c b/libavfilter/af_sofalizer.c index 33937d8221..4c7ea68df4 100644 --- a/libavfilter/af_sofalizer.c +++ b/libavfilter/af_sofalizer.c @@ -490,8 +490,15 @@ static int compensate_volume(AVFilterContext *ctx) av_log(ctx, AV_LOG_DEBUG, "Compensate-factor: %f\n", compensate); ir = sofa->data_ir; /* apply volume compensation to IRs */ - s->fdsp->vector_fmul_scalar(ir, ir, compensate, sofa->n_samples * sofa->m_dim * 2); - emms_c(); + if (sofa->n_samples & 31) { + int i; + for (i = 0; i < sofa->n_samples * sofa->m_dim * 2; i++) { + ir[i] = ir[i] * compensate; + } + } else { + s->fdsp->vector_fmul_scalar(ir, ir, compensate, sofa->n_samples * sofa->m_dim * 2); + emms_c(); + } } return 0; |