Bug#252505: Can't change volume

Sjoerd Simons Sjoerd Simons <sjoerd@luon.net>, 252505@bugs.debian.org
Thu, 03 Jun 2004 22:14:49 +0200


This is a multi-part MIME message sent by reportbug.

--===============0727302814==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Package: capplets
Version: 1:2.6.1-3
Severity: normal
Tags: patch

Hi,

  The current gstreamer volume code in g-s-d has some problems. First of all it
  looks for a mixer track with name 'volume', on alsa devices there is no such
  track.

  Also if gstreamer can't open a mixer it falls back to a nop device, while it
  could still try alsa and oss..

  Attached patch fixes both problems

  Sjoerd
-- System Information:
Debian Release: testing/unstable
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: powerpc (ppc)
Kernel: Linux 2.6.6-spring
Locale: LANG=C, LC_CTYPE=nl_NL@euro

Versions of packages capplets depends on:
ii  capplets-data             1:2.6.1-3      configuration applets for GNOME 2 
ii  gnome-control-center      1:2.6.1-3      The GNOME Control Center for GNOME
ii  gnome-desktop-data        2.6.1-2        Common files for GNOME 2 desktop a
ii  gnome-icon-theme          1.2.1-2        GNOME Desktop icon theme
ii  gnome-panel               2.6.1-4        Launch and/or dock GNOME 2 applica
ii  gnome-session             2.6.1-5        The GNOME 2 Session Manager
ii  libart-2.0-2              2.3.16-5       Library of functions for 2D graphi
ii  libasound2                1.0.4-1        Advanced Linux Sound Architecture 
ii  libatk1.0-0               1.6.1-2        The ATK accessibility toolkit
ii  libaudiofile0             0.2.6-3        Open-source version of SGI's audio
ii  libbonobo2-0              2.6.0-2        Bonobo CORBA interfaces library
ii  libbonoboui2-0            2.6.1-1        The Bonobo UI library
ii  libc6                     2.3.2.ds1-13   GNU C Library: Shared libraries an
ii  libeel2-2                 2.6.1-3        Eazel Extensions Library (for GNOM
ii  libesd-alsa0 [libesd0]    0.2.29-1       Enlightened Sound Daemon (ALSA) - 
ii  libfontconfig1            2.2.2-2        generic font configuration library
ii  libfreetype6              2.1.7-2        FreeType 2 font engine, shared lib
ii  libgail-common            1.4.1-1        GNOME Accessibility Implementation
ii  libgail17                 1.4.1-1        GNOME Accessibility Implementation
ii  libgconf2-4               2.6.1-2        GNOME configuration database syste
ii  libgcrypt7                1.1.90-1.1     LGPL Crypto library - runtime libr
ii  libglade2-0               1:2.4.0-1      Library to load .glade files at ru
ii  libglib2.0-0              2.4.1-2        The GLib library of C routines
ii  libgnome-desktop-2        2.6.1-2        Utility library for loading .deskt
ii  libgnome-keyring0         0.2.1-2        GNOME keyring services library
ii  libgnome2-0               2.6.1-2        The GNOME 2 library - runtime file
ii  libgnomecanvas2-0         2.6.1.1-2      A powerful object-oriented display
ii  libgnomeui-0              2.6.1.1-2      The GNOME 2 libraries (User Interf
ii  libgnomevfs2-0            2.6.1.1-3      The GNOME virtual file-system libr
ii  libgnutls10               1.0.4-3        GNU TLS library - runtime library
ii  libgpg-error0             0.7-1          library for common error values an
ii  libgstreamer-plugins0.8-0 0.8.1-2        Various GStreamer libraries and li
ii  libgstreamer0.8-0         0.8.1-2        Core GStreamer libraries, plugins,
ii  libgtk2.0-0               2.4.1-4        The GTK+ graphical user interface 
ii  libice6                   4.3.0.dfsg.1-4 Inter-Client Exchange library
ii  libjpeg62                 6b-9           The Independent JPEG Group's JPEG 
ii  libmetacity0              1:2.8.1-3      Common library of lightweight GTK2
ii  libnautilus2-2            2.6.1-3        libraries for nautilus components 
ii  liborbit2                 1:2.10.2-1.1   libraries for ORBit2 - a CORBA ORB
ii  libpango1.0-0             1.4.0-3        Layout and rendering of internatio
ii  libpopt0                  1.7-4          lib for parsing cmdline parameters
ii  libsm6                    4.3.0.dfsg.1-4 X Window System Session Management
ii  libstartup-notification0  0.6-2          library for program launch feedbac
ii  libtasn1-2                0.2.7-2        Manage ASN.1 structures (runtime)
ii  libx11-6                  4.3.0.dfsg.1-4 X Window System protocol client li
ii  libxext6                  4.3.0.dfsg.1-4 X Window System miscellaneous exte
ii  libxft2                   2.1.2-6        FreeType-based font drawing librar
ii  libxklavier8              1.02-2         X Keyboard Extension high-level AP
ii  libxml2                   2.6.10-2       GNOME XML library
ii  libxrandr2                4.3.0.dfsg.1-4 X Window System Resize, Rotate and
ii  libxrender1               0.8.3-7        X Rendering Extension client libra
ii  nautilus                  2.6.1-3        file manager and graphical shell f
ii  xlibs                     4.3.0.dfsg.1-4 X Window System client libraries m
ii  zlib1g                    1:1.2.1.1-3    compression library - runtime

-- no debconf information

--===============0727302814==
Content-Type: text/x-c; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="gstreamer-fix.patch"

--- gnome-settings-daemon/actions/acme-volume.c.orig	2004-06-03 21:41:35.000000000 +0200
+++ gnome-settings-daemon/actions/acme-volume.c	2004-06-03 21:33:06.000000000 +0200
@@ -124,7 +124,9 @@
 
 #ifdef HAVE_GSTREAMER
 	vol = ACME_VOLUME (g_object_new (acme_volume_gstreamer_get_type (), NULL));
-	return vol;
+  if (vol != NULL && ACME_VOLUME_GSTREAMER(vol)->_priv != NULL)
+	  return vol;
+  g_object_unref(vol);
 #endif
 #ifdef HAVE_ALSA
 	vol = ACME_VOLUME  (g_object_new (acme_volume_alsa_get_type (), NULL));
--- gnome-settings-daemon/actions/acme-volume-gstreamer.c.orig	2004-06-03 21:41:25.000000000 +0200
+++ gnome-settings-daemon/actions/acme-volume-gstreamer.c	2004-06-03 21:35:51.000000000 +0200
@@ -52,14 +52,13 @@
 
 	self = ACME_VOLUME_GSTREAMER (object);
 
-	g_return_if_fail (self->_priv != NULL);
-
-	if (self->_priv->mixer != NULL) {
-		g_object_unref (self->_priv->mixer);
-		g_object_unref (self->_priv->track);
-	}
-
-	g_free (self->_priv);
+  if (self->_priv != NULL) {
+	  if (self->_priv->mixer != NULL) {
+	  	g_object_unref (self->_priv->mixer);
+  		g_object_unref (self->_priv->track);
+  	}
+	  g_free (self->_priv);
+  }
 
 	G_OBJECT_CLASS (parent_class)->finalize (object);
 }
@@ -69,7 +68,7 @@
 {
 	AcmeVolumeGStreamer *self = (AcmeVolumeGStreamer *) vol;
 
-	if (self->_priv->mixer == NULL)
+	if (self->_priv == NULL)
 		return;
 
 	gst_mixer_set_mute (self->_priv->mixer,
@@ -82,7 +81,7 @@
 {
 	AcmeVolumeGStreamer *self = (AcmeVolumeGStreamer *) vol;
 
-	if (self->_priv->mixer == NULL)
+	if (self->_priv == NULL)
 		return FALSE;
 
 	return GST_MIXER_TRACK_HAS_FLAG (self->_priv->track,
@@ -97,7 +96,7 @@
 	AcmeVolumeGStreamer *self = (AcmeVolumeGStreamer *) vol;
 	GstMixerTrack *track;
 	
-	if (self->_priv->mixer == NULL)
+	if (self->_priv == NULL)
 		return 0;
 
 	track = self->_priv->track;
@@ -122,11 +121,12 @@
 	gint i, *volumes;
 	double volume;
 	AcmeVolumeGStreamer *self = (AcmeVolumeGStreamer *) vol;
-	GstMixerTrack *track = self->_priv->track;
+	GstMixerTrack *track;
 
-	if (self->_priv->mixer == NULL)
+	if (self->_priv == NULL)
 		return;
-
+  track = self->_priv->track;
+  
 	val = CLAMP (val, 0, 100);
 
 	/* Rescale the volume from [0, 100] to [track min, track max]. */
@@ -147,8 +147,6 @@
 	const GList *elements;
 	gint num = 0, channel_count = 0;
 
-	self->_priv = g_new0 (AcmeVolumeGStreamerPrivate, 1);
-
 	/* Go through all elements of a certain class and check whether
 	 * they implement a mixer. If so, walk through the tracks and look
 	 * for first one named "volume".
@@ -158,7 +156,7 @@
 	 * just becomes a no-op.
 	 */
 	elements = gst_registry_pool_feature_list (GST_TYPE_ELEMENT_FACTORY);
-	for ( ; elements != NULL && self->_priv->mixer == NULL; elements = elements->next) {
+	for ( ; elements != NULL && self->_priv == NULL; elements = elements->next) {
 		GstElementFactory *factory = GST_ELEMENT_FACTORY (elements->data);
 		gchar *title = NULL;
 		const gchar *klass;
@@ -211,7 +209,10 @@
 			for (; tracks != NULL; tracks = tracks->next) {
 				GstMixerTrack *track = tracks->data;
 				
-				if (! g_strcasecmp (track->label, "volume")) {
+				if (! g_strcasecmp (track->label, "volume") ||
+            ! g_strcasecmp (track->label, "master")) {
+	        self->_priv = g_new0 (AcmeVolumeGStreamerPrivate, 1);
+
 					self->_priv->mixer = GST_MIXER (element);
 					self->_priv->track = track;
 

--===============0727302814==--