From 615c0e0ca55f169f9d714296efd93b965e997f0d Mon Sep 17 00:00:00 2001 From: Hidenori Takeshima Date: Wed, 22 Aug 2001 18:06:00 +0000 Subject: [PATCH] Added some stubs for CLSID_FilterGraph. --- dlls/quartz/Makefile.in | 8 + dlls/quartz/complist.c | 178 +++++++++++++ dlls/quartz/complist.h | 27 ++ dlls/quartz/fgraph.c | 21 +- dlls/quartz/fgraph.h | 58 +++++ dlls/quartz/ibasaud.c | 166 ++++++++++++ dlls/quartz/ibasvid.c | 487 +++++++++++++++++++++++++++++++++++ dlls/quartz/ifgraph.c | 8 +- dlls/quartz/imcntl.c | 220 ++++++++++++++++ dlls/quartz/imem.c | 6 +- dlls/quartz/imevent.c | 222 ++++++++++++++++ dlls/quartz/impos.c | 241 +++++++++++++++++ dlls/quartz/imseek.c | 264 +++++++++++++++++++ dlls/quartz/irclock.c | 6 +- dlls/quartz/iunk.c | 36 ++- dlls/quartz/iunk.h | 3 +- dlls/quartz/ividwin.c | 554 ++++++++++++++++++++++++++++++++++++++++ dlls/quartz/main.c | 4 + dlls/quartz/memalloc.c | 4 +- dlls/quartz/sysclock.c | 4 +- 20 files changed, 2488 insertions(+), 29 deletions(-) create mode 100644 dlls/quartz/complist.c create mode 100644 dlls/quartz/complist.h create mode 100644 dlls/quartz/ibasaud.c create mode 100644 dlls/quartz/ibasvid.c create mode 100644 dlls/quartz/imcntl.c create mode 100644 dlls/quartz/imevent.c create mode 100644 dlls/quartz/impos.c create mode 100644 dlls/quartz/imseek.c create mode 100644 dlls/quartz/ividwin.c diff --git a/dlls/quartz/Makefile.in b/dlls/quartz/Makefile.in index 4bfd7e26b95..8361dbeb43b 100644 --- a/dlls/quartz/Makefile.in +++ b/dlls/quartz/Makefile.in @@ -9,11 +9,19 @@ LDDLLFLAGS = @LDDLLFLAGS@ SYMBOLFILE = $(MODULE).tmp.o C_SRCS = \ + complist.c \ fgraph.c \ + ibasaud.c \ + ibasvid.c \ ifgraph.c \ + imcntl.c \ imem.c \ + imevent.c \ + impos.c \ + imseek.c \ irclock.c \ iunk.c \ + ividwin.c \ main.c \ memalloc.c \ sysclock.c diff --git a/dlls/quartz/complist.c b/dlls/quartz/complist.c new file mode 100644 index 00000000000..305a2509a74 --- /dev/null +++ b/dlls/quartz/complist.c @@ -0,0 +1,178 @@ +/* + * List of components. (for internal use) + * + * hidenori@a2.ctktv.ne.jp + */ + +#include "config.h" + +#include "windef.h" +#include "winbase.h" +#include "wingdi.h" +#include "winerror.h" +#include "wine/obj_base.h" +#include "strmif.h" + +#include "debugtools.h" +DEFAULT_DEBUG_CHANNEL(quartz); + +#include "quartz_private.h" +#include "complist.h" + + + +struct QUARTZ_CompList +{ + QUARTZ_CompListItem* pFirst; + QUARTZ_CompListItem* pLast; +}; + +struct QUARTZ_CompListItem +{ + IUnknown* punk; + QUARTZ_CompListItem* pNext; + QUARTZ_CompListItem* pPrev; +}; + + +QUARTZ_CompList* QUARTZ_CompList_Alloc( void ) +{ + QUARTZ_CompList* pList; + + pList = (QUARTZ_CompList*)QUARTZ_AllocMem( sizeof(QUARTZ_CompList) ); + if ( pList != NULL ) + { + /* construct. */ + pList->pFirst = NULL; + pList->pLast = NULL; + } + + return pList; +} + +void QUARTZ_CompList_Free( QUARTZ_CompList* pList ) +{ + QUARTZ_CompListItem* pCur; + QUARTZ_CompListItem* pNext; + + if ( pList != NULL ) + { + pCur = pList->pFirst; + while ( pCur != NULL ) + { + pNext = pCur->pNext; + if ( pCur->punk != NULL ) + IUnknown_Release( pCur->punk ); + QUARTZ_FreeMem( pCur ); + pCur = pNext; + } + QUARTZ_FreeMem( pList ); + } +} + +QUARTZ_CompList* QUARTZ_CompList_Dup( QUARTZ_CompList* pList ) +{ + QUARTZ_CompList* pNewList; + QUARTZ_CompListItem* pCur; + HRESULT hr; + + pNewList = QUARTZ_CompList_Alloc(); + if ( pNewList == NULL ) + return NULL; + + pCur = pList->pFirst; + while ( pCur != NULL ) + { + if ( pCur->punk != NULL ) + { + hr = QUARTZ_CompList_AddComp( pNewList, pCur->punk ); + if ( FAILED(hr) ) + { + QUARTZ_CompList_Free( pNewList ); + return NULL; + } + } + pCur = pCur->pNext; + } + + return pNewList; +} + +HRESULT QUARTZ_CompList_AddComp( QUARTZ_CompList* pList, IUnknown* punk ) +{ + QUARTZ_CompListItem* pItem; + + pItem = (QUARTZ_CompListItem*)QUARTZ_AllocMem( sizeof(QUARTZ_CompListItem) ); + if ( pItem == NULL ) + return E_OUTOFMEMORY; /* out of memory. */ + pItem->punk = punk; IUnknown_AddRef(punk); + + if ( pList->pFirst != NULL ) + pList->pFirst->pPrev = pItem; + else + pList->pLast = pItem; + pList->pFirst = pItem; + pItem->pNext = pList->pFirst; + pItem->pPrev = NULL; + + return S_OK; +} + +HRESULT QUARTZ_CompList_RemoveComp( QUARTZ_CompList* pList, IUnknown* punk ) +{ + QUARTZ_CompListItem* pCur; + + pCur = QUARTZ_CompList_SearchComp( pList, punk ); + if ( pCur == NULL ) + return S_FALSE; /* already removed. */ + + /* remove from list. */ + if ( pCur->pNext != NULL ) + pCur->pNext->pPrev = pCur->pPrev; + else + pList->pLast = pCur->pPrev; + if ( pCur->pPrev != NULL ) + pCur->pPrev->pNext = pCur->pNext; + else + pList->pFirst = pCur->pNext; + + /* release this item. */ + if ( pCur->punk != NULL ) + IUnknown_Release( pCur->punk ); + QUARTZ_FreeMem( pCur ); + + return S_OK; +} + +QUARTZ_CompListItem* QUARTZ_CompList_SearchComp( + QUARTZ_CompList* pList, IUnknown* punk ) +{ + QUARTZ_CompListItem* pCur; + + pCur = pList->pFirst; + while ( pCur != NULL ) + { + if ( pCur->punk == punk ) + return pCur; + pCur = pCur->pNext; + } + + return NULL; +} + +QUARTZ_CompListItem* QUARTZ_CompList_GetFirst( + QUARTZ_CompList* pList ) +{ + return pList->pFirst; +} + +QUARTZ_CompListItem* QUARTZ_CompList_GetNext( + QUARTZ_CompList* pList, QUARTZ_CompListItem* pPrev ) +{ + return pPrev->pNext; +} + +IUnknown* QUARTZ_CompList_GetItemPtr( QUARTZ_CompListItem* pItem ) +{ + return pItem->punk; +} diff --git a/dlls/quartz/complist.h b/dlls/quartz/complist.h new file mode 100644 index 00000000000..c5b1c45abe1 --- /dev/null +++ b/dlls/quartz/complist.h @@ -0,0 +1,27 @@ +/* + * List of components. (for internal use) + * + * hidenori@a2.ctktv.ne.jp + */ + +#ifndef QUARTZ_COMPLIST_H +#define QUARTZ_COMPLIST_H + +typedef struct QUARTZ_CompList QUARTZ_CompList; +typedef struct QUARTZ_CompListItem QUARTZ_CompListItem; + +QUARTZ_CompList* QUARTZ_CompList_Alloc( void ); +void QUARTZ_CompList_Free( QUARTZ_CompList* pList ); +QUARTZ_CompList* QUARTZ_CompList_Dup( QUARTZ_CompList* pList ); +HRESULT QUARTZ_CompList_AddComp( QUARTZ_CompList* pList, IUnknown* punk ); +HRESULT QUARTZ_CompList_RemoveComp( QUARTZ_CompList* pList, IUnknown* punk ); +QUARTZ_CompListItem* QUARTZ_CompList_SearchComp( + QUARTZ_CompList* pList, IUnknown* punk ); +QUARTZ_CompListItem* QUARTZ_CompList_GetFirst( + QUARTZ_CompList* pList ); +QUARTZ_CompListItem* QUARTZ_CompList_GetNext( + QUARTZ_CompList* pList, QUARTZ_CompListItem* pPrev ); +IUnknown* QUARTZ_CompList_GetItemPtr( QUARTZ_CompListItem* pItem ); + + +#endif /* QUARTZ_COMPLIST_H */ diff --git a/dlls/quartz/fgraph.c b/dlls/quartz/fgraph.c index 8f7eeaa5846..e73aa4a6e9f 100644 --- a/dlls/quartz/fgraph.c +++ b/dlls/quartz/fgraph.c @@ -13,7 +13,9 @@ #include "wingdi.h" #include "winerror.h" #include "wine/obj_base.h" +#include "wine/obj_oleaut.h" #include "strmif.h" +#include "control.h" #include "uuids.h" #include "debugtools.h" @@ -28,6 +30,14 @@ static QUARTZ_IFEntry IFEntries[] = { &IID_IFilterGraph, offsetof(CFilterGraph,fgraph)-offsetof(CFilterGraph,unk) }, { &IID_IGraphBuilder, offsetof(CFilterGraph,fgraph)-offsetof(CFilterGraph,unk) }, { &IID_IFilterGraph2, offsetof(CFilterGraph,fgraph)-offsetof(CFilterGraph,unk) }, + { &IID_IMediaControl, offsetof(CFilterGraph,mediacontrol)-offsetof(CFilterGraph,unk) }, + { &IID_IMediaEvent, offsetof(CFilterGraph,mediaevent)-offsetof(CFilterGraph,unk) }, + { &IID_IMediaEventEx, offsetof(CFilterGraph,mediaevent)-offsetof(CFilterGraph,unk) }, + { &IID_IMediaPosition, offsetof(CFilterGraph,mediaposition)-offsetof(CFilterGraph,unk) }, + { &IID_IMediaSeeking, offsetof(CFilterGraph,mediaseeking)-offsetof(CFilterGraph,unk) }, + { &IID_IBasicVideo, offsetof(CFilterGraph,basvid)-offsetof(CFilterGraph,unk) }, + { &IID_IBasicAudio, offsetof(CFilterGraph,basaud)-offsetof(CFilterGraph,unk) }, + { &IID_IVideoWindow, offsetof(CFilterGraph,vidwin)-offsetof(CFilterGraph,unk) }, }; HRESULT QUARTZ_CreateFilterGraph(IUnknown* punkOuter,void** ppobj) @@ -40,13 +50,20 @@ HRESULT QUARTZ_CreateFilterGraph(IUnknown* punkOuter,void** ppobj) if ( pfg == NULL ) return E_OUTOFMEMORY; - QUARTZ_IUnkInit( &pfg->unk ); + QUARTZ_IUnkInit( &pfg->unk, punkOuter ); CFilterGraph_InitIFilterGraph2( pfg ); + CFilterGraph_InitIMediaControl( pfg ); + CFilterGraph_InitIMediaEventEx( pfg ); + CFilterGraph_InitIMediaPosition( pfg ); + CFilterGraph_InitIMediaSeeking( pfg ); + CFilterGraph_InitIBasicVideo2( pfg ); + CFilterGraph_InitIBasicAudio( pfg ); + CFilterGraph_InitIVideoWindow( pfg ); pfg->unk.pEntries = IFEntries; pfg->unk.dwEntries = sizeof(IFEntries)/sizeof(IFEntries[0]); - *ppobj = (void*)pfg; + *ppobj = (void*)(&pfg->unk); return S_OK; } diff --git a/dlls/quartz/fgraph.h b/dlls/quartz/fgraph.h index adc9f90ff8d..46f132eada0 100644 --- a/dlls/quartz/fgraph.h +++ b/dlls/quartz/fgraph.h @@ -10,6 +10,7 @@ + IFilterGraph - IGraphBuilder - IFilterGraph2 + IDispatch - IMediaControl + IDispatch - IMediaEvent - IMediaEventEx + + IDispatch - IMediaPosition + IMediaSeeking + IDispatch - IBasicVideo (pass to a renderer) + IDispatch - IBasicAudio (pass to a renderer) @@ -23,12 +24,62 @@ typedef struct FG_IFilterGraph2Impl ICOM_VFIELD(IFilterGraph2); } FG_IFilterGraph2Impl; +typedef struct FG_IMediaControlImpl +{ + ICOM_VFIELD(IMediaControl); +} FG_IMediaControlImpl; + +typedef struct FG_IMediaEventImpl +{ + ICOM_VFIELD(IMediaEventEx); +} FG_IMediaEventImpl; + +typedef struct FG_IMediaPositionImpl +{ + ICOM_VFIELD(IMediaPosition); +} FG_IMediaPositionImpl; + +typedef struct FG_IMediaSeekingImpl +{ + ICOM_VFIELD(IMediaSeeking); +} FG_IMediaSeekingImpl; + +typedef struct FG_IBasicVideoImpl +{ + ICOM_VFIELD(IBasicVideo2); +} FG_IBasicVideoImpl; + +typedef struct FG_IBasicAudioImpl +{ + ICOM_VFIELD(IBasicAudio); +} FG_IBasicAudioImpl; + +typedef struct FG_IVideoWindowImpl +{ + ICOM_VFIELD(IVideoWindow); +} FG_IVideoWindowImpl; + + typedef struct CFilterGraph { QUARTZ_IUnkImpl unk; FG_IFilterGraph2Impl fgraph; + FG_IMediaControlImpl mediacontrol; + FG_IMediaEventImpl mediaevent; + FG_IMediaPositionImpl mediaposition; + FG_IMediaSeekingImpl mediaseeking; + FG_IBasicVideoImpl basvid; + FG_IBasicAudioImpl basaud; + FG_IVideoWindowImpl vidwin; /* IFilterGraph2 fields. */ + /* IMediaControl fields. */ + /* IMediaEvent fields. */ + /* IMediaPosition fields. */ + /* IMediaSeeking fields. */ + /* IBasicVideo fields. */ + /* IBasicAudio fields. */ + /* IVideoWindow fields. */ } CFilterGraph; #define CFilterGraph_THIS(iface,member) CFilterGraph* This = ((CFilterGraph*)(((char*)iface)-offsetof(CFilterGraph,member))) @@ -36,6 +87,13 @@ typedef struct CFilterGraph HRESULT QUARTZ_CreateFilterGraph(IUnknown* punkOuter,void** ppobj); void CFilterGraph_InitIFilterGraph2( CFilterGraph* pfg ); +void CFilterGraph_InitIMediaControl( CFilterGraph* pfg ); +void CFilterGraph_InitIMediaEventEx( CFilterGraph* pfg ); +void CFilterGraph_InitIMediaPosition( CFilterGraph* pfg ); +void CFilterGraph_InitIMediaSeeking( CFilterGraph* pfg ); +void CFilterGraph_InitIBasicVideo2( CFilterGraph* pfg ); +void CFilterGraph_InitIBasicAudio( CFilterGraph* pfg ); +void CFilterGraph_InitIVideoWindow( CFilterGraph* pfg ); #endif /* WINE_DSHOW_FGRAPH_H */ diff --git a/dlls/quartz/ibasaud.c b/dlls/quartz/ibasaud.c new file mode 100644 index 00000000000..0ed9a65c7da --- /dev/null +++ b/dlls/quartz/ibasaud.c @@ -0,0 +1,166 @@ +/* + * Implementation of IBasicAudio for FilterGraph. + * + * FIXME - stub. + * + * hidenori@a2.ctktv.ne.jp + */ + +#include "config.h" + +#include "windef.h" +#include "winbase.h" +#include "wingdi.h" +#include "winerror.h" +#include "wine/obj_base.h" +#include "wine/obj_oleaut.h" +#include "strmif.h" +#include "control.h" +#include "uuids.h" + +#include "debugtools.h" +DEFAULT_DEBUG_CHANNEL(quartz); + +#include "quartz_private.h" +#include "fgraph.h" + + + +static HRESULT WINAPI +IBasicAudio_fnQueryInterface(IBasicAudio* iface,REFIID riid,void** ppobj) +{ + CFilterGraph_THIS(iface,basaud); + + TRACE("(%p)->()\n",This); + + return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj); +} + +static ULONG WINAPI +IBasicAudio_fnAddRef(IBasicAudio* iface) +{ + CFilterGraph_THIS(iface,basaud); + + TRACE("(%p)->()\n",This); + + return IUnknown_AddRef(This->unk.punkControl); +} + +static ULONG WINAPI +IBasicAudio_fnRelease(IBasicAudio* iface) +{ + CFilterGraph_THIS(iface,basaud); + + TRACE("(%p)->()\n",This); + + return IUnknown_Release(This->unk.punkControl); +} + +static HRESULT WINAPI +IBasicAudio_fnGetTypeInfoCount(IBasicAudio* iface,UINT* pcTypeInfo) +{ + CFilterGraph_THIS(iface,basaud); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicAudio_fnGetTypeInfo(IBasicAudio* iface,UINT iTypeInfo, LCID lcid, ITypeInfo** ppobj) +{ + CFilterGraph_THIS(iface,basaud); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicAudio_fnGetIDsOfNames(IBasicAudio* iface,REFIID riid, LPOLESTR* ppwszName, UINT cNames, LCID lcid, DISPID* pDispId) +{ + CFilterGraph_THIS(iface,basaud); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicAudio_fnInvoke(IBasicAudio* iface,DISPID DispId, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarRes, EXCEPINFO* pExcepInfo, UINT* puArgErr) +{ + CFilterGraph_THIS(iface,basaud); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + + +static HRESULT WINAPI +IBasicAudio_fnput_Volume(IBasicAudio* iface,long lVol) +{ + CFilterGraph_THIS(iface,basaud); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicAudio_fnget_Volume(IBasicAudio* iface,long* plVol) +{ + CFilterGraph_THIS(iface,basaud); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicAudio_fnput_Balance(IBasicAudio* iface,long lBalance) +{ + CFilterGraph_THIS(iface,basaud); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicAudio_fnget_Balance(IBasicAudio* iface,long* plBalance) +{ + CFilterGraph_THIS(iface,basaud); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + + +static ICOM_VTABLE(IBasicAudio) ibasicaudio = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + /* IUnknown fields */ + IBasicAudio_fnQueryInterface, + IBasicAudio_fnAddRef, + IBasicAudio_fnRelease, + /* IDispatch fields */ + IBasicAudio_fnGetTypeInfoCount, + IBasicAudio_fnGetTypeInfo, + IBasicAudio_fnGetIDsOfNames, + IBasicAudio_fnInvoke, + /* IBasicAudio fields */ + IBasicAudio_fnput_Volume, + IBasicAudio_fnget_Volume, + IBasicAudio_fnput_Balance, + IBasicAudio_fnget_Balance, +}; + + +void CFilterGraph_InitIBasicAudio( CFilterGraph* pfg ) +{ + TRACE("(%p)\n",pfg); + ICOM_VTBL(&pfg->basaud) = &ibasicaudio; +} + diff --git a/dlls/quartz/ibasvid.c b/dlls/quartz/ibasvid.c new file mode 100644 index 00000000000..e70ef2bab02 --- /dev/null +++ b/dlls/quartz/ibasvid.c @@ -0,0 +1,487 @@ +/* + * Implementation of IBasicVideo2 for FilterGraph. + * + * FIXME - stub. + * + * hidenori@a2.ctktv.ne.jp + */ + +#include "config.h" + +#include "windef.h" +#include "winbase.h" +#include "wingdi.h" +#include "winerror.h" +#include "wine/obj_base.h" +#include "wine/obj_oleaut.h" +#include "strmif.h" +#include "control.h" +#include "uuids.h" + +#include "debugtools.h" +DEFAULT_DEBUG_CHANNEL(quartz); + +#include "quartz_private.h" +#include "fgraph.h" + + +static HRESULT WINAPI +IBasicVideo2_fnQueryInterface(IBasicVideo2* iface,REFIID riid,void** ppobj) +{ + CFilterGraph_THIS(iface,basvid); + + TRACE("(%p)->()\n",This); + + return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj); +} + +static ULONG WINAPI +IBasicVideo2_fnAddRef(IBasicVideo2* iface) +{ + CFilterGraph_THIS(iface,basvid); + + TRACE("(%p)->()\n",This); + + return IUnknown_AddRef(This->unk.punkControl); +} + +static ULONG WINAPI +IBasicVideo2_fnRelease(IBasicVideo2* iface) +{ + CFilterGraph_THIS(iface,basvid); + + TRACE("(%p)->()\n",This); + + return IUnknown_Release(This->unk.punkControl); +} + +static HRESULT WINAPI +IBasicVideo2_fnGetTypeInfoCount(IBasicVideo2* iface,UINT* pcTypeInfo) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnGetTypeInfo(IBasicVideo2* iface,UINT iTypeInfo, LCID lcid, ITypeInfo** ppobj) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnGetIDsOfNames(IBasicVideo2* iface,REFIID riid, LPOLESTR* ppwszName, UINT cNames, LCID lcid, DISPID* pDispId) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnInvoke(IBasicVideo2* iface,DISPID DispId, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarRes, EXCEPINFO* pExcepInfo, UINT* puArgErr) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + + +static HRESULT WINAPI +IBasicVideo2_fnget_AvgTimePerFrame(IBasicVideo2* iface,REFTIME* prefTime) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnget_BitRate(IBasicVideo2* iface,long* plRate) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnget_BitErrorRate(IBasicVideo2* iface,long* plRate) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnget_VideoWidth(IBasicVideo2* iface,long* plWidth) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnget_VideoHeight(IBasicVideo2* iface,long* plHeight) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnput_SourceLeft(IBasicVideo2* iface,long lLeft) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnget_SourceLeft(IBasicVideo2* iface,long* plLeft) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnput_SourceWidth(IBasicVideo2* iface,long lWidth) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnget_SourceWidth(IBasicVideo2* iface,long* plWidth) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnput_SourceTop(IBasicVideo2* iface,long lTop) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnget_SourceTop(IBasicVideo2* iface,long* plTop) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnput_SourceHeight(IBasicVideo2* iface,long lHeight) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnget_SourceHeight(IBasicVideo2* iface,long* plHeight) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnput_DestinationLeft(IBasicVideo2* iface,long lLeft) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnget_DestinationLeft(IBasicVideo2* iface,long* plLeft) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnput_DestinationWidth(IBasicVideo2* iface,long lWidth) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnget_DestinationWidth(IBasicVideo2* iface,long* plWidth) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnput_DestinationTop(IBasicVideo2* iface,long lTop) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnget_DestinationTop(IBasicVideo2* iface,long* plTop) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnput_DestinationHeight(IBasicVideo2* iface,long lHeight) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnget_DestinationHeight(IBasicVideo2* iface,long* plHeight) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnSetSourcePosition(IBasicVideo2* iface,long lLeft,long lTop,long lWidth,long lHeight) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnGetSourcePosition(IBasicVideo2* iface,long* plLeft,long* plTop,long* plWidth,long* plHeight) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnSetDefaultSourcePosition(IBasicVideo2* iface) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnSetDestinationPosition(IBasicVideo2* iface,long lLeft,long lTop,long lWidth,long lHeight) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnGetDestinationPosition(IBasicVideo2* iface,long* plLeft,long* plTop,long* plWidth,long* plHeight) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnSetDefaultDestinationPosition(IBasicVideo2* iface) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnGetVideoSize(IBasicVideo2* iface,long* plWidth,long* plHeight) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnGetVideoPaletteEntries(IBasicVideo2* iface,long lStart,long lCount,long* plRet,long* plPaletteEntry) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnGetCurrentImage(IBasicVideo2* iface,long* plBufferSize,long* plDIBBuffer) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnIsUsingDefaultSource(IBasicVideo2* iface) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnIsUsingDefaultDestination(IBasicVideo2* iface) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IBasicVideo2_fnGetPreferredAspectRatio(IBasicVideo2* iface,long* plRateX,long* plRateY) +{ + CFilterGraph_THIS(iface,basvid); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + + + + +static ICOM_VTABLE(IBasicVideo2) ibasicvideo = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + /* IUnknown fields */ + IBasicVideo2_fnQueryInterface, + IBasicVideo2_fnAddRef, + IBasicVideo2_fnRelease, + /* IDispatch fields */ + IBasicVideo2_fnGetTypeInfoCount, + IBasicVideo2_fnGetTypeInfo, + IBasicVideo2_fnGetIDsOfNames, + IBasicVideo2_fnInvoke, + /* IBasicVideo fields */ + IBasicVideo2_fnget_AvgTimePerFrame, + IBasicVideo2_fnget_BitRate, + IBasicVideo2_fnget_BitErrorRate, + IBasicVideo2_fnget_VideoWidth, + IBasicVideo2_fnget_VideoHeight, + IBasicVideo2_fnput_SourceLeft, + IBasicVideo2_fnget_SourceLeft, + IBasicVideo2_fnput_SourceWidth, + IBasicVideo2_fnget_SourceWidth, + IBasicVideo2_fnput_SourceTop, + IBasicVideo2_fnget_SourceTop, + IBasicVideo2_fnput_SourceHeight, + IBasicVideo2_fnget_SourceHeight, + IBasicVideo2_fnput_DestinationLeft, + IBasicVideo2_fnget_DestinationLeft, + IBasicVideo2_fnput_DestinationWidth, + IBasicVideo2_fnget_DestinationWidth, + IBasicVideo2_fnput_DestinationTop, + IBasicVideo2_fnget_DestinationTop, + IBasicVideo2_fnput_DestinationHeight, + IBasicVideo2_fnget_DestinationHeight, + IBasicVideo2_fnSetSourcePosition, + IBasicVideo2_fnGetSourcePosition, + IBasicVideo2_fnSetDefaultSourcePosition, + IBasicVideo2_fnSetDestinationPosition, + IBasicVideo2_fnGetDestinationPosition, + IBasicVideo2_fnSetDefaultDestinationPosition, + IBasicVideo2_fnGetVideoSize, + IBasicVideo2_fnGetVideoPaletteEntries, + IBasicVideo2_fnGetCurrentImage, + IBasicVideo2_fnIsUsingDefaultSource, + IBasicVideo2_fnIsUsingDefaultDestination, + /* IBasicVideo2 fields */ + IBasicVideo2_fnGetPreferredAspectRatio, +}; + + +void CFilterGraph_InitIBasicVideo2( CFilterGraph* pfg ) +{ + TRACE("(%p)\n",pfg); + ICOM_VTBL(&pfg->basvid) = &ibasicvideo; +} + diff --git a/dlls/quartz/ifgraph.c b/dlls/quartz/ifgraph.c index a28ec06ddbe..8d2697b9305 100644 --- a/dlls/quartz/ifgraph.c +++ b/dlls/quartz/ifgraph.c @@ -14,7 +14,9 @@ #include "wingdi.h" #include "winerror.h" #include "wine/obj_base.h" +#include "wine/obj_oleaut.h" #include "strmif.h" +#include "control.h" #include "uuids.h" #include "debugtools.h" @@ -30,7 +32,7 @@ IFilterGraph2_fnQueryInterface(IFilterGraph2* iface,REFIID riid,void** ppobj) TRACE("(%p)->()\n",This); - return IUnknown_QueryInterface((IUnknown*)(&This->unk),riid,ppobj); + return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj); } static ULONG WINAPI @@ -40,7 +42,7 @@ IFilterGraph2_fnAddRef(IFilterGraph2* iface) TRACE("(%p)->()\n",This); - return IUnknown_AddRef((IUnknown*)(&This->unk)); + return IUnknown_AddRef(This->unk.punkControl); } static ULONG WINAPI @@ -50,7 +52,7 @@ IFilterGraph2_fnRelease(IFilterGraph2* iface) TRACE("(%p)->()\n",This); - return IUnknown_Release((IUnknown*)(&This->unk)); + return IUnknown_Release(This->unk.punkControl); } static HRESULT WINAPI diff --git a/dlls/quartz/imcntl.c b/dlls/quartz/imcntl.c new file mode 100644 index 00000000000..5777c364aeb --- /dev/null +++ b/dlls/quartz/imcntl.c @@ -0,0 +1,220 @@ +/* + * Implementation of IMediaControl for FilterGraph. + * + * FIXME - stub. + * + * hidenori@a2.ctktv.ne.jp + */ + +#include "config.h" + +#include "windef.h" +#include "winbase.h" +#include "wingdi.h" +#include "winerror.h" +#include "wine/obj_base.h" +#include "wine/obj_oleaut.h" +#include "strmif.h" +#include "control.h" +#include "uuids.h" + +#include "debugtools.h" +DEFAULT_DEBUG_CHANNEL(quartz); + +#include "quartz_private.h" +#include "fgraph.h" + + + +static HRESULT WINAPI +IMediaControl_fnQueryInterface(IMediaControl* iface,REFIID riid,void** ppobj) +{ + CFilterGraph_THIS(iface,mediacontrol); + + TRACE("(%p)->()\n",This); + + return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj); +} + +static ULONG WINAPI +IMediaControl_fnAddRef(IMediaControl* iface) +{ + CFilterGraph_THIS(iface,mediacontrol); + + TRACE("(%p)->()\n",This); + + return IUnknown_AddRef(This->unk.punkControl); +} + +static ULONG WINAPI +IMediaControl_fnRelease(IMediaControl* iface) +{ + CFilterGraph_THIS(iface,mediacontrol); + + TRACE("(%p)->()\n",This); + + return IUnknown_Release(This->unk.punkControl); +} + +static HRESULT WINAPI +IMediaControl_fnGetTypeInfoCount(IMediaControl* iface,UINT* pcTypeInfo) +{ + CFilterGraph_THIS(iface,mediacontrol); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaControl_fnGetTypeInfo(IMediaControl* iface,UINT iTypeInfo, LCID lcid, ITypeInfo** ppobj) +{ + CFilterGraph_THIS(iface,mediacontrol); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaControl_fnGetIDsOfNames(IMediaControl* iface,REFIID riid, LPOLESTR* ppwszName, UINT cNames, LCID lcid, DISPID* pDispId) +{ + CFilterGraph_THIS(iface,mediacontrol); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaControl_fnInvoke(IMediaControl* iface,DISPID DispId, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarRes, EXCEPINFO* pExcepInfo, UINT* puArgErr) +{ + CFilterGraph_THIS(iface,mediacontrol); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + + +static HRESULT WINAPI +IMediaControl_fnRun(IMediaControl* iface) +{ + CFilterGraph_THIS(iface,mediacontrol); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaControl_fnPause(IMediaControl* iface) +{ + CFilterGraph_THIS(iface,mediacontrol); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaControl_fnStop(IMediaControl* iface) +{ + CFilterGraph_THIS(iface,mediacontrol); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaControl_fnGetState(IMediaControl* iface,LONG lTimeOut,OAFilterState* pFilterState) +{ + CFilterGraph_THIS(iface,mediacontrol); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaControl_fnRenderFile(IMediaControl* iface,BSTR bstrFileName) +{ + CFilterGraph_THIS(iface,mediacontrol); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaControl_fnAddSourceFilter(IMediaControl* iface,BSTR bstrFileName,IDispatch** ppobj) +{ + CFilterGraph_THIS(iface,mediacontrol); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaControl_fnget_FilterCollection(IMediaControl* iface,IDispatch** ppobj) +{ + CFilterGraph_THIS(iface,mediacontrol); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaControl_fnget_RegFilterCollection(IMediaControl* iface,IDispatch** ppobj) +{ + CFilterGraph_THIS(iface,mediacontrol); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaControl_fnStopWhenReady(IMediaControl* iface) +{ + CFilterGraph_THIS(iface,mediacontrol); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + + +static ICOM_VTABLE(IMediaControl) imediacontrol = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + /* IUnknown fields */ + IMediaControl_fnQueryInterface, + IMediaControl_fnAddRef, + IMediaControl_fnRelease, + /* IDispatch fields */ + IMediaControl_fnGetTypeInfoCount, + IMediaControl_fnGetTypeInfo, + IMediaControl_fnGetIDsOfNames, + IMediaControl_fnInvoke, + /* IMediaControl fields */ + IMediaControl_fnRun, + IMediaControl_fnPause, + IMediaControl_fnStop, + IMediaControl_fnGetState, + IMediaControl_fnRenderFile, + IMediaControl_fnAddSourceFilter, + IMediaControl_fnget_FilterCollection, + IMediaControl_fnget_RegFilterCollection, + IMediaControl_fnStopWhenReady, +}; + + +void CFilterGraph_InitIMediaControl( CFilterGraph* pfg ) +{ + TRACE("(%p)\n",pfg); + ICOM_VTBL(&pfg->mediacontrol) = &imediacontrol; +} diff --git a/dlls/quartz/imem.c b/dlls/quartz/imem.c index dcf335e5d7e..5d7b1d67937 100644 --- a/dlls/quartz/imem.c +++ b/dlls/quartz/imem.c @@ -30,7 +30,7 @@ IMemAllocator_fnQueryInterface(IMemAllocator* iface,REFIID riid,void** ppobj) TRACE("(%p)->()\n",This); - return IUnknown_QueryInterface((IUnknown*)(&This->unk),riid,ppobj); + return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj); } static ULONG WINAPI @@ -40,7 +40,7 @@ IMemAllocator_fnAddRef(IMemAllocator* iface) TRACE("(%p)->()\n",This); - return IUnknown_AddRef((IUnknown*)(&This->unk)); + return IUnknown_AddRef(This->unk.punkControl); } static ULONG WINAPI @@ -50,7 +50,7 @@ IMemAllocator_fnRelease(IMemAllocator* iface) TRACE("(%p)->()\n",This); - return IUnknown_Release((IUnknown*)(&This->unk)); + return IUnknown_Release(This->unk.punkControl); } static HRESULT WINAPI diff --git a/dlls/quartz/imevent.c b/dlls/quartz/imevent.c new file mode 100644 index 00000000000..676d50d48fb --- /dev/null +++ b/dlls/quartz/imevent.c @@ -0,0 +1,222 @@ +/* + * Implementation of IMediaEvent[Ex] for FilterGraph. + * + * FIXME - stub. + * + * hidenori@a2.ctktv.ne.jp + */ + +#include "config.h" + +#include "windef.h" +#include "winbase.h" +#include "wingdi.h" +#include "winerror.h" +#include "wine/obj_base.h" +#include "wine/obj_oleaut.h" +#include "strmif.h" +#include "control.h" +#include "uuids.h" + +#include "debugtools.h" +DEFAULT_DEBUG_CHANNEL(quartz); + +#include "quartz_private.h" +#include "fgraph.h" + + + +static HRESULT WINAPI +IMediaEventEx_fnQueryInterface(IMediaEventEx* iface,REFIID riid,void** ppobj) +{ + CFilterGraph_THIS(iface,mediaevent); + + TRACE("(%p)->()\n",This); + + return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj); +} + +static ULONG WINAPI +IMediaEventEx_fnAddRef(IMediaEventEx* iface) +{ + CFilterGraph_THIS(iface,mediaevent); + + TRACE("(%p)->()\n",This); + + return IUnknown_AddRef(This->unk.punkControl); +} + +static ULONG WINAPI +IMediaEventEx_fnRelease(IMediaEventEx* iface) +{ + CFilterGraph_THIS(iface,mediaevent); + + TRACE("(%p)->()\n",This); + + return IUnknown_Release(This->unk.punkControl); +} + +static HRESULT WINAPI +IMediaEventEx_fnGetTypeInfoCount(IMediaEventEx* iface,UINT* pcTypeInfo) +{ + CFilterGraph_THIS(iface,mediaevent); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaEventEx_fnGetTypeInfo(IMediaEventEx* iface,UINT iTypeInfo, LCID lcid, ITypeInfo** ppobj) +{ + CFilterGraph_THIS(iface,mediaevent); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaEventEx_fnGetIDsOfNames(IMediaEventEx* iface,REFIID riid, LPOLESTR* ppwszName, UINT cNames, LCID lcid, DISPID* pDispId) +{ + CFilterGraph_THIS(iface,mediaevent); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaEventEx_fnInvoke(IMediaEventEx* iface,DISPID DispId, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarRes, EXCEPINFO* pExcepInfo, UINT* puArgErr) +{ + CFilterGraph_THIS(iface,mediaevent); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + + +static HRESULT WINAPI +IMediaEventEx_fnGetEventHandle(IMediaEventEx* iface,OAEVENT* hEvent) +{ + CFilterGraph_THIS(iface,mediaevent); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaEventEx_fnGetEvent(IMediaEventEx* iface,long* lEventCode,LONG_PTR* plParam1,LONG_PTR* plParam2,long lTimeOut) +{ + CFilterGraph_THIS(iface,mediaevent); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaEventEx_fnWaitForCompletion(IMediaEventEx* iface,long lTimeOut,long* plEventCode) +{ + CFilterGraph_THIS(iface,mediaevent); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaEventEx_fnCancelDefaultHandling(IMediaEventEx* iface,long lEventCode) +{ + CFilterGraph_THIS(iface,mediaevent); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaEventEx_fnRestoreDefaultHandling(IMediaEventEx* iface,long lEventCode) +{ + CFilterGraph_THIS(iface,mediaevent); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaEventEx_fnFreeEventParams(IMediaEventEx* iface,long lEventCode,LONG_PTR lParam1,LONG_PTR lParam2) +{ + CFilterGraph_THIS(iface,mediaevent); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaEventEx_fnSetNotifyWindow(IMediaEventEx* iface,OAHWND hwnd,long message,LONG_PTR lParam) +{ + CFilterGraph_THIS(iface,mediaevent); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaEventEx_fnSetNotifyFlags(IMediaEventEx* iface,long lNotifyFlags) +{ + CFilterGraph_THIS(iface,mediaevent); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaEventEx_fnGetNotifyFlags(IMediaEventEx* iface,long* plNotifyFlags) +{ + CFilterGraph_THIS(iface,mediaevent); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + + + +static ICOM_VTABLE(IMediaEventEx) imediaevent = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + /* IUnknown fields */ + IMediaEventEx_fnQueryInterface, + IMediaEventEx_fnAddRef, + IMediaEventEx_fnRelease, + /* IDispatch fields */ + IMediaEventEx_fnGetTypeInfoCount, + IMediaEventEx_fnGetTypeInfo, + IMediaEventEx_fnGetIDsOfNames, + IMediaEventEx_fnInvoke, + /* IMediaEvent fields */ + IMediaEventEx_fnGetEventHandle, + IMediaEventEx_fnGetEvent, + IMediaEventEx_fnWaitForCompletion, + IMediaEventEx_fnCancelDefaultHandling, + IMediaEventEx_fnRestoreDefaultHandling, + IMediaEventEx_fnFreeEventParams, + /* IMediaEventEx fields */ + IMediaEventEx_fnSetNotifyWindow, + IMediaEventEx_fnSetNotifyFlags, + IMediaEventEx_fnGetNotifyFlags, +}; + + +void CFilterGraph_InitIMediaEventEx( CFilterGraph* pfg ) +{ + TRACE("(%p)\n",pfg); + ICOM_VTBL(&pfg->mediaevent) = &imediaevent; +} diff --git a/dlls/quartz/impos.c b/dlls/quartz/impos.c new file mode 100644 index 00000000000..3a0300dc54c --- /dev/null +++ b/dlls/quartz/impos.c @@ -0,0 +1,241 @@ +/* + * Implementation of IMediaPosition for FilterGraph. + * + * FIXME - stub. + * + * hidenori@a2.ctktv.ne.jp + */ + +#include "config.h" + +#include "windef.h" +#include "winbase.h" +#include "wingdi.h" +#include "winerror.h" +#include "wine/obj_base.h" +#include "wine/obj_oleaut.h" +#include "strmif.h" +#include "control.h" +#include "uuids.h" + +#include "debugtools.h" +DEFAULT_DEBUG_CHANNEL(quartz); + +#include "quartz_private.h" +#include "fgraph.h" + + +static HRESULT WINAPI +IMediaPosition_fnQueryInterface(IMediaPosition* iface,REFIID riid,void** ppobj) +{ + CFilterGraph_THIS(iface,mediaposition); + + TRACE("(%p)->()\n",This); + + return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj); +} + +static ULONG WINAPI +IMediaPosition_fnAddRef(IMediaPosition* iface) +{ + CFilterGraph_THIS(iface,mediaposition); + + TRACE("(%p)->()\n",This); + + return IUnknown_AddRef(This->unk.punkControl); +} + +static ULONG WINAPI +IMediaPosition_fnRelease(IMediaPosition* iface) +{ + CFilterGraph_THIS(iface,mediaposition); + + TRACE("(%p)->()\n",This); + + return IUnknown_Release(This->unk.punkControl); +} + +static HRESULT WINAPI +IMediaPosition_fnGetTypeInfoCount(IMediaPosition* iface,UINT* pcTypeInfo) +{ + CFilterGraph_THIS(iface,mediaposition); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaPosition_fnGetTypeInfo(IMediaPosition* iface,UINT iTypeInfo, LCID lcid, ITypeInfo** ppobj) +{ + CFilterGraph_THIS(iface,mediaposition); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaPosition_fnGetIDsOfNames(IMediaPosition* iface,REFIID riid, LPOLESTR* ppwszName, UINT cNames, LCID lcid, DISPID* pDispId) +{ + CFilterGraph_THIS(iface,mediaposition); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaPosition_fnInvoke(IMediaPosition* iface,DISPID DispId, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarRes, EXCEPINFO* pExcepInfo, UINT* puArgErr) +{ + CFilterGraph_THIS(iface,mediaposition); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + + +static HRESULT WINAPI +IMediaPosition_fnget_Duration(IMediaPosition* iface,REFTIME* prefTime) +{ + CFilterGraph_THIS(iface,mediaposition); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaPosition_fnput_CurrentPosition(IMediaPosition* iface,REFTIME refTime) +{ + CFilterGraph_THIS(iface,mediaposition); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaPosition_fnget_CurrentPosition(IMediaPosition* iface,REFTIME* prefTime) +{ + CFilterGraph_THIS(iface,mediaposition); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaPosition_fnget_StopTime(IMediaPosition* iface,REFTIME* prefTime) +{ + CFilterGraph_THIS(iface,mediaposition); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaPosition_fnput_StopTime(IMediaPosition* iface,REFTIME refTime) +{ + CFilterGraph_THIS(iface,mediaposition); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaPosition_fnget_PrerollTime(IMediaPosition* iface,REFTIME* prefTime) +{ + CFilterGraph_THIS(iface,mediaposition); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaPosition_fnput_PrerollTime(IMediaPosition* iface,REFTIME refTime) +{ + CFilterGraph_THIS(iface,mediaposition); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaPosition_fnput_Rate(IMediaPosition* iface,double dblRate) +{ + CFilterGraph_THIS(iface,mediaposition); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaPosition_fnget_Rate(IMediaPosition* iface,double* pdblRate) +{ + CFilterGraph_THIS(iface,mediaposition); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaPosition_fnCanSeekForward(IMediaPosition* iface,LONG* pCanSeek) +{ + CFilterGraph_THIS(iface,mediaposition); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaPosition_fnCanSeekBackward(IMediaPosition* iface,LONG* pCanSeek) +{ + CFilterGraph_THIS(iface,mediaposition); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + + +static ICOM_VTABLE(IMediaPosition) imediaposition = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + /* IUnknown fields */ + IMediaPosition_fnQueryInterface, + IMediaPosition_fnAddRef, + IMediaPosition_fnRelease, + /* IDispatch fields */ + IMediaPosition_fnGetTypeInfoCount, + IMediaPosition_fnGetTypeInfo, + IMediaPosition_fnGetIDsOfNames, + IMediaPosition_fnInvoke, + /* IMediaPosition fields */ + IMediaPosition_fnget_Duration, + IMediaPosition_fnput_CurrentPosition, + IMediaPosition_fnget_CurrentPosition, + IMediaPosition_fnget_StopTime, + IMediaPosition_fnput_StopTime, + IMediaPosition_fnget_PrerollTime, + IMediaPosition_fnput_PrerollTime, + IMediaPosition_fnput_Rate, + IMediaPosition_fnget_Rate, + IMediaPosition_fnCanSeekForward, + IMediaPosition_fnCanSeekBackward, +}; + + +void CFilterGraph_InitIMediaPosition( CFilterGraph* pfg ) +{ + TRACE("(%p)\n",pfg); + ICOM_VTBL(&pfg->mediaposition) = &imediaposition; +} diff --git a/dlls/quartz/imseek.c b/dlls/quartz/imseek.c new file mode 100644 index 00000000000..9df7eb83e8c --- /dev/null +++ b/dlls/quartz/imseek.c @@ -0,0 +1,264 @@ +/* + * Implementation of IMediaSeeking for FilterGraph. + * + * FIXME - stub. + * + * hidenori@a2.ctktv.ne.jp + */ + +#include "config.h" + +#include "windef.h" +#include "winbase.h" +#include "wingdi.h" +#include "winerror.h" +#include "wine/obj_base.h" +#include "wine/obj_oleaut.h" +#include "strmif.h" +#include "control.h" +#include "uuids.h" + +#include "debugtools.h" +DEFAULT_DEBUG_CHANNEL(quartz); + +#include "quartz_private.h" +#include "fgraph.h" + + + +static HRESULT WINAPI +IMediaSeeking_fnQueryInterface(IMediaSeeking* iface,REFIID riid,void** ppobj) +{ + CFilterGraph_THIS(iface,mediaseeking); + + TRACE("(%p)->()\n",This); + + return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj); +} + +static ULONG WINAPI +IMediaSeeking_fnAddRef(IMediaSeeking* iface) +{ + CFilterGraph_THIS(iface,mediaseeking); + + TRACE("(%p)->()\n",This); + + return IUnknown_AddRef(This->unk.punkControl); +} + +static ULONG WINAPI +IMediaSeeking_fnRelease(IMediaSeeking* iface) +{ + CFilterGraph_THIS(iface,mediaseeking); + + TRACE("(%p)->()\n",This); + + return IUnknown_Release(This->unk.punkControl); +} + + +static HRESULT WINAPI +IMediaSeeking_fnGetCapabilities(IMediaSeeking* iface,DWORD* pdwCaps) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaSeeking_fnCheckCapabilities(IMediaSeeking* iface,DWORD* pdwCaps) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaSeeking_fnIsFormatSupported(IMediaSeeking* iface,const GUID* pidFormat) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaSeeking_fnQueryPreferredFormat(IMediaSeeking* iface,GUID* pidFormat) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaSeeking_fnGetTimeFormat(IMediaSeeking* iface,GUID* pidFormat) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaSeeking_fnIsUsingTimeFormat(IMediaSeeking* iface,const GUID* pidFormat) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaSeeking_fnSetTimeFormat(IMediaSeeking* iface,const GUID* pidFormat) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaSeeking_fnGetDuration(IMediaSeeking* iface,LONGLONG* pllDuration) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaSeeking_fnGetStopPosition(IMediaSeeking* iface,LONGLONG* pllPos) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaSeeking_fnGetCurrentPosition(IMediaSeeking* iface,LONGLONG* pllPos) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaSeeking_fnConvertTimeFormat(IMediaSeeking* iface,LONGLONG* pllOut,const GUID* pidFmtOut,LONGLONG llIn,const GUID* pidFmtIn) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaSeeking_fnSetPositions(IMediaSeeking* iface,LONGLONG* pllCur,DWORD dwCurFlags,LONGLONG* pllStop,DWORD dwStopFlags) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaSeeking_fnGetPositions(IMediaSeeking* iface,LONGLONG* pllCur,LONGLONG* pllStop) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaSeeking_fnGetAvailable(IMediaSeeking* iface,LONGLONG* pllFirst,LONGLONG* pllLast) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaSeeking_fnSetRate(IMediaSeeking* iface,double dblRate) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaSeeking_fnGetRate(IMediaSeeking* iface,double* pdblRate) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IMediaSeeking_fnGetPreroll(IMediaSeeking* iface,LONGLONG* pllPreroll) +{ + CFilterGraph_THIS(iface,mediaseeking); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + + + + +static ICOM_VTABLE(IMediaSeeking) imediaseeking = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + /* IUnknown fields */ + IMediaSeeking_fnQueryInterface, + IMediaSeeking_fnAddRef, + IMediaSeeking_fnRelease, + /* IMediaSeeking fields */ + IMediaSeeking_fnGetCapabilities, + IMediaSeeking_fnCheckCapabilities, + IMediaSeeking_fnIsFormatSupported, + IMediaSeeking_fnQueryPreferredFormat, + IMediaSeeking_fnGetTimeFormat, + IMediaSeeking_fnIsUsingTimeFormat, + IMediaSeeking_fnSetTimeFormat, + IMediaSeeking_fnGetDuration, + IMediaSeeking_fnGetStopPosition, + IMediaSeeking_fnGetCurrentPosition, + IMediaSeeking_fnConvertTimeFormat, + IMediaSeeking_fnSetPositions, + IMediaSeeking_fnGetPositions, + IMediaSeeking_fnGetAvailable, + IMediaSeeking_fnSetRate, + IMediaSeeking_fnGetRate, + IMediaSeeking_fnGetPreroll, +}; + +void CFilterGraph_InitIMediaSeeking( CFilterGraph* pfg ) +{ + TRACE("(%p)\n",pfg); + ICOM_VTBL(&pfg->mediaseeking) = &imediaseeking; +} diff --git a/dlls/quartz/irclock.c b/dlls/quartz/irclock.c index 24bf1101307..a780774b730 100644 --- a/dlls/quartz/irclock.c +++ b/dlls/quartz/irclock.c @@ -30,7 +30,7 @@ IReferenceClock_fnQueryInterface(IReferenceClock* iface,REFIID riid,void** ppobj TRACE("(%p)->()\n",This); - return IUnknown_QueryInterface((IUnknown*)(&This->unk),riid,ppobj); + return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj); } static ULONG WINAPI @@ -40,7 +40,7 @@ IReferenceClock_fnAddRef(IReferenceClock* iface) TRACE("(%p)->()\n",This); - return IUnknown_AddRef((IUnknown*)(&This->unk)); + return IUnknown_AddRef(This->unk.punkControl); } static ULONG WINAPI @@ -50,7 +50,7 @@ IReferenceClock_fnRelease(IReferenceClock* iface) TRACE("(%p)->()\n",This); - return IUnknown_Release((IUnknown*)(&This->unk)); + return IUnknown_Release(This->unk.punkControl); } static HRESULT WINAPI diff --git a/dlls/quartz/iunk.c b/dlls/quartz/iunk.c index 5268cdacfa4..cfb2fc7b109 100644 --- a/dlls/quartz/iunk.c +++ b/dlls/quartz/iunk.c @@ -31,26 +31,30 @@ IUnknown_fnQueryInterface(IUnknown* iface,REFIID riid,LPVOID *ppobj) *ppobj = NULL; ofs = 0; - for ( dwIndex = 0; dwIndex < This->dwEntries; dwIndex++ ) - { - if ( IsEqualGUID( This->pEntries[dwIndex].piid, riid ) ) - { - ofs = This->pEntries[dwIndex].ofsVTPtr; - break; - } - } - if ( dwIndex == This->dwEntries ) + if ( IsEqualGUID( &IID_IUnknown, riid ) ) { - if ( !IsEqualGUID( &IID_IUnknown, riid ) ) + TRACE("IID_IUnknown - returns inner object.\n"); + } + else + { + for ( dwIndex = 0; dwIndex < This->dwEntries; dwIndex++ ) { - TRACE("unknown interface: %s\n",debugstr_guid(riid)); + if ( IsEqualGUID( This->pEntries[dwIndex].piid, riid ) ) + { + ofs = This->pEntries[dwIndex].ofsVTPtr; + break; + } + } + if ( dwIndex == This->dwEntries ) + { + FIXME("unknown interface: %s\n",debugstr_guid(riid)); return E_NOINTERFACE; } } *ppobj = (LPVOID)(((char*)This) + ofs); - IUnknown_AddRef(iface); + IUnknown_AddRef((IUnknown*)(*ppobj)); return S_OK; } @@ -89,7 +93,7 @@ static ICOM_VTABLE(IUnknown) iunknown = }; -void QUARTZ_IUnkInit( QUARTZ_IUnkImpl* pImpl ) +void QUARTZ_IUnkInit( QUARTZ_IUnkImpl* pImpl, IUnknown* punkOuter ) { TRACE("(%p)\n",pImpl); @@ -97,4 +101,10 @@ void QUARTZ_IUnkInit( QUARTZ_IUnkImpl* pImpl ) pImpl->pEntries = NULL; pImpl->dwEntries = 0; pImpl->ref = 1; + pImpl->punkControl = (IUnknown*)pImpl; + + /* for delegation. */ + if ( punkOuter != NULL ) + pImpl->punkControl = punkOuter; } + diff --git a/dlls/quartz/iunk.h b/dlls/quartz/iunk.h index 8ace9952683..d0ffa583b1a 100644 --- a/dlls/quartz/iunk.h +++ b/dlls/quartz/iunk.h @@ -41,10 +41,11 @@ typedef struct QUARTZ_IUnkImpl /* IUnknown fields. */ ULONG ref; + IUnknown* punkControl; } QUARTZ_IUnkImpl; -void QUARTZ_IUnkInit( QUARTZ_IUnkImpl* pImpl ); +void QUARTZ_IUnkInit( QUARTZ_IUnkImpl* pImpl, IUnknown* punkOuter ); #endif /* WINE_DSHOW_IUNK_H */ diff --git a/dlls/quartz/ividwin.c b/dlls/quartz/ividwin.c new file mode 100644 index 00000000000..3c6a42ee899 --- /dev/null +++ b/dlls/quartz/ividwin.c @@ -0,0 +1,554 @@ +/* + * Implementation of IVideoWindow for FilterGraph. + * + * FIXME - stub. + * + * hidenori@a2.ctktv.ne.jp + */ + +#include "config.h" + +#include "windef.h" +#include "winbase.h" +#include "wingdi.h" +#include "winerror.h" +#include "wine/obj_base.h" +#include "wine/obj_oleaut.h" +#include "strmif.h" +#include "control.h" +#include "uuids.h" + +#include "debugtools.h" +DEFAULT_DEBUG_CHANNEL(quartz); + +#include "quartz_private.h" +#include "fgraph.h" + + + +static HRESULT WINAPI +IVideoWindow_fnQueryInterface(IVideoWindow* iface,REFIID riid,void** ppobj) +{ + CFilterGraph_THIS(iface,vidwin); + + TRACE("(%p)->()\n",This); + + return IUnknown_QueryInterface(This->unk.punkControl,riid,ppobj); +} + +static ULONG WINAPI +IVideoWindow_fnAddRef(IVideoWindow* iface) +{ + CFilterGraph_THIS(iface,vidwin); + + TRACE("(%p)->()\n",This); + + return IUnknown_AddRef(This->unk.punkControl); +} + +static ULONG WINAPI +IVideoWindow_fnRelease(IVideoWindow* iface) +{ + CFilterGraph_THIS(iface,vidwin); + + TRACE("(%p)->()\n",This); + + return IUnknown_Release(This->unk.punkControl); +} + +static HRESULT WINAPI +IVideoWindow_fnGetTypeInfoCount(IVideoWindow* iface,UINT* pcTypeInfo) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnGetTypeInfo(IVideoWindow* iface,UINT iTypeInfo, LCID lcid, ITypeInfo** ppobj) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnGetIDsOfNames(IVideoWindow* iface,REFIID riid, LPOLESTR* ppwszName, UINT cNames, LCID lcid, DISPID* pDispId) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnInvoke(IVideoWindow* iface,DISPID DispId, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarRes, EXCEPINFO* pExcepInfo, UINT* puArgErr) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->()\n",This); + + return E_NOTIMPL; +} + + + +static HRESULT WINAPI +IVideoWindow_fnput_Caption(IVideoWindow* iface,BSTR strCaption) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnget_Caption(IVideoWindow* iface,BSTR* pstrCaption) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnput_WindowStyle(IVideoWindow* iface,long lStyle) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnget_WindowStyle(IVideoWindow* iface,long* plStyle) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnput_WindowStyleEx(IVideoWindow* iface,long lExStyle) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnget_WindowStyleEx(IVideoWindow* iface,long* plExStyle) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnput_AutoShow(IVideoWindow* iface,long lAutoShow) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnget_AutoShow(IVideoWindow* iface,long* plAutoShow) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnput_WindowState(IVideoWindow* iface,long lState) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnget_WindowState(IVideoWindow* iface,long* plState) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnput_BackgroundPalette(IVideoWindow* iface,long lBackPal) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnget_BackgroundPalette(IVideoWindow* iface,long* plBackPal) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnput_Visible(IVideoWindow* iface,long lVisible) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnget_Visible(IVideoWindow* iface,long* plVisible) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnput_Left(IVideoWindow* iface,long lLeft) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnget_Left(IVideoWindow* iface,long* plLeft) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnput_Width(IVideoWindow* iface,long lWidth) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnget_Width(IVideoWindow* iface,long* plWidth) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnput_Top(IVideoWindow* iface,long lTop) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnget_Top(IVideoWindow* iface,long* plTop) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnput_Height(IVideoWindow* iface,long lHeight) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnget_Height(IVideoWindow* iface,long* plHeight) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnput_Owner(IVideoWindow* iface,OAHWND hwnd) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnget_Owner(IVideoWindow* iface,OAHWND* phwnd) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnput_MessageDrain(IVideoWindow* iface,OAHWND hwnd) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnget_MessageDrain(IVideoWindow* iface,OAHWND* phwnd) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnget_BorderColor(IVideoWindow* iface,long* plColor) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnput_BorderColor(IVideoWindow* iface,long lColor) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnget_FullScreenMode(IVideoWindow* iface,long* plMode) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnput_FullScreenMode(IVideoWindow* iface,long lMode) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnSetWindowForeground(IVideoWindow* iface,long lFocus) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnNotifyOwnerMessage(IVideoWindow* iface,OAHWND hwnd,long message,LONG_PTR wParam,LONG_PTR lParam) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnSetWindowPosition(IVideoWindow* iface,long lLeft,long lTop,long lWidth,long lHeight) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnGetWindowPosition(IVideoWindow* iface,long* plLeft,long* plTop,long* plWidth,long* plHeight) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnGetMinIdealImageSize(IVideoWindow* iface,long* plWidth,long* plHeight) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnGetMaxIdealImageSize(IVideoWindow* iface,long* plWidth,long* plHeight) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnGetRestorePosition(IVideoWindow* iface,long* plLeft,long* plTop,long* plWidth,long* plHeight) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnHideCursor(IVideoWindow* iface,long lHide) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI +IVideoWindow_fnIsCursorHidden(IVideoWindow* iface,long* plHide) +{ + CFilterGraph_THIS(iface,vidwin); + + FIXME("(%p)->() stub!\n",This); + + return E_NOTIMPL; +} + + + + +static ICOM_VTABLE(IVideoWindow) ivideowindow = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + /* IUnknown fields */ + IVideoWindow_fnQueryInterface, + IVideoWindow_fnAddRef, + IVideoWindow_fnRelease, + /* IDispatch fields */ + IVideoWindow_fnGetTypeInfoCount, + IVideoWindow_fnGetTypeInfo, + IVideoWindow_fnGetIDsOfNames, + IVideoWindow_fnInvoke, + /* IVideoWindow fields */ + IVideoWindow_fnput_Caption, + IVideoWindow_fnget_Caption, + IVideoWindow_fnput_WindowStyle, + IVideoWindow_fnget_WindowStyle, + IVideoWindow_fnput_WindowStyleEx, + IVideoWindow_fnget_WindowStyleEx, + IVideoWindow_fnput_AutoShow, + IVideoWindow_fnget_AutoShow, + IVideoWindow_fnput_WindowState, + IVideoWindow_fnget_WindowState, + IVideoWindow_fnput_BackgroundPalette, + IVideoWindow_fnget_BackgroundPalette, + IVideoWindow_fnput_Visible, + IVideoWindow_fnget_Visible, + IVideoWindow_fnput_Left, + IVideoWindow_fnget_Left, + IVideoWindow_fnput_Width, + IVideoWindow_fnget_Width, + IVideoWindow_fnput_Top, + IVideoWindow_fnget_Top, + IVideoWindow_fnput_Height, + IVideoWindow_fnget_Height, + IVideoWindow_fnput_Owner, + IVideoWindow_fnget_Owner, + IVideoWindow_fnput_MessageDrain, + IVideoWindow_fnget_MessageDrain, + IVideoWindow_fnget_BorderColor, + IVideoWindow_fnput_BorderColor, + IVideoWindow_fnget_FullScreenMode, + IVideoWindow_fnput_FullScreenMode, + IVideoWindow_fnSetWindowForeground, + IVideoWindow_fnNotifyOwnerMessage, + IVideoWindow_fnSetWindowPosition, + IVideoWindow_fnGetWindowPosition, + IVideoWindow_fnGetMinIdealImageSize, + IVideoWindow_fnGetMaxIdealImageSize, + IVideoWindow_fnGetRestorePosition, + IVideoWindow_fnHideCursor, + IVideoWindow_fnIsCursorHidden, + +}; + + +void CFilterGraph_InitIVideoWindow( CFilterGraph* pfg ) +{ + TRACE("(%p)\n",pfg); + ICOM_VTBL(&pfg->vidwin) = &ivideowindow; +} diff --git a/dlls/quartz/main.c b/dlls/quartz/main.c index d0f88d6dbdc..6ac700ec09c 100644 --- a/dlls/quartz/main.c +++ b/dlls/quartz/main.c @@ -5,7 +5,9 @@ #include "winbase.h" #include "wingdi.h" #include "ole2.h" +#include "wine/obj_oleaut.h" #include "strmif.h" +#include "control.h" #include "uuids.h" #include "debugtools.h" @@ -145,6 +147,8 @@ static HRESULT WINAPI IClassFactory_fnCreateInstance(LPCLASSFACTORY iface,LPUNKN if ( ppobj == NULL ) return E_POINTER; + if ( pOuter != NULL && !IsEqualGUID( riid, &IID_IUnknown ) ) + return CLASS_E_NOAGGREGATION; *ppobj = NULL; diff --git a/dlls/quartz/memalloc.c b/dlls/quartz/memalloc.c index 894d54819c4..16410bf5e2c 100644 --- a/dlls/quartz/memalloc.c +++ b/dlls/quartz/memalloc.c @@ -39,13 +39,13 @@ HRESULT QUARTZ_CreateMemoryAllocator(IUnknown* punkOuter,void** ppobj) if ( pma == NULL ) return E_OUTOFMEMORY; - QUARTZ_IUnkInit( &pma->unk ); + QUARTZ_IUnkInit( &pma->unk, punkOuter ); CMemoryAllocator_InitIMemAllocator( pma ); pma->unk.pEntries = IFEntries; pma->unk.dwEntries = sizeof(IFEntries)/sizeof(IFEntries[0]); - *ppobj = (void*)pma; + *ppobj = (void*)(&pma->unk); return S_OK; } diff --git a/dlls/quartz/sysclock.c b/dlls/quartz/sysclock.c index ca35ac293c8..fd611b8b9df 100644 --- a/dlls/quartz/sysclock.c +++ b/dlls/quartz/sysclock.c @@ -39,13 +39,13 @@ HRESULT QUARTZ_CreateSystemClock(IUnknown* punkOuter,void** ppobj) if ( psc == NULL ) return E_OUTOFMEMORY; - QUARTZ_IUnkInit( &psc->unk ); + QUARTZ_IUnkInit( &psc->unk, punkOuter ); CSystemClock_InitIReferenceClock( psc ); psc->unk.pEntries = IFEntries; psc->unk.dwEntries = sizeof(IFEntries)/sizeof(IFEntries[0]); - *ppobj = (void*)psc; + *ppobj = (void*)(&psc->unk); return S_OK; }