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");
/* 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);
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);