Index: audiooutput.cpp
===================================================================
--- audiooutput.cpp	(revision 26115)
+++ audiooutput.cpp	(working copy)
@@ -351,14 +351,24 @@
             delete adc;
         }
 
-        name = "DirectX:Primary Sound Driver";
-        desc = "";
-        adc = GetAudioDeviceConfig(name, desc);
-        if (adc)
+        QMap<int, QString> *dxdevs = AudioOutputDX::GetDXDevices();
+
+        if (!dxdevs->empty())
         {
-            list->append(*adc);
-            delete adc;
+            for (QMap<int, QString>::const_iterator i = dxdevs->begin();
+                 i != dxdevs->end(); ++i)
+            {
+                QString desc = i.value();
+                QString devname = QString("DirectX:%1").arg(desc);
+
+                adc = GetAudioDeviceConfig(devname, desc);
+                if (!adc)
+                    continue;
+                list->append(*adc);
+                delete adc;
+            }
         }
+        delete dxdevs;
     }
 #endif
 
Index: audiooutputdx.cpp
===================================================================
--- audiooutputdx.cpp	(revision 26115)
+++ audiooutputdx.cpp	(working copy)
@@ -97,6 +97,7 @@
         GUID                deviceGUID,     *chosenGUID;
         int                 device_count,   device_num;
         QString             device_name;
+        QMap<int, QString>  device_list;
 };
 
 
@@ -149,6 +150,7 @@
         context->device_num  = device_count;
     }
 
+    context->device_list.insert(device_count, enum_desc);
     context->device_count++;
     return 1;
 }
@@ -172,6 +174,7 @@
     chosenGUID   = NULL;
     device_count = 0;
     device_num   = 0;
+    device_list.clear();
 }
 
 int AudioOutputDXPrivate::InitDirectSound(void)
@@ -189,7 +192,8 @@
         goto error;
     }
 
-    device_name = parent->m_UseSPDIF ?
+    if (parent)  // parent can be NULL only when called from GetDXDevices()
+        device_name = parent->m_UseSPDIF ?
                       parent->passthru_device : parent->main_device;
     device_name = device_name.section(':', 1);
     device_num  = device_name.toInt(&ok, 10);
@@ -598,4 +602,13 @@
     VBAUDIO(QString("Set volume %1").arg(dxVolume));
 }
 
+QMap<int, QString> *AudioOutputDX::GetDXDevices(void)
+{
+    AudioOutputDXPrivate *tmp_priv = new AudioOutputDXPrivate(NULL);
+    tmp_priv->InitDirectSound();
+    QMap<int, QString> *dxdevs = new QMap<int, QString>(tmp_priv->device_list);
+    delete tmp_priv;
+    return dxdevs;
+}
+
 /* vim: set expandtab tabstop=4 shiftwidth=4: */
Index: audiooutputdx.h
===================================================================
--- audiooutputdx.h	(revision 26115)
+++ audiooutputdx.h	(working copy)
@@ -1,6 +1,8 @@
 #ifndef AUDIOOUTPUTDX
 #define AUDIOOUTPUTDX
 
+#include <QMap>
+
 // MythTV headers
 #include "audiooutputbase.h"
 #include "audiooutputsettings.h"
@@ -16,6 +18,7 @@
 
     virtual int  GetVolumeChannel(int channel) const;
     virtual void SetVolumeChannel(int channel, int volume);
+    static QMap<int, QString> *GetDXDevices(void);
 
   protected:
     virtual bool OpenDevice(void);
