aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Output/oss4
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Output/oss4')
-rw-r--r--src/plugins/Output/oss4/outputoss4.cpp26
-rw-r--r--src/plugins/Output/oss4/outputoss4.h18
-rw-r--r--src/plugins/Output/oss4/outputoss4factory.cpp4
-rw-r--r--src/plugins/Output/oss4/outputoss4factory.h9
4 files changed, 29 insertions, 28 deletions
diff --git a/src/plugins/Output/oss4/outputoss4.cpp b/src/plugins/Output/oss4/outputoss4.cpp
index 71cda5dda..6d3bad527 100644
--- a/src/plugins/Output/oss4/outputoss4.cpp
+++ b/src/plugins/Output/oss4/outputoss4.cpp
@@ -45,7 +45,7 @@ extern "C"
#include "outputoss4.h"
OutputOSS4 *OutputOSS4::m_instance = 0;
-VolumeControlOSS4 *OutputOSS4::m_vc = 0;
+VolumeOSS4 *OutputOSS4::m_vc = 0;
OutputOSS4::OutputOSS4(QObject *parent) : Output(parent)
{
@@ -194,7 +194,7 @@ void OutputOSS4::reset()
}
/***** MIXER *****/
-VolumeControlOSS4::VolumeControlOSS4(QObject *parent) : VolumeControl(parent)
+VolumeOSS4::VolumeOSS4()
{
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
m_volume = settings.value("OSS4/volume", 0x3232).toInt();
@@ -202,15 +202,17 @@ VolumeControlOSS4::VolumeControlOSS4(QObject *parent) : VolumeControl(parent)
restore();
}
-VolumeControlOSS4::~VolumeControlOSS4()
+VolumeOSS4::~VolumeOSS4()
{
OutputOSS4::m_vc = 0;
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
settings.setValue("OSS4/volume", m_volume);
}
-void VolumeControlOSS4::setVolume(int l, int r)
+void VolumeOSS4::setVolume(int channel, int value)
{
+ 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;
if(OutputOSS4::instance() && OutputOSS4::instance()->fd() >= 0)
{
@@ -218,27 +220,27 @@ void VolumeControlOSS4::setVolume(int l, int r)
}
}
-void VolumeControlOSS4::volume(int *ll,int *rr)
+int VolumeOSS4::volume(int channel)
{
- *ll = 0;
- *rr = 0;
if(OutputOSS4::instance() && OutputOSS4::instance()->fd() >= 0)
{
int v = 0;
if (ioctl(OutputOSS4::instance()->fd(), SNDCTL_DSP_GETPLAYVOL, &v) < 0)
v = 0;
- *rr = (v & 0xFF00) >> 8;
- *ll = (v & 0x00FF);
m_volume = v;
+ if(channel == Volume::LEFT_CHANNEL)
+ return (v & 0x00FF);
+ return (v & 0xFF00) >> 8;
}
else
{
- *rr = (m_volume & 0xFF00) >> 8;
- *ll = (m_volume & 0x00FF);
+ if(channel == Volume::LEFT_CHANNEL)
+ return (m_volume & 0x00FF);
+ return (m_volume & 0xFF00) >> 8;
}
}
-void VolumeControlOSS4::restore()
+void VolumeOSS4::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 90c9eb85a..06d4b13e3 100644
--- a/src/plugins/Output/oss4/outputoss4.h
+++ b/src/plugins/Output/oss4/outputoss4.h
@@ -22,12 +22,12 @@
#define OUTPUTOSS4_H
#include <qmmp/output.h>
-#include <qmmp/volumecontrol.h>
+#include <qmmp/volume.h>
#define DEFAULT_DEV "/dev/dsp"
#define DEFAULT_MIXER "/dev/mixer"
-class VolumeControlOSS4;
+class VolumeOSS4;
/**
@author Ilya Kotov <forkotov@hotmail.ru>
@@ -36,7 +36,7 @@ class OutputOSS4 : public Output
{
Q_OBJECT
public:
- OutputOSS4(QObject * parent);
+ OutputOSS4();
virtual ~OutputOSS4();
bool initialize(quint32, int, Qmmp::AudioFormat format);
@@ -44,7 +44,7 @@ public:
qint64 latency();
static OutputOSS4 *instance();
- static VolumeControlOSS4 *m_vc;
+ static VolumeOSS4 *m_vc;
private:
//output api
@@ -62,15 +62,15 @@ private:
};
-class VolumeControlOSS4 : public VolumeControl
+class VolumeOSS4 : public Volume
{
Q_OBJECT
public:
- VolumeControlOSS4(QObject *parent);
- ~VolumeControlOSS4();
+ VolumeOSS4(QObject *parent);
+ ~VolumeOSS4();
- void setVolume(int left, int right);
- void volume(int *left, int *right);
+ void setVolume(int channel, int value);
+ int volume(int channel);
void restore();
private:
diff --git a/src/plugins/Output/oss4/outputoss4factory.cpp b/src/plugins/Output/oss4/outputoss4factory.cpp
index 95b5340a2..aeac150dd 100644
--- a/src/plugins/Output/oss4/outputoss4factory.cpp
+++ b/src/plugins/Output/oss4/outputoss4factory.cpp
@@ -40,9 +40,9 @@ const OutputProperties OutputOSS4Factory::properties() const
return properties;
}
-VolumeControl *OutputOSS4Factory::createVolumeControl(QObject *parent)
+Volume *OutputOSS4Factory::createVolumeControl()
{
- return new VolumeControlOSS4(parent);
+ return new VolumeOSS4;
}
void OutputOSS4Factory::showSettings(QWidget* parent)
diff --git a/src/plugins/Output/oss4/outputoss4factory.h b/src/plugins/Output/oss4/outputoss4factory.h
index 04855d54c..ead729e4a 100644
--- a/src/plugins/Output/oss4/outputoss4factory.h
+++ b/src/plugins/Output/oss4/outputoss4factory.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2006 by Ilya Kotov *
+ * Copyright (C) 2006-2012 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -29,16 +29,15 @@
#include <qmmp/outputfactory.h>
-class OutputOSS4Factory : public QObject,
- OutputFactory
+class OutputOSS4Factory : public QObject, OutputFactory
{
Q_OBJECT
-Q_INTERFACES(OutputFactory);
+Q_INTERFACES(OutputFactory)
public:
const OutputProperties properties() const;
Output* create(QObject* parent);
- VolumeControl *createVolumeControl(QObject *parent);
+ Volume *createVolume();
void showSettings(QWidget* parent);
void showAbout(QWidget *parent);
QTranslator *createTranslator(QObject *parent);