visual: Update for negotiation related API changes

This commit is contained in:
Sebastian Dröge 2011-05-16 12:18:03 +02:00
parent 0415b90e99
commit 4027a4c34f

View file

@ -141,7 +141,7 @@ static gboolean gst_visual_src_query (GstPad * pad, GstQuery ** query);
static gboolean gst_visual_sink_setcaps (GstPad * pad, GstCaps * caps); static gboolean gst_visual_sink_setcaps (GstPad * pad, GstCaps * caps);
static gboolean gst_visual_src_setcaps (GstPad * pad, GstCaps * caps); static gboolean gst_visual_src_setcaps (GstPad * pad, GstCaps * caps);
static GstCaps *gst_visual_getcaps (GstPad * pad); static GstCaps *gst_visual_getcaps (GstPad * pad, GstCaps * filter);
static void libvisual_log_handler (const char *message, const char *funcname, static void libvisual_log_handler (const char *message, const char *funcname,
void *priv); void *priv);
@ -272,7 +272,7 @@ gst_visual_reset (GstVisual * visual)
} }
static GstCaps * static GstCaps *
gst_visual_getcaps (GstPad * pad) gst_visual_getcaps (GstPad * pad, GstCaps * filter)
{ {
GstCaps *ret; GstCaps *ret;
GstVisual *visual = GST_VISUAL (gst_pad_get_parent (pad)); GstVisual *visual = GST_VISUAL (gst_pad_get_parent (pad));
@ -312,6 +312,15 @@ gst_visual_getcaps (GstPad * pad)
beach: beach:
if (filter) {
GstCaps *intersection;
intersection =
gst_caps_intersect_full (filter, ret, GST_CAPS_INTERSECT_FIRST);
gst_caps_unref (ret);
ret = intersection;
}
GST_DEBUG_OBJECT (visual, "returning caps %" GST_PTR_FORMAT, ret); GST_DEBUG_OBJECT (visual, "returning caps %" GST_PTR_FORMAT, ret);
gst_object_unref (visual); gst_object_unref (visual);
return ret; return ret;
@ -397,18 +406,18 @@ gst_vis_src_negotiate (GstVisual * visual)
GstBufferPool *pool = NULL; GstBufferPool *pool = NULL;
guint size, min, max, prefix, alignment; guint size, min, max, prefix, alignment;
caps = gst_pad_get_caps (visual->srcpad); caps = gst_pad_get_caps (visual->srcpad, NULL);
/* see what the peer can do */ /* see what the peer can do */
othercaps = gst_pad_peer_get_caps (visual->srcpad); othercaps = gst_pad_peer_get_caps (visual->srcpad, caps);
if (othercaps) { if (othercaps) {
target = gst_caps_intersect (othercaps, caps); target = othercaps;
gst_caps_unref (othercaps);
gst_caps_unref (caps); gst_caps_unref (caps);
if (gst_caps_is_empty (target)) if (gst_caps_is_empty (target))
goto no_format; goto no_format;
target = gst_caps_make_writable (target);
gst_caps_truncate (target); gst_caps_truncate (target);
} else { } else {
/* need a copy, we'll be modifying it when fixating */ /* need a copy, we'll be modifying it when fixating */