From 7460321a600438966d7152ab2b4318be48eadce0 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Mon, 17 May 2010 15:06:37 +0200 Subject: [PATCH] gstpad: Return pad template in get_caps if pad is not negotiable https://bugzilla.gnome.org/show_bug.cgi?id=618644 --- gst/gstpad.c | 8 ++++++++ tests/check/gst/gstghostpad.c | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/gst/gstpad.c b/gst/gstpad.c index 5cd434fd29..e376857321 100644 --- a/gst/gstpad.c +++ b/gst/gstpad.c @@ -2181,6 +2181,14 @@ gst_pad_get_caps_unlocked (GstPad * pad) GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad, "get pad caps"); + /* If the parent element is in GST_STATE_NULL, return the template caps */ + if (G_UNLIKELY (!GST_PAD_IS_NEGOTIABLE (pad) && GST_PAD_PAD_TEMPLATE (pad))) { + GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad, + "parent element is in GST_STATE_NULL, using pad templates"); + result = gst_caps_ref (GST_PAD_TEMPLATE_CAPS (GST_PAD_PAD_TEMPLATE (pad))); + goto done; + } + if (GST_PAD_GETCAPSFUNC (pad)) { GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad, "dispatching to pad getcaps function"); diff --git a/tests/check/gst/gstghostpad.c b/tests/check/gst/gstghostpad.c index b78538aaa4..a75255088b 100644 --- a/tests/check/gst/gstghostpad.c +++ b/tests/check/gst/gstghostpad.c @@ -591,6 +591,9 @@ GST_START_TEST (test_ghost_pads_new_from_template) /* check template is properly set */ fail_unless (GST_PAD_PAD_TEMPLATE (ghostpad) == ghosttempl); + /* Set pad negotiable so the getcaps call goes through */ + gst_pad_set_negotiable (ghostpad, TRUE); + /* check ghostpad caps are from the sinkpad */ newcaps = gst_pad_get_caps (ghostpad); fail_unless (newcaps != NULL); @@ -645,6 +648,9 @@ GST_START_TEST (test_ghost_pads_new_no_target_from_template) fail_unless (gst_ghost_pad_set_target ((GstGhostPad *) ghostpad, sinkpad)); + /* set pad negotiable so the getcaps call goes through */ + gst_pad_set_negotiable (ghostpad, TRUE); + /* check ghostpad caps are now from the target pad */ newcaps = gst_pad_get_caps (ghostpad); fail_unless (newcaps != NULL);