mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-31 11:32:38 +00:00
oggdemux: check for full eos after a pad goes eos in push mode
After a pad is on EOS, verify if all pads are EOS and return upstream, avoiding keeping the buffer flow without having more data to push
This commit is contained in:
parent
7ecd5b1108
commit
1618084bc8
1 changed files with 10 additions and 3 deletions
|
@ -146,6 +146,7 @@ static GstOggPad *gst_ogg_chain_get_stream (GstOggChain * chain,
|
|||
static GstFlowReturn gst_ogg_demux_combine_flows (GstOggDemux * ogg,
|
||||
GstOggPad * pad, GstFlowReturn ret);
|
||||
static void gst_ogg_demux_sync_streams (GstOggDemux * ogg);
|
||||
static gboolean gst_ogg_demux_check_eos (GstOggDemux * ogg);
|
||||
|
||||
static GstCaps *gst_ogg_demux_set_header_on_caps (GstOggDemux * ogg,
|
||||
GstCaps * caps, GList * headers);
|
||||
|
@ -733,11 +734,17 @@ gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet,
|
|||
GST_TIME_ARGS (current_time));
|
||||
|
||||
/* check stream eos */
|
||||
if ((ogg->segment.rate > 0.0 && ogg->segment.stop != GST_CLOCK_TIME_NONE &&
|
||||
current_time >= ogg->segment.stop) ||
|
||||
(ogg->segment.rate < 0.0 && current_time <= ogg->segment.start)) {
|
||||
if (!delta_unit &&
|
||||
((ogg->segment.rate > 0.0 &&
|
||||
ogg->segment.stop != GST_CLOCK_TIME_NONE &&
|
||||
current_time >= ogg->segment.stop) ||
|
||||
(ogg->segment.rate < 0.0 && current_time <= ogg->segment.start))) {
|
||||
GST_DEBUG_OBJECT (ogg, "marking pad %p EOS", pad);
|
||||
pad->is_eos = TRUE;
|
||||
|
||||
if (cret == GST_FLOW_OK && gst_ogg_demux_check_eos (ogg)) {
|
||||
cret = GST_FLOW_EOS;
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
|
|
Loading…
Reference in a new issue