Mercurial > pidgin.yaz
diff libpurple/mediamanager.c @ 29756:18773d906caf
propagate from branch 'im.pidgin.pidgin' (head 0f0a1bc362f71dfc0f4d78dd9a2056f4087c1025)
to branch 'im.pidgin.pidgin.next.minor' (head 909d1883abe3a8b3e8b735bfdf8f3bac7e52e0f0)
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Fri, 12 Feb 2010 21:09:34 +0000 |
parents | 2b2b930281a0 |
children | a8cc50c2279f |
line wrap: on
line diff
--- a/libpurple/mediamanager.c Fri Feb 12 21:00:35 2010 +0000 +++ b/libpurple/mediamanager.c Fri Feb 12 21:09:34 2010 +0000 @@ -37,8 +37,8 @@ #endif #ifdef USE_VV +#include <media/backend-fs2.h> -#include <gst/farsight/fs-conference-iface.h> #include <gst/farsight/fs-element-added-notifier.h> #include <gst/interfaces/xoverlay.h> @@ -80,6 +80,7 @@ GList *elements; GList *output_windows; gulong next_output_window_id; + GType backend_type; PurpleMediaElementInfo *video_src; PurpleMediaElementInfo *video_sink; @@ -100,6 +101,7 @@ enum { INIT_MEDIA, + UI_CAPS_CHANGED, LAST_SIGNAL }; static guint purple_media_manager_signals[LAST_SIGNAL] = {0}; @@ -148,6 +150,15 @@ purple_smarshal_BOOLEAN__OBJECT_POINTER_STRING, G_TYPE_BOOLEAN, 3, PURPLE_TYPE_MEDIA, G_TYPE_POINTER, G_TYPE_STRING); + + purple_media_manager_signals[UI_CAPS_CHANGED] = g_signal_new ("ui-caps-changed", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, + purple_smarshal_VOID__FLAGS_FLAGS, + G_TYPE_NONE, 2, PURPLE_MEDIA_TYPE_CAPS, + PURPLE_MEDIA_TYPE_CAPS); + g_type_class_add_private(klass, sizeof(PurpleMediaManagerPrivate)); } @@ -157,6 +168,9 @@ media->priv = PURPLE_MEDIA_MANAGER_GET_PRIVATE(media); media->priv->medias = NULL; media->priv->next_output_window_id = 1; +#ifdef USE_VV + media->priv->backend_type = PURPLE_TYPE_MEDIA_BACKEND_FS2; +#endif purple_prefs_add_none("/purple/media"); purple_prefs_add_none("/purple/media/audio"); @@ -304,34 +318,15 @@ { #ifdef USE_VV PurpleMedia *media; - FsConference *conference = FS_CONFERENCE(gst_element_factory_make(conference_type, NULL)); - GstStateChangeReturn ret; gboolean signal_ret; - if (conference == NULL) { - purple_conv_present_error(remote_user, account, - _("Error creating conference.")); - purple_debug_error("media", "Conference == NULL\n"); - return NULL; - } - media = PURPLE_MEDIA(g_object_new(purple_media_get_type(), "manager", manager, "account", account, - "conference", conference, + "conference-type", conference_type, "initiator", initiator, NULL)); - ret = gst_element_set_state(GST_ELEMENT(conference), GST_STATE_PLAYING); - - if (ret == GST_STATE_CHANGE_FAILURE) { - purple_conv_present_error(remote_user, account, - _("Error creating conference.")); - purple_debug_error("media", "Failed to start conference.\n"); - g_object_unref(media); - return NULL; - } - g_signal_emit(manager, purple_media_manager_signals[INIT_MEDIA], 0, media, account, remote_user, &signal_ret); @@ -894,8 +889,17 @@ PurpleMediaCaps caps) { #ifdef USE_VV + PurpleMediaCaps oldcaps; + g_return_if_fail(PURPLE_IS_MEDIA_MANAGER(manager)); + + oldcaps = manager->priv->ui_caps; manager->priv->ui_caps = caps; + + if (caps != oldcaps) + g_signal_emit(manager, + purple_media_manager_signals[UI_CAPS_CHANGED], + 0, caps, oldcaps); #endif } @@ -911,6 +915,30 @@ #endif } +void +purple_media_manager_set_backend_type(PurpleMediaManager *manager, + GType backend_type) +{ +#ifdef USE_VV + g_return_if_fail(PURPLE_IS_MEDIA_MANAGER(manager)); + + manager->priv->backend_type = backend_type; +#endif +} + +GType +purple_media_manager_get_backend_type(PurpleMediaManager *manager) +{ +#ifdef USE_VV + g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager), + PURPLE_MEDIA_CAPS_NONE); + + return manager->priv->backend_type; +#else + return G_TYPE_NONE; +#endif +} + #ifdef USE_GSTREAMER /*