gst: Update for caps/pad template related API changes

This commit is contained in:
Sebastian Dröge 2011-05-17 12:04:27 +02:00
parent 5f406248eb
commit c7789694fb
2 changed files with 17 additions and 4 deletions

View file

@ -2765,17 +2765,23 @@ setcaps_failed:
static GstFlowReturn static GstFlowReturn
gst_pad_configure_sink (GstPad * pad, GstCaps * caps) gst_pad_configure_sink (GstPad * pad, GstCaps * caps)
{ {
GstCaps *templ;
/* See if pad accepts the caps */ /* See if pad accepts the caps */
if (!gst_caps_can_intersect (caps, gst_pad_get_pad_template_caps (pad))) templ = gst_pad_get_pad_template_caps (pad);
if (!gst_caps_can_intersect (caps, templ))
goto not_accepted; goto not_accepted;
if (!gst_pad_call_setcaps (pad, caps)) if (!gst_pad_call_setcaps (pad, caps))
goto not_accepted; goto not_accepted;
gst_caps_unref (templ);
return GST_FLOW_OK; return GST_FLOW_OK;
not_accepted: not_accepted:
{ {
gst_caps_unref (templ);
GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad, GST_CAT_DEBUG_OBJECT (GST_CAT_CAPS, pad,
"caps %" GST_PTR_FORMAT " not accepted", caps); "caps %" GST_PTR_FORMAT " not accepted", caps);
return GST_FLOW_NOT_NEGOTIATED; return GST_FLOW_NOT_NEGOTIATED;

View file

@ -1199,9 +1199,9 @@ gst_element_get_compatible_pad (GstElement * element, GstPad * pad,
/* requesting is a little crazy, we need a template. Let's create one */ /* requesting is a little crazy, we need a template. Let's create one */
/* FIXME: why not gst_pad_get_pad_template (pad); */ /* FIXME: why not gst_pad_get_pad_template (pad); */
templcaps = gst_pad_get_caps (pad, NULL); templcaps = gst_pad_get_caps (pad, NULL);
templ = gst_pad_template_new ((gchar *) GST_PAD_NAME (pad), templ = gst_pad_template_new ((gchar *) GST_PAD_NAME (pad),
GST_PAD_DIRECTION (pad), GST_PAD_ALWAYS, templcaps); GST_PAD_DIRECTION (pad), GST_PAD_ALWAYS, templcaps);
gst_caps_unref (templcaps);
foundpad = gst_element_request_compatible_pad (element, templ); foundpad = gst_element_request_compatible_pad (element, templ);
gst_object_unref (templ); gst_object_unref (templ);
@ -1844,8 +1844,11 @@ gst_element_link_pads_full (GstElement * src, const gchar * srcpadname,
desttempl = (GstPadTemplate *) l->data; desttempl = (GstPadTemplate *) l->data;
if (desttempl->presence == GST_PAD_REQUEST && if (desttempl->presence == GST_PAD_REQUEST &&
desttempl->direction != srctempl->direction) { desttempl->direction != srctempl->direction) {
if (gst_caps_is_always_compatible (gst_pad_template_get_caps GstCaps *srccaps, *destcaps;
(srctempl), gst_pad_template_get_caps (desttempl))) {
srccaps = gst_pad_template_get_caps (srctempl);
destcaps = gst_pad_template_get_caps (desttempl);
if (gst_caps_is_always_compatible (srccaps, destcaps)) {
srcpad = srcpad =
gst_element_request_pad (src, srctempl, gst_element_request_pad (src, srctempl,
srctempl->name_template, NULL); srctempl->name_template, NULL);
@ -1859,6 +1862,8 @@ gst_element_link_pads_full (GstElement * src, const gchar * srcpadname,
GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (destpad)); GST_DEBUG_PAD_NAME (srcpad), GST_DEBUG_PAD_NAME (destpad));
gst_object_unref (srcpad); gst_object_unref (srcpad);
gst_object_unref (destpad); gst_object_unref (destpad);
gst_caps_unref (srccaps);
gst_caps_unref (destcaps);
return TRUE; return TRUE;
} }
/* it failed, so we release the request pads */ /* it failed, so we release the request pads */
@ -1867,6 +1872,8 @@ gst_element_link_pads_full (GstElement * src, const gchar * srcpadname,
if (destpad) if (destpad)
gst_element_release_request_pad (dest, destpad); gst_element_release_request_pad (dest, destpad);
} }
gst_caps_unref (srccaps);
gst_caps_unref (destcaps);
} }
} }
} }