From: Davide Beatrici git@davidebeatrici.dev
--- dlls/mmdevapi/audiosessionmanager.c | 7 +- dlls/mmdevapi/client.c | 57 +++++++++++++- dlls/mmdevapi/devenum.c | 4 +- dlls/mmdevapi/main.c | 2 - dlls/mmdevapi/mmdevapi_private.h | 14 ++-- dlls/mmdevapi/mmdevdrv.h | 9 --- dlls/mmdevapi/session.c | 21 ++++- dlls/winealsa.drv/Makefile.in | 5 +- dlls/winealsa.drv/mmdevdrv.c | 73 +----------------- dlls/winealsa.drv/winealsa.drv.spec | 1 - dlls/winecoreaudio.drv/Makefile.in | 5 +- dlls/winecoreaudio.drv/mmdevdrv.c | 73 +----------------- dlls/winecoreaudio.drv/winecoreaudio.drv.spec | 1 - dlls/wineoss.drv/Makefile.in | 5 +- dlls/wineoss.drv/mmdevdrv.c | 76 +------------------ dlls/wineoss.drv/wineoss.drv.spec | 1 - dlls/winepulse.drv/Makefile.in | 5 +- dlls/winepulse.drv/mmdevdrv.c | 73 +----------------- dlls/winepulse.drv/winepulse.drv.spec | 1 - 19 files changed, 98 insertions(+), 335 deletions(-)
diff --git a/dlls/mmdevapi/audiosessionmanager.c b/dlls/mmdevapi/audiosessionmanager.c index 74368ea2be3..ba23634e54d 100644 --- a/dlls/mmdevapi/audiosessionmanager.c +++ b/dlls/mmdevapi/audiosessionmanager.c @@ -26,6 +26,9 @@
WINE_DEFAULT_DEBUG_CHANNEL(mmdevapi);
+extern HRESULT get_audio_session_wrapper(const GUID *guid, IMMDevice *device, + struct audio_session_wrapper **out); + static CRITICAL_SECTION g_sessions_lock; static CRITICAL_SECTION_DEBUG g_sessions_lock_debug = { @@ -102,7 +105,7 @@ static HRESULT WINAPI ASM_GetAudioSessionControl(IAudioSessionManager2 *iface,
TRACE("(%p)->(%s, %lx, %p)\n", This, debugstr_guid(guid), flags, out);
- hr = drvs.pGetAudioSessionWrapper(guid, This->device, &wrapper); + hr = get_audio_session_wrapper(guid, This->device, &wrapper); if (FAILED(hr)) return hr;
@@ -121,7 +124,7 @@ static HRESULT WINAPI ASM_GetSimpleAudioVolume(IAudioSessionManager2 *iface,
TRACE("(%p)->(%s, %lx, %p)\n", This, debugstr_guid(guid), flags, out);
- hr = drvs.pGetAudioSessionWrapper(guid, This->device, &wrapper); + hr = get_audio_session_wrapper(guid, This->device, &wrapper); if (FAILED(hr)) return hr;
diff --git a/dlls/mmdevapi/client.c b/dlls/mmdevapi/client.c index a88ef5b2a67..d8aad762627 100644 --- a/dlls/mmdevapi/client.c +++ b/dlls/mmdevapi/client.c @@ -30,8 +30,7 @@ #include <wine/debug.h> #include <wine/unixlib.h>
-#include "unixlib.h" -#include "mmdevdrv.h" +#include "mmdevapi_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(mmdevapi);
@@ -1383,3 +1382,57 @@ const IAudioStreamVolumeVtbl AudioStreamVolume_Vtbl = streamvolume_SetAllVolumes, streamvolume_GetAllVolumes }; + +HRESULT AudioClient_Create(GUID *guid, IMMDevice *device, IAudioClient **out) +{ + struct audio_client *This; + char *name; + EDataFlow dataflow; + size_t size; + HRESULT hr; + + TRACE("%s %p %p\n", debugstr_guid(guid), device, out); + + *out = NULL; + + if (!drvs.pget_device_name_from_guid(guid, &name, &dataflow)) + return AUDCLNT_E_DEVICE_INVALIDATED; + + if (dataflow != eRender && dataflow != eCapture) { + free(name); + return E_UNEXPECTED; + } + + size = strlen(name) + 1; + This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, FIELD_OFFSET(struct audio_client, device_name[size])); + if (!This) { + free(name); + return E_OUTOFMEMORY; + } + + memcpy(This->device_name, name, size); + free(name); + + This->IAudioCaptureClient_iface.lpVtbl = &AudioCaptureClient_Vtbl; + This->IAudioClient3_iface.lpVtbl = &AudioClient3_Vtbl; + This->IAudioClock_iface.lpVtbl = &AudioClock_Vtbl; + This->IAudioClock2_iface.lpVtbl = &AudioClock2_Vtbl; + This->IAudioRenderClient_iface.lpVtbl = &AudioRenderClient_Vtbl; + This->IAudioStreamVolume_iface.lpVtbl = &AudioStreamVolume_Vtbl; + + This->dataflow = dataflow; + This->parent = device; + + hr = CoCreateFreeThreadedMarshaler((IUnknown *)&This->IAudioClient3_iface, &This->marshal); + if (FAILED(hr)) { + HeapFree(GetProcessHeap(), 0, This); + return hr; + } + + IMMDevice_AddRef(This->parent); + + *out = (IAudioClient *)&This->IAudioClient3_iface; + IAudioClient3_AddRef(&This->IAudioClient3_iface); + + return S_OK; +} diff --git a/dlls/mmdevapi/devenum.c b/dlls/mmdevapi/devenum.c index 206fe810b12..c1625cf177a 100644 --- a/dlls/mmdevapi/devenum.c +++ b/dlls/mmdevapi/devenum.c @@ -474,7 +474,7 @@ static HRESULT set_format(MMDevice *dev) WAVEFORMATEX *fmt; PROPVARIANT pv = { VT_EMPTY };
- hr = drvs.pGetAudioEndpoint(&dev->devguid, &dev->IMMDevice_iface, &client); + hr = AudioClient_Create(&dev->devguid, &dev->IMMDevice_iface, &client); if(FAILED(hr)) return hr;
@@ -595,7 +595,7 @@ static HRESULT WINAPI MMDevice_Activate(IMMDevice *iface, REFIID riid, DWORD cls if (IsEqualIID(riid, &IID_IAudioClient) || IsEqualIID(riid, &IID_IAudioClient2) || IsEqualIID(riid, &IID_IAudioClient3)){ - hr = drvs.pGetAudioEndpoint(&This->devguid, iface, (IAudioClient**)ppv); + hr = AudioClient_Create(&This->devguid, iface, (IAudioClient**)ppv); }else if (IsEqualIID(riid, &IID_IAudioEndpointVolume) || IsEqualIID(riid, &IID_IAudioEndpointVolumeEx)) hr = AudioEndpointVolume_Create(This, (IAudioEndpointVolumeEx**)ppv); diff --git a/dlls/mmdevapi/main.c b/dlls/mmdevapi/main.c index d34075ebf58..5ed27c9debd 100644 --- a/dlls/mmdevapi/main.c +++ b/dlls/mmdevapi/main.c @@ -100,8 +100,6 @@ static BOOL load_driver(const WCHAR *name, DriverFuncs *driver) if(!driver->p##n) { goto fail; } } while(0) LDFC(get_device_name_from_guid); LDFC(GetEndpointIDs); - LDFC(GetAudioEndpoint); - LDFC(GetAudioSessionWrapper); #undef LDFC
/* optional - do not fail if not found */ diff --git a/dlls/mmdevapi/mmdevapi_private.h b/dlls/mmdevapi/mmdevapi_private.h index ca7a1f8f629..78582f4db69 100644 --- a/dlls/mmdevapi/mmdevapi_private.h +++ b/dlls/mmdevapi/mmdevapi_private.h @@ -16,6 +16,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
+#include <assert.h> + #include <endpointvolume.h> #include <spatialaudioclient.h> #include <winternl.h> @@ -48,10 +50,6 @@ typedef struct _DriverFuncs { * all of the elements in both arrays with HeapFree() */ HRESULT (WINAPI *pGetEndpointIDs)(EDataFlow flow, WCHAR ***ids, GUID **guids, UINT *num, UINT *default_index); - HRESULT (WINAPI *pGetAudioEndpoint)(void *key, IMMDevice *dev, - IAudioClient **out); - HRESULT (WINAPI *pGetAudioSessionWrapper)(const GUID *guid, IMMDevice *device, - struct audio_session_wrapper **out); HRESULT (WINAPI *pGetPropValue)(GUID *guid, const PROPERTYKEY *prop, PROPVARIANT *out); } DriverFuncs; @@ -73,7 +71,13 @@ typedef struct MMDevice { struct list entry; } MMDevice;
-extern HRESULT AudioClient_Create(MMDevice *parent, IAudioClient **ppv) DECLSPEC_HIDDEN; +static inline void wine_unix_call(const unsigned int code, void *args) +{ + const NTSTATUS status = __wine_unix_call(drvs.module_unixlib, code, args); + assert(!status); +} + +extern HRESULT AudioClient_Create(GUID *guid, IMMDevice *device, IAudioClient **out) DECLSPEC_HIDDEN; extern HRESULT AudioEndpointVolume_Create(MMDevice *parent, IAudioEndpointVolumeEx **ppv) DECLSPEC_HIDDEN; extern HRESULT AudioSessionManager_Create(IMMDevice *device, IAudioSessionManager2 **ppv) DECLSPEC_HIDDEN; extern HRESULT SpatialAudioClient_Create(IMMDevice *device, ISpatialAudioClient **out) DECLSPEC_HIDDEN; diff --git a/dlls/mmdevapi/mmdevdrv.h b/dlls/mmdevapi/mmdevdrv.h index c1b8790c0c5..df21859cbad 100644 --- a/dlls/mmdevapi/mmdevdrv.h +++ b/dlls/mmdevapi/mmdevdrv.h @@ -14,13 +14,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include <assert.h> - #include <audiopolicy.h> #include <mmdeviceapi.h>
#include <wine/list.h> -#include <wine/unixlib.h>
typedef struct audio_client ACImpl;
@@ -85,9 +82,3 @@ struct audio_client { /* Keep at end */ char device_name[0]; }; - -static inline void wine_unix_call(const unsigned int code, void *args) -{ - const NTSTATUS status = WINE_UNIX_CALL(code, args); - assert(!status); -} diff --git a/dlls/mmdevapi/session.c b/dlls/mmdevapi/session.c index e16ece01825..7b5db187977 100644 --- a/dlls/mmdevapi/session.c +++ b/dlls/mmdevapi/session.c @@ -28,8 +28,7 @@ #include <wine/debug.h> #include <wine/unixlib.h>
-#include "unixlib.h" -#include "mmdevdrv.h" +#include "mmdevapi_private.h"
#define NULL_PTR_ERR MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, RPC_X_NULL_REF_POINTER)
@@ -653,3 +652,21 @@ HRESULT get_audio_session(const GUID *guid, IMMDevice *device, UINT channels,
return S_OK; } + +HRESULT get_audio_session_wrapper(const GUID *guid, IMMDevice *device, + struct audio_session_wrapper **out) +{ + struct audio_session *session; + + const HRESULT hr = get_audio_session(guid, device, 0, &session); + if (FAILED(hr)) + return hr; + + *out = session_wrapper_create(NULL); + if (!*out) + return E_OUTOFMEMORY; + + (*out)->session = session; + + return S_OK; +} diff --git a/dlls/winealsa.drv/Makefile.in b/dlls/winealsa.drv/Makefile.in index d1387520742..0a86fda23c3 100644 --- a/dlls/winealsa.drv/Makefile.in +++ b/dlls/winealsa.drv/Makefile.in @@ -1,14 +1,11 @@ MODULE = winealsa.drv UNIXLIB = winealsa.so IMPORTS = uuid ole32 advapi32 version -PARENTSRC = ../mmdevapi DELAYIMPORTS = winmm UNIX_LIBS = $(ALSA_LIBS) $(PTHREAD_LIBS)
C_SRCS = \ alsa.c \ alsamidi.c \ - client.c \ midi.c \ - mmdevdrv.c \ - session.c + mmdevdrv.c diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c index fc80b102ee1..4b42e64db72 100644 --- a/dlls/winealsa.drv/mmdevdrv.c +++ b/dlls/winealsa.drv/mmdevdrv.c @@ -65,13 +65,6 @@ static CRITICAL_SECTION g_sessions_lock = { &g_sessions_lock_debug, -1, 0, 0, 0, static WCHAR drv_key_devicesW[256]; static const WCHAR guidW[] = {'g','u','i','d',0};
-extern const IAudioClient3Vtbl AudioClient3_Vtbl; -extern const IAudioRenderClientVtbl AudioRenderClient_Vtbl; -extern const IAudioCaptureClientVtbl AudioCaptureClient_Vtbl; -extern const IAudioClockVtbl AudioClock_Vtbl; -extern const IAudioClock2Vtbl AudioClock2_Vtbl; -extern const IAudioStreamVolumeVtbl AudioStreamVolume_Vtbl; - extern struct audio_session_wrapper *session_wrapper_create( struct audio_client *client) DECLSPEC_HIDDEN;
@@ -319,58 +312,6 @@ BOOL WINAPI get_device_name_from_guid(GUID *guid, char **name, EDataFlow *flow) return FALSE; }
-HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, IAudioClient **out) -{ - ACImpl *This; - char *alsa_name; - EDataFlow dataflow; - HRESULT hr; - int len; - - TRACE("%s %p %p\n", debugstr_guid(guid), dev, out); - - if(!get_device_name_from_guid(guid, &alsa_name, &dataflow)) - return AUDCLNT_E_DEVICE_INVALIDATED; - - if(dataflow != eRender && dataflow != eCapture){ - free(alsa_name); - return E_UNEXPECTED; - } - - len = strlen(alsa_name); - This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, offsetof(ACImpl, device_name[len + 1])); - if(!This){ - free(alsa_name); - return E_OUTOFMEMORY; - } - - memcpy(This->device_name, alsa_name, len + 1); - free(alsa_name); - - This->IAudioClient3_iface.lpVtbl = &AudioClient3_Vtbl; - This->IAudioRenderClient_iface.lpVtbl = &AudioRenderClient_Vtbl; - This->IAudioCaptureClient_iface.lpVtbl = &AudioCaptureClient_Vtbl; - This->IAudioClock_iface.lpVtbl = &AudioClock_Vtbl; - This->IAudioClock2_iface.lpVtbl = &AudioClock2_Vtbl; - This->IAudioStreamVolume_iface.lpVtbl = &AudioStreamVolume_Vtbl; - - hr = CoCreateFreeThreadedMarshaler((IUnknown *)&This->IAudioClient3_iface, &This->marshal); - if (FAILED(hr)) { - HeapFree(GetProcessHeap(), 0, This); - return hr; - } - - This->dataflow = dataflow; - - This->parent = dev; - IMMDevice_AddRef(This->parent); - - *out = (IAudioClient *)&This->IAudioClient3_iface; - IAudioClient3_AddRef(&This->IAudioClient3_iface); - - return S_OK; -} - /* if channels == 0, then this will return or create a session with * matching dataflow and GUID. otherwise, channels must also match */ extern HRESULT get_audio_session(const GUID *sessionguid, @@ -379,19 +320,7 @@ extern HRESULT get_audio_session(const GUID *sessionguid, HRESULT WINAPI AUDDRV_GetAudioSessionWrapper(const GUID *guid, IMMDevice *device, AudioSessionWrapper **out) { - AudioSession *session; - - HRESULT hr = get_audio_session(guid, device, 0, &session); - if(FAILED(hr)) - return hr; - - *out = session_wrapper_create(NULL); - if(!*out) - return E_OUTOFMEMORY; - - (*out)->session = session; - - return S_OK; + return E_NOTIMPL; }
HRESULT WINAPI AUDDRV_GetPropValue(GUID *guid, const PROPERTYKEY *prop, PROPVARIANT *out) diff --git a/dlls/winealsa.drv/winealsa.drv.spec b/dlls/winealsa.drv/winealsa.drv.spec index abfb2e052d8..a27c34b648f 100644 --- a/dlls/winealsa.drv/winealsa.drv.spec +++ b/dlls/winealsa.drv/winealsa.drv.spec @@ -6,6 +6,5 @@ # MMDevAPI driver functions @ stdcall -private get_device_name_from_guid(ptr ptr ptr) get_device_name_from_guid @ stdcall -private GetEndpointIDs(long ptr ptr ptr ptr) AUDDRV_GetEndpointIDs -@ stdcall -private GetAudioEndpoint(ptr ptr ptr) AUDDRV_GetAudioEndpoint @ stdcall -private GetAudioSessionWrapper(ptr ptr ptr) AUDDRV_GetAudioSessionWrapper @ stdcall -private GetPropValue(ptr ptr ptr) AUDDRV_GetPropValue diff --git a/dlls/winecoreaudio.drv/Makefile.in b/dlls/winecoreaudio.drv/Makefile.in index ecf85cffda4..0561f46f044 100644 --- a/dlls/winecoreaudio.drv/Makefile.in +++ b/dlls/winecoreaudio.drv/Makefile.in @@ -1,14 +1,11 @@ MODULE = winecoreaudio.drv UNIXLIB = winecoreaudio.so IMPORTS = uuid ole32 user32 advapi32 version -PARENTSRC = ../mmdevapi DELAYIMPORTS = winmm UNIX_LIBS = $(COREAUDIO_LIBS)
C_SRCS = \ - client.c \ coreaudio.c \ coremidi.c \ midi.c \ - mmdevdrv.c \ - session.c + mmdevdrv.c diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c index 9a5bd0fdf91..c5624506d2f 100644 --- a/dlls/winecoreaudio.drv/mmdevdrv.c +++ b/dlls/winecoreaudio.drv/mmdevdrv.c @@ -48,13 +48,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(coreaudio);
#define NULL_PTR_ERR MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, RPC_X_NULL_REF_POINTER)
-extern const IAudioClient3Vtbl AudioClient3_Vtbl; -extern const IAudioRenderClientVtbl AudioRenderClient_Vtbl; -extern const IAudioCaptureClientVtbl AudioCaptureClient_Vtbl; -extern const IAudioClockVtbl AudioClock_Vtbl; -extern const IAudioClock2Vtbl AudioClock2_Vtbl; -extern const IAudioStreamVolumeVtbl AudioStreamVolume_Vtbl; - static WCHAR drv_key_devicesW[256];
static CRITICAL_SECTION g_sessions_lock; @@ -313,58 +306,6 @@ BOOL WINAPI get_device_name_from_guid(const GUID *guid, char **name, EDataFlow * return FALSE; }
-HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, IAudioClient **out) -{ - ACImpl *This; - char *name; - SIZE_T name_len; - EDataFlow dataflow; - HRESULT hr; - - TRACE("%s %p %p\n", debugstr_guid(guid), dev, out); - - if(!get_device_name_from_guid(guid, &name, &dataflow)) - return AUDCLNT_E_DEVICE_INVALIDATED; - - if(dataflow != eRender && dataflow != eCapture){ - free(name); - return E_UNEXPECTED; - } - - name_len = strlen(name); - This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, offsetof(ACImpl, device_name[name_len + 1])); - if(!This){ - free(name); - return E_OUTOFMEMORY; - } - - memcpy(This->device_name, name, name_len + 1); - free(name); - - This->IAudioClient3_iface.lpVtbl = &AudioClient3_Vtbl; - This->IAudioRenderClient_iface.lpVtbl = &AudioRenderClient_Vtbl; - This->IAudioCaptureClient_iface.lpVtbl = &AudioCaptureClient_Vtbl; - This->IAudioClock_iface.lpVtbl = &AudioClock_Vtbl; - This->IAudioClock2_iface.lpVtbl = &AudioClock2_Vtbl; - This->IAudioStreamVolume_iface.lpVtbl = &AudioStreamVolume_Vtbl; - - This->dataflow = dataflow; - - hr = CoCreateFreeThreadedMarshaler((IUnknown *)&This->IAudioClient3_iface, &This->marshal); - if (FAILED(hr)) { - HeapFree(GetProcessHeap(), 0, This); - return hr; - } - - This->parent = dev; - IMMDevice_AddRef(This->parent); - - *out = (IAudioClient *)&This->IAudioClient3_iface; - IAudioClient3_AddRef(&This->IAudioClient3_iface); - - return S_OK; -} - /* if channels == 0, then this will return or create a session with * matching dataflow and GUID. otherwise, channels must also match */ extern HRESULT get_audio_session(const GUID *sessionguid, @@ -373,17 +314,5 @@ extern HRESULT get_audio_session(const GUID *sessionguid, HRESULT WINAPI AUDDRV_GetAudioSessionWrapper(const GUID *guid, IMMDevice *device, AudioSessionWrapper **out) { - AudioSession *session; - - HRESULT hr = get_audio_session(guid, device, 0, &session); - if(FAILED(hr)) - return hr; - - *out = session_wrapper_create(NULL); - if(!*out) - return E_OUTOFMEMORY; - - (*out)->session = session; - - return S_OK; + return E_NOTIMPL; } diff --git a/dlls/winecoreaudio.drv/winecoreaudio.drv.spec b/dlls/winecoreaudio.drv/winecoreaudio.drv.spec index 1f2ac2a9bf0..1c9751f9404 100644 --- a/dlls/winecoreaudio.drv/winecoreaudio.drv.spec +++ b/dlls/winecoreaudio.drv/winecoreaudio.drv.spec @@ -6,5 +6,4 @@ # MMDevAPI driver functions @ stdcall -private get_device_name_from_guid(ptr ptr ptr) get_device_name_from_guid @ stdcall -private GetEndpointIDs(long ptr ptr ptr ptr) AUDDRV_GetEndpointIDs -@ stdcall -private GetAudioEndpoint(ptr ptr ptr) AUDDRV_GetAudioEndpoint @ stdcall -private GetAudioSessionWrapper(ptr ptr ptr) AUDDRV_GetAudioSessionWrapper diff --git a/dlls/wineoss.drv/Makefile.in b/dlls/wineoss.drv/Makefile.in index f571397257b..97e31aea662 100644 --- a/dlls/wineoss.drv/Makefile.in +++ b/dlls/wineoss.drv/Makefile.in @@ -1,17 +1,14 @@ MODULE = wineoss.drv UNIXLIB = wineoss.so IMPORTS = uuid ole32 user32 advapi32 version -PARENTSRC = ../mmdevapi DELAYIMPORTS = winmm UNIX_LIBS = $(OSS4_LIBS) $(PTHREAD_LIBS) UNIX_CFLAGS = $(OSS4_CFLAGS)
C_SRCS = \ - client.c \ midi.c \ midipatch.c \ mmaux.c \ mmdevdrv.c \ oss.c \ - ossmidi.c \ - session.c + ossmidi.c diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c index 9a09970aa3b..1c71360a80a 100644 --- a/dlls/wineoss.drv/mmdevdrv.c +++ b/dlls/wineoss.drv/mmdevdrv.c @@ -71,13 +71,6 @@ static CRITICAL_SECTION_DEBUG g_sessions_lock_debug = }; static CRITICAL_SECTION g_sessions_lock = { &g_sessions_lock_debug, -1, 0, 0, 0, 0 };
-extern const IAudioClient3Vtbl AudioClient3_Vtbl; -extern const IAudioRenderClientVtbl AudioRenderClient_Vtbl; -extern const IAudioCaptureClientVtbl AudioCaptureClient_Vtbl; -extern const IAudioClockVtbl AudioClock_Vtbl; -extern const IAudioClock2Vtbl AudioClock2_Vtbl; -extern const IAudioStreamVolumeVtbl AudioStreamVolume_Vtbl; - extern struct audio_session_wrapper *session_wrapper_create( struct audio_client *client) DECLSPEC_HIDDEN;
@@ -300,61 +293,6 @@ end: return params.result; }
-HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, - IAudioClient **out) -{ - ACImpl *This; - char *name; - int len; - EDataFlow dataflow; - HRESULT hr; - - TRACE("%s %p %p\n", debugstr_guid(guid), dev, out); - - if(!get_device_name_from_guid(guid, &name, &dataflow)){ - WARN("Unknown GUID: %s\n", debugstr_guid(guid)); - return AUDCLNT_E_DEVICE_INVALIDATED; - } - - if(dataflow != eRender && dataflow != eCapture){ - free(name); - return E_UNEXPECTED; - } - - len = strlen(name); - This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, offsetof(ACImpl, device_name[len + 1])); - if(!This){ - free(name); - return E_OUTOFMEMORY; - } - - memcpy(This->device_name, name, len + 1); - free(name); - - hr = CoCreateFreeThreadedMarshaler((IUnknown *)&This->IAudioClient3_iface, &This->marshal); - if (FAILED(hr)) { - HeapFree(GetProcessHeap(), 0, This); - return hr; - } - - This->dataflow = dataflow; - - This->IAudioClient3_iface.lpVtbl = &AudioClient3_Vtbl; - This->IAudioRenderClient_iface.lpVtbl = &AudioRenderClient_Vtbl; - This->IAudioCaptureClient_iface.lpVtbl = &AudioCaptureClient_Vtbl; - This->IAudioClock_iface.lpVtbl = &AudioClock_Vtbl; - This->IAudioClock2_iface.lpVtbl = &AudioClock2_Vtbl; - This->IAudioStreamVolume_iface.lpVtbl = &AudioStreamVolume_Vtbl; - - This->parent = dev; - IMMDevice_AddRef(This->parent); - - *out = (IAudioClient *)&This->IAudioClient3_iface; - IAudioClient3_AddRef(&This->IAudioClient3_iface); - - return S_OK; -} - /* if channels == 0, then this will return or create a session with * matching dataflow and GUID. otherwise, channels must also match */ extern HRESULT get_audio_session(const GUID *sessionguid, @@ -363,17 +301,5 @@ extern HRESULT get_audio_session(const GUID *sessionguid, HRESULT WINAPI AUDDRV_GetAudioSessionWrapper(const GUID *guid, IMMDevice *device, AudioSessionWrapper **out) { - AudioSession *session; - - HRESULT hr = get_audio_session(guid, device, 0, &session); - if(FAILED(hr)) - return hr; - - *out = session_wrapper_create(NULL); - if(!*out) - return E_OUTOFMEMORY; - - (*out)->session = session; - - return S_OK; + return E_NOTIMPL; } diff --git a/dlls/wineoss.drv/wineoss.drv.spec b/dlls/wineoss.drv/wineoss.drv.spec index 496a6eae570..c61d81e7ee9 100644 --- a/dlls/wineoss.drv/wineoss.drv.spec +++ b/dlls/wineoss.drv/wineoss.drv.spec @@ -7,5 +7,4 @@ # MMDevAPI driver functions @ stdcall -private get_device_name_from_guid(ptr ptr ptr) get_device_name_from_guid @ stdcall -private GetEndpointIDs(long ptr ptr ptr ptr) AUDDRV_GetEndpointIDs -@ stdcall -private GetAudioEndpoint(ptr ptr ptr) AUDDRV_GetAudioEndpoint @ stdcall -private GetAudioSessionWrapper(ptr ptr ptr) AUDDRV_GetAudioSessionWrapper diff --git a/dlls/winepulse.drv/Makefile.in b/dlls/winepulse.drv/Makefile.in index f5593dbcc70..7a78f4e854e 100644 --- a/dlls/winepulse.drv/Makefile.in +++ b/dlls/winepulse.drv/Makefile.in @@ -1,12 +1,9 @@ MODULE = winepulse.drv UNIXLIB = winepulse.so IMPORTS = dxguid uuid winmm user32 advapi32 ole32 version -PARENTSRC = ../mmdevapi UNIX_LIBS = $(PULSE_LIBS) $(PTHREAD_LIBS) -lm UNIX_CFLAGS = $(PULSE_CFLAGS)
C_SRCS = \ - client.c \ mmdevdrv.c \ - pulse.c \ - session.c + pulse.c diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c index 65fbc414ce4..0180c148f1e 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c @@ -117,13 +117,6 @@ BOOL WINAPI DllMain(HINSTANCE dll, DWORD reason, void *reserved) return TRUE; }
-extern const IAudioClient3Vtbl AudioClient3_Vtbl; -extern const IAudioRenderClientVtbl AudioRenderClient_Vtbl; -extern const IAudioCaptureClientVtbl AudioCaptureClient_Vtbl; -extern const IAudioClockVtbl AudioClock_Vtbl; -extern const IAudioClock2Vtbl AudioClock2_Vtbl; -extern const IAudioStreamVolumeVtbl AudioStreamVolume_Vtbl; - extern struct audio_session_wrapper *session_wrapper_create( struct audio_client *client) DECLSPEC_HIDDEN;
@@ -343,58 +336,6 @@ BOOL WINAPI get_device_name_from_guid(GUID *guid, char **name, EDataFlow *flow) return FALSE; }
-HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, IAudioClient **out) -{ - ACImpl *This; - char *pulse_name; - EDataFlow dataflow; - unsigned len; - HRESULT hr; - - TRACE("%s %p %p\n", debugstr_guid(guid), dev, out); - - if (!get_device_name_from_guid(guid, &pulse_name, &dataflow)) - return AUDCLNT_E_DEVICE_INVALIDATED; - - if (dataflow != eRender && dataflow != eCapture) { - free(pulse_name); - return E_UNEXPECTED; - } - - *out = NULL; - - len = strlen(pulse_name) + 1; - This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, FIELD_OFFSET(ACImpl, device_name[len])); - if (!This) { - free(pulse_name); - return E_OUTOFMEMORY; - } - - memcpy(This->device_name, pulse_name, len); - free(pulse_name); - - This->IAudioClient3_iface.lpVtbl = &AudioClient3_Vtbl; - This->IAudioRenderClient_iface.lpVtbl = &AudioRenderClient_Vtbl; - This->IAudioCaptureClient_iface.lpVtbl = &AudioCaptureClient_Vtbl; - This->IAudioClock_iface.lpVtbl = &AudioClock_Vtbl; - This->IAudioClock2_iface.lpVtbl = &AudioClock2_Vtbl; - This->IAudioStreamVolume_iface.lpVtbl = &AudioStreamVolume_Vtbl; - This->dataflow = dataflow; - This->parent = dev; - - hr = CoCreateFreeThreadedMarshaler((IUnknown*)&This->IAudioClient3_iface, &This->marshal); - if (FAILED(hr)) { - HeapFree(GetProcessHeap(), 0, This); - return hr; - } - IMMDevice_AddRef(This->parent); - - *out = (IAudioClient *)&This->IAudioClient3_iface; - IAudioClient3_AddRef(&This->IAudioClient3_iface); - - return S_OK; -} - /* if channels == 0, then this will return or create a session with * matching dataflow and GUID. otherwise, channels must also match */ extern HRESULT get_audio_session(const GUID *sessionguid, @@ -403,19 +344,7 @@ extern HRESULT get_audio_session(const GUID *sessionguid, HRESULT WINAPI AUDDRV_GetAudioSessionWrapper(const GUID *guid, IMMDevice *device, AudioSessionWrapper **out) { - AudioSession *session; - - HRESULT hr = get_audio_session(guid, device, 0, &session); - if(FAILED(hr)) - return hr; - - *out = session_wrapper_create(NULL); - if(!*out) - return E_OUTOFMEMORY; - - (*out)->session = session; - - return S_OK; + return E_NOTIMPL; }
HRESULT WINAPI AUDDRV_GetPropValue(GUID *guid, const PROPERTYKEY *prop, PROPVARIANT *out) diff --git a/dlls/winepulse.drv/winepulse.drv.spec b/dlls/winepulse.drv/winepulse.drv.spec index 9ae26ae35e9..79746fe4749 100644 --- a/dlls/winepulse.drv/winepulse.drv.spec +++ b/dlls/winepulse.drv/winepulse.drv.spec @@ -1,7 +1,6 @@ # MMDevAPI driver functions @ stdcall -private get_device_name_from_guid(ptr ptr ptr) get_device_name_from_guid @ stdcall -private GetEndpointIDs(long ptr ptr ptr ptr) AUDDRV_GetEndpointIDs -@ stdcall -private GetAudioEndpoint(ptr ptr ptr) AUDDRV_GetAudioEndpoint @ stdcall -private GetAudioSessionWrapper(ptr ptr ptr) AUDDRV_GetAudioSessionWrapper @ stdcall -private GetPropValue(ptr ptr ptr) AUDDRV_GetPropValue