From 7d5c4ec1f83fc36e1ce835ad3617023e32e616bf Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Fri, 20 Apr 2012 07:26:43 -0500 Subject: [PATCH] strmbase: Have BaseControlVideo use BaseDispatch. --- dlls/quartz/videorenderer.c | 1 + dlls/strmbase/video.c | 50 +++++++++++++++++++++---------------- include/wine/strmbase.h | 2 ++ 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c index 5919ed14850..96f9815fb06 100644 --- a/dlls/quartz/videorenderer.c +++ b/dlls/quartz/videorenderer.c @@ -753,6 +753,7 @@ static ULONG WINAPI VideoRendererInner_Release(IUnknown * iface) if (!refCount) { BaseControlWindow_Destroy(&This->baseControlWindow); + BaseControlVideo_Destroy(&This->baseControlVideo); PostThreadMessageW(This->ThreadID, WM_QUIT, 0, 0); WaitForSingleObject(This->hThread, INFINITE); CloseHandle(This->hThread); diff --git a/dlls/strmbase/video.c b/dlls/strmbase/video.c index 3d5a4e36ca1..83cd37f43d8 100644 --- a/dlls/strmbase/video.c +++ b/dlls/strmbase/video.c @@ -43,43 +43,51 @@ HRESULT WINAPI BaseControlVideo_Init(BaseControlVideo *pControlVideo, const IBas pControlVideo->pPin = pPin; pControlVideo->pFuncsTable = pFuncsTable; - return S_OK; -} - -HRESULT WINAPI BaseControlVideoImpl_GetTypeInfoCount(IBasicVideo *iface, UINT*pctinfo) -{ - BaseControlVideo *This = impl_from_IBasicVideo(iface); - - FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, pctinfo); + BaseDispatch_Init(&pControlVideo->baseDispatch, &IID_IBasicVideo); return S_OK; } -HRESULT WINAPI BaseControlVideoImpl_GetTypeInfo(IBasicVideo *iface, UINT iTInfo, LCID lcid, ITypeInfo**ppTInfo) +HRESULT WINAPI BaseControlVideo_Destroy(BaseControlVideo *pControlVideo) { - BaseControlVideo *This = impl_from_IBasicVideo(iface); - - FIXME("(%p/%p)->(%d, %d, %p): stub !!!\n", This, iface, iTInfo, lcid, ppTInfo); - - return S_OK; + return BaseDispatch_Destroy(&pControlVideo->baseDispatch); } -HRESULT WINAPI BaseControlVideoImpl_GetIDsOfNames(IBasicVideo *iface, REFIID riid, LPOLESTR*rgszNames, UINT cNames, LCID lcid, DISPID*rgDispId) +HRESULT WINAPI BaseControlVideoImpl_GetTypeInfoCount(IBasicVideo *iface, UINT *pctinfo) { BaseControlVideo *This = impl_from_IBasicVideo(iface); - FIXME("(%p/%p)->(%s (%p), %p, %d, %d, %p): stub !!!\n", This, iface, debugstr_guid(riid), riid, rgszNames, cNames, lcid, rgDispId); - - return S_OK; + return BaseDispatchImpl_GetTypeInfoCount(&This->baseDispatch, pctinfo); } -HRESULT WINAPI BaseControlVideoImpl_Invoke(IBasicVideo *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS*pDispParams, VARIANT*pVarResult, EXCEPINFO*pExepInfo, UINT*puArgErr) +HRESULT WINAPI BaseControlVideoImpl_GetTypeInfo(IBasicVideo *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) { BaseControlVideo *This = impl_from_IBasicVideo(iface); - FIXME("(%p/%p)->(%d, %s (%p), %d, %04x, %p, %p, %p, %p): stub !!!\n", This, iface, dispIdMember, debugstr_guid(riid), riid, lcid, wFlags, pDispParams, pVarResult, pExepInfo, puArgErr); + return BaseDispatchImpl_GetTypeInfo(&This->baseDispatch, &IID_NULL, iTInfo, lcid, ppTInfo); +} - return S_OK; +HRESULT WINAPI BaseControlVideoImpl_GetIDsOfNames(IBasicVideo *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) +{ + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + return BaseDispatchImpl_GetIDsOfNames(&This->baseDispatch, riid, rgszNames, cNames, lcid, rgDispId); +} + +HRESULT WINAPI BaseControlVideoImpl_Invoke(IBasicVideo *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExepInfo, UINT *puArgErr) +{ + BaseControlVideo *This = impl_from_IBasicVideo(iface); + HRESULT hr = S_OK; + ITypeInfo *pTypeInfo; + + hr = BaseDispatchImpl_GetTypeInfo(&This->baseDispatch, riid, 1, lcid, &pTypeInfo); + if (SUCCEEDED(hr)) + { + hr = ITypeInfo_Invoke(pTypeInfo, &This->IBasicVideo_iface, dispIdMember, wFlags, pDispParams, pVarResult, pExepInfo, puArgErr); + ITypeInfo_Release(pTypeInfo); + } + + return hr; } HRESULT WINAPI BaseControlVideoImpl_get_AvgTimePerFrame(IBasicVideo *iface, REFTIME *pAvgTimePerFrame) diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h index bff7d8fe8ae..3e749a589fd 100644 --- a/include/wine/strmbase.h +++ b/include/wine/strmbase.h @@ -483,6 +483,7 @@ HRESULT WINAPI BaseControlWindowImpl_IsCursorHidden(IVideoWindow *iface, LONG *C typedef struct tagBaseControlVideo { IBasicVideo IBasicVideo_iface; + BaseDispatch baseDispatch; BaseFilter* pFilter; CRITICAL_SECTION* pInterfaceLock; @@ -517,6 +518,7 @@ typedef struct BaseControlVideoFuncTable { } BaseControlVideoFuncTable; HRESULT WINAPI BaseControlVideo_Init(BaseControlVideo *pControlVideo, const IBasicVideoVtbl *lpVtbl, BaseFilter *owner, CRITICAL_SECTION *lock, BasePin* pPin, const BaseControlVideoFuncTable* pFuncsTable); +HRESULT WINAPI BaseControlVideo_Destroy(BaseControlVideo *pControlVideo); HRESULT WINAPI BaseControlVideoImpl_GetTypeInfoCount(IBasicVideo *iface, UINT*pctinfo); HRESULT WINAPI BaseControlVideoImpl_GetTypeInfo(IBasicVideo *iface, UINT iTInfo, LCID lcid, ITypeInfo**ppTInfo);