diff libpurple/mediamanager.c @ 31365:55e30c0eca22

Public API allowing plugins (including prpls) to get/set video capabilities where desired/appropriate. Fixes #13095. committer: John Bailey <rekkanoryo@rekkanoryo.org>
author jakub.adam@ktknet.cz
date Sat, 08 Jan 2011 03:21:44 +0000
parents 0485aed45f5b
children 17a4b32f4d46
line wrap: on
line diff
--- a/libpurple/mediamanager.c	Sat Jan 08 03:10:40 2011 +0000
+++ b/libpurple/mediamanager.c	Sat Jan 08 03:21:44 2011 +0000
@@ -420,7 +420,30 @@
 
 #ifdef USE_GSTREAMER
 
-static GstCaps *
+void
+purple_media_manager_set_video_caps(PurpleMediaManager *manager, GstCaps *caps)
+{
+#ifdef USE_VV
+	if (manager->priv->video_caps)
+		gst_caps_unref(manager->priv->video_caps);
+
+	manager->priv->video_caps = caps;
+
+	if (manager->priv->pipeline && manager->priv->video_src) {
+		gchar *id = purple_media_element_info_get_id(manager->priv->video_src);
+		GstElement *src = gst_bin_get_by_name(GST_BIN(manager->priv->pipeline), id);
+
+		if (src) {
+			GstElement *capsfilter = gst_bin_get_by_name(GST_BIN(src), "prpl_video_caps");
+			g_object_set(G_OBJECT(capsfilter), "caps", caps, NULL);
+		}
+
+		g_free(id);
+	}
+#endif
+}
+
+GstCaps *
 purple_media_manager_get_video_caps(PurpleMediaManager *manager)
 {
 #ifdef USE_VV