diff options
author | Clément Bœsch <ubitux@gmail.com> | 2012-10-26 18:42:54 +0200 |
---|---|---|
committer | Clément Bœsch <ubitux@gmail.com> | 2012-10-27 22:59:05 +0200 |
commit | 6078bd80247101db326b40f7e295bbd87b669c18 (patch) | |
tree | 61298a5688e7845d493bd2f101833c54c60d4854 /libavfilter | |
parent | 2ef26b5e73373d0684a3507f74adfbf3a1e22785 (diff) | |
download | ffmpeg-6078bd80247101db326b40f7e295bbd87b669c18.tar.gz |
lavf/showspectrum: fix unaligned rdft data.
Diffstat (limited to 'libavfilter')
-rw-r--r-- | libavfilter/avf_showspectrum.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/libavfilter/avf_showspectrum.c b/libavfilter/avf_showspectrum.c index 1600265415..21d06e7133 100644 --- a/libavfilter/avf_showspectrum.c +++ b/libavfilter/avf_showspectrum.c @@ -132,16 +132,20 @@ static int config_output(AVFilterLink *outlink) /* (re-)configuration if the video output changed (or first init) */ if (rdft_bits != showspectrum->rdft_bits) { + size_t rdft_size; AVFilterBufferRef *outpicref; av_rdft_end(showspectrum->rdft); showspectrum->rdft = av_rdft_init(rdft_bits, DFT_R2C); showspectrum->rdft_bits = rdft_bits; - /* RDFT buffers: x2 for each (display) channel buffer */ - showspectrum->rdft_data = - av_realloc_f(showspectrum->rdft_data, 2 * win_size, - sizeof(*showspectrum->rdft_data)); + /* RDFT buffers: x2 for each (display) channel buffer. + * Note: we use free and malloc instead of a realloc-like function to + * make sure the buffer is aligned in memory for the FFT functions. */ + av_freep(&showspectrum->rdft_data); + if (av_size_mult(sizeof(*showspectrum->rdft_data), 2 * win_size, &rdft_size) < 0) + return AVERROR(EINVAL); + showspectrum->rdft_data = av_malloc(rdft_size); if (!showspectrum->rdft_data) return AVERROR(ENOMEM); showspectrum->filled = 0; |