Mercurial > pidgin.yaz
diff libpurple/media.c @ 27079:72bcdcb0629f
Add Gmail video support.
Thanks to Eion for all his testing help.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Tue, 02 Jun 2009 05:00:20 +0000 |
parents | 8b7d1aed6d59 |
children | 5a4451b8fe29 |
line wrap: on
line diff
--- a/libpurple/media.c Mon Jun 01 10:33:38 2009 +0000 +++ b/libpurple/media.c Tue Jun 02 05:00:20 2009 +0000 @@ -43,6 +43,7 @@ #ifdef USE_VV #include <gst/farsight/fs-conference-iface.h> +#include <gst/farsight/fs-element-added-notifier.h> /** @copydoc _PurpleMediaSession */ typedef struct _PurpleMediaSession PurpleMediaSession; @@ -2380,6 +2381,18 @@ stream->connected_cb_id = purple_timeout_add(0, (GSourceFunc)purple_media_connected_cb, stream); } + +static void +purple_media_element_added_cb(FsElementAddedNotifier *self, + GstBin *bin, GstElement *element, gpointer user_data) +{ + /* + * Hack to make H264 work with Gmail video. + */ + if (!strncmp(GST_ELEMENT_NAME(element), "x264", 4)) { + g_object_set(GST_OBJECT(element), "cabac", FALSE, NULL); + } +} #endif /* USE_VV */ gboolean @@ -2456,6 +2469,19 @@ g_object_set(G_OBJECT(session->session), "no-rtcp-timeout", 0, NULL); + /* + * Hack to make x264 work with Gmail video. + */ + if (is_nice && !strcmp(sess_id, "google-video")) { + FsElementAddedNotifier *notifier = + fs_element_added_notifier_new(); + g_signal_connect(G_OBJECT(notifier), "element-added", + G_CALLBACK(purple_media_element_added_cb), + stream); + fs_element_added_notifier_add(notifier, + GST_BIN(media->priv->conference)); + } + fs_codec_list_destroy(codec_conf); session->id = g_strdup(sess_id); @@ -2670,7 +2696,8 @@ PurpleMediaStream *stream; g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); stream = purple_media_get_stream(media, sess_id, participant); - return purple_media_candidate_list_from_fs(stream->local_candidates); + return stream ? purple_media_candidate_list_from_fs( + stream->local_candidates) : NULL; #else return NULL; #endif