diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2008-08-05 09:05:35 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2008-08-05 09:05:35 +0000 |
commit | e0f52ef74db25bf2f7593ff5c34c7d85fe05a39e (patch) | |
tree | 02ce0c6b9ed2c091629131a591facbb819e928f8 /gst | |
parent | 68cd145e3ea621ae95b2585f3afc623ac0cf7a20 (diff) | |
download | gst-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.c | 28 |
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)); } |