[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