2014-06-13 13:47:13 -07:00
|
|
|
From 7a2597d90627ce1bacf0e1969cc4b2eea4e1cd5d Mon Sep 17 00:00:00 2001
|
2013-12-06 12:09:21 -08:00
|
|
|
From: Juergen Tretthahn <orson@orson.at>
|
2014-06-13 13:47:13 -07:00
|
|
|
Date: Sat, 8 Feb 2014 16:08:54 +0100
|
2013-12-06 12:09:21 -08:00
|
|
|
Subject: [PATCH 22/42] winepulse: API Compatibility with 1.5.2 onward, v2
|
|
|
|
|
|
|
|
V2: Add winepulse.drv.spec to commit too
|
|
|
|
V1: Original version
|
|
|
|
|
|
|
|
Commit e87cb774d131963d2642d075977571585ec5da8d changed the driver api
|
|
|
|
leave this commit out to build for builds prior to this
|
|
|
|
|
|
|
|
Not needed for: 1.5.1, 1.5 and 1.4 builds
|
|
|
|
---
|
|
|
|
dlls/winepulse.drv/mmdevdrv.c | 34 ++++++++++++++++++++++------------
|
|
|
|
dlls/winepulse.drv/winepulse.drv.spec | 2 +-
|
|
|
|
2 files changed, 23 insertions(+), 13 deletions(-)
|
|
|
|
|
|
|
|
diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c
|
|
|
|
index 8e76826..b374b53 100644
|
|
|
|
--- a/dlls/winepulse.drv/mmdevdrv.c
|
|
|
|
+++ b/dlls/winepulse.drv/mmdevdrv.c
|
|
|
|
@@ -82,6 +82,11 @@ const WCHAR pulse_keyW[] = {'S','o','f','t','w','a','r','e','\\',
|
|
|
|
'W','i','n','e','\\','P','u','l','s','e',0};
|
|
|
|
const WCHAR pulse_streamW[] = { 'S','t','r','e','a','m','V','o','l',0 };
|
|
|
|
|
|
|
|
+static GUID pulse_render_guid =
|
|
|
|
+{ 0xfd47d9cc, 0x4218, 0x4135, { 0x9c, 0xe2, 0x0c, 0x19, 0x5c, 0x87, 0x40, 0x5b } };
|
|
|
|
+static GUID pulse_capture_guid =
|
|
|
|
+{ 0x25da76d0, 0x033c, 0x4235, { 0x90, 0x02, 0x19, 0xf4, 0x88, 0x94, 0xac, 0x6f } };
|
|
|
|
+
|
|
|
|
static HANDLE warn_once;
|
|
|
|
|
|
|
|
BOOL WINAPI DllMain(HINSTANCE dll, DWORD reason, void *reserved)
|
|
|
|
@@ -716,7 +721,7 @@ static HRESULT pulse_stream_connect(ACImpl *This, UINT32 period_bytes) {
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
-HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, WCHAR ***ids, void ***keys,
|
|
|
|
+HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, const WCHAR ***ids, GUID **keys,
|
|
|
|
UINT *num, UINT *def_index)
|
|
|
|
{
|
|
|
|
HRESULT hr = S_OK;
|
|
|
|
@@ -730,20 +735,21 @@ HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, WCHAR ***ids, void ***keys,
|
|
|
|
*num = 1;
|
|
|
|
*def_index = 0;
|
|
|
|
|
|
|
|
- *ids = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR *));
|
|
|
|
+ *ids = HeapAlloc(GetProcessHeap(), 0, sizeof(**ids));
|
|
|
|
if (!*ids)
|
|
|
|
return E_OUTOFMEMORY;
|
|
|
|
+ (*ids)[0] = defaultW;
|
|
|
|
|
|
|
|
- (*ids)[0] = HeapAlloc(GetProcessHeap(), 0, sizeof(defaultW));
|
|
|
|
- if (!(*ids)[0]) {
|
|
|
|
+ *keys = HeapAlloc(GetProcessHeap(), 0, sizeof(**keys));
|
|
|
|
+ if (!*keys) {
|
|
|
|
HeapFree(GetProcessHeap(), 0, *ids);
|
|
|
|
+ *ids = NULL;
|
|
|
|
return E_OUTOFMEMORY;
|
|
|
|
}
|
|
|
|
-
|
|
|
|
- lstrcpyW((*ids)[0], defaultW);
|
|
|
|
-
|
|
|
|
- *keys = HeapAlloc(GetProcessHeap(), 0, sizeof(void *));
|
|
|
|
- (*keys)[0] = NULL;
|
|
|
|
+ if (flow == eRender)
|
|
|
|
+ (*keys)[0] = pulse_render_guid;
|
|
|
|
+ else
|
|
|
|
+ (*keys)[0] = pulse_capture_guid;
|
|
|
|
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
@@ -761,12 +767,12 @@ int WINAPI AUDDRV_GetPriority(void)
|
|
|
|
return SUCCEEDED(hr) ? 3 : 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
-HRESULT WINAPI AUDDRV_GetAudioEndpoint(void *key, IMMDevice *dev,
|
|
|
|
- EDataFlow dataflow, IAudioClient **out)
|
|
|
|
+HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, IAudioClient **out)
|
|
|
|
{
|
|
|
|
HRESULT hr;
|
|
|
|
ACImpl *This;
|
|
|
|
int i;
|
|
|
|
+ EDataFlow dataflow;
|
|
|
|
|
|
|
|
/* Give one visible warning per session
|
|
|
|
* Sadly wine has chosen not to accept the winepulse patch, so support ourselves
|
|
|
|
@@ -780,7 +786,11 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(void *key, IMMDevice *dev,
|
|
|
|
}
|
|
|
|
|
|
|
|
TRACE("%s %p %p\n", debugstr_guid(guid), dev, out);
|
|
|
|
- if (dataflow != eRender && dataflow != eCapture)
|
|
|
|
+ if (IsEqualGUID(guid, &pulse_render_guid))
|
|
|
|
+ dataflow = eRender;
|
|
|
|
+ else if (IsEqualGUID(guid, &pulse_capture_guid))
|
|
|
|
+ dataflow = eCapture;
|
|
|
|
+ else
|
|
|
|
return E_UNEXPECTED;
|
|
|
|
|
|
|
|
*out = NULL;
|
|
|
|
diff --git a/dlls/winepulse.drv/winepulse.drv.spec b/dlls/winepulse.drv/winepulse.drv.spec
|
|
|
|
index a089166..612bf46 100644
|
|
|
|
--- a/dlls/winepulse.drv/winepulse.drv.spec
|
|
|
|
+++ b/dlls/winepulse.drv/winepulse.drv.spec
|
|
|
|
@@ -1,5 +1,5 @@
|
|
|
|
# MMDevAPI driver functions
|
|
|
|
@ stdcall -private GetPriority() AUDDRV_GetPriority
|
|
|
|
@ stdcall -private GetEndpointIDs(long ptr ptr ptr ptr) AUDDRV_GetEndpointIDs
|
|
|
|
-@ stdcall -private GetAudioEndpoint(ptr ptr long ptr) AUDDRV_GetAudioEndpoint
|
|
|
|
+@ stdcall -private GetAudioEndpoint(ptr ptr ptr) AUDDRV_GetAudioEndpoint
|
|
|
|
@ stdcall -private GetAudioSessionManager(ptr ptr) AUDDRV_GetAudioSessionManager
|
|
|
|
--
|
2014-01-05 16:26:32 -08:00
|
|
|
1.8.5.2
|
2013-12-06 12:09:21 -08:00
|
|
|
|