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