[CONSRV]
[reactos.git] / include / dxsdk / amstream.idl
1 /*
2 * Copyright 2004 Christian Costa
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19 import "unknwn.idl";
20 import "mmstream.idl";
21 import "strmif.idl";
22
23 cpp_quote("#include <ddraw.h>")
24 cpp_quote("#include <mmsystem.h>")
25 cpp_quote("#include <mmstream.h>")
26 cpp_quote("#include <ddstream.h>")
27 cpp_quote("#include <austream.h>")
28
29 cpp_quote("#if 0")
30 interface IDirectDraw;
31 interface IDirectDrawSurface;
32 cpp_quote("#endif")
33
34 interface IAMMultiMediaStream;
35 interface IAMMediaStream;
36 interface IMediaStreamFilter;
37 interface IAMMediaTypeStream;
38 interface IAMMediaTypeSample;
39
40 enum {
41 AMMSF_NOGRAPHTHREAD = 0x00000001
42 };
43
44 enum {
45 AMMSF_ADDDEFAULTRENDERER = 0x00000001,
46 AMMSF_CREATEPEER = 0x00000002,
47 AMMSF_STOPIFNOSAMPLES = 0x00000004,
48 AMMSF_NOSTALL = 0x00000008
49 };
50
51 enum {
52 AMMSF_RENDERTYPEMASK = 0x00000003,
53 AMMSF_RENDERTOEXISTING = 0x00000000,
54 AMMSF_RENDERALLSTREAMS = 0x00000001,
55 AMMSF_NORENDER = 0x00000002,
56 AMMSF_NOCLOCK = 0x00000004,
57 AMMSF_RUN = 0x00000008
58 };
59
60
61 typedef [v1_enum] enum {
62 Disabled = 0,
63 ReadData = 1,
64 RenderData = 2
65 } OUTPUT_STATE;
66
67 [
68 object,
69 uuid(7DB01C96-C0C3-11d0-8FF1-00C04FD9189D),
70 dual,
71 helpstring("IDirectShowStream Interface"),
72 pointer_default(unique)
73 ]
74 interface IDirectShowStream : IDispatch
75 {
76 [propget, id(1), helpstring("property FileName")] HRESULT FileName([out, retval] BSTR *pVal);
77 [propput, id(1), helpstring("property FileName")] HRESULT FileName([in] BSTR newVal);
78 [propget, id(2), helpstring("property Video")] HRESULT Video([out, retval] OUTPUT_STATE *pVal);
79 [propput, id(2), helpstring("propetry Video")] HRESULT Video([in] OUTPUT_STATE newVal);
80 [propget, id(3), helpstring("property Audio")] HRESULT Audio([out, retval] OUTPUT_STATE *pVal);
81 [propput, id(3), helpstring("propetry Audio")] HRESULT Audio([in] OUTPUT_STATE newVal);
82 };
83
84 [
85 object,
86 uuid(BEBE595C-9A6F-11d0-8FDE-00C04FD9189D),
87 pointer_default(unique)
88 ]
89 interface IAMMultiMediaStream : IMultiMediaStream
90 {
91 HRESULT Initialize(
92 [in] STREAM_TYPE StreamType,
93 [in] DWORD dwFlags,
94 [in] IGraphBuilder *pFilterGraph);
95
96 HRESULT GetFilterGraph(
97 [out] IGraphBuilder **ppGraphBuilder);
98
99 HRESULT GetFilter(
100 [out] IMediaStreamFilter **ppFilter);
101
102 HRESULT AddMediaStream(
103 [in] IUnknown *pStreamObject,
104 [in] const MSPID *PurposeId,
105 [in] DWORD dwFlags,
106 [out] IMediaStream **ppNewStream);
107
108 HRESULT OpenFile(
109 [in] LPCWSTR pszFileName,
110 [in] DWORD dwFlags);
111
112 HRESULT OpenMoniker(
113 [in] IBindCtx *pCtx,
114 [in] IMoniker *pMoniker,
115 [in] DWORD dwFlags);
116
117 HRESULT Render(
118 [in] DWORD dwFlags);
119 }
120
121
122 [
123 object,
124 uuid(BEBE595D-9A6F-11d0-8FDE-00C04FD9189D),
125 pointer_default(unique)
126 ]
127 interface IAMMediaStream : IMediaStream
128 {
129 HRESULT Initialize(
130 [in] IUnknown *pSourceObject,
131 [in] DWORD dwFlags,
132 [in] REFMSPID PurposeId,
133 [in] const STREAM_TYPE StreamType);
134
135 HRESULT SetState(
136 [in] FILTER_STATE State);
137
138 HRESULT JoinAMMultiMediaStream(
139 [in] IAMMultiMediaStream *pAMMultiMediaStream);
140
141 HRESULT JoinFilter(
142 [in] IMediaStreamFilter *pMediaStreamFilter);
143
144 HRESULT JoinFilterGraph(
145 [in] IFilterGraph *pFilterGraph);
146 }
147
148
149 [
150 object,
151 local,
152 uuid(BEBE595E-9A6F-11d0-8FDE-00C04FD9189D),
153 pointer_default(unique)
154 ]
155 interface IMediaStreamFilter : IBaseFilter
156 {
157 HRESULT AddMediaStream(
158 [in] IAMMediaStream *pAMMediaStream);
159
160 HRESULT GetMediaStream(
161 [in] REFMSPID idPurpose,
162 [out] IMediaStream **ppMediaStream);
163
164 HRESULT EnumMediaStreams(
165 [in] long Index,
166 [out] IMediaStream **ppMediaStream);
167
168 HRESULT SupportSeeking(
169 [in] BOOL bRenderer);
170
171 HRESULT ReferenceTimeToStreamTime(
172 [in] [out] REFERENCE_TIME *pTime);
173
174 HRESULT GetCurrentStreamTime(
175 [out] REFERENCE_TIME *pCurrentStreamTime);
176
177 HRESULT WaitUntil(
178 [in] REFERENCE_TIME WaitStreamTime);
179
180 HRESULT Flush(
181 [in] BOOL bCancelEOS);
182
183 HRESULT EndOfStream();
184 }
185
186
187 [
188 object,
189 local,
190 uuid(AB6B4AFC-F6E4-11d0-900D-00C04FD9189D),
191 pointer_default(unique)
192 ]
193 interface IDirectDrawMediaSampleAllocator : IUnknown
194 {
195 HRESULT GetDirectDraw(IDirectDraw **ppDirectDraw);
196 }
197
198
199 [
200 object,
201 local,
202 uuid(AB6B4AFE-F6E4-11d0-900D-00C04FD9189D),
203 pointer_default(unique)
204 ]
205 interface IDirectDrawMediaSample : IUnknown
206 {
207 HRESULT GetSurfaceAndReleaseLock(
208 [out] IDirectDrawSurface **ppDirectDrawSurface,
209 [out] RECT * pRect);
210
211 HRESULT LockMediaSamplePointer(void);
212 }
213
214
215 [
216 object,
217 local,
218 uuid(AB6B4AFA-F6E4-11d0-900D-00C04FD9189D),
219 pointer_default(unique)
220 ]
221
222 interface IAMMediaTypeStream : IMediaStream
223 {
224 HRESULT GetFormat(
225 [out] AM_MEDIA_TYPE * pMediaType,
226 [in] DWORD dwFlags);
227
228 HRESULT SetFormat(
229 [in] AM_MEDIA_TYPE * pMediaType,
230 [in] DWORD dwFlags);
231
232 HRESULT CreateSample(
233 [in] long lSampleSize,
234 [in] BYTE * pbBuffer,
235 [in] DWORD dwFlags,
236 [in] IUnknown *pUnkOuter,
237 [out] IAMMediaTypeSample ** ppAMMediaTypeSample);
238
239 HRESULT GetStreamAllocatorRequirements(
240 [out] ALLOCATOR_PROPERTIES *pProps);
241
242 HRESULT SetStreamAllocatorRequirements(
243 [in] ALLOCATOR_PROPERTIES *pProps);
244 }
245
246
247 [
248 object,
249 local,
250 uuid(AB6B4AFB-F6E4-11d0-900D-00C04FD9189D),
251 pointer_default(unique)
252 ]
253 interface IAMMediaTypeSample : IStreamSample
254 {
255 HRESULT SetPointer(
256 [in] BYTE *pBuffer,
257 [in] long lSize);
258
259 HRESULT GetPointer(
260 [out] BYTE ** ppBuffer);
261
262 long GetSize(void);
263
264 HRESULT GetTime(
265 [out] REFERENCE_TIME * pTimeStart,
266 [out] REFERENCE_TIME * pTimeEnd);
267
268 HRESULT SetTime(
269 [in] REFERENCE_TIME * pTimeStart,
270 [in] REFERENCE_TIME * pTimeEnd);
271
272 HRESULT IsSyncPoint(void);
273
274 HRESULT SetSyncPoint(
275 BOOL bIsSyncPoint);
276
277 HRESULT IsPreroll(void);
278
279 HRESULT SetPreroll(
280 BOOL bIsPreroll);
281
282 long GetActualDataLength(void);
283
284 HRESULT SetActualDataLength(long Len);
285
286 HRESULT GetMediaType(
287 AM_MEDIA_TYPE **ppMediaType);
288
289 HRESULT SetMediaType(
290 AM_MEDIA_TYPE *pMediaType);
291
292 HRESULT IsDiscontinuity(void);
293
294 HRESULT SetDiscontinuity(
295 BOOL bDiscontinuity);
296
297 HRESULT GetMediaTime(
298 [out] LONGLONG * pTimeStart,
299 [out] LONGLONG * pTimeEnd);
300
301 HRESULT SetMediaTime(
302 [in] LONGLONG * pTimeStart,
303 [in] LONGLONG * pTimeEnd);
304 }
305
306 [
307 uuid(49C47CE5-9BA4-11d0-8212-00C04FC32C45)
308 ]
309 coclass AMMultiMediaStream
310 {
311 [default] dispinterface IDirectShowStream;
312 }
313
314 cpp_quote("DEFINE_GUID(CLSID_AMDirectDrawStream, 0x49c47ce4, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
315 cpp_quote("DEFINE_GUID(CLSID_AMAudioStream, 0x8496e040, 0xaf4c, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
316 cpp_quote("DEFINE_GUID(CLSID_AMAudioData, 0xf2468580, 0xaf8a, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
317 cpp_quote("DEFINE_GUID(CLSID_AMMediaTypeStream, 0xcf0f2f7c, 0xf7bf, 0x11d0, 0x90, 0x0d, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);")
318 cpp_quote("DEFINE_GUID(CLSID_MediaStreamFilter, 0x49c47ce0, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")