[PATCH 05/12] winecoreaudio: Move get_current_padding to the unixlib.

Huw Davies huw at codeweavers.com
Tue Nov 23 01:55:02 CST 2021


Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 dlls/winecoreaudio.drv/coreaudio.c | 19 +++++++++++++++++++
 dlls/winecoreaudio.drv/mmdevdrv.c  | 27 +++++++++++++--------------
 dlls/winecoreaudio.drv/unixlib.h   |  9 +++++++++
 3 files changed, 41 insertions(+), 14 deletions(-)

diff --git a/dlls/winecoreaudio.drv/coreaudio.c b/dlls/winecoreaudio.drv/coreaudio.c
index 2d5aa29555a..76febf1eb91 100644
--- a/dlls/winecoreaudio.drv/coreaudio.c
+++ b/dlls/winecoreaudio.drv/coreaudio.c
@@ -1219,6 +1219,24 @@ static NTSTATUS get_latency(void *args)
     return STATUS_SUCCESS;
 }
 
+static UINT32 get_current_padding_nolock(struct coreaudio_stream *stream)
+{
+    if(stream->flow == eCapture) capture_resample(stream);
+    return stream->held_frames;
+}
+
+static NTSTATUS get_current_padding(void *args)
+{
+    struct get_current_padding_params *params = args;
+    struct coreaudio_stream *stream = params->stream;
+
+    if(params->lock) OSSpinLockLock(&stream->lock);
+    *params->padding = get_current_padding_nolock(stream);
+    if(params->lock) OSSpinLockUnlock(&stream->lock);
+    params->result = S_OK;
+    return STATUS_SUCCESS;
+}
+
 unixlib_entry_t __wine_unix_call_funcs[] =
 {
     get_endpoint_ids,
@@ -1228,6 +1246,7 @@ unixlib_entry_t __wine_unix_call_funcs[] =
     is_format_supported,
     get_buffer_size,
     get_latency,
+    get_current_padding,
 
     capture_resample /* temporary */
 };
diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c
index 63deb458f1a..5d140665a83 100644
--- a/dlls/winecoreaudio.drv/mmdevdrv.c
+++ b/dlls/winecoreaudio.drv/mmdevdrv.c
@@ -874,22 +874,23 @@ static HRESULT WINAPI AudioClient_GetStreamLatency(IAudioClient3 *iface,
 static HRESULT AudioClient_GetCurrentPadding_nolock(ACImpl *This,
         UINT32 *numpad)
 {
+    struct get_current_padding_params params;
+
     if(!This->stream)
         return AUDCLNT_E_NOT_INITIALIZED;
 
-    if(This->dataflow == eCapture)
-        capture_resample(This);
-
-    *numpad = This->stream->held_frames;
-
-    return S_OK;
+    params.stream = This->stream;
+    params.padding = numpad;
+    params.lock = FALSE;
+    UNIX_CALL(get_current_padding, &params);
+    return params.result;
 }
 
 static HRESULT WINAPI AudioClient_GetCurrentPadding(IAudioClient3 *iface,
         UINT32 *numpad)
 {
     ACImpl *This = impl_from_IAudioClient3(iface);
-    HRESULT hr;
+    struct get_current_padding_params params;
 
     TRACE("(%p)->(%p)\n", This, numpad);
 
@@ -899,13 +900,11 @@ static HRESULT WINAPI AudioClient_GetCurrentPadding(IAudioClient3 *iface,
     if(!This->stream)
         return AUDCLNT_E_NOT_INITIALIZED;
 
-    OSSpinLockLock(&This->stream->lock);
-
-    hr = AudioClient_GetCurrentPadding_nolock(This, numpad);
-
-    OSSpinLockUnlock(&This->stream->lock);
-
-    return hr;
+    params.stream = This->stream;
+    params.padding = numpad;
+    params.lock = TRUE;
+    UNIX_CALL(get_current_padding, &params);
+    return params.result;
 }
 
 static HRESULT WINAPI AudioClient_IsFormatSupported(IAudioClient3 *iface,
diff --git a/dlls/winecoreaudio.drv/unixlib.h b/dlls/winecoreaudio.drv/unixlib.h
index dd86cd81973..072ffd233c3 100644
--- a/dlls/winecoreaudio.drv/unixlib.h
+++ b/dlls/winecoreaudio.drv/unixlib.h
@@ -107,6 +107,14 @@ struct get_latency_params
     REFERENCE_TIME *latency;
 };
 
+struct get_current_padding_params
+{
+    struct coreaudio_stream *stream;
+    BOOL lock; /* temporary */
+    HRESULT result;
+    UINT32 *padding;
+};
+
 enum unix_funcs
 {
     unix_get_endpoint_ids,
@@ -116,6 +124,7 @@ enum unix_funcs
     unix_is_format_supported,
     unix_get_buffer_size,
     unix_get_latency,
+    unix_get_current_padding,
 
     unix_capture_resample /* temporary */
 };
-- 
2.23.0




More information about the wine-devel mailing list