Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/hardware
diff options
context:
space:
mode:
authorMartin Dengler <martin@martindengler.com>2008-05-30 15:07:09 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2008-06-02 11:02:49 (GMT)
commit5c55340f6d337751ae6e1ec79615108099da0d2c (patch)
tree2d9198f04133473d78f17edb44052d7423d10b70 /src/hardware
parentb0de0f455dc67f58eeebac40746de05981846bb3 (diff)
Fix #6994 - Add speaker device and icon by default, as in
http://wiki.laptop.org/go/Designs/Frame#07
Diffstat (limited to 'src/hardware')
-rw-r--r--src/hardware/hardwaremanager.py31
1 files changed, 28 insertions, 3 deletions
diff --git a/src/hardware/hardwaremanager.py b/src/hardware/hardwaremanager.py
index 5b9e330..87d79c1 100644
--- a/src/hardware/hardwaremanager.py
+++ b/src/hardware/hardwaremanager.py
@@ -50,6 +50,13 @@ class HardwareManager(object):
if track.flags & gst.interfaces.MIXER_TRACK_MASTER:
self._master = track
+ def get_muted(self):
+ if not self._mixer or not self._master:
+ logging.error('Cannot get the mute status')
+ return True
+ return self._master.flags & gst.interfaces.MIXER_TRACK_MUTE \
+ == gst.interfaces.MIXER_TRACK_MUTE
+
def get_volume(self):
if not self._mixer or not self._master:
logging.error('Cannot get the volume')
@@ -57,9 +64,19 @@ class HardwareManager(object):
max_volume = self._master.max_volume
min_volume = self._master.min_volume
- volume = self._mixer.get_volume(self._master)[0]
- return volume * 100.0 / (max_volume - min_volume) + min_volume
+ volumes = self._mixer.get_volume(self._master)
+
+ #sometimes we get a spurious zero from one/more channel(s)
+ #TODO: consider removing this when trac #6933 is resolved
+ nonzero_volumes = [v for v in volumes if v > 0]
+
+ if len(nonzero_volumes) > 0:
+ #we could just pick the first nonzero volume, but this converges
+ volume = sum(nonzero_volumes) / len(nonzero_volumes)
+ return volume * 100.0 / (max_volume - min_volume) + min_volume
+ else:
+ return 0
def set_volume(self, volume):
if not self._mixer or not self._master:
@@ -76,7 +93,15 @@ class HardwareManager(object):
volume = volume * (max_volume - min_volume) / 100.0 + min_volume
volume_list = [ volume ] * self._master.num_channels
- self._mixer.set_volume(self._master, tuple(volume_list))
+ #sometimes alsa sets one/more channels' volume to zero instead
+ # of what we asked for, so try a few times
+ #TODO: consider removing this loop when trac #6934 is resolved
+ last_volumes_read = [0]
+ read_count = 0
+ while (0 in last_volumes_read) and (read_count < 3):
+ self._mixer.set_volume(self._master, tuple(volume_list))
+ last_volumes_read = self._mixer.get_volume(self._master)
+ read_count += 1
def set_mute(self, mute):
if not self._mixer or not self._master: