diff options
author | Edward Hervey <bilboed@bilboed.com> | 2009-03-06 17:37:51 +0100 |
---|---|---|
committer | Edward Hervey <bilboed@bilboed.com> | 2009-03-06 17:37:51 +0100 |
commit | 98167578c45b91b5b73f4e1165fb68d03b10ed92 (patch) | |
tree | 6aae6f200f44c5a38f433cec4d65d3fc419c2948 /ext | |
parent | df6fb6867ed19bfc5f735518452153d5e81efc04 (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.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); |