Added some stubs.
Started implementing some interfaces in FilterGraph.
diff --git a/dlls/quartz/fgraph.h b/dlls/quartz/fgraph.h
index d606c11..e06551c 100644
--- a/dlls/quartz/fgraph.h
+++ b/dlls/quartz/fgraph.h
@@ -7,37 +7,69 @@
- At least, the following interfaces should be implemented:
IUnknown
+ + IPersist
+ + IDispatch
+ IFilterGraph - IGraphBuilder - IFilterGraph2
+ + IGraphVersion
+ IDispatch - IMediaControl
+ + IPersist - IMediaFilter
+ IDispatch - IMediaEvent - IMediaEventEx
+ + IMediaEventSink
+ IDispatch - IMediaPosition
+ IMediaSeeking
- + IDispatch - IBasicVideo (pass to a renderer)
+ + IDispatch - IBasicVideo[2] (pass to a renderer)
+ IDispatch - IBasicAudio (pass to a renderer)
+ IDispatch - IVideoWindow (pass to a renderer)
(following interfaces are not implemented)
- + IDispatch
- + IMediaEventSink
- + IGraphVerson
+ + IMarshal
+ + IFilterMapper2 - IFilterMapper3
+ FIXME - Are there any missing interfaces???
*/
#include "iunk.h"
+#include "complist.h"
+
+
+typedef struct FG_IPersistImpl
+{
+ ICOM_VFIELD(IPersist);
+} FG_IPersistImpl;
+
+typedef struct FG_IDispatchImpl
+{
+ ICOM_VFIELD(IDispatch);
+} FG_IDispatchImpl;
typedef struct FG_IFilterGraph2Impl
{
ICOM_VFIELD(IFilterGraph2);
} FG_IFilterGraph2Impl;
+typedef struct FG_IGraphVersionImpl
+{
+ ICOM_VFIELD(IGraphVersion);
+} FG_IGraphVersionImpl;
+
typedef struct FG_IMediaControlImpl
{
ICOM_VFIELD(IMediaControl);
} FG_IMediaControlImpl;
+typedef struct FG_IMediaFilterImpl
+{
+ ICOM_VFIELD(IMediaFilter);
+} FG_IMediaFilterImpl;
+
typedef struct FG_IMediaEventImpl
{
ICOM_VFIELD(IMediaEventEx);
} FG_IMediaEventImpl;
+typedef struct FG_IMediaEventSinkImpl
+{
+ ICOM_VFIELD(IMediaEventSink);
+} FG_IMediaEventSinkImpl;
+
typedef struct FG_IMediaPositionImpl
{
ICOM_VFIELD(IMediaPosition);
@@ -67,18 +99,30 @@
typedef struct CFilterGraph
{
QUARTZ_IUnkImpl unk;
+ FG_IPersistImpl persist;
+ FG_IDispatchImpl disp;
FG_IFilterGraph2Impl fgraph;
+ FG_IGraphVersionImpl graphversion;
FG_IMediaControlImpl mediacontrol;
+ FG_IMediaFilterImpl mediafilter;
FG_IMediaEventImpl mediaevent;
+ FG_IMediaEventSinkImpl mediaeventsink;
FG_IMediaPositionImpl mediaposition;
FG_IMediaSeekingImpl mediaseeking;
FG_IBasicVideoImpl basvid;
FG_IBasicAudioImpl basaud;
FG_IVideoWindowImpl vidwin;
+ /* IDispatch fields. */
/* IFilterGraph2 fields. */
+ QUARTZ_CompList* m_pFilterList;
+ /* IGraphVersion fields. */
+ CRITICAL_SECTION m_csGraphVersion;
+ LONG m_lGraphVersion;
/* IMediaControl fields. */
/* IMediaEvent fields. */
+ HANDLE m_hMediaEvent;
+ /* IMediaEventSink fields. */
/* IMediaPosition fields. */
/* IMediaSeeking fields. */
/* IBasicVideo2 fields. */
@@ -87,24 +131,36 @@
} CFilterGraph;
#define CFilterGraph_THIS(iface,member) CFilterGraph* This = ((CFilterGraph*)(((char*)iface)-offsetof(CFilterGraph,member)))
+#define CFilterGraph_IPersist(th) ((IPersist*)&((th)->persist))
+#define CFilterGraph_IDispatch(th) ((IDispatch*)&((th)->disp))
HRESULT QUARTZ_CreateFilterGraph(IUnknown* punkOuter,void** ppobj);
-void CFilterGraph_InitIFilterGraph2( CFilterGraph* pfg );
+HRESULT CFilterGraph_InitIPersist( CFilterGraph* pfg );
+void CFilterGraph_UninitIPersist( CFilterGraph* pfg );
+HRESULT CFilterGraph_InitIDispatch( CFilterGraph* pfg );
+void CFilterGraph_UninitIDispatch( CFilterGraph* pfg );
+HRESULT CFilterGraph_InitIFilterGraph2( CFilterGraph* pfg );
void CFilterGraph_UninitIFilterGraph2( CFilterGraph* pfg );
-void CFilterGraph_InitIMediaControl( CFilterGraph* pfg );
+HRESULT CFilterGraph_InitIGraphVersion( CFilterGraph* pfg );
+void CFilterGraph_UninitIGraphVersion( CFilterGraph* pfg );
+HRESULT CFilterGraph_InitIMediaControl( CFilterGraph* pfg );
void CFilterGraph_UninitIMediaControl( CFilterGraph* pfg );
-void CFilterGraph_InitIMediaEventEx( CFilterGraph* pfg );
+HRESULT CFilterGraph_InitIMediaFilter( CFilterGraph* pfg );
+void CFilterGraph_UninitIMediaFilter( CFilterGraph* pfg );
+HRESULT CFilterGraph_InitIMediaEventEx( CFilterGraph* pfg );
void CFilterGraph_UninitIMediaEventEx( CFilterGraph* pfg );
-void CFilterGraph_InitIMediaPosition( CFilterGraph* pfg );
+HRESULT CFilterGraph_InitIMediaEventSink( CFilterGraph* pfg );
+void CFilterGraph_UninitIMediaEventSink( CFilterGraph* pfg );
+HRESULT CFilterGraph_InitIMediaPosition( CFilterGraph* pfg );
void CFilterGraph_UninitIMediaPosition( CFilterGraph* pfg );
-void CFilterGraph_InitIMediaSeeking( CFilterGraph* pfg );
+HRESULT CFilterGraph_InitIMediaSeeking( CFilterGraph* pfg );
void CFilterGraph_UninitIMediaSeeking( CFilterGraph* pfg );
-void CFilterGraph_InitIBasicVideo2( CFilterGraph* pfg );
+HRESULT CFilterGraph_InitIBasicVideo2( CFilterGraph* pfg );
void CFilterGraph_UninitIBasicVideo2( CFilterGraph* pfg );
-void CFilterGraph_InitIBasicAudio( CFilterGraph* pfg );
+HRESULT CFilterGraph_InitIBasicAudio( CFilterGraph* pfg );
void CFilterGraph_UninitIBasicAudio( CFilterGraph* pfg );
-void CFilterGraph_InitIVideoWindow( CFilterGraph* pfg );
+HRESULT CFilterGraph_InitIVideoWindow( CFilterGraph* pfg );
void CFilterGraph_UninitIVideoWindow( CFilterGraph* pfg );