Commit a5704659 authored by Nicolas George's avatar Nicolas George

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.
parent 7816c7e7
...@@ -209,14 +209,16 @@ static void yae_release_buffers(ATempoContext *atempo) ...@@ -209,14 +209,16 @@ static void yae_release_buffers(ATempoContext *atempo)
atempo->complex_to_real = NULL; 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 { \ do { \
void * new_field = av_realloc(field, (field_size)); \ av_freep(&field); \
if (!new_field) { \ field = av_malloc(field_size); \
if (!field) { \
yae_release_buffers(atempo); \ yae_release_buffers(atempo); \
return AVERROR(ENOMEM); \ return AVERROR(ENOMEM); \
} \ } \
field = new_field; \
} while (0) } while (0)
/** /**
...@@ -251,10 +253,10 @@ static int yae_reset(ATempoContext *atempo, ...@@ -251,10 +253,10 @@ static int yae_reset(ATempoContext *atempo,
} }
// initialize audio fragment buffers: // initialize audio fragment buffers:
REALLOC_OR_FAIL(atempo->frag[0].data, atempo->window * atempo->stride); RE_MALLOC_OR_FAIL(atempo->frag[0].data, atempo->window * atempo->stride);
REALLOC_OR_FAIL(atempo->frag[1].data, atempo->window * atempo->stride); RE_MALLOC_OR_FAIL(atempo->frag[1].data, atempo->window * atempo->stride);
REALLOC_OR_FAIL(atempo->frag[0].xdat, atempo->window * sizeof(FFTComplex)); RE_MALLOC_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[1].xdat, atempo->window * sizeof(FFTComplex));
// initialize rDFT contexts: // initialize rDFT contexts:
av_rdft_end(atempo->real_to_complex); av_rdft_end(atempo->real_to_complex);
...@@ -275,13 +277,13 @@ static int yae_reset(ATempoContext *atempo, ...@@ -275,13 +277,13 @@ static int yae_reset(ATempoContext *atempo,
return AVERROR(ENOMEM); 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; 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: // 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++) { for (i = 0; i < atempo->window; i++) {
double t = (double)i / (double)(atempo->window - 1); double t = (double)i / (double)(atempo->window - 1);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment