gboolean
gst_pad_try_set_caps (GstPad *pad, GstCaps *caps)
{
- GstCaps *oldcaps;
GstRealPad *peer, *realpad;
realpad = GST_PAD_REALIZE (pad);
{
GstCaps *intersection;
GstRealPad *realsrc, *realsink;
+ GstCaps *srccaps, *sinkcaps;
g_return_val_if_fail (srcpad != NULL, FALSE);
g_return_val_if_fail (sinkpad != NULL, FALSE);
g_return_val_if_fail (GST_RPAD_PEER (realsrc) != NULL, FALSE);
g_return_val_if_fail (GST_RPAD_PEER (realsink) == realsrc, FALSE);
- /* it doesn't matter which filter we take */
- intersection = GST_RPAD_FILTER (realsrc);
+ /* calculate the new caps here */
+ srccaps = gst_pad_get_caps (GST_PAD (realsrc));
+ GST_INFO (GST_CAT_PADS, "dumping caps of pad %s:%s", GST_DEBUG_PAD_NAME (realsrc));
+ gst_caps_debug (srccaps);
+ sinkcaps = gst_pad_get_caps (GST_PAD (realsink));
+ GST_INFO (GST_CAT_PADS, "dumping caps of pad %s:%s", GST_DEBUG_PAD_NAME (realsink));
+ gst_caps_debug (sinkcaps);
+ intersection = gst_caps_intersect (srccaps, sinkcaps);
/* no negotiation is performed it the pads have filtercaps */
if (intersection) {
{
GstRealPad *peer;
- g_return_if_fail (pad != NULL);
- g_return_if_fail (GST_IS_PAD (pad));
+ g_return_val_if_fail (pad != NULL, FALSE);
+ g_return_val_if_fail (GST_IS_PAD (pad), FALSE);
GST_DEBUG (GST_CAT_PROPERTIES, "set allowed caps of %s:%s\n", GST_DEBUG_PAD_NAME (pad));
peer = GST_RPAD_PEER (pad);
if (peer)
- gst_pad_try_reconnect_filtered (pad, GST_PAD (peer), GST_RPAD_APPFILTER (pad));
+ return gst_pad_try_reconnect_filtered (pad, GST_PAD (peer), GST_RPAD_APPFILTER (pad));
+
+ return TRUE;
}
/**