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

List:       kde-commits
Subject:    KDE/kdemultimedia/kmix
From:       Christian Esken <esken () kde ! org>
Date:       2009-01-18 20:38:05
Message-ID: 1232311085.256609.15796.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 913136 by esken:

Implementing the multi-channel functionality for the capture.
This version is intended as test version for bug 180378.
CCBGUGS: 180378


 M  +60 -27    mixer_alsa9.cpp  


--- trunk/KDE/kdemultimedia/kmix/mixer_alsa9.cpp #913135:913136
@@ -700,7 +700,7 @@
         return 0;
     }
 
-
+    vol = Volume::MNONE;
     // --- playback volume
     if ( snd_mixer_selem_has_playback_volume( elem ) ) {
         for ( int i=0; i<= Volume::CHIDMAX; i++ ) {
@@ -717,7 +717,7 @@
                    case Volume::WOOFER       : ret = \
                snd_mixer_selem_get_playback_volume( elem, SND_MIXER_SCHN_WOOFER      \
                , &vol); break;
                    case Volume::REARSIDELEFT : ret = \
                snd_mixer_selem_get_playback_volume( elem, SND_MIXER_SCHN_SIDE_LEFT   \
                , &vol); break;
                    case Volume::REARSIDERIGHT: ret = \
                snd_mixer_selem_get_playback_volume( elem, SND_MIXER_SCHN_SIDE_RIGHT  \
                , &vol); break;
-                   default: kDebug() << "FATAL: Unknown channel type << " << i << " \
... please report this";  break; +                   default: kDebug() << "FATAL: \
Unknown channel type for playback << " << i << " ... please report this";  break;  }
               if ( ret != 0 ) kDebug(67100) << "readVolumeFromHW(" << devnum << ") \
[get_playback_volume] failed, errno=" << ret;  else volumePlayback.setVolume( \
(Volume::ChannelID)i, vol); @@ -733,23 +733,25 @@
         md->setMuted( elem_sw == 0 );
     }
 
+    vol = Volume::MNONE;
     // --- capture volume
     if ( snd_mixer_selem_has_capture_volume ( elem ) )
     {
         for ( int i=0; i<= Volume::CHIDMAX; i++ ) {
-           if ( volumeCapture._chmask && Volume::_channelMaskEnum[i] ) {
+           if ( volumeCapture._chmask & Volume::_channelMaskEnum[i] ) {
 
                int ret;
                switch(i) {
-                   case Volume::MLEFT         : ret = \
                snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_FRONT_LEFT  \
                , &vol); break;
-                   case Volume::MRIGHT        : ret = \
                snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_FRONT_RIGHT \
                , &vol); break;
-                   case Volume::MCENTER       : ret = \
                snd_mixer_selem_get_capture_volume( elem, \
                SND_MIXER_SCHN_FRONT_CENTER, &vol); break;
-                   case Volume::MSURROUNDLEFT : ret = \
                snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_REAR_LEFT   \
                , &vol); break;
-                   case Volume::MSURROUNDRIGHT: ret = \
                snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_REAR_RIGHT  \
                , &vol); break;
-                   case Volume::MREARCENTER   : ret = \
                snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_REAR_CENTER \
                , &vol); break;
-                   case Volume::MWOOFER       : ret = \
                snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_WOOFER      \
                , &vol); break;
-                   case Volume::MREARSIDELEFT : ret = \
                snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_SIDE_LEFT   \
                , &vol); break;
-                   case Volume::MREARSIDERIGHT: ret = \
snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_SIDE_RIGHT  , &vol); break; \
+                   case Volume::LEFT         : ret = \
snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_FRONT_LEFT  , &vol); break; \
+                   case Volume::RIGHT        : ret = \
snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_FRONT_RIGHT , &vol); break; \
+                   case Volume::CENTER       : ret = \
snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_FRONT_CENTER, &vol); break; \
+                   case Volume::SURROUNDLEFT : ret = \
snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_REAR_LEFT   , &vol); break; \
+                   case Volume::SURROUNDRIGHT: ret = \
snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_REAR_RIGHT  , &vol); break; \
+                   case Volume::REARCENTER   : ret = \
snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_REAR_CENTER , &vol); break; \
+                   case Volume::WOOFER       : ret = \
snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_WOOFER      , &vol); break; \
+                   case Volume::REARSIDELEFT : ret = \
snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_SIDE_LEFT   , &vol); break; \
+                   case Volume::REARSIDERIGHT: ret = \
snd_mixer_selem_get_capture_volume( elem, SND_MIXER_SCHN_SIDE_RIGHT  , &vol);     \
break; +                   default: kDebug() << "FATAL: Unknown channel type for \
capture << " << i << " ... please report this";  break;  }
               if ( ret != 0 ) kDebug(67100) << "readVolumeFromHW(" << devnum << ") \
[get_capture_volume] failed, errno=" << ret;  volumeCapture.setVolume( \
(Volume::ChannelID)i, vol); @@ -774,7 +776,6 @@
     Volume& volumeCapture  = md->captureVolume();
 
     int devnum = id2num(id);
-    int left, right;
 
     snd_mixer_elem_t *elem = getMixerElem( devnum );
     if ( !elem )
@@ -783,14 +784,29 @@
     }
 
     // --- playback volume
-    left  = volumePlayback[ Volume::LEFT ];
-    right = volumePlayback[ Volume::RIGHT ];
-    if (snd_mixer_selem_has_playback_volume( elem ) ) {
-        snd_mixer_selem_set_playback_volume ( elem, SND_MIXER_SCHN_FRONT_LEFT, left \
                );
-        if ( ! snd_mixer_selem_is_playback_mono ( elem ) )
-            snd_mixer_selem_set_playback_volume ( elem, SND_MIXER_SCHN_FRONT_RIGHT, \
                right );
-    }
+    if ( snd_mixer_selem_has_playback_volume( elem ) ) {
+        for ( int i=0; i<= Volume::CHIDMAX; i++ ) {
+           if ( volumePlayback._chmask & Volume::_channelMaskEnum[i] ) {
 
+               int ret;
+               switch(i) {
+                   case Volume::LEFT         : ret = \
snd_mixer_selem_set_playback_volume( elem, SND_MIXER_SCHN_FRONT_LEFT  , \
volumePlayback[i]); break; +                   case Volume::RIGHT        : ret = \
snd_mixer_selem_set_playback_volume( elem, SND_MIXER_SCHN_FRONT_RIGHT , \
volumePlayback[i]); break; +                   case Volume::CENTER       : ret = \
snd_mixer_selem_set_playback_volume( elem, SND_MIXER_SCHN_FRONT_CENTER, \
volumePlayback[i]); break; +                   case Volume::SURROUNDLEFT : ret = \
snd_mixer_selem_set_playback_volume( elem, SND_MIXER_SCHN_REAR_LEFT   , \
volumePlayback[i]); break; +                   case Volume::SURROUNDRIGHT: ret = \
snd_mixer_selem_set_playback_volume( elem, SND_MIXER_SCHN_REAR_RIGHT  , \
volumePlayback[i]); break; +                   case Volume::REARCENTER   : ret = \
snd_mixer_selem_set_playback_volume( elem, SND_MIXER_SCHN_REAR_CENTER , \
volumePlayback[i]); break; +                   case Volume::WOOFER       : ret = \
snd_mixer_selem_set_playback_volume( elem, SND_MIXER_SCHN_WOOFER      , \
volumePlayback[i]); break; +                   case Volume::REARSIDELEFT : ret = \
snd_mixer_selem_set_playback_volume( elem, SND_MIXER_SCHN_SIDE_LEFT   , \
volumePlayback[i]); break; +                   case Volume::REARSIDERIGHT: ret = \
snd_mixer_selem_set_playback_volume( elem, SND_MIXER_SCHN_SIDE_RIGHT  , \
volumePlayback[i]); break; +                   default: kDebug() << "FATAL: Unknown \
channel type for playback << " << i << " ... please report this";  break; +           \
} +              if ( ret != 0 ) kDebug(67100) << "writeVolumeToHW(" << devnum << ") \
[set_playback_volume] failed, errno=" << ret; +              if (id== "Master:0" || \
id== "PCM:0" ) { kDebug() << "volumePlayback control=" << id << ", chid=" << i << ", \
vol=" << volumePlayback[i]; } +          }
+       }
+    } // has playback volume
+
     // --- playback switch
     if ( snd_mixer_selem_has_playback_switch( elem ) ||
          snd_mixer_selem_has_common_switch  ( elem )   )
@@ -801,15 +817,32 @@
         snd_mixer_selem_set_playback_switch_all(elem, sw);
     }
 
+
     // --- capture volume
-    left  = volumeCapture[ Volume::LEFT ];
-    right = volumeCapture[ Volume::RIGHT ];
-    if ( snd_mixer_selem_has_capture_volume( elem )) {
-        snd_mixer_selem_set_capture_volume ( elem, SND_MIXER_SCHN_FRONT_LEFT, left \
                );
-        if ( ! snd_mixer_selem_is_playback_mono ( elem ) )
-            snd_mixer_selem_set_capture_volume ( elem, SND_MIXER_SCHN_FRONT_RIGHT, \
                right );
-    }
+    if ( snd_mixer_selem_has_capture_volume ( elem ) )
+    {
+        for ( int i=0; i<= Volume::CHIDMAX; i++ ) {
+           if ( volumeCapture._chmask & Volume::_channelMaskEnum[i] ) {
 
+               int ret;
+               switch(i) {
+                   case Volume::LEFT         : ret = \
snd_mixer_selem_set_capture_volume( elem, SND_MIXER_SCHN_FRONT_LEFT  , \
volumeCapture[i]); break; +                   case Volume::RIGHT        : ret = \
snd_mixer_selem_set_capture_volume( elem, SND_MIXER_SCHN_FRONT_RIGHT , \
volumeCapture[i]); break; +                   case Volume::CENTER       : ret = \
snd_mixer_selem_set_capture_volume( elem, SND_MIXER_SCHN_FRONT_CENTER, \
volumeCapture[i]); break; +                   case Volume::SURROUNDLEFT : ret = \
snd_mixer_selem_set_capture_volume( elem, SND_MIXER_SCHN_REAR_LEFT   , \
volumeCapture[i]); break; +                   case Volume::SURROUNDRIGHT: ret = \
snd_mixer_selem_set_capture_volume( elem, SND_MIXER_SCHN_REAR_RIGHT  , \
volumeCapture[i]); break; +                   case Volume::REARCENTER   : ret = \
snd_mixer_selem_set_capture_volume( elem, SND_MIXER_SCHN_REAR_CENTER , \
volumeCapture[i]); break; +                   case Volume::WOOFER       : ret = \
snd_mixer_selem_set_capture_volume( elem, SND_MIXER_SCHN_WOOFER      , \
volumeCapture[i]); break; +                   case Volume::REARSIDELEFT : ret = \
snd_mixer_selem_set_capture_volume( elem, SND_MIXER_SCHN_SIDE_LEFT   , \
volumeCapture[i]); break; +                   case Volume::REARSIDERIGHT: ret = \
snd_mixer_selem_set_capture_volume( elem, SND_MIXER_SCHN_SIDE_RIGHT  , \
volumeCapture[i]); break; +                   default: kDebug() << "FATAL: Unknown \
channel type for capture << " << i << " ... please report this";  break; +            \
} +              if ( ret != 0 ) kDebug(67100) << "writeVolumeToHW(" << devnum << ") \
[set_capture_volume] failed, errno=" << ret; +              if (id== "Master:0" || \
id== "PCM:0" ) { kDebug() << "volumecapture control=" << id << ", chid=" << i << ", \
vol=" << volumeCapture[i]; } +          }
+       }
+    } // has capture volume
+
     // --- capture switch
     if ( snd_mixer_selem_has_capture_switch( elem ) ) {
         //  Hint: snd_mixer_selem_has_common_switch() is already covered in the \
playback .


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

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