Huw Davies : winecoreaudio: Move get_current_padding to the unixlib.

Alexandre Julliard julliard at winehq.org
Tue Nov 23 16:03:30 CST 2021


Module: wine
Branch: master
Commit: 2dd83eed7b75b10984088894c18e2d8392b876f0
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=2dd83eed7b75b10984088894c18e2d8392b876f0

Author: Huw Davies <huw at codeweavers.com>
Date:   Tue Nov 23 07:55:02 2021 +0000

winecoreaudio: Move get_current_padding to the unixlib.

Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 */
 };




More information about the wine-cvs mailing list