2001-08-15 21:26:52 +02:00
|
|
|
#ifndef WINE_DSHOW_FGRAPH_H
|
|
|
|
#define WINE_DSHOW_FGRAPH_H
|
|
|
|
|
|
|
|
/*
|
|
|
|
implements CLSID_FilterGraph.
|
|
|
|
|
|
|
|
- At least, the following interfaces should be implemented:
|
|
|
|
|
|
|
|
IUnknown
|
2001-09-07 21:46:49 +02:00
|
|
|
+ IPersist
|
|
|
|
+ IDispatch
|
2001-08-15 21:26:52 +02:00
|
|
|
+ IFilterGraph - IGraphBuilder - IFilterGraph2
|
2001-09-07 21:46:49 +02:00
|
|
|
+ IGraphVersion
|
2001-09-26 00:37:04 +02:00
|
|
|
+ IGraphConfig
|
2001-08-15 21:26:52 +02:00
|
|
|
+ IDispatch - IMediaControl
|
2001-09-07 21:46:49 +02:00
|
|
|
+ IPersist - IMediaFilter
|
2001-08-15 21:26:52 +02:00
|
|
|
+ IDispatch - IMediaEvent - IMediaEventEx
|
2001-09-07 21:46:49 +02:00
|
|
|
+ IMediaEventSink
|
2001-08-22 20:06:00 +02:00
|
|
|
+ IDispatch - IMediaPosition
|
2001-08-15 21:26:52 +02:00
|
|
|
+ IMediaSeeking
|
2001-09-07 21:46:49 +02:00
|
|
|
+ IDispatch - IBasicVideo[2] (pass to a renderer)
|
2001-08-15 21:26:52 +02:00
|
|
|
+ IDispatch - IBasicAudio (pass to a renderer)
|
|
|
|
+ IDispatch - IVideoWindow (pass to a renderer)
|
2001-08-28 19:25:39 +02:00
|
|
|
(following interfaces are not implemented)
|
2001-09-07 21:46:49 +02:00
|
|
|
+ IMarshal
|
|
|
|
+ IFilterMapper2 - IFilterMapper3
|
|
|
|
FIXME - Are there any missing interfaces???
|
2001-08-15 21:26:52 +02:00
|
|
|
*/
|
|
|
|
|
|
|
|
#include "iunk.h"
|
2001-09-07 21:46:49 +02:00
|
|
|
#include "complist.h"
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct FG_IPersistImpl
|
|
|
|
{
|
|
|
|
ICOM_VFIELD(IPersist);
|
|
|
|
} FG_IPersistImpl;
|
|
|
|
|
|
|
|
typedef struct FG_IDispatchImpl
|
|
|
|
{
|
|
|
|
ICOM_VFIELD(IDispatch);
|
|
|
|
} FG_IDispatchImpl;
|
2001-08-15 21:26:52 +02:00
|
|
|
|
|
|
|
typedef struct FG_IFilterGraph2Impl
|
|
|
|
{
|
|
|
|
ICOM_VFIELD(IFilterGraph2);
|
|
|
|
} FG_IFilterGraph2Impl;
|
|
|
|
|
2001-09-07 21:46:49 +02:00
|
|
|
typedef struct FG_IGraphVersionImpl
|
|
|
|
{
|
|
|
|
ICOM_VFIELD(IGraphVersion);
|
|
|
|
} FG_IGraphVersionImpl;
|
|
|
|
|
2001-09-26 00:37:04 +02:00
|
|
|
typedef struct FG_IGraphConfigImpl
|
|
|
|
{
|
|
|
|
ICOM_VFIELD(IGraphConfig);
|
|
|
|
} FG_IGraphConfigImpl;
|
|
|
|
|
2001-08-22 20:06:00 +02:00
|
|
|
typedef struct FG_IMediaControlImpl
|
|
|
|
{
|
|
|
|
ICOM_VFIELD(IMediaControl);
|
|
|
|
} FG_IMediaControlImpl;
|
|
|
|
|
2001-09-07 21:46:49 +02:00
|
|
|
typedef struct FG_IMediaFilterImpl
|
|
|
|
{
|
|
|
|
ICOM_VFIELD(IMediaFilter);
|
|
|
|
} FG_IMediaFilterImpl;
|
|
|
|
|
2001-08-22 20:06:00 +02:00
|
|
|
typedef struct FG_IMediaEventImpl
|
|
|
|
{
|
|
|
|
ICOM_VFIELD(IMediaEventEx);
|
|
|
|
} FG_IMediaEventImpl;
|
|
|
|
|
2001-09-07 21:46:49 +02:00
|
|
|
typedef struct FG_IMediaEventSinkImpl
|
|
|
|
{
|
|
|
|
ICOM_VFIELD(IMediaEventSink);
|
|
|
|
} FG_IMediaEventSinkImpl;
|
|
|
|
|
2001-08-22 20:06:00 +02:00
|
|
|
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;
|
|
|
|
|
2001-09-26 00:37:04 +02:00
|
|
|
typedef struct FilterGraph_MEDIAEVENT FilterGraph_MEDIAEVENT;
|
2001-08-22 20:06:00 +02:00
|
|
|
|
2001-08-15 21:26:52 +02:00
|
|
|
typedef struct CFilterGraph
|
|
|
|
{
|
|
|
|
QUARTZ_IUnkImpl unk;
|
2001-09-07 21:46:49 +02:00
|
|
|
FG_IPersistImpl persist;
|
|
|
|
FG_IDispatchImpl disp;
|
2001-08-15 21:26:52 +02:00
|
|
|
FG_IFilterGraph2Impl fgraph;
|
2001-09-07 21:46:49 +02:00
|
|
|
FG_IGraphVersionImpl graphversion;
|
2001-09-26 00:37:04 +02:00
|
|
|
FG_IGraphConfigImpl grphconf;
|
2001-08-22 20:06:00 +02:00
|
|
|
FG_IMediaControlImpl mediacontrol;
|
2001-09-07 21:46:49 +02:00
|
|
|
FG_IMediaFilterImpl mediafilter;
|
2001-08-22 20:06:00 +02:00
|
|
|
FG_IMediaEventImpl mediaevent;
|
2001-09-07 21:46:49 +02:00
|
|
|
FG_IMediaEventSinkImpl mediaeventsink;
|
2001-08-22 20:06:00 +02:00
|
|
|
FG_IMediaPositionImpl mediaposition;
|
|
|
|
FG_IMediaSeekingImpl mediaseeking;
|
|
|
|
FG_IBasicVideoImpl basvid;
|
|
|
|
FG_IBasicAudioImpl basaud;
|
|
|
|
FG_IVideoWindowImpl vidwin;
|
2001-08-15 21:26:52 +02:00
|
|
|
|
2001-09-07 21:46:49 +02:00
|
|
|
/* IDispatch fields. */
|
2001-08-15 21:26:52 +02:00
|
|
|
/* IFilterGraph2 fields. */
|
2001-09-07 21:46:49 +02:00
|
|
|
QUARTZ_CompList* m_pFilterList;
|
|
|
|
/* IGraphVersion fields. */
|
|
|
|
LONG m_lGraphVersion;
|
2001-08-22 20:06:00 +02:00
|
|
|
/* IMediaControl fields. */
|
2001-09-11 02:29:03 +02:00
|
|
|
/* IMediaFilter fields. */
|
|
|
|
CRITICAL_SECTION m_csGraphState;
|
|
|
|
FILTER_STATE m_stateGraph; /* must NOT accessed directly! */
|
2001-09-26 00:37:04 +02:00
|
|
|
CRITICAL_SECTION m_csClock;
|
|
|
|
IReferenceClock* m_pClock;
|
2001-08-22 20:06:00 +02:00
|
|
|
/* IMediaEvent fields. */
|
2001-09-07 21:46:49 +02:00
|
|
|
HANDLE m_hMediaEvent;
|
2001-09-26 00:37:04 +02:00
|
|
|
CRITICAL_SECTION m_csMediaEvents;
|
|
|
|
FilterGraph_MEDIAEVENT* m_pMediaEvents;
|
|
|
|
ULONG m_cbMediaEventsPut;
|
|
|
|
ULONG m_cbMediaEventsGet;
|
|
|
|
ULONG m_cbMediaEventsMax;
|
2001-10-01 22:53:58 +02:00
|
|
|
HWND m_hwndEventNotify;
|
|
|
|
long m_lEventNotifyMsg;
|
|
|
|
LONG_PTR m_lEventNotifyParam;
|
|
|
|
long m_lEventNotifyFlags;
|
2001-09-07 21:46:49 +02:00
|
|
|
/* IMediaEventSink fields. */
|
2001-08-22 20:06:00 +02:00
|
|
|
/* IMediaPosition fields. */
|
|
|
|
/* IMediaSeeking fields. */
|
2001-08-28 19:25:39 +02:00
|
|
|
/* IBasicVideo2 fields. */
|
2001-08-22 20:06:00 +02:00
|
|
|
/* IBasicAudio fields. */
|
|
|
|
/* IVideoWindow fields. */
|
2001-08-15 21:26:52 +02:00
|
|
|
} CFilterGraph;
|
|
|
|
|
|
|
|
#define CFilterGraph_THIS(iface,member) CFilterGraph* This = ((CFilterGraph*)(((char*)iface)-offsetof(CFilterGraph,member)))
|
2001-09-07 21:46:49 +02:00
|
|
|
#define CFilterGraph_IPersist(th) ((IPersist*)&((th)->persist))
|
|
|
|
#define CFilterGraph_IDispatch(th) ((IDispatch*)&((th)->disp))
|
2001-09-11 02:29:03 +02:00
|
|
|
#define CFilterGraph_IFilterGraph2(th) ((IFilterGraph2*)&((th)->fgraph))
|
|
|
|
#define CFilterGraph_IMediaControl(th) ((IMediaControl*)&((th)->mediacontrol))
|
2001-09-26 00:37:04 +02:00
|
|
|
#define CFilterGraph_IMediaFilter(th) ((IMediaFilter*)&((th)->mediafilter))
|
|
|
|
#define CFilterGraph_IMediaEventEx(th) ((IMediaEventEx*)&((th)->mediaevent))
|
|
|
|
#define CFilterGraph_IMediaEventSink(th) ((IMediaEventSink*)&((th)->mediaeventsink))
|
2001-08-15 21:26:52 +02:00
|
|
|
|
|
|
|
HRESULT QUARTZ_CreateFilterGraph(IUnknown* punkOuter,void** ppobj);
|
|
|
|
|
2001-09-07 21:46:49 +02:00
|
|
|
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 );
|
2001-08-28 19:25:39 +02:00
|
|
|
void CFilterGraph_UninitIFilterGraph2( CFilterGraph* pfg );
|
2001-09-07 21:46:49 +02:00
|
|
|
HRESULT CFilterGraph_InitIGraphVersion( CFilterGraph* pfg );
|
|
|
|
void CFilterGraph_UninitIGraphVersion( CFilterGraph* pfg );
|
2001-09-26 00:37:04 +02:00
|
|
|
HRESULT CFilterGraph_InitIGraphConfig( CFilterGraph* pfg );
|
|
|
|
void CFilterGraph_UninitIGraphConfig( CFilterGraph* pfg );
|
2001-09-07 21:46:49 +02:00
|
|
|
HRESULT CFilterGraph_InitIMediaControl( CFilterGraph* pfg );
|
2001-08-28 19:25:39 +02:00
|
|
|
void CFilterGraph_UninitIMediaControl( CFilterGraph* pfg );
|
2001-09-07 21:46:49 +02:00
|
|
|
HRESULT CFilterGraph_InitIMediaFilter( CFilterGraph* pfg );
|
|
|
|
void CFilterGraph_UninitIMediaFilter( CFilterGraph* pfg );
|
|
|
|
HRESULT CFilterGraph_InitIMediaEventEx( CFilterGraph* pfg );
|
2001-08-28 19:25:39 +02:00
|
|
|
void CFilterGraph_UninitIMediaEventEx( CFilterGraph* pfg );
|
2001-09-07 21:46:49 +02:00
|
|
|
HRESULT CFilterGraph_InitIMediaEventSink( CFilterGraph* pfg );
|
|
|
|
void CFilterGraph_UninitIMediaEventSink( CFilterGraph* pfg );
|
|
|
|
HRESULT CFilterGraph_InitIMediaPosition( CFilterGraph* pfg );
|
2001-08-28 19:25:39 +02:00
|
|
|
void CFilterGraph_UninitIMediaPosition( CFilterGraph* pfg );
|
2001-09-07 21:46:49 +02:00
|
|
|
HRESULT CFilterGraph_InitIMediaSeeking( CFilterGraph* pfg );
|
2001-08-28 19:25:39 +02:00
|
|
|
void CFilterGraph_UninitIMediaSeeking( CFilterGraph* pfg );
|
2001-09-07 21:46:49 +02:00
|
|
|
HRESULT CFilterGraph_InitIBasicVideo2( CFilterGraph* pfg );
|
2001-08-28 19:25:39 +02:00
|
|
|
void CFilterGraph_UninitIBasicVideo2( CFilterGraph* pfg );
|
2001-09-07 21:46:49 +02:00
|
|
|
HRESULT CFilterGraph_InitIBasicAudio( CFilterGraph* pfg );
|
2001-08-28 19:25:39 +02:00
|
|
|
void CFilterGraph_UninitIBasicAudio( CFilterGraph* pfg );
|
2001-09-07 21:46:49 +02:00
|
|
|
HRESULT CFilterGraph_InitIVideoWindow( CFilterGraph* pfg );
|
2001-08-28 19:25:39 +02:00
|
|
|
void CFilterGraph_UninitIVideoWindow( CFilterGraph* pfg );
|
2001-08-15 21:26:52 +02:00
|
|
|
|
|
|
|
|
|
|
|
#endif /* WINE_DSHOW_FGRAPH_H */
|