source: trunk/src/quartz/basefilt.h@ 8266

Last change on this file since 8266 was 6952, checked in by sandervl, 24 years ago

Wine 20011004 resync

File size: 3.7 KB
Line 
1#ifndef WINE_DSHOW_BASEFILT_H
2#define WINE_DSHOW_BASEFILT_H
3
4/*
5 * The following interfaces must be used as a part of aggregation.
6 * The punkControl must not be NULL since all IUnknown methods are
7 * implemented only for aggregation.
8 */
9
10/*
11 * implements IBaseFilter (internal)
12 *
13 * a base class for implementing IBaseFilter.
14 */
15
16#include "complist.h"
17#include "mtype.h"
18
19typedef struct CBaseFilterHandlers CBaseFilterHandlers;
20typedef struct CBasePinHandlers CBasePinHandlers;
21
22typedef struct CBaseFilterImpl
23{
24 /* IPersist - IMediaFilter - IBaseFilter */
25 ICOM_VFIELD(IBaseFilter);
26
27 /* IUnknown fields */
28 IUnknown* punkControl;
29 /* IBaseFilter fields */
30 const CBaseFilterHandlers* pHandlers;
31 CRITICAL_SECTION csFilter;
32 const CLSID* pclsidFilter;
33 QUARTZ_CompList* pInPins; /* a list of IPin-s. */
34 QUARTZ_CompList* pOutPins; /* a list of IPin-s. */
35 IFilterGraph* pfg;
36 DWORD cbNameGraph;
37 WCHAR* pwszNameGraph;
38 IReferenceClock* pClock;
39 REFERENCE_TIME rtStart;
40 FILTER_STATE fstate;
41} CBaseFilterImpl;
42
43struct CBaseFilterHandlers
44{
45 HRESULT (*pOnActive)( CBaseFilterImpl* pImpl );
46 HRESULT (*pOnInactive)( CBaseFilterImpl* pImpl );
47};
48
49
50HRESULT CBaseFilterImpl_InitIBaseFilter(
51 CBaseFilterImpl* This, IUnknown* punkControl,
52 const CLSID* pclsidFilter, LPCWSTR lpwszNameGraph,
53 const CBaseFilterHandlers* pHandlers );
54void CBaseFilterImpl_UninitIBaseFilter( CBaseFilterImpl* This );
55
56
57/*
58 * Implements IPin, IMemInputPin, and IQualityControl. (internal)
59 *
60 * a base class for implementing IPin.
61 */
62
63typedef struct CPinBaseImpl
64{
65 /* IPin */
66 ICOM_VFIELD(IPin);
67
68 /* IUnknown fields */
69 IUnknown* punkControl;
70 /* IPin fields */
71 const CBasePinHandlers* pHandlers;
72 DWORD cbIdLen;
73 WCHAR* pwszId;
74 BOOL bOutput;
75
76 /* you can change AcceptTypes while pcsPin has been hold */
77 const AM_MEDIA_TYPE* pmtAcceptTypes;
78 ULONG cAcceptTypes;
79
80 CRITICAL_SECTION* pcsPin;
81 CBaseFilterImpl* pFilter;
82 IPin* pPinConnectedTo;
83 AM_MEDIA_TYPE* pmtConn;
84} CPinBaseImpl;
85
86typedef struct CMemInputPinBaseImpl
87{
88 /* IMemInputPin */
89 ICOM_VFIELD(IMemInputPin);
90
91 /* IUnknown fields */
92 IUnknown* punkControl;
93 /* IMemInputPin fields */
94 CPinBaseImpl* pPin;
95 IMemAllocator* pAllocator;
96 BOOL bReadonly;
97} CMemInputPinBaseImpl;
98
99typedef struct CQualityControlPassThruImpl
100{
101 /* IQualityControl */
102 ICOM_VFIELD(IQualityControl);
103
104 /* IUnknown fields */
105 IUnknown* punkControl;
106 /* IQualityControl fields */
107 CPinBaseImpl* pPin;
108 IQualityControl* pControl;
109} CQualityControlPassThruImpl;
110
111
112struct CBasePinHandlers
113{
114 HRESULT (*pCheckMediaType)( CPinBaseImpl* pImpl, const AM_MEDIA_TYPE* pmt );
115 HRESULT (*pQualityNotify)( CPinBaseImpl* pImpl, IBaseFilter* pFilter, Quality q );
116 HRESULT (*pReceive)( CPinBaseImpl* pImpl, IMediaSample* pSample );
117 HRESULT (*pReceiveCanBlock)( CPinBaseImpl* pImpl );
118 HRESULT (*pEndOfStream)( CPinBaseImpl* pImpl );
119 HRESULT (*pBeginFlush)( CPinBaseImpl* pImpl );
120 HRESULT (*pEndFlush)( CPinBaseImpl* pImpl );
121 HRESULT (*pNewSegment)( CPinBaseImpl* pImpl, REFERENCE_TIME rtStart, REFERENCE_TIME rtStop, double rate );
122};
123
124
125
126HRESULT CPinBaseImpl_InitIPin(
127 CPinBaseImpl* This, IUnknown* punkControl,
128 CRITICAL_SECTION* pcsPin,
129 CBaseFilterImpl* pFilter, LPCWSTR pwszId,
130 BOOL bOutput,
131 const CBasePinHandlers* pHandlers );
132void CPinBaseImpl_UninitIPin( CPinBaseImpl* This );
133
134
135HRESULT CMemInputPinBaseImpl_InitIMemInputPin(
136 CMemInputPinBaseImpl* This, IUnknown* punkControl,
137 CPinBaseImpl* pPin );
138void CMemInputPinBaseImpl_UninitIMemInputPin(
139 CMemInputPinBaseImpl* This );
140
141
142HRESULT CQualityControlPassThruImpl_InitIQualityControl(
143 CQualityControlPassThruImpl* This, IUnknown* punkControl,
144 CPinBaseImpl* pPin );
145void CQualityControlPassThruImpl_UninitIQualityControl(
146 CQualityControlPassThruImpl* This );
147
148
149
150#endif /* WINE_DSHOW_BASEFILT_H */
Note: See TracBrowser for help on using the repository browser.