[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