aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Output/oss4/outputoss4.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Output/oss4/outputoss4.cpp')
-rw-r--r--src/plugins/Output/oss4/outputoss4.cpp33
1 files changed, 28 insertions, 5 deletions
diff --git a/src/plugins/Output/oss4/outputoss4.cpp b/src/plugins/Output/oss4/outputoss4.cpp
index 056f3133e..b6f121c22 100644
--- a/src/plugins/Output/oss4/outputoss4.cpp
+++ b/src/plugins/Output/oss4/outputoss4.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2010 by Ilya Kotov *
+ * Copyright (C) 2010-2011 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -45,6 +45,7 @@ extern "C"
#include "outputoss4.h"
OutputOSS4 *OutputOSS4::m_instance = 0;
+VolumeControlOSS4 *OutputOSS4::m_vc = 0;
OutputOSS4::OutputOSS4(QObject *parent) : Output(parent)
{
@@ -147,6 +148,9 @@ bool OutputOSS4::initialize(quint32 freq, int chan, Qmmp::AudioFormat format)
ioctl(m_audio_fd, SNDCTL_DSP_HALT, 0);
configure(freq, chan, format);
+
+ if(m_vc)
+ m_vc->restore();
return true;
}
@@ -191,17 +195,25 @@ void OutputOSS4::reset()
/***** MIXER *****/
VolumeControlOSS4::VolumeControlOSS4(QObject *parent) : VolumeControl(parent)
-{}
+{
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ m_volume = settings.value("OSS4/volume", 0x3232).toInt();
+ OutputOSS4::m_vc = this;
+}
VolumeControlOSS4::~VolumeControlOSS4()
-{}
+{
+ OutputOSS4::m_vc = 0;
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ settings.setValue("OSS4/volume", m_volume);
+}
void VolumeControlOSS4::setVolume(int l, int r)
{
+ m_volume = (r << 8) | l;
if(OutputOSS4::instance() && OutputOSS4::instance()->fd() >= 0)
{
- int v = (r << 8) | l;
- ioctl(OutputOSS4::instance()->fd(), SNDCTL_DSP_SETPLAYVOL, &v);
+ ioctl(OutputOSS4::instance()->fd(), SNDCTL_DSP_SETPLAYVOL, &m_volume);
}
}
@@ -216,5 +228,16 @@ void VolumeControlOSS4::volume(int *ll,int *rr)
v = 0;
*rr = (v & 0xFF00) >> 8;
*ll = (v & 0x00FF);
+ m_volume = v;
+ }
+ else
+ {
+ *rr = (m_volume & 0xFF00) >> 8;
+ *ll = (m_volume & 0x00FF);
}
}
+
+void VolumeControlOSS4::restore()
+{
+ setVolume((m_volume & 0x00FF), (m_volume & 0xFF00) >> 8);
+}