-- v5: winepulse: Refactor AudioClient's Initialize to match other drivers. wineoss: Use create_stream's channel count in AudioClient's Initialize. winecoreaudio: Use create_stream's channel count in AudioClient's Initialize. winealsa: Use create_stream's channel count in AudioClient's Initialize. winepulse: Use mmdevapi's set_stream_volumes. wineoss: Use mmdevapi's set_stream_volumes. winecoreaudio: Use mmdevapi's set_stream_volumes. winealsa: Use mmdevapi's set_stream_volumes.
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winealsa.drv/mmdevdrv.c | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-)
diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c index d8596c9371c..43a44b0569d 100644 --- a/dlls/winealsa.drv/mmdevdrv.c +++ b/dlls/winealsa.drv/mmdevdrv.c @@ -85,6 +85,8 @@ extern HRESULT stream_release(stream_handle stream, HANDLE timer_thread);
extern WCHAR *get_application_name(void);
+extern void set_stream_volumes(struct audio_client *This); + void DECLSPEC_HIDDEN sessions_lock(void) { EnterCriticalSection(&g_sessions_lock); @@ -201,18 +203,6 @@ static void get_device_guid(EDataFlow flow, const char *device, GUID *guid) RegCloseKey(key); }
-static void set_stream_volumes(ACImpl *This) -{ - struct set_volumes_params params; - - params.stream = This->stream; - params.master_volume = (This->session->mute ? 0.0f : This->session->master_vol); - params.volumes = This->vols; - params.session_volumes = This->session->channel_vols; - - ALSA_CALL(set_volumes, ¶ms); -} - HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, WCHAR ***ids_out, GUID **guids_out, UINT *num, UINT *def_index) {
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winecoreaudio.drv/mmdevdrv.c | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-)
diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c index 683e22e35a2..fc011021d68 100644 --- a/dlls/winecoreaudio.drv/mmdevdrv.c +++ b/dlls/winecoreaudio.drv/mmdevdrv.c @@ -79,6 +79,8 @@ extern HRESULT stream_release(stream_handle stream, HANDLE timer_thread);
extern WCHAR *get_application_name(void);
+extern void set_stream_volumes(struct audio_client *This); + void DECLSPEC_HIDDEN sessions_lock(void) { EnterCriticalSection(&g_sessions_lock); @@ -198,18 +200,6 @@ static void get_device_guid(EDataFlow flow, const char *dev, GUID *guid) RegCloseKey(key); }
-static void set_stream_volumes(ACImpl *This) -{ - struct set_volumes_params params; - - params.stream = This->stream; - params.master_volume = This->session->mute ? 0.0f : This->session->master_vol; - params.volumes = This->vols; - params.session_volumes = This->session->channel_vols; - - UNIX_CALL(set_volumes, ¶ms); -} - HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, WCHAR ***ids_out, GUID **guids_out, UINT *num, UINT *def_index) {
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/wineoss.drv/mmdevdrv.c | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-)
diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c index 950b711bad0..bacf22a9029 100644 --- a/dlls/wineoss.drv/mmdevdrv.c +++ b/dlls/wineoss.drv/mmdevdrv.c @@ -91,6 +91,8 @@ extern HRESULT stream_release(stream_handle stream, HANDLE timer_thread);
extern WCHAR *get_application_name(void);
+extern void set_stream_volumes(struct audio_client *This); + void DECLSPEC_HIDDEN sessions_lock(void) { EnterCriticalSection(&g_sessions_lock); @@ -215,17 +217,6 @@ static void get_device_guid(EDataFlow flow, const char *device, GUID *guid) RegCloseKey(key); }
-static void set_stream_volumes(ACImpl *This) -{ - struct set_volumes_params params; - - params.stream = This->stream; - params.master_volume = (This->session->mute ? 0.0f : This->session->master_vol); - params.volumes = This->vols; - params.session_volumes = This->session->channel_vols; - OSS_CALL(set_volumes, ¶ms); -} - static const OSSDevice *get_ossdevice_from_guid(const GUID *guid) { OSSDevice *dev_item;
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winepulse.drv/mmdevdrv.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-)
diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c index 4efc75dc5a5..c932652f2e9 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c @@ -137,6 +137,8 @@ extern HRESULT stream_release(stream_handle stream, HANDLE timer_thread);
extern WCHAR *get_application_name(void);
+extern void set_stream_volumes(struct audio_client *This); + static inline ACImpl *impl_from_IAudioClient3(IAudioClient3 *iface) { return CONTAINING_RECORD(iface, ACImpl, IAudioClient3_iface); @@ -149,16 +151,6 @@ static void pulse_call(enum unix_funcs code, void *params) assert(!status); }
-static void set_stream_volumes(ACImpl *This) -{ - struct set_volumes_params params; - params.stream = This->stream; - params.master_volume = This->session->mute ? 0.0f : This->session->master_vol; - params.volumes = This->vols; - params.session_volumes = This->session->channel_vols; - pulse_call(set_volumes, ¶ms); -} - static void get_device_guid(HKEY drv_key, EDataFlow flow, const char *pulse_name, GUID *guid) { WCHAR key_name[MAX_PULSE_NAME_LEN + 2];
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winealsa.drv/alsa.c | 1 + dlls/winealsa.drv/mmdevdrv.c | 13 ++++++------- 2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/dlls/winealsa.drv/alsa.c b/dlls/winealsa.drv/alsa.c index 4930850e9dc..0f2211d77e7 100644 --- a/dlls/winealsa.drv/alsa.c +++ b/dlls/winealsa.drv/alsa.c @@ -1050,6 +1050,7 @@ exit: free(stream->vols); free(stream); }else{ + *params->channel_count = params->fmt->nChannels; *params->stream = (stream_handle)(UINT_PTR)stream; }
diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c index 43a44b0569d..497ea04cecb 100644 --- a/dlls/winealsa.drv/mmdevdrv.c +++ b/dlls/winealsa.drv/mmdevdrv.c @@ -550,7 +550,7 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface, ACImpl *This = impl_from_IAudioClient3(iface); struct create_stream_params params; stream_handle stream; - unsigned int i; + unsigned int i, channel_count; WCHAR *name;
TRACE("(%p)->(%x, %lx, %s, %s, %p, %s)\n", This, mode, flags, @@ -598,7 +598,7 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface, params.duration = duration; params.period = period; params.fmt = fmt; - params.channel_count = NULL; + params.channel_count = &channel_count; params.stream = &stream;
ALSA_CALL(create_stream, ¶ms); @@ -610,17 +610,15 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface, return params.result; }
- This->channel_count = fmt->nChannels; - This->vols = HeapAlloc(GetProcessHeap(), 0, This->channel_count * sizeof(float)); + This->vols = HeapAlloc(GetProcessHeap(), 0, channel_count * sizeof(float)); if(!This->vols){ params.result = E_OUTOFMEMORY; goto exit; } - for(i = 0; i < This->channel_count; ++i) + for(i = 0; i < channel_count; ++i) This->vols[i] = 1.f;
- params.result = get_audio_session(sessionguid, This->parent, This->channel_count, - &This->session); + params.result = get_audio_session(sessionguid, This->parent, channel_count, &This->session); if(FAILED(params.result)) goto exit;
@@ -633,6 +631,7 @@ exit: This->vols = NULL; }else{ This->stream = stream; + This->channel_count = channel_count; set_stream_volumes(This); }
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winecoreaudio.drv/coreaudio.c | 4 +++- dlls/winecoreaudio.drv/mmdevdrv.c | 13 ++++++------- 2 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/dlls/winecoreaudio.drv/coreaudio.c b/dlls/winecoreaudio.drv/coreaudio.c index f41118e62f5..1e712a624cb 100644 --- a/dlls/winecoreaudio.drv/coreaudio.c +++ b/dlls/winecoreaudio.drv/coreaudio.c @@ -776,8 +776,10 @@ end: if(stream->unit) AudioComponentInstanceDispose(stream->unit); free(stream->fmt); free(stream); - } else + } else { + *params->channel_count = params->fmt->nChannels; *params->stream = (stream_handle)(UINT_PTR)stream; + }
return STATUS_SUCCESS; } diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c index fc011021d68..f7f72f43d83 100644 --- a/dlls/winecoreaudio.drv/mmdevdrv.c +++ b/dlls/winecoreaudio.drv/mmdevdrv.c @@ -545,7 +545,7 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface, ACImpl *This = impl_from_IAudioClient3(iface); struct create_stream_params params; stream_handle stream; - UINT32 i; + UINT32 i, channel_count; WCHAR *name;
TRACE("(%p)->(%x, %lx, %s, %s, %p, %s)\n", This, mode, flags, @@ -593,7 +593,7 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface, params.duration = duration; params.period = period; params.fmt = fmt; - params.channel_count = NULL; + params.channel_count = &channel_count; params.stream = &stream;
UNIX_CALL(create_stream, ¶ms); @@ -605,18 +605,16 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface, return params.result; }
- This->channel_count = fmt->nChannels; - - This->vols = HeapAlloc(GetProcessHeap(), 0, This->channel_count * sizeof(float)); + This->vols = HeapAlloc(GetProcessHeap(), 0, channel_count * sizeof(float)); if(!This->vols){ params.result = E_OUTOFMEMORY; goto end; }
- for(i = 0; i < This->channel_count; ++i) + for(i = 0; i < channel_count; ++i) This->vols[i] = 1.f;
- params.result = get_audio_session(sessionguid, This->parent, fmt->nChannels, &This->session); + params.result = get_audio_session(sessionguid, This->parent, channel_count, &This->session); if(FAILED(params.result)) goto end;
list_add_tail(&This->session->clients, &This->entry); @@ -628,6 +626,7 @@ end: This->vols = NULL; }else{ This->stream = stream; + This->channel_count = channel_count; set_stream_volumes(This); }
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/wineoss.drv/mmdevdrv.c | 13 ++++++------- dlls/wineoss.drv/oss.c | 1 + 2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c index bacf22a9029..5f2236ce63e 100644 --- a/dlls/wineoss.drv/mmdevdrv.c +++ b/dlls/wineoss.drv/mmdevdrv.c @@ -527,7 +527,7 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface, ACImpl *This = impl_from_IAudioClient3(iface); struct create_stream_params params; stream_handle stream; - unsigned int i; + unsigned int i, channel_count; WCHAR *name;
TRACE("(%p)->(%x, %lx, %s, %s, %p, %s)\n", This, mode, flags, @@ -575,7 +575,7 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface, params.duration = duration; params.period = period; params.fmt = fmt; - params.channel_count = NULL; + params.channel_count = &channel_count; params.stream = &stream;
OSS_CALL(create_stream, ¶ms); @@ -587,17 +587,15 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface, return params.result; }
- This->channel_count = fmt->nChannels; - This->vols = HeapAlloc(GetProcessHeap(), 0, This->channel_count * sizeof(float)); + This->vols = HeapAlloc(GetProcessHeap(), 0, channel_count * sizeof(float)); if(!This->vols){ params.result = E_OUTOFMEMORY; goto exit; } - for(i = 0; i < This->channel_count; ++i) + for(i = 0; i < channel_count; ++i) This->vols[i] = 1.f;
- params.result = get_audio_session(sessionguid, This->parent, This->channel_count, - &This->session); + params.result = get_audio_session(sessionguid, This->parent, channel_count, &This->session);
exit: if(FAILED(params.result)){ @@ -607,6 +605,7 @@ exit: } else { list_add_tail(&This->session->clients, &This->entry); This->stream = stream; + This->channel_count = channel_count; set_stream_volumes(This); }
diff --git a/dlls/wineoss.drv/oss.c b/dlls/wineoss.drv/oss.c index 5049c711e98..2097137f749 100644 --- a/dlls/wineoss.drv/oss.c +++ b/dlls/wineoss.drv/oss.c @@ -674,6 +674,7 @@ exit: free(stream->fmt); free(stream); }else{ + *params->channel_count = params->fmt->nChannels; *params->stream = (stream_handle)(UINT_PTR)stream; }
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winepulse.drv/mmdevdrv.c | 40 +++++++++++++++++------------------ 1 file changed, 19 insertions(+), 21 deletions(-)
diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c index c932652f2e9..299d5dc67c5 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c @@ -563,10 +563,9 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface, { ACImpl *This = impl_from_IAudioClient3(iface); struct create_stream_params params; - unsigned int i, channel_count; + UINT32 i, channel_count; stream_handle stream; WCHAR *name; - HRESULT hr;
TRACE("(%p)->(%x, %lx, %s, %s, %p, %s)\n", This, mode, flags, wine_dbgstr_longlong(duration), wine_dbgstr_longlong(period), fmt, debugstr_guid(sessionguid)); @@ -599,10 +598,10 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface, return AUDCLNT_E_ALREADY_INITIALIZED; }
- if (FAILED(hr = main_loop_start())) + if (FAILED(params.result = main_loop_start())) { sessions_unlock(); - return hr; + return params.result; }
params.name = name = get_application_name(); @@ -617,38 +616,37 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient3 *iface, params.channel_count = &channel_count; pulse_call(create_stream, ¶ms); free(name); - if (FAILED(hr = params.result)) + if (FAILED(params.result)) { sessions_unlock(); - return hr; + return params.result; }
if (!(This->vols = malloc(channel_count * sizeof(*This->vols)))) { - stream_release(stream, NULL); - sessions_unlock(); - return E_OUTOFMEMORY; + params.result = E_OUTOFMEMORY; + goto exit; } for (i = 0; i < channel_count; i++) This->vols[i] = 1.f;
- hr = get_audio_session(sessionguid, This->parent, channel_count, &This->session); - if (FAILED(hr)) - { + params.result = get_audio_session(sessionguid, This->parent, channel_count, &This->session); + +exit: + if (FAILED(params.result)) { + stream_release(stream, NULL); free(This->vols); This->vols = NULL; - sessions_unlock(); - stream_release(stream, NULL); - return E_OUTOFMEMORY; + } else { + list_add_tail(&This->session->clients, &This->entry); + This->stream = stream; + This->channel_count = channel_count; + set_stream_volumes(This); }
- This->stream = stream; - This->channel_count = channel_count; - list_add_tail(&This->session->clients, &This->entry); - set_stream_volumes(This); - sessions_unlock(); - return S_OK; + + return params.result; }
extern HRESULT WINAPI client_GetBufferSize(IAudioClient3 *iface,
This merge request was approved by Huw Davies.