diff options
Diffstat (limited to 'src/plugins/Output/oss4/outputoss4.cpp')
| -rw-r--r-- | src/plugins/Output/oss4/outputoss4.cpp | 33 |
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); +} |
