aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Output/alsa
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Output/alsa')
-rw-r--r--src/plugins/Output/alsa/settingsdialog.cpp33
-rw-r--r--src/plugins/Output/alsa/settingsdialog.h1
2 files changed, 34 insertions, 0 deletions
diff --git a/src/plugins/Output/alsa/settingsdialog.cpp b/src/plugins/Output/alsa/settingsdialog.cpp
index 5790cf6ed..e47a27cd8 100644
--- a/src/plugins/Output/alsa/settingsdialog.cpp
+++ b/src/plugins/Output/alsa/settingsdialog.cpp
@@ -35,6 +35,7 @@ SettingsDialog::SettingsDialog ( QWidget *parent )
setAttribute ( Qt::WA_DeleteOnClose );
ui.deviceComboBox->setEditable ( TRUE );
getCards();
+ getSoftDevices();
connect (ui.deviceComboBox, SIGNAL(activated(int)),SLOT(setText(int)));
connect(ui.mixerCardComboBox, SIGNAL(activated(int)), SLOT(showMixerDevices(int)));
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
@@ -88,6 +89,38 @@ void SettingsDialog::getCards()
}
}
+void SettingsDialog::getSoftDevices()
+{
+ void **hints = 0;
+ int i = 0;
+
+ if(snd_device_name_hint(-1, "pcm", &hints) < 0)
+ return;
+
+ while(hints[i])
+ {
+ char *type = snd_device_name_get_hint (hints[i], "IOID");
+ if (!type || !strcmp (type, "Output"))
+ {
+ char *device_name = snd_device_name_get_hint (hints[i], "NAME");
+ char *device_desc = snd_device_name_get_hint (hints[i], "DESC");
+
+ m_devices << QString(device_name);
+ QString str = QString("%1 (%2)").arg(device_desc).arg(device_name);
+ qDebug("%s", qPrintable(str));
+ ui.deviceComboBox->addItem(str);
+ free (device_name);
+ free (device_desc);
+ }
+ if(type)
+ free (type);
+ ++i;
+ }
+
+ if (hints)
+ snd_device_name_free_hint (hints);
+}
+
void SettingsDialog::getCardDevices(int card)
{
int pcm_device = -1, err;
diff --git a/src/plugins/Output/alsa/settingsdialog.h b/src/plugins/Output/alsa/settingsdialog.h
index 8b2867ff3..64b270735 100644
--- a/src/plugins/Output/alsa/settingsdialog.h
+++ b/src/plugins/Output/alsa/settingsdialog.h
@@ -49,6 +49,7 @@ private slots:
private:
Ui::SettingsDialog ui;
void getCards();
+ void getSoftDevices();
void getCardDevices(int card);
void getMixerDevices(QString card);
int getMixer(snd_mixer_t **mixer, QString card);