[gst-cvs] gst-ffmpeg: ffmpegdec: Make sure we provide 16 byte aligned data to ffmpeg. Fixes #572863

Edward Hervey bilboed at kemper.freedesktop.org
Fri Mar 6 08:40:14 PST 2009


Module: gst-ffmpeg
Branch: master
Commit: 98167578c45b91b5b73f4e1165fb68d03b10ed92
URL:    http://cgit.freedesktop.org/gstreamer/gst-ffmpeg/commit/?id=98167578c45b91b5b73f4e1165fb68d03b10ed92

Author: Edward Hervey <bilboed at bilboed.com>
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);





More information about the Gstreamer-commits mailing list