Ticket #8862: 8862-aodx_scan.patch

File 8862-aodx_scan.patch, 3.1 KB (added by Jeff Lu <jll544@…>, 10 years ago)

Enable audio device scan for DirectX

  • audiooutput.cpp

     
    351351            delete adc;
    352352        }
    353353
    354         name = "DirectX:Primary Sound Driver";
    355         desc = "";
    356         adc = GetAudioDeviceConfig(name, desc);
    357         if (adc)
     354        QMap<int, QString> *dxdevs = AudioOutputDX::GetDXDevices();
     355
     356        if (!dxdevs->empty())
    358357        {
    359             list->append(*adc);
    360             delete adc;
     358            for (QMap<int, QString>::const_iterator i = dxdevs->begin();
     359                 i != dxdevs->end(); ++i)
     360            {
     361                QString desc = i.value();
     362                QString devname = QString("DirectX:%1").arg(desc);
     363
     364                adc = GetAudioDeviceConfig(devname, desc);
     365                if (!adc)
     366                    continue;
     367                list->append(*adc);
     368                delete adc;
     369            }
    361370        }
     371        delete dxdevs;
    362372    }
    363373#endif
    364374
  • audiooutputdx.cpp

     
    9797        GUID                deviceGUID,     *chosenGUID;
    9898        int                 device_count,   device_num;
    9999        QString             device_name;
     100        QMap<int, QString>  device_list;
    100101};
    101102
    102103
     
    149150        context->device_num  = device_count;
    150151    }
    151152
     153    context->device_list.insert(device_count, enum_desc);
    152154    context->device_count++;
    153155    return 1;
    154156}
     
    172174    chosenGUID   = NULL;
    173175    device_count = 0;
    174176    device_num   = 0;
     177    device_list.clear();
    175178}
    176179
    177180int AudioOutputDXPrivate::InitDirectSound(void)
     
    189192        goto error;
    190193    }
    191194
    192     device_name = parent->m_UseSPDIF ?
     195    if (parent)  // parent can be NULL only when called from GetDXDevices()
     196        device_name = parent->m_UseSPDIF ?
    193197                      parent->passthru_device : parent->main_device;
    194198    device_name = device_name.section(':', 1);
    195199    device_num  = device_name.toInt(&ok, 10);
     
    598602    VBAUDIO(QString("Set volume %1").arg(dxVolume));
    599603}
    600604
     605QMap<int, QString> *AudioOutputDX::GetDXDevices(void)
     606{
     607    AudioOutputDXPrivate *tmp_priv = new AudioOutputDXPrivate(NULL);
     608    tmp_priv->InitDirectSound();
     609    QMap<int, QString> *dxdevs = new QMap<int, QString>(tmp_priv->device_list);
     610    delete tmp_priv;
     611    return dxdevs;
     612}
     613
    601614/* vim: set expandtab tabstop=4 shiftwidth=4: */
  • audiooutputdx.h

     
    11#ifndef AUDIOOUTPUTDX
    22#define AUDIOOUTPUTDX
    33
     4#include <QMap>
     5
    46// MythTV headers
    57#include "audiooutputbase.h"
    68#include "audiooutputsettings.h"
     
    1618
    1719    virtual int  GetVolumeChannel(int channel) const;
    1820    virtual void SetVolumeChannel(int channel, int volume);
     21    static QMap<int, QString> *GetDXDevices(void);
    1922
    2023  protected:
    2124    virtual bool OpenDevice(void);