blob: d606c11ea0eca650cc30c43bded74ba1d29c9c18 [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
10 + IFilterGraph - IGraphBuilder - IFilterGraph2
11 + IDispatch - IMediaControl
12 + IDispatch - IMediaEvent - IMediaEventEx
Hidenori Takeshima615c0e02001-08-22 18:06:00 +000013 + IDispatch - IMediaPosition
Hidenori Takeshimafb964362001-08-15 19:26:52 +000014 + IMediaSeeking
15 + IDispatch - IBasicVideo (pass to a renderer)
16 + IDispatch - IBasicAudio (pass to a renderer)
17 + IDispatch - IVideoWindow (pass to a renderer)
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +000018 (following interfaces are not implemented)
19 + IDispatch
20 + IMediaEventSink
21 + IGraphVerson
Hidenori Takeshimafb964362001-08-15 19:26:52 +000022 */
23
24#include "iunk.h"
25
26typedef struct FG_IFilterGraph2Impl
27{
28 ICOM_VFIELD(IFilterGraph2);
29} FG_IFilterGraph2Impl;
30
Hidenori Takeshima615c0e02001-08-22 18:06:00 +000031typedef struct FG_IMediaControlImpl
32{
33 ICOM_VFIELD(IMediaControl);
34} FG_IMediaControlImpl;
35
36typedef struct FG_IMediaEventImpl
37{
38 ICOM_VFIELD(IMediaEventEx);
39} FG_IMediaEventImpl;
40
41typedef struct FG_IMediaPositionImpl
42{
43 ICOM_VFIELD(IMediaPosition);
44} FG_IMediaPositionImpl;
45
46typedef struct FG_IMediaSeekingImpl
47{
48 ICOM_VFIELD(IMediaSeeking);
49} FG_IMediaSeekingImpl;
50
51typedef struct FG_IBasicVideoImpl
52{
53 ICOM_VFIELD(IBasicVideo2);
54} FG_IBasicVideoImpl;
55
56typedef struct FG_IBasicAudioImpl
57{
58 ICOM_VFIELD(IBasicAudio);
59} FG_IBasicAudioImpl;
60
61typedef struct FG_IVideoWindowImpl
62{
63 ICOM_VFIELD(IVideoWindow);
64} FG_IVideoWindowImpl;
65
66
Hidenori Takeshimafb964362001-08-15 19:26:52 +000067typedef struct CFilterGraph
68{
69 QUARTZ_IUnkImpl unk;
70 FG_IFilterGraph2Impl fgraph;
Hidenori Takeshima615c0e02001-08-22 18:06:00 +000071 FG_IMediaControlImpl mediacontrol;
72 FG_IMediaEventImpl mediaevent;
73 FG_IMediaPositionImpl mediaposition;
74 FG_IMediaSeekingImpl mediaseeking;
75 FG_IBasicVideoImpl basvid;
76 FG_IBasicAudioImpl basaud;
77 FG_IVideoWindowImpl vidwin;
Hidenori Takeshimafb964362001-08-15 19:26:52 +000078
79 /* IFilterGraph2 fields. */
Hidenori Takeshima615c0e02001-08-22 18:06:00 +000080 /* IMediaControl fields. */
81 /* IMediaEvent fields. */
82 /* IMediaPosition fields. */
83 /* IMediaSeeking fields. */
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +000084 /* IBasicVideo2 fields. */
Hidenori Takeshima615c0e02001-08-22 18:06:00 +000085 /* IBasicAudio fields. */
86 /* IVideoWindow fields. */
Hidenori Takeshimafb964362001-08-15 19:26:52 +000087} CFilterGraph;
88
89#define CFilterGraph_THIS(iface,member) CFilterGraph* This = ((CFilterGraph*)(((char*)iface)-offsetof(CFilterGraph,member)))
90
91HRESULT QUARTZ_CreateFilterGraph(IUnknown* punkOuter,void** ppobj);
92
93void CFilterGraph_InitIFilterGraph2( CFilterGraph* pfg );
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +000094void CFilterGraph_UninitIFilterGraph2( CFilterGraph* pfg );
Hidenori Takeshima615c0e02001-08-22 18:06:00 +000095void CFilterGraph_InitIMediaControl( CFilterGraph* pfg );
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +000096void CFilterGraph_UninitIMediaControl( CFilterGraph* pfg );
Hidenori Takeshima615c0e02001-08-22 18:06:00 +000097void CFilterGraph_InitIMediaEventEx( CFilterGraph* pfg );
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +000098void CFilterGraph_UninitIMediaEventEx( CFilterGraph* pfg );
Hidenori Takeshima615c0e02001-08-22 18:06:00 +000099void CFilterGraph_InitIMediaPosition( CFilterGraph* pfg );
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +0000100void CFilterGraph_UninitIMediaPosition( CFilterGraph* pfg );
Hidenori Takeshima615c0e02001-08-22 18:06:00 +0000101void CFilterGraph_InitIMediaSeeking( CFilterGraph* pfg );
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +0000102void CFilterGraph_UninitIMediaSeeking( CFilterGraph* pfg );
Hidenori Takeshima615c0e02001-08-22 18:06:00 +0000103void CFilterGraph_InitIBasicVideo2( CFilterGraph* pfg );
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +0000104void CFilterGraph_UninitIBasicVideo2( CFilterGraph* pfg );
Hidenori Takeshima615c0e02001-08-22 18:06:00 +0000105void CFilterGraph_InitIBasicAudio( CFilterGraph* pfg );
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +0000106void CFilterGraph_UninitIBasicAudio( CFilterGraph* pfg );
Hidenori Takeshima615c0e02001-08-22 18:06:00 +0000107void CFilterGraph_InitIVideoWindow( CFilterGraph* pfg );
Hidenori Takeshima8eebd2c2001-08-28 17:25:39 +0000108void CFilterGraph_UninitIVideoWindow( CFilterGraph* pfg );
Hidenori Takeshimafb964362001-08-15 19:26:52 +0000109
110
111#endif /* WINE_DSHOW_FGRAPH_H */