diff options
author | Nicolas George <nicolas.george@normalesup.org> | 2012-08-28 18:15:49 +0200 |
---|---|---|
committer | Nicolas George <nicolas.george@normalesup.org> | 2012-08-29 18:19:41 +0200 |
commit | a5704659e3e41b7698812b89f67d9a7467a74d20 (patch) | |
tree | 9b1c06e0d0751c763c79b04bd512c383b94a0950 | |
parent | 7816c7e7728d5094d52c34652a504c38ebfc4628 (diff) | |
download | ffmpeg-a5704659e3e41b7698812b89f67d9a7467a74d20.tar.gz |
lavfi/af_atempo: use av_malloc for rDFT buffers.
Memory obtained from av_realloc is not aligned enough for AVX.
The other similar allocations are changed too because they use
the same macro. The buffers were cleared afterwards anyway.
Fix trac ticket #1692.
-rw-r--r-- | libavfilter/af_atempo.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/libavfilter/af_atempo.c b/libavfilter/af_atempo.c index 7971aef4d5..c2d1fc1573 100644 --- a/libavfilter/af_atempo.c +++ b/libavfilter/af_atempo.c @@ -209,14 +209,16 @@ static void yae_release_buffers(ATempoContext *atempo) atempo->complex_to_real = NULL; } -#define REALLOC_OR_FAIL(field, field_size) \ +/* av_realloc is not aligned enough; fortunately, the data does not need to + * be preserved */ +#define RE_MALLOC_OR_FAIL(field, field_size) \ do { \ - void * new_field = av_realloc(field, (field_size)); \ - if (!new_field) { \ + av_freep(&field); \ + field = av_malloc(field_size); \ + if (!field) { \ yae_release_buffers(atempo); \ return AVERROR(ENOMEM); \ } \ - field = new_field; \ } while (0) /** @@ -251,10 +253,10 @@ static int yae_reset(ATempoContext *atempo, } // initialize audio fragment buffers: - REALLOC_OR_FAIL(atempo->frag[0].data, atempo->window * atempo->stride); - REALLOC_OR_FAIL(atempo->frag[1].data, atempo->window * atempo->stride); - REALLOC_OR_FAIL(atempo->frag[0].xdat, atempo->window * sizeof(FFTComplex)); - REALLOC_OR_FAIL(atempo->frag[1].xdat, atempo->window * sizeof(FFTComplex)); + RE_MALLOC_OR_FAIL(atempo->frag[0].data, atempo->window * atempo->stride); + RE_MALLOC_OR_FAIL(atempo->frag[1].data, atempo->window * atempo->stride); + RE_MALLOC_OR_FAIL(atempo->frag[0].xdat, atempo->window * sizeof(FFTComplex)); + RE_MALLOC_OR_FAIL(atempo->frag[1].xdat, atempo->window * sizeof(FFTComplex)); // initialize rDFT contexts: av_rdft_end(atempo->real_to_complex); @@ -275,13 +277,13 @@ static int yae_reset(ATempoContext *atempo, return AVERROR(ENOMEM); } - REALLOC_OR_FAIL(atempo->correlation, atempo->window * sizeof(FFTComplex)); + RE_MALLOC_OR_FAIL(atempo->correlation, atempo->window * sizeof(FFTComplex)); atempo->ring = atempo->window * 3; - REALLOC_OR_FAIL(atempo->buffer, atempo->ring * atempo->stride); + RE_MALLOC_OR_FAIL(atempo->buffer, atempo->ring * atempo->stride); // initialize the Hann window function: - REALLOC_OR_FAIL(atempo->hann, atempo->window * sizeof(float)); + RE_MALLOC_OR_FAIL(atempo->hann, atempo->window * sizeof(float)); for (i = 0; i < atempo->window; i++) { double t = (double)i / (double)(atempo->window - 1); |