/[cvs]/api/include/DShowIDL/mediaobj.idl
ViewVC logotype

Contents of /api/include/DShowIDL/mediaobj.idl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations)
Sun Jul 1 20:47:59 2001 UTC (23 years, 5 months ago) by bearsoft
Branch point for: lazy, MAIN
Initial revision

1 //------------------------------------------------------------------------------
2 // File: MediaObj.idl
3 //
4 // Desc: Define the interfaces for DirectX Media Objects. This file will
5 // be processed by the MIDL tool to produce mediaobj.h and proxy-stub
6 // code.
7 //
8 // Copyright (c) 1999 - 2000, Microsoft Corporation. All rights reserved.
9 //------------------------------------------------------------------------------
10
11
12 import "unknwn.idl";
13 import "objidl.idl";
14
15 // DMO_MEDIA_TYPE structure
16
17 cpp_quote("#ifdef __strmif_h__")
18 cpp_quote("typedef AM_MEDIA_TYPE DMO_MEDIA_TYPE;")
19 cpp_quote("#else")
20 typedef struct _DMOMediaType {
21 GUID majortype;
22 GUID subtype;
23 BOOL bFixedSizeSamples;
24 BOOL bTemporalCompression;
25 ULONG lSampleSize;
26 GUID formattype;
27 IUnknown *pUnk;
28 ULONG cbFormat;
29 [size_is(cbFormat)] BYTE * pbFormat;
30 } DMO_MEDIA_TYPE;
31 typedef LONGLONG REFERENCE_TIME;
32 cpp_quote("#endif")
33
34
35 // Per-buffer flags that apply to input buffers
36 enum _DMO_INPUT_DATA_BUFFER_FLAGS {
37 DMO_INPUT_DATA_BUFFERF_SYNCPOINT = 0x00000001,
38 DMO_INPUT_DATA_BUFFERF_TIME = 0x00000002,
39 DMO_INPUT_DATA_BUFFERF_TIMELENGTH = 0x00000004
40 };
41
42 // Per-buffer flags that apply to output buffers.
43 enum _DMO_OUTPUT_DATA_BUFFER_FLAGS {
44 DMO_OUTPUT_DATA_BUFFERF_SYNCPOINT = 0x00000001,
45 DMO_OUTPUT_DATA_BUFFERF_TIME = 0x00000002,
46 DMO_OUTPUT_DATA_BUFFERF_TIMELENGTH = 0x00000004,
47
48 //
49 // This flag means the object could have generated more data for this
50 // output stream, even with no additional input from any input stream,
51 // but the output buffer did not have sufficient room.
52 //
53 DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE = 0x01000000
54 };
55
56 // Flags returned by GetInputStatus()
57 enum _DMO_INPUT_STATUS_FLAGS {
58 //
59 // ACCEPT_DATA indicates that the input stream is ready to accept
60 // new data via ProcessInput().
61 //
62 DMO_INPUT_STATUSF_ACCEPT_DATA = 0x00000001
63 };
64
65 // Flags returned by GetInputStreamInfo()
66 enum _DMO_INPUT_STREAM_INFO_FLAGS {
67 DMO_INPUT_STREAMF_WHOLE_SAMPLES = 0x00000001,
68 DMO_INPUT_STREAMF_SINGLE_SAMPLE_PER_BUFFER = 0x00000002,
69 DMO_INPUT_STREAMF_FIXED_SAMPLE_SIZE = 0x00000004,
70 DMO_INPUT_STREAMF_HOLDS_BUFFERS = 0x00000008
71 };
72
73 // Flags returned by GetOutputStreamInfo()
74 enum _DMO_OUTPUT_STREAM_INFO_FLAGS {
75 DMO_OUTPUT_STREAMF_WHOLE_SAMPLES = 0x00000001,
76 DMO_OUTPUT_STREAMF_SINGLE_SAMPLE_PER_BUFFER = 0x00000002,
77 DMO_OUTPUT_STREAMF_FIXED_SAMPLE_SIZE = 0x00000004,
78 DMO_OUTPUT_STREAMF_DISCARDABLE = 0x00000008,
79 DMO_OUTPUT_STREAMF_OPTIONAL = 0x00000010
80 };
81
82 // SetType flags
83 enum _DMO_SET_TYPE_FLAGS {
84 DMO_SET_TYPEF_TEST_ONLY = 0x00000001,// check but don't set
85 DMO_SET_TYPEF_CLEAR = 0x00000002 // unset
86 };
87
88 // Process Output Flags
89 enum _DMO_PROCESS_OUTPUT_FLAGS {
90 DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER = 0x00000001 // Discard
91 };
92
93 // Buffer wrapper interface
94 [
95 object,
96 uuid(59eff8b9-938c-4a26-82f2-95cb84cdc837)
97 ]
98 interface IMediaBuffer : IUnknown
99 {
100 HRESULT SetLength(
101 DWORD cbLength
102 );
103 HRESULT GetMaxLength(
104 [out] DWORD *pcbMaxLength
105 );
106 HRESULT GetBufferAndLength(
107 [out] BYTE **ppBuffer, // not filled if NULL
108 [out] DWORD *pcbLength // not filled if NULL
109 );
110 }
111
112 //
113 // Output buffer info structure: one of these must be passed in for each
114 // output stream with every ProcessOutput() call
115 // All [out] fields should be
116 // assumed undefined if ProcessOutput() failed
117 //
118 typedef struct _DMO_OUTPUT_DATA_BUFFER {
119
120 IMediaBuffer *pBuffer; // [in] can be NULL
121
122 // ProcessOutput() must set any appropriate flags and zero out the rest.
123 DWORD dwStatus; // [out] DMO_OUTPUT_DATA_BUFFERF_XXX (INCOMPLETE, etc.)
124
125 //
126 // Each of these is valid if the corresponding flag is set in dwStatus
127 //
128 REFERENCE_TIME rtTimestamp; // [out]
129 REFERENCE_TIME rtTimelength; // [out]
130 } DMO_OUTPUT_DATA_BUFFER, *PDMO_OUTPUT_DATA_BUFFER;
131
132
133 // Interface supported by media objects
134 [
135 object,
136 uuid(d8ad0f58-5494-4102-97c5-ec798e59bcf4)
137 ]
138 interface IMediaObject : IUnknown
139 {
140
141 //
142 // Stream enumeration
143 //
144 HRESULT GetStreamCount(
145 [out] DWORD *pcInputStreams,
146 [out] DWORD *pcOutputStreams
147 );
148 HRESULT GetInputStreamInfo(
149 DWORD dwInputStreamIndex, // 0-based
150 [out] DWORD *pdwFlags // HOLDS_BUFFERS
151 );
152 HRESULT GetOutputStreamInfo(
153 DWORD dwOutputStreamIndex, // 0-based
154 [out] DWORD *pdwFlags // Media object sets to 0
155 );
156
157 //
158 // Mediatypes
159 //
160 //
161 // GetType - iterate through media types supported by a stream.
162 // Returns S_FALSE if the type index is out of range ("no more types").
163 //
164 HRESULT GetInputType(
165 DWORD dwInputStreamIndex,
166 DWORD dwTypeIndex, // 0-based
167 [out] DMO_MEDIA_TYPE *pmt
168 );
169 HRESULT GetOutputType(
170 DWORD dwOutputStreamIndex,
171 DWORD dwTypeIndex, // 0-based
172 [out] DMO_MEDIA_TYPE *pmt
173 );
174
175 //
176 // SetType - tell the object the type of data it will work with.
177 //
178 HRESULT SetInputType(
179 DWORD dwInputStreamIndex,
180 [in] const DMO_MEDIA_TYPE *pmt,
181 DWORD dwFlags // test only
182 );
183 HRESULT SetOutputType(
184 DWORD dwOutputStreamIndex,
185 [in] const DMO_MEDIA_TYPE *pmt,
186 DWORD dwFlags // test only
187 );
188
189 //
190 // GetCurrentType - get the last mediatype supplied via SetType.
191 // Returns S_FALSE if SetType has not been called.
192 //
193 HRESULT GetInputCurrentType(
194 DWORD dwInputStreamIndex,
195 [out] DMO_MEDIA_TYPE *pmt
196 );
197 HRESULT GetOutputCurrentType(
198 DWORD dwOutputStreamIndex,
199 [out] DMO_MEDIA_TYPE *pmt
200 );
201
202 //
203 // SizeInfo
204 //
205 //
206 // GetSizeInfo - Get buffer size requirementes of a stream.
207 //
208 // If buffer size depends on the media type used, the object should
209 // base its response on the most recent media type set for this stream.
210 // If no mediatype has been set, the object may return an error.
211 //
212 HRESULT GetInputSizeInfo(
213 DWORD dwInputStreamIndex,
214 [out] DWORD *pcbSize, // size of input 'quantum'
215 [out] DWORD *pcbMaxLookahead, // max total bytes held
216 [out] DWORD *pcbAlignment // buffer alignment requirement
217 );
218 HRESULT GetOutputSizeInfo(
219 DWORD dwOutputStreamIndex,
220 [out] DWORD *pcbSize, // size of output 'quantum'
221 [out] DWORD *pcbAlignment // buffer alignment requirement
222 );
223
224 //
225 // Latency methods
226 //
227 HRESULT GetInputMaxLatency(
228 DWORD dwInputStreamIndex,
229 [out] REFERENCE_TIME *prtMaxLatency
230 );
231 HRESULT SetInputMaxLatency(
232 DWORD dwInputStreamIndex,
233 REFERENCE_TIME rtMaxLatency
234 );
235
236 //
237 // Streaming / state methods
238 //
239 //
240 // Flush() - discard any buffered data.
241 //
242 HRESULT Flush();
243
244 //
245 // Send a discontinuity to an input stream. The object will not
246 // accept any more data on this input stream until the discontinuity
247 // has been completely processed, which may involve multiple
248 // ProcessOutput() calls.
249 //
250 HRESULT Discontinuity(DWORD dwInputStreamIndex);
251
252 //
253 // If a streaming object needs to perform any time consuming
254 // initialization before it can stream data, it should do it inside
255 // AllocateStreamingResources() rather than during the first process
256 // call.
257 //
258 // This method is NOT guaranteed to be called before streaming
259 // starts. If it is not called, the object should perform any
260 // required initialization during a process call.
261 //
262 HRESULT AllocateStreamingResources();
263
264 // Free anything allocated in AllocateStreamingResources().
265 HRESULT FreeStreamingResources();
266
267 // GetInputStatus - the only flag defined right now is ACCEPT_DATA.
268 HRESULT GetInputStatus(
269 DWORD dwInputStreamIndex,
270 [out] DWORD *dwFlags // ACCEPT_DATA
271 );
272
273 //
274 // Pass one new buffer to an input stream
275 //
276 HRESULT ProcessInput(
277 DWORD dwInputStreamIndex,
278 IMediaBuffer *pBuffer, // must not be NULL
279 DWORD dwFlags, // DMO_INPUT_DATA_BUFFERF_XXX (syncpoint, etc.)
280 REFERENCE_TIME rtTimestamp, // valid if flag set
281 REFERENCE_TIME rtTimelength // valid if flag set
282 );
283
284 //
285 // ProcessOutput() - generate output for current input buffers
286 //
287 // Output stream specific status information is returned in the
288 // dwStatus member of each buffer wrapper structure.
289 //
290 HRESULT ProcessOutput(
291 DWORD dwFlags, // DMO_PROCESS_OUTPUT_FLAGS
292 DWORD cOutputBufferCount, // # returned by GetStreamCount()
293 [in,out,size_is(cOutputBufferCount)]
294 DMO_OUTPUT_DATA_BUFFER *pOutputBuffers, // one per stream
295 [out] DWORD *pdwStatus // TBD, must be set to 0
296 );
297
298 // Locking - lock if bLock is TRUE, otherwise unlock
299 HRESULT Lock(LONG bLock);
300 };
301
302
303 //
304 // Interface returned by the DMO enumeration API
305 //
306 [
307 object,
308 uuid(2c3cd98a-2bfa-4a53-9c27-5249ba64ba0f)
309 ]
310 interface IEnumDMO : IUnknown {
311 HRESULT Next(
312 DWORD cItemsToFetch,
313 [out, size_is(cItemsToFetch), length_is(*pcItemsFetched)] CLSID *pCLSID,
314 [out, size_is(cItemsToFetch), length_is(*pcItemsFetched), string] WCHAR **Names,
315 [out] DWORD *pcItemsFetched
316 );
317 HRESULT Skip(
318 DWORD cItemsToSkip
319 );
320 HRESULT Reset(void);
321 HRESULT Clone(
322 [out] IEnumDMO **ppEnum
323 );
324 }
325
326
327 // Flags for IMediaObjectInPlace::Process
328 enum _DMO_INPLACE_PROCESS_FLAGS {
329 DMO_INPLACE_NORMAL = 0x00000000,
330 DMO_INPLACE_ZERO = 0x00000001
331 };
332
333 [
334 object,
335 uuid(651b9ad0-0fc7-4aa9-9538-d89931010741)
336 ]
337 interface IMediaObjectInPlace : IUnknown {
338
339 // Proces - Given a buffer of size ulSize, put the output
340 // of the DMO into the same buffer.
341 HRESULT Process(
342 [in] ULONG ulSize,
343 [in,out,size_is(ulSize)] BYTE* pData,
344 [in] REFERENCE_TIME refTimeStart,
345 [in] DWORD dwFlags
346 );
347
348 // Create a copy of the In-Place Media Object. This allows
349 // for very fast initialization of a number of In-Place objects
350 // in a known state.
351 HRESULT Clone(
352 [out] IMediaObjectInPlace **ppMediaObject
353 );
354
355 // GetLatency - Returns a REFERENCE_TIME value
356 // (1 tick = 100ns) which corresponds to the latency time
357 // processing this effect will add to the graph. This assumes
358 // the effect cost per buffer is a constant.
359 HRESULT GetLatency(
360 [out] REFERENCE_TIME *pLatencyTime
361 );
362 }
363
364 // Quality control status flags
365 enum _DMO_QUALITY_STATUS_FLAGS {
366 DMO_QUALITY_STATUS_ENABLED = 0x00000001
367 };
368
369 [
370 object,
371 uuid(65abea96-cf36-453f-af8a-705e98f16260)
372 ]
373 interface IDMOQualityControl : IUnknown {
374 HRESULT SetNow(
375 [in] REFERENCE_TIME rtNow
376 );
377 HRESULT SetStatus(
378 [in] DWORD dwFlags
379 );
380 HRESULT GetStatus(
381 [out] DWORD *pdwFlags
382 );
383 }
384
385 // Flags for IVideoOutputOptimizations
386 enum _DMO_VIDEO_OUTPUT_STREAM_FLAGS {
387 DMO_VOSF_NEEDS_PREVIOUS_SAMPLE = 0x00000001
388 };
389
390 [
391 object,
392 uuid(be8f4f4e-5b16-4d29-b350-7f6b5d9298ac)
393 ]
394 interface IDMOVideoOutputOptimizations : IUnknown {
395 HRESULT QueryOperationModePreferences (
396 ULONG ulOutputStreamIndex,
397 DWORD *pdwRequestedCapabilities
398 );
399 HRESULT SetOperationMode (
400 ULONG ulOutputStreamIndex,
401 DWORD dwEnabledFeatures
402 );
403 HRESULT GetCurrentOperationMode (
404 ULONG ulOutputStreamIndex,
405 DWORD *pdwEnabledFeatures
406 );
407 HRESULT GetCurrentSampleRequirements (
408 ULONG ulOutputStreamIndex,
409 DWORD *pdwRequestedFeatures
410 );
411 }
412

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26