aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Output/oss4/outputoss4.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2011-10-24 14:25:52 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2011-10-24 14:25:52 +0000
commit64d2541b7455981ce90c24fadbb803280f4e34e1 (patch)
treed812af2c4a1b82a2fb08da467f9e206720d001ac /src/plugins/Output/oss4/outputoss4.cpp
parentb4aaadf74cc5739753feae3adaa3a0de13dbadb6 (diff)
downloadqmmp-64d2541b7455981ce90c24fadbb803280f4e34e1.tar.gz
qmmp-64d2541b7455981ce90c24fadbb803280f4e34e1.tar.bz2
qmmp-64d2541b7455981ce90c24fadbb803280f4e34e1.zip
OSS4: added volume restoration
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@2434 90c681e8-e032-0410-971d-27865f9a5e38
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);
+}