From 998c8ce246d10c27ec487e466684e9b477079343 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Wed, 21 Dec 2016 23:24:48 +0900 Subject: [PATCH] dashdemux: Drain remaining buffer in adapter Previous patch allows sidx box parsing from incoming buffers. Since the incoming buffer boundary might be over sidx box, there can be remaining buffer in isobmff parser adapter. https://bugzilla.gnome.org/show_bug.cgi?id=776352 --- ext/dash/gstdashdemux.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/ext/dash/gstdashdemux.c b/ext/dash/gstdashdemux.c index c8eb66cedc..5dddc20741 100644 --- a/ext/dash/gstdashdemux.c +++ b/ext/dash/gstdashdemux.c @@ -2534,6 +2534,20 @@ gst_dash_demux_handle_isobmff_buffer (GstAdaptiveDemux * demux, GST_BUFFER_OFFSET (buffer) = dash_stream->isobmff_parser.current_offset; dash_stream->isobmff_parser.current_offset += gst_buffer_get_size (buffer); GST_BUFFER_OFFSET_END (buffer) = dash_stream->isobmff_parser.current_offset; + } else if (gst_adapter_available (dash_stream->isobmff_adapter) > 0) { + guint64 offset; + + /* Drain adapter */ + gst_adapter_push (dash_stream->isobmff_adapter, buffer); + + buffer = + gst_adapter_take_buffer (dash_stream->isobmff_adapter, + gst_adapter_available (dash_stream->isobmff_adapter)); + + /* Set buffer offset based on the last parser's offset */ + offset = dash_stream->isobmff_parser.current_offset; + GST_BUFFER_OFFSET (buffer) = offset; + GST_BUFFER_OFFSET_END (buffer) = offset + gst_buffer_get_size (buffer); } return gst_adaptive_demux_stream_push_buffer (stream, buffer);