summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorEdward Hervey <bilboed@bilboed.com>2009-03-06 17:37:51 +0100
committerEdward Hervey <bilboed@bilboed.com>2009-03-06 17:37:51 +0100
commit98167578c45b91b5b73f4e1165fb68d03b10ed92 (patch)
tree6aae6f200f44c5a38f433cec4d65d3fc419c2948 /ext
parentdf6fb6867ed19bfc5f735518452153d5e81efc04 (diff)
ffmpegdec: Make sure we provide 16 byte aligned data to ffmpeg. Fixes #572863
We simply allocate the memory using ffmpeg's av_malloc which provides us with properly memalign'ed data. This avoids write-outside-of-bounds when sse/altivec code is being used.
Diffstat (limited to 'ext')
-rw-r--r--ext/ffmpeg/gstffmpegdec.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/ext/ffmpeg/gstffmpegdec.c b/ext/ffmpeg/gstffmpegdec.c
index aeec910..019140c 100644
--- a/ext/ffmpeg/gstffmpegdec.c
+++ b/ext/ffmpeg/gstffmpegdec.c
@@ -1794,8 +1794,12 @@ gst_ffmpegdec_audio_frame (GstFFMpegDec * ffmpegdec,
GST_TIME_ARGS (in_timestamp), GST_TIME_ARGS (in_duration),
GST_TIME_ARGS (ffmpegdec->next_ts));
- /* outgoing buffer */
- *outbuf = gst_buffer_new_and_alloc (AVCODEC_MAX_AUDIO_FRAME_SIZE);
+ /* outgoing buffer. We use av_malloc() to have properly aligned memory. */
+ *outbuf = gst_buffer_new ();
+ GST_BUFFER_DATA (*outbuf) = GST_BUFFER_MALLOCDATA (*outbuf) =
+ av_malloc (AVCODEC_MAX_AUDIO_FRAME_SIZE);
+ GST_BUFFER_SIZE (*outbuf) = AVCODEC_MAX_AUDIO_FRAME_SIZE;
+ GST_BUFFER_FREE_FUNC (*outbuf) = av_free;
len = avcodec_decode_audio2 (ffmpegdec->context,
(int16_t *) GST_BUFFER_DATA (*outbuf), &have_data, data, size);