From 4ae6f928aaec7b6863a2584ca6843498a61e7659 Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Wed, 28 Mar 2012 14:53:24 -0500 Subject: [PATCH] strmbase: Implement BaseControlVideo. --- dlls/strmbase/Makefile.in | 1 + dlls/strmbase/video.c | 480 ++++++++++++++++++++++++++++++++++++++ include/wine/strmbase.h | 79 +++++++ 3 files changed, 560 insertions(+) create mode 100644 dlls/strmbase/video.c diff --git a/dlls/strmbase/Makefile.in b/dlls/strmbase/Makefile.in index 06654abaa76..b000ef04996 100644 --- a/dlls/strmbase/Makefile.in +++ b/dlls/strmbase/Makefile.in @@ -11,6 +11,7 @@ C_SRCS = \ qualitycontrol.c \ seeking.c \ transform.c \ + video.c \ window.c @MAKE_IMPLIB_RULES@ diff --git a/dlls/strmbase/video.c b/dlls/strmbase/video.c new file mode 100644 index 00000000000..3d5a4e36ca1 --- /dev/null +++ b/dlls/strmbase/video.c @@ -0,0 +1,480 @@ +/* + * Generic Implementation of strmbase video classes + * + * Copyright 2012 Aric Stewart, CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#define COBJMACROS + +#include +#include "dshow.h" +#include "uuids.h" +#include "vfwmsgs.h" +#include "wine/debug.h" +#include "wine/unicode.h" +#include "wine/strmbase.h" + +WINE_DEFAULT_DEBUG_CHANNEL(strmbase); + +static inline BaseControlVideo *impl_from_IBasicVideo(IBasicVideo *iface) +{ + return CONTAINING_RECORD(iface, BaseControlVideo, IBasicVideo_iface); +} + +HRESULT WINAPI BaseControlVideo_Init(BaseControlVideo *pControlVideo, const IBasicVideoVtbl *lpVtbl, BaseFilter *owner, CRITICAL_SECTION *lock, BasePin* pPin, const BaseControlVideoFuncTable* pFuncsTable) +{ + pControlVideo->IBasicVideo_iface.lpVtbl = lpVtbl; + pControlVideo->pFilter = owner; + pControlVideo->pInterfaceLock = lock; + 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); + + return S_OK; +} + +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; +} + +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; +} + +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); + + 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 S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_get_AvgTimePerFrame(IBasicVideo *iface, REFTIME *pAvgTimePerFrame) +{ + VIDEOINFOHEADER *vih; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + if (!This->pPin->pConnectedTo) + return VFW_E_NOT_CONNECTED; + + TRACE("(%p/%p)->(%p)\n", This, iface, pAvgTimePerFrame); + + vih = This->pFuncsTable->pfnGetVideoFormat(This); + *pAvgTimePerFrame = vih->AvgTimePerFrame; + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_get_BitRate(IBasicVideo *iface, LONG *pBitRate) +{ + VIDEOINFOHEADER *vih; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%p)\n", This, iface, pBitRate); + + if (!This->pPin->pConnectedTo) + return VFW_E_NOT_CONNECTED; + + vih = This->pFuncsTable->pfnGetVideoFormat(This); + *pBitRate = vih->dwBitRate; + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_get_BitErrorRate(IBasicVideo *iface, LONG *pBitErrorRate) +{ + VIDEOINFOHEADER *vih; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%p)\n", This, iface, pBitErrorRate); + + if (!This->pPin->pConnectedTo) + return VFW_E_NOT_CONNECTED; + + vih = This->pFuncsTable->pfnGetVideoFormat(This); + *pBitErrorRate = vih->dwBitErrorRate; + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_get_VideoWidth(IBasicVideo *iface, LONG *pVideoWidth) +{ + VIDEOINFOHEADER *vih; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%p)\n", This, iface, pVideoWidth); + + vih = This->pFuncsTable->pfnGetVideoFormat(This); + *pVideoWidth = vih->bmiHeader.biWidth; + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_get_VideoHeight(IBasicVideo *iface, LONG *pVideoHeight) +{ + VIDEOINFOHEADER *vih; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%p)\n", This, iface, pVideoHeight); + + vih = This->pFuncsTable->pfnGetVideoFormat(This); + *pVideoHeight = vih->bmiHeader.biHeight; + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_put_SourceLeft(IBasicVideo *iface, LONG SourceLeft) +{ + RECT SourceRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%d)\n", This, iface, SourceLeft); + This->pFuncsTable->pfnGetSourceRect(This, &SourceRect); + SourceRect.left = SourceLeft; + This->pFuncsTable->pfnSetSourceRect(This, &SourceRect); + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_get_SourceLeft(IBasicVideo *iface, LONG *pSourceLeft) +{ + RECT SourceRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%p)\n", This, iface, pSourceLeft); + This->pFuncsTable->pfnGetSourceRect(This, &SourceRect); + *pSourceLeft = SourceRect.left; + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_put_SourceWidth(IBasicVideo *iface, LONG SourceWidth) +{ + RECT SourceRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%d)\n", This, iface, SourceWidth); + This->pFuncsTable->pfnGetSourceRect(This, &SourceRect); + SourceRect.right = SourceRect.left + SourceWidth; + This->pFuncsTable->pfnSetSourceRect(This, &SourceRect); + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_get_SourceWidth(IBasicVideo *iface, LONG *pSourceWidth) +{ + RECT SourceRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%p)\n", This, iface, pSourceWidth); + This->pFuncsTable->pfnGetSourceRect(This, &SourceRect); + *pSourceWidth = SourceRect.right - SourceRect.left; + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_put_SourceTop(IBasicVideo *iface, LONG SourceTop) +{ + RECT SourceRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%d)\n", This, iface, SourceTop); + This->pFuncsTable->pfnGetSourceRect(This, &SourceRect); + SourceRect.top = SourceTop; + This->pFuncsTable->pfnSetSourceRect(This, &SourceRect); + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_get_SourceTop(IBasicVideo *iface, LONG *pSourceTop) +{ + RECT SourceRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%p)\n", This, iface, pSourceTop); + This->pFuncsTable->pfnGetSourceRect(This, &SourceRect); + *pSourceTop = SourceRect.top; + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_put_SourceHeight(IBasicVideo *iface, LONG SourceHeight) +{ + RECT SourceRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%d)\n", This, iface, SourceHeight); + This->pFuncsTable->pfnGetSourceRect(This, &SourceRect); + SourceRect.bottom = SourceRect.top + SourceHeight; + This->pFuncsTable->pfnSetSourceRect(This, &SourceRect); + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_get_SourceHeight(IBasicVideo *iface, LONG *pSourceHeight) +{ + RECT SourceRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%p)\n", This, iface, pSourceHeight); + This->pFuncsTable->pfnGetSourceRect(This, &SourceRect); + + *pSourceHeight = SourceRect.bottom - SourceRect.top; + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_put_DestinationLeft(IBasicVideo *iface, LONG DestinationLeft) +{ + RECT DestRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%d)\n", This, iface, DestinationLeft); + This->pFuncsTable->pfnGetTargetRect(This, &DestRect); + DestRect.left = DestinationLeft; + This->pFuncsTable->pfnSetTargetRect(This, &DestRect); + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_get_DestinationLeft(IBasicVideo *iface, LONG *pDestinationLeft) +{ + RECT DestRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationLeft); + This->pFuncsTable->pfnGetTargetRect(This, &DestRect); + *pDestinationLeft = DestRect.left; + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_put_DestinationWidth(IBasicVideo *iface, LONG DestinationWidth) +{ + RECT DestRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%d)\n", This, iface, DestinationWidth); + This->pFuncsTable->pfnGetTargetRect(This, &DestRect); + DestRect.right = DestRect.left + DestinationWidth; + This->pFuncsTable->pfnSetTargetRect(This, &DestRect); + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_get_DestinationWidth(IBasicVideo *iface, LONG *pDestinationWidth) +{ + RECT DestRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationWidth); + This->pFuncsTable->pfnGetTargetRect(This, &DestRect); + *pDestinationWidth = DestRect.right - DestRect.left; + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_put_DestinationTop(IBasicVideo *iface, LONG DestinationTop) +{ + RECT DestRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%d)\n", This, iface, DestinationTop); + This->pFuncsTable->pfnGetTargetRect(This, &DestRect); + DestRect.top = DestinationTop; + This->pFuncsTable->pfnSetTargetRect(This, &DestRect); + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_get_DestinationTop(IBasicVideo *iface, LONG *pDestinationTop) +{ + RECT DestRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationTop); + This->pFuncsTable->pfnGetTargetRect(This, &DestRect); + *pDestinationTop = DestRect.top; + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_put_DestinationHeight(IBasicVideo *iface, LONG DestinationHeight) +{ + RECT DestRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%d)\n", This, iface, DestinationHeight); + This->pFuncsTable->pfnGetTargetRect(This, &DestRect); + DestRect.right = DestRect.left + DestinationHeight; + This->pFuncsTable->pfnSetTargetRect(This, &DestRect); + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_get_DestinationHeight(IBasicVideo *iface, LONG *pDestinationHeight) +{ + RECT DestRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationHeight); + This->pFuncsTable->pfnGetTargetRect(This, &DestRect); + *pDestinationHeight = DestRect.right - DestRect.left; + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_SetSourcePosition(IBasicVideo *iface, LONG Left, LONG Top, LONG Width, LONG Height) +{ + RECT SourceRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%d, %d, %d, %d)\n", This, iface, Left, Top, Width, Height); + SourceRect.left = Left; + SourceRect.top = Top; + SourceRect.right = Left + Width; + SourceRect.bottom = Top + Height; + This->pFuncsTable->pfnSetSourceRect(This, &SourceRect); + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_GetSourcePosition(IBasicVideo *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight) +{ + RECT SourceRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%p, %p, %p, %p)\n", This, iface, pLeft, pTop, pWidth, pHeight); + This->pFuncsTable->pfnGetSourceRect(This, &SourceRect); + + *pLeft = SourceRect.left; + *pTop = SourceRect.top; + *pWidth = SourceRect.right - SourceRect.left; + *pHeight = SourceRect.bottom - SourceRect.top; + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_SetDefaultSourcePosition(IBasicVideo *iface) +{ + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->()\n", This, iface); + return This->pFuncsTable->pfnSetDefaultSourceRect(This); +} + +HRESULT WINAPI BaseControlVideoImpl_SetDestinationPosition(IBasicVideo *iface, LONG Left, LONG Top, LONG Width, LONG Height) +{ + RECT DestRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%d, %d, %d, %d)\n", This, iface, Left, Top, Width, Height); + + DestRect.left = Left; + DestRect.top = Top; + DestRect.right = Left + Width; + DestRect.bottom = Top + Height; + This->pFuncsTable->pfnSetTargetRect(This, &DestRect); + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_GetDestinationPosition(IBasicVideo *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight) +{ + RECT DestRect; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%p, %p, %p, %p)\n", This, iface, pLeft, pTop, pWidth, pHeight); + This->pFuncsTable->pfnGetTargetRect(This, &DestRect); + + *pLeft = DestRect.left; + *pTop = DestRect.top; + *pWidth = DestRect.right - DestRect.left; + *pHeight = DestRect.bottom - DestRect.top; + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_SetDefaultDestinationPosition(IBasicVideo *iface) +{ + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->()\n", This, iface); + return This->pFuncsTable->pfnSetDefaultTargetRect(This); +} + +HRESULT WINAPI BaseControlVideoImpl_GetVideoSize(IBasicVideo *iface, LONG *pWidth, LONG *pHeight) +{ + VIDEOINFOHEADER *vih; + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%p, %p)\n", This, iface, pWidth, pHeight); + + vih = This->pFuncsTable->pfnGetVideoFormat(This); + *pHeight = vih->bmiHeader.biHeight; + *pWidth = vih->bmiHeader.biWidth; + + return S_OK; +} + +HRESULT WINAPI BaseControlVideoImpl_GetVideoPaletteEntries(IBasicVideo *iface, LONG StartIndex, LONG Entries, LONG *pRetrieved, LONG *pPalette) +{ + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + TRACE("(%p/%p)->(%d, %d, %p, %p)\n", This, iface, StartIndex, Entries, pRetrieved, pPalette); + + if (pRetrieved) + *pRetrieved = 0; + return VFW_E_NO_PALETTE_AVAILABLE; +} + +HRESULT WINAPI BaseControlVideoImpl_GetCurrentImage(IBasicVideo *iface, LONG *pBufferSize, LONG *pDIBImage) +{ + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + return This->pFuncsTable->pfnGetStaticImage(This, pBufferSize, pDIBImage); +} + +HRESULT WINAPI BaseControlVideoImpl_IsUsingDefaultSource(IBasicVideo *iface) +{ + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + return This->pFuncsTable->pfnIsDefaultSourceRect(This); +} + +HRESULT WINAPI BaseControlVideoImpl_IsUsingDefaultDestination(IBasicVideo *iface) +{ + BaseControlVideo *This = impl_from_IBasicVideo(iface); + + return This->pFuncsTable->pfnIsDefaultTargetRect(This); +} diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h index 08e2bb4849e..a4f395aab8e 100644 --- a/include/wine/strmbase.h +++ b/include/wine/strmbase.h @@ -495,6 +495,85 @@ HRESULT WINAPI BaseControlWindowImpl_HideCursor(IVideoWindow *iface, LONG HideCu HRESULT WINAPI BaseControlWindowImpl_IsCursorHidden(IVideoWindow *iface, LONG *CursorHidden); #endif +#ifdef __IBasicVideo_FWD_DEFINED__ +#ifdef __amvideo_h__ +typedef struct tagBaseControlVideo +{ + IBasicVideo IBasicVideo_iface; + + BaseFilter* pFilter; + CRITICAL_SECTION* pInterfaceLock; + BasePin* pPin; + + const struct BaseControlVideoFuncTable* pFuncsTable; +} BaseControlVideo; + +typedef HRESULT (WINAPI *BaseControlVideo_GetSourceRect)(BaseControlVideo* This, RECT *pSourceRect); +typedef HRESULT (WINAPI *BaseControlVideo_GetStaticImage)(BaseControlVideo* This, LONG *pBufferSize, LONG *pDIBImage); +typedef HRESULT (WINAPI *BaseControlVideo_GetTargetRect)(BaseControlVideo* This, RECT *pTargetRect); +typedef VIDEOINFOHEADER* (WINAPI *BaseControlVideo_GetVideoFormat)(BaseControlVideo* This); +typedef HRESULT (WINAPI *BaseControlVideo_IsDefaultSourceRect)(BaseControlVideo* This); +typedef HRESULT (WINAPI *BaseControlVideo_IsDefaultTargetRect)(BaseControlVideo* This); +typedef HRESULT (WINAPI *BaseControlVideo_SetDefaultSourceRect)(BaseControlVideo* This); +typedef HRESULT (WINAPI *BaseControlVideo_SetDefaultTargetRect)(BaseControlVideo* This); +typedef HRESULT (WINAPI *BaseControlVideo_SetSourceRect)(BaseControlVideo* This, RECT *pSourceRect); +typedef HRESULT (WINAPI *BaseControlVideo_SetTargetRect)(BaseControlVideo* This, RECT *pTargetRect); + +typedef struct BaseControlVideoFuncTable { + /* Required */ + BaseControlVideo_GetSourceRect pfnGetSourceRect; + BaseControlVideo_GetStaticImage pfnGetStaticImage; + BaseControlVideo_GetTargetRect pfnGetTargetRect; + BaseControlVideo_GetVideoFormat pfnGetVideoFormat; + BaseControlVideo_IsDefaultSourceRect pfnIsDefaultSourceRect; + BaseControlVideo_IsDefaultTargetRect pfnIsDefaultTargetRect; + BaseControlVideo_SetDefaultSourceRect pfnSetDefaultSourceRect; + BaseControlVideo_SetDefaultTargetRect pfnSetDefaultTargetRect; + BaseControlVideo_SetSourceRect pfnSetSourceRect; + BaseControlVideo_SetTargetRect pfnSetTargetRect; +} BaseControlVideoFuncTable; + +HRESULT WINAPI BaseControlVideo_Init(BaseControlVideo *pControlVideo, const IBasicVideoVtbl *lpVtbl, BaseFilter *owner, CRITICAL_SECTION *lock, BasePin* pPin, const BaseControlVideoFuncTable* pFuncsTable); + +HRESULT WINAPI BaseControlVideoImpl_GetTypeInfoCount(IBasicVideo *iface, UINT*pctinfo); +HRESULT WINAPI BaseControlVideoImpl_GetTypeInfo(IBasicVideo *iface, UINT iTInfo, LCID lcid, ITypeInfo**ppTInfo); +HRESULT WINAPI BaseControlVideoImpl_GetIDsOfNames(IBasicVideo *iface, REFIID riid, LPOLESTR*rgszNames, UINT cNames, LCID lcid, DISPID*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_get_AvgTimePerFrame(IBasicVideo *iface, REFTIME *pAvgTimePerFrame); +HRESULT WINAPI BaseControlVideoImpl_get_BitRate(IBasicVideo *iface, LONG *pBitRate); +HRESULT WINAPI BaseControlVideoImpl_get_BitErrorRate(IBasicVideo *iface, LONG *pBitErrorRate); +HRESULT WINAPI BaseControlVideoImpl_get_VideoWidth(IBasicVideo *iface, LONG *pVideoWidth); +HRESULT WINAPI BaseControlVideoImpl_get_VideoHeight(IBasicVideo *iface, LONG *pVideoHeight); +HRESULT WINAPI BaseControlVideoImpl_put_SourceLeft(IBasicVideo *iface, LONG SourceLeft); +HRESULT WINAPI BaseControlVideoImpl_get_SourceLeft(IBasicVideo *iface, LONG *pSourceLeft); +HRESULT WINAPI BaseControlVideoImpl_put_SourceWidth(IBasicVideo *iface, LONG SourceWidth); +HRESULT WINAPI BaseControlVideoImpl_get_SourceWidth(IBasicVideo *iface, LONG *pSourceWidth); +HRESULT WINAPI BaseControlVideoImpl_put_SourceTop(IBasicVideo *iface, LONG SourceTop); +HRESULT WINAPI BaseControlVideoImpl_get_SourceTop(IBasicVideo *iface, LONG *pSourceTop); +HRESULT WINAPI BaseControlVideoImpl_put_SourceHeight(IBasicVideo *iface, LONG SourceHeight); +HRESULT WINAPI BaseControlVideoImpl_get_SourceHeight(IBasicVideo *iface, LONG *pSourceHeight); +HRESULT WINAPI BaseControlVideoImpl_put_DestinationLeft(IBasicVideo *iface, LONG DestinationLeft); +HRESULT WINAPI BaseControlVideoImpl_get_DestinationLeft(IBasicVideo *iface, LONG *pDestinationLeft); +HRESULT WINAPI BaseControlVideoImpl_put_DestinationWidth(IBasicVideo *iface, LONG DestinationWidth); +HRESULT WINAPI BaseControlVideoImpl_get_DestinationWidth(IBasicVideo *iface, LONG *pDestinationWidth); +HRESULT WINAPI BaseControlVideoImpl_put_DestinationTop(IBasicVideo *iface, LONG DestinationTop); +HRESULT WINAPI BaseControlVideoImpl_get_DestinationTop(IBasicVideo *iface, LONG *pDestinationTop); +HRESULT WINAPI BaseControlVideoImpl_put_DestinationHeight(IBasicVideo *iface, LONG DestinationHeight); +HRESULT WINAPI BaseControlVideoImpl_get_DestinationHeight(IBasicVideo *iface, LONG *pDestinationHeight); +HRESULT WINAPI BaseControlVideoImpl_SetSourcePosition(IBasicVideo *iface, LONG Left, LONG Top, LONG Width, LONG Height); +HRESULT WINAPI BaseControlVideoImpl_GetSourcePosition(IBasicVideo *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight); +HRESULT WINAPI BaseControlVideoImpl_SetDefaultSourcePosition(IBasicVideo *iface); +HRESULT WINAPI BaseControlVideoImpl_SetDestinationPosition(IBasicVideo *iface, LONG Left, LONG Top, LONG Width, LONG Height); +HRESULT WINAPI BaseControlVideoImpl_GetDestinationPosition(IBasicVideo *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight); +HRESULT WINAPI BaseControlVideoImpl_SetDefaultDestinationPosition(IBasicVideo *iface); +HRESULT WINAPI BaseControlVideoImpl_GetVideoSize(IBasicVideo *iface, LONG *pWidth, LONG *pHeight); +HRESULT WINAPI BaseControlVideoImpl_GetVideoPaletteEntries(IBasicVideo *iface, LONG StartIndex, LONG Entries, LONG *pRetrieved, LONG *pPalette); +HRESULT WINAPI BaseControlVideoImpl_GetCurrentImage(IBasicVideo *iface, LONG *pBufferSize, LONG *pDIBImage); +HRESULT WINAPI BaseControlVideoImpl_IsUsingDefaultSource(IBasicVideo *iface); +HRESULT WINAPI BaseControlVideoImpl_IsUsingDefaultDestination(IBasicVideo *iface); +#endif +#endif + /* Dll Functions */ BOOL WINAPI STRMBASE_DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv); HRESULT WINAPI STRMBASE_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv);