summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Kramlich <grim@reaperworld.com>2016-06-18 21:09:49 -0500
committerGary Kramlich <grim@reaperworld.com>2016-06-18 21:09:49 -0500
commit37356b8f91be0cd0b1508cbd75e0c7305f330714 (patch)
tree8cf455351fb1bb5831163529087048bc71794938
parent53a9f5eb9807d29cfe00836f0b57c9b6ce42b527 (diff)
parent4ebe17b240c6904cf4157a912151b1dea3a47921 (diff)
downloadpidgin-37356b8f91be0cd0b1508cbd75e0c7305f330714.tar.gz
Merged in xhaakon/pidgin/release-2.x.y (pull request #81)
Backport of my patches from Pidgin 3.0
-rw-r--r--libpurple/media/backend-fs2.c11
-rw-r--r--libpurple/mediamanager.c39
-rw-r--r--pidgin/gtkft.c4
3 files changed, 50 insertions, 4 deletions
diff --git a/libpurple/media/backend-fs2.c b/libpurple/media/backend-fs2.c
index 1b47374214..40a289bdee 100644
--- a/libpurple/media/backend-fs2.c
+++ b/libpurple/media/backend-fs2.c
@@ -533,6 +533,8 @@ static void
purple_media_backend_fs2_class_init(PurpleMediaBackendFs2Class *klass)
{
GObjectClass *gobject_class = (GObjectClass*)klass;
+ GList *features;
+ GList *it;
gobject_class->dispose = purple_media_backend_fs2_dispose;
gobject_class->finalize = purple_media_backend_fs2_finalize;
@@ -544,6 +546,15 @@ purple_media_backend_fs2_class_init(PurpleMediaBackendFs2Class *klass)
g_object_class_override_property(gobject_class, PROP_MEDIA, "media");
g_type_class_add_private(klass, sizeof(PurpleMediaBackendFs2Private));
+
+ /* VA-API elements aren't well supported in Farstream. Ignore them. */
+ features = gst_registry_get_feature_list_by_plugin(gst_registry_get(),
+ "vaapi");
+ for (it = features; it; it = it->next) {
+ gst_plugin_feature_set_rank((GstPluginFeature *)it->data,
+ GST_RANK_NONE);
+ }
+ gst_plugin_feature_list_free(features);
}
static void
diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c
index a540134137..3a17a323ac 100644
--- a/libpurple/mediamanager.c
+++ b/libpurple/mediamanager.c
@@ -491,14 +491,18 @@ purple_media_manager_remove_media(PurpleMediaManager *manager, PurpleMedia *medi
#ifdef HAVE_MEDIA_APPLICATION
g_mutex_lock (&manager->priv->appdata_mutex);
- for (list = manager->priv->appdata_info; list; list = list->next) {
+ list = manager->priv->appdata_info;
+ while (list) {
PurpleMediaAppDataInfo *info = list->data;
+ GList *next = list->next;
if (info->media == media) {
manager->priv->appdata_info = g_list_delete_link (
manager->priv->appdata_info, list);
free_appdata_info_locked (info);
}
+
+ list = next;
}
g_mutex_unlock (&manager->priv->appdata_mutex);
#endif
@@ -558,9 +562,24 @@ purple_media_manager_get_private_media_by_account(PurpleMediaManager *manager,
static void
free_appdata_info_locked (PurpleMediaAppDataInfo *info)
{
+ GstAppSrcCallbacks null_src_cb = { NULL, NULL, NULL, { NULL } };
+ GstAppSinkCallbacks null_sink_cb = { NULL, NULL, NULL , { NULL } };
+
if (info->notify)
info->notify (info->user_data);
+ info->media = NULL;
+ if (info->appsrc) {
+ /* Will call appsrc_destroyed. */
+ gst_app_src_set_callbacks (info->appsrc, &null_src_cb,
+ NULL, NULL);
+ }
+ if (info->appsink) {
+ /* Will call appsink_destroyed. */
+ gst_app_sink_set_callbacks (info->appsink, &null_sink_cb,
+ NULL, NULL);
+ }
+
/* Make sure no other thread is using the structure */
g_free (info->session_id);
g_free (info->participant);
@@ -867,7 +886,14 @@ appsrc_seek_data (GstAppSrc *appsrc, guint64 offset, gpointer user_data)
static void
appsrc_destroyed (PurpleMediaAppDataInfo *info)
{
- PurpleMediaManager *manager = purple_media_manager_get ();
+ PurpleMediaManager *manager;
+
+ if (!info->media) {
+ /* PurpleMediaAppDataInfo is being freed. Return at once. */
+ return;
+ }
+
+ manager = purple_media_manager_get ();
g_mutex_lock (&manager->priv->appdata_mutex);
info->appsrc = NULL;
@@ -1025,7 +1051,14 @@ appsink_new_sample (GstAppSink *appsink, gpointer user_data)
static void
appsink_destroyed (PurpleMediaAppDataInfo *info)
{
- PurpleMediaManager *manager = purple_media_manager_get ();
+ PurpleMediaManager *manager;
+
+ if (!info->media) {
+ /* PurpleMediaAppDataInfo is being freed. Return at once. */
+ return;
+ }
+
+ manager = purple_media_manager_get ();
g_mutex_lock (&manager->priv->appdata_mutex);
info->appsink = NULL;
diff --git a/pidgin/gtkft.c b/pidgin/gtkft.c
index b000b0489c..e67ad7b598 100644
--- a/pidgin/gtkft.c
+++ b/pidgin/gtkft.c
@@ -504,7 +504,9 @@ open_button_cb(GtkButton *button, PidginXferDialog *dialog)
}
else
{
- purple_notify_uri(NULL, filename);
+ gchar *uri = g_strdup_printf("file://%s", filename);
+ purple_notify_uri(NULL, uri);
+ g_free(uri);
return;
}