diff --git a/.gitignore b/.gitignore index 3fddca2..319e4c1 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ pidgin-2.7.3.tar.bz2 /pidgin-2.10.10.tar.bz2 /pidgin-2.10.11.tar.bz2 /pidgin-2.10.12.tar.bz2 +/pidgin-2.11.0.tar.bz2 diff --git a/0001-media-don-t-keep-last-sample-reference-on-sinks.patch b/0001-media-don-t-keep-last-sample-reference-on-sinks.patch deleted file mode 100644 index 5d3ccb8..0000000 --- a/0001-media-don-t-keep-last-sample-reference-on-sinks.patch +++ /dev/null @@ -1,127 +0,0 @@ -From 662176e841c4c7413c980913950b5343b6bd88bd Mon Sep 17 00:00:00 2001 -From: Jakub Adam -Date: Wed, 27 Apr 2016 09:19:58 +0200 -Subject: [PATCH] media: don't keep last sample reference on sinks - -Holding a reference to a GstBuffer somewhere in a pipeline for possibly -indefinite period may cause trouble when the buffer has been allocated -by a 3rd party library or when it points directly into memory region of -a hardware device. - -A specific example is V4L2 source element, which won't allow webcam -image resolution be reconfigured unless all previously allocated buffers -have been freed. - -Backport of Pidgin 3 commit 13807c514810. ---- - libpurple/mediamanager.c | 5 ++++- - pidgin/gtkmedia.c | 23 +++++++++++++++++++++++ - pidgin/plugins/vvconfig.c | 28 ++++++++++++++++++++++++++++ - 3 files changed, 55 insertions(+), 1 deletion(-) - -diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c -index 0013f31..a5702b5 100644 ---- a/libpurple/mediamanager.c -+++ b/libpurple/mediamanager.c -@@ -1171,7 +1171,10 @@ purple_media_manager_get_element(PurpleMediaManager *manager, - * giving a not-linked error upon destruction - */ - fakesink = gst_element_factory_make("fakesink", NULL); -- g_object_set(fakesink, "sync", FALSE, NULL); -+ g_object_set(fakesink, -+ "sync", FALSE, -+ "enable-last-sample", FALSE, -+ NULL); - gst_bin_add(GST_BIN(bin), fakesink); - gst_element_link(tee, fakesink); - -diff --git a/pidgin/gtkmedia.c b/pidgin/gtkmedia.c -index 58f8be0..2c1fdea 100644 ---- a/pidgin/gtkmedia.c -+++ b/pidgin/gtkmedia.c -@@ -1208,6 +1208,26 @@ pidgin_media_new_cb(PurpleMediaManager *manager, PurpleMedia *media, - return TRUE; - } - -+static void -+videosink_disable_last_sample(GstElement *sink) -+{ -+ GObjectClass *klass = G_OBJECT_GET_CLASS(sink); -+ -+ if (g_object_class_find_property(klass, "enable-last-sample")) { -+ g_object_set(sink, "enable-last-sample", FALSE, NULL); -+ } -+} -+ -+static void -+autovideosink_child_added_cb (GstChildProxy *child_proxy, GObject *object, -+#if GST_CHECK_VERSION(1,0,0) -+ gchar *name, -+#endif -+ gpointer user_data) -+{ -+ videosink_disable_last_sample(GST_ELEMENT(object)); -+} -+ - static GstElement * - create_default_video_src(PurpleMedia *media, - const gchar *session_id, const gchar *participant) -@@ -1260,6 +1280,9 @@ create_default_video_sink(PurpleMedia *media, - if (sink == NULL) - purple_debug_error("gtkmedia", "Unable to find a suitable " - "element for the default video sink.\n"); -+ if (sink != NULL) -+ g_signal_connect(sink, "child-added", -+ G_CALLBACK(autovideosink_child_added_cb), NULL); - return sink; - } - -diff --git a/pidgin/plugins/vvconfig.c b/pidgin/plugins/vvconfig.c -index 968355f..55dc789 100644 ---- a/pidgin/plugins/vvconfig.c -+++ b/pidgin/plugins/vvconfig.c -@@ -371,6 +371,26 @@ create_video_src(PurpleMedia *media, - return ret; - } - -+static void -+videosink_disable_last_sample(GstElement *sink) -+{ -+ GObjectClass *klass = G_OBJECT_GET_CLASS(sink); -+ -+ if (g_object_class_find_property(klass, "enable-last-sample")) { -+ g_object_set(sink, "enable-last-sample", FALSE, NULL); -+ } -+} -+ -+static void -+autovideosink_child_added_cb(GstChildProxy *child_proxy, GObject *object, -+#if GST_CHECK_VERSION(1,0,0) -+ gchar *name, -+#endif -+ gpointer user_data) -+{ -+ videosink_disable_last_sample(GST_ELEMENT(object)); -+} -+ - static GstElement * - create_video_sink(PurpleMedia *media, - const gchar *session_id, const gchar *participant) -@@ -388,6 +408,14 @@ create_video_sink(PurpleMedia *media, - ret = gst_element_factory_make(plugin, NULL); - if (device[0] != '\0') - g_object_set(G_OBJECT(ret), "device", device, NULL); -+ -+ if (g_strcmp0(plugin, "autovideosink") == 0) { -+ g_signal_connect(ret, "child-added", -+ G_CALLBACK(autovideosink_child_added_cb), NULL); -+ } else { -+ videosink_disable_last_sample(ret); -+ } -+ - return ret; - } - --- -2.7.4 - diff --git a/0001-media-switch-source-bin-fakesink-to-PAUSED-synchrono.patch b/0001-media-switch-source-bin-fakesink-to-PAUSED-synchrono.patch deleted file mode 100644 index 46dbbf6..0000000 --- a/0001-media-switch-source-bin-fakesink-to-PAUSED-synchrono.patch +++ /dev/null @@ -1,28 +0,0 @@ -From d4eb89998d0d659b2f8a8279cf3db96b312d546f Mon Sep 17 00:00:00 2001 -From: Jakub Adam -Date: Fri, 15 Apr 2016 11:49:55 +0200 -Subject: [PATCH] media: switch source bin fakesink to PAUSED synchronously - -Connecting the source bin to the rest if the pipeline while it's still -in the process of transition to PLAYING can block the pipeline. - -Backport of Pidgin 3 commit e382df8b8ab4. ---- - libpurple/mediamanager.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c -index a5702b5..036a2dc 100644 ---- a/libpurple/mediamanager.c -+++ b/libpurple/mediamanager.c -@@ -1172,6 +1172,7 @@ purple_media_manager_get_element(PurpleMediaManager *manager, - */ - fakesink = gst_element_factory_make("fakesink", NULL); - g_object_set(fakesink, -+ "async", FALSE, - "sync", FALSE, - "enable-last-sample", FALSE, - NULL); --- -2.7.4 - diff --git a/0001-mediamanager-fix-invalid-access-to-freed-PurpleMedia.patch b/0001-mediamanager-fix-invalid-access-to-freed-PurpleMedia.patch deleted file mode 100644 index 1f67056..0000000 --- a/0001-mediamanager-fix-invalid-access-to-freed-PurpleMedia.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 5056e5362697add8e833f435fe0001cdf54306ba Mon Sep 17 00:00:00 2001 -From: Jakub Adam -Date: Fri, 10 Jun 2016 18:22:28 +0200 -Subject: [PATCH] mediamanager: fix invalid access to freed - PurpleMediaAppDataInfo - -appsrc_destroyed() and appsink_destroyed() may have read from/written to -appdata info after it had been freed. Reported by Valgrind. ---- - libpurple/mediamanager.c | 33 +++++++++++++++++++++++++++++++-- - 1 file changed, 31 insertions(+), 2 deletions(-) - -diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c -index 46d2020..5cc6ba3 100644 ---- a/libpurple/mediamanager.c -+++ b/libpurple/mediamanager.c -@@ -564,9 +564,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); -@@ -861,7 +876,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; -@@ -1019,7 +1041,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; --- -2.7.4 - diff --git a/0001-mediamanager-fix-invalid-memory-read.patch b/0001-mediamanager-fix-invalid-memory-read.patch deleted file mode 100644 index 435ebd0..0000000 --- a/0001-mediamanager-fix-invalid-memory-read.patch +++ /dev/null @@ -1,38 +0,0 @@ -From c1cf1500b9a07b962abc93b1871863c0809400dc Mon Sep 17 00:00:00 2001 -From: Jakub Adam -Date: Fri, 10 Jun 2016 16:47:02 +0200 -Subject: [PATCH] mediamanager: fix invalid memory read - -Loop was accessing 'next' pointer in already deallocated GList item. -Reported by Valgrind. ---- - libpurple/mediamanager.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c -index 80c27b1..46d2020 100644 ---- a/libpurple/mediamanager.c -+++ b/libpurple/mediamanager.c -@@ -493,14 +493,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 --- -2.7.4 - diff --git a/Microsoft_Internet_Authority_2010.pem b/Microsoft_Internet_Authority_2010.pem deleted file mode 100644 index 1bb8ee6..0000000 --- a/Microsoft_Internet_Authority_2010.pem +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFEjCCBHugAwIBAgIEBydiAjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds -b2JhbCBSb290MB4XDTEwMDQxNDE4MTIyNloXDTE4MDQxNDE4MTIxNFowJzElMCMG -A1UEAxMcTWljcm9zb2Z0IEludGVybmV0IEF1dGhvcml0eTCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBAL30zSelStiQGduyCntgpE6PDpijnHxQduuzSoyf -GLDnmsUrgoYJKKwREjIm9Rnq8LhnaMUG/fQZrtkToNCBJwimeZwE9UgyLjYfq2sm -7KFDtJ2AsEkD6oJJXwUTxaCDX+Eq9AQZS37I2oi8tV0DvHhWoel/xWrvtv8dAVm3 -H1NaX8b4kW3FfUOTGHRF7RW6snzIOjQUHqpj9+XUS8gjK4dplROZCRTvegEgTrfG -SEGuyYcBKdnChzh/tkKk8LLOLf20TFfwqNbLTvpfXf25+wncFoVk5XGc1fEzlzhn -Lpu8FzYFfhA2f37rmFpbHK2l5wkQfflKL7OPNxXWb7lbN9y3n3+OZn8jXO0Sf4wH -8P4Z+bg0Q3uy6oX7jKmq3/2RDSz1+6+XifEGiq9J9jwuI/ZEFiWREeIjw8qFVUkq -yCGvfREmhrAoRbqH7jYTgdVLRxqO2wnx0ZcpUBQymQnj8sDnU49r9PoTXDyN7lSZ -DydHTjwS848SF0bwiWpFs7U8DHdFBC+9vrWemDwFO7tBOYQgvHkE1kLNPonp53o3 -SRC0zJ8kXCOmSG7749TuISmT5P2AGhs6bMH369nUTb7xEfaijkIkoU9ptdJoFInZ -n5DYH54b5m1kJSm2NEOkW/UN63QGfp/xY9xFp3w6mlxrc9jDWASOiG8T0ObQ383E -Cg4HAgMBAAGjggF3MIIBczASBgNVHRMBAf8ECDAGAQH/AgEBMFsGA1UdIARUMFIw -SAYJKwYBBAGxPgEAMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly9jeWJlcnRydXN0Lm9t -bmlyb290LmNvbS9yZXBvc2l0b3J5LmNmbTAGBgRVHSAAMA4GA1UdDwEB/wQEAwIB -hjCBiQYDVR0jBIGBMH+heaR3MHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg -Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywg -SW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3SCAgGlMEUG -A1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93d3cucHVibGljLXRydXN0LmNvbS9jZ2kt -YmluL0NSTC8yMDE4L2NkcC5jcmwwHQYDVR0OBBYEFDMh8Mv+oqBEkt72OzPYXwFL -l3hdMA0GCSqGSIb3DQEBBQUAA4GBACtI85T7RMWTatZN/rQTThImF8qyWqsJuVak -b39XnmSy9eTTNe9jZcvlLBWc7874KsWSZCtJPjw2bL0Ym2Rnlz/taNAWwRM88lGg -V94kzjWraZBOKww6+bTxgPptAHmmOpaZTjpuVNCjWW6LHZVJu5XYdbjhEjOsXCe7 -y1Vx1frt ------END CERTIFICATE----- diff --git a/Microsoft_Secure_Server_Authority_2010.pem b/Microsoft_Secure_Server_Authority_2010.pem deleted file mode 100644 index f9113e8..0000000 --- a/Microsoft_Secure_Server_Authority_2010.pem +++ /dev/null @@ -1,35 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIGEzCCA/ugAwIBAgIKYQMzNgAFAAAAMDANBgkqhkiG9w0BAQUFADAnMSUwIwYD -VQQDExxNaWNyb3NvZnQgSW50ZXJuZXQgQXV0aG9yaXR5MB4XDTEwMDUxOTIyMTMz -MFoXDTE0MDUxOTIyMjMzMFowgYsxEzARBgoJkiaJk/IsZAEZFgNjb20xGTAXBgoJ -kiaJk/IsZAEZFgltaWNyb3NvZnQxFDASBgoJkiaJk/IsZAEZFgRjb3JwMRcwFQYK -CZImiZPyLGQBGRYHcmVkbW9uZDEqMCgGA1UEAxMhTWljcm9zb2Z0IFNlY3VyZSBT -ZXJ2ZXIgQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -6p9fkQvNGYJfkeqr9Yso2Iv1HOCRybzNAhBQIrc4ClzPcQxYLYhsqLg8M2P5c508 -6cN57fL+ycvDbiTiPEJw2F+3W/ebX/Unb3gA65Zdt2/P5EEE8LtDvW9fJg+3jjdB -E1RnG5AAJzi4GsOWbRwxNTVJxUYe53OkygMReUGBr9OORqLFvgBTBbk4nLdgKbPK -UpqSxVMntkENQPgvm+eBSRpaaqhPccfobYG+J+/J1saSKxDkNjVACNBNcP1wmyAc -s7nfdZ0rd9DEzWpx71pYC/lwhYgFiW1mkjCrr4g519QtC5aceCSvAKvPCT4TrmvD -4OHPYH+LU9wC0POwhhHevQIDAQABo4IB2jCCAdYwEgYDVR0TAQH/BAgwBgEB/wIB -ADAdBgNVHQ4EFgQUCELj204RZvO1CMVA21V8M0YRgzgwCwYDVR0PBAQDAgGGMBIG -CSsGAQQBgjcVAQQFAgMIAAgwIwYJKwYBBAGCNxUCBBYEFH6KwpxaMozCcaLZT3Vw -96kb9pQFMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMB8GA1UdIwQYMBaAFDMh -8Mv+oqBEkt72OzPYXwFLl3hdMIGjBgNVHR8EgZswgZgwgZWggZKggY+GNmh0dHA6 -Ly9tc2NybC5taWNyb3NvZnQuY29tL3BraS9tc2NvcnAvY3JsL21zd3d3KDUpLmNy -bIY0aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9tc2NvcnAvY3JsL21zd3d3 -KDUpLmNybIYfaHR0cDovL2NvcnBwa2kvY3JsL21zd3d3KDUpLmNybDB5BggrBgEF -BQcBAQRtMGswPAYIKwYBBQUHMAKGMGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w -a2kvbXNjb3JwL21zd3d3KDUpLmNydDArBggrBgEFBQcwAoYfaHR0cDovL2NvcnBw -a2kvYWlhL21zd3d3KDUpLmNydDANBgkqhkiG9w0BAQUFAAOCAgEAj8LRXO8UEXcX -Ywc8THxo2v6GSuIgzD+wJz3R4qzIi0im5Fn3OgatfVLx9mVhliEirmi+L3reswz1 -6cXd+GWCXctsPgw3EXQVCXhVvSYSu9aVdNO89XYJKmrfNsSOVtUfIN9/gjDXQ6to -IotqWsWb0J2NCwxQhX7MWoAHiwNOv71fbFYPBaniVMOl01JcX00L3QX4URIDIW+c -bJeYKsHBEby9G67741dfTx8AnuKkUdP3rAk3WKUJIdFy0LLBi9tN3BPRVFhNK8Ct -+lMZNbEVqEJkt+3HH6V5qA041FC/9Fr/L+m/P3045fsgDNRO4C8dRXr7KC8xSG/M -blxoQvrqyAsBMOwQJkI4I6nDGbjZcBpoLJLLn3PmzP8zI+7bXrV/BVg/UMUcCBj0 -6y9iqlP3oc3e4+uCHBpna6FMp2hxQNFlO0EYnEnjcfvrTYOT00fmZELLtjUc+zQO -oSj7jKGnHwEoUeVxlDec3EFbfH7pLCNnlJ1z319AeaONlTDMUxcIvFCG8/wQGYH8 -9Fpu89yimnV7w6ygUe0ytljfT46RU2rSqhtd5lO4iaOeiaHjKeCzbOsazG9aqsLi -9h5FKe/WwkOxO60+JvyBl1xI/WJZNJLJ+7mh10IF+xn2fjL7KTTVh2blBB3IPhD6 -pnj1Hn3eGjp4fNwqcQajLW8FVSOLkO8= ------END CERTIFICATE----- diff --git a/pidgin-1e3a33f69fabe9fa78da7612b1b75a65f7f908e4.diff b/pidgin-1e3a33f69fabe9fa78da7612b1b75a65f7f908e4.diff deleted file mode 100644 index 8d69858..0000000 --- a/pidgin-1e3a33f69fabe9fa78da7612b1b75a65f7f908e4.diff +++ /dev/null @@ -1,43 +0,0 @@ -# HG changeset patch -# User Jakub Adam -# Date 1463403178 -7200 -# Node ID 1e3a33f69fabe9fa78da7612b1b75a65f7f908e4 -# Parent 7d9ac7dbfdac155137d3037ad1d54ff209cbc25a -media: don't let Farstream use VA-API elements - -Video Acceleration API isn't well supported in Farstream and produces -errors during video calls, however a high Rank of vaapi GStreamer -elements causes them to be picked as preferred video encoders and -decoders when available in the system. - -For now, set the rank of all elements from vaapi plugin to NONE, so that -they are ignored. - -diff --git a/libpurple/media/backend-fs2.c b/libpurple/media/backend-fs2.c ---- a/libpurple/media/backend-fs2.c -+++ b/libpurple/media/backend-fs2.c -@@ -489,6 +489,8 @@ - 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; -@@ -500,6 +502,15 @@ - 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/pidgin-3ac4724fc358b48d4f06df992663f455a3f875eb.diff b/pidgin-3ac4724fc358b48d4f06df992663f455a3f875eb.diff deleted file mode 100644 index 80013a1..0000000 --- a/pidgin-3ac4724fc358b48d4f06df992663f455a3f875eb.diff +++ /dev/null @@ -1,105 +0,0 @@ -# HG changeset patch -# User Jakub Adam -# Date 1462264553 -7200 -# Branch release-2.x.y -# Node ID 3ac4724fc358b48d4f06df992663f455a3f875eb -# Parent ae26e3eace575b00067e84c3c4936e8df5ea00b1 -mediamanager: fix output window destruction - -The code removing GStreamer elements hasn't been updated for a while and -no longer exactly matches the structure of the video pipeline. - -This update makes the function more generic and depending less on -the assumptions about which and how many elements are connected, so that -it won't need further modifications each time something is added or -removed form the video output branch of the pipeline. - -It also fixes failed assert in gst_element_release_request_pad() -sometimes appearing in the logs, which is caused by the fact that 'peer' -pad belongs to a different element than the code expected. - -Backport of Pidgin 3 commit 4f5cdd4bf209. - -diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c ---- a/libpurple/mediamanager.c -+++ b/libpurple/mediamanager.c -@@ -1563,32 +1563,53 @@ - return FALSE; - - if (output_window->sink != NULL) { -- GstPad *pad = gst_element_get_static_pad( -- output_window->sink, "sink"); -- GstPad *peer = gst_pad_get_peer(pad); -- GstElement *colorspace = GST_ELEMENT_PARENT(peer), *queue; -- gst_object_unref(pad); -- gst_object_unref(peer); -- pad = gst_element_get_static_pad(colorspace, "sink"); -- peer = gst_pad_get_peer(pad); -- queue = GST_ELEMENT_PARENT(peer); -- gst_object_unref(pad); -- gst_object_unref(peer); -- pad = gst_element_get_static_pad(queue, "sink"); -- peer = gst_pad_get_peer(pad); -- gst_object_unref(pad); -- if (peer != NULL) -- gst_element_release_request_pad(GST_ELEMENT_PARENT(peer), peer); -- gst_element_set_locked_state(queue, TRUE); -- gst_element_set_state(queue, GST_STATE_NULL); -- gst_bin_remove(GST_BIN(GST_ELEMENT_PARENT(queue)), queue); -- gst_element_set_locked_state(colorspace, TRUE); -- gst_element_set_state(colorspace, GST_STATE_NULL); -- gst_bin_remove(GST_BIN(GST_ELEMENT_PARENT(colorspace)), colorspace); -- gst_element_set_locked_state(output_window->sink, TRUE); -- gst_element_set_state(output_window->sink, GST_STATE_NULL); -- gst_bin_remove(GST_BIN(GST_ELEMENT_PARENT(output_window->sink)), -- output_window->sink); -+ GstElement *element = output_window->sink; -+ GstPad *teepad = NULL; -+ GSList *to_remove = NULL; -+ -+ /* Find the tee element this output is connected to. */ -+ while (!teepad) { -+ GstPad *pad; -+ GstPad *peer; -+ GstElementFactory *factory; -+ const gchar *factory_name; -+ -+ to_remove = g_slist_append(to_remove, element); -+ -+ pad = gst_element_get_static_pad(element, "sink"); -+ peer = gst_pad_get_peer(pad); -+ if (!peer) { -+ /* Output is disconnected from the pipeline. */ -+ gst_object_unref(pad); -+ break; -+ } -+ -+ factory = gst_element_get_factory(GST_PAD_PARENT(peer)); -+ factory_name = gst_plugin_feature_get_name(factory); -+ if (purple_strequal(factory_name, "tee")) { -+ teepad = peer; -+ } -+ -+ element = GST_PAD_PARENT(peer); -+ -+ gst_object_unref(pad); -+ gst_object_unref(peer); -+ } -+ -+ if (teepad) { -+ gst_element_release_request_pad(GST_PAD_PARENT(teepad), -+ teepad); -+ } -+ -+ while (to_remove) { -+ GstElement *element = to_remove->data; -+ -+ gst_element_set_locked_state(element, TRUE); -+ gst_element_set_state(element, GST_STATE_NULL); -+ gst_bin_remove(GST_BIN(GST_ELEMENT_PARENT(element)), -+ element); -+ to_remove = g_slist_delete_link(to_remove, to_remove); -+ } - } - - g_free(output_window->session_id); diff --git a/pidgin-ae26e3eace575b00067e84c3c4936e8df5ea00b1.diff b/pidgin-ae26e3eace575b00067e84c3c4936e8df5ea00b1.diff deleted file mode 100644 index e6d35af..0000000 --- a/pidgin-ae26e3eace575b00067e84c3c4936e8df5ea00b1.diff +++ /dev/null @@ -1,59 +0,0 @@ -# HG changeset patch -# User Jakub Adam -# Date 1461224421 -7200 -# Branch release-2.x.y -# Node ID ae26e3eace575b00067e84c3c4936e8df5ea00b1 -# Parent 5e5e84e8a79890e580158ac2eae073d7394e93b7 -media: add videoscale before video sink - -Fixes issue with ximagesink displaying only a corner cut-out of larger -webcam video. - -In addition, a patch for ximagesink is needed, ETA GStreamer 1.9.0: - -https://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/?id=59d7f9c62ee95dfbb5b450476f73a717e03b7b8c - -Backport of Pidgin 3 commit dfadb1bef243. - -diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c ---- a/libpurple/mediamanager.c -+++ b/libpurple/mediamanager.c -@@ -1449,7 +1449,7 @@ - (participant == ow->participant)) && - !strcmp(session_id, ow->session_id)) { - GstBus *bus; -- GstElement *queue, *convert; -+ GstElement *queue, *convert, *scale; - GstElement *tee = purple_media_get_tee(media, - session_id, participant); - -@@ -1462,6 +1462,7 @@ - #else - convert = gst_element_factory_make("ffmpegcolorspace", NULL); - #endif -+ scale = gst_element_factory_make("videoscale", NULL); - ow->sink = purple_media_manager_get_element( - manager, PURPLE_MEDIA_RECV_VIDEO, - ow->media, ow->session_id, -@@ -1482,7 +1483,7 @@ - } - - gst_bin_add_many(GST_BIN(GST_ELEMENT_PARENT(tee)), -- queue, convert, ow->sink, NULL); -+ queue, convert, scale, ow->sink, NULL); - - bus = gst_pipeline_get_bus(GST_PIPELINE( - manager->priv->pipeline)); -@@ -1491,9 +1492,11 @@ - gst_object_unref(bus); - - gst_element_set_state(ow->sink, GST_STATE_PLAYING); -+ gst_element_set_state(scale, GST_STATE_PLAYING); - gst_element_set_state(convert, GST_STATE_PLAYING); - gst_element_set_state(queue, GST_STATE_PLAYING); -- gst_element_link(convert, ow->sink); -+ gst_element_link(scale, ow->sink); -+ gst_element_link(convert, scale); - gst_element_link(queue, convert); - gst_element_link(tee, queue); - } diff --git a/pidgin.spec b/pidgin.spec index 154d542..d7c9e61 100644 --- a/pidgin.spec +++ b/pidgin.spec @@ -123,8 +123,8 @@ %endif Name: pidgin -Version: 2.10.12 -Release: 5%{?dist} +Version: 2.11.0 +Release: 1%{?dist} License: GPLv2+ and GPLv2 and MIT # GPLv2+ - libpurple, gnt, finch, pidgin, most prpls # GPLv2 - novell prpls @@ -167,18 +167,6 @@ Patch100: pidgin-2.10.1-fix-msn-ft-crashes.patch # upstream ticket https://developer.pidgin.im/ticket/16593 Patch102: pidgin-2.10.11-do-not-disable-wall.patch -# Upstream media fixes... from 2.x.y already -Patch200: 0001-media-don-t-keep-last-sample-reference-on-sinks.patch -Patch201: 0001-media-switch-source-bin-fakesink-to-PAUSED-synchrono.patch -# ... from https://bitbucket.org/pidgin/main/pull-requests/52 -Patch202: pidgin-ae26e3eace575b00067e84c3c4936e8df5ea00b1.diff -Patch203: pidgin-3ac4724fc358b48d4f06df992663f455a3f875eb.diff -# ... from https://bitbucket.org/pidgin/main/pull-requests/55 -Patch204: pidgin-1e3a33f69fabe9fa78da7612b1b75a65f7f908e4.diff -# And pending in https://github.com/tieto/pidgin -Patch205: 0001-mediamanager-fix-invalid-memory-read.patch -Patch206: 0001-mediamanager-fix-invalid-access-to-freed-PurpleMedia.patch - BuildRoot: %{_tmppath}/%{name}-%{version}-root Summary: A Gtk+ based multiprotocol instant messaging client @@ -491,14 +479,6 @@ echo "FEDORA=%{fedora} RHEL=%{rhel}" %patch100 -p0 -R -b .ftcrash # https://developer.pidgin.im/ticket/16593 %patch102 -p1 -# Media fixes -%patch200 -p1 -%patch201 -p1 -%patch202 -p1 -%patch203 -p1 -%patch204 -p1 -%patch205 -p1 -%patch206 -p1 # Our preferences cp %{SOURCE1} prefs.xml @@ -730,7 +710,6 @@ rm -rf $RPM_BUILD_ROOT %exclude %{_libdir}/purple-2/perl %{_libdir}/libpurple.so.* %{_datadir}/sounds/purple/ -%{_datadir}/purple %dir %{_sysconfdir}/purple %config(noreplace) %{_sysconfdir}/purple/prefs.xml %if %{dbus_integration} @@ -793,6 +772,9 @@ rm -rf $RPM_BUILD_ROOT %endif %changelog +* Thu Jun 23 2016 Jan Synáček - 2.11.0-1 +- Update to 2.11.0 (#1348545) + * Fri Jun 10 2016 David Woodhouse - 2.10.12-5 - Include media fixes from upstream (and soon to be upstream) diff --git a/sources b/sources index d3377e0..e01d07d 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -14e0f5cfb2ed065e4dc80391a806ac76 pidgin-2.10.12.tar.bz2 +7b167474db669aab2f71fa46835fb83f pidgin-2.11.0.tar.bz2