Huw Davies : winecoreaudio: Move get_position to the unixlib.

Alexandre Julliard julliard at winehq.org
Wed Nov 24 15:17:17 CST 2021


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

Author: Huw Davies <huw at codeweavers.com>
Date:   Wed Nov 24 11:26:45 2021 +0000

winecoreaudio: Move get_position 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 | 25 +++++++++++++++++++++++++
 dlls/winecoreaudio.drv/mmdevdrv.c  | 32 ++++++--------------------------
 dlls/winecoreaudio.drv/unixlib.h   |  9 +++++++++
 3 files changed, 40 insertions(+), 26 deletions(-)

diff --git a/dlls/winecoreaudio.drv/coreaudio.c b/dlls/winecoreaudio.drv/coreaudio.c
index 0ed4fcb02fe..d7390c5a677 100644
--- a/dlls/winecoreaudio.drv/coreaudio.c
+++ b/dlls/winecoreaudio.drv/coreaudio.c
@@ -1503,6 +1503,30 @@ static NTSTATUS get_next_packet_size(void *args)
     return STATUS_SUCCESS;
 }
 
+static NTSTATUS get_position(void *args)
+{
+    struct get_position_params *params = args;
+    struct coreaudio_stream *stream = params->stream;
+    LARGE_INTEGER stamp, freq;
+
+    OSSpinLockLock(&stream->lock);
+
+    *params->pos = stream->written_frames - stream->held_frames;
+
+    if(stream->share == AUDCLNT_SHAREMODE_SHARED)
+        *params->pos *= stream->fmt->nBlockAlign;
+
+    if(params->qpctime){
+        NtQueryPerformanceCounter(&stamp, &freq);
+        *params->qpctime = (stamp.QuadPart * (INT64)10000000) / freq.QuadPart;
+    }
+
+    OSSpinLockUnlock(&stream->lock);
+
+    params->result = S_OK;
+    return STATUS_SUCCESS;
+}
+
 unixlib_entry_t __wine_unix_call_funcs[] =
 {
     get_endpoint_ids,
@@ -1521,4 +1545,5 @@ unixlib_entry_t __wine_unix_call_funcs[] =
     get_latency,
     get_current_padding,
     get_next_packet_size,
+    get_position,
 };
diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c
index b0208ce0a44..ebfc0543af8 100644
--- a/dlls/winecoreaudio.drv/mmdevdrv.c
+++ b/dlls/winecoreaudio.drv/mmdevdrv.c
@@ -1469,42 +1469,22 @@ static HRESULT WINAPI AudioClock_GetFrequency(IAudioClock *iface, UINT64 *freq)
     return S_OK;
 }
 
-static HRESULT AudioClock_GetPosition_nolock(ACImpl *This,
-        UINT64 *pos, UINT64 *qpctime)
-{
-    *pos = This->stream->written_frames - This->stream->held_frames;
-
-    if(This->stream->share == AUDCLNT_SHAREMODE_SHARED)
-        *pos *= This->stream->fmt->nBlockAlign;
-
-    if(qpctime){
-        LARGE_INTEGER stamp, freq;
-        QueryPerformanceCounter(&stamp);
-        QueryPerformanceFrequency(&freq);
-        *qpctime = (stamp.QuadPart * (INT64)10000000) / freq.QuadPart;
-    }
-
-    return S_OK;
-}
-
 static HRESULT WINAPI AudioClock_GetPosition(IAudioClock *iface, UINT64 *pos,
         UINT64 *qpctime)
 {
     ACImpl *This = impl_from_IAudioClock(iface);
-    HRESULT hr;
+    struct get_position_params params;
 
     TRACE("(%p)->(%p, %p)\n", This, pos, qpctime);
 
     if(!pos)
         return E_POINTER;
 
-    OSSpinLockLock(&This->stream->lock);
-
-    hr = AudioClock_GetPosition_nolock(This, pos, qpctime);
-
-    OSSpinLockUnlock(&This->stream->lock);
-
-    return hr;
+    params.stream = This->stream;
+    params.pos = pos;
+    params.qpctime = qpctime;
+    UNIX_CALL(get_position, &params);
+    return params.result;
 }
 
 static HRESULT WINAPI AudioClock_GetCharacteristics(IAudioClock *iface,
diff --git a/dlls/winecoreaudio.drv/unixlib.h b/dlls/winecoreaudio.drv/unixlib.h
index 32eb57a866a..e9edaf82973 100644
--- a/dlls/winecoreaudio.drv/unixlib.h
+++ b/dlls/winecoreaudio.drv/unixlib.h
@@ -173,6 +173,14 @@ struct get_next_packet_size_params
     UINT32 *frames;
 };
 
+struct get_position_params
+{
+    struct coreaudio_stream *stream;
+    HRESULT result;
+    UINT64 *pos;
+    UINT64 *qpctime;
+};
+
 enum unix_funcs
 {
     unix_get_endpoint_ids,
@@ -191,6 +199,7 @@ enum unix_funcs
     unix_get_latency,
     unix_get_current_padding,
     unix_get_next_packet_size,
+    unix_get_position,
 };
 
 extern unixlib_handle_t coreaudio_handle;




More information about the wine-cvs mailing list