From: Davide Beatrici git@davidebeatrici.dev
--- dlls/mmdevapi/session.c | 21 +++++++++++++++++++++ dlls/winepulse.drv/mmdevdrv.c | 21 +-------------------- 2 files changed, 22 insertions(+), 20 deletions(-)
diff --git a/dlls/mmdevapi/session.c b/dlls/mmdevapi/session.c index 6762dad255e..d8e115bca31 100644 --- a/dlls/mmdevapi/session.c +++ b/dlls/mmdevapi/session.c @@ -551,6 +551,27 @@ const ISimpleAudioVolumeVtbl SimpleAudioVolume_Vtbl = simplevolume_GetMute };
+void session_init_vols(struct audio_session *session, UINT channels) +{ + if (session->channel_count < channels) { + UINT i; + + if (session->channel_vols) + session->channel_vols = HeapReAlloc(GetProcessHeap(), 0, session->channel_vols, + sizeof(float) * channels); + else + session->channel_vols = HeapAlloc(GetProcessHeap(), 0, sizeof(float) * channels); + + if (!session->channel_vols) + return; + + for (i = session->channel_count; i < channels; i++) + session->channel_vols[i] = 1.f; + + session->channel_count = channels; + } +} + struct audio_session_wrapper *session_wrapper_create(struct audio_client *client) { struct audio_session_wrapper *ret; diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c index dc0f1562d6d..8dbbd61a5bd 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c @@ -399,26 +399,7 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, IAudioClient return S_OK; }
-static void session_init_vols(AudioSession *session, UINT channels) -{ - if (session->channel_count < channels) { - UINT i; - - if (session->channel_vols) - session->channel_vols = HeapReAlloc(GetProcessHeap(), 0, - session->channel_vols, sizeof(float) * channels); - else - session->channel_vols = HeapAlloc(GetProcessHeap(), 0, - sizeof(float) * channels); - if (!session->channel_vols) - return; - - for(i = session->channel_count; i < channels; ++i) - session->channel_vols[i] = 1.f; - - session->channel_count = channels; - } -} +extern void session_init_vols(AudioSession *session, UINT channels);
static AudioSession *create_session(const GUID *guid, IMMDevice *device, UINT num_channels)
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winealsa.drv/mmdevdrv.c | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-)
diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c index 1f1679ef313..979b45b1c9f 100644 --- a/dlls/winealsa.drv/mmdevdrv.c +++ b/dlls/winealsa.drv/mmdevdrv.c @@ -375,26 +375,7 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, IAudioClient return S_OK; }
-static void session_init_vols(AudioSession *session, UINT channels) -{ - if(session->channel_count < channels){ - UINT i; - - if(session->channel_vols) - session->channel_vols = HeapReAlloc(GetProcessHeap(), 0, - session->channel_vols, sizeof(float) * channels); - else - session->channel_vols = HeapAlloc(GetProcessHeap(), 0, - sizeof(float) * channels); - if(!session->channel_vols) - return; - - for(i = session->channel_count; i < channels; ++i) - session->channel_vols[i] = 1.f; - - session->channel_count = channels; - } -} +extern void session_init_vols(AudioSession *session, UINT channels);
static AudioSession *create_session(const GUID *guid, IMMDevice *device, UINT num_channels)
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winecoreaudio.drv/mmdevdrv.c | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-)
diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c index f8683fdf5fb..17dab958af8 100644 --- a/dlls/winecoreaudio.drv/mmdevdrv.c +++ b/dlls/winecoreaudio.drv/mmdevdrv.c @@ -369,26 +369,7 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, IAudioClient return S_OK; }
-static void session_init_vols(AudioSession *session, UINT channels) -{ - if(session->channel_count < channels){ - UINT i; - - if(session->channel_vols) - session->channel_vols = HeapReAlloc(GetProcessHeap(), 0, - session->channel_vols, sizeof(float) * channels); - else - session->channel_vols = HeapAlloc(GetProcessHeap(), 0, - sizeof(float) * channels); - if(!session->channel_vols) - return; - - for(i = session->channel_count; i < channels; ++i) - session->channel_vols[i] = 1.f; - - session->channel_count = channels; - } -} +extern void session_init_vols(AudioSession *session, UINT channels);
static AudioSession *create_session(const GUID *guid, IMMDevice *device, UINT num_channels)
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/wineoss.drv/mmdevdrv.c | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-)
diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c index 2ebced1cfca..600d8fa1ea7 100644 --- a/dlls/wineoss.drv/mmdevdrv.c +++ b/dlls/wineoss.drv/mmdevdrv.c @@ -359,26 +359,7 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, return S_OK; }
-static void session_init_vols(AudioSession *session, UINT channels) -{ - if(session->channel_count < channels){ - UINT i; - - if(session->channel_vols) - session->channel_vols = HeapReAlloc(GetProcessHeap(), 0, - session->channel_vols, sizeof(float) * channels); - else - session->channel_vols = HeapAlloc(GetProcessHeap(), 0, - sizeof(float) * channels); - if(!session->channel_vols) - return; - - for(i = session->channel_count; i < channels; ++i) - session->channel_vols[i] = 1.f; - - session->channel_count = channels; - } -} +extern void session_init_vols(AudioSession *session, UINT channels);
static AudioSession *create_session(const GUID *guid, IMMDevice *device, UINT num_channels)
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/mmdevapi/audiosessionmanager.c | 2 -- dlls/mmdevapi/session.c | 24 +++++++++++++++++++++++ dlls/winepulse.drv/mmdevdrv.c | 30 ++++------------------------- 3 files changed, 28 insertions(+), 28 deletions(-)
diff --git a/dlls/mmdevapi/audiosessionmanager.c b/dlls/mmdevapi/audiosessionmanager.c index dc0c5f609b7..abba0ad3a1d 100644 --- a/dlls/mmdevapi/audiosessionmanager.c +++ b/dlls/mmdevapi/audiosessionmanager.c @@ -26,8 +26,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(mmdevapi);
-static struct list g_sessions = LIST_INIT(g_sessions); - static CRITICAL_SECTION g_sessions_lock; static CRITICAL_SECTION_DEBUG g_sessions_lock_debug = { diff --git a/dlls/mmdevapi/session.c b/dlls/mmdevapi/session.c index d8e115bca31..32718739f03 100644 --- a/dlls/mmdevapi/session.c +++ b/dlls/mmdevapi/session.c @@ -40,6 +40,8 @@ extern void sessions_unlock(void) DECLSPEC_HIDDEN;
extern void set_stream_volumes(struct audio_client *This) DECLSPEC_HIDDEN;
+struct list sessions = LIST_INIT(sessions); + static inline struct audio_session_wrapper *impl_from_IAudioSessionControl2(IAudioSessionControl2 *iface) { return CONTAINING_RECORD(iface, struct audio_session_wrapper, IAudioSessionControl2_iface); @@ -572,6 +574,28 @@ void session_init_vols(struct audio_session *session, UINT channels) } }
+struct audio_session *session_create(const GUID *guid, IMMDevice *device, UINT channels) +{ + struct audio_session *ret = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, + sizeof(struct audio_session)); + if (!ret) + return NULL; + + memcpy(&ret->guid, guid, sizeof(GUID)); + + ret->device = device; + + list_init(&ret->clients); + + list_add_head(&sessions, &ret->entry); + + session_init_vols(ret, channels); + + ret->master_vol = 1.f; + + return ret; +} + struct audio_session_wrapper *session_wrapper_create(struct audio_client *client) { struct audio_session_wrapper *ret; diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c index 8dbbd61a5bd..34237ebbef3 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c @@ -56,7 +56,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(pulse);
#define NULL_PTR_ERR MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, RPC_X_NULL_REF_POINTER)
-static struct list g_sessions = LIST_INIT(g_sessions); +extern struct list sessions = LIST_INIT(sessions); static struct list g_devices_cache = LIST_INIT(g_devices_cache);
struct device_cache { @@ -401,30 +401,8 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, IAudioClient
extern void session_init_vols(AudioSession *session, UINT channels);
-static AudioSession *create_session(const GUID *guid, IMMDevice *device, - UINT num_channels) -{ - AudioSession *ret; - - ret = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(AudioSession)); - if (!ret) - return NULL; - - memcpy(&ret->guid, guid, sizeof(GUID)); - - ret->device = device; - - list_init(&ret->clients); - - list_add_head(&g_sessions, &ret->entry); - - session_init_vols(ret, num_channels); - - ret->master_vol = 1.f; - - return ret; -} - +extern AudioSession *create_session(const GUID *guid, IMMDevice *device, + UINT num_channels); /* if channels == 0, then this will return or create a session with * matching dataflow and GUID. otherwise, channels must also match */ HRESULT get_audio_session(const GUID *sessionguid, @@ -441,7 +419,7 @@ HRESULT get_audio_session(const GUID *sessionguid, }
*out = NULL; - LIST_FOR_EACH_ENTRY(session, &g_sessions, AudioSession, entry) { + LIST_FOR_EACH_ENTRY(session, &sessions, AudioSession, entry) { if (session->device == device && IsEqualGUID(sessionguid, &session->guid)) { session_init_vols(session, channels);
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winealsa.drv/mmdevdrv.c | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-)
diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c index 979b45b1c9f..a24a91fefce 100644 --- a/dlls/winealsa.drv/mmdevdrv.c +++ b/dlls/winealsa.drv/mmdevdrv.c @@ -61,7 +61,7 @@ static CRITICAL_SECTION_DEBUG g_sessions_lock_debug = 0, 0, { (DWORD_PTR)(__FILE__ ": g_sessions_lock") } }; static CRITICAL_SECTION g_sessions_lock = { &g_sessions_lock_debug, -1, 0, 0, 0, 0 }; -static struct list g_sessions = LIST_INIT(g_sessions); +extern struct list sessions = LIST_INIT(sessions);
static WCHAR drv_key_devicesW[256]; static const WCHAR guidW[] = {'g','u','i','d',0}; @@ -377,29 +377,8 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, IAudioClient
extern void session_init_vols(AudioSession *session, UINT channels);
-static AudioSession *create_session(const GUID *guid, IMMDevice *device, - UINT num_channels) -{ - AudioSession *ret; - - ret = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(AudioSession)); - if(!ret) - return NULL; - - memcpy(&ret->guid, guid, sizeof(GUID)); - - ret->device = device; - - list_init(&ret->clients); - - list_add_head(&g_sessions, &ret->entry); - - session_init_vols(ret, num_channels); - - ret->master_vol = 1.f; - - return ret; -} +extern AudioSession *create_session(const GUID *guid, IMMDevice *device, + UINT num_channels);
/* if channels == 0, then this will return or create a session with * matching dataflow and GUID. otherwise, channels must also match */ @@ -417,7 +396,7 @@ HRESULT get_audio_session(const GUID *sessionguid, }
*out = NULL; - LIST_FOR_EACH_ENTRY(session, &g_sessions, AudioSession, entry){ + LIST_FOR_EACH_ENTRY(session, &sessions, AudioSession, entry){ if(session->device == device && IsEqualGUID(sessionguid, &session->guid)){ session_init_vols(session, channels);
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winecoreaudio.drv/mmdevdrv.c | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-)
diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c index 17dab958af8..3a210bb4ac4 100644 --- a/dlls/winecoreaudio.drv/mmdevdrv.c +++ b/dlls/winecoreaudio.drv/mmdevdrv.c @@ -68,7 +68,7 @@ static CRITICAL_SECTION_DEBUG g_sessions_lock_debug = 0, 0, { (DWORD_PTR)(__FILE__ ": g_sessions_lock") } }; static CRITICAL_SECTION g_sessions_lock = { &g_sessions_lock_debug, -1, 0, 0, 0, 0 }; -static struct list g_sessions = LIST_INIT(g_sessions); +extern struct list sessions = LIST_INIT(sessions);
extern struct audio_session_wrapper *session_wrapper_create( struct audio_client *client) DECLSPEC_HIDDEN; @@ -371,30 +371,8 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, IAudioClient
extern void session_init_vols(AudioSession *session, UINT channels);
-static AudioSession *create_session(const GUID *guid, IMMDevice *device, - UINT num_channels) -{ - AudioSession *ret; - - ret = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(AudioSession)); - if(!ret) - return NULL; - - memcpy(&ret->guid, guid, sizeof(GUID)); - - ret->device = device; - - list_init(&ret->clients); - - list_add_head(&g_sessions, &ret->entry); - - session_init_vols(ret, num_channels); - - ret->master_vol = 1.f; - - return ret; -} - +extern AudioSession *create_session(const GUID *guid, IMMDevice *device, + UINT num_channels); /* if channels == 0, then this will return or create a session with * matching dataflow and GUID. otherwise, channels must also match */ HRESULT get_audio_session(const GUID *sessionguid, @@ -411,7 +389,7 @@ HRESULT get_audio_session(const GUID *sessionguid, }
*out = NULL; - LIST_FOR_EACH_ENTRY(session, &g_sessions, AudioSession, entry){ + LIST_FOR_EACH_ENTRY(session, &sessions, AudioSession, entry){ if(session->device == device && IsEqualGUID(sessionguid, &session->guid)){ session_init_vols(session, channels);
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/wineoss.drv/mmdevdrv.c | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-)
diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c index 600d8fa1ea7..43906d82d6f 100644 --- a/dlls/wineoss.drv/mmdevdrv.c +++ b/dlls/wineoss.drv/mmdevdrv.c @@ -70,7 +70,7 @@ static CRITICAL_SECTION_DEBUG g_sessions_lock_debug = 0, 0, { (DWORD_PTR)(__FILE__ ": g_sessions_lock") } }; static CRITICAL_SECTION g_sessions_lock = { &g_sessions_lock_debug, -1, 0, 0, 0, 0 }; -static struct list g_sessions = LIST_INIT(g_sessions); +extern struct list sessions = LIST_INIT(sessions);
extern const IAudioClient3Vtbl AudioClient3_Vtbl; extern const IAudioRenderClientVtbl AudioRenderClient_Vtbl; @@ -361,30 +361,8 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev,
extern void session_init_vols(AudioSession *session, UINT channels);
-static AudioSession *create_session(const GUID *guid, IMMDevice *device, - UINT num_channels) -{ - AudioSession *ret; - - ret = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(AudioSession)); - if(!ret) - return NULL; - - memcpy(&ret->guid, guid, sizeof(GUID)); - - ret->device = device; - - list_init(&ret->clients); - - list_add_head(&g_sessions, &ret->entry); - - session_init_vols(ret, num_channels); - - ret->master_vol = 1.f; - - return ret; -} - +extern AudioSession *create_session(const GUID *guid, IMMDevice *device, + UINT num_channels); /* if channels == 0, then this will return or create a session with * matching dataflow and GUID. otherwise, channels must also match */ HRESULT get_audio_session(const GUID *sessionguid, @@ -401,7 +379,7 @@ HRESULT get_audio_session(const GUID *sessionguid, }
*out = NULL; - LIST_FOR_EACH_ENTRY(session, &g_sessions, AudioSession, entry){ + LIST_FOR_EACH_ENTRY(session, &sessions, AudioSession, entry){ if(session->device == device && IsEqualGUID(sessionguid, &session->guid)){ session_init_vols(session, channels);
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/mmdevapi/audiosessionmanager.c | 6 ----- dlls/mmdevapi/session.c | 41 ++++++++++++++++++++++++++--- dlls/winepulse.drv/mmdevdrv.c | 38 ++------------------------ 3 files changed, 40 insertions(+), 45 deletions(-)
diff --git a/dlls/mmdevapi/audiosessionmanager.c b/dlls/mmdevapi/audiosessionmanager.c index abba0ad3a1d..74368ea2be3 100644 --- a/dlls/mmdevapi/audiosessionmanager.c +++ b/dlls/mmdevapi/audiosessionmanager.c @@ -45,12 +45,6 @@ void sessions_unlock(void) LeaveCriticalSection(&g_sessions_lock); }
-HRESULT get_audio_session(const GUID *sessionguid, IMMDevice *device, UINT channels, - struct audio_session **out) -{ - return E_NOTIMPL; -} - static inline struct session_mgr *impl_from_IAudioSessionManager2(IAudioSessionManager2 *iface) { return CONTAINING_RECORD(iface, struct session_mgr, IAudioSessionManager2_iface); diff --git a/dlls/mmdevapi/session.c b/dlls/mmdevapi/session.c index 32718739f03..d63b5368078 100644 --- a/dlls/mmdevapi/session.c +++ b/dlls/mmdevapi/session.c @@ -40,7 +40,7 @@ extern void sessions_unlock(void) DECLSPEC_HIDDEN;
extern void set_stream_volumes(struct audio_client *This) DECLSPEC_HIDDEN;
-struct list sessions = LIST_INIT(sessions); +static struct list sessions = LIST_INIT(sessions);
static inline struct audio_session_wrapper *impl_from_IAudioSessionControl2(IAudioSessionControl2 *iface) { @@ -553,7 +553,7 @@ const ISimpleAudioVolumeVtbl SimpleAudioVolume_Vtbl = simplevolume_GetMute };
-void session_init_vols(struct audio_session *session, UINT channels) +static void session_init_vols(struct audio_session *session, UINT channels) { if (session->channel_count < channels) { UINT i; @@ -574,7 +574,7 @@ void session_init_vols(struct audio_session *session, UINT channels) } }
-struct audio_session *session_create(const GUID *guid, IMMDevice *device, UINT channels) +static struct audio_session *session_create(const GUID *guid, IMMDevice *device, UINT channels) { struct audio_session *ret = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct audio_session)); @@ -618,3 +618,38 @@ struct audio_session_wrapper *session_wrapper_create(struct audio_client *client
return ret; } + +/* If channels == 0, then this will return or create a session with + * matching dataflow and GUID. Otherwise, channels must also match. */ +HRESULT get_audio_session(const GUID *guid, IMMDevice *device, UINT channels, + struct audio_session **out) +{ + struct audio_session *session; + const GUID null_guid = { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } }; + + TRACE("(%s, %p, %u, %p)\n", debugstr_guid(guid), device, channels, out); + + if (!guid || IsEqualGUID(guid, &null_guid)) { + if (!(*out = session_create(&null_guid, device, channels))) + return E_OUTOFMEMORY; + + return S_OK; + } + + *out = NULL; + LIST_FOR_EACH_ENTRY(session, &sessions, struct audio_session, entry) { + if (session->device == device && + IsEqualGUID(guid, &session->guid)) { + session_init_vols(session, channels); + *out = session; + break; + } + } + + if (!*out) { + if (!(*out = session_create(guid, device, channels))) + return E_OUTOFMEMORY; + } + + return S_OK; +} diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c index 34237ebbef3..69658c4cfd1 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c @@ -56,7 +56,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(pulse);
#define NULL_PTR_ERR MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, RPC_X_NULL_REF_POINTER)
-extern struct list sessions = LIST_INIT(sessions); static struct list g_devices_cache = LIST_INIT(g_devices_cache);
struct device_cache { @@ -399,43 +398,10 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, IAudioClient return S_OK; }
-extern void session_init_vols(AudioSession *session, UINT channels); - -extern AudioSession *create_session(const GUID *guid, IMMDevice *device, - UINT num_channels); /* if channels == 0, then this will return or create a session with * matching dataflow and GUID. otherwise, channels must also match */ -HRESULT get_audio_session(const GUID *sessionguid, - IMMDevice *device, UINT channels, AudioSession **out) -{ - AudioSession *session; - - if (!sessionguid || IsEqualGUID(sessionguid, &GUID_NULL)) { - *out = create_session(&GUID_NULL, device, channels); - if (!*out) - return E_OUTOFMEMORY; - - return S_OK; - } - - *out = NULL; - LIST_FOR_EACH_ENTRY(session, &sessions, AudioSession, entry) { - if (session->device == device && - IsEqualGUID(sessionguid, &session->guid)) { - session_init_vols(session, channels); - *out = session; - break; - } - } - - if (!*out) { - *out = create_session(sessionguid, device, channels); - if (!*out) - return E_OUTOFMEMORY; - } - - return S_OK; -} +extern HRESULT get_audio_session(const GUID *sessionguid, + IMMDevice *device, UINT channels, AudioSession **out);
HRESULT WINAPI AUDDRV_GetAudioSessionWrapper(const GUID *guid, IMMDevice *device, AudioSessionWrapper **out)
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winealsa.drv/mmdevdrv.c | 39 ++---------------------------------- 1 file changed, 2 insertions(+), 37 deletions(-)
diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c index a24a91fefce..49d649bc537 100644 --- a/dlls/winealsa.drv/mmdevdrv.c +++ b/dlls/winealsa.drv/mmdevdrv.c @@ -61,7 +61,6 @@ static CRITICAL_SECTION_DEBUG g_sessions_lock_debug = 0, 0, { (DWORD_PTR)(__FILE__ ": g_sessions_lock") } }; static CRITICAL_SECTION g_sessions_lock = { &g_sessions_lock_debug, -1, 0, 0, 0, 0 }; -extern struct list sessions = LIST_INIT(sessions);
static WCHAR drv_key_devicesW[256]; static const WCHAR guidW[] = {'g','u','i','d',0}; @@ -375,44 +374,10 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, IAudioClient return S_OK; }
-extern void session_init_vols(AudioSession *session, UINT channels); - -extern AudioSession *create_session(const GUID *guid, IMMDevice *device, - UINT num_channels); - /* if channels == 0, then this will return or create a session with * matching dataflow and GUID. otherwise, channels must also match */ -HRESULT get_audio_session(const GUID *sessionguid, - IMMDevice *device, UINT channels, AudioSession **out) -{ - AudioSession *session; - - if(!sessionguid || IsEqualGUID(sessionguid, &GUID_NULL)){ - *out = create_session(&GUID_NULL, device, channels); - if(!*out) - return E_OUTOFMEMORY; - - return S_OK; - } - - *out = NULL; - LIST_FOR_EACH_ENTRY(session, &sessions, AudioSession, entry){ - if(session->device == device && - IsEqualGUID(sessionguid, &session->guid)){ - session_init_vols(session, channels); - *out = session; - break; - } - } - - if(!*out){ - *out = create_session(sessionguid, device, channels); - if(!*out) - return E_OUTOFMEMORY; - } - - return S_OK; -} +extern HRESULT get_audio_session(const GUID *sessionguid, + IMMDevice *device, UINT channels, AudioSession **out);
HRESULT WINAPI AUDDRV_GetAudioSessionWrapper(const GUID *guid, IMMDevice *device, AudioSessionWrapper **out)
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winecoreaudio.drv/mmdevdrv.c | 38 ++----------------------------- 1 file changed, 2 insertions(+), 36 deletions(-)
diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c index 3a210bb4ac4..3aa774c9162 100644 --- a/dlls/winecoreaudio.drv/mmdevdrv.c +++ b/dlls/winecoreaudio.drv/mmdevdrv.c @@ -68,7 +68,6 @@ static CRITICAL_SECTION_DEBUG g_sessions_lock_debug = 0, 0, { (DWORD_PTR)(__FILE__ ": g_sessions_lock") } }; static CRITICAL_SECTION g_sessions_lock = { &g_sessions_lock_debug, -1, 0, 0, 0, 0 }; -extern struct list sessions = LIST_INIT(sessions);
extern struct audio_session_wrapper *session_wrapper_create( struct audio_client *client) DECLSPEC_HIDDEN; @@ -369,43 +368,10 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, IAudioClient return S_OK; }
-extern void session_init_vols(AudioSession *session, UINT channels); - -extern AudioSession *create_session(const GUID *guid, IMMDevice *device, - UINT num_channels); /* if channels == 0, then this will return or create a session with * matching dataflow and GUID. otherwise, channels must also match */ -HRESULT get_audio_session(const GUID *sessionguid, - IMMDevice *device, UINT channels, AudioSession **out) -{ - AudioSession *session; - - if(!sessionguid || IsEqualGUID(sessionguid, &GUID_NULL)){ - *out = create_session(&GUID_NULL, device, channels); - if(!*out) - return E_OUTOFMEMORY; - - return S_OK; - } - - *out = NULL; - LIST_FOR_EACH_ENTRY(session, &sessions, AudioSession, entry){ - if(session->device == device && - IsEqualGUID(sessionguid, &session->guid)){ - session_init_vols(session, channels); - *out = session; - break; - } - } - - if(!*out){ - *out = create_session(sessionguid, device, channels); - if(!*out) - return E_OUTOFMEMORY; - } - - return S_OK; -} +extern HRESULT get_audio_session(const GUID *sessionguid, + IMMDevice *device, UINT channels, AudioSession **out);
HRESULT WINAPI AUDDRV_GetAudioSessionWrapper(const GUID *guid, IMMDevice *device, AudioSessionWrapper **out)
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/wineoss.drv/mmdevdrv.c | 38 ++----------------------------------- 1 file changed, 2 insertions(+), 36 deletions(-)
diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c index 43906d82d6f..35ec7cc6757 100644 --- a/dlls/wineoss.drv/mmdevdrv.c +++ b/dlls/wineoss.drv/mmdevdrv.c @@ -70,7 +70,6 @@ static CRITICAL_SECTION_DEBUG g_sessions_lock_debug = 0, 0, { (DWORD_PTR)(__FILE__ ": g_sessions_lock") } }; static CRITICAL_SECTION g_sessions_lock = { &g_sessions_lock_debug, -1, 0, 0, 0, 0 }; -extern struct list sessions = LIST_INIT(sessions);
extern const IAudioClient3Vtbl AudioClient3_Vtbl; extern const IAudioRenderClientVtbl AudioRenderClient_Vtbl; @@ -359,43 +358,10 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, return S_OK; }
-extern void session_init_vols(AudioSession *session, UINT channels); - -extern AudioSession *create_session(const GUID *guid, IMMDevice *device, - UINT num_channels); /* if channels == 0, then this will return or create a session with * matching dataflow and GUID. otherwise, channels must also match */ -HRESULT get_audio_session(const GUID *sessionguid, - IMMDevice *device, UINT channels, AudioSession **out) -{ - AudioSession *session; - - if(!sessionguid || IsEqualGUID(sessionguid, &GUID_NULL)){ - *out = create_session(&GUID_NULL, device, channels); - if(!*out) - return E_OUTOFMEMORY; - - return S_OK; - } - - *out = NULL; - LIST_FOR_EACH_ENTRY(session, &sessions, AudioSession, entry){ - if(session->device == device && - IsEqualGUID(sessionguid, &session->guid)){ - session_init_vols(session, channels); - *out = session; - break; - } - } - - if(!*out){ - *out = create_session(sessionguid, device, channels); - if(!*out) - return E_OUTOFMEMORY; - } - - return S_OK; -} +extern HRESULT get_audio_session(const GUID *sessionguid, + IMMDevice *device, UINT channels, AudioSession **out);
HRESULT WINAPI AUDDRV_GetAudioSessionWrapper(const GUID *guid, IMMDevice *device, AudioSessionWrapper **out)
Davide Beatrici (@davidebeatrici) commented about dlls/mmdevapi/session.c:
return ret;
}
+/* If channels == 0, then this will return or create a session with
- matching dataflow and GUID. Otherwise, channels must also match. */
+HRESULT get_audio_session(const GUID *guid, IMMDevice *device, UINT channels,
struct audio_session **out)
+{
- struct audio_session *session;
- const GUID null_guid = { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } };
Using `GUID_NULL` results in a plethora of linker redefinitions. Same as https://gitlab.winehq.org/wine/wine/-/merge_requests/2636#note_29807.
I believe it happens because:
- We're linking to `uuid`. - `devenum.c` is including `<initguid.h>`.
Davide Beatrici (@davidebeatrici) commented about dlls/mmdevapi/session.c:
return ret;
}
+/* If channels == 0, then this will return or create a session with
- matching dataflow and GUID. Otherwise, channels must also match. */
+HRESULT get_audio_session(const GUID *guid, IMMDevice *device, UINT channels,
struct audio_session **out)
+{
- struct audio_session *session;
- const GUID null_guid = { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } };
- TRACE("(%s, %p, %u, %p)\n", debugstr_guid(guid), device, channels, out);
I added this for debugging purposes.