Mercurial > pidgin
changeset 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 | ea2a155b4439 |
children | d169a587901f |
files | libpurple/media-gst.h libpurple/mediamanager.c |
diffstat | 2 files changed, 49 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/media-gst.h Sat Jan 08 03:10:40 2011 +0000 +++ b/libpurple/media-gst.h Sat Jan 08 03:21:44 2011 +0000 @@ -159,6 +159,31 @@ PurpleMediaElementInfo *purple_media_manager_get_active_element( PurpleMediaManager *manager, PurpleMediaElementType type); +/** + * Reduces media formats supported by the video source to given set. + * + * Useful to force negotiation of smaller picture resolution more suitable for + * use with particular codec and communication protocol without rescaling. + * + * @param manager The media manager to set the media formats. + * @param caps Set of allowed media formats. + * + * @since 2.8.0 + */ +void purple_media_manager_set_video_caps(PurpleMediaManager *manager, + GstCaps *caps); + +/** + * Returns current set of media formats limiting the output from video source. + * + * @param manager The media manager to get the media formats from. + * + * @return @c GstCaps limiting the video source's formats. + * + * @since 2.8.0 + */ +GstCaps *purple_media_manager_get_video_caps(PurpleMediaManager *manager); + gchar *purple_media_element_info_get_id(PurpleMediaElementInfo *info); gchar *purple_media_element_info_get_name(PurpleMediaElementInfo *info); PurpleMediaElementType purple_media_element_info_get_element_type(
--- 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