From 35775f1aec4a5c61f275c1d6a7059f932a404d9e Mon Sep 17 00:00:00 2001 From: Nicolas Dufresne Date: Fri, 14 May 2021 14:04:00 -0400 Subject: [PATCH] codecalphademux: Remove eos flow return workaround It turns out that downstream returning OK after EOS is a bug in multiqueue. As we moved to queue, we no longer have this issue. Let's keep the code clean and just assuming that downstream will keep returning EOS and allow convergence of flow. Part-of: --- gst/codecalpha/gstcodecalphademux.c | 34 +++++------------------------ 1 file changed, 6 insertions(+), 28 deletions(-) diff --git a/gst/codecalpha/gstcodecalphademux.c b/gst/codecalpha/gstcodecalphademux.c index 80f668453a..8a79bfbb0b 100644 --- a/gst/codecalpha/gstcodecalphademux.c +++ b/gst/codecalpha/gstcodecalphademux.c @@ -101,47 +101,25 @@ gst_codec_alpha_demux_chain (GstPad * pad, GstObject * object, GstBuffer *alpha_buffer = NULL; GstClockTime pts = GST_BUFFER_PTS (buffer); GstClockTime duration = GST_BUFFER_DURATION (buffer); - GstFlowReturn ret; - gboolean src_pad_eos, alpha_pad_eos; + GstFlowReturn ret = GST_FLOW_EOS; if (alpha_meta) alpha_buffer = gst_buffer_ref (alpha_meta->buffer); - /* To satisfy the alphacombine requirement, we need to push in pair here, so we - * can't just stop pushing at EOS. For this reason, remember if pad had a - * flow return of EOS and set it back if needed. */ - src_pad_eos = (GST_PAD_LAST_FLOW_RETURN (self->src_pad) == GST_FLOW_EOS); - alpha_pad_eos = (GST_PAD_LAST_FLOW_RETURN (self->alpha_pad) == GST_FLOW_EOS); - - if (src_pad_eos && alpha_pad_eos) { - gst_buffer_unref (alpha_buffer); - gst_buffer_unref (buffer); - return GST_FLOW_EOS; - } - ret = gst_pad_push (self->src_pad, buffer); + ret = gst_flow_combiner_update_flow (self->flow_combiner, ret); /* we lost ownership here */ buffer = NULL; alpha_meta = NULL; - if (ret == GST_FLOW_OK && src_pad_eos) - gst_flow_combiner_update_pad_flow (self->flow_combiner, self->src_pad, - GST_FLOW_EOS); - else - gst_flow_combiner_update_flow (self->flow_combiner, ret); - - if (alpha_buffer) + if (alpha_buffer) { ret = gst_pad_push (self->alpha_pad, alpha_buffer); - else + } else { ret = gst_pad_push_event (self->alpha_pad, gst_event_new_gap (pts, duration)); - - if (ret == GST_FLOW_OK && alpha_pad_eos) - ret = gst_flow_combiner_update_pad_flow (self->flow_combiner, - self->alpha_pad, GST_FLOW_EOS); - else - ret = gst_flow_combiner_update_flow (self->flow_combiner, ret); + } + ret = gst_flow_combiner_update_flow (self->flow_combiner, ret); return ret; }