mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-03 13:02:29 +00:00
dashdemux: Do not advace subfragment after pending SIDX seek done
If a MPD is On-Demand profile and no index described, demux will terminate download loop after parsing inband SIDX with flow return custom-success. At this moment, SIDX index is excat target position, but finish_fragment() might cause re-advancing subfragment depending on MPD structure. https://bugzilla.gnome.org/show_bug.cgi?id=776200
This commit is contained in:
parent
b65e6db8d4
commit
42a38b6498
1 changed files with 7 additions and 2 deletions
|
@ -1996,7 +1996,10 @@ gst_dash_demux_stream_fragment_finished (GstAdaptiveDemux * demux,
|
|||
&& gst_mpd_client_has_isoff_ondemand_profile (dashdemux->client)
|
||||
&& dashstream->sidx_parser.status == GST_ISOFF_SIDX_PARSER_FINISHED) {
|
||||
/* fragment is advanced on data_received when byte limits are reached */
|
||||
if (gst_dash_demux_stream_has_next_subfragment (stream)) {
|
||||
if (dashstream->pending_seek_ts != GST_CLOCK_TIME_NONE) {
|
||||
if (SIDX (dashstream)->entry_index < SIDX (dashstream)->entries_count)
|
||||
return GST_FLOW_OK;
|
||||
} else if (gst_dash_demux_stream_has_next_subfragment (stream)) {
|
||||
return GST_FLOW_OK;
|
||||
}
|
||||
}
|
||||
|
@ -2530,7 +2533,6 @@ gst_dash_demux_handle_isobmff_buffer (GstAdaptiveDemux * demux,
|
|||
gst_mpd_client_has_isoff_ondemand_profile (dashdemux->client)) {
|
||||
GST_DEBUG_OBJECT (stream->pad,
|
||||
"Found sidx box, return custom-success to do seeking now");
|
||||
dash_stream->pending_seek_ts = GST_CLOCK_TIME_NONE;
|
||||
|
||||
/* Clear isobmff parser */
|
||||
gst_adapter_clear (dash_stream->isobmff_adapter);
|
||||
|
@ -2731,6 +2733,9 @@ gst_dash_demux_data_received (GstAdaptiveDemux * demux,
|
|||
} else if (dash_stream->sidx_parser.status == GST_ISOFF_SIDX_PARSER_FINISHED) {
|
||||
gsize available;
|
||||
|
||||
if (G_UNLIKELY (dash_stream->pending_seek_ts != GST_CLOCK_TIME_NONE))
|
||||
dash_stream->pending_seek_ts = GST_CLOCK_TIME_NONE;
|
||||
|
||||
while (ret == GST_FLOW_OK
|
||||
&& ((available =
|
||||
gst_adapter_available (dash_stream->sidx_adapter)) > 0)) {
|
||||
|
|
Loading…
Reference in a new issue