From f1726c7088c9022ac0eda6f5f25a248528969239 Mon Sep 17 00:00:00 2001 From: Vinod Kesti Date: Tue, 15 Nov 2016 16:52:39 +0530 Subject: [PATCH] aacparse: assertion while converting ADTS stream to RAW aacparse resizes input buffer while converting ADTS stream to RAW, During buffer resize buffer write permission is not checked. This throws gst_buffer_is_writable assertion and leads to AV sync issue some times. It is corrected by making buffer writeable using gst_buffer_make_writable https://bugzilla.gnome.org/show_bug.cgi?id=774129 --- gst/audioparsers/gstaacparse.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/gst/audioparsers/gstaacparse.c b/gst/audioparsers/gstaacparse.c index 34ba80a..d9dc424 100644 --- a/gst/audioparsers/gstaacparse.c +++ b/gst/audioparsers/gstaacparse.c @@ -1452,11 +1452,13 @@ gst_aac_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame) && aacparse->output_header_type == DSPAAC_HEADER_NONE) { guint header_size; GstMapInfo map; - gst_buffer_map (frame->buffer, &map, GST_MAP_READ); + frame->out_buffer = gst_buffer_make_writable (frame->buffer); + frame->buffer = NULL; + gst_buffer_map (frame->out_buffer, &map, GST_MAP_READ); header_size = (map.data[1] & 1) ? 7 : 9; /* optional CRC */ - gst_buffer_unmap (frame->buffer, &map); - gst_buffer_resize (frame->buffer, header_size, - gst_buffer_get_size (frame->buffer) - header_size); + gst_buffer_unmap (frame->out_buffer, &map); + gst_buffer_resize (frame->out_buffer, header_size, + gst_buffer_get_size (frame->out_buffer) - header_size); } return GST_FLOW_OK; -- 2.7.4