aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Output
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-09-27 20:49:23 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-09-27 20:49:23 +0000
commitd26eba2fad30b2bf23135d0e9b203fdee2a935b5 (patch)
tree9caac3416b5ffa0f0b2030a57e2462a64a1e330f /src/plugins/Output
parent3503bb88cdb79aa9114b88f7fe5c8478f824caf6 (diff)
downloadqmmp-d26eba2fad30b2bf23135d0e9b203fdee2a935b5.tar.gz
qmmp-d26eba2fad30b2bf23135d0e9b203fdee2a935b5.tar.bz2
qmmp-d26eba2fad30b2bf23135d0e9b203fdee2a935b5.zip
volume control api
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@568 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Output')
-rw-r--r--src/plugins/Output/alsa/outputalsa.cpp89
-rw-r--r--src/plugins/Output/alsa/outputalsa.h34
-rw-r--r--src/plugins/Output/alsa/outputalsafactory.cpp5
-rw-r--r--src/plugins/Output/alsa/outputalsafactory.h1
4 files changed, 91 insertions, 38 deletions
diff --git a/src/plugins/Output/alsa/outputalsa.cpp b/src/plugins/Output/alsa/outputalsa.cpp
index 5ec6b7748..1491c4584 100644
--- a/src/plugins/Output/alsa/outputalsa.cpp
+++ b/src/plugins/Output/alsa/outputalsa.cpp
@@ -49,21 +49,21 @@ OutputALSA::OutputALSA(QObject * parent, bool useVolume)
pcm_name = strdup(dev_name.toAscii().data());
pcm_handle = 0;
//alsa mixer
- mixer = 0;
+ /*mixer = 0;
if (useVolume)
{
QString card = settings.value("ALSA/mixer_card","hw:0").toString();
QString dev = settings.value("ALSA/mixer_device", "PCM").toString();
setupMixer(card, dev);
- }
+ }*/
}
OutputALSA::~OutputALSA()
{
uninitialize();
free (pcm_name);
- if (mixer)
- snd_mixer_close(mixer);
+ /*if (mixer)
+ snd_mixer_close(mixer);*/
}
void OutputALSA::stop()
@@ -487,7 +487,53 @@ void OutputALSA::uninitialize()
}
/* ****** MIXER ******* */
-int OutputALSA::setupMixer(QString card, QString device)
+VolumeControlALSA::VolumeControlALSA(QObject *parent) : VolumeControl(parent)
+{
+ //alsa mixer
+ mixer = 0;
+ QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat);
+ QString card = settings.value("ALSA/mixer_card","hw:0").toString();
+ QString dev = settings.value("ALSA/mixer_device", "PCM").toString();
+ setupMixer(card, dev);
+}
+
+
+VolumeControlALSA::~VolumeControlALSA()
+{
+ if (mixer)
+ snd_mixer_close(mixer);
+}
+
+void VolumeControlALSA::setVolume(int l, int r)
+{
+
+ if (!pcm_element)
+ return;
+
+ snd_mixer_selem_set_playback_volume(pcm_element,
+ SND_MIXER_SCHN_FRONT_LEFT, l);
+ snd_mixer_selem_set_playback_volume(pcm_element,
+ SND_MIXER_SCHN_FRONT_RIGHT, r);
+}
+
+void VolumeControlALSA::volume(int *l, int *r)
+{
+ if (!pcm_element)
+ return;
+
+ long ll = *l, lr = *r;
+ snd_mixer_handle_events(mixer);
+ snd_mixer_selem_get_playback_volume(pcm_element,
+ SND_MIXER_SCHN_FRONT_LEFT, &ll);
+ snd_mixer_selem_get_playback_volume(pcm_element,
+ SND_MIXER_SCHN_FRONT_RIGHT, &lr);
+ *l = ll;
+ *r = lr;
+}
+
+
+
+int VolumeControlALSA::setupMixer(QString card, QString device)
{
char *name;
long int a, b;
@@ -539,7 +585,7 @@ int OutputALSA::setupMixer(QString card, QString device)
return 0;
}
-void OutputALSA::parseMixerName(char *str, char **name, int *index)
+void VolumeControlALSA::parseMixerName(char *str, char **name, int *index)
{
char *end;
@@ -559,7 +605,7 @@ void OutputALSA::parseMixerName(char *str, char **name, int *index)
}
}
-snd_mixer_elem_t* OutputALSA::getMixerElem(snd_mixer_t *mixer, char *name, int index)
+snd_mixer_elem_t* VolumeControlALSA::getMixerElem(snd_mixer_t *mixer, char *name, int index)
{
snd_mixer_selem_id_t* selem_id;
snd_mixer_elem_t* elem;
@@ -575,34 +621,7 @@ snd_mixer_elem_t* OutputALSA::getMixerElem(snd_mixer_t *mixer, char *name, int i
return elem;
}
-void OutputALSA::setVolume(int l, int r)
-{
-
- if (!pcm_element)
- return;
-
- snd_mixer_selem_set_playback_volume(pcm_element,
- SND_MIXER_SCHN_FRONT_LEFT, l);
- snd_mixer_selem_set_playback_volume(pcm_element,
- SND_MIXER_SCHN_FRONT_RIGHT, r);
-}
-
-void OutputALSA::volume(int *l, int *r)
-{
- if (!pcm_element)
- return;
-
- long ll = *l, lr = *r;
- snd_mixer_handle_events(mixer);
- snd_mixer_selem_get_playback_volume(pcm_element,
- SND_MIXER_SCHN_FRONT_LEFT, &ll);
- snd_mixer_selem_get_playback_volume(pcm_element,
- SND_MIXER_SCHN_FRONT_RIGHT, &lr);
- *l = ll;
- *r = lr;
-}
-
-int OutputALSA::getMixer(snd_mixer_t **mixer, QString card)
+int VolumeControlALSA::getMixer(snd_mixer_t **mixer, QString card)
{
char *dev;
int err;
diff --git a/src/plugins/Output/alsa/outputalsa.h b/src/plugins/Output/alsa/outputalsa.h
index a3bb817ee..abf7cb1e5 100644
--- a/src/plugins/Output/alsa/outputalsa.h
+++ b/src/plugins/Output/alsa/outputalsa.h
@@ -25,22 +25,27 @@ class OutputALSA;
#include <QObject>
-extern "C" {
+extern "C"
+{
#include <alsa/asoundlib.h>
}
#include <qmmp/output.h>
+#include <qmmp/volumecontrol.h>
class OutputALSA : public Output
{
-Q_OBJECT
+ Q_OBJECT
public:
OutputALSA(QObject * parent = 0, bool useVolume = TRUE);
~OutputALSA();
bool initialize();
- bool isInitialized() const { return m_inited; }
+ bool isInitialized() const
+ {
+ return m_inited;
+ }
void uninitialize();
void configure(quint32, int, int);
void stop();
@@ -72,6 +77,29 @@ private:
size_t m_bits_per_frame;
//alsa mixer
+ /*int setupMixer(QString card, QString device);
+ void parseMixerName(char *str, char **name, int *index);
+ int getMixer(snd_mixer_t **mixer, QString card);
+ snd_mixer_elem_t* getMixerElem(snd_mixer_t *mixer, char *name, int index);
+ snd_mixer_t *mixer;
+ snd_mixer_elem_t *pcm_element;*/
+ bool m_use_mmap;
+};
+
+class VolumeControlALSA : public VolumeControl
+{
+ Q_OBJECT
+public:
+ VolumeControlALSA(QObject *parent = 0);
+ ~VolumeControlALSA();
+
+ void setVolume(int left, int right) ;
+
+protected:
+ void volume(int *left, int *right);
+
+private:
+ //alsa mixer
int setupMixer(QString card, QString device);
void parseMixerName(char *str, char **name, int *index);
int getMixer(snd_mixer_t **mixer, QString card);
diff --git a/src/plugins/Output/alsa/outputalsafactory.cpp b/src/plugins/Output/alsa/outputalsafactory.cpp
index 641ff1278..d9ecce6af 100644
--- a/src/plugins/Output/alsa/outputalsafactory.cpp
+++ b/src/plugins/Output/alsa/outputalsafactory.cpp
@@ -39,6 +39,11 @@ Output* OutputALSAFactory::create(QObject* parent, bool volume)
return new OutputALSA(parent, volume);
}
+VolumeControl *OutputALSAFactory::createVolumeControl(QObject *parent)
+{
+ return new VolumeControlALSA(parent);
+}
+
void OutputALSAFactory::showSettings(QWidget* parent)
{
SettingsDialog *s = new SettingsDialog(parent);
diff --git a/src/plugins/Output/alsa/outputalsafactory.h b/src/plugins/Output/alsa/outputalsafactory.h
index 4375f4916..b772248d3 100644
--- a/src/plugins/Output/alsa/outputalsafactory.h
+++ b/src/plugins/Output/alsa/outputalsafactory.h
@@ -39,6 +39,7 @@ Q_INTERFACES(OutputFactory);
public:
const OutputProperties properties() const;
Output* create(QObject* parent, bool volume);
+ VolumeControl *createVolumeControl(QObject *parent);
void showSettings(QWidget* parent);
void showAbout(QWidget *parent);
QTranslator *createTranslator(QObject *parent);