-- v3: wineoss: Use mmdevapi's AudioClient's Start. winecoreaudio: Use mmdevapi's AudioClient's Start. winealsa: Use mmdevapi's AudioClient's Start. winepulse: Move AudioClient's Start into mmdevapi. winecoreaudio: Lock sessions in AudioClient's Start. winepulse: Lock sessions in AudioClient's Start.
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/mmdevapi/client.c | 55 ++++++++++++++++++++++++++++++++++ dlls/winepulse.drv/mmdevdrv.c | 56 +++++------------------------------ 2 files changed, 62 insertions(+), 49 deletions(-)
diff --git a/dlls/mmdevapi/client.c b/dlls/mmdevapi/client.c index d2d4939bc73..e30e459c6c5 100644 --- a/dlls/mmdevapi/client.c +++ b/dlls/mmdevapi/client.c @@ -196,6 +196,61 @@ const IAudioCaptureClientVtbl AudioCaptureClient_Vtbl = capture_GetNextPacketSize };
+HRESULT WINAPI client_Stop(IAudioClient3 *iface) +{ + struct audio_client *This = impl_from_IAudioClient3(iface); + struct stop_params params; + + TRACE("(%p)\n", This); + + if (!This->stream) + return AUDCLNT_E_NOT_INITIALIZED; + + params.stream = This->stream; + + WINE_UNIX_CALL(stop, ¶ms); + + return params.result; +} + +HRESULT WINAPI client_Reset(IAudioClient3 *iface) +{ + struct audio_client *This = impl_from_IAudioClient3(iface); + struct reset_params params; + + TRACE("(%p)\n", This); + + if (!This->stream) + return AUDCLNT_E_NOT_INITIALIZED; + + params.stream = This->stream; + + WINE_UNIX_CALL(reset, ¶ms); + + return params.result; +} + +HRESULT WINAPI client_SetEventHandle(IAudioClient3 *iface, HANDLE event) +{ + struct audio_client *This = impl_from_IAudioClient3(iface); + struct set_event_handle_params params; + + TRACE("(%p)->(%p)\n", This, event); + + if (!event) + return E_INVALIDARG; + + if (!This->stream) + return AUDCLNT_E_NOT_INITIALIZED; + + params.stream = This->stream; + params.event = event; + + WINE_UNIX_CALL(set_event_handle, ¶ms); + + return params.result; +} + HRESULT WINAPI client_GetService(IAudioClient3 *iface, REFIID riid, void **ppv) { struct audio_client *This = impl_from_IAudioClient3(iface); diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c index 19d4bd41c7a..64b399f2a2b 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c @@ -972,54 +972,12 @@ static HRESULT WINAPI AudioClient_Start(IAudioClient3 *iface) return S_OK; }
-static HRESULT WINAPI AudioClient_Stop(IAudioClient3 *iface) -{ - ACImpl *This = impl_from_IAudioClient3(iface); - struct stop_params params; +extern HRESULT WINAPI client_Stop(IAudioClient3 *iface);
- TRACE("(%p)\n", This); +extern HRESULT WINAPI client_Reset(IAudioClient3 *iface);
- if (!This->stream) - return AUDCLNT_E_NOT_INITIALIZED; - - params.stream = This->stream; - pulse_call(stop, ¶ms); - return params.result; -} - -static HRESULT WINAPI AudioClient_Reset(IAudioClient3 *iface) -{ - ACImpl *This = impl_from_IAudioClient3(iface); - struct reset_params params; - - TRACE("(%p)\n", This); - - if (!This->stream) - return AUDCLNT_E_NOT_INITIALIZED; - - params.stream = This->stream; - pulse_call(reset, ¶ms); - return params.result; -} - -static HRESULT WINAPI AudioClient_SetEventHandle(IAudioClient3 *iface, - HANDLE event) -{ - ACImpl *This = impl_from_IAudioClient3(iface); - struct set_event_handle_params params; - - TRACE("(%p)->(%p)\n", This, event); - - if (!event) - return E_INVALIDARG; - if (!This->stream) - return AUDCLNT_E_NOT_INITIALIZED; - - params.stream = This->stream; - params.event = event; - pulse_call(set_event_handle, ¶ms); - return params.result; -} +extern HRESULT WINAPI client_SetEventHandle(IAudioClient3 *iface, + HANDLE event);
extern HRESULT WINAPI client_GetService(IAudioClient3 *iface, REFIID riid, void **ppv); @@ -1058,9 +1016,9 @@ static const IAudioClient3Vtbl AudioClient3_Vtbl = AudioClient_GetMixFormat, AudioClient_GetDevicePeriod, AudioClient_Start, - AudioClient_Stop, - AudioClient_Reset, - AudioClient_SetEventHandle, + client_Stop, + client_Reset, + client_SetEventHandle, client_GetService, client_IsOffloadCapable, client_SetClientProperties,
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winealsa.drv/mmdevdrv.c | 63 ++++-------------------------------- 1 file changed, 7 insertions(+), 56 deletions(-)
diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c index b96eba1e0fe..7c2a3d2d9d3 100644 --- a/dlls/winealsa.drv/mmdevdrv.c +++ b/dlls/winealsa.drv/mmdevdrv.c @@ -839,61 +839,12 @@ static HRESULT WINAPI AudioClient_Start(IAudioClient3 *iface) return params.result; }
-static HRESULT WINAPI AudioClient_Stop(IAudioClient3 *iface) -{ - ACImpl *This = impl_from_IAudioClient3(iface); - struct stop_params params; - - TRACE("(%p)\n", This); - - if(!This->stream) - return AUDCLNT_E_NOT_INITIALIZED; - - params.stream = This->stream; - - ALSA_CALL(stop, ¶ms); - - return params.result; -} - -static HRESULT WINAPI AudioClient_Reset(IAudioClient3 *iface) -{ - ACImpl *This = impl_from_IAudioClient3(iface); - struct reset_params params; - - TRACE("(%p)\n", This); - - if(!This->stream) - return AUDCLNT_E_NOT_INITIALIZED; - - params.stream = This->stream; - - ALSA_CALL(reset, ¶ms); - - return params.result; -} - -static HRESULT WINAPI AudioClient_SetEventHandle(IAudioClient3 *iface, - HANDLE event) -{ - ACImpl *This = impl_from_IAudioClient3(iface); - struct set_event_handle_params params; +extern HRESULT WINAPI client_Stop(IAudioClient3 *iface);
- TRACE("(%p)->(%p)\n", This, event); +extern HRESULT WINAPI client_Reset(IAudioClient3 *iface);
- if(!event) - return E_INVALIDARG; - - if(!This->stream) - return AUDCLNT_E_NOT_INITIALIZED; - - params.stream = This->stream; - params.event = event; - - ALSA_CALL(set_event_handle, ¶ms); - - return params.result; -} +extern HRESULT WINAPI client_SetEventHandle(IAudioClient3 *iface, + HANDLE event);
extern HRESULT WINAPI client_GetService(IAudioClient3 *iface, REFIID riid, void **ppv); @@ -932,9 +883,9 @@ static const IAudioClient3Vtbl AudioClient3_Vtbl = AudioClient_GetMixFormat, AudioClient_GetDevicePeriod, AudioClient_Start, - AudioClient_Stop, - AudioClient_Reset, - AudioClient_SetEventHandle, + client_Stop, + client_Reset, + client_SetEventHandle, client_GetService, client_IsOffloadCapable, client_SetClientProperties,
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winecoreaudio.drv/mmdevdrv.c | 57 ++++--------------------------- 1 file changed, 7 insertions(+), 50 deletions(-)
diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c index dcd712c7c7a..3c3d9b0b1ac 100644 --- a/dlls/winecoreaudio.drv/mmdevdrv.c +++ b/dlls/winecoreaudio.drv/mmdevdrv.c @@ -811,55 +811,12 @@ static HRESULT WINAPI AudioClient_Start(IAudioClient3 *iface) return S_OK; }
-static HRESULT WINAPI AudioClient_Stop(IAudioClient3 *iface) -{ - ACImpl *This = impl_from_IAudioClient3(iface); - struct stop_params params; - - TRACE("(%p)\n", This); - - if(!This->stream) - return AUDCLNT_E_NOT_INITIALIZED; - - params.stream = This->stream; - UNIX_CALL(stop, ¶ms); - return params.result; -} - -static HRESULT WINAPI AudioClient_Reset(IAudioClient3 *iface) -{ - ACImpl *This = impl_from_IAudioClient3(iface); - struct reset_params params; - - TRACE("(%p)\n", This); - - if(!This->stream) - return AUDCLNT_E_NOT_INITIALIZED; - - params.stream = This->stream; - UNIX_CALL(reset, ¶ms); - return params.result; -} - -static HRESULT WINAPI AudioClient_SetEventHandle(IAudioClient3 *iface, - HANDLE event) -{ - ACImpl *This = impl_from_IAudioClient3(iface); - struct set_event_handle_params params; +extern HRESULT WINAPI client_Stop(IAudioClient3 *iface);
- TRACE("(%p)->(%p)\n", This, event); +extern HRESULT WINAPI client_Reset(IAudioClient3 *iface);
- if(!event) - return E_INVALIDARG; - - if(!This->stream) - return AUDCLNT_E_NOT_INITIALIZED; - - params.stream = This->stream; - params.event = event; - UNIX_CALL(set_event_handle, ¶ms); - return params.result; -} +extern HRESULT WINAPI client_SetEventHandle(IAudioClient3 *iface, + HANDLE event);
extern HRESULT WINAPI client_GetService(IAudioClient3 *iface, REFIID riid, void **ppv); @@ -898,9 +855,9 @@ static const IAudioClient3Vtbl AudioClient3_Vtbl = AudioClient_GetMixFormat, AudioClient_GetDevicePeriod, AudioClient_Start, - AudioClient_Stop, - AudioClient_Reset, - AudioClient_SetEventHandle, + client_Stop, + client_Reset, + client_SetEventHandle, client_GetService, client_IsOffloadCapable, client_SetClientProperties,
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/wineoss.drv/mmdevdrv.c | 60 +++++-------------------------------- 1 file changed, 7 insertions(+), 53 deletions(-)
diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c index 188bf37aac9..4864c9bf86f 100644 --- a/dlls/wineoss.drv/mmdevdrv.c +++ b/dlls/wineoss.drv/mmdevdrv.c @@ -805,58 +805,12 @@ static HRESULT WINAPI AudioClient_Start(IAudioClient3 *iface) return params.result; }
-static HRESULT WINAPI AudioClient_Stop(IAudioClient3 *iface) -{ - ACImpl *This = impl_from_IAudioClient3(iface); - struct stop_params params; - - TRACE("(%p)\n", This); - - if(!This->stream) - return AUDCLNT_E_NOT_INITIALIZED; +extern HRESULT WINAPI client_Stop(IAudioClient3 *iface);
- params.stream = This->stream; - OSS_CALL(stop, ¶ms); - - return params.result; -} - -static HRESULT WINAPI AudioClient_Reset(IAudioClient3 *iface) -{ - ACImpl *This = impl_from_IAudioClient3(iface); - struct reset_params params; - - TRACE("(%p)\n", This); - - if(!This->stream) - return AUDCLNT_E_NOT_INITIALIZED; +extern HRESULT WINAPI client_Reset(IAudioClient3 *iface);
- params.stream = This->stream; - OSS_CALL(reset, ¶ms); - - return params.result; -} - -static HRESULT WINAPI AudioClient_SetEventHandle(IAudioClient3 *iface, - HANDLE event) -{ - ACImpl *This = impl_from_IAudioClient3(iface); - struct set_event_handle_params params; - - TRACE("(%p)->(%p)\n", This, event); - - if(!event) - return E_INVALIDARG; - - if(!This->stream) - return AUDCLNT_E_NOT_INITIALIZED; - - params.stream = This->stream; - params.event = event; - OSS_CALL(set_event_handle, ¶ms); - - return params.result; -} +extern HRESULT WINAPI client_SetEventHandle(IAudioClient3 *iface, + HANDLE event);
extern HRESULT WINAPI client_GetService(IAudioClient3 *iface, REFIID riid, void **ppv); @@ -895,9 +849,9 @@ static const IAudioClient3Vtbl AudioClient3_Vtbl = AudioClient_GetMixFormat, AudioClient_GetDevicePeriod, AudioClient_Start, - AudioClient_Stop, - AudioClient_Reset, - AudioClient_SetEventHandle, + client_Stop, + client_Reset, + client_SetEventHandle, client_GetService, client_IsOffloadCapable, client_SetClientProperties,
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winepulse.drv/mmdevdrv.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c index 64b399f2a2b..e971f4d8f36 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c @@ -952,24 +952,28 @@ static HRESULT WINAPI AudioClient_Start(IAudioClient3 *iface) { ACImpl *This = impl_from_IAudioClient3(iface); struct start_params params; - HRESULT hr;
TRACE("(%p)\n", This);
- if (!This->stream) - return AUDCLNT_E_NOT_INITIALIZED; + sessions_lock(); + + if (!This->stream) { + params.result = AUDCLNT_E_NOT_INITIALIZED; + goto exit; + }
params.stream = This->stream; - pulse_call(start, ¶ms); - if (FAILED(hr = params.result)) - return hr;
- if (!This->timer_thread) { + WINE_UNIX_CALL(start, ¶ms); + + if (SUCCEEDED(params.result) && !This->timer_thread) { This->timer_thread = CreateThread(NULL, 0, pulse_timer_cb, This, 0, NULL); SetThreadPriority(This->timer_thread, THREAD_PRIORITY_TIME_CRITICAL); } +exit: + sessions_unlock();
- return S_OK; + return params.result; }
extern HRESULT WINAPI client_Stop(IAudioClient3 *iface);
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winecoreaudio.drv/mmdevdrv.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c index 3c3d9b0b1ac..75b463fe1f7 100644 --- a/dlls/winecoreaudio.drv/mmdevdrv.c +++ b/dlls/winecoreaudio.drv/mmdevdrv.c @@ -791,24 +791,28 @@ static HRESULT WINAPI AudioClient_Start(IAudioClient3 *iface) { ACImpl *This = impl_from_IAudioClient3(iface); struct start_params params; - HRESULT hr;
TRACE("(%p)\n", This);
- if(!This->stream) - return AUDCLNT_E_NOT_INITIALIZED; + sessions_lock(); + + if (!This->stream) { + params.result = AUDCLNT_E_NOT_INITIALIZED; + goto exit; + }
params.stream = This->stream; - UNIX_CALL(start, ¶ms); - if(FAILED(hr = params.result)) - return hr;
- if(!This->timer_thread) { + WINE_UNIX_CALL(start, ¶ms); + + if (SUCCEEDED(params.result) && !This->timer_thread) { This->timer_thread = CreateThread(NULL, 0, ca_timer_thread, This, 0, NULL); SetThreadPriority(This->timer_thread, THREAD_PRIORITY_TIME_CRITICAL); } +exit: + sessions_unlock();
- return S_OK; + return params.result; }
extern HRESULT WINAPI client_Stop(IAudioClient3 *iface);
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/mmdevapi/client.c | 42 +++++++++++++++++++++++++++++++++++ dlls/winepulse.drv/mmdevdrv.c | 40 ++------------------------------- 2 files changed, 44 insertions(+), 38 deletions(-)
diff --git a/dlls/mmdevapi/client.c b/dlls/mmdevapi/client.c index e30e459c6c5..7501c4770de 100644 --- a/dlls/mmdevapi/client.c +++ b/dlls/mmdevapi/client.c @@ -80,6 +80,20 @@ static inline struct audio_client *impl_from_IAudioStreamVolume(IAudioStreamVolu return CONTAINING_RECORD(iface, struct audio_client, IAudioStreamVolume_iface); }
+static DWORD CALLBACK timer_loop_func(void *user) +{ + struct timer_loop_params params; + struct audio_client *This = user; + + SetThreadDescription(GetCurrentThread(), L"audio_client_timer"); + + params.stream = This->stream; + + WINE_UNIX_CALL(timer_loop, ¶ms); + + return 0; +} + static HRESULT WINAPI capture_QueryInterface(IAudioCaptureClient *iface, REFIID riid, void **ppv) { struct audio_client *This = impl_from_IAudioCaptureClient(iface); @@ -196,6 +210,34 @@ const IAudioCaptureClientVtbl AudioCaptureClient_Vtbl = capture_GetNextPacketSize };
+HRESULT WINAPI client_Start(IAudioClient3 *iface) +{ + struct audio_client *This = impl_from_IAudioClient3(iface); + struct start_params params; + + TRACE("(%p)\n", This); + + sessions_lock(); + + if (!This->stream) { + params.result = AUDCLNT_E_NOT_INITIALIZED; + goto exit; + } + + params.stream = This->stream; + + WINE_UNIX_CALL(start, ¶ms); + + if (SUCCEEDED(params.result) && !This->timer_thread) { + This->timer_thread = CreateThread(NULL, 0, timer_loop_func, This, 0, NULL); + SetThreadPriority(This->timer_thread, THREAD_PRIORITY_TIME_CRITICAL); + } +exit: + sessions_unlock(); + + return params.result; +} + HRESULT WINAPI client_Stop(IAudioClient3 *iface) { struct audio_client *This = impl_from_IAudioClient3(iface); diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c index e971f4d8f36..b8b0eff3116 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c @@ -275,16 +275,6 @@ static WCHAR *get_application_name(BOOL query_app_name) return wcsdup(name); }
-static DWORD WINAPI pulse_timer_cb(void *user) -{ - struct timer_loop_params params; - ACImpl *This = user; - params.stream = This->stream; - SetThreadDescription(GetCurrentThread(), L"winepulse_timer_loop"); - pulse_call(timer_loop, ¶ms); - return 0; -} - static void set_stream_volumes(ACImpl *This) { struct set_volumes_params params; @@ -948,33 +938,7 @@ static HRESULT WINAPI AudioClient_GetDevicePeriod(IAudioClient3 *iface, return params.result; }
-static HRESULT WINAPI AudioClient_Start(IAudioClient3 *iface) -{ - ACImpl *This = impl_from_IAudioClient3(iface); - struct start_params params; - - TRACE("(%p)\n", This); - - sessions_lock(); - - if (!This->stream) { - params.result = AUDCLNT_E_NOT_INITIALIZED; - goto exit; - } - - params.stream = This->stream; - - WINE_UNIX_CALL(start, ¶ms); - - if (SUCCEEDED(params.result) && !This->timer_thread) { - This->timer_thread = CreateThread(NULL, 0, pulse_timer_cb, This, 0, NULL); - SetThreadPriority(This->timer_thread, THREAD_PRIORITY_TIME_CRITICAL); - } -exit: - sessions_unlock(); - - return params.result; -} +extern HRESULT WINAPI client_Start(IAudioClient3 *iface);
extern HRESULT WINAPI client_Stop(IAudioClient3 *iface);
@@ -1019,7 +983,7 @@ static const IAudioClient3Vtbl AudioClient3_Vtbl = AudioClient_IsFormatSupported, AudioClient_GetMixFormat, AudioClient_GetDevicePeriod, - AudioClient_Start, + client_Start, client_Stop, client_Reset, client_SetEventHandle,
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winealsa.drv/mmdevdrv.c | 44 ++---------------------------------- 1 file changed, 2 insertions(+), 42 deletions(-)
diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c index 7c2a3d2d9d3..142d31484e5 100644 --- a/dlls/winealsa.drv/mmdevdrv.c +++ b/dlls/winealsa.drv/mmdevdrv.c @@ -135,20 +135,6 @@ static HRESULT alsa_stream_release(stream_handle stream, HANDLE timer_thread) return params.result; }
-static DWORD WINAPI alsa_timer_thread(void *user) -{ - struct timer_loop_params params; - ACImpl *This = user; - - SetThreadDescription(GetCurrentThread(), L"winealsa_timer"); - - params.stream = This->stream; - - ALSA_CALL(timer_loop, ¶ms); - - return 0; -} - static void set_device_guid(EDataFlow flow, HKEY drv_key, const WCHAR *key_name, GUID *guid) { @@ -811,33 +797,7 @@ static HRESULT WINAPI AudioClient_GetDevicePeriod(IAudioClient3 *iface, return params.result; }
-static HRESULT WINAPI AudioClient_Start(IAudioClient3 *iface) -{ - ACImpl *This = impl_from_IAudioClient3(iface); - struct start_params params; - - TRACE("(%p)\n", This); - - sessions_lock(); - - if(!This->stream){ - sessions_unlock(); - return AUDCLNT_E_NOT_INITIALIZED; - } - - params.stream = This->stream; - - ALSA_CALL(start, ¶ms); - - if(SUCCEEDED(params.result) && !This->timer_thread){ - This->timer_thread = CreateThread(NULL, 0, alsa_timer_thread, This, 0, NULL); - SetThreadPriority(This->timer_thread, THREAD_PRIORITY_TIME_CRITICAL); - } - - sessions_unlock(); - - return params.result; -} +extern HRESULT WINAPI client_Start(IAudioClient3 *iface);
extern HRESULT WINAPI client_Stop(IAudioClient3 *iface);
@@ -882,7 +842,7 @@ static const IAudioClient3Vtbl AudioClient3_Vtbl = AudioClient_IsFormatSupported, AudioClient_GetMixFormat, AudioClient_GetDevicePeriod, - AudioClient_Start, + client_Start, client_Stop, client_Reset, client_SetEventHandle,
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winecoreaudio.drv/mmdevdrv.c | 40 ++----------------------------- 1 file changed, 2 insertions(+), 38 deletions(-)
diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c index 75b463fe1f7..793899148d4 100644 --- a/dlls/winecoreaudio.drv/mmdevdrv.c +++ b/dlls/winecoreaudio.drv/mmdevdrv.c @@ -777,43 +777,7 @@ static HRESULT WINAPI AudioClient_GetDevicePeriod(IAudioClient3 *iface, return params.result; }
-static DWORD WINAPI ca_timer_thread(void *user) -{ - struct timer_loop_params params; - ACImpl *This = user; - params.stream = This->stream; - SetThreadDescription(GetCurrentThread(), L"winecoreaudio_timer_loop"); - UNIX_CALL(timer_loop, ¶ms); - return 0; -} - -static HRESULT WINAPI AudioClient_Start(IAudioClient3 *iface) -{ - ACImpl *This = impl_from_IAudioClient3(iface); - struct start_params params; - - TRACE("(%p)\n", This); - - sessions_lock(); - - if (!This->stream) { - params.result = AUDCLNT_E_NOT_INITIALIZED; - goto exit; - } - - params.stream = This->stream; - - WINE_UNIX_CALL(start, ¶ms); - - if (SUCCEEDED(params.result) && !This->timer_thread) { - This->timer_thread = CreateThread(NULL, 0, ca_timer_thread, This, 0, NULL); - SetThreadPriority(This->timer_thread, THREAD_PRIORITY_TIME_CRITICAL); - } -exit: - sessions_unlock(); - - return params.result; -} +extern HRESULT WINAPI client_Start(IAudioClient3 *iface);
extern HRESULT WINAPI client_Stop(IAudioClient3 *iface);
@@ -858,7 +822,7 @@ static const IAudioClient3Vtbl AudioClient3_Vtbl = AudioClient_IsFormatSupported, AudioClient_GetMixFormat, AudioClient_GetDevicePeriod, - AudioClient_Start, + client_Start, client_Stop, client_Reset, client_SetEventHandle,
From: Davide Beatrici git@davidebeatrici.dev
--- dlls/wineoss.drv/mmdevdrv.c | 40 ++----------------------------------- 1 file changed, 2 insertions(+), 38 deletions(-)
diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c index 4864c9bf86f..a25b03676f2 100644 --- a/dlls/wineoss.drv/mmdevdrv.c +++ b/dlls/wineoss.drv/mmdevdrv.c @@ -148,17 +148,6 @@ static HRESULT stream_release(stream_handle stream, HANDLE timer_thread) return params.result; }
-static DWORD WINAPI timer_thread(void *user) -{ - struct timer_loop_params params; - ACImpl *This = user; - - params.stream = This->stream; - OSS_CALL(timer_loop, ¶ms); - - return 0; -} - static void set_device_guid(EDataFlow flow, HKEY drv_key, const WCHAR *key_name, GUID *guid) { @@ -778,32 +767,7 @@ static HRESULT WINAPI AudioClient_GetDevicePeriod(IAudioClient3 *iface, return params.result; }
-static HRESULT WINAPI AudioClient_Start(IAudioClient3 *iface) -{ - ACImpl *This = impl_from_IAudioClient3(iface); - struct start_params params; - - TRACE("(%p)\n", This); - - sessions_lock(); - - if(!This->stream){ - sessions_unlock(); - return AUDCLNT_E_NOT_INITIALIZED; - } - - params.stream = This->stream; - OSS_CALL(start, ¶ms); - - if(SUCCEEDED(params.result) && !This->timer_thread){ - This->timer_thread = CreateThread(NULL, 0, timer_thread, This, 0, NULL); - SetThreadPriority(This->timer_thread, THREAD_PRIORITY_TIME_CRITICAL); - } - - sessions_unlock(); - - return params.result; -} +extern HRESULT WINAPI client_Start(IAudioClient3 *iface);
extern HRESULT WINAPI client_Stop(IAudioClient3 *iface);
@@ -848,7 +812,7 @@ static const IAudioClient3Vtbl AudioClient3_Vtbl = AudioClient_IsFormatSupported, AudioClient_GetMixFormat, AudioClient_GetDevicePeriod, - AudioClient_Start, + client_Start, client_Stop, client_Reset, client_SetEventHandle,
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=133532
Your paranoid android.
=== debian11 (32 bit report) ===
user32: msg.c:6897: Test failed: SetFocus(hwnd) on a button: 4: the msg 0x0007 was expected, but got msg 0x0005 instead msg.c:6897: Test failed: SetFocus(hwnd) on a button: 5: the msg 0x0138 was expected, but got msg 0x030f instead msg.c:6897: Test failed: SetFocus(hwnd) on a button: 6: the msg 0x0111 was expected, but got msg 0x001c instead msg.c:6897: Test failed: SetFocus(hwnd) on a button: 8: the msg 0x8000 was expected, but got msg 0x0086 instead msg.c:6897: Test failed: SetFocus(hwnd) on a button: 9: the msg sequence is not complete: expected 0000 - actual 0006
Davide Beatrici (@davidebeatrici) commented about dlls/winecoreaudio.drv/mmdevdrv.c:
{ ACImpl *This = impl_from_IAudioClient3(iface); struct start_params params;
HRESULT hr;
TRACE("(%p)\n", This);
if(!This->stream)
return AUDCLNT_E_NOT_INITIALIZED;
- sessions_lock();
- if (!This->stream) {
Is the added spacing alright? I didn't notice when committing (the code is copied from `winepulse`).
Huw Davies (@huw) commented about dlls/winepulse.drv/mmdevdrv.c:
{ ACImpl *This = impl_from_IAudioClient3(iface); struct start_params params;
HRESULT hr;
TRACE("(%p)\n", This);
if (!This->stream)
return AUDCLNT_E_NOT_INITIALIZED;
- sessions_lock();
- if (!This->stream) {
params.result = AUDCLNT_E_NOT_INITIALIZED;
goto exit;
Could we please make this look like the alsa and oss driver, rather than introduce this `exit` label?
On Wed Jun 7 08:29:13 2023 +0000, Huw Davies wrote:
Could we please make this look like the alsa and oss driver, rather than introduce this `exit` label?
Sure, no problem. There are only two `session_unlock()` calls anyway.