Diffstat (limited to 'libopie2/opiemm/osoundsystem.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | libopie2/opiemm/osoundsystem.cpp | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/libopie2/opiemm/osoundsystem.cpp b/libopie2/opiemm/osoundsystem.cpp index 13b26e6..09fd28f 100644 --- a/libopie2/opiemm/osoundsystem.cpp +++ b/libopie2/opiemm/osoundsystem.cpp @@ -193,9 +193,9 @@ void OMixerInterface::init() // open the device _fd = ::open( name(), O_RDWR ); if ( _fd == -1 ) { - owarn << "OMixerInterface::init(): Can't open mixer." << oendl; + owarn << "OMixerInterface::init(): Can't open mixer " << name() << oendl; return; } // construct the device capabilities @@ -238,8 +238,14 @@ void OMixerInterface::init() if ( devmask & ( 1 << SOUND_MIXER_OGAIN ) ) _channels.insert( "RecOutputGain", SOUND_MIXER_OGAIN ); //odebug << "recmask available and constructed." << oendl; } + devmask = 0; + if ( ioctl( _fd, SOUND_MIXER_READ_STEREODEVS, &devmask ) != -1 ) + { + odebug << "stereomask = " << devmask << oendl; + } + /* ChannelIterator it; for ( it = _channels.begin(); it != _channels.end(); ++it ) { odebug << "Channel " << it.key() << " available (bit " << it.data() << ")" << oendl; @@ -274,14 +280,29 @@ QStringList OMixerInterface::playChannels() const return QStringList(); } -bool OMixerInterface::hasChannel( const QString& channel ) +bool OMixerInterface::hasChannel( const QString& channel ) const { return _channels.contains( channel ); } +bool OMixerInterface::isStereo( const QString& channel ) const +{ + bool result = false; + if ( _channels.contains( channel ) ) + { + int devmask = 0; + if ( ioctl( _fd, SOUND_MIXER_READ_STEREODEVS, &devmask ) != -1 ) + { + result = devmask & ( 1 << _channels[channel] ); + } + } + return result; +} + + void OMixerInterface::setVolume( const QString& channel, int left, int right ) { int volume = left; volume |= ( right == -1 ) ? left << 8 : right << 8; |