summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2015-02-19 01:16:52 +0200
committerSebastian Dröge <sebastian@centricular.com>2015-02-19 01:16:52 +0200
commit66e8d3b9a042a3aeef8edd98d28f5ca0c73cba36 (patch)
tree6738334eb2103c5eb6e0d3d02bf0521ee83d612d
parent6f9adbe273e9d8a92be952d64e6d5a33eba0b7f5 (diff)
inputselector: Use a separate query for upstream pads and let it fail if one upstream query fails
-rw-r--r--plugins/elements/gstinputselector.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/plugins/elements/gstinputselector.c b/plugins/elements/gstinputselector.c
index e79d5010d..05ca6062b 100644
--- a/plugins/elements/gstinputselector.c
+++ b/plugins/elements/gstinputselector.c
@@ -1587,6 +1587,7 @@ gst_input_selector_query (GstPad * pad, GstObject * parent, GstQuery * query)
resmin = 0;
resmax = -1;
reslive = FALSE;
+ res = TRUE;
/* perform the query on all sinkpads and combine the results. We take the
* max of min and the min of max for the result latency. */
@@ -1594,15 +1595,15 @@ gst_input_selector_query (GstPad * pad, GstObject * parent, GstQuery * query)
for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk;
walk = g_list_next (walk)) {
GstPad *sinkpad = GST_PAD_CAST (walk->data);
+ GstQuery *peerquery;
- if (gst_pad_peer_query (sinkpad, query)) {
+ peerquery = gst_query_new_latency ();
+
+ if (gst_pad_peer_query (sinkpad, peerquery)) {
GstClockTime min, max;
gboolean live;
- /* one query succeeded, we succeed too */
- res = TRUE;
-
- gst_query_parse_latency (query, &live, &min, &max);
+ gst_query_parse_latency (peerquery, &live, &min, &max);
GST_DEBUG_OBJECT (sinkpad,
"peer latency min %" GST_TIME_FORMAT ", max %" GST_TIME_FORMAT
@@ -1618,7 +1619,11 @@ gst_input_selector_query (GstPad * pad, GstObject * parent, GstQuery * query)
if (!reslive)
reslive = live;
}
+ } else {
+ GST_LOG_OBJECT (sinkpad, "latency query failed");
+ res = FALSE;
}
+ gst_query_unref (peerquery);
}
GST_INPUT_SELECTOR_UNLOCK (sel);
if (res) {