diff options
author | Seungha Yang <sh.yang@lge.com> | 2016-12-21 23:24:48 +0900 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2016-12-22 14:12:58 +0200 |
commit | 998c8ce246d10c27ec487e466684e9b477079343 (patch) | |
tree | 3d1b56e14caa9ee13c7eccc3571f2d33bab42657 | |
parent | 243829098cd44affc2b28736c43f11fd84181c6f (diff) | |
download | gstreamer-plugins-bad-998c8ce246d10c27ec487e466684e9b477079343.tar.gz |
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
-rw-r--r-- | ext/dash/gstdashdemux.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/ext/dash/gstdashdemux.c b/ext/dash/gstdashdemux.c index c8eb66ced..5dddc2074 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); |