From: <bi...@ke...> - 2009-03-06 16:40:29
|
Module: gst-ffmpeg Branch: master Commit: 98167578c45b91b5b73f4e1165fb68d03b10ed92 URL: http://cgit.freedesktop.org/gstreamer/gst-ffmpeg/commit/?id=98167578c45b91b5b73f4e1165fb68d03b10ed92 Author: Edward Hervey <bi...@bi...> Date: Fri Mar 6 17:37:51 2009 +0100 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. --- ext/ffmpeg/gstffmpegdec.c | 8 ++++++-- 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); |