tcpclientsrc: Update for negotation related API changes
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 16 May 2011 09:37:39 +0000 (11:37 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 16 May 2011 13:35:41 +0000 (15:35 +0200)
gst/tcp/gsttcpclientsrc.c

index 3429b9a79f42d25c53a746ac2df353619ae7de97..acd54cdc21659069c0b2398cb3084d26ab96e237 100644 (file)
@@ -71,7 +71,8 @@ G_DEFINE_TYPE (GstTCPClientSrc, gst_tcp_client_src, GST_TYPE_PUSH_SRC);
 
 static void gst_tcp_client_src_finalize (GObject * gobject);
 
-static GstCaps *gst_tcp_client_src_getcaps (GstBaseSrc * psrc);
+static GstCaps *gst_tcp_client_src_getcaps (GstBaseSrc * psrc,
+    GstCaps * filter);
 
 static GstFlowReturn gst_tcp_client_src_create (GstPushSrc * psrc,
     GstBuffer ** outbuf);
@@ -153,7 +154,7 @@ gst_tcp_client_src_finalize (GObject * gobject)
 }
 
 static GstCaps *
-gst_tcp_client_src_getcaps (GstBaseSrc * bsrc)
+gst_tcp_client_src_getcaps (GstBaseSrc * bsrc, GstCaps * filter)
 {
   GstTCPClientSrc *src;
   GstCaps *caps = NULL;
@@ -161,11 +162,15 @@ gst_tcp_client_src_getcaps (GstBaseSrc * bsrc)
   src = GST_TCP_CLIENT_SRC (bsrc);
 
   if (!GST_OBJECT_FLAG_IS_SET (src, GST_TCP_CLIENT_SRC_OPEN))
-    caps = gst_caps_new_any ();
+    caps = (filter ? gst_caps_ref (filter) : gst_caps_new_any ());
+  else if (src->caps && filter)
+    caps =
+        gst_caps_intersect_full (filter, src->caps, GST_CAPS_INTERSECT_FIRST);
   else if (src->caps)
     caps = gst_caps_copy (src->caps);
   else
-    caps = gst_caps_new_any ();
+    caps = (filter ? gst_caps_ref (filter) : gst_caps_new_any ());
+
   GST_DEBUG_OBJECT (src, "returning caps %" GST_PTR_FORMAT, caps);
   g_assert (GST_IS_CAPS (caps));
   return caps;