summaryrefslogtreecommitdiffstats
path: root/gst
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2008-08-05 09:05:35 +0000
committerWim Taymans <wim.taymans@gmail.com>2008-08-05 09:05:35 +0000
commite0f52ef74db25bf2f7593ff5c34c7d85fe05a39e (patch)
tree02ce0c6b9ed2c091629131a591facbb819e928f8 /gst
parent68cd145e3ea621ae95b2585f3afc623ac0cf7a20 (diff)
downloadgst-plugins-bad-e0f52ef74db25bf2f7593ff5c34c7d85fe05a39e.tar.gz
gst-plugins-bad-e0f52ef74db25bf2f7593ff5c34c7d85fe05a39e.tar.bz2
gst-plugins-bad-e0f52ef74db25bf2f7593ff5c34c7d85fe05a39e.zip
gst/selector/gstinputselector.c: Move the select-all logic into the activation of the currently selected pad. We want...
Original commit message from CVS: * gst/selector/gstinputselector.c: (gst_selector_pad_bufferalloc), (gst_selector_pad_chain), (gst_input_selector_getcaps), (gst_input_selector_activate_sinkpad): Move the select-all logic into the activation of the currently selected pad. We want to remember the last pad with activity in select-all mode. Fix the getcaps function, we can produce the union of the upstream caps in select-all mode, not the intersection like proxy_getcaps() does.
Diffstat (limited to 'gst')
-rw-r--r--gst/selector/gstinputselector.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/gst/selector/gstinputselector.c b/gst/selector/gstinputselector.c
index f0a8ba13..4393ebfe 100644
--- a/gst/selector/gstinputselector.c
+++ b/gst/selector/gstinputselector.c
@@ -464,7 +464,7 @@ gst_selector_pad_bufferalloc (GstPad * pad, guint64 offset,
GST_INPUT_SELECTOR_LOCK (sel);
active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad);
- if (pad != active_sinkpad && !sel->select_all)
+ if (pad != active_sinkpad)
goto not_active;
GST_INPUT_SELECTOR_UNLOCK (sel);
@@ -550,7 +550,7 @@ gst_selector_pad_chain (GstPad * pad, GstBuffer * buf)
}
/* Ignore buffers from pads except the selected one */
- if (pad != active_sinkpad && !sel->select_all)
+ if (pad != active_sinkpad)
goto ignore;
if (G_UNLIKELY (sel->pending_close)) {
@@ -1016,16 +1016,20 @@ gst_input_selector_getcaps (GstPad * pad)
GstCaps *caps;
parent = gst_object_get_parent (GST_OBJECT (pad));
- if (GST_INPUT_SELECTOR (parent)->select_all) {
- caps = gst_pad_proxy_getcaps (pad);
- goto done;
- }
otherpad = gst_input_selector_get_linked_pad (pad, FALSE);
+
if (!otherpad) {
- GST_DEBUG_OBJECT (parent,
- "Pad %s:%s not linked, returning ANY", GST_DEBUG_PAD_NAME (pad));
- caps = gst_caps_new_any ();
+ if (GST_INPUT_SELECTOR (parent)->select_all) {
+ GST_DEBUG_OBJECT (parent,
+ "Pad %s:%s not linked, returning merge of caps",
+ GST_DEBUG_PAD_NAME (pad));
+ caps = gst_pad_proxy_getcaps (pad);
+ } else {
+ GST_DEBUG_OBJECT (parent,
+ "Pad %s:%s not linked, returning ANY", GST_DEBUG_PAD_NAME (pad));
+ caps = gst_caps_new_any ();
+ }
} else {
GST_DEBUG_OBJECT (parent,
"Pad %s:%s is linked (to %s:%s), returning peer caps",
@@ -1037,7 +1041,6 @@ gst_input_selector_getcaps (GstPad * pad)
gst_object_unref (otherpad);
}
-done:
gst_object_unref (parent);
return caps;
}
@@ -1069,8 +1072,9 @@ gst_input_selector_activate_sinkpad (GstInputSelector * sel, GstPad * pad)
selpad->active = TRUE;
active_sinkpad = sel->active_sinkpad;
- if (active_sinkpad == NULL) {
- /* first pad we get activity on becomes the activated pad by default */
+ if (active_sinkpad == NULL || sel->select_all) {
+ /* first pad we get activity on becomes the activated pad by default, if we
+ * select all, we also remember the last used pad. */
active_sinkpad = sel->active_sinkpad = gst_object_ref (pad);
GST_DEBUG_OBJECT (sel, "Activating pad %s:%s", GST_DEBUG_PAD_NAME (pad));
}