[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdemultimedia/kmix
From:       Christian Esken <esken () kde ! org>
Date:       2005-02-04 21:33:56
Message-ID: 20050204213356.AD5481D00E () office ! kde ! org
[Download RAW message or body]

CVS commit by esken: 

DCOP calls decreaseVolume() and increaseVolume() are now more precise (by doing \
better internal rounding). This fixes the problem with users who experience "strange" \
results on those DCOP calls. Also this fixes an interoperability problem with KMilo.
BUG: 66537


  M +38 -0     mixer.cpp   1.89
  M +2 -1      volume.h   1.12


--- kdemultimedia/kmix/mixer.cpp  #1.88:1.89
@@ -31,4 +31,5 @@
 #include "mixer.h"
 #include "kmix-platforms.cpp"
+#include "volume.h"
 
 
@@ -516,6 +517,21 @@ int Mixer::masterVolume()
 void Mixer::increaseVolume( int deviceidx )
 {
+  MixDevice *mixdev= mixDeviceByType( deviceidx );
+  if (mixdev != 0) {
+     Volume vol=mixdev->getVolume();
+     double fivePercent = vol.maxVolume() / 20;
+     for (unsigned int i=Volume::CHIDMIN; i <= Volume::CHIDMAX; i++) {
+        int volToChange = vol.getVolume((Volume::ChannelID)i);
+        if ( fivePercent < 1 ) fivePercent = 1;
+        volToChange += (int)fivePercent;
+        vol.setVolume((Volume::ChannelID)i, volToChange);
+     }
+     writeVolumeToHW(deviceidx, vol);
+  }
+
+  /* see comment at the end of decreaseVolume()
   int vol=volume(deviceidx);
   setVolume(deviceidx, vol+5);
+  */
 }
 
@@ -523,6 +539,28 @@ void Mixer::increaseVolume( int deviceid
 void Mixer::decreaseVolume( int deviceidx )
 {
+  MixDevice *mixdev= mixDeviceByType( deviceidx );
+  if (mixdev != 0) {
+     Volume vol=mixdev->getVolume();
+     double fivePercent = vol.maxVolume() / 20;
+     for (unsigned int i=Volume::CHIDMIN; i <= Volume::CHIDMAX; i++) {
+        int volToChange = vol.getVolume((Volume::ChannelID)i);
+        std::cout << "Mixer::decreaseVolume(): before: volToChange " <<i<< "=" \
<<volToChange << std::endl; +        if ( fivePercent < 1 ) fivePercent = 1;
+        volToChange -= (int)fivePercent;
+        std::cout << "Mixer::decreaseVolume():  after: volToChange " <<i<< "=" \
<<volToChange << std::endl; +        vol.setVolume((Volume::ChannelID)i, \
volToChange); +        int volChanged = vol.getVolume((Volume::ChannelID)i);
+        std::cout << "Mixer::decreaseVolume():  check: volChanged " <<i<< "=" \
<<volChanged << std::endl; +     } // for
+     writeVolumeToHW(deviceidx, vol);
+  }
+
+  /************************************************************
+    It is important, not to implement this method like this: this->volume()
   int vol=volume(deviceidx);
   setVolume(deviceidx, vol-5);
+     It creates too big rounding errors. If you don't beleive me, then
+     do a decreaseVolume() and increaseVolume() with "vol.maxVolume() == 31".
+   ***********************************************************/
 }
 

--- kdemultimedia/kmix/volume.h  #1.11:1.12
@@ -21,5 +21,6 @@ class Volume
 
 
- enum ChannelID { LEFT     = 0, RIGHT     = 1, CENTER = 2,
+ enum ChannelID { CHIDMIN  = 0,
+                  LEFT     = 0, RIGHT     = 1, CENTER = 2,
                   REARLEFT = 3, REARRIGHT = 4, WOOFER = 5,
                   LEFTREC  = 6, RIGHTREC  = 7,


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic