summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeungha Yang <sh.yang@lge.com>2016-12-21 23:24:48 +0900
committerSebastian Dröge <sebastian@centricular.com>2016-12-22 14:12:58 +0200
commit998c8ce246d10c27ec487e466684e9b477079343 (patch)
tree3d1b56e14caa9ee13c7eccc3571f2d33bab42657
parent243829098cd44affc2b28736c43f11fd84181c6f (diff)
downloadgstreamer-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.c14
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);