#ifndef	WINE_DSHOW_FGRAPH_H
#define	WINE_DSHOW_FGRAPH_H

/*
		implements CLSID_FilterGraph.

	- At least, the following interfaces should be implemented:

	IUnknown
		+ IPersist
		+ IDispatch
		+ IFilterGraph - IGraphBuilder - IFilterGraph2
		+ IGraphVersion
		+ IGraphConfig
		+ IDispatch - IMediaControl
		+ IPersist - IMediaFilter
		+ IDispatch - IMediaEvent - IMediaEventEx
		+ IMediaEventSink
		+ IDispatch - IMediaPosition
		+ IMediaSeeking
		+ IDispatch - IBasicVideo[2] (pass to a renderer)
		+ IDispatch - IBasicAudio (pass to a renderer)
		+ IDispatch - IVideoWindow  (pass to a renderer)
	(following interfaces are not implemented)
		+ 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_IGraphConfigImpl
{
	ICOM_VFIELD(IGraphConfig);
} FG_IGraphConfigImpl;

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);
} 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 FilterGraph_MEDIAEVENT	FilterGraph_MEDIAEVENT;

typedef struct CFilterGraph
{
	QUARTZ_IUnkImpl	unk;
	FG_IPersistImpl	persist;
	FG_IDispatchImpl	disp;
	FG_IFilterGraph2Impl	fgraph;
	FG_IGraphVersionImpl	graphversion;
	FG_IGraphConfigImpl	grphconf;
	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. */
	LONG	m_lGraphVersion;
	/* IMediaControl fields. */
	/* IMediaFilter fields. */
	CRITICAL_SECTION	m_csGraphState;
	FILTER_STATE	m_stateGraph; /* must NOT accessed directly! */
	CRITICAL_SECTION	m_csClock;
	IReferenceClock*	m_pClock;
	/* IMediaEvent fields. */
	HANDLE	m_hMediaEvent;
	CRITICAL_SECTION	m_csMediaEvents;
	FilterGraph_MEDIAEVENT*	m_pMediaEvents;
	ULONG	m_cbMediaEventsPut;
	ULONG	m_cbMediaEventsGet;
	ULONG	m_cbMediaEventsMax;
	HWND	m_hwndEventNotify;
	long	m_lEventNotifyMsg;
	LONG_PTR	m_lEventNotifyParam;
	long	m_lEventNotifyFlags;
	/* IMediaEventSink fields. */
	/* IMediaPosition fields. */
	/* IMediaSeeking fields. */
	/* IBasicVideo2 fields. */
	/* IBasicAudio fields. */
	/* IVideoWindow fields. */
} 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))
#define	CFilterGraph_IFilterGraph2(th)		((IFilterGraph2*)&((th)->fgraph))
#define	CFilterGraph_IMediaControl(th)		((IMediaControl*)&((th)->mediacontrol))
#define	CFilterGraph_IMediaFilter(th)		((IMediaFilter*)&((th)->mediafilter))
#define	CFilterGraph_IMediaEventEx(th)		((IMediaEventEx*)&((th)->mediaevent))
#define	CFilterGraph_IMediaEventSink(th)		((IMediaEventSink*)&((th)->mediaeventsink))

HRESULT QUARTZ_CreateFilterGraph(IUnknown* punkOuter,void** ppobj);

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 );
HRESULT CFilterGraph_InitIGraphVersion( CFilterGraph* pfg );
void CFilterGraph_UninitIGraphVersion( CFilterGraph* pfg );
HRESULT CFilterGraph_InitIGraphConfig( CFilterGraph* pfg );
void CFilterGraph_UninitIGraphConfig( CFilterGraph* pfg );
HRESULT CFilterGraph_InitIMediaControl( CFilterGraph* pfg );
void CFilterGraph_UninitIMediaControl( CFilterGraph* pfg );
HRESULT CFilterGraph_InitIMediaFilter( CFilterGraph* pfg );
void CFilterGraph_UninitIMediaFilter( CFilterGraph* pfg );
HRESULT CFilterGraph_InitIMediaEventEx( CFilterGraph* pfg );
void CFilterGraph_UninitIMediaEventEx( CFilterGraph* pfg );
HRESULT CFilterGraph_InitIMediaEventSink( CFilterGraph* pfg );
void CFilterGraph_UninitIMediaEventSink( CFilterGraph* pfg );
HRESULT CFilterGraph_InitIMediaPosition( CFilterGraph* pfg );
void CFilterGraph_UninitIMediaPosition( CFilterGraph* pfg );
HRESULT CFilterGraph_InitIMediaSeeking( CFilterGraph* pfg );
void CFilterGraph_UninitIMediaSeeking( CFilterGraph* pfg );
HRESULT CFilterGraph_InitIBasicVideo2( CFilterGraph* pfg );
void CFilterGraph_UninitIBasicVideo2( CFilterGraph* pfg );
HRESULT CFilterGraph_InitIBasicAudio( CFilterGraph* pfg );
void CFilterGraph_UninitIBasicAudio( CFilterGraph* pfg );
HRESULT CFilterGraph_InitIVideoWindow( CFilterGraph* pfg );
void CFilterGraph_UninitIVideoWindow( CFilterGraph* pfg );


#endif	/* WINE_DSHOW_FGRAPH_H */
