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