summaryrefslogtreecommitdiff
path: root/libavfilter/af_atempo.c
diff options
context:
space:
mode:
authorNicolas George <nicolas.george@normalesup.org>2012-08-28 18:15:49 +0200
committerNicolas George <nicolas.george@normalesup.org>2012-08-29 18:19:41 +0200
commita5704659e3e41b7698812b89f67d9a7467a74d20 (patch)
tree9b1c06e0d0751c763c79b04bd512c383b94a0950 /libavfilter/af_atempo.c
parent7816c7e7728d5094d52c34652a504c38ebfc4628 (diff)
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.
Diffstat (limited to 'libavfilter/af_atempo.c')
-rw-r--r--libavfilter/af_atempo.c24
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);