aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Output/wasapi/outputwasapi.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2017-09-05 17:53:43 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2017-09-05 17:53:43 +0000
commit4abfc3230c456053eaf03bd47897612be9066e8e (patch)
treea32552ac229c1d61e8b4e9830db2e19e75163eb5 /src/plugins/Output/wasapi/outputwasapi.cpp
parent89162c2e2e6141ac5df7494e576f623b20830ce0 (diff)
downloadqmmp-4abfc3230c456053eaf03bd47897612be9066e8e.tar.gz
qmmp-4abfc3230c456053eaf03bd47897612be9066e8e.tar.bz2
qmmp-4abfc3230c456053eaf03bd47897612be9066e8e.zip
wasapi: added feature to change device
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@7450 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Output/wasapi/outputwasapi.cpp')
-rw-r--r--src/plugins/Output/wasapi/outputwasapi.cpp43
1 files changed, 31 insertions, 12 deletions
diff --git a/src/plugins/Output/wasapi/outputwasapi.cpp b/src/plugins/Output/wasapi/outputwasapi.cpp
index cc8f9b0ee..5faeb0c04 100644
--- a/src/plugins/Output/wasapi/outputwasapi.cpp
+++ b/src/plugins/Output/wasapi/outputwasapi.cpp
@@ -23,17 +23,16 @@
#include <string.h>
#include <iostream>
#include <unistd.h>
-#include <qmmp/buffer.h>
+#include <initguid.h>
+#include <audioclient.h>
+#include <endpointvolume.h>
+#include <mmdeviceapi.h>
+#include <mmreg.h>
+#include <functiondiscoverykeys_devpkey.h>
#include <math.h>
+#include <qmmp/buffer.h>
#include "outputwasapi.h"
-const CLSID CLSID_MMDeviceEnumerator = __uuidof(MMDeviceEnumerator);
-const IID IID_IMMDeviceEnumerator = __uuidof(IMMDeviceEnumerator);
-const IID IID_IAudioClient = __uuidof(IAudioClient);
-const IID IID_IAudioRenderClient = __uuidof(IAudioRenderClient);
-const IID IID_IChannelAudioVolume = __uuidof(IChannelAudioVolume);
-const IID IID_ISimpleAudioVolume = __uuidof(ISimpleAudioVolume);
-
#define WASAPI_BUFSIZE 10000000LL //1s
#ifndef AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM
@@ -63,6 +62,8 @@ OutputWASAPI::OutputWASAPI() : Output()
m_pRenderClient = 0;
m_pSimpleAudioVolume = 0;
instance = this;
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ m_id = settings.value("WASAPI/device", "default").toString();
}
OutputWASAPI::~OutputWASAPI()
@@ -81,11 +82,29 @@ bool OutputWASAPI::initialize(quint32 freq, ChannelMap map, Qmmp::AudioFormat fo
return false;
}
- if((result = m_pEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &m_pDevice)) != S_OK)
+ if(m_id != "default" && !m_id.isEmpty())
{
- qWarning("OutputWASAPI: IMMDeviceEnumerator::GetDefaultAudioEndpoint failed, error code = 0x%lx", result);
- m_pDevice = 0;
- return false;
+ WCHAR id[m_id.length() + 1];
+ m_id.toWCharArray(id);
+ id[m_id.length()] = 0;
+
+ if((result = m_pEnumerator->GetDevice(id, &m_pDevice)) != S_OK)
+ {
+ qWarning("OutputWASAPI: IMMDeviceEnumerator::GetDevice failed, error code = 0x%lx", result);
+ m_pDevice = 0;
+ }
+ else
+ qDebug("OutputWASAPI: using device id: %s", qPrintable(m_id));
+ }
+
+ if(!m_pDevice)
+ {
+ if((result = m_pEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &m_pDevice)) != S_OK)
+ {
+ qWarning("OutputWASAPI: IMMDeviceEnumerator::GetDefaultAudioEndpoint failed, error code = 0x%lx", result);
+ m_pDevice = 0;
+ return false;
+ }
}
if((result = m_pDevice->Activate(IID_IAudioClient, CLSCTX_ALL, NULL, (void**)&m_pAudioClient)) != S_OK)