Aric Stewart : strmbase: Have BaseControlVideo use BaseDispatch.

Alexandre Julliard julliard at winehq.org
Fri Apr 20 12:49:29 CDT 2012


Module: wine
Branch: master
Commit: 7d5c4ec1f83fc36e1ce835ad3617023e32e616bf
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7d5c4ec1f83fc36e1ce835ad3617023e32e616bf

Author: Aric Stewart <aric at codeweavers.com>
Date:   Fri Apr 20 07:26:43 2012 -0500

strmbase: Have BaseControlVideo use BaseDispatch.

---

 dlls/quartz/videorenderer.c |    1 +
 dlls/strmbase/video.c       |   38 +++++++++++++++++++++++---------------
 include/wine/strmbase.h     |    2 ++
 3 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c
index 5919ed1..96f9815 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 3d5a4e3..83cd37f 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;
 
+    BaseDispatch_Init(&pControlVideo->baseDispatch, &IID_IBasicVideo);
+
     return S_OK;
 }
 
-HRESULT WINAPI BaseControlVideoImpl_GetTypeInfoCount(IBasicVideo *iface, UINT*pctinfo)
+HRESULT WINAPI BaseControlVideo_Destroy(BaseControlVideo *pControlVideo)
 {
-    BaseControlVideo *This = impl_from_IBasicVideo(iface);
+    return BaseDispatch_Destroy(&pControlVideo->baseDispatch);
+}
 
-    FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, pctinfo);
+HRESULT WINAPI BaseControlVideoImpl_GetTypeInfoCount(IBasicVideo *iface, UINT *pctinfo)
+{
+    BaseControlVideo *This = impl_from_IBasicVideo(iface);
 
-    return S_OK;
+    return BaseDispatchImpl_GetTypeInfoCount(&This->baseDispatch, pctinfo);
 }
 
-HRESULT WINAPI BaseControlVideoImpl_GetTypeInfo(IBasicVideo *iface, UINT iTInfo, LCID lcid, ITypeInfo**ppTInfo)
+HRESULT WINAPI BaseControlVideoImpl_GetTypeInfo(IBasicVideo *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
 {
     BaseControlVideo *This = impl_from_IBasicVideo(iface);
 
-    FIXME("(%p/%p)->(%d, %d, %p): stub !!!\n", This, iface, iTInfo, lcid, ppTInfo);
-
-    return S_OK;
+    return BaseDispatchImpl_GetTypeInfo(&This->baseDispatch, &IID_NULL, iTInfo, lcid, ppTInfo);
 }
 
-HRESULT WINAPI BaseControlVideoImpl_GetIDsOfNames(IBasicVideo *iface, REFIID riid, LPOLESTR*rgszNames, UINT cNames, LCID lcid, DISPID*rgDispId)
+HRESULT WINAPI BaseControlVideoImpl_GetIDsOfNames(IBasicVideo *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
 {
     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_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)
+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;
 
-    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);
+    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 S_OK;
+    return hr;
 }
 
 HRESULT WINAPI BaseControlVideoImpl_get_AvgTimePerFrame(IBasicVideo *iface, REFTIME *pAvgTimePerFrame)
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h
index bff7d8f..3e749a5 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);




More information about the wine-cvs mailing list