Control: tag 731122 + patch Control: tag 785926 + patch Hi,
after my day-to-day XMPP client is now uninstallable in testing I have attempted to fix this situation. I have looked through the various patches in the Fedora git repo mentioned by Simon. The only patch you need for gstreamer 1.0 support is pidgin-2.10.11-gstreamer1.patch Unfortunately in the Fedora Repo this includes context of the earlier applied pidgin-2.10.11-add-dtmf-support.patch which could be imported cleanly, but adds a new symbol to libpurple0. I think this is not feasible, so I fixed up the -gstreamer1 patch to apply (and renamed it to -debian). With this patch and bumping the builddepends to GStreamer 1.0 / farstream 0.2 the package builds cleanly. I had to add autoreconf support because we patch automake/autoconf sources of course. I have done some testing on the package, but I only use XMPP text chats. In fact I have never ever used Video/Audio chats, which GStream is all about. So it might just fail horribly! Best Regards, Bernhard
From ecf50c455d8177332c804b3bba0f1102130c55d4 Mon Sep 17 00:00:00 2001 From: Bernhard Schmidt <bernhard.schm...@lrz.de> Date: Wed, 9 Sep 2015 00:25:24 +0200 Subject: [PATCH 1/2] GStreamer 1.0 and libfarstream 0.2 suppport * Import http://pkgs.fedoraproject.org/cgit/pidgin.git/tree/pidgin-2.10.11-gstreamer1.patch and refresh for Debian (wrong context due to -add-dtmf-support not being applied in Debian), rename to pidgin-2.10.11-gstreamer1-debian.patch * Bump builddeps - libgstreamer0.10-dev -> libgstreamer1.0-dev - libgstreamer-plugins-base0.10-dev -> libgstreamer-plugins-base1.0-dev - libfarstream-0.1-dev -> libfarstream-0.2-dev * run autoreconf through dh-autoreconf/cdbs --- debian/control | 9 +- .../patches/pidgin-2.10.11-gstreamer1-debian.patch | 1128 ++++++++++++++++++++ debian/patches/series | 1 + debian/rules | 1 + 4 files changed, 1135 insertions(+), 4 deletions(-) create mode 100644 debian/patches/pidgin-2.10.11-gstreamer1-debian.patch diff --git a/debian/control b/debian/control index fd1ee2b..51940f5 100644 --- a/debian/control +++ b/debian/control @@ -5,16 +5,17 @@ Maintainer: Ari Pollak <a...@debian.org> Build-Depends: cdbs (>= 0.4.53), debhelper (>= 7), intltool, gconf2, hardening-wrapper, libgtk2.0-dev (>= 2.10.0), libxss-dev, libmeanwhile-dev, - libnss3-dev (>= 3.11.7), tcl-dev, tk-dev, libgstreamer0.10-dev, + libnss3-dev (>= 3.11.7), tcl-dev, tk-dev, libgstreamer1.0-dev, libgtkspell-dev, libltdl3-dev, libperl-dev, libstartup-notification0-dev, libzephyr-dev, libxml2-dev, libdbus-glib-1-dev, dbus, python (>= 2.4), libavahi-client-dev, libavahi-glib-dev, libxml-parser-perl, libncursesw5-dev, libsasl2-dev, libgadu-dev (>= 1:1.12.0-5), - xsltproc, doxygen, libfarstream-0.1-dev, - libgstreamer-plugins-base0.10-dev, + xsltproc, doxygen, libfarstream-0.2-dev, + libgstreamer-plugins-base1.0-dev, network-manager-dev (>= 0.9.0) [linux-any], - libsqlite3-dev (>= 3.3), libidn11-dev, ca-certificates + libsqlite3-dev (>= 3.3), libidn11-dev, ca-certificates, + dh-autoreconf Standards-Version: 3.9.6 Vcs-Git: git://git.debian.org/git/collab-maint/pidgin.git Vcs-Browser: http://git.debian.org/?p=collab-maint/pidgin.git diff --git a/debian/patches/pidgin-2.10.11-gstreamer1-debian.patch b/debian/patches/pidgin-2.10.11-gstreamer1-debian.patch new file mode 100644 index 0000000..66f09f1 --- /dev/null +++ b/debian/patches/pidgin-2.10.11-gstreamer1-debian.patch @@ -0,0 +1,1128 @@ + +# HG changeset patch +# User David Woodhouse <david.woodho...@intel.com> +# Date 1426073959 0 +# Node ID 2415067473ba10a2090d6130b93204a3b537b05c +# Parent 6b4576edf2a694ab55d0d06d3643c44601a75b15 +Support GStreamer 1.x and resync with trunk + +Index: pidgin/configure.ac +=================================================================== +--- pidgin.orig/configure.ac ++++ pidgin/configure.ac +@@ -741,42 +741,115 @@ AM_GCONF_SOURCE_2 + dnl ####################################################################### + dnl # Check for GStreamer + dnl ####################################################################### +-dnl +-dnl TODO: Depend on gstreamer >= 0.10.10, and remove the conditional use of +-dnl gst_registry_fork_set_enabled. + AC_ARG_ENABLE(gstreamer, +- [AC_HELP_STRING([--disable-gstreamer], [compile without GStreamer audio support])], ++ [AS_HELP_STRING([--disable-gstreamer], [compile without GStreamer audio support])], + enable_gst="$enableval", enable_gst="yes") ++AC_ARG_WITH(gstreamer, [AS_HELP_STRING([--with-gstreamer=<version>], ++ [compile with GStreamer 0.10 or 1.0 interface (default: auto)])], ++ with_gstreamer="$withval", with_gstreamer="auto") + if test "x$enable_gst" != "xno"; then +- PKG_CHECK_MODULES(GSTREAMER, [gstreamer-0.10], [ +- AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer for playing sounds]) +- AC_SUBST(GSTREAMER_CFLAGS) +- AC_SUBST(GSTREAMER_LIBS) +- AC_CHECK_LIB(gstreamer-0.10, gst_registry_fork_set_enabled, +- [ AC_DEFINE(GST_CAN_DISABLE_FORKING, [], +- [Define if gst_registry_fork_set_enabled exists])], +- [], [$GSTREAMER_LIBS]) +- ], [ +- AC_MSG_RESULT(no) +- enable_gst="no" +- if test "x$force_deps" = "xyes" ; then +- AC_MSG_ERROR([ ++ if test "x$with_gstreamer" == "xauto"; then ++ PKG_CHECK_MODULES(GSTREAMER, [gstreamer-1.0], [ ++ AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer for playing sounds]) ++ with_gstreamer="1.0" ++ AC_SUBST(GSTREAMER_CFLAGS) ++ AC_SUBST(GSTREAMER_LIBS) ++ dnl Check whether forking stuff is required for this version. ++ ], [ ++ PKG_CHECK_MODULES(GSTREAMER, [gstreamer-0.10], [ ++ AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer for playing sounds]) ++ with_gstreamer="0.10" ++ AC_SUBST(GSTREAMER_CFLAGS) ++ AC_SUBST(GSTREAMER_LIBS) ++ ], [ ++ AC_MSG_RESULT(no) ++ enable_gst="no" ++ if test "x$force_deps" = "xyes" ; then ++ AC_MSG_ERROR([ + GStreamer development headers not found. + Use --disable-gstreamer if you do not need GStreamer (sound) support. + ]) +- fi]) ++ fi ++ ]) ++ ]) ++ elif test "x$with_gstreamer" == "x1.0"; then ++ PKG_CHECK_MODULES(GSTREAMER, [gstreamer-1.0], [ ++ AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer 1.0 for playing sounds]) ++ AC_SUBST(GSTREAMER_CFLAGS) ++ AC_SUBST(GSTREAMER_LIBS) ++ ], [ ++ AC_MSG_RESULT(no) ++ enable_gst="no" ++ if test "x$force_deps" = "xyes" ; then ++ AC_MSG_ERROR([ ++GStreamer development headers not found. ++Use --disable-gstreamer if you do not need GStreamer (sound) support. ++]) ++ fi ++ ]) ++ elif test "x$with_gstreamer" == "x0.10"; then ++ PKG_CHECK_MODULES(GSTREAMER, [gstreamer-0.10], [ ++ AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer 0.10 for playing sounds]) ++ AC_SUBST(GSTREAMER_CFLAGS) ++ AC_SUBST(GSTREAMER_LIBS) ++ ], [ ++ AC_MSG_RESULT(no) ++ enable_gst="no" ++ if test "x$force_deps" = "xyes" ; then ++ AC_MSG_ERROR([ ++GStreamer development headers not found. ++Use --disable-gstreamer if you do not need GStreamer (sound) support. ++]) ++ fi ++ ]) ++ else ++ AC_MSG_ERROR([--with-gstreamer must specify one of 0.10, 1.0 or auto.]) ++ fi ++fi ++ ++if test "x$with_gtk" == "x3" -a "x$with_gstreamer" == "x0.10"; then ++ AC_MSG_ERROR([WebKitGTK+ 3.0 cannot be mixed with GStreamer 0.10. ++Please switch to WebKitGTK+ 2.0 or GStreamer 1.0.]) ++elif test "x$with_gtk" == "x2" -a "x$with_gstreamer" == "x1.0"; then ++ AC_MSG_ERROR([WebKitGTK+ 2.0 cannot be mixed with GStreamer 1.0. ++Please switch to WebKitGTK+ 3.0 or GStreamer 0.10.]) ++fi ++if test "x$with_gstreamer" == "x0.10" -o "x$with_gstreamer" == "x1.0"; then ++ AC_SUBST(GSTREAMER_VER, [$with_gstreamer]) ++else ++ AC_SUBST(GSTREAMER_VER, "") ++fi ++ ++dnl ####################################################################### ++dnl # Check for GStreamer Video ++dnl ####################################################################### ++if test "x$enable_gst" != "xno" -a "x$with_gstreamer" == "x1.0"; then ++ AC_ARG_ENABLE(gstreamer-video, ++ [AS_HELP_STRING([--disable-gstreamer-video], [compile without GStreamer 1.0 Video Overlay support])], ++ enable_gstvideo="$enableval", enable_gstvideo="yes") ++ if test "x$enable_gstvideo" != "xno"; then ++ PKG_CHECK_MODULES(GSTVIDEO, [gstreamer-video-1.0], [ ++ AC_DEFINE(USE_GSTVIDEO, 1, [Use GStreamer Video Overlay support]) ++ AC_SUBST(GSTVIDEO_CFLAGS) ++ AC_SUBST(GSTVIDEO_LIBS) ++ ], [ ++ enable_gstvideo="no" ++ ]) ++ fi ++else ++ enable_gstvideo="no" + fi + + dnl ####################################################################### + dnl # Check for GStreamer Interfaces + dnl ####################################################################### +-if test "x$enable_gst" != "xno"; then ++if test "x$enable_gst" != "xno" -a "x$with_gstreamer" == "x0.10"; then + AC_ARG_ENABLE(gstreamer-interfaces, +- [AC_HELP_STRING([--disable-gstreamer-interfaces], [compile without GStreamer interface support])], ++ [AS_HELP_STRING([--disable-gstreamer-interfaces], [compile without GStreamer 0.10 interface support])], + enable_gstinterfaces="$enableval", enable_gstinterfaces="yes") + if test "x$enable_gstinterfaces" != "xno"; then + PKG_CHECK_MODULES(GSTINTERFACES, [gstreamer-interfaces-0.10], [ +- AC_DEFINE(USE_GSTINTERFACES, 1, [Use GStreamer interfaces for X overlay support]) ++ AC_DEFINE(USE_GSTINTERFACES, 1, [Use GStreamer 0.10 interfaces for X overlay support]) + AC_SUBST(GSTINTERFACES_CFLAGS) + AC_SUBST(GSTINTERFACES_LIBS) + ], [ +@@ -791,32 +864,43 @@ dnl #################################### + dnl # Check for Farstream + dnl ####################################################################### + AC_ARG_ENABLE(farstream, +- [AC_HELP_STRING([--disable-farstream], [compile without farstream support])], ++ [AS_HELP_STRING([--disable-farstream], [compile without farstream support])], + enable_farstream="$enableval", enable_farstream="yes") + if test "x$enable_farstream" != "xno"; then +- PKG_CHECK_MODULES(FARSTREAM, [farstream-0.1], [ +- AC_SUBST(FARSTREAM_CFLAGS) +- AC_SUBST(FARSTREAM_LIBS) +- ], [ +- # Try farsight. +- PKG_CHECK_MODULES(FARSTREAM, [farsight2-0.10 >= 0.0.9], [ +- AC_DEFINE(HAVE_FARSIGHT, 1, [Use Farsight instead of Farstream]) ++ if test "x$with_gstreamer" == "x1.0"; then ++ PKG_CHECK_MODULES(FARSTREAM, [farstream-0.2], [ + AC_SUBST(FARSTREAM_CFLAGS) + AC_SUBST(FARSTREAM_LIBS) + ], [ + enable_farstream="no" + ]) +- ]) +- fi ++ else ++ PKG_CHECK_MODULES(FARSTREAM, [farstream-0.1], [ ++ AC_SUBST(FARSTREAM_CFLAGS) ++ AC_SUBST(FARSTREAM_LIBS) ++ ], [ ++ # Try farsight. ++ PKG_CHECK_MODULES(FARSTREAM, [farsight2-0.10 >= 0.0.9], [ ++ AC_DEFINE(HAVE_FARSIGHT, 1, [Use Farsight instead of Farstream]) ++ AC_SUBST(FARSTREAM_CFLAGS) ++ AC_SUBST(FARSTREAM_LIBS) ++ ], [ ++ enable_farstream="no" ++ ]) ++ ]) ++ fi ++fi + + dnl ####################################################################### + dnl # Check for Voice and Video support + dnl ####################################################################### + AC_ARG_ENABLE(vv, +- [AC_HELP_STRING([--disable-vv], [compile without voice and video support])], ++ [AS_HELP_STRING([--disable-vv], [compile without voice and video support])], + enable_vv="$enableval", enable_vv="yes") + if test "x$enable_vv" != "xno"; then +- if test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farstream" != "xno"; then ++ if test "x$enable_gst" != "xno" -a "x$with_gstreamer" == "x1.0" -a "x$enable_gstvideo" != "xno" -a "x$enable_farstream" != "xno"; then ++ AC_DEFINE(USE_VV, 1, [Use voice and video]) ++ elif test "x$enable_gst" != "xno" -a "x$with_gstreamer" == "x0.10" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farstream" != "xno"; then + AC_DEFINE(USE_VV, 1, [Use voice and video]) + else + enable_vv="no" +@@ -829,7 +913,7 @@ Or use --disable-vv if you do not need v + fi + fi + fi +-AM_CONDITIONAL(USE_VV, test "x$enable_gstreamer" != "xno" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farstream" != "xno") ++AM_CONDITIONAL(USE_VV, test "x$enable_vv" != "xno") + + dnl ####################################################################### + dnl # Check for Internationalized Domain Name support +@@ -2605,6 +2689,7 @@ echo Protocols to build dynamically : $D + echo Protocols to link statically.. : $STATIC_PRPLS + echo + echo Build with GStreamer support.. : $enable_gst ++echo Build for GStreamer version... : $with_gstreamer + echo Build with D-Bus support...... : $enable_dbus + echo Build with voice and video.... : $enable_vv + if test "x$enable_dbus" = "xyes" ; then +Index: pidgin/finch/Makefile.am +=================================================================== +--- pidgin.orig/finch/Makefile.am ++++ pidgin/finch/Makefile.am +@@ -73,6 +73,7 @@ finch_LDADD = \ + $(LIBXML_LIBS) \ + $(GNT_LIBS) \ + $(GSTREAMER_LIBS) \ ++ $(GSTVIDEO_LIBS) \ + ./libgnt/libgnt.la \ + $(top_builddir)/libpurple/libpurple.la + +Index: pidgin/libpurple/Makefile.am +=================================================================== +--- pidgin.orig/libpurple/Makefile.am ++++ pidgin/libpurple/Makefile.am +@@ -308,6 +308,7 @@ libpurple_la_LIBADD = \ + $(INTLLIBS) \ + $(FARSTREAM_LIBS) \ + $(GSTREAMER_LIBS) \ ++ $(GSTVIDEO_LIBS) \ + $(GSTINTERFACES_LIBS) \ + $(IDN_LIBS) \ + ciphers/libpurple-ciphers.la \ +@@ -324,6 +325,7 @@ AM_CPPFLAGS = \ + $(LIBXML_CFLAGS) \ + $(FARSTREAM_CFLAGS) \ + $(GSTREAMER_CFLAGS) \ ++ $(GSTVIDEO_CFLAGS) \ + $(GSTINTERFACES_CFLAGS) \ + $(IDN_CFLAGS) \ + $(NETWORKMANAGER_CFLAGS) +Index: pidgin/libpurple/data/purple.pc.in +=================================================================== +--- pidgin.orig/libpurple/data/purple.pc.in ++++ pidgin/libpurple/data/purple.pc.in +@@ -5,6 +5,7 @@ includedir=@includedir@ + datarootdir=@datarootdir@ + datadir=@datadir@ + sysconfdir=@sysconfdir@ ++gstreamer=@GSTREAMER_VER@ + + plugindir=${libdir}/purple-@PURPLE_MAJOR_VERSION@ + +Index: pidgin/libpurple/example/Makefile.am +=================================================================== +--- pidgin.orig/libpurple/example/Makefile.am ++++ pidgin/libpurple/example/Makefile.am +@@ -8,6 +8,7 @@ nullclient_LDADD = \ + $(INTLLIBS) \ + $(GLIB_LIBS) \ + $(LIBXML_LIBS) \ ++ $(GSTVIDEO_LIBS) \ + $(top_builddir)/libpurple/libpurple.la + + AM_CPPFLAGS = \ +Index: pidgin/libpurple/media/backend-fs2.c +=================================================================== +--- pidgin.orig/libpurple/media/backend-fs2.c ++++ pidgin/libpurple/media/backend-fs2.c +@@ -41,6 +41,7 @@ + #include <farstream/fs-conference.h> + #include <farstream/fs-element-added-notifier.h> + #include <farstream/fs-utils.h> ++#include <gst/gststructure.h> + #endif + + /** @copydoc _PurpleMediaBackendFs2Class */ +@@ -239,9 +240,17 @@ purple_media_network_protocol_from_fs(Fs + g_return_val_if_reached(PURPLE_MEDIA_NETWORK_PROTOCOL_TCP); + } + ++#if GST_CHECK_VERSION(1,0,0) ++static GstPadProbeReturn ++event_probe_cb(GstPad *srcpad, GstPadProbeInfo *info, gpointer unused) ++#else + static gboolean + event_probe_cb(GstPad *srcpad, GstEvent *event, gboolean release_pad) ++#endif + { ++#if GST_CHECK_VERSION(1,0,0) ++ GstEvent *event = GST_PAD_PROBE_INFO_EVENT(info); ++#endif + if (GST_EVENT_TYPE(event) == GST_EVENT_CUSTOM_DOWNSTREAM + && gst_event_has_name(event, "purple-unlink-tee")) { + +@@ -249,22 +258,40 @@ event_probe_cb(GstPad *srcpad, GstEvent + + gst_pad_unlink(srcpad, gst_pad_get_peer(srcpad)); + ++#if GST_CHECK_VERSION(1,0,0) ++ gst_pad_remove_probe(srcpad, ++ g_value_get_ulong(gst_structure_get_value(s, "handler-id"))); ++#else + gst_pad_remove_event_probe(srcpad, + g_value_get_uint(gst_structure_get_value(s, "handler-id"))); ++#endif + + if (g_value_get_boolean(gst_structure_get_value(s, "release-pad"))) + gst_element_release_request_pad(GST_ELEMENT_PARENT(srcpad), srcpad); + ++#if GST_CHECK_VERSION(1,0,0) ++ return GST_PAD_PROBE_DROP; ++#else + return FALSE; ++#endif + } + ++#if GST_CHECK_VERSION(1,0,0) ++ return GST_PAD_PROBE_OK; ++#else + return TRUE; ++#endif + } + + static void + unlink_teepad_dynamic(GstPad *srcpad, gboolean release_pad) + { ++#if GST_CHECK_VERSION(1,0,0) ++ gulong id = gst_pad_add_probe(srcpad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, ++ event_probe_cb, NULL, NULL); ++#else + guint id = gst_pad_add_event_probe(srcpad, G_CALLBACK(event_probe_cb), NULL); ++#endif + + if (GST_IS_GHOST_PAD(srcpad)) + srcpad = gst_ghost_pad_get_target(GST_GHOST_PAD(srcpad)); +@@ -273,7 +300,11 @@ unlink_teepad_dynamic(GstPad *srcpad, gb + gst_event_new_custom(GST_EVENT_CUSTOM_DOWNSTREAM, + gst_structure_new("purple-unlink-tee", + "release-pad", G_TYPE_BOOLEAN, release_pad, ++#if GST_CHECK_VERSION(1,0,0) ++ "handler-id", G_TYPE_ULONG, id, ++#else + "handler-id", G_TYPE_UINT, id, ++#endif + NULL))); + } + +@@ -855,15 +886,31 @@ gst_msg_db_to_percent(GstMessage *msg, g + gdouble value_db; + gdouble percent; + +- list = gst_structure_get_value( +- gst_message_get_structure(msg), value_name); ++ list = gst_structure_get_value(gst_message_get_structure(msg), value_name); ++#if GST_CHECK_VERSION(1,0,0) ++G_GNUC_BEGIN_IGNORE_DEPRECATIONS ++ value = g_value_array_get_nth(g_value_get_boxed(list), 0); ++G_GNUC_END_IGNORE_DEPRECATIONS ++#else + value = gst_value_list_get_value(list, 0); ++#endif + value_db = g_value_get_double(value); + percent = pow(10, value_db / 20); + return (percent > 1.0) ? 1.0 : percent; + } + + static void ++purple_media_error_fs(PurpleMedia *media, const gchar *error, ++ const GstStructure *fs_error) ++{ ++ const gchar *error_msg = gst_structure_get_string(fs_error, "error-msg"); ++ ++ purple_media_error(media, "%s%s%s", error, ++ error_msg ? _("\n\nMessage from Farsight: ") : "", ++ error_msg ? error_msg : ""); ++} ++ ++static void + gst_handle_message_element(GstBus *bus, GstMessage *msg, + PurpleMediaBackendFs2 *self) + { +@@ -871,11 +918,12 @@ gst_handle_message_element(GstBus *bus, + PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self); + GstElement *src = GST_ELEMENT(GST_MESSAGE_SRC(msg)); + static guint level_id = 0; ++ const GstStructure *structure = gst_message_get_structure(msg); + + if (level_id == 0) + level_id = g_signal_lookup("level", PURPLE_TYPE_MEDIA); + +- if (gst_structure_has_name(msg->structure, "level")) { ++ if (gst_structure_has_name(structure, "level")) { + GstElement *src = GST_ELEMENT(GST_MESSAGE_SRC(msg)); + gchar *name; + gchar *participant = NULL; +@@ -930,31 +978,63 @@ gst_handle_message_element(GstBus *bus, + return; + + #ifdef HAVE_FARSIGHT +- if (gst_structure_has_name(msg->structure, "farsight-error")) { ++ if (gst_structure_has_name(structure, "farsight-error")) { + #else +- if (gst_structure_has_name(msg->structure, "farstream-error")) { ++ if (gst_structure_has_name(structure, "farstream-error")) { + #endif + FsError error_no; +- gst_structure_get_enum(msg->structure, "error-no", ++ gboolean error_emitted = FALSE; ++ gst_structure_get_enum(structure, "error-no", + FS_TYPE_ERROR, (gint*)&error_no); + switch (error_no) { ++ case FS_ERROR_CONSTRUCTION: ++ purple_media_error_fs(priv->media, ++ _("Error initializing the call. " ++ "This probably denotes problem in " ++#ifdef HAVE_FARSIGHT ++ "installation of GStreamer or Farsight."), ++#else ++ "installation of GStreamer or Farstream."), ++#endif ++ structure); ++ error_emitted = TRUE; ++ break; ++ case FS_ERROR_NETWORK: ++ purple_media_error_fs(priv->media, _("Network error."), ++ structure); ++ error_emitted = TRUE; ++ purple_media_end(priv->media, NULL, NULL); ++ break; ++ case FS_ERROR_NEGOTIATION_FAILED: ++ purple_media_error_fs(priv->media, ++ _("Codec negotiation failed. " ++ "This problem might be resolved by installing " ++ "more GStreamer codecs."), ++ structure); ++ error_emitted = TRUE; ++ purple_media_end(priv->media, NULL, NULL); ++ break; + case FS_ERROR_NO_CODECS: +- purple_media_error(priv->media, _("No codecs" +- " found. Install some" +- " GStreamer codecs found" +- " in GStreamer plugins" +- " packages.")); ++ purple_media_error(priv->media, ++ _("No codecs found. " ++ "Install some GStreamer codecs found " ++ "in GStreamer plugins packages.")); ++ error_emitted = TRUE; + purple_media_end(priv->media, NULL, NULL); + break; + #ifdef HAVE_FARSIGHT + case FS_ERROR_NO_CODECS_LEFT: +- purple_media_error(priv->media, _("No codecs" +- " left. Your codec" +- " preferences in" +- " fs-codecs.conf are too" +- " strict.")); ++ purple_media_error(priv->media, ++ _("No codecs left. Your codec preferences " ++ "in fs-codecs.conf are too strict.")); ++ error_emitted = TRUE; + purple_media_end(priv->media, NULL, NULL); + break; ++ case FS_ERROR_CONNECTION_FAILED: ++ purple_media_error(priv->media, ++ _("Could not connect to the remote party")); ++ error_emitted = TRUE; ++ break; + case FS_ERROR_UNKNOWN_CNAME: + /* + * Unknown CName is only a problem for the +@@ -971,22 +1051,22 @@ gst_handle_message_element(GstBus *bus, + "farstream-error: %i: %s\n", + #endif + error_no, +- gst_structure_get_string( +- msg->structure, "error-msg")); ++ gst_structure_get_string(structure, "error-msg")); + break; + } + + if (FS_ERROR_IS_FATAL(error_no)) { ++ if (!error_emitted) + #ifdef HAVE_FARSIGHT +- purple_media_error(priv->media, _("A non-recoverable " +- "Farsight2 error has occurred.")); ++ purple_media_error(priv->media, ++ _("A non-recoverable Farsight2 error has occurred.")); + #else +- purple_media_error(priv->media, _("A non-recoverable " +- "Farstream error has occurred.")); ++ purple_media_error(priv->media, ++ _("A non-recoverable Farstream error has occurred.")); + #endif + purple_media_end(priv->media, NULL, NULL); + } +- } else if (gst_structure_has_name(msg->structure, ++ } else if (gst_structure_has_name(structure, + #ifdef HAVE_FARSIGHT + "farsight-new-local-candidate")) { + #else +@@ -1001,9 +1081,9 @@ gst_handle_message_element(GstBus *bus, + PurpleMediaBackendFs2Stream *media_stream; + gchar *name; + +- value = gst_structure_get_value(msg->structure, "stream"); ++ value = gst_structure_get_value(structure, "stream"); + stream = g_value_get_object(value); +- value = gst_structure_get_value(msg->structure, "candidate"); ++ value = gst_structure_get_value(structure, "candidate"); + local_candidate = g_value_get_boxed(value); + + session = get_session_from_fs_stream(self, stream); +@@ -1025,7 +1105,7 @@ gst_handle_message_element(GstBus *bus, + g_signal_emit_by_name(self, "new-candidate", + session->id, name, candidate); + g_object_unref(candidate); +- } else if (gst_structure_has_name(msg->structure, ++ } else if (gst_structure_has_name(structure, + #ifdef HAVE_FARSIGHT + "farsight-local-candidates-prepared")) { + #else +@@ -1037,7 +1117,7 @@ gst_handle_message_element(GstBus *bus, + PurpleMediaBackendFs2Session *session; + gchar *name; + +- value = gst_structure_get_value(msg->structure, "stream"); ++ value = gst_structure_get_value(structure, "stream"); + stream = g_value_get_object(value); + session = get_session_from_fs_stream(self, stream); + +@@ -1047,7 +1127,7 @@ gst_handle_message_element(GstBus *bus, + + g_signal_emit_by_name(self, "candidates-prepared", + session->id, name); +- } else if (gst_structure_has_name(msg->structure, ++ } else if (gst_structure_has_name(structure, + #ifdef HAVE_FARSIGHT + "farsight-new-active-candidate-pair")) { + #else +@@ -1062,13 +1142,11 @@ gst_handle_message_element(GstBus *bus, + PurpleMediaCandidate *lcandidate, *rcandidate; + gchar *name; + +- value = gst_structure_get_value(msg->structure, "stream"); ++ value = gst_structure_get_value(structure, "stream"); + stream = g_value_get_object(value); +- value = gst_structure_get_value(msg->structure, +- "local-candidate"); ++ value = gst_structure_get_value(structure, "local-candidate"); + local_candidate = g_value_get_boxed(value); +- value = gst_structure_get_value(msg->structure, +- "remote-candidate"); ++ value = gst_structure_get_value(structure, "remote-candidate"); + remote_candidate = g_value_get_boxed(value); + + g_object_get(stream, "participant", &participant, NULL); +@@ -1085,7 +1163,7 @@ gst_handle_message_element(GstBus *bus, + + g_object_unref(lcandidate); + g_object_unref(rcandidate); +- } else if (gst_structure_has_name(msg->structure, ++ } else if (gst_structure_has_name(structure, + #ifdef HAVE_FARSIGHT + "farsight-recv-codecs-changed")) { + #else +@@ -1095,7 +1173,7 @@ gst_handle_message_element(GstBus *bus, + GList *codecs; + FsCodec *codec; + +- value = gst_structure_get_value(msg->structure, "codecs"); ++ value = gst_structure_get_value(structure, "codecs"); + codecs = g_value_get_boxed(value); + codec = codecs->data; + +@@ -1106,7 +1184,7 @@ gst_handle_message_element(GstBus *bus, + "farstream-recv-codecs-changed: %s\n", + #endif + codec->encoding_name); +- } else if (gst_structure_has_name(msg->structure, ++ } else if (gst_structure_has_name(structure, + #ifdef HAVE_FARSIGHT + "farsight-component-state-changed")) { + #else +@@ -1117,9 +1195,9 @@ gst_handle_message_element(GstBus *bus, + guint component; + const gchar *state; + +- value = gst_structure_get_value(msg->structure, "state"); ++ value = gst_structure_get_value(structure, "state"); + fsstate = g_value_get_enum(value); +- value = gst_structure_get_value(msg->structure, "component"); ++ value = gst_structure_get_value(structure, "component"); + component = g_value_get_uint(value); + + switch (fsstate) { +@@ -1154,7 +1232,7 @@ gst_handle_message_element(GstBus *bus, + #endif + "component: %u state: %s\n", + component, state); +- } else if (gst_structure_has_name(msg->structure, ++ } else if (gst_structure_has_name(structure, + #ifdef HAVE_FARSIGHT + "farsight-send-codec-changed")) { + #else +@@ -1164,7 +1242,7 @@ gst_handle_message_element(GstBus *bus, + FsCodec *codec; + gchar *codec_str; + +- value = gst_structure_get_value(msg->structure, "codec"); ++ value = gst_structure_get_value(structure, "codec"); + codec = g_value_get_boxed(value); + codec_str = fs_codec_to_string(codec); + +@@ -1177,7 +1255,7 @@ gst_handle_message_element(GstBus *bus, + codec_str); + + g_free(codec_str); +- } else if (gst_structure_has_name(msg->structure, ++ } else if (gst_structure_has_name(structure, + #ifdef HAVE_FARSIGHT + "farsight-codecs-changed")) { + #else +@@ -1187,7 +1265,7 @@ gst_handle_message_element(GstBus *bus, + FsSession *fssession; + GList *sessions; + +- value = gst_structure_get_value(msg->structure, "session"); ++ value = gst_structure_get_value(structure, "session"); + fssession = g_value_get_object(value); + sessions = g_hash_table_get_values(priv->sessions); + +@@ -1631,7 +1709,11 @@ create_src(PurpleMediaBackendFs2 *self, + srcpad = gst_element_get_static_pad(session->srcvalve, "src"); + g_object_set(volume, "volume", input_volume, NULL); + } else { ++#if GST_CHECK_VERSION(1,0,0) ++ srcpad = gst_element_get_request_pad(session->tee, "src_%u"); ++#else + srcpad = gst_element_get_request_pad(session->tee, "src%d"); ++#endif + } + + purple_debug_info("backend-fs2", "connecting pad: %s\n", +@@ -1641,11 +1723,14 @@ create_src(PurpleMediaBackendFs2 *self, + gst_object_unref(session->src); + gst_object_unref(sinkpad); + +- gst_element_set_state(session->src, GST_STATE_PLAYING); +- + purple_media_manager_create_output_window(purple_media_get_manager( + priv->media), priv->media, sess_id, NULL); + ++ purple_debug_info("backend-fs2", "create_src: setting source " ++ "state to GST_STATE_PLAYING - it may hang here on win32\n"); ++ gst_element_set_state(session->src, GST_STATE_PLAYING); ++ purple_debug_info("backend-fs2", "create_src: state set\n"); ++ + return TRUE; + } + +@@ -1849,14 +1934,10 @@ src_pad_added_cb(FsStream *fsstream, Gst + * audioresample ! audioconvert ! realsink + */ + stream->queue = gst_element_factory_make("queue", NULL); +- stream->volume = gst_element_factory_make( +- "volume", NULL); +- g_object_set(stream->volume, "volume", +- output_volume, NULL); +- stream->level = gst_element_factory_make( +- "level", NULL); +- stream->src = gst_element_factory_make( +- "liveadder", NULL); ++ stream->volume = gst_element_factory_make("volume", NULL); ++ g_object_set(stream->volume, "volume", output_volume, NULL); ++ stream->level = gst_element_factory_make("level", NULL); ++ stream->src = gst_element_factory_make("liveadder", NULL); + sink = purple_media_manager_get_element( + purple_media_get_manager(priv->media), + PURPLE_MEDIA_RECV_AUDIO, priv->media, +@@ -1875,10 +1956,12 @@ src_pad_added_cb(FsStream *fsstream, Gst + gst_element_link(stream->queue, stream->volume); + sink = stream->queue; + } else if (codec->media_type == FS_MEDIA_TYPE_VIDEO) { +- stream->src = gst_element_factory_make( +- "fsfunnel", NULL); +- sink = gst_element_factory_make( +- "fakesink", NULL); ++#if GST_CHECK_VERSION(1,0,0) ++ stream->src = gst_element_factory_make("funnel", NULL); ++#else ++ stream->src = gst_element_factory_make("fsfunnel", NULL); ++#endif ++ sink = gst_element_factory_make("fakesink", NULL); + g_object_set(G_OBJECT(sink), "async", FALSE, NULL); + gst_bin_add(GST_BIN(priv->confbin), sink); + gst_element_set_state(sink, GST_STATE_PLAYING); +@@ -1892,7 +1975,11 @@ src_pad_added_cb(FsStream *fsstream, Gst + gst_element_link_many(stream->src, stream->tee, sink, NULL); + } + ++#if GST_CHECK_VERSION(1,0,0) ++ sinkpad = gst_element_get_request_pad(stream->src, "sink_%u"); ++#else + sinkpad = gst_element_get_request_pad(stream->src, "sink%d"); ++#endif + gst_pad_link(srcpad, sinkpad); + gst_object_unref(sinkpad); + +@@ -2074,8 +2161,8 @@ G_GNUC_END_IGNORE_DEPRECATIONS + if (!fs_stream_set_transmitter(fsstream, transmitter, + _params, _num_params, &err)) { + purple_debug_error("backend-fs2", +- "Could not set transmitter %s: %s.\n", +- transmitter, err->message); ++ "Could not set transmitter %s: %s.\n", ++ transmitter, err ? err->message : NULL); + g_clear_error(&err); + g_free(_params); + return FALSE; +@@ -2394,14 +2481,44 @@ purple_media_backend_fs2_set_send_codec( + return TRUE; + } + ++static const gchar ** ++purple_media_backend_fs2_get_available_params(void) ++{ ++ static const gchar *supported_params[] = { ++ "sdes-cname", "sdes-email", "sdes-location", "sdes-name", "sdes-note", ++ "sdes-phone", "sdes-tool", NULL ++ }; ++ ++ return supported_params; ++} ++ ++static const gchar* ++param_to_sdes_type(const gchar *param) ++{ ++ const gchar **supported = purple_media_backend_fs2_get_available_params(); ++ static const gchar *sdes_types[] = { ++ "cname", "email", "location", "name", "note", "phone", "tool", NULL ++ }; ++ guint i; ++ ++ for (i = 0; supported[i] != NULL; ++i) { ++ if (!strcmp(param, supported[i])) { ++ return sdes_types[i]; ++ } ++ } ++ ++ return NULL; ++} ++ + static void + purple_media_backend_fs2_set_params(PurpleMediaBackend *self, + guint num_params, GParameter *params) + { + PurpleMediaBackendFs2Private *priv; +- const gchar **supported = purple_media_backend_fs2_get_available_params(); +- const gchar **p; + guint i; ++#ifndef HAVE_FARSIGHT ++ GstStructure *sdes; ++#endif + + g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self)); + +@@ -2414,27 +2531,30 @@ purple_media_backend_fs2_set_params(Purp + return; + } + ++#ifdef HAVE_FARSIGHT + for (i = 0; i != num_params; ++i) { +- for (p = supported; *p != NULL; ++p) { +- if (!strcmp(params[i].name, *p)) { +- g_object_set(priv->conference, +- params[i].name, g_value_get_string(¶ms[i].value), +- NULL); +- break; +- } ++ if (param_to_sdes_type(params[i].name)) { ++ g_object_set(priv->conference, ++ params[i].name, g_value_get_string(¶ms[i].value), ++ NULL); + } + } +-} ++#else ++ g_object_get(G_OBJECT(priv->conference), "sdes", &sdes, NULL); + +-static const gchar ** +-purple_media_backend_fs2_get_available_params(void) +-{ +- static const gchar *supported_params[] = { +- "sdes-cname", "sdes-email", "sdes-location", "sdes-name", "sdes-note", +- "sdes-phone", "sdes-tool", NULL +- }; ++ for (i = 0; i != num_params; ++i) { ++ const gchar *sdes_type = param_to_sdes_type(params[i].name); ++ if (!sdes_type) ++ continue; + +- return supported_params; ++ gst_structure_set(sdes, sdes_type, ++ G_TYPE_STRING, g_value_get_string(¶ms[i].value), ++ NULL); ++ } ++ ++ g_object_set(G_OBJECT(priv->conference), "sdes", sdes, NULL); ++ gst_structure_free(sdes); ++#endif /* HAVE_FARSIGHT */ + } + #else + GType +Index: pidgin/libpurple/mediamanager.c +=================================================================== +--- pidgin.orig/libpurple/mediamanager.c ++++ pidgin/libpurple/mediamanager.c +@@ -44,7 +44,12 @@ + #else + #include <farstream/fs-element-added-notifier.h> + #endif ++ ++#if GST_CHECK_VERSION(1,0,0) ++#include <gst/video/videooverlay.h> ++#else + #include <gst/interfaces/xoverlay.h> ++#endif + + /** @copydoc _PurpleMediaManagerPrivate */ + typedef struct _PurpleMediaManagerPrivate PurpleMediaManagerPrivate; +@@ -270,8 +275,11 @@ purple_media_manager_get_pipeline(Purple + gst_bus_add_signal_watch(GST_BUS(bus)); + g_signal_connect(G_OBJECT(bus), "message", + G_CALLBACK(pipeline_bus_call), manager); +- gst_bus_set_sync_handler(bus, +- gst_bus_sync_signal_handler, NULL); ++#if GST_CHECK_VERSION(1,0,0) ++ gst_bus_set_sync_handler(bus, gst_bus_sync_signal_handler, NULL, NULL); ++#else ++ gst_bus_set_sync_handler(bus, gst_bus_sync_signal_handler, NULL); ++#endif + gst_object_unref(bus); + + filename = g_build_filename(purple_user_dir(), +@@ -405,20 +413,31 @@ request_pad_unlinked_cb(GstPad *pad, Gst + { + GstElement *parent = GST_ELEMENT_PARENT(pad); + GstIterator *iter; ++#if GST_CHECK_VERSION(1,0,0) ++ GValue tmp = G_VALUE_INIT; ++#endif + GstPad *remaining_pad; + GstIteratorResult result; + +- gst_element_release_request_pad(GST_ELEMENT_PARENT(pad), pad); ++ gst_element_release_request_pad(parent, pad); + + iter = gst_element_iterate_src_pads(parent); + ++#if GST_CHECK_VERSION(1,0,0) ++ result = gst_iterator_next(iter, &tmp); ++#else + result = gst_iterator_next(iter, (gpointer)&remaining_pad); ++#endif + + if (result == GST_ITERATOR_DONE) { + gst_element_set_locked_state(parent, TRUE); + gst_element_set_state(parent, GST_STATE_NULL); + gst_bin_remove(GST_BIN(GST_ELEMENT_PARENT(parent)), parent); + } else if (result == GST_ITERATOR_OK) { ++#if GST_CHECK_VERSION(1,0,0) ++ remaining_pad = g_value_get_object(&tmp); ++ g_value_reset(&tmp); ++#endif + gst_object_unref(remaining_pad); + } + +@@ -456,7 +475,11 @@ purple_media_manager_get_video_caps(Purp + { + #ifdef USE_VV + if (manager->priv->video_caps == NULL) ++#if GST_CHECK_VERSION(1,0,0) ++ manager->priv->video_caps = gst_caps_from_string("video/x-raw," ++#else + manager->priv->video_caps = gst_caps_from_string("video/x-raw-yuv," ++#endif + "width=[250,352], height=[200,288], framerate=[1/1,20/1]"); + return manager->priv->video_caps; + #else +@@ -539,7 +562,11 @@ purple_media_manager_get_element(PurpleM + g_free(id); + + tee = gst_bin_get_by_name(GST_BIN(ret), "tee"); ++#if GST_CHECK_VERSION(1,0,0) ++ pad = gst_element_get_request_pad(tee, "src_%u"); ++#else + pad = gst_element_get_request_pad(tee, "src%d"); ++#endif + gst_object_unref(tee); + ghost = gst_ghost_pad_new(NULL, pad); + gst_object_unref(pad); +@@ -730,9 +757,12 @@ window_id_cb(GstBus *bus, GstMessage *ms + { + GstElement *sink; + +- if (GST_MESSAGE_TYPE(msg) != GST_MESSAGE_ELEMENT || +- !gst_structure_has_name(msg->structure, +- "prepare-xwindow-id")) ++ if (GST_MESSAGE_TYPE(msg) != GST_MESSAGE_ELEMENT ++#if GST_CHECK_VERSION(1,0,0) ++ || !gst_is_video_overlay_prepare_window_handle_message(msg)) ++#else ++ || !gst_structure_has_name(msg->structure, "prepare-xwindow-id")) ++#endif + return; + + sink = GST_ELEMENT(GST_MESSAGE_SRC(msg)); +@@ -746,8 +776,16 @@ window_id_cb(GstBus *bus, GstMessage *ms + | G_SIGNAL_MATCH_DATA, 0, 0, NULL, + window_id_cb, ow); + +- gst_x_overlay_set_xwindow_id(GST_X_OVERLAY( +- GST_MESSAGE_SRC(msg)), ow->window_id); ++#if GST_CHECK_VERSION(1,0,0) ++ gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(GST_MESSAGE_SRC(msg)), ++ ow->window_id); ++#elif GST_CHECK_VERSION(0,10,31) ++ gst_x_overlay_set_window_handle(GST_X_OVERLAY(GST_MESSAGE_SRC(msg)), ++ ow->window_id); ++#else ++ gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(GST_MESSAGE_SRC(msg)), ++ ow->window_id); ++#endif + } + #endif + +@@ -772,17 +810,19 @@ purple_media_manager_create_output_windo + (participant == ow->participant)) && + !strcmp(session_id, ow->session_id)) { + GstBus *bus; +- GstElement *queue, *colorspace; ++ GstElement *queue, *convert; + GstElement *tee = purple_media_get_tee(media, + session_id, participant); + + if (tee == NULL) + continue; + +- queue = gst_element_factory_make( +- "queue", NULL); +- colorspace = gst_element_factory_make( +- "ffmpegcolorspace", NULL); ++ queue = gst_element_factory_make("queue", NULL); ++#if GST_CHECK_VERSION(1,0,0) ++ convert = gst_element_factory_make("videoconvert", NULL); ++#else ++ convert = gst_element_factory_make("ffmpegcolorspace", NULL); ++#endif + ow->sink = purple_media_manager_get_element( + manager, PURPLE_MEDIA_RECV_VIDEO, + ow->media, ow->session_id, +@@ -795,7 +835,7 @@ purple_media_manager_create_output_windo + if (g_object_class_find_property(klass, + "sync")) + g_object_set(G_OBJECT(ow->sink), +- "sync", "FALSE", NULL); ++ "sync", FALSE, NULL); + if (g_object_class_find_property(klass, + "async")) + g_object_set(G_OBJECT(ow->sink), +@@ -803,7 +843,7 @@ purple_media_manager_create_output_windo + } + + gst_bin_add_many(GST_BIN(GST_ELEMENT_PARENT(tee)), +- queue, colorspace, ow->sink, NULL); ++ queue, convert, ow->sink, NULL); + + bus = gst_pipeline_get_bus(GST_PIPELINE( + manager->priv->pipeline)); +@@ -812,10 +852,10 @@ purple_media_manager_create_output_windo + gst_object_unref(bus); + + gst_element_set_state(ow->sink, GST_STATE_PLAYING); +- gst_element_set_state(colorspace, GST_STATE_PLAYING); ++ gst_element_set_state(convert, GST_STATE_PLAYING); + gst_element_set_state(queue, GST_STATE_PLAYING); +- gst_element_link(colorspace, ow->sink); +- gst_element_link(queue, colorspace); ++ gst_element_link(convert, ow->sink); ++ gst_element_link(queue, convert); + gst_element_link(tee, queue); + } + } +Index: pidgin/pidgin/Makefile.am +=================================================================== +--- pidgin.orig/pidgin/Makefile.am ++++ pidgin/pidgin/Makefile.am +@@ -151,6 +151,7 @@ pidgin_LDADD = \ + $(GLIB_LIBS) \ + $(DBUS_LIBS) \ + $(GSTREAMER_LIBS) \ ++ $(GSTVIDEO_LIBS) \ + $(XSS_LIBS) \ + $(SM_LIBS) \ + $(INTLLIBS) \ +Index: pidgin/pidgin/gtkmedia.c +=================================================================== +--- pidgin.orig/pidgin/gtkmedia.c ++++ pidgin/pidgin/gtkmedia.c +@@ -42,7 +42,9 @@ + #include <gdk/gdkwin32.h> + #endif + ++#if !GST_CHECK_VERSION(1,0,0) + #include <gst/interfaces/xoverlay.h> ++#endif + + #define PIDGIN_TYPE_MEDIA (pidgin_media_get_type()) + #define PIDGIN_MEDIA(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PIDGIN_TYPE_MEDIA, PidginMedia)) +@@ -589,6 +591,9 @@ pidgin_media_error_cb(PidginMedia *media + if (conv != NULL) + purple_conversation_write(conv, NULL, error, + PURPLE_MESSAGE_ERROR, time(NULL)); ++ else ++ purple_notify_error(NULL, NULL, _("Media error"), error); ++ + gtk_statusbar_push(GTK_STATUSBAR(gtkmedia->priv->statusbar), + 0, error); + } +Index: pidgin/pidgin/plugins/vvconfig.c +=================================================================== +--- pidgin.orig/pidgin/plugins/vvconfig.c ++++ pidgin/pidgin/plugins/vvconfig.c +@@ -26,7 +26,11 @@ + #include "gtkutils.h" + #include "gtkprefs.h" + ++#if GST_CHECK_VERSION(1,0,0) ++#include <gst/video/videooverlay.h> ++#else + #include <gst/interfaces/propertyprobe.h> ++#endif + + /* container window for showing a stand-alone configurator */ + static GtkWidget *window = NULL; +@@ -81,8 +85,10 @@ get_element_devices(const gchar *element + GList *ret = NULL; + GstElement *element; + GObjectClass *klass; ++#if !GST_CHECK_VERSION(1,0,0) + GstPropertyProbe *probe; + const GParamSpec *pspec; ++#endif + + ret = g_list_prepend(ret, (gpointer)_("Default")); + ret = g_list_prepend(ret, ""); +@@ -103,6 +109,10 @@ get_element_devices(const gchar *element + return g_list_reverse(ret); + } + ++#if GST_CHECK_VERSION(1,0,0) ++ purple_debug_info("vvconfig", "'%s' - gstreamer-1.0 doesn't suport " ++ "property probing\n", element_name); ++#else + if (!g_object_class_find_property(klass, "device") || + !GST_IS_PROPERTY_PROBE(element) || + !(probe = GST_PROPERTY_PROBE(element)) || +@@ -155,6 +165,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS + gst_element_set_state(element, GST_STATE_NULL); + } + } ++#endif + gst_object_unref(element); + + return g_list_reverse(ret); +@@ -168,8 +179,13 @@ get_element_plugins(const gchar **plugin + ret = g_list_prepend(ret, "Default"); + ret = g_list_prepend(ret, ""); + for (; plugins[0] && plugins[1]; plugins += 2) { ++#if GST_CHECK_VERSION(1,0,0) ++ if (gst_registry_check_feature_version(gst_registry_get(), ++ plugins[0], 0, 0, 0)) { ++#else + if (gst_default_registry_check_feature_version( + plugins[0], 0, 0, 0)) { ++#endif + ret = g_list_prepend(ret, (gpointer)plugins[1]); + ret = g_list_prepend(ret, (gpointer)plugins[0]); + } +@@ -588,7 +604,13 @@ gst_msg_db_to_percent(GstMessage *msg, g + + list = gst_structure_get_value( + gst_message_get_structure(msg), value_name); ++#if GST_CHECK_VERSION(1,0,0) ++G_GNUC_BEGIN_IGNORE_DEPRECATIONS ++ value = g_value_array_get_nth(g_value_get_boxed(list), 0); ++G_GNUC_END_IGNORE_DEPRECATIONS ++#else + value = gst_value_list_get_value(list, 0); ++#endif + value_db = g_value_get_double(value); + percent = pow(10, value_db / 20); + return (percent > 1.0) ? 1.0 : percent; +@@ -604,7 +626,7 @@ static gboolean + gst_bus_cb(GstBus *bus, GstMessage *msg, BusCbCtx *ctx) + { + if (GST_MESSAGE_TYPE(msg) == GST_MESSAGE_ELEMENT && +- gst_structure_has_name(msg->structure, "level")) { ++ gst_structure_has_name(gst_message_get_structure(msg), "level")) { + + GstElement *src = GST_ELEMENT(GST_MESSAGE_SRC(msg)); + gchar *name = gst_element_get_name(src); diff --git a/debian/patches/series b/debian/patches/series index e69de29..4d42b6b 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -0,0 +1 @@ +pidgin-2.10.11-gstreamer1-debian.patch diff --git a/debian/rules b/debian/rules index 8a6518f..2ea6c15 100755 --- a/debian/rules +++ b/debian/rules @@ -3,6 +3,7 @@ export DEB_BUILD_HARDENING=1 include /usr/share/cdbs/1/class/autotools.mk +include /usr/share/cdbs/1/rules/autoreconf.mk include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/gnome.mk include /usr/share/cdbs/1/rules/utils.mk -- 2.1.4
From 6469a3265f1955243b7b053da99ef057992dd4ce Mon Sep 17 00:00:00 2001 From: Bernhard Schmidt <bernhard.schm...@lrz.de> Date: Wed, 9 Sep 2015 00:48:50 +0200 Subject: [PATCH 2/2] add DEP3 header to patch --- debian/patches/pidgin-2.10.11-gstreamer1-debian.patch | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/patches/pidgin-2.10.11-gstreamer1-debian.patch b/debian/patches/pidgin-2.10.11-gstreamer1-debian.patch index 66f09f1..43b2890 100644 --- a/debian/patches/pidgin-2.10.11-gstreamer1-debian.patch +++ b/debian/patches/pidgin-2.10.11-gstreamer1-debian.patch @@ -1,3 +1,9 @@ +Description: Support GStreamer 1.x + . + The context of the original patch has been adjusted +Forwarded: not-needed +Origin: vendor, http://pkgs.fedoraproject.org/cgit/pidgin.git/tree/pidgin-2.10.11-gstreamer1.patch +Bug-Debian: http://bugs.debian.org/785926 # HG changeset patch # User David Woodhouse <david.woodho...@intel.com> -- 2.1.4
signature.asc
Description: Digital signature