aboutsummaryrefslogtreecommitdiff
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
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
-rw-r--r--src/plugins/Output/oss4/outputoss4.cpp33
-rw-r--r--src/plugins/Output/oss4/outputoss4.h10
2 files changed, 37 insertions, 6 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);
+}
diff --git a/src/plugins/Output/oss4/outputoss4.h b/src/plugins/Output/oss4/outputoss4.h
index 2eed8718c..731d1c210 100644
--- a/src/plugins/Output/oss4/outputoss4.h
+++ b/src/plugins/Output/oss4/outputoss4.h
@@ -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 *
@@ -27,6 +27,8 @@
#define DEFAULT_DEV "/dev/dsp"
#define DEFAULT_MIXER "/dev/mixer"
+class VolumeControlOSS4;
+
/**
@author Ilya Kotov <forkotov@hotmail.ru>
*/
@@ -42,6 +44,7 @@ public:
qint64 latency();
static OutputOSS4 *instance();
+ static VolumeControlOSS4 *m_vc;
private:
//output api
@@ -56,6 +59,7 @@ private:
bool m_do_select;
int m_audio_fd;
static OutputOSS4 *m_instance;
+
};
class VolumeControlOSS4 : public VolumeControl
@@ -67,6 +71,10 @@ public:
void setVolume(int left, int right);
void volume(int *left, int *right);
+ void restore();
+
+private:
+ int m_volume;
};
#endif