From 62b66c1316c45700037e6193425212b124287f11 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 12 Jun 2012 09:10:54 +0200 Subject: [PATCH] faad: don't access buffer after _finish_frame Unmap the buffer before calling _finish_frame because we are not allowed to access it after. --- ext/faad/gstfaad.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/ext/faad/gstfaad.c b/ext/faad/gstfaad.c index c6f1e42e8e..736bb87236 100644 --- a/ext/faad/gstfaad.c +++ b/ext/faad/gstfaad.c @@ -732,7 +732,7 @@ init: info.error = 0; do { - GstMapInfo map; + GstMapInfo omap; if (!faad->packetised) { /* faad only really parses ADTS header at Init time, not when decoding, @@ -775,11 +775,11 @@ init: /* FIXME, add bufferpool and allocator support to the base class */ outbuf = gst_buffer_new_allocate (NULL, info.samples * faad->bps, NULL); - gst_buffer_map (outbuf, &map, GST_MAP_READWRITE); + gst_buffer_map (outbuf, &omap, GST_MAP_READWRITE); if (faad->need_reorder) { gint16 *dest, *src, i, j; - dest = (gint16 *) map.data; + dest = (gint16 *) omap.data; src = (gint16 *) out; for (i = 0; i < samples; i++) { @@ -789,16 +789,19 @@ init: dest += channels; } } else { - memcpy (map.data, out, map.size); + memcpy (omap.data, out, omap.size); } - gst_buffer_unmap (outbuf, &map); + gst_buffer_unmap (outbuf, &omap); + gst_buffer_unmap (buffer, &map); + buffer = NULL; ret = gst_audio_decoder_finish_frame (dec, outbuf, 1); } } while (FALSE); out: - gst_buffer_unmap (buffer, &map); + if (buffer) + gst_buffer_unmap (buffer, &map); return ret;