From: Davide Beatrici git@davidebeatrici.dev
--- dlls/mmdevapi/audiosessionmanager.c | 17 +++++++++++++++++ dlls/mmdevapi/devenum.c | 2 +- dlls/mmdevapi/main.c | 1 - dlls/mmdevapi/mmdevapi.h | 3 +-- 4 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/dlls/mmdevapi/audiosessionmanager.c b/dlls/mmdevapi/audiosessionmanager.c index 3d9bf21541e..255ad667283 100644 --- a/dlls/mmdevapi/audiosessionmanager.c +++ b/dlls/mmdevapi/audiosessionmanager.c @@ -169,3 +169,20 @@ static const IAudioSessionManager2Vtbl AudioSessionManager2_Vtbl = ASM_RegisterDuckNotification, ASM_UnregisterDuckNotification }; + +HRESULT AudioSessionManager_Create(IMMDevice *device, IAudioSessionManager2 **ppv) +{ + session_mgr *This; + + This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*This)); + if (!This) + return E_OUTOFMEMORY; + + This->IAudioSessionManager2_iface.lpVtbl = &AudioSessionManager2_Vtbl; + This->device = device; + This->ref = 1; + + *ppv = &This->IAudioSessionManager2_iface; + + return S_OK; +} diff --git a/dlls/mmdevapi/devenum.c b/dlls/mmdevapi/devenum.c index 69e13a498cf..bda683fa323 100644 --- a/dlls/mmdevapi/devenum.c +++ b/dlls/mmdevapi/devenum.c @@ -600,7 +600,7 @@ static HRESULT WINAPI MMDevice_Activate(IMMDevice *iface, REFIID riid, DWORD cls else if (IsEqualIID(riid, &IID_IAudioSessionManager) || IsEqualIID(riid, &IID_IAudioSessionManager2)) { - hr = drvs.pGetAudioSessionManager(iface, (IAudioSessionManager2**)ppv); + hr = AudioSessionManager_Create(iface, (IAudioSessionManager2**)ppv); } else if (IsEqualIID(riid, &IID_IBaseFilter)) { diff --git a/dlls/mmdevapi/main.c b/dlls/mmdevapi/main.c index a17770802c1..32314c67b97 100644 --- a/dlls/mmdevapi/main.c +++ b/dlls/mmdevapi/main.c @@ -100,7 +100,6 @@ static BOOL load_driver(const WCHAR *name, DriverFuncs *driver) if(!driver->p##n) { goto fail; } } while(0) LDFC(GetEndpointIDs); LDFC(GetAudioEndpoint); - LDFC(GetAudioSessionManager); LDFC(GetAudioSessionWrapper); #undef LDFC
diff --git a/dlls/mmdevapi/mmdevapi.h b/dlls/mmdevapi/mmdevapi.h index 1726eae5508..46f95331b1a 100644 --- a/dlls/mmdevapi/mmdevapi.h +++ b/dlls/mmdevapi/mmdevapi.h @@ -50,8 +50,6 @@ typedef struct _DriverFuncs { GUID **guids, UINT *num, UINT *default_index); HRESULT (WINAPI *pGetAudioEndpoint)(void *key, IMMDevice *dev, IAudioClient **out); - HRESULT (WINAPI *pGetAudioSessionManager)(IMMDevice *device, - IAudioSessionManager2 **out); HRESULT (WINAPI *pGetAudioSessionWrapper)(const GUID *guid, IMMDevice *device, audio_session_wrapper **out); HRESULT (WINAPI *pGetPropValue)(GUID *guid, @@ -77,6 +75,7 @@ typedef struct MMDevice {
extern HRESULT AudioClient_Create(MMDevice *parent, IAudioClient **ppv) 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;
extern HRESULT load_devices_from_reg(void) DECLSPEC_HIDDEN;