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==--