diff --git a/ChangeLog b/ChangeLog index 7a0c4df6e..c7eb4b3f9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-01-15 Sebastien Bacher + + * configure.in: optional use of gstreamer0.10, patch based on the work + done by Saleem Abdulrasool and Tim-Philipp Müller (Fixes: #326257) + 2006-01-14 Chao-Hsiung Liao * configure.in: Add "zh_HK" to ALL_LINGUAS. diff --git a/configure.in b/configure.in index 46fd21e4c..8be9cd201 100644 --- a/configure.in +++ b/configure.in @@ -462,25 +462,49 @@ AC_SUBST(ALSA_CFLAGS) dnl ============================================== dnl GStreamer section dnl ============================================== +GST_MAJORMINOR=auto + AC_ARG_ENABLE(gstreamer, -AC_HELP_STRING([--enable-gstreamer],[use gstreamer, if available]), +AC_HELP_STRING([--enable-gstreamer],[use gstreamer, if available (and optionally specify a version)]), [case "${enableval}" in yes) ENABLE_GSTREAMER=yes ;; + 0.8) ENABLE_GSTREAMER=yes && GST_MAJORMINOR=0.8 ;; + 0.10) ENABLE_GSTREAMER=yes && GST_MAJORMINOR=0.10 ;; no) ENABLE_GSTREAMER=no ;; - *) AC_MSG_ERROR(bad value ${enableval} for --enable-gstreamer) ;; + *) AC_MSG_ERROR([ + *** Bad value ${enableval} for --enable-gstreamer + *** Please use one of the following: + *** --enable-gstreamer=0.8 + *** --enable-gstreamer=0.10 + ]) ;; esac], [ENABLE_GSTREAMER=yes]) dnl Default value if test "x$ENABLE_GSTREAMER" = "xyes"; then have_gstreamer=no - PKG_CHECK_MODULES(GST, gstreamer-interfaces-0.8 >= 0.8.0, - have_gstreamer=yes, - AC_MSG_RESULT(*** All of GStreamer dependent parts will be disabled ***)) + if test x$GST_MAJORMINOR = xauto ; then + PKG_CHECK_MODULES(GST, gstreamer-0.8,[GST_MAJORMINOR=0.8],[GST_MAJORMINOR=0.10]) + fi + + if test x$GST_MAJORMINOR = x0.8 ; then + GST_REQS=0.8.0 + PKGS="gstreamer-0.8 >= $GST_REQS gstreamer-interfaces-0.8 >= $GST_REQS" + else + GST_REQS=0.10.2 + PKGS="gstreamer-0.10 >= $GST_REQS gstreamer-plugins-base-0.10 >= $GST_REQS" + fi + + PKG_CHECK_MODULES(GST, $PKGS, have_gstreamer=yes, + AC_MSG_RESULT([*** All of GStreamer dependent parts will be disabled ***])) + if test x$GST_MAJORMINOR = x0.10 ; then + GST_LIBS="$GST_LIBS -lgstinterfaces-0.10 -lgstaudio-0.10" + fi else have_gstreamer=disabled AC_MSG_RESULT(*** GStreamer has been explicitly disabled ***) fi AM_CONDITIONAL(HAVE_GSTREAMER, test x"$have_gstreamer" = "xyes") +AM_CONDITIONAL(HAVE_GST10, test x"$GST_MAJORMINOR" = "x0.10") AC_SUBST(GST_LIBS) AC_SUBST(GST_CFLAGS) diff --git a/gnome-settings-daemon/ChangeLog b/gnome-settings-daemon/ChangeLog index 9148f7d1e..8483a75dc 100644 --- a/gnome-settings-daemon/ChangeLog +++ b/gnome-settings-daemon/ChangeLog @@ -1,3 +1,11 @@ +2006-01-15 Sebastien Bacher + + * actions/Makefile.am: + * actions/acme-volume-gstreamer.c: (_acme_set_mixer), + (acme_volume_gstreamer_open): + optional use of gstreamer0.10, patch based on the work + done by Saleem Abdulrasool and Tim-Philipp Müller (Fixes: #326257) + 2006-01-14 Rodney Dawes * gnome-settings-xsettings.c (xsettings_callback): diff --git a/gnome-settings-daemon/actions/Makefile.am b/gnome-settings-daemon/actions/Makefile.am index 8b7f8c4b1..6f2388559 100644 --- a/gnome-settings-daemon/actions/Makefile.am +++ b/gnome-settings-daemon/actions/Makefile.am @@ -9,6 +9,9 @@ libacme_la_SOURCES = \ libacme_la_LIBADD = if HAVE_GSTREAMER +if HAVE_GST10 +INCLUDES += -DHAVE_GST10 +endif INCLUDES += -DHAVE_GSTREAMER libacme_la_SOURCES += acme-volume-gstreamer.c acme-volume-gstreamer.h libacme_la_LIBADD += $(GST_LIBS) diff --git a/gnome-settings-daemon/actions/acme-volume-gstreamer.c b/gnome-settings-daemon/actions/acme-volume-gstreamer.c index 4d5b8cd0e..42509b0aa 100644 --- a/gnome-settings-daemon/actions/acme-volume-gstreamer.c +++ b/gnome-settings-daemon/actions/acme-volume-gstreamer.c @@ -27,9 +27,15 @@ #include "config.h" #include "acme-volume-gstreamer.h" +#ifdef HAVE_GST10 +#include +#include +#include +#else #include #include #include +#endif #include @@ -214,6 +220,43 @@ acme_volume_gstreamer_close_real (AcmeVolumeGStreamer *self) return FALSE; } +#ifdef HAVE_GST10 +/* + * _acme_set_mixer + * Arguments: mixer - pointer to mixer element + * data - pointer to user data (AcmeVolumeGStreamer to be modified) + * Returns: gboolean indicating success + */ +static gboolean +_acme_set_mixer(GstMixer *mixer, gpointer user_data) +{ + const GList *tracks; + + tracks = gst_mixer_list_tracks (mixer); + + while (tracks != NULL) { + GstMixerTrack *track = GST_MIXER_TRACK (tracks->data); + + if (GST_MIXER_TRACK_HAS_FLAG (track, GST_MIXER_TRACK_MASTER)) { + AcmeVolumeGStreamer *self; + + self = ACME_VOLUME_GSTREAMER (user_data); + + self->_priv->mixer = mixer; + self->_priv->track = track; + + /* no need to ref the mixer element */ + g_object_ref (self->_priv->track); + return TRUE; + } + + tracks = tracks->next; + } + + return FALSE; +} +#endif + /* This is a modified version of code from gnome-media's gst-mixer */ static gboolean acme_volume_gstreamer_open (AcmeVolumeGStreamer *vol) @@ -237,9 +280,24 @@ acme_volume_gstreamer_open (AcmeVolumeGStreamer *vol) * for first one named "volume". * * We should probably do something intelligent if we don't find an - * appropriate mixer/track. But now we do something stupid... everything - * just becomes a no-op. + * appropriate mixer/track. But now we do something stupid... + * everything just becomes a no-op. */ +#ifdef HAVE_GST10 + GList *mixer_list; + + mixer_list = gst_audio_default_registry_mixer_filter (_acme_set_mixer, + TRUE, + self); + + if (mixer_list == NULL) + return FALSE; + + /* do not unref the mixer as we keep the ref for self->priv->mixer */ + g_list_free (mixer_list); + + return TRUE; +#else elements = gst_registry_pool_feature_list (GST_TYPE_ELEMENT_FACTORY); for ( ; elements != NULL && self->_priv->mixer == NULL; elements = elements->next) { GstElementFactory *factory = GST_ELEMENT_FACTORY (elements->data); @@ -321,6 +379,7 @@ acme_volume_gstreamer_open (AcmeVolumeGStreamer *vol) g_free (title); } return FALSE; +#endif } static void