aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Output
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Output')
-rw-r--r--src/plugins/Output/alsa/outputalsa.cpp25
-rw-r--r--src/plugins/Output/alsa/outputalsa.h4
-rw-r--r--src/plugins/Output/oss/outputoss.cpp20
-rw-r--r--src/plugins/Output/oss/outputoss.h4
-rw-r--r--src/plugins/Output/oss4/outputoss4.cpp28
-rw-r--r--src/plugins/Output/oss4/outputoss4.h4
-rw-r--r--src/plugins/Output/waveout/outputwaveout.cpp23
-rw-r--r--src/plugins/Output/waveout/outputwaveout.h7
8 files changed, 49 insertions, 66 deletions
diff --git a/src/plugins/Output/alsa/outputalsa.cpp b/src/plugins/Output/alsa/outputalsa.cpp
index c9ed0eecd..f037d40b8 100644
--- a/src/plugins/Output/alsa/outputalsa.cpp
+++ b/src/plugins/Output/alsa/outputalsa.cpp
@@ -375,31 +375,28 @@ VolumeALSA::~VolumeALSA()
snd_mixer_close(mixer);
}
-void VolumeALSA::setVolume(int channel, int value)
+void VolumeALSA::setVolume(const VolumeSettings &vol)
{
if (!pcm_element)
return;
- _snd_mixer_selem_channel_id channel_id = SND_MIXER_SCHN_FRONT_LEFT;
- if(channel == Volume::RIGHT_CHANNEL)
- channel_id = SND_MIXER_SCHN_FRONT_RIGHT;
-
- snd_mixer_selem_set_playback_volume(pcm_element, channel_id, value);
+ snd_mixer_selem_set_playback_volume(pcm_element, SND_MIXER_SCHN_FRONT_LEFT, vol.left);
+ snd_mixer_selem_set_playback_volume(pcm_element, SND_MIXER_SCHN_FRONT_RIGHT, vol.right);
}
-int VolumeALSA::volume(int channel)
+VolumeSettings VolumeALSA::volume() const
{
+ VolumeSettings vol;
if (!pcm_element)
- return 0;
-
- _snd_mixer_selem_channel_id channel_id = SND_MIXER_SCHN_FRONT_LEFT;
- if(channel == Volume::RIGHT_CHANNEL)
- channel_id = SND_MIXER_SCHN_FRONT_RIGHT;
+ return vol;
long value = 0;
snd_mixer_handle_events(mixer);
- snd_mixer_selem_get_playback_volume(pcm_element, channel_id, &value);
- return value;
+ snd_mixer_selem_get_playback_volume(pcm_element, SND_MIXER_SCHN_FRONT_LEFT, &value);
+ vol.left = value;
+ snd_mixer_selem_get_playback_volume(pcm_element, SND_MIXER_SCHN_FRONT_RIGHT, &value);
+ vol.right = value;
+ return vol;
}
int VolumeALSA::setupMixer(QString card, QString device)
diff --git a/src/plugins/Output/alsa/outputalsa.h b/src/plugins/Output/alsa/outputalsa.h
index 664c9b30b..f909127ed 100644
--- a/src/plugins/Output/alsa/outputalsa.h
+++ b/src/plugins/Output/alsa/outputalsa.h
@@ -72,8 +72,8 @@ public:
VolumeALSA();
~VolumeALSA();
- void setVolume(int channel, int value);
- int volume(int channel);
+ void setVolume(const VolumeSettings &vol);
+ VolumeSettings volume() const;
private:
//alsa mixer
diff --git a/src/plugins/Output/oss/outputoss.cpp b/src/plugins/Output/oss/outputoss.cpp
index 148e18f7a..c62a798c6 100644
--- a/src/plugins/Output/oss/outputoss.cpp
+++ b/src/plugins/Output/oss/outputoss.cpp
@@ -167,14 +167,11 @@ VolumeOSS::~VolumeOSS()
}
}
-void VolumeOSS::setVolume(int channel, int value)
+void VolumeOSS::setVolume(const VolumeSettings &vol)
{
if (m_mixer_fd < 0)
return;
- int l = (channel == Volume::LEFT_CHANNEL) ? value : volume(Volume::LEFT_CHANNEL);
- int r = (channel == Volume::RIGHT_CHANNEL) ? value : volume(Volume::RIGHT_CHANNEL);
-
long cmd;
int devs = 0;
ioctl(m_mixer_fd, SOUND_MIXER_READ_DEVMASK, &devs);
@@ -187,14 +184,15 @@ void VolumeOSS::setVolume(int channel, int value)
//close(mifd);
return;
}
- int v = (r << 8) | l;
+ int v = (vol.right << 8) | vol.left;
ioctl(m_mixer_fd, cmd, &v);
}
-int VolumeOSS::volume(int channel)
+VolumeSettings VolumeOSS::volume() const
{
+ VolumeSettings vol;
if(m_mixer_fd < 0)
- return 0;
+ return vol;
int cmd;
int v, devs = 0;
ioctl(m_mixer_fd, SOUND_MIXER_READ_DEVMASK, &devs);
@@ -204,12 +202,12 @@ int VolumeOSS::volume(int channel)
else if ((devs & SOUND_MASK_VOLUME) && m_master)
cmd = SOUND_MIXER_READ_VOLUME;
else
- return 0;
+ return vol;
ioctl(m_mixer_fd, cmd, &v);
- if(channel == Volume::LEFT_CHANNEL)
- return (v & 0xFF00) >> 8;
- return (v & 0x00FF);
+ vol.left = (v & 0xFF00) >> 8;
+ vol.right = (v & 0x00FF);
+ return vol;
}
void VolumeOSS::openMixer()
diff --git a/src/plugins/Output/oss/outputoss.h b/src/plugins/Output/oss/outputoss.h
index c031dadd2..ff8022be1 100644
--- a/src/plugins/Output/oss/outputoss.h
+++ b/src/plugins/Output/oss/outputoss.h
@@ -55,8 +55,8 @@ public:
VolumeOSS();
~VolumeOSS();
- void setVolume(int channel, int value);
- int volume(int channel);
+ void setVolume(const VolumeSettings &vol);
+ VolumeSettings volume() const;
private:
//oss mixer
diff --git a/src/plugins/Output/oss4/outputoss4.cpp b/src/plugins/Output/oss4/outputoss4.cpp
index 7b20f317b..4c1775665 100644
--- a/src/plugins/Output/oss4/outputoss4.cpp
+++ b/src/plugins/Output/oss4/outputoss4.cpp
@@ -178,40 +178,34 @@ VolumeOSS4::~VolumeOSS4()
settings.setValue("OSS4/volume", m_volume);
}
-void VolumeOSS4::setVolume(int channel, int value)
+void VolumeOSS4::setVolume(const VolumeSettings &vol)
{
- int l = (channel == Volume::LEFT_CHANNEL) ? value : volume(Volume::LEFT_CHANNEL);
- int r = (channel == Volume::RIGHT_CHANNEL) ? value : volume(Volume::RIGHT_CHANNEL);
- m_volume = (r << 8) | l;
+ m_volume = (vol.right << 8) | vol.left;
if(OutputOSS4::instance() && OutputOSS4::instance()->fd() >= 0)
{
ioctl(OutputOSS4::instance()->fd(), SNDCTL_DSP_SETPLAYVOL, &m_volume);
}
}
-int VolumeOSS4::volume(int channel)
+VolumeSettings VolumeOSS4::volume() const
{
+ VolumeSettings vol;
if(OutputOSS4::instance() && OutputOSS4::instance()->fd() >= 0)
{
int v = 0;
if (ioctl(OutputOSS4::instance()->fd(), SNDCTL_DSP_GETPLAYVOL, &v) < 0)
v = 0;
m_volume = v;
- if(channel == Volume::LEFT_CHANNEL)
- return (v & 0x00FF);
- return (v & 0xFF00) >> 8;
- }
- else
- {
- if(channel == Volume::LEFT_CHANNEL)
- return (m_volume & 0x00FF);
- return (m_volume & 0xFF00) >> 8;
}
+ vol.left = m_volume & 0x00FF;
+ vol.right = (m_volume & 0xFF00) >> 8;
+ return vol;
}
void VolumeOSS4::restore()
{
- int v = m_volume;
- setVolume(Volume::LEFT_CHANNEL, (v & 0x00FF));
- setVolume(Volume::RIGHT_CHANNEL, (v & 0xFF00) >> 8);
+ if(OutputOSS4::instance() && OutputOSS4::instance()->fd() >= 0)
+ {
+ ioctl(OutputOSS4::instance()->fd(), SNDCTL_DSP_SETPLAYVOL, &m_volume);
+ }
}
diff --git a/src/plugins/Output/oss4/outputoss4.h b/src/plugins/Output/oss4/outputoss4.h
index ee8ccf6af..5266db71b 100644
--- a/src/plugins/Output/oss4/outputoss4.h
+++ b/src/plugins/Output/oss4/outputoss4.h
@@ -65,8 +65,8 @@ public:
VolumeOSS4();
~VolumeOSS4();
- void setVolume(int channel, int value);
- int volume(int channel);
+ void setVolume(const VolumeSettings &vol);
+ VolumeSettings volume() const;
void restore();
private:
diff --git a/src/plugins/Output/waveout/outputwaveout.cpp b/src/plugins/Output/waveout/outputwaveout.cpp
index 504e82e9f..25791ff64 100644
--- a/src/plugins/Output/waveout/outputwaveout.cpp
+++ b/src/plugins/Output/waveout/outputwaveout.cpp
@@ -245,21 +245,18 @@ VolumeWaveOut::VolumeWaveOut()
VolumeWaveOut::~VolumeWaveOut()
{}
-void VolumeWaveOut::setVolume(int channel, int value)
+void VolumeWaveOut::setVolume(const VolumeSettings &vol)
{
- int l = (channel == Volume::LEFT_CHANNEL) ? value : (long)LOWORD(m_volume) * 100 / 0xFFFF;
- int r = (channel == Volume::RIGHT_CHANNEL) ? value : (long)HIWORD(m_volume) * 100 / 0xFFFF;
- m_volume = (r*0xFFFF/100 << 16) | l*0xFFFF/100;
- waveOutSetVolume(0, m_volume);
+ DWORD data = (vol.right*0xFFFF/100 << 16) | vol.left*0xFFFF/100;
+ waveOutSetVolume(0, data);
}
-int VolumeWaveOut::volume(int channel)
+VolumeSettings VolumeWaveOut::volume() const
{
- DWORD volume;
- waveOutGetVolume(0, (PDWORD)&volume);
- m_volume = volume;
- if(channel == Volume::LEFT_CHANNEL)
- return (long)LOWORD(volume) * 100 / 0xFFFF + 1;
- else
- return (long)HIWORD(volume) * 100 / 0xFFFF + 1;
+ VolumeSettings vol;
+ DWORD data;
+ waveOutGetVolume(0, (PDWORD)&data);
+ vol.left = (long)LOWORD(data) * 100 / 0xFFFF + 1;
+ vol.right = (long)HIWORD(data) * 100 / 0xFFFF + 1;
+ return vol;
}
diff --git a/src/plugins/Output/waveout/outputwaveout.h b/src/plugins/Output/waveout/outputwaveout.h
index d4e44e30a..22e437a81 100644
--- a/src/plugins/Output/waveout/outputwaveout.h
+++ b/src/plugins/Output/waveout/outputwaveout.h
@@ -57,11 +57,8 @@ public:
VolumeWaveOut();
~VolumeWaveOut();
- void setVolume(int channel, int value);
- int volume(int channel);
-
-private:
- DWORD m_volume;
+ void setVolume(const VolumeSettings &vol);
+ VolumeSettings volume() const;
};