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: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2247>
This commit is contained in:
Nicolas Dufresne 2021-05-14 14:04:00 -04:00
parent 761206291b
commit 35775f1aec

View file

@ -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;
}