diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-09-27 20:49:23 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-09-27 20:49:23 +0000 |
| commit | d26eba2fad30b2bf23135d0e9b203fdee2a935b5 (patch) | |
| tree | 9caac3416b5ffa0f0b2030a57e2462a64a1e330f /src/plugins/Output/alsa | |
| parent | 3503bb88cdb79aa9114b88f7fe5c8478f824caf6 (diff) | |
| download | qmmp-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/alsa')
| -rw-r--r-- | src/plugins/Output/alsa/outputalsa.cpp | 89 | ||||
| -rw-r--r-- | src/plugins/Output/alsa/outputalsa.h | 34 | ||||
| -rw-r--r-- | src/plugins/Output/alsa/outputalsafactory.cpp | 5 | ||||
| -rw-r--r-- | src/plugins/Output/alsa/outputalsafactory.h | 1 |
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); |
