From da3c0316278933dde369cf2e9f15d8e3a61a32ea Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Mon, 26 May 2014 13:04:10 -0300 Subject: [PATCH] avidemux: use GstFlowCombiner Removes flow return combination code to use the newly added GstFlowCombiner --- gst/avi/gstavidemux.c | 31 ++++--------------------------- gst/avi/gstavidemux.h | 3 +++ 2 files changed, 7 insertions(+), 27 deletions(-) diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c index 22d3dbb..39d1400 100644 --- a/gst/avi/gstavidemux.c +++ b/gst/avi/gstavidemux.c @@ -196,6 +196,7 @@ gst_avi_demux_init (GstAviDemux * avi) gst_element_add_pad (GST_ELEMENT_CAST (avi), avi->sinkpad); avi->adapter = gst_adapter_new (); + avi->flowcombiner = gst_flow_combiner_new (); gst_avi_demux_reset (avi); @@ -232,6 +233,7 @@ gst_avi_demux_reset_stream (GstAviDemux * avi, GstAviStream * stream) if (stream->exposed) { gst_pad_set_active (stream->pad, FALSE); gst_element_remove_pad (GST_ELEMENT_CAST (avi), stream->pad); + gst_flow_combiner_remove_pad (avi->flowcombiner, stream->pad); } else gst_object_unref (stream->pad); } @@ -1886,6 +1888,7 @@ gst_avi_demux_expose_streams (GstAviDemux * avi, gboolean force) if (force || stream->idx_n != 0) { GST_LOG_OBJECT (avi, "Adding pad %s", GST_PAD_NAME (stream->pad)); gst_element_add_pad ((GstElement *) avi, stream->pad); + gst_flow_combiner_add_pad (avi->flowcombiner, stream->pad); #if 0 if (avi->element_index) @@ -5003,35 +5006,9 @@ static GstFlowReturn gst_avi_demux_combine_flows (GstAviDemux * avi, GstAviStream * stream, GstFlowReturn ret) { - guint i; - gboolean unexpected = FALSE, not_linked = TRUE; - /* store the value */ stream->last_flow = ret; - - /* any other error that is not-linked or eos can be returned right away */ - if (G_LIKELY (ret != GST_FLOW_EOS && ret != GST_FLOW_NOT_LINKED)) - goto done; - - /* only return NOT_LINKED if all other pads returned NOT_LINKED */ - for (i = 0; i < avi->num_streams; i++) { - GstAviStream *ostream = &avi->stream[i]; - - ret = ostream->last_flow; - /* no unexpected or unlinked, return */ - if (G_LIKELY (ret != GST_FLOW_EOS && ret != GST_FLOW_NOT_LINKED)) - goto done; - - /* we check to see if we have at least 1 unexpected or all unlinked */ - unexpected |= (ret == GST_FLOW_EOS); - not_linked &= (ret == GST_FLOW_NOT_LINKED); - } - /* when we get here, we all have unlinked or unexpected */ - if (not_linked) - ret = GST_FLOW_NOT_LINKED; - else if (unexpected) - ret = GST_FLOW_EOS; -done: + ret = gst_flow_combiner_update_flow (avi->flowcombiner, ret); GST_LOG_OBJECT (avi, "combined %s to return %s", gst_flow_get_name (stream->last_flow), gst_flow_get_name (ret)); return ret; diff --git a/gst/avi/gstavidemux.h b/gst/avi/gstavidemux.h index 0e8786f..9e24430 100644 --- a/gst/avi/gstavidemux.h +++ b/gst/avi/gstavidemux.h @@ -27,6 +27,7 @@ #include "gst/riff/riff-ids.h" #include "gst/riff/riff-read.h" #include +#include G_BEGIN_DECLS @@ -165,6 +166,8 @@ typedef struct _GstAviDemux { guint main_stream; /* used for seeking */ + GstFlowCombiner *flowcombiner; + gboolean have_group_id; guint group_id; -- 2.7.4