aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Output/oss
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Output/oss')
-rw-r--r--src/plugins/Output/oss/outputoss.cpp33
-rw-r--r--src/plugins/Output/oss/outputoss.h16
-rw-r--r--src/plugins/Output/oss/outputossfactory.cpp4
-rw-r--r--src/plugins/Output/oss/outputossfactory.h9
4 files changed, 28 insertions, 34 deletions
diff --git a/src/plugins/Output/oss/outputoss.cpp b/src/plugins/Output/oss/outputoss.cpp
index a612b0d23..db2165353 100644
--- a/src/plugins/Output/oss/outputoss.cpp
+++ b/src/plugins/Output/oss/outputoss.cpp
@@ -180,7 +180,7 @@ void OutputOSS::reset()
}
/***** MIXER *****/
-VolumeControlOSS::VolumeControlOSS(QObject *parent) : VolumeControl(parent)
+VolumeOSS::VolumeOSS()
{
m_master = true;
m_mixer_fd = -1;
@@ -190,7 +190,7 @@ VolumeControlOSS::VolumeControlOSS(QObject *parent) : VolumeControl(parent)
}
-VolumeControlOSS::~VolumeControlOSS()
+VolumeOSS::~VolumeOSS()
{
if (m_mixer_fd >= 0)
{
@@ -199,11 +199,14 @@ VolumeControlOSS::~VolumeControlOSS()
}
}
-void VolumeControlOSS::setVolume(int l, int r)
+void VolumeOSS::setVolume(int channel, int value)
{
if (m_mixer_fd < 0)
return;
- int v;
+
+ int l = (channel == Volume::LEFT_CHANNEL) ? value : volume(Volume::LEFT_CHANNEL);
+ int r = (channel == Volume::RIGHT_CHANNEL) ? value : volume(Volume::RIGHT_CHANNEL);
+
long cmd;
int devs = 0;
ioctl(m_mixer_fd, SOUND_MIXER_READ_DEVMASK, &devs);
@@ -216,16 +219,14 @@ void VolumeControlOSS::setVolume(int l, int r)
//close(mifd);
return;
}
- v = (r << 8) | l;
+ int v = (r << 8) | l;
ioctl(m_mixer_fd, cmd, &v);
}
-void VolumeControlOSS::volume(int *ll,int *rr)
+int VolumeOSS::volume(int channel)
{
- *ll = 0;
- *rr = 0;
if(m_mixer_fd < 0)
- return;
+ return 0;
int cmd;
int v, devs = 0;
ioctl(m_mixer_fd, SOUND_MIXER_READ_DEVMASK, &devs);
@@ -235,19 +236,15 @@ void VolumeControlOSS::volume(int *ll,int *rr)
else if ((devs & SOUND_MASK_VOLUME) && m_master)
cmd = SOUND_MIXER_READ_VOLUME;
else
- return;
+ return 0;
ioctl(m_mixer_fd, cmd, &v);
- *ll = (v & 0xFF00) >> 8;
- *rr = (v & 0x00FF);
-
- *ll = (*ll > 100) ? 100 : *ll;
- *rr = (*rr > 100) ? 100 : *rr;
- *ll = (*ll < 0) ? 0 : *ll;
- *rr = (*rr < 0) ? 0 : *rr;
+ if(channel == Volume::LEFT_CHANNEL)
+ return (v & 0xFF00) >> 8;
+ return (v & 0x00FF);
}
-void VolumeControlOSS::openMixer()
+void VolumeOSS::openMixer()
{
if (m_mixer_fd >= 0)
return;
diff --git a/src/plugins/Output/oss/outputoss.h b/src/plugins/Output/oss/outputoss.h
index 8864339c4..a04e6f474 100644
--- a/src/plugins/Output/oss/outputoss.h
+++ b/src/plugins/Output/oss/outputoss.h
@@ -26,7 +26,7 @@
class OutputOSS;
#include <qmmp/output.h>
-#include <qmmp/volumecontrol.h>
+#include <qmmp/volume.h>
class OutputOSS : public Output
{
@@ -43,8 +43,7 @@ private:
qint64 writeAudio(unsigned char *data, qint64 maxSize);
void drain();
void reset();
-
-private:
+ //oss
void post();
void sync();
QString m_audio_device;
@@ -54,15 +53,14 @@ private:
long bl, br;
};
-class VolumeControlOSS : public VolumeControl
+class VolumeOSS : public Volume
{
- Q_OBJECT
public:
- VolumeControlOSS(QObject *parent = 0);
- ~VolumeControlOSS();
+ VolumeOSS();
+ ~VolumeOSS();
- void setVolume(int left, int right);
- void volume(int *left, int *right);
+ void setVolume(int channel, int value);
+ int volume(int channel);
private:
//oss mixer
diff --git a/src/plugins/Output/oss/outputossfactory.cpp b/src/plugins/Output/oss/outputossfactory.cpp
index 982419c62..2005d843f 100644
--- a/src/plugins/Output/oss/outputossfactory.cpp
+++ b/src/plugins/Output/oss/outputossfactory.cpp
@@ -40,9 +40,9 @@ const OutputProperties OutputOSSFactory::properties() const
return properties;
}
-VolumeControl *OutputOSSFactory::createVolumeControl(QObject *parent)
+Volume *OutputOSSFactory::createVolume()
{
- return new VolumeControlOSS(parent);
+ return new VolumeOSS;
}
void OutputOSSFactory::showSettings(QWidget* parent)
diff --git a/src/plugins/Output/oss/outputossfactory.h b/src/plugins/Output/oss/outputossfactory.h
index 22e9f35a5..83fa2f936 100644
--- a/src/plugins/Output/oss/outputossfactory.h
+++ b/src/plugins/Output/oss/outputossfactory.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 *
@@ -30,16 +30,15 @@
#include <qmmp/outputfactory.h>
-class OutputOSSFactory : public QObject,
- OutputFactory
+class OutputOSSFactory : 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);