Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/mfplat/mfplat.spec | 8 ++++-- dlls/rtworkq/queue.c | 57 +++++++++++++++++++++++++++++++++++++++ dlls/rtworkq/rtworkq.spec | 16 +++++------ include/mfapi.h | 7 +++++ include/rtworkq.idl | 20 ++++++++++++++ 5 files changed, 98 insertions(+), 10 deletions(-)
diff --git a/dlls/mfplat/mfplat.spec b/dlls/mfplat/mfplat.spec index 5311757d2b..25e5f62f21 100644 --- a/dlls/mfplat/mfplat.spec +++ b/dlls/mfplat/mfplat.spec @@ -24,6 +24,7 @@ @ stdcall MFBeginCreateFile(long long long wstr ptr ptr ptr) @ stub MFBeginGetHostByName @ stub MFBeginRegisterWorkQueueWithMMCSS +@ stdcall MFBeginRegisterWorkQueueWithMMCSSEx(long wstr long long ptr ptr) rtworkq.RtwqBeginRegisterWorkQueueWithMMCSS @ stub MFBeginUnregisterWorkQueueWithMMCSS @ stub MFBlockThread @ stub MFCalculateBitmapImageSize @@ -107,8 +108,9 @@ @ stdcall MFGetSystemTime() @ stdcall MFGetTimerPeriodicity(ptr) @ stub MFGetUncompressedVideoFormat -@ stub MFGetWorkQueueMMCSSClass -@ stub MFGetWorkQueueMMCSSTaskId +@ stdcall MFGetWorkQueueMMCSSClass(long ptr ptr) rtworkq.RtwqGetWorkQueueMMCSSClass +@ stdcall MFGetWorkQueueMMCSSTaskId(long ptr) rtworkq.RtwqGetWorkQueueMMCSSTaskId +@ stdcall MFGetWorkQueueMMCSSPriority(long ptr) rtworkq.RtwqGetWorkQueueMMCSSPriority @ stdcall MFHeapAlloc(long long str long long) @ stdcall MFHeapFree(ptr) @ stub MFInitAMMediaTypeFromMFMediaType @@ -135,6 +137,7 @@ @ stub MFRecordError @ stdcall MFRegisterLocalByteStreamHandler(wstr wstr ptr) @ stdcall MFRegisterLocalSchemeHandler(wstr ptr) +@ stdcall MFRegisterPlatformWithMMCSS(wstr ptr long) rtworkq.RtwqRegisterPlatformWithMMCSS @ stdcall MFRemovePeriodicCallback(long) rtworkq.RtwqRemovePeriodicCallback @ stdcall MFScheduleWorkItem(ptr ptr int64 ptr) @ stdcall MFScheduleWorkItemEx(ptr int64 ptr) rtworkq.RtwqScheduleWorkItem @@ -156,6 +159,7 @@ @ stdcall MFTUnregister(int128) @ stdcall MFTUnregisterLocal(ptr) @ stdcall MFTUnregisterLocalByCLSID(int128) +@ stdcall MFUnregisterPlatformFromMMCSS() rtworkq.RtwqUnregisterPlatformFromMMCSS @ stub MFTraceError @ stub MFTraceFuncEnter @ stub MFUnblockThread diff --git a/dlls/rtworkq/queue.c b/dlls/rtworkq/queue.c index 32bd75b346..ce06df1c8c 100644 --- a/dlls/rtworkq/queue.c +++ b/dlls/rtworkq/queue.c @@ -1485,3 +1485,60 @@ HRESULT WINAPI RtwqUnjoinWorkQueue(DWORD queue, HANDLE cookie)
return E_NOTIMPL; } + +HRESULT WINAPI RtwqGetWorkQueueMMCSSClass(DWORD queue, WCHAR *class, DWORD *length) +{ + FIXME("%#x, %p, %p.\n", queue, class, length); + + return E_NOTIMPL; +} + +HRESULT WINAPI RtwqGetWorkQueueMMCSSTaskId(DWORD queue, DWORD *taskid) +{ + FIXME("%#x, %p.\n", queue, taskid); + + return E_NOTIMPL; +} + +HRESULT WINAPI RtwqGetWorkQueueMMCSSPriority(DWORD queue, LONG *priority) +{ + FIXME("%#x, %p.\n", queue, priority); + + return E_NOTIMPL; +} + +HRESULT WINAPI RtwqRegisterPlatformWithMMCSS(const WCHAR *class, DWORD *taskid, LONG priority) +{ + FIXME("%s, %p, %d.\n", debugstr_w(class), taskid, priority); + + return E_NOTIMPL; +} + +HRESULT WINAPI RtwqUnregisterPlatformFromMMCSS(void) +{ + FIXME("\n"); + + return E_NOTIMPL; +} + +HRESULT WINAPI RtwqBeginRegisterWorkQueueWithMMCSS(DWORD queue, const WCHAR *class, DWORD taskid, LONG priority, + IRtwqAsyncCallback *callback, IUnknown *state) +{ + FIXME("%#x, %s, %u, %d, %p, %p.\n", queue, debugstr_w(class), taskid, priority, callback, state); + + return E_NOTIMPL; +} + +HRESULT WINAPI RtwqRegisterPlatformEvents(IRtwqPlatformEvents *events) +{ + FIXME("%p.\n", events); + + return E_NOTIMPL; +} + +HRESULT WINAPI RtwqUnregisterPlatformEvents(IRtwqPlatformEvents *events) +{ + FIXME("%p.\n", events); + + return E_NOTIMPL; +} diff --git a/dlls/rtworkq/rtworkq.spec b/dlls/rtworkq/rtworkq.spec index 11955ac1a6..09d877790d 100644 --- a/dlls/rtworkq/rtworkq.spec +++ b/dlls/rtworkq/rtworkq.spec @@ -1,7 +1,7 @@ @ stdcall RtwqAddPeriodicCallback(ptr ptr ptr) @ stdcall RtwqAllocateSerialWorkQueue(long ptr) @ stdcall RtwqAllocateWorkQueue(long ptr) -@ stub RtwqBeginRegisterWorkQueueWithMMCSS +@ stdcall RtwqBeginRegisterWorkQueueWithMMCSS(long wstr long long ptr ptr) @ stub RtwqBeginUnregisterWorkQueueWithMMCSS @ stdcall RtwqCancelDeadline(long) @ stub RtwqCancelMultipleWaitingWorkItem @@ -10,9 +10,9 @@ @ stub RtwqEndRegisterWorkQueueWithMMCSS @ stub RtwqEndUnregisterWorkQueueWithMMCSS @ stub RtwqGetPlatform -@ stub RtwqGetWorkQueueMMCSSClass -@ stub RtwqGetWorkQueueMMCSSPriority -@ stub RtwqGetWorkQueueMMCSSTaskId +@ stdcall RtwqGetWorkQueueMMCSSClass(long ptr ptr) +@ stdcall RtwqGetWorkQueueMMCSSPriority(long ptr) +@ stdcall RtwqGetWorkQueueMMCSSTaskId(long ptr) @ stdcall RtwqInvokeCallback(ptr) @ stdcall RtwqJoinWorkQueue(long long ptr) @ stdcall RtwqLockPlatform() @@ -21,8 +21,8 @@ @ stub RtwqPutMultipleWaitingWorkItem @ stdcall RtwqPutWaitingWorkItem(long long ptr ptr) @ stdcall RtwqPutWorkItem(long long ptr) -@ stub RtwqRegisterPlatformEvents -@ stub RtwqRegisterPlatformWithMMCSS +@ stdcall RtwqRegisterPlatformEvents(ptr) +@ stdcall RtwqRegisterPlatformWithMMCSS(wstr ptr long) @ stdcall RtwqRemovePeriodicCallback(long) @ stdcall RtwqScheduleWorkItem(ptr int64 ptr) @ stdcall RtwqSetDeadline(long int64 ptr) @@ -33,5 +33,5 @@ @ stdcall RtwqUnjoinWorkQueue(long long) @ stdcall RtwqUnlockPlatform() @ stdcall RtwqUnlockWorkQueue(long) -@ stub RtwqUnregisterPlatformEvents -@ stub RtwqUnregisterPlatformFromMMCSS +@ stdcall RtwqUnregisterPlatformEvents(ptr) +@ stdcall RtwqUnregisterPlatformFromMMCSS() diff --git a/include/mfapi.h b/include/mfapi.h index f83b7636fe..b9383630ab 100644 --- a/include/mfapi.h +++ b/include/mfapi.h @@ -488,6 +488,8 @@ HRESULT WINAPI MFAllocateWorkQueue(DWORD *queue); HRESULT WINAPI MFAllocateWorkQueueEx(MFASYNC_WORKQUEUE_TYPE queue_type, DWORD *queue); HRESULT WINAPI MFBeginCreateFile(MF_FILE_ACCESSMODE access_mode, MF_FILE_OPENMODE open_mode, MF_FILE_FLAGS flags, const WCHAR *path, IMFAsyncCallback *callback, IUnknown *state, IUnknown **cancel_cookie); +HRESULT WINAPI MFBeginRegisterWorkQueueWithMMCSSEx(DWORD queue, const WCHAR *usage_class, DWORD taskid, LONG priority, + IMFAsyncCallback *callback, IUnknown *state); HRESULT WINAPI MFCalculateImageSize(REFGUID subtype, UINT32 width, UINT32 height, UINT32 *size); HRESULT WINAPI MFCancelCreateFile(IUnknown *cancel_cookie); HRESULT WINAPI MFCancelWorkItem(MFWORKITEM_KEY key); @@ -518,6 +520,9 @@ HRESULT WINAPI MFGetAttributesAsBlobSize(IMFAttributes *attributes, UINT32 *size HRESULT WINAPI MFGetStrideForBitmapInfoHeader(DWORD format, DWORD width, LONG *stride); HRESULT WINAPI MFGetPlaneSize(DWORD format, DWORD width, DWORD height, DWORD *size); HRESULT WINAPI MFGetTimerPeriodicity(DWORD *periodicity); +HRESULT WINAPI MFGetWorkQueueMMCSSClass(DWORD queue, WCHAR *class, DWORD *length); +HRESULT WINAPI MFGetWorkQueueMMCSSPriority(DWORD queue, LONG *priority); +HRESULT WINAPI MFGetWorkQueueMMCSSTaskId(DWORD queue, DWORD *taskid); HRESULT WINAPI MFTEnum(GUID category, UINT32 flags, MFT_REGISTER_TYPE_INFO *input_type, MFT_REGISTER_TYPE_INFO *output_type, IMFAttributes *attributes, CLSID **pclsids, UINT32 *pcount); @@ -535,6 +540,7 @@ HRESULT WINAPI MFPutWorkItemEx(DWORD queue, IMFAsyncResult *result); HRESULT WINAPI MFPutWorkItemEx2(DWORD queue, LONG priority, IMFAsyncResult *result); HRESULT WINAPI MFRegisterLocalByteStreamHandler(const WCHAR *extension, const WCHAR *mime, IMFActivate *activate); HRESULT WINAPI MFRegisterLocalSchemeHandler(const WCHAR *scheme, IMFActivate *activate); +HRESULT WINAPI MFRegisterPlatformWithMMCSS(const WCHAR *usage_class, DWORD *taskid, LONG priority); HRESULT WINAPI MFScheduleWorkItem(IMFAsyncCallback *callback, IUnknown *state, INT64 timeout, MFWORKITEM_KEY *key); HRESULT WINAPI MFScheduleWorkItemEx(IMFAsyncResult *result, INT64 timeout, MFWORKITEM_KEY *key); HRESULT WINAPI MFTRegister(CLSID clsid, GUID category, LPWSTR name, UINT32 flags, UINT32 cinput, @@ -551,6 +557,7 @@ HRESULT WINAPI MFShutdown(void); HRESULT WINAPI MFStartup(ULONG version, DWORD flags); HRESULT WINAPI MFUnlockPlatform(void); HRESULT WINAPI MFUnlockWorkQueue(DWORD queue); +HRESULT WINAPI MFUnregisterPlatformFromMMCSS(void); HRESULT WINAPI MFTUnregister(CLSID clsid); HRESULT WINAPI MFTUnregisterLocal(IClassFactory *factory); HRESULT WINAPI MFTUnregisterLocalByCLSID(CLSID clsid); diff --git a/include/rtworkq.idl b/include/rtworkq.idl index ca6645b862..ed32df1c3b 100644 --- a/include/rtworkq.idl +++ b/include/rtworkq.idl @@ -52,6 +52,18 @@ interface IRtwqAsyncCallback : IUnknown HRESULT Invoke([in] IRtwqAsyncResult *result); }
+[ + object, + uuid(63d9255a-7ff1-4b61-8faf-ed6460dacf2b), + local +] +interface IRtwqPlatformEvents : IUnknown +{ + HRESULT InitializationComplete(void); + HRESULT ShutdownStart(void); + HRESULT ShutdownComplete(void); +} + cpp_quote("#define RTWQ_E_ERROR(x) ((HRESULT)(0xc00d0000L+x))") cpp_quote("#define RTWQ_E_BUFFERTOOSMALL RTWQ_E_ERROR(14001)") cpp_quote("#define RTWQ_E_NOT_INITIALIZED RTWQ_E_ERROR(14006)") @@ -80,9 +92,13 @@ cpp_quote("typedef void (WINAPI *RTWQPERIODICCALLBACK)(IUnknown *context);") cpp_quote("HRESULT WINAPI RtwqAddPeriodicCallback(RTWQPERIODICCALLBACK callback, IUnknown *context, DWORD *key);") cpp_quote("HRESULT WINAPI RtwqAllocateSerialWorkQueue(DWORD target_queue, DWORD *queue);") cpp_quote("HRESULT WINAPI RtwqAllocateWorkQueue(RTWQ_WORKQUEUE_TYPE queue_type, DWORD *queue);") +cpp_quote("HRESULT WINAPI RtwqBeginRegisterWorkQueueWithMMCSS(DWORD queue, const WCHAR *class, DWORD taskid, LONG priority, IRtwqAsyncCallback *callback, IUnknown *state);") cpp_quote("HRESULT WINAPI RtwqCancelDeadline(HANDLE request);") cpp_quote("HRESULT WINAPI RtwqCancelWorkItem(RTWQWORKITEM_KEY key);") cpp_quote("HRESULT WINAPI RtwqCreateAsyncResult(IUnknown *object, IRtwqAsyncCallback *callback, IUnknown *state, IRtwqAsyncResult **result);") +cpp_quote("HRESULT WINAPI RtwqGetWorkQueueMMCSSClass(DWORD queue, WCHAR *class, DWORD *length);") +cpp_quote("HRESULT WINAPI RtwqGetWorkQueueMMCSSPriority(DWORD queue, LONG *priority);") +cpp_quote("HRESULT WINAPI RtwqGetWorkQueueMMCSSTaskId(DWORD queue, DWORD *taskid);") cpp_quote("HRESULT WINAPI RtwqInvokeCallback(IRtwqAsyncResult *result);") cpp_quote("HRESULT WINAPI RtwqJoinWorkQueue(DWORD queue, HANDLE hFile, HANDLE *cookie);") cpp_quote("HRESULT WINAPI RtwqLockPlatform(void);") @@ -90,6 +106,8 @@ cpp_quote("HRESULT WINAPI RtwqLockSharedWorkQueue(const WCHAR *usageclass, LONG cpp_quote("HRESULT WINAPI RtwqLockWorkQueue(DWORD queue);") cpp_quote("HRESULT WINAPI RtwqPutWaitingWorkItem(HANDLE event, LONG priority, IRtwqAsyncResult *result, RTWQWORKITEM_KEY *key);") cpp_quote("HRESULT WINAPI RtwqPutWorkItem(DWORD queue, LONG priority, IRtwqAsyncResult *result);") +cpp_quote("HRESULT WINAPI RtwqRegisterPlatformEvents(IRtwqPlatformEvents *events);") +cpp_quote("HRESULT WINAPI RtwqRegisterPlatformWithMMCSS(const WCHAR *class, DWORD *taskid, LONG priority);") cpp_quote("HRESULT WINAPI RtwqRemovePeriodicCallback(DWORD key);") cpp_quote("HRESULT WINAPI RtwqScheduleWorkItem(IRtwqAsyncResult *result, INT64 timeout, RTWQWORKITEM_KEY *key);") cpp_quote("HRESULT WINAPI RtwqSetDeadline(DWORD queue_id, LONGLONG deadline, HANDLE *request);") @@ -100,3 +118,5 @@ cpp_quote("HRESULT WINAPI RtwqStartup(void);") cpp_quote("HRESULT WINAPI RtwqUnjoinWorkQueue(DWORD queue, HANDLE cookie);") cpp_quote("HRESULT WINAPI RtwqUnlockPlatform(void);") cpp_quote("HRESULT WINAPI RtwqUnlockWorkQueue(DWORD queue);") +cpp_quote("HRESULT WINAPI RtwqUnregisterPlatformEvents(IRtwqPlatformEvents *events);") +cpp_quote("HRESULT WINAPI RtwqUnregisterPlatformFromMMCSS(void);")