| #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 |
| + 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_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 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. */ |
| /* IMediaFilter fields. */ |
| CRITICAL_SECTION m_csGraphState; |
| FILTER_STATE m_stateGraph; /* must NOT accessed directly! */ |
| /* IMediaEvent fields. */ |
| HANDLE m_hMediaEvent; |
| /* 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_IMediaFilter(th) ((IMediaFilter*)&((th)->mediafilter)) |
| #define CFilterGraph_IMediaControl(th) ((IMediaControl*)&((th)->mediacontrol)) |
| |
| 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_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 */ |