blob: d038f6d8d7c75680148ae2b38e0368c4e34d01d0 [file] [log] [blame]
Hidenori Takeshimafb964362001-08-15 19:26:52 +00001#ifndef WINE_DSHOW_FGRAPH_H
2#define WINE_DSHOW_FGRAPH_H
3
4/*
5 implements CLSID_FilterGraph.
6
7 - At least, the following interfaces should be implemented:
8
9 IUnknown
Hidenori Takeshima96e96152001-09-07 19:46:49 +000010 + IPersist
11 + IDispatch
Hidenori Takeshimafb964362001-08-15 19:26:52 +000012 + IFilterGraph - IGraphBuilder - IFilterGraph2
Hidenori Takeshima96e96152001-09-07 19:46:49 +000013 + IGraphVersion
Hidenori Takeshimafb964362001-08-15 19:26:52 +000014 + IDispatch - IMediaControl
Hidenori Takeshima96e96152001-09-07 19:46:49 +000015 + IPersist - IMediaFilter
Hidenori Takeshimafb964362001-08-15 19:26:52 +000016 + IDispatch - IMediaEvent - IMediaEventEx
Hidenori Takeshima96e96152001-09-07 19:46:49 +000017 + IMediaEventSink
Hidenori Takeshima615c0e02001-08-22 18:06:00 +000018 + IDispatch - IMediaPosition
Hidenori Takeshimafb964362001-08-15 19:26:52 +000019 + IMediaSeeking
Hidenori Takeshima96e96152001-09-07 19:46:49 +000020 + IDispatch - IBasicVideo[2] (pass to a renderer)
Hidenori Takeshimafb964362001-08-15 19:26:52 +000021 + IDispatch - IBasicAudio (pass to a renderer)
22 + IDispatch - IVideoWindow (pass to a renderer)
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +000023 (following interfaces are not implemented)
Hidenori Takeshima96e96152001-09-07 19:46:49 +000024 + IMarshal
25 + IFilterMapper2 - IFilterMapper3
26 FIXME - Are there any missing interfaces???
Hidenori Takeshimafb964362001-08-15 19:26:52 +000027 */
28
29#include "iunk.h"
Hidenori Takeshima96e96152001-09-07 19:46:49 +000030#include "complist.h"
31
32
33typedef struct FG_IPersistImpl
34{
35 ICOM_VFIELD(IPersist);
36} FG_IPersistImpl;
37
38typedef struct FG_IDispatchImpl
39{
40 ICOM_VFIELD(IDispatch);
41} FG_IDispatchImpl;
Hidenori Takeshimafb964362001-08-15 19:26:52 +000042
43typedef struct FG_IFilterGraph2Impl
44{
45 ICOM_VFIELD(IFilterGraph2);
46} FG_IFilterGraph2Impl;
47
Hidenori Takeshima96e96152001-09-07 19:46:49 +000048typedef struct FG_IGraphVersionImpl
49{
50 ICOM_VFIELD(IGraphVersion);
51} FG_IGraphVersionImpl;
52
Hidenori Takeshima615c0e02001-08-22 18:06:00 +000053typedef struct FG_IMediaControlImpl
54{
55 ICOM_VFIELD(IMediaControl);
56} FG_IMediaControlImpl;
57
Hidenori Takeshima96e96152001-09-07 19:46:49 +000058typedef struct FG_IMediaFilterImpl
59{
60 ICOM_VFIELD(IMediaFilter);
61} FG_IMediaFilterImpl;
62
Hidenori Takeshima615c0e02001-08-22 18:06:00 +000063typedef struct FG_IMediaEventImpl
64{
65 ICOM_VFIELD(IMediaEventEx);
66} FG_IMediaEventImpl;
67
Hidenori Takeshima96e96152001-09-07 19:46:49 +000068typedef struct FG_IMediaEventSinkImpl
69{
70 ICOM_VFIELD(IMediaEventSink);
71} FG_IMediaEventSinkImpl;
72
Hidenori Takeshima615c0e02001-08-22 18:06:00 +000073typedef struct FG_IMediaPositionImpl
74{
75 ICOM_VFIELD(IMediaPosition);
76} FG_IMediaPositionImpl;
77
78typedef struct FG_IMediaSeekingImpl
79{
80 ICOM_VFIELD(IMediaSeeking);
81} FG_IMediaSeekingImpl;
82
83typedef struct FG_IBasicVideoImpl
84{
85 ICOM_VFIELD(IBasicVideo2);
86} FG_IBasicVideoImpl;
87
88typedef struct FG_IBasicAudioImpl
89{
90 ICOM_VFIELD(IBasicAudio);
91} FG_IBasicAudioImpl;
92
93typedef struct FG_IVideoWindowImpl
94{
95 ICOM_VFIELD(IVideoWindow);
96} FG_IVideoWindowImpl;
97
98
Hidenori Takeshimafb964362001-08-15 19:26:52 +000099typedef struct CFilterGraph
100{
101 QUARTZ_IUnkImpl unk;
Hidenori Takeshima96e96152001-09-07 19:46:49 +0000102 FG_IPersistImpl persist;
103 FG_IDispatchImpl disp;
Hidenori Takeshimafb964362001-08-15 19:26:52 +0000104 FG_IFilterGraph2Impl fgraph;
Hidenori Takeshima96e96152001-09-07 19:46:49 +0000105 FG_IGraphVersionImpl graphversion;
Hidenori Takeshima615c0e02001-08-22 18:06:00 +0000106 FG_IMediaControlImpl mediacontrol;
Hidenori Takeshima96e96152001-09-07 19:46:49 +0000107 FG_IMediaFilterImpl mediafilter;
Hidenori Takeshima615c0e02001-08-22 18:06:00 +0000108 FG_IMediaEventImpl mediaevent;
Hidenori Takeshima96e96152001-09-07 19:46:49 +0000109 FG_IMediaEventSinkImpl mediaeventsink;
Hidenori Takeshima615c0e02001-08-22 18:06:00 +0000110 FG_IMediaPositionImpl mediaposition;
111 FG_IMediaSeekingImpl mediaseeking;
112 FG_IBasicVideoImpl basvid;
113 FG_IBasicAudioImpl basaud;
114 FG_IVideoWindowImpl vidwin;
Hidenori Takeshimafb964362001-08-15 19:26:52 +0000115
Hidenori Takeshima96e96152001-09-07 19:46:49 +0000116 /* IDispatch fields. */
Hidenori Takeshimafb964362001-08-15 19:26:52 +0000117 /* IFilterGraph2 fields. */
Hidenori Takeshima96e96152001-09-07 19:46:49 +0000118 QUARTZ_CompList* m_pFilterList;
119 /* IGraphVersion fields. */
120 CRITICAL_SECTION m_csGraphVersion;
121 LONG m_lGraphVersion;
Hidenori Takeshima615c0e02001-08-22 18:06:00 +0000122 /* IMediaControl fields. */
Hidenori Takeshimaecbf6c12001-09-11 00:29:03 +0000123 /* IMediaFilter fields. */
124 CRITICAL_SECTION m_csGraphState;
125 FILTER_STATE m_stateGraph; /* must NOT accessed directly! */
Hidenori Takeshima615c0e02001-08-22 18:06:00 +0000126 /* IMediaEvent fields. */
Hidenori Takeshima96e96152001-09-07 19:46:49 +0000127 HANDLE m_hMediaEvent;
128 /* IMediaEventSink fields. */
Hidenori Takeshima615c0e02001-08-22 18:06:00 +0000129 /* IMediaPosition fields. */
130 /* IMediaSeeking fields. */
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +0000131 /* IBasicVideo2 fields. */
Hidenori Takeshima615c0e02001-08-22 18:06:00 +0000132 /* IBasicAudio fields. */
133 /* IVideoWindow fields. */
Hidenori Takeshimafb964362001-08-15 19:26:52 +0000134} CFilterGraph;
135
136#define CFilterGraph_THIS(iface,member) CFilterGraph* This = ((CFilterGraph*)(((char*)iface)-offsetof(CFilterGraph,member)))
Hidenori Takeshima96e96152001-09-07 19:46:49 +0000137#define CFilterGraph_IPersist(th) ((IPersist*)&((th)->persist))
138#define CFilterGraph_IDispatch(th) ((IDispatch*)&((th)->disp))
Hidenori Takeshimaecbf6c12001-09-11 00:29:03 +0000139#define CFilterGraph_IFilterGraph2(th) ((IFilterGraph2*)&((th)->fgraph))
140#define CFilterGraph_IMediaFilter(th) ((IMediaFilter*)&((th)->mediafilter))
141#define CFilterGraph_IMediaControl(th) ((IMediaControl*)&((th)->mediacontrol))
Hidenori Takeshimafb964362001-08-15 19:26:52 +0000142
143HRESULT QUARTZ_CreateFilterGraph(IUnknown* punkOuter,void** ppobj);
144
Hidenori Takeshima96e96152001-09-07 19:46:49 +0000145HRESULT CFilterGraph_InitIPersist( CFilterGraph* pfg );
146void CFilterGraph_UninitIPersist( CFilterGraph* pfg );
147HRESULT CFilterGraph_InitIDispatch( CFilterGraph* pfg );
148void CFilterGraph_UninitIDispatch( CFilterGraph* pfg );
149HRESULT CFilterGraph_InitIFilterGraph2( CFilterGraph* pfg );
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +0000150void CFilterGraph_UninitIFilterGraph2( CFilterGraph* pfg );
Hidenori Takeshima96e96152001-09-07 19:46:49 +0000151HRESULT CFilterGraph_InitIGraphVersion( CFilterGraph* pfg );
152void CFilterGraph_UninitIGraphVersion( CFilterGraph* pfg );
153HRESULT CFilterGraph_InitIMediaControl( CFilterGraph* pfg );
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +0000154void CFilterGraph_UninitIMediaControl( CFilterGraph* pfg );
Hidenori Takeshima96e96152001-09-07 19:46:49 +0000155HRESULT CFilterGraph_InitIMediaFilter( CFilterGraph* pfg );
156void CFilterGraph_UninitIMediaFilter( CFilterGraph* pfg );
157HRESULT CFilterGraph_InitIMediaEventEx( CFilterGraph* pfg );
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +0000158void CFilterGraph_UninitIMediaEventEx( CFilterGraph* pfg );
Hidenori Takeshima96e96152001-09-07 19:46:49 +0000159HRESULT CFilterGraph_InitIMediaEventSink( CFilterGraph* pfg );
160void CFilterGraph_UninitIMediaEventSink( CFilterGraph* pfg );
161HRESULT CFilterGraph_InitIMediaPosition( CFilterGraph* pfg );
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +0000162void CFilterGraph_UninitIMediaPosition( CFilterGraph* pfg );
Hidenori Takeshima96e96152001-09-07 19:46:49 +0000163HRESULT CFilterGraph_InitIMediaSeeking( CFilterGraph* pfg );
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +0000164void CFilterGraph_UninitIMediaSeeking( CFilterGraph* pfg );
Hidenori Takeshima96e96152001-09-07 19:46:49 +0000165HRESULT CFilterGraph_InitIBasicVideo2( CFilterGraph* pfg );
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +0000166void CFilterGraph_UninitIBasicVideo2( CFilterGraph* pfg );
Hidenori Takeshima96e96152001-09-07 19:46:49 +0000167HRESULT CFilterGraph_InitIBasicAudio( CFilterGraph* pfg );
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +0000168void CFilterGraph_UninitIBasicAudio( CFilterGraph* pfg );
Hidenori Takeshima96e96152001-09-07 19:46:49 +0000169HRESULT CFilterGraph_InitIVideoWindow( CFilterGraph* pfg );
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +0000170void CFilterGraph_UninitIVideoWindow( CFilterGraph* pfg );
Hidenori Takeshimafb964362001-08-15 19:26:52 +0000171
172
173#endif /* WINE_DSHOW_FGRAPH_H */