Nikolay Sivov : mfplat: Implement MFInvokeCallback().

Alexandre Julliard julliard at winehq.org
Thu Feb 21 14:50:11 CST 2019


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Thu Feb 21 13:32:00 2019 +0300

mfplat: Implement MFInvokeCallback().

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mfplat/mfplat.spec |  6 +++---
 dlls/mfplat/queue.c     | 54 +++++++++++++++++++++++++++++++++++++++++++++++++
 include/mfapi.h         |  2 ++
 3 files changed, 59 insertions(+), 3 deletions(-)

diff --git a/dlls/mfplat/mfplat.spec b/dlls/mfplat/mfplat.spec
index 8f5ee77..e55cfb9 100644
--- a/dlls/mfplat/mfplat.spec
+++ b/dlls/mfplat/mfplat.spec
@@ -116,12 +116,12 @@
 @ stub MFInitMediaTypeFromWaveFormatEx
 @ stub MFInitVideoFormat
 @ stub MFInitVideoFormat_RGB
-@ stub MFInvokeCallback
+@ stdcall MFInvokeCallback(ptr)
 @ stub MFJoinIoPort
 @ stdcall MFLockPlatform()
 @ stdcall MFLockWorkQueue(long)
-@ stub MFPutWorkItem
-@ stub MFPutWorkItemEx
+@ stdcall MFPutWorkItem(long ptr ptr)
+@ stdcall MFPutWorkItemEx(long ptr)
 @ stub MFRecordError
 @ stub MFRemovePeriodicCallback
 @ stub MFScheduleWorkItem
diff --git a/dlls/mfplat/queue.c b/dlls/mfplat/queue.c
index 65f111b..ebc2ad4 100644
--- a/dlls/mfplat/queue.c
+++ b/dlls/mfplat/queue.c
@@ -331,3 +331,57 @@ HRESULT WINAPI MFUnlockWorkQueue(DWORD queue)
 
     return unlock_user_queue(queue);
 }
+
+/***********************************************************************
+ *      MFPutWorkItem (mfplat.@)
+ */
+HRESULT WINAPI MFPutWorkItem(DWORD queue, IMFAsyncCallback *callback, IUnknown *state)
+{
+    IMFAsyncResult *result;
+    HRESULT hr;
+
+    TRACE("%#x, %p, %p.\n", queue, callback, state);
+
+    if (FAILED(hr = MFCreateAsyncResult(NULL, callback, state, &result)))
+        return hr;
+
+    hr = MFPutWorkItemEx(queue, result);
+
+    IMFAsyncResult_Release(result);
+
+    return hr;
+}
+
+/***********************************************************************
+ *      MFPutWorkItemEx (mfplat.@)
+ */
+HRESULT WINAPI MFPutWorkItemEx(DWORD queue, IMFAsyncResult *result)
+{
+    FIXME("%#x, %p\n", queue, result);
+
+    return E_NOTIMPL;
+}
+
+/***********************************************************************
+ *      MFInvokeCallback (mfplat.@)
+ */
+HRESULT WINAPI MFInvokeCallback(IMFAsyncResult *result)
+{
+    MFASYNCRESULT *result_data = (MFASYNCRESULT *)result;
+    DWORD queue = MFASYNC_CALLBACK_QUEUE_STANDARD, flags;
+    HRESULT hr;
+
+    TRACE("%p.\n", result);
+
+    if (FAILED(IMFAsyncCallback_GetParameters(result_data->pCallback, &flags, &queue)))
+        queue = MFASYNC_CALLBACK_QUEUE_STANDARD;
+
+    if (FAILED(MFLockWorkQueue(queue)))
+        queue = MFASYNC_CALLBACK_QUEUE_STANDARD;
+
+    hr = MFPutWorkItemEx(queue, result);
+
+    MFUnlockWorkQueue(queue);
+
+    return hr;
+}
diff --git a/include/mfapi.h b/include/mfapi.h
index d70a300..d85f740 100644
--- a/include/mfapi.h
+++ b/include/mfapi.h
@@ -102,6 +102,8 @@ HRESULT WINAPI MFTEnumEx(GUID category, UINT32 flags, const MFT_REGISTER_TYPE_IN
                          UINT32 *pcount);
 HRESULT WINAPI MFInvokeCallback(IMFAsyncResult *result);
 HRESULT WINAPI MFLockPlatform(void);
+HRESULT WINAPI MFPutWorkItem(DWORD queue, IMFAsyncCallback *callback, IUnknown *state);
+HRESULT WINAPI MFPutWorkItemEx(DWORD queue, IMFAsyncResult *result);
 HRESULT WINAPI MFTRegister(CLSID clsid, GUID category, LPWSTR name, UINT32 flags, UINT32 cinput,
                            MFT_REGISTER_TYPE_INFO *input_types, UINT32 coutput,
                            MFT_REGISTER_TYPE_INFO *output_types, IMFAttributes *attributes);




More information about the wine-cvs mailing list