1 /*** Autogenerated by WIDL 3.1 from include/mfidl.idl - Do not edit ***/
2 
3 #ifndef __REQUIRED_RPCNDR_H_VERSION__
4 #define __REQUIRED_RPCNDR_H_VERSION__ 475
5 #endif
6 
7 #include <rpc.h>
8 #include <rpcndr.h>
9 
10 #ifndef COM_NO_WINDOWS_H
11 #include <windows.h>
12 #include <ole2.h>
13 #endif
14 
15 #ifndef __mfidl_h__
16 #define __mfidl_h__
17 
18 /* Forward declarations */
19 
20 #ifndef __IMFTopologyNode_FWD_DEFINED__
21 #define __IMFTopologyNode_FWD_DEFINED__
22 typedef interface IMFTopologyNode IMFTopologyNode;
23 #ifdef __cplusplus
24 interface IMFTopologyNode;
25 #endif /* __cplusplus */
26 #endif
27 
28 #ifndef __IMFTopology_FWD_DEFINED__
29 #define __IMFTopology_FWD_DEFINED__
30 typedef interface IMFTopology IMFTopology;
31 #ifdef __cplusplus
32 interface IMFTopology;
33 #endif /* __cplusplus */
34 #endif
35 
36 #ifndef __IMFClock_FWD_DEFINED__
37 #define __IMFClock_FWD_DEFINED__
38 typedef interface IMFClock IMFClock;
39 #ifdef __cplusplus
40 interface IMFClock;
41 #endif /* __cplusplus */
42 #endif
43 
44 #ifndef __IMFMediaSession_FWD_DEFINED__
45 #define __IMFMediaSession_FWD_DEFINED__
46 typedef interface IMFMediaSession IMFMediaSession;
47 #ifdef __cplusplus
48 interface IMFMediaSession;
49 #endif /* __cplusplus */
50 #endif
51 
52 #ifndef __IMFMediaTypeHandler_FWD_DEFINED__
53 #define __IMFMediaTypeHandler_FWD_DEFINED__
54 typedef interface IMFMediaTypeHandler IMFMediaTypeHandler;
55 #ifdef __cplusplus
56 interface IMFMediaTypeHandler;
57 #endif /* __cplusplus */
58 #endif
59 
60 #ifndef __IMFStreamDescriptor_FWD_DEFINED__
61 #define __IMFStreamDescriptor_FWD_DEFINED__
62 typedef interface IMFStreamDescriptor IMFStreamDescriptor;
63 #ifdef __cplusplus
64 interface IMFStreamDescriptor;
65 #endif /* __cplusplus */
66 #endif
67 
68 #ifndef __IMFPresentationDescriptor_FWD_DEFINED__
69 #define __IMFPresentationDescriptor_FWD_DEFINED__
70 typedef interface IMFPresentationDescriptor IMFPresentationDescriptor;
71 #ifdef __cplusplus
72 interface IMFPresentationDescriptor;
73 #endif /* __cplusplus */
74 #endif
75 
76 #ifndef __IMFMediaSource_FWD_DEFINED__
77 #define __IMFMediaSource_FWD_DEFINED__
78 typedef interface IMFMediaSource IMFMediaSource;
79 #ifdef __cplusplus
80 interface IMFMediaSource;
81 #endif /* __cplusplus */
82 #endif
83 
84 #ifndef __IMFByteStreamBuffering_FWD_DEFINED__
85 #define __IMFByteStreamBuffering_FWD_DEFINED__
86 typedef interface IMFByteStreamBuffering IMFByteStreamBuffering;
87 #ifdef __cplusplus
88 interface IMFByteStreamBuffering;
89 #endif /* __cplusplus */
90 #endif
91 
92 #ifndef __IMFClockStateSink_FWD_DEFINED__
93 #define __IMFClockStateSink_FWD_DEFINED__
94 typedef interface IMFClockStateSink IMFClockStateSink;
95 #ifdef __cplusplus
96 interface IMFClockStateSink;
97 #endif /* __cplusplus */
98 #endif
99 
100 /* Headers for imported files */
101 
102 #include <mfobjects.h>
103 
104 #ifdef __cplusplus
105 extern "C" {
106 #endif
107 
108 #include <mftransform.h>
109 #include <windef.h>
110 typedef enum MFSESSION_SETTOPOLOGY_FLAGS {
111     MFSESSION_SETTOPOLOGY_IMMEDIATE = 0x1,
112     MFSESSION_SETTOPOLOGY_NORESOLUTION = 0x2,
113     MFSESSION_SETTOPOLOGY_CLEAR_CURRENT = 0x4
114 } MFSESSION_SETTOPOLOGY_FLAGS;
115 typedef enum MFSESSION_GETFULLTOPOLOGY_FLAGS {
116     MFSESSION_GETFULLTOPOLOGY_CURRENT = 0
117 } MFSESSION_GETFULLTOPOLOGY_FLAGS;
118 typedef enum MFPMPSESSION_CREATION_FLAGS {
119     MFPMPSESSION_UNPROTECTED_PROCESS = 0x1
120 } MFPMPSESSION_CREATION_FLAGS;
121 typedef UINT64 TOPOID;
122 typedef enum MF_TOPOLOGY_TYPE {
123     MF_TOPOLOGY_OUTPUT_NODE = 0,
124     MF_TOPOLOGY_SOURCESTREAM_NODE = 1,
125     MF_TOPOLOGY_TRANSFORM_NODE = 2,
126     MF_TOPOLOGY_TEE_NODE = 3,
127     MF_TOPOLOGY_MAX = 0xffffffff
128 } MF_TOPOLOGY_TYPE;
129 /*****************************************************************************
130  * IMFTopologyNode interface
131  */
132 #ifndef __IMFTopologyNode_INTERFACE_DEFINED__
133 #define __IMFTopologyNode_INTERFACE_DEFINED__
134 
135 DEFINE_GUID(IID_IMFTopologyNode, 0x83cf873a, 0xf6da, 0x4bc8, 0x82,0x3f, 0xba,0xcf,0xd5,0x5d,0xc4,0x30);
136 #if defined(__cplusplus) && !defined(CINTERFACE)
137 MIDL_INTERFACE("83cf873a-f6da-4bc8-823f-bacfd55dc430")
138 IMFTopologyNode : public IMFAttributes
139 {
140     virtual HRESULT STDMETHODCALLTYPE SetObject(
141         IUnknown *pObject) = 0;
142 
143     virtual HRESULT STDMETHODCALLTYPE GetObject(
144         IUnknown **ppObject) = 0;
145 
146     virtual HRESULT STDMETHODCALLTYPE GetNodeType(
147         MF_TOPOLOGY_TYPE *pType) = 0;
148 
149     virtual HRESULT STDMETHODCALLTYPE GetTopoNodeID(
150         TOPOID *pID) = 0;
151 
152     virtual HRESULT STDMETHODCALLTYPE SetTopoNodeID(
153         TOPOID ullTopoID) = 0;
154 
155     virtual HRESULT STDMETHODCALLTYPE GetInputCount(
156         DWORD *pcInputs) = 0;
157 
158     virtual HRESULT STDMETHODCALLTYPE GetOutputCount(
159         DWORD *pcOutputs) = 0;
160 
161     virtual HRESULT STDMETHODCALLTYPE ConnectOutput(
162         DWORD dwOutputIndex,
163         IMFTopologyNode *pDownstreamNode,
164         DWORD dwInputIndexOnDownstreamNode) = 0;
165 
166     virtual HRESULT STDMETHODCALLTYPE DisconnectOutput(
167         DWORD dwOutputIndex) = 0;
168 
169     virtual HRESULT STDMETHODCALLTYPE GetInput(
170         DWORD dwInputIndex,
171         IMFTopologyNode **ppUpstreamNode,
172         DWORD *pdwOutputIndexOnUpstreamNode) = 0;
173 
174     virtual HRESULT STDMETHODCALLTYPE GetOutput(
175         DWORD dwOutputIndex,
176         IMFTopologyNode **ppDownstreamNode,
177         DWORD *pdwInputIndexOnDownstreamNode) = 0;
178 
179     virtual HRESULT STDMETHODCALLTYPE SetOutputPrefType(
180         DWORD dwOutputIndex,
181         IMFMediaType *pType) = 0;
182 
183     virtual HRESULT STDMETHODCALLTYPE GetOutputPrefType(
184         DWORD dwOutputIndex,
185         IMFMediaType **ppType) = 0;
186 
187     virtual HRESULT STDMETHODCALLTYPE SetInputPrefType(
188         DWORD dwInputIndex,
189         IMFMediaType *pType) = 0;
190 
191     virtual HRESULT STDMETHODCALLTYPE GetInputPrefType(
192         DWORD dwInputIndex,
193         IMFMediaType **ppType) = 0;
194 
195     virtual HRESULT STDMETHODCALLTYPE CloneFrom(
196         IMFTopologyNode *pNode) = 0;
197 
198 };
199 #ifdef __CRT_UUID_DECL
200 __CRT_UUID_DECL(IMFTopologyNode, 0x83cf873a, 0xf6da, 0x4bc8, 0x82,0x3f, 0xba,0xcf,0xd5,0x5d,0xc4,0x30)
201 #endif
202 #else
203 typedef struct IMFTopologyNodeVtbl {
204     BEGIN_INTERFACE
205 
206     /*** IUnknown methods ***/
207     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
208         IMFTopologyNode *This,
209         REFIID riid,
210         void **ppvObject);
211 
212     ULONG (STDMETHODCALLTYPE *AddRef)(
213         IMFTopologyNode *This);
214 
215     ULONG (STDMETHODCALLTYPE *Release)(
216         IMFTopologyNode *This);
217 
218     /*** IMFAttributes methods ***/
219     HRESULT (STDMETHODCALLTYPE *GetItem)(
220         IMFTopologyNode *This,
221         REFGUID guidKey,
222         PROPVARIANT *pValue);
223 
224     HRESULT (STDMETHODCALLTYPE *GetItemType)(
225         IMFTopologyNode *This,
226         REFGUID guidKey,
227         MF_ATTRIBUTE_TYPE *pType);
228 
229     HRESULT (STDMETHODCALLTYPE *CompareItem)(
230         IMFTopologyNode *This,
231         REFGUID guidKey,
232         REFPROPVARIANT Value,
233         WINBOOL *pbResult);
234 
235     HRESULT (STDMETHODCALLTYPE *Compare)(
236         IMFTopologyNode *This,
237         IMFAttributes *pTheirs,
238         MF_ATTRIBUTES_MATCH_TYPE MatchType,
239         WINBOOL *pbResult);
240 
241     HRESULT (STDMETHODCALLTYPE *GetUINT32)(
242         IMFTopologyNode *This,
243         REFGUID guidKey,
244         UINT32 *punValue);
245 
246     HRESULT (STDMETHODCALLTYPE *GetUINT64)(
247         IMFTopologyNode *This,
248         REFGUID guidKey,
249         UINT64 *punValue);
250 
251     HRESULT (STDMETHODCALLTYPE *GetDouble)(
252         IMFTopologyNode *This,
253         REFGUID guidKey,
254         double *pfValue);
255 
256     HRESULT (STDMETHODCALLTYPE *GetGUID)(
257         IMFTopologyNode *This,
258         REFGUID guidKey,
259         GUID *pguidValue);
260 
261     HRESULT (STDMETHODCALLTYPE *GetStringLength)(
262         IMFTopologyNode *This,
263         REFGUID guidKey,
264         UINT32 *pcchLength);
265 
266     HRESULT (STDMETHODCALLTYPE *GetString)(
267         IMFTopologyNode *This,
268         REFGUID guidKey,
269         LPWSTR pwszValue,
270         UINT32 cchBufSize,
271         UINT32 *pcchLength);
272 
273     HRESULT (STDMETHODCALLTYPE *GetAllocatedString)(
274         IMFTopologyNode *This,
275         REFGUID guidKey,
276         LPWSTR *ppwszValue,
277         UINT32 *pcchLength);
278 
279     HRESULT (STDMETHODCALLTYPE *GetBlobSize)(
280         IMFTopologyNode *This,
281         REFGUID guidKey,
282         UINT32 *pcbBlobSize);
283 
284     HRESULT (STDMETHODCALLTYPE *GetBlob)(
285         IMFTopologyNode *This,
286         REFGUID guidKey,
287         UINT8 *pBuf,
288         UINT32 cbBufSize,
289         UINT32 *pcbBlobSize);
290 
291     HRESULT (STDMETHODCALLTYPE *GetAllocatedBlob)(
292         IMFTopologyNode *This,
293         REFGUID guidKey,
294         UINT8 **ppBuf,
295         UINT32 *pcbSize);
296 
297     HRESULT (STDMETHODCALLTYPE *GetUnknown)(
298         IMFTopologyNode *This,
299         REFGUID guidKey,
300         REFIID riid,
301         LPVOID *ppv);
302 
303     HRESULT (STDMETHODCALLTYPE *SetItem)(
304         IMFTopologyNode *This,
305         REFGUID guidKey,
306         REFPROPVARIANT Value);
307 
308     HRESULT (STDMETHODCALLTYPE *DeleteItem)(
309         IMFTopologyNode *This,
310         REFGUID guidKey);
311 
312     HRESULT (STDMETHODCALLTYPE *DeleteAllItems)(
313         IMFTopologyNode *This);
314 
315     HRESULT (STDMETHODCALLTYPE *SetUINT32)(
316         IMFTopologyNode *This,
317         REFGUID guidKey,
318         UINT32 unValue);
319 
320     HRESULT (STDMETHODCALLTYPE *SetUINT64)(
321         IMFTopologyNode *This,
322         REFGUID guidKey,
323         UINT64 unValue);
324 
325     HRESULT (STDMETHODCALLTYPE *SetDouble)(
326         IMFTopologyNode *This,
327         REFGUID guidKey,
328         double fValue);
329 
330     HRESULT (STDMETHODCALLTYPE *SetGUID)(
331         IMFTopologyNode *This,
332         REFGUID guidKey,
333         REFGUID guidValue);
334 
335     HRESULT (STDMETHODCALLTYPE *SetString)(
336         IMFTopologyNode *This,
337         REFGUID guidKey,
338         LPCWSTR wszValue);
339 
340     HRESULT (STDMETHODCALLTYPE *SetBlob)(
341         IMFTopologyNode *This,
342         REFGUID guidKey,
343         const UINT8 *pBuf,
344         UINT32 cbBufSize);
345 
346     HRESULT (STDMETHODCALLTYPE *SetUnknown)(
347         IMFTopologyNode *This,
348         REFGUID guidKey,
349         IUnknown *pUnknown);
350 
351     HRESULT (STDMETHODCALLTYPE *LockStore)(
352         IMFTopologyNode *This);
353 
354     HRESULT (STDMETHODCALLTYPE *UnlockStore)(
355         IMFTopologyNode *This);
356 
357     HRESULT (STDMETHODCALLTYPE *GetCount)(
358         IMFTopologyNode *This,
359         UINT32 *pcItems);
360 
361     HRESULT (STDMETHODCALLTYPE *GetItemByIndex)(
362         IMFTopologyNode *This,
363         UINT32 unIndex,
364         GUID *pguidKey,
365         PROPVARIANT *pValue);
366 
367     HRESULT (STDMETHODCALLTYPE *CopyAllItems)(
368         IMFTopologyNode *This,
369         IMFAttributes *pDest);
370 
371     /*** IMFTopologyNode methods ***/
372     HRESULT (STDMETHODCALLTYPE *SetObject)(
373         IMFTopologyNode *This,
374         IUnknown *pObject);
375 
376     HRESULT (STDMETHODCALLTYPE *GetObject)(
377         IMFTopologyNode *This,
378         IUnknown **ppObject);
379 
380     HRESULT (STDMETHODCALLTYPE *GetNodeType)(
381         IMFTopologyNode *This,
382         MF_TOPOLOGY_TYPE *pType);
383 
384     HRESULT (STDMETHODCALLTYPE *GetTopoNodeID)(
385         IMFTopologyNode *This,
386         TOPOID *pID);
387 
388     HRESULT (STDMETHODCALLTYPE *SetTopoNodeID)(
389         IMFTopologyNode *This,
390         TOPOID ullTopoID);
391 
392     HRESULT (STDMETHODCALLTYPE *GetInputCount)(
393         IMFTopologyNode *This,
394         DWORD *pcInputs);
395 
396     HRESULT (STDMETHODCALLTYPE *GetOutputCount)(
397         IMFTopologyNode *This,
398         DWORD *pcOutputs);
399 
400     HRESULT (STDMETHODCALLTYPE *ConnectOutput)(
401         IMFTopologyNode *This,
402         DWORD dwOutputIndex,
403         IMFTopologyNode *pDownstreamNode,
404         DWORD dwInputIndexOnDownstreamNode);
405 
406     HRESULT (STDMETHODCALLTYPE *DisconnectOutput)(
407         IMFTopologyNode *This,
408         DWORD dwOutputIndex);
409 
410     HRESULT (STDMETHODCALLTYPE *GetInput)(
411         IMFTopologyNode *This,
412         DWORD dwInputIndex,
413         IMFTopologyNode **ppUpstreamNode,
414         DWORD *pdwOutputIndexOnUpstreamNode);
415 
416     HRESULT (STDMETHODCALLTYPE *GetOutput)(
417         IMFTopologyNode *This,
418         DWORD dwOutputIndex,
419         IMFTopologyNode **ppDownstreamNode,
420         DWORD *pdwInputIndexOnDownstreamNode);
421 
422     HRESULT (STDMETHODCALLTYPE *SetOutputPrefType)(
423         IMFTopologyNode *This,
424         DWORD dwOutputIndex,
425         IMFMediaType *pType);
426 
427     HRESULT (STDMETHODCALLTYPE *GetOutputPrefType)(
428         IMFTopologyNode *This,
429         DWORD dwOutputIndex,
430         IMFMediaType **ppType);
431 
432     HRESULT (STDMETHODCALLTYPE *SetInputPrefType)(
433         IMFTopologyNode *This,
434         DWORD dwInputIndex,
435         IMFMediaType *pType);
436 
437     HRESULT (STDMETHODCALLTYPE *GetInputPrefType)(
438         IMFTopologyNode *This,
439         DWORD dwInputIndex,
440         IMFMediaType **ppType);
441 
442     HRESULT (STDMETHODCALLTYPE *CloneFrom)(
443         IMFTopologyNode *This,
444         IMFTopologyNode *pNode);
445 
446     END_INTERFACE
447 } IMFTopologyNodeVtbl;
448 
449 interface IMFTopologyNode {
450     CONST_VTBL IMFTopologyNodeVtbl* lpVtbl;
451 };
452 
453 #ifdef COBJMACROS
454 #ifndef WIDL_C_INLINE_WRAPPERS
455 /*** IUnknown methods ***/
456 #define IMFTopologyNode_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
457 #define IMFTopologyNode_AddRef(This) (This)->lpVtbl->AddRef(This)
458 #define IMFTopologyNode_Release(This) (This)->lpVtbl->Release(This)
459 /*** IMFAttributes methods ***/
460 #define IMFTopologyNode_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
461 #define IMFTopologyNode_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
462 #define IMFTopologyNode_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
463 #define IMFTopologyNode_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
464 #define IMFTopologyNode_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
465 #define IMFTopologyNode_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
466 #define IMFTopologyNode_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
467 #define IMFTopologyNode_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
468 #define IMFTopologyNode_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
469 #define IMFTopologyNode_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
470 #define IMFTopologyNode_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
471 #define IMFTopologyNode_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
472 #define IMFTopologyNode_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
473 #define IMFTopologyNode_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
474 #define IMFTopologyNode_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
475 #define IMFTopologyNode_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
476 #define IMFTopologyNode_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
477 #define IMFTopologyNode_DeleteAllItems(This) (This)->lpVtbl->DeleteAllItems(This)
478 #define IMFTopologyNode_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
479 #define IMFTopologyNode_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
480 #define IMFTopologyNode_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
481 #define IMFTopologyNode_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
482 #define IMFTopologyNode_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
483 #define IMFTopologyNode_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
484 #define IMFTopologyNode_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
485 #define IMFTopologyNode_LockStore(This) (This)->lpVtbl->LockStore(This)
486 #define IMFTopologyNode_UnlockStore(This) (This)->lpVtbl->UnlockStore(This)
487 #define IMFTopologyNode_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
488 #define IMFTopologyNode_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
489 #define IMFTopologyNode_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
490 /*** IMFTopologyNode methods ***/
491 #define IMFTopologyNode_SetObject(This,pObject) (This)->lpVtbl->SetObject(This,pObject)
492 #define IMFTopologyNode_GetObject(This,ppObject) (This)->lpVtbl->GetObject(This,ppObject)
493 #define IMFTopologyNode_GetNodeType(This,pType) (This)->lpVtbl->GetNodeType(This,pType)
494 #define IMFTopologyNode_GetTopoNodeID(This,pID) (This)->lpVtbl->GetTopoNodeID(This,pID)
495 #define IMFTopologyNode_SetTopoNodeID(This,ullTopoID) (This)->lpVtbl->SetTopoNodeID(This,ullTopoID)
496 #define IMFTopologyNode_GetInputCount(This,pcInputs) (This)->lpVtbl->GetInputCount(This,pcInputs)
497 #define IMFTopologyNode_GetOutputCount(This,pcOutputs) (This)->lpVtbl->GetOutputCount(This,pcOutputs)
498 #define IMFTopologyNode_ConnectOutput(This,dwOutputIndex,pDownstreamNode,dwInputIndexOnDownstreamNode) (This)->lpVtbl->ConnectOutput(This,dwOutputIndex,pDownstreamNode,dwInputIndexOnDownstreamNode)
499 #define IMFTopologyNode_DisconnectOutput(This,dwOutputIndex) (This)->lpVtbl->DisconnectOutput(This,dwOutputIndex)
500 #define IMFTopologyNode_GetInput(This,dwInputIndex,ppUpstreamNode,pdwOutputIndexOnUpstreamNode) (This)->lpVtbl->GetInput(This,dwInputIndex,ppUpstreamNode,pdwOutputIndexOnUpstreamNode)
501 #define IMFTopologyNode_GetOutput(This,dwOutputIndex,ppDownstreamNode,pdwInputIndexOnDownstreamNode) (This)->lpVtbl->GetOutput(This,dwOutputIndex,ppDownstreamNode,pdwInputIndexOnDownstreamNode)
502 #define IMFTopologyNode_SetOutputPrefType(This,dwOutputIndex,pType) (This)->lpVtbl->SetOutputPrefType(This,dwOutputIndex,pType)
503 #define IMFTopologyNode_GetOutputPrefType(This,dwOutputIndex,ppType) (This)->lpVtbl->GetOutputPrefType(This,dwOutputIndex,ppType)
504 #define IMFTopologyNode_SetInputPrefType(This,dwInputIndex,pType) (This)->lpVtbl->SetInputPrefType(This,dwInputIndex,pType)
505 #define IMFTopologyNode_GetInputPrefType(This,dwInputIndex,ppType) (This)->lpVtbl->GetInputPrefType(This,dwInputIndex,ppType)
506 #define IMFTopologyNode_CloneFrom(This,pNode) (This)->lpVtbl->CloneFrom(This,pNode)
507 #else
508 /*** IUnknown methods ***/
509 static FORCEINLINE HRESULT IMFTopologyNode_QueryInterface(IMFTopologyNode* This,REFIID riid,void **ppvObject) {
510     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
511 }
512 static FORCEINLINE ULONG IMFTopologyNode_AddRef(IMFTopologyNode* This) {
513     return This->lpVtbl->AddRef(This);
514 }
515 static FORCEINLINE ULONG IMFTopologyNode_Release(IMFTopologyNode* This) {
516     return This->lpVtbl->Release(This);
517 }
518 /*** IMFAttributes methods ***/
519 static FORCEINLINE HRESULT IMFTopologyNode_GetItem(IMFTopologyNode* This,REFGUID guidKey,PROPVARIANT *pValue) {
520     return This->lpVtbl->GetItem(This,guidKey,pValue);
521 }
522 static FORCEINLINE HRESULT IMFTopologyNode_GetItemType(IMFTopologyNode* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
523     return This->lpVtbl->GetItemType(This,guidKey,pType);
524 }
525 static FORCEINLINE HRESULT IMFTopologyNode_CompareItem(IMFTopologyNode* This,REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) {
526     return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
527 }
528 static FORCEINLINE HRESULT IMFTopologyNode_Compare(IMFTopologyNode* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) {
529     return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
530 }
531 static FORCEINLINE HRESULT IMFTopologyNode_GetUINT32(IMFTopologyNode* This,REFGUID guidKey,UINT32 *punValue) {
532     return This->lpVtbl->GetUINT32(This,guidKey,punValue);
533 }
534 static FORCEINLINE HRESULT IMFTopologyNode_GetUINT64(IMFTopologyNode* This,REFGUID guidKey,UINT64 *punValue) {
535     return This->lpVtbl->GetUINT64(This,guidKey,punValue);
536 }
537 static FORCEINLINE HRESULT IMFTopologyNode_GetDouble(IMFTopologyNode* This,REFGUID guidKey,double *pfValue) {
538     return This->lpVtbl->GetDouble(This,guidKey,pfValue);
539 }
540 static FORCEINLINE HRESULT IMFTopologyNode_GetGUID(IMFTopologyNode* This,REFGUID guidKey,GUID *pguidValue) {
541     return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
542 }
543 static FORCEINLINE HRESULT IMFTopologyNode_GetStringLength(IMFTopologyNode* This,REFGUID guidKey,UINT32 *pcchLength) {
544     return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
545 }
546 static FORCEINLINE HRESULT IMFTopologyNode_GetString(IMFTopologyNode* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
547     return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
548 }
549 static FORCEINLINE HRESULT IMFTopologyNode_GetAllocatedString(IMFTopologyNode* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
550     return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
551 }
552 static FORCEINLINE HRESULT IMFTopologyNode_GetBlobSize(IMFTopologyNode* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
553     return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
554 }
555 static FORCEINLINE HRESULT IMFTopologyNode_GetBlob(IMFTopologyNode* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
556     return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
557 }
558 static FORCEINLINE HRESULT IMFTopologyNode_GetAllocatedBlob(IMFTopologyNode* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
559     return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
560 }
561 static FORCEINLINE HRESULT IMFTopologyNode_GetUnknown(IMFTopologyNode* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
562     return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
563 }
564 static FORCEINLINE HRESULT IMFTopologyNode_SetItem(IMFTopologyNode* This,REFGUID guidKey,REFPROPVARIANT Value) {
565     return This->lpVtbl->SetItem(This,guidKey,Value);
566 }
567 static FORCEINLINE HRESULT IMFTopologyNode_DeleteItem(IMFTopologyNode* This,REFGUID guidKey) {
568     return This->lpVtbl->DeleteItem(This,guidKey);
569 }
570 static FORCEINLINE HRESULT IMFTopologyNode_DeleteAllItems(IMFTopologyNode* This) {
571     return This->lpVtbl->DeleteAllItems(This);
572 }
573 static FORCEINLINE HRESULT IMFTopologyNode_SetUINT32(IMFTopologyNode* This,REFGUID guidKey,UINT32 unValue) {
574     return This->lpVtbl->SetUINT32(This,guidKey,unValue);
575 }
576 static FORCEINLINE HRESULT IMFTopologyNode_SetUINT64(IMFTopologyNode* This,REFGUID guidKey,UINT64 unValue) {
577     return This->lpVtbl->SetUINT64(This,guidKey,unValue);
578 }
579 static FORCEINLINE HRESULT IMFTopologyNode_SetDouble(IMFTopologyNode* This,REFGUID guidKey,double fValue) {
580     return This->lpVtbl->SetDouble(This,guidKey,fValue);
581 }
582 static FORCEINLINE HRESULT IMFTopologyNode_SetGUID(IMFTopologyNode* This,REFGUID guidKey,REFGUID guidValue) {
583     return This->lpVtbl->SetGUID(This,guidKey,guidValue);
584 }
585 static FORCEINLINE HRESULT IMFTopologyNode_SetString(IMFTopologyNode* This,REFGUID guidKey,LPCWSTR wszValue) {
586     return This->lpVtbl->SetString(This,guidKey,wszValue);
587 }
588 static FORCEINLINE HRESULT IMFTopologyNode_SetBlob(IMFTopologyNode* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
589     return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
590 }
591 static FORCEINLINE HRESULT IMFTopologyNode_SetUnknown(IMFTopologyNode* This,REFGUID guidKey,IUnknown *pUnknown) {
592     return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
593 }
594 static FORCEINLINE HRESULT IMFTopologyNode_LockStore(IMFTopologyNode* This) {
595     return This->lpVtbl->LockStore(This);
596 }
597 static FORCEINLINE HRESULT IMFTopologyNode_UnlockStore(IMFTopologyNode* This) {
598     return This->lpVtbl->UnlockStore(This);
599 }
600 static FORCEINLINE HRESULT IMFTopologyNode_GetCount(IMFTopologyNode* This,UINT32 *pcItems) {
601     return This->lpVtbl->GetCount(This,pcItems);
602 }
603 static FORCEINLINE HRESULT IMFTopologyNode_GetItemByIndex(IMFTopologyNode* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
604     return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
605 }
606 static FORCEINLINE HRESULT IMFTopologyNode_CopyAllItems(IMFTopologyNode* This,IMFAttributes *pDest) {
607     return This->lpVtbl->CopyAllItems(This,pDest);
608 }
609 /*** IMFTopologyNode methods ***/
610 static FORCEINLINE HRESULT IMFTopologyNode_SetObject(IMFTopologyNode* This,IUnknown *pObject) {
611     return This->lpVtbl->SetObject(This,pObject);
612 }
613 static FORCEINLINE HRESULT IMFTopologyNode_GetObject(IMFTopologyNode* This,IUnknown **ppObject) {
614     return This->lpVtbl->GetObject(This,ppObject);
615 }
616 static FORCEINLINE HRESULT IMFTopologyNode_GetNodeType(IMFTopologyNode* This,MF_TOPOLOGY_TYPE *pType) {
617     return This->lpVtbl->GetNodeType(This,pType);
618 }
619 static FORCEINLINE HRESULT IMFTopologyNode_GetTopoNodeID(IMFTopologyNode* This,TOPOID *pID) {
620     return This->lpVtbl->GetTopoNodeID(This,pID);
621 }
622 static FORCEINLINE HRESULT IMFTopologyNode_SetTopoNodeID(IMFTopologyNode* This,TOPOID ullTopoID) {
623     return This->lpVtbl->SetTopoNodeID(This,ullTopoID);
624 }
625 static FORCEINLINE HRESULT IMFTopologyNode_GetInputCount(IMFTopologyNode* This,DWORD *pcInputs) {
626     return This->lpVtbl->GetInputCount(This,pcInputs);
627 }
628 static FORCEINLINE HRESULT IMFTopologyNode_GetOutputCount(IMFTopologyNode* This,DWORD *pcOutputs) {
629     return This->lpVtbl->GetOutputCount(This,pcOutputs);
630 }
631 static FORCEINLINE HRESULT IMFTopologyNode_ConnectOutput(IMFTopologyNode* This,DWORD dwOutputIndex,IMFTopologyNode *pDownstreamNode,DWORD dwInputIndexOnDownstreamNode) {
632     return This->lpVtbl->ConnectOutput(This,dwOutputIndex,pDownstreamNode,dwInputIndexOnDownstreamNode);
633 }
634 static FORCEINLINE HRESULT IMFTopologyNode_DisconnectOutput(IMFTopologyNode* This,DWORD dwOutputIndex) {
635     return This->lpVtbl->DisconnectOutput(This,dwOutputIndex);
636 }
637 static FORCEINLINE HRESULT IMFTopologyNode_GetInput(IMFTopologyNode* This,DWORD dwInputIndex,IMFTopologyNode **ppUpstreamNode,DWORD *pdwOutputIndexOnUpstreamNode) {
638     return This->lpVtbl->GetInput(This,dwInputIndex,ppUpstreamNode,pdwOutputIndexOnUpstreamNode);
639 }
640 static FORCEINLINE HRESULT IMFTopologyNode_GetOutput(IMFTopologyNode* This,DWORD dwOutputIndex,IMFTopologyNode **ppDownstreamNode,DWORD *pdwInputIndexOnDownstreamNode) {
641     return This->lpVtbl->GetOutput(This,dwOutputIndex,ppDownstreamNode,pdwInputIndexOnDownstreamNode);
642 }
643 static FORCEINLINE HRESULT IMFTopologyNode_SetOutputPrefType(IMFTopologyNode* This,DWORD dwOutputIndex,IMFMediaType *pType) {
644     return This->lpVtbl->SetOutputPrefType(This,dwOutputIndex,pType);
645 }
646 static FORCEINLINE HRESULT IMFTopologyNode_GetOutputPrefType(IMFTopologyNode* This,DWORD dwOutputIndex,IMFMediaType **ppType) {
647     return This->lpVtbl->GetOutputPrefType(This,dwOutputIndex,ppType);
648 }
649 static FORCEINLINE HRESULT IMFTopologyNode_SetInputPrefType(IMFTopologyNode* This,DWORD dwInputIndex,IMFMediaType *pType) {
650     return This->lpVtbl->SetInputPrefType(This,dwInputIndex,pType);
651 }
652 static FORCEINLINE HRESULT IMFTopologyNode_GetInputPrefType(IMFTopologyNode* This,DWORD dwInputIndex,IMFMediaType **ppType) {
653     return This->lpVtbl->GetInputPrefType(This,dwInputIndex,ppType);
654 }
655 static FORCEINLINE HRESULT IMFTopologyNode_CloneFrom(IMFTopologyNode* This,IMFTopologyNode *pNode) {
656     return This->lpVtbl->CloneFrom(This,pNode);
657 }
658 #endif
659 #endif
660 
661 #endif
662 
663 HRESULT STDMETHODCALLTYPE IMFTopologyNode_RemoteGetOutputPrefType_Proxy(
664     IMFTopologyNode* This,
665     DWORD dwOutputIndex,
666     DWORD *pcbData,
667     BYTE **ppbData);
668 void __RPC_STUB IMFTopologyNode_RemoteGetOutputPrefType_Stub(
669     IRpcStubBuffer* This,
670     IRpcChannelBuffer* pRpcChannelBuffer,
671     PRPC_MESSAGE pRpcMessage,
672     DWORD* pdwStubPhase);
673 HRESULT STDMETHODCALLTYPE IMFTopologyNode_RemoteGetInputPrefType_Proxy(
674     IMFTopologyNode* This,
675     DWORD dwInputIndex,
676     DWORD *pcbData,
677     BYTE **ppbData);
678 void __RPC_STUB IMFTopologyNode_RemoteGetInputPrefType_Stub(
679     IRpcStubBuffer* This,
680     IRpcChannelBuffer* pRpcChannelBuffer,
681     PRPC_MESSAGE pRpcMessage,
682     DWORD* pdwStubPhase);
683 HRESULT CALLBACK IMFTopologyNode_GetOutputPrefType_Proxy(
684     IMFTopologyNode* This,
685     DWORD dwOutputIndex,
686     IMFMediaType **ppType);
687 HRESULT __RPC_STUB IMFTopologyNode_GetOutputPrefType_Stub(
688     IMFTopologyNode* This,
689     DWORD dwOutputIndex,
690     DWORD *pcbData,
691     BYTE **ppbData);
692 HRESULT CALLBACK IMFTopologyNode_GetInputPrefType_Proxy(
693     IMFTopologyNode* This,
694     DWORD dwInputIndex,
695     IMFMediaType **ppType);
696 HRESULT __RPC_STUB IMFTopologyNode_GetInputPrefType_Stub(
697     IMFTopologyNode* This,
698     DWORD dwInputIndex,
699     DWORD *pcbData,
700     BYTE **ppbData);
701 
702 #endif  /* __IMFTopologyNode_INTERFACE_DEFINED__ */
703 
704 /*****************************************************************************
705  * IMFTopology interface
706  */
707 #ifndef __IMFTopology_INTERFACE_DEFINED__
708 #define __IMFTopology_INTERFACE_DEFINED__
709 
710 DEFINE_GUID(IID_IMFTopology, 0x83cf873a, 0xf6da, 0x4bc8, 0x82,0x3f, 0xba,0xcf,0xd5,0x5d,0xc4,0x33);
711 #if defined(__cplusplus) && !defined(CINTERFACE)
712 MIDL_INTERFACE("83cf873a-f6da-4bc8-823f-bacfd55dc433")
713 IMFTopology : public IMFAttributes
714 {
715     virtual HRESULT STDMETHODCALLTYPE GetTopologyID(
716         TOPOID *pID) = 0;
717 
718     virtual HRESULT STDMETHODCALLTYPE AddNode(
719         IMFTopologyNode *pNode) = 0;
720 
721     virtual HRESULT STDMETHODCALLTYPE RemoveNode(
722         IMFTopologyNode *pNode) = 0;
723 
724     virtual HRESULT STDMETHODCALLTYPE GetNodeCount(
725         WORD *pwNodes) = 0;
726 
727     virtual HRESULT STDMETHODCALLTYPE GetNode(
728         WORD wIndex,
729         IMFTopologyNode **ppNode) = 0;
730 
731     virtual HRESULT STDMETHODCALLTYPE Clear(
732         ) = 0;
733 
734     virtual HRESULT STDMETHODCALLTYPE CloneFrom(
735         IMFTopology *pTopology) = 0;
736 
737     virtual HRESULT STDMETHODCALLTYPE GetNodeByID(
738         TOPOID qwTopoNodeID,
739         IMFTopologyNode **ppNode) = 0;
740 
741     virtual HRESULT STDMETHODCALLTYPE GetSourceNodeCollection(
742         IMFCollection **ppCollection) = 0;
743 
744     virtual HRESULT STDMETHODCALLTYPE GetOutputNodeCollection(
745         IMFCollection **ppCollection) = 0;
746 
747 };
748 #ifdef __CRT_UUID_DECL
749 __CRT_UUID_DECL(IMFTopology, 0x83cf873a, 0xf6da, 0x4bc8, 0x82,0x3f, 0xba,0xcf,0xd5,0x5d,0xc4,0x33)
750 #endif
751 #else
752 typedef struct IMFTopologyVtbl {
753     BEGIN_INTERFACE
754 
755     /*** IUnknown methods ***/
756     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
757         IMFTopology *This,
758         REFIID riid,
759         void **ppvObject);
760 
761     ULONG (STDMETHODCALLTYPE *AddRef)(
762         IMFTopology *This);
763 
764     ULONG (STDMETHODCALLTYPE *Release)(
765         IMFTopology *This);
766 
767     /*** IMFAttributes methods ***/
768     HRESULT (STDMETHODCALLTYPE *GetItem)(
769         IMFTopology *This,
770         REFGUID guidKey,
771         PROPVARIANT *pValue);
772 
773     HRESULT (STDMETHODCALLTYPE *GetItemType)(
774         IMFTopology *This,
775         REFGUID guidKey,
776         MF_ATTRIBUTE_TYPE *pType);
777 
778     HRESULT (STDMETHODCALLTYPE *CompareItem)(
779         IMFTopology *This,
780         REFGUID guidKey,
781         REFPROPVARIANT Value,
782         WINBOOL *pbResult);
783 
784     HRESULT (STDMETHODCALLTYPE *Compare)(
785         IMFTopology *This,
786         IMFAttributes *pTheirs,
787         MF_ATTRIBUTES_MATCH_TYPE MatchType,
788         WINBOOL *pbResult);
789 
790     HRESULT (STDMETHODCALLTYPE *GetUINT32)(
791         IMFTopology *This,
792         REFGUID guidKey,
793         UINT32 *punValue);
794 
795     HRESULT (STDMETHODCALLTYPE *GetUINT64)(
796         IMFTopology *This,
797         REFGUID guidKey,
798         UINT64 *punValue);
799 
800     HRESULT (STDMETHODCALLTYPE *GetDouble)(
801         IMFTopology *This,
802         REFGUID guidKey,
803         double *pfValue);
804 
805     HRESULT (STDMETHODCALLTYPE *GetGUID)(
806         IMFTopology *This,
807         REFGUID guidKey,
808         GUID *pguidValue);
809 
810     HRESULT (STDMETHODCALLTYPE *GetStringLength)(
811         IMFTopology *This,
812         REFGUID guidKey,
813         UINT32 *pcchLength);
814 
815     HRESULT (STDMETHODCALLTYPE *GetString)(
816         IMFTopology *This,
817         REFGUID guidKey,
818         LPWSTR pwszValue,
819         UINT32 cchBufSize,
820         UINT32 *pcchLength);
821 
822     HRESULT (STDMETHODCALLTYPE *GetAllocatedString)(
823         IMFTopology *This,
824         REFGUID guidKey,
825         LPWSTR *ppwszValue,
826         UINT32 *pcchLength);
827 
828     HRESULT (STDMETHODCALLTYPE *GetBlobSize)(
829         IMFTopology *This,
830         REFGUID guidKey,
831         UINT32 *pcbBlobSize);
832 
833     HRESULT (STDMETHODCALLTYPE *GetBlob)(
834         IMFTopology *This,
835         REFGUID guidKey,
836         UINT8 *pBuf,
837         UINT32 cbBufSize,
838         UINT32 *pcbBlobSize);
839 
840     HRESULT (STDMETHODCALLTYPE *GetAllocatedBlob)(
841         IMFTopology *This,
842         REFGUID guidKey,
843         UINT8 **ppBuf,
844         UINT32 *pcbSize);
845 
846     HRESULT (STDMETHODCALLTYPE *GetUnknown)(
847         IMFTopology *This,
848         REFGUID guidKey,
849         REFIID riid,
850         LPVOID *ppv);
851 
852     HRESULT (STDMETHODCALLTYPE *SetItem)(
853         IMFTopology *This,
854         REFGUID guidKey,
855         REFPROPVARIANT Value);
856 
857     HRESULT (STDMETHODCALLTYPE *DeleteItem)(
858         IMFTopology *This,
859         REFGUID guidKey);
860 
861     HRESULT (STDMETHODCALLTYPE *DeleteAllItems)(
862         IMFTopology *This);
863 
864     HRESULT (STDMETHODCALLTYPE *SetUINT32)(
865         IMFTopology *This,
866         REFGUID guidKey,
867         UINT32 unValue);
868 
869     HRESULT (STDMETHODCALLTYPE *SetUINT64)(
870         IMFTopology *This,
871         REFGUID guidKey,
872         UINT64 unValue);
873 
874     HRESULT (STDMETHODCALLTYPE *SetDouble)(
875         IMFTopology *This,
876         REFGUID guidKey,
877         double fValue);
878 
879     HRESULT (STDMETHODCALLTYPE *SetGUID)(
880         IMFTopology *This,
881         REFGUID guidKey,
882         REFGUID guidValue);
883 
884     HRESULT (STDMETHODCALLTYPE *SetString)(
885         IMFTopology *This,
886         REFGUID guidKey,
887         LPCWSTR wszValue);
888 
889     HRESULT (STDMETHODCALLTYPE *SetBlob)(
890         IMFTopology *This,
891         REFGUID guidKey,
892         const UINT8 *pBuf,
893         UINT32 cbBufSize);
894 
895     HRESULT (STDMETHODCALLTYPE *SetUnknown)(
896         IMFTopology *This,
897         REFGUID guidKey,
898         IUnknown *pUnknown);
899 
900     HRESULT (STDMETHODCALLTYPE *LockStore)(
901         IMFTopology *This);
902 
903     HRESULT (STDMETHODCALLTYPE *UnlockStore)(
904         IMFTopology *This);
905 
906     HRESULT (STDMETHODCALLTYPE *GetCount)(
907         IMFTopology *This,
908         UINT32 *pcItems);
909 
910     HRESULT (STDMETHODCALLTYPE *GetItemByIndex)(
911         IMFTopology *This,
912         UINT32 unIndex,
913         GUID *pguidKey,
914         PROPVARIANT *pValue);
915 
916     HRESULT (STDMETHODCALLTYPE *CopyAllItems)(
917         IMFTopology *This,
918         IMFAttributes *pDest);
919 
920     /*** IMFTopology methods ***/
921     HRESULT (STDMETHODCALLTYPE *GetTopologyID)(
922         IMFTopology *This,
923         TOPOID *pID);
924 
925     HRESULT (STDMETHODCALLTYPE *AddNode)(
926         IMFTopology *This,
927         IMFTopologyNode *pNode);
928 
929     HRESULT (STDMETHODCALLTYPE *RemoveNode)(
930         IMFTopology *This,
931         IMFTopologyNode *pNode);
932 
933     HRESULT (STDMETHODCALLTYPE *GetNodeCount)(
934         IMFTopology *This,
935         WORD *pwNodes);
936 
937     HRESULT (STDMETHODCALLTYPE *GetNode)(
938         IMFTopology *This,
939         WORD wIndex,
940         IMFTopologyNode **ppNode);
941 
942     HRESULT (STDMETHODCALLTYPE *Clear)(
943         IMFTopology *This);
944 
945     HRESULT (STDMETHODCALLTYPE *CloneFrom)(
946         IMFTopology *This,
947         IMFTopology *pTopology);
948 
949     HRESULT (STDMETHODCALLTYPE *GetNodeByID)(
950         IMFTopology *This,
951         TOPOID qwTopoNodeID,
952         IMFTopologyNode **ppNode);
953 
954     HRESULT (STDMETHODCALLTYPE *GetSourceNodeCollection)(
955         IMFTopology *This,
956         IMFCollection **ppCollection);
957 
958     HRESULT (STDMETHODCALLTYPE *GetOutputNodeCollection)(
959         IMFTopology *This,
960         IMFCollection **ppCollection);
961 
962     END_INTERFACE
963 } IMFTopologyVtbl;
964 
965 interface IMFTopology {
966     CONST_VTBL IMFTopologyVtbl* lpVtbl;
967 };
968 
969 #ifdef COBJMACROS
970 #ifndef WIDL_C_INLINE_WRAPPERS
971 /*** IUnknown methods ***/
972 #define IMFTopology_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
973 #define IMFTopology_AddRef(This) (This)->lpVtbl->AddRef(This)
974 #define IMFTopology_Release(This) (This)->lpVtbl->Release(This)
975 /*** IMFAttributes methods ***/
976 #define IMFTopology_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
977 #define IMFTopology_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
978 #define IMFTopology_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
979 #define IMFTopology_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
980 #define IMFTopology_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
981 #define IMFTopology_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
982 #define IMFTopology_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
983 #define IMFTopology_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
984 #define IMFTopology_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
985 #define IMFTopology_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
986 #define IMFTopology_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
987 #define IMFTopology_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
988 #define IMFTopology_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
989 #define IMFTopology_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
990 #define IMFTopology_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
991 #define IMFTopology_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
992 #define IMFTopology_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
993 #define IMFTopology_DeleteAllItems(This) (This)->lpVtbl->DeleteAllItems(This)
994 #define IMFTopology_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
995 #define IMFTopology_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
996 #define IMFTopology_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
997 #define IMFTopology_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
998 #define IMFTopology_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
999 #define IMFTopology_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
1000 #define IMFTopology_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
1001 #define IMFTopology_LockStore(This) (This)->lpVtbl->LockStore(This)
1002 #define IMFTopology_UnlockStore(This) (This)->lpVtbl->UnlockStore(This)
1003 #define IMFTopology_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
1004 #define IMFTopology_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
1005 #define IMFTopology_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
1006 /*** IMFTopology methods ***/
1007 #define IMFTopology_GetTopologyID(This,pID) (This)->lpVtbl->GetTopologyID(This,pID)
1008 #define IMFTopology_AddNode(This,pNode) (This)->lpVtbl->AddNode(This,pNode)
1009 #define IMFTopology_RemoveNode(This,pNode) (This)->lpVtbl->RemoveNode(This,pNode)
1010 #define IMFTopology_GetNodeCount(This,pwNodes) (This)->lpVtbl->GetNodeCount(This,pwNodes)
1011 #define IMFTopology_GetNode(This,wIndex,ppNode) (This)->lpVtbl->GetNode(This,wIndex,ppNode)
1012 #define IMFTopology_Clear(This) (This)->lpVtbl->Clear(This)
1013 #define IMFTopology_CloneFrom(This,pTopology) (This)->lpVtbl->CloneFrom(This,pTopology)
1014 #define IMFTopology_GetNodeByID(This,qwTopoNodeID,ppNode) (This)->lpVtbl->GetNodeByID(This,qwTopoNodeID,ppNode)
1015 #define IMFTopology_GetSourceNodeCollection(This,ppCollection) (This)->lpVtbl->GetSourceNodeCollection(This,ppCollection)
1016 #define IMFTopology_GetOutputNodeCollection(This,ppCollection) (This)->lpVtbl->GetOutputNodeCollection(This,ppCollection)
1017 #else
1018 /*** IUnknown methods ***/
1019 static FORCEINLINE HRESULT IMFTopology_QueryInterface(IMFTopology* This,REFIID riid,void **ppvObject) {
1020     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
1021 }
1022 static FORCEINLINE ULONG IMFTopology_AddRef(IMFTopology* This) {
1023     return This->lpVtbl->AddRef(This);
1024 }
1025 static FORCEINLINE ULONG IMFTopology_Release(IMFTopology* This) {
1026     return This->lpVtbl->Release(This);
1027 }
1028 /*** IMFAttributes methods ***/
1029 static FORCEINLINE HRESULT IMFTopology_GetItem(IMFTopology* This,REFGUID guidKey,PROPVARIANT *pValue) {
1030     return This->lpVtbl->GetItem(This,guidKey,pValue);
1031 }
1032 static FORCEINLINE HRESULT IMFTopology_GetItemType(IMFTopology* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
1033     return This->lpVtbl->GetItemType(This,guidKey,pType);
1034 }
1035 static FORCEINLINE HRESULT IMFTopology_CompareItem(IMFTopology* This,REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) {
1036     return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
1037 }
1038 static FORCEINLINE HRESULT IMFTopology_Compare(IMFTopology* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) {
1039     return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
1040 }
1041 static FORCEINLINE HRESULT IMFTopology_GetUINT32(IMFTopology* This,REFGUID guidKey,UINT32 *punValue) {
1042     return This->lpVtbl->GetUINT32(This,guidKey,punValue);
1043 }
1044 static FORCEINLINE HRESULT IMFTopology_GetUINT64(IMFTopology* This,REFGUID guidKey,UINT64 *punValue) {
1045     return This->lpVtbl->GetUINT64(This,guidKey,punValue);
1046 }
1047 static FORCEINLINE HRESULT IMFTopology_GetDouble(IMFTopology* This,REFGUID guidKey,double *pfValue) {
1048     return This->lpVtbl->GetDouble(This,guidKey,pfValue);
1049 }
1050 static FORCEINLINE HRESULT IMFTopology_GetGUID(IMFTopology* This,REFGUID guidKey,GUID *pguidValue) {
1051     return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
1052 }
1053 static FORCEINLINE HRESULT IMFTopology_GetStringLength(IMFTopology* This,REFGUID guidKey,UINT32 *pcchLength) {
1054     return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
1055 }
1056 static FORCEINLINE HRESULT IMFTopology_GetString(IMFTopology* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
1057     return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
1058 }
1059 static FORCEINLINE HRESULT IMFTopology_GetAllocatedString(IMFTopology* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
1060     return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
1061 }
1062 static FORCEINLINE HRESULT IMFTopology_GetBlobSize(IMFTopology* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
1063     return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
1064 }
1065 static FORCEINLINE HRESULT IMFTopology_GetBlob(IMFTopology* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
1066     return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
1067 }
1068 static FORCEINLINE HRESULT IMFTopology_GetAllocatedBlob(IMFTopology* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
1069     return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
1070 }
1071 static FORCEINLINE HRESULT IMFTopology_GetUnknown(IMFTopology* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
1072     return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
1073 }
1074 static FORCEINLINE HRESULT IMFTopology_SetItem(IMFTopology* This,REFGUID guidKey,REFPROPVARIANT Value) {
1075     return This->lpVtbl->SetItem(This,guidKey,Value);
1076 }
1077 static FORCEINLINE HRESULT IMFTopology_DeleteItem(IMFTopology* This,REFGUID guidKey) {
1078     return This->lpVtbl->DeleteItem(This,guidKey);
1079 }
1080 static FORCEINLINE HRESULT IMFTopology_DeleteAllItems(IMFTopology* This) {
1081     return This->lpVtbl->DeleteAllItems(This);
1082 }
1083 static FORCEINLINE HRESULT IMFTopology_SetUINT32(IMFTopology* This,REFGUID guidKey,UINT32 unValue) {
1084     return This->lpVtbl->SetUINT32(This,guidKey,unValue);
1085 }
1086 static FORCEINLINE HRESULT IMFTopology_SetUINT64(IMFTopology* This,REFGUID guidKey,UINT64 unValue) {
1087     return This->lpVtbl->SetUINT64(This,guidKey,unValue);
1088 }
1089 static FORCEINLINE HRESULT IMFTopology_SetDouble(IMFTopology* This,REFGUID guidKey,double fValue) {
1090     return This->lpVtbl->SetDouble(This,guidKey,fValue);
1091 }
1092 static FORCEINLINE HRESULT IMFTopology_SetGUID(IMFTopology* This,REFGUID guidKey,REFGUID guidValue) {
1093     return This->lpVtbl->SetGUID(This,guidKey,guidValue);
1094 }
1095 static FORCEINLINE HRESULT IMFTopology_SetString(IMFTopology* This,REFGUID guidKey,LPCWSTR wszValue) {
1096     return This->lpVtbl->SetString(This,guidKey,wszValue);
1097 }
1098 static FORCEINLINE HRESULT IMFTopology_SetBlob(IMFTopology* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
1099     return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
1100 }
1101 static FORCEINLINE HRESULT IMFTopology_SetUnknown(IMFTopology* This,REFGUID guidKey,IUnknown *pUnknown) {
1102     return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
1103 }
1104 static FORCEINLINE HRESULT IMFTopology_LockStore(IMFTopology* This) {
1105     return This->lpVtbl->LockStore(This);
1106 }
1107 static FORCEINLINE HRESULT IMFTopology_UnlockStore(IMFTopology* This) {
1108     return This->lpVtbl->UnlockStore(This);
1109 }
1110 static FORCEINLINE HRESULT IMFTopology_GetCount(IMFTopology* This,UINT32 *pcItems) {
1111     return This->lpVtbl->GetCount(This,pcItems);
1112 }
1113 static FORCEINLINE HRESULT IMFTopology_GetItemByIndex(IMFTopology* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
1114     return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
1115 }
1116 static FORCEINLINE HRESULT IMFTopology_CopyAllItems(IMFTopology* This,IMFAttributes *pDest) {
1117     return This->lpVtbl->CopyAllItems(This,pDest);
1118 }
1119 /*** IMFTopology methods ***/
1120 static FORCEINLINE HRESULT IMFTopology_GetTopologyID(IMFTopology* This,TOPOID *pID) {
1121     return This->lpVtbl->GetTopologyID(This,pID);
1122 }
1123 static FORCEINLINE HRESULT IMFTopology_AddNode(IMFTopology* This,IMFTopologyNode *pNode) {
1124     return This->lpVtbl->AddNode(This,pNode);
1125 }
1126 static FORCEINLINE HRESULT IMFTopology_RemoveNode(IMFTopology* This,IMFTopologyNode *pNode) {
1127     return This->lpVtbl->RemoveNode(This,pNode);
1128 }
1129 static FORCEINLINE HRESULT IMFTopology_GetNodeCount(IMFTopology* This,WORD *pwNodes) {
1130     return This->lpVtbl->GetNodeCount(This,pwNodes);
1131 }
1132 static FORCEINLINE HRESULT IMFTopology_GetNode(IMFTopology* This,WORD wIndex,IMFTopologyNode **ppNode) {
1133     return This->lpVtbl->GetNode(This,wIndex,ppNode);
1134 }
1135 static FORCEINLINE HRESULT IMFTopology_Clear(IMFTopology* This) {
1136     return This->lpVtbl->Clear(This);
1137 }
1138 static FORCEINLINE HRESULT IMFTopology_CloneFrom(IMFTopology* This,IMFTopology *pTopology) {
1139     return This->lpVtbl->CloneFrom(This,pTopology);
1140 }
1141 static FORCEINLINE HRESULT IMFTopology_GetNodeByID(IMFTopology* This,TOPOID qwTopoNodeID,IMFTopologyNode **ppNode) {
1142     return This->lpVtbl->GetNodeByID(This,qwTopoNodeID,ppNode);
1143 }
1144 static FORCEINLINE HRESULT IMFTopology_GetSourceNodeCollection(IMFTopology* This,IMFCollection **ppCollection) {
1145     return This->lpVtbl->GetSourceNodeCollection(This,ppCollection);
1146 }
1147 static FORCEINLINE HRESULT IMFTopology_GetOutputNodeCollection(IMFTopology* This,IMFCollection **ppCollection) {
1148     return This->lpVtbl->GetOutputNodeCollection(This,ppCollection);
1149 }
1150 #endif
1151 #endif
1152 
1153 #endif
1154 
1155 
1156 #endif  /* __IMFTopology_INTERFACE_DEFINED__ */
1157 
1158 typedef LONGLONG MFTIME;
1159 typedef enum _MF_CLOCK_STATE {
1160     MFCLOCK_STATE_INVALID = 0,
1161     MFCLOCK_STATE_RUNNING = 1,
1162     MFCLOCK_STATE_STOPPED = 2,
1163     MFCLOCK_STATE_PAUSED = 3
1164 } MF_CLOCK_STATE;
1165 typedef enum _MF_CLOCK_STATE MFCLOCK_STATE;
1166 typedef struct _MFCLOCK_PROPERTIES {
1167     UINT64 qwCorrelationRate;
1168     GUID guidClockId;
1169     DWORD dwClockFlags;
1170     UINT64 qwClockFrequency;
1171     DWORD dwClockTolerance;
1172     DWORD dwClockJitter;
1173 } MFCLOCK_PROPERTIES;
1174 /*****************************************************************************
1175  * IMFClock interface
1176  */
1177 #ifndef __IMFClock_INTERFACE_DEFINED__
1178 #define __IMFClock_INTERFACE_DEFINED__
1179 
1180 DEFINE_GUID(IID_IMFClock, 0x2eb1e945, 0x18b8, 0x4139, 0x9b,0x1a, 0xd5,0xd5,0x84,0x81,0x85,0x30);
1181 #if defined(__cplusplus) && !defined(CINTERFACE)
1182 MIDL_INTERFACE("2eb1e945-18b8-4139-9b1a-d5d584818530")
1183 IMFClock : public IUnknown
1184 {
1185     virtual HRESULT STDMETHODCALLTYPE GetClockCharacteristics(
1186         DWORD *pdwCharacteristics) = 0;
1187 
1188     virtual HRESULT STDMETHODCALLTYPE GetCorrelatedTime(
1189         DWORD dwReserved,
1190         LONGLONG *pllClockTime,
1191         MFTIME *phnsSystemTime) = 0;
1192 
1193     virtual HRESULT STDMETHODCALLTYPE GetContinuityKey(
1194         DWORD *pdwContinuityKey) = 0;
1195 
1196     virtual HRESULT STDMETHODCALLTYPE GetState(
1197         DWORD dwReserved,
1198         MFCLOCK_STATE *peClockState) = 0;
1199 
1200     virtual HRESULT STDMETHODCALLTYPE GetProperties(
1201         MFCLOCK_PROPERTIES *pClockProperties) = 0;
1202 
1203 };
1204 #ifdef __CRT_UUID_DECL
1205 __CRT_UUID_DECL(IMFClock, 0x2eb1e945, 0x18b8, 0x4139, 0x9b,0x1a, 0xd5,0xd5,0x84,0x81,0x85,0x30)
1206 #endif
1207 #else
1208 typedef struct IMFClockVtbl {
1209     BEGIN_INTERFACE
1210 
1211     /*** IUnknown methods ***/
1212     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1213         IMFClock *This,
1214         REFIID riid,
1215         void **ppvObject);
1216 
1217     ULONG (STDMETHODCALLTYPE *AddRef)(
1218         IMFClock *This);
1219 
1220     ULONG (STDMETHODCALLTYPE *Release)(
1221         IMFClock *This);
1222 
1223     /*** IMFClock methods ***/
1224     HRESULT (STDMETHODCALLTYPE *GetClockCharacteristics)(
1225         IMFClock *This,
1226         DWORD *pdwCharacteristics);
1227 
1228     HRESULT (STDMETHODCALLTYPE *GetCorrelatedTime)(
1229         IMFClock *This,
1230         DWORD dwReserved,
1231         LONGLONG *pllClockTime,
1232         MFTIME *phnsSystemTime);
1233 
1234     HRESULT (STDMETHODCALLTYPE *GetContinuityKey)(
1235         IMFClock *This,
1236         DWORD *pdwContinuityKey);
1237 
1238     HRESULT (STDMETHODCALLTYPE *GetState)(
1239         IMFClock *This,
1240         DWORD dwReserved,
1241         MFCLOCK_STATE *peClockState);
1242 
1243     HRESULT (STDMETHODCALLTYPE *GetProperties)(
1244         IMFClock *This,
1245         MFCLOCK_PROPERTIES *pClockProperties);
1246 
1247     END_INTERFACE
1248 } IMFClockVtbl;
1249 
1250 interface IMFClock {
1251     CONST_VTBL IMFClockVtbl* lpVtbl;
1252 };
1253 
1254 #ifdef COBJMACROS
1255 #ifndef WIDL_C_INLINE_WRAPPERS
1256 /*** IUnknown methods ***/
1257 #define IMFClock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
1258 #define IMFClock_AddRef(This) (This)->lpVtbl->AddRef(This)
1259 #define IMFClock_Release(This) (This)->lpVtbl->Release(This)
1260 /*** IMFClock methods ***/
1261 #define IMFClock_GetClockCharacteristics(This,pdwCharacteristics) (This)->lpVtbl->GetClockCharacteristics(This,pdwCharacteristics)
1262 #define IMFClock_GetCorrelatedTime(This,dwReserved,pllClockTime,phnsSystemTime) (This)->lpVtbl->GetCorrelatedTime(This,dwReserved,pllClockTime,phnsSystemTime)
1263 #define IMFClock_GetContinuityKey(This,pdwContinuityKey) (This)->lpVtbl->GetContinuityKey(This,pdwContinuityKey)
1264 #define IMFClock_GetState(This,dwReserved,peClockState) (This)->lpVtbl->GetState(This,dwReserved,peClockState)
1265 #define IMFClock_GetProperties(This,pClockProperties) (This)->lpVtbl->GetProperties(This,pClockProperties)
1266 #else
1267 /*** IUnknown methods ***/
1268 static FORCEINLINE HRESULT IMFClock_QueryInterface(IMFClock* This,REFIID riid,void **ppvObject) {
1269     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
1270 }
1271 static FORCEINLINE ULONG IMFClock_AddRef(IMFClock* This) {
1272     return This->lpVtbl->AddRef(This);
1273 }
1274 static FORCEINLINE ULONG IMFClock_Release(IMFClock* This) {
1275     return This->lpVtbl->Release(This);
1276 }
1277 /*** IMFClock methods ***/
1278 static FORCEINLINE HRESULT IMFClock_GetClockCharacteristics(IMFClock* This,DWORD *pdwCharacteristics) {
1279     return This->lpVtbl->GetClockCharacteristics(This,pdwCharacteristics);
1280 }
1281 static FORCEINLINE HRESULT IMFClock_GetCorrelatedTime(IMFClock* This,DWORD dwReserved,LONGLONG *pllClockTime,MFTIME *phnsSystemTime) {
1282     return This->lpVtbl->GetCorrelatedTime(This,dwReserved,pllClockTime,phnsSystemTime);
1283 }
1284 static FORCEINLINE HRESULT IMFClock_GetContinuityKey(IMFClock* This,DWORD *pdwContinuityKey) {
1285     return This->lpVtbl->GetContinuityKey(This,pdwContinuityKey);
1286 }
1287 static FORCEINLINE HRESULT IMFClock_GetState(IMFClock* This,DWORD dwReserved,MFCLOCK_STATE *peClockState) {
1288     return This->lpVtbl->GetState(This,dwReserved,peClockState);
1289 }
1290 static FORCEINLINE HRESULT IMFClock_GetProperties(IMFClock* This,MFCLOCK_PROPERTIES *pClockProperties) {
1291     return This->lpVtbl->GetProperties(This,pClockProperties);
1292 }
1293 #endif
1294 #endif
1295 
1296 #endif
1297 
1298 
1299 #endif  /* __IMFClock_INTERFACE_DEFINED__ */
1300 
1301 #define SHA_HASH_LEN 20
1302 #define STR_HASH_LEN (SHA_HASH_LEN*2+3)
1303 typedef struct _MFRR_COMPONENT_HASH_INFO {
1304   DWORD ulReason;
1305   WCHAR rgHeaderHash[STR_HASH_LEN];
1306   WCHAR rgPublicKeyHash[STR_HASH_LEN];
1307   WCHAR wszName[MAX_PATH];
1308 } MFRR_COMPONENT_HASH_INFO, *PMFRR_COMPONENT_HASH_INFO;
1309 EXTERN_GUID(MF_PD_DURATION, 0x6c990d33,0xbb8e,0x477a,0x85,0x98,0xd,0x5d,0x96,0xfc,0xd8,0x8a);
1310 typedef enum _MF_CONNECT_METHOD {
1311     MF_CONNECT_DIRECT = 0x0,
1312     MF_CONNECT_ALLOW_CONVERTER = 0x1,
1313     MF_CONNECT_ALLOW_DECODER = 0x3,
1314     MF_CONNECT_RESOLVE_INDEPENDENT_OUTPUTTYPES = 0x4,
1315     MF_CONNECT_AS_OPTIONAL = 0x10000,
1316     MF_CONNECT_AS_OPTIONAL_BRANCH = 0x20000
1317 } MF_CONNECT_METHOD;
1318 /*****************************************************************************
1319  * IMFMediaSession interface
1320  */
1321 #ifndef __IMFMediaSession_INTERFACE_DEFINED__
1322 #define __IMFMediaSession_INTERFACE_DEFINED__
1323 
1324 DEFINE_GUID(IID_IMFMediaSession, 0x90377834, 0x21d0, 0x4dee, 0x82,0x14, 0xba,0x2e,0x3e,0x6c,0x11,0x27);
1325 #if defined(__cplusplus) && !defined(CINTERFACE)
1326 MIDL_INTERFACE("90377834-21d0-4dee-8214-ba2e3e6c1127")
1327 IMFMediaSession : public IMFMediaEventGenerator
1328 {
1329     virtual HRESULT STDMETHODCALLTYPE SetTopology(
1330         DWORD dwSetTopologyFlags,
1331         IMFTopology *pTopology) = 0;
1332 
1333     virtual HRESULT STDMETHODCALLTYPE ClearTopologies(
1334         ) = 0;
1335 
1336     virtual HRESULT STDMETHODCALLTYPE Start(
1337         const GUID *pguidTimeFormat,
1338         const PROPVARIANT *pvarStartPosition) = 0;
1339 
1340     virtual HRESULT STDMETHODCALLTYPE Pause(
1341         ) = 0;
1342 
1343     virtual HRESULT STDMETHODCALLTYPE Stop(
1344         ) = 0;
1345 
1346     virtual HRESULT STDMETHODCALLTYPE Close(
1347         ) = 0;
1348 
1349     virtual HRESULT STDMETHODCALLTYPE Shutdown(
1350         ) = 0;
1351 
1352     virtual HRESULT STDMETHODCALLTYPE GetClock(
1353         IMFClock **ppClock) = 0;
1354 
1355     virtual HRESULT STDMETHODCALLTYPE GetSessionCapabilities(
1356         DWORD *pdwCaps) = 0;
1357 
1358     virtual HRESULT STDMETHODCALLTYPE GetFullTopology(
1359         DWORD dwGetFullTopologyFlags,
1360         TOPOID TopoId,
1361         IMFTopology **ppFullTopology) = 0;
1362 
1363 };
1364 #ifdef __CRT_UUID_DECL
1365 __CRT_UUID_DECL(IMFMediaSession, 0x90377834, 0x21d0, 0x4dee, 0x82,0x14, 0xba,0x2e,0x3e,0x6c,0x11,0x27)
1366 #endif
1367 #else
1368 typedef struct IMFMediaSessionVtbl {
1369     BEGIN_INTERFACE
1370 
1371     /*** IUnknown methods ***/
1372     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1373         IMFMediaSession *This,
1374         REFIID riid,
1375         void **ppvObject);
1376 
1377     ULONG (STDMETHODCALLTYPE *AddRef)(
1378         IMFMediaSession *This);
1379 
1380     ULONG (STDMETHODCALLTYPE *Release)(
1381         IMFMediaSession *This);
1382 
1383     /*** IMFMediaEventGenerator methods ***/
1384     HRESULT (STDMETHODCALLTYPE *GetEvent)(
1385         IMFMediaSession *This,
1386         DWORD dwFlags,
1387         IMFMediaEvent **ppEvent);
1388 
1389     HRESULT (STDMETHODCALLTYPE *BeginGetEvent)(
1390         IMFMediaSession *This,
1391         IMFAsyncCallback *pCallback,
1392         IUnknown *punkState);
1393 
1394     HRESULT (STDMETHODCALLTYPE *EndGetEvent)(
1395         IMFMediaSession *This,
1396         IMFAsyncResult *pResult,
1397         IMFMediaEvent **ppEvent);
1398 
1399     HRESULT (STDMETHODCALLTYPE *QueueEvent)(
1400         IMFMediaSession *This,
1401         MediaEventType met,
1402         REFGUID guidExtendedType,
1403         HRESULT hrStatus,
1404         const PROPVARIANT *pvValue);
1405 
1406     /*** IMFMediaSession methods ***/
1407     HRESULT (STDMETHODCALLTYPE *SetTopology)(
1408         IMFMediaSession *This,
1409         DWORD dwSetTopologyFlags,
1410         IMFTopology *pTopology);
1411 
1412     HRESULT (STDMETHODCALLTYPE *ClearTopologies)(
1413         IMFMediaSession *This);
1414 
1415     HRESULT (STDMETHODCALLTYPE *Start)(
1416         IMFMediaSession *This,
1417         const GUID *pguidTimeFormat,
1418         const PROPVARIANT *pvarStartPosition);
1419 
1420     HRESULT (STDMETHODCALLTYPE *Pause)(
1421         IMFMediaSession *This);
1422 
1423     HRESULT (STDMETHODCALLTYPE *Stop)(
1424         IMFMediaSession *This);
1425 
1426     HRESULT (STDMETHODCALLTYPE *Close)(
1427         IMFMediaSession *This);
1428 
1429     HRESULT (STDMETHODCALLTYPE *Shutdown)(
1430         IMFMediaSession *This);
1431 
1432     HRESULT (STDMETHODCALLTYPE *GetClock)(
1433         IMFMediaSession *This,
1434         IMFClock **ppClock);
1435 
1436     HRESULT (STDMETHODCALLTYPE *GetSessionCapabilities)(
1437         IMFMediaSession *This,
1438         DWORD *pdwCaps);
1439 
1440     HRESULT (STDMETHODCALLTYPE *GetFullTopology)(
1441         IMFMediaSession *This,
1442         DWORD dwGetFullTopologyFlags,
1443         TOPOID TopoId,
1444         IMFTopology **ppFullTopology);
1445 
1446     END_INTERFACE
1447 } IMFMediaSessionVtbl;
1448 
1449 interface IMFMediaSession {
1450     CONST_VTBL IMFMediaSessionVtbl* lpVtbl;
1451 };
1452 
1453 #ifdef COBJMACROS
1454 #ifndef WIDL_C_INLINE_WRAPPERS
1455 /*** IUnknown methods ***/
1456 #define IMFMediaSession_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
1457 #define IMFMediaSession_AddRef(This) (This)->lpVtbl->AddRef(This)
1458 #define IMFMediaSession_Release(This) (This)->lpVtbl->Release(This)
1459 /*** IMFMediaEventGenerator methods ***/
1460 #define IMFMediaSession_GetEvent(This,dwFlags,ppEvent) (This)->lpVtbl->GetEvent(This,dwFlags,ppEvent)
1461 #define IMFMediaSession_BeginGetEvent(This,pCallback,punkState) (This)->lpVtbl->BeginGetEvent(This,pCallback,punkState)
1462 #define IMFMediaSession_EndGetEvent(This,pResult,ppEvent) (This)->lpVtbl->EndGetEvent(This,pResult,ppEvent)
1463 #define IMFMediaSession_QueueEvent(This,met,guidExtendedType,hrStatus,pvValue) (This)->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue)
1464 /*** IMFMediaSession methods ***/
1465 #define IMFMediaSession_SetTopology(This,dwSetTopologyFlags,pTopology) (This)->lpVtbl->SetTopology(This,dwSetTopologyFlags,pTopology)
1466 #define IMFMediaSession_ClearTopologies(This) (This)->lpVtbl->ClearTopologies(This)
1467 #define IMFMediaSession_Start(This,pguidTimeFormat,pvarStartPosition) (This)->lpVtbl->Start(This,pguidTimeFormat,pvarStartPosition)
1468 #define IMFMediaSession_Pause(This) (This)->lpVtbl->Pause(This)
1469 #define IMFMediaSession_Stop(This) (This)->lpVtbl->Stop(This)
1470 #define IMFMediaSession_Close(This) (This)->lpVtbl->Close(This)
1471 #define IMFMediaSession_Shutdown(This) (This)->lpVtbl->Shutdown(This)
1472 #define IMFMediaSession_GetClock(This,ppClock) (This)->lpVtbl->GetClock(This,ppClock)
1473 #define IMFMediaSession_GetSessionCapabilities(This,pdwCaps) (This)->lpVtbl->GetSessionCapabilities(This,pdwCaps)
1474 #define IMFMediaSession_GetFullTopology(This,dwGetFullTopologyFlags,TopoId,ppFullTopology) (This)->lpVtbl->GetFullTopology(This,dwGetFullTopologyFlags,TopoId,ppFullTopology)
1475 #else
1476 /*** IUnknown methods ***/
1477 static FORCEINLINE HRESULT IMFMediaSession_QueryInterface(IMFMediaSession* This,REFIID riid,void **ppvObject) {
1478     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
1479 }
1480 static FORCEINLINE ULONG IMFMediaSession_AddRef(IMFMediaSession* This) {
1481     return This->lpVtbl->AddRef(This);
1482 }
1483 static FORCEINLINE ULONG IMFMediaSession_Release(IMFMediaSession* This) {
1484     return This->lpVtbl->Release(This);
1485 }
1486 /*** IMFMediaEventGenerator methods ***/
1487 static FORCEINLINE HRESULT IMFMediaSession_GetEvent(IMFMediaSession* This,DWORD dwFlags,IMFMediaEvent **ppEvent) {
1488     return This->lpVtbl->GetEvent(This,dwFlags,ppEvent);
1489 }
1490 static FORCEINLINE HRESULT IMFMediaSession_BeginGetEvent(IMFMediaSession* This,IMFAsyncCallback *pCallback,IUnknown *punkState) {
1491     return This->lpVtbl->BeginGetEvent(This,pCallback,punkState);
1492 }
1493 static FORCEINLINE HRESULT IMFMediaSession_EndGetEvent(IMFMediaSession* This,IMFAsyncResult *pResult,IMFMediaEvent **ppEvent) {
1494     return This->lpVtbl->EndGetEvent(This,pResult,ppEvent);
1495 }
1496 static FORCEINLINE HRESULT IMFMediaSession_QueueEvent(IMFMediaSession* This,MediaEventType met,REFGUID guidExtendedType,HRESULT hrStatus,const PROPVARIANT *pvValue) {
1497     return This->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue);
1498 }
1499 /*** IMFMediaSession methods ***/
1500 static FORCEINLINE HRESULT IMFMediaSession_SetTopology(IMFMediaSession* This,DWORD dwSetTopologyFlags,IMFTopology *pTopology) {
1501     return This->lpVtbl->SetTopology(This,dwSetTopologyFlags,pTopology);
1502 }
1503 static FORCEINLINE HRESULT IMFMediaSession_ClearTopologies(IMFMediaSession* This) {
1504     return This->lpVtbl->ClearTopologies(This);
1505 }
1506 static FORCEINLINE HRESULT IMFMediaSession_Start(IMFMediaSession* This,const GUID *pguidTimeFormat,const PROPVARIANT *pvarStartPosition) {
1507     return This->lpVtbl->Start(This,pguidTimeFormat,pvarStartPosition);
1508 }
1509 static FORCEINLINE HRESULT IMFMediaSession_Pause(IMFMediaSession* This) {
1510     return This->lpVtbl->Pause(This);
1511 }
1512 static FORCEINLINE HRESULT IMFMediaSession_Stop(IMFMediaSession* This) {
1513     return This->lpVtbl->Stop(This);
1514 }
1515 static FORCEINLINE HRESULT IMFMediaSession_Close(IMFMediaSession* This) {
1516     return This->lpVtbl->Close(This);
1517 }
1518 static FORCEINLINE HRESULT IMFMediaSession_Shutdown(IMFMediaSession* This) {
1519     return This->lpVtbl->Shutdown(This);
1520 }
1521 static FORCEINLINE HRESULT IMFMediaSession_GetClock(IMFMediaSession* This,IMFClock **ppClock) {
1522     return This->lpVtbl->GetClock(This,ppClock);
1523 }
1524 static FORCEINLINE HRESULT IMFMediaSession_GetSessionCapabilities(IMFMediaSession* This,DWORD *pdwCaps) {
1525     return This->lpVtbl->GetSessionCapabilities(This,pdwCaps);
1526 }
1527 static FORCEINLINE HRESULT IMFMediaSession_GetFullTopology(IMFMediaSession* This,DWORD dwGetFullTopologyFlags,TOPOID TopoId,IMFTopology **ppFullTopology) {
1528     return This->lpVtbl->GetFullTopology(This,dwGetFullTopologyFlags,TopoId,ppFullTopology);
1529 }
1530 #endif
1531 #endif
1532 
1533 #endif
1534 
1535 
1536 #endif  /* __IMFMediaSession_INTERFACE_DEFINED__ */
1537 
1538 /*****************************************************************************
1539  * IMFMediaTypeHandler interface
1540  */
1541 #ifndef __IMFMediaTypeHandler_INTERFACE_DEFINED__
1542 #define __IMFMediaTypeHandler_INTERFACE_DEFINED__
1543 
1544 DEFINE_GUID(IID_IMFMediaTypeHandler, 0xe93dcf6c, 0x4b07, 0x4e1e, 0x81,0x23, 0xaa,0x16,0xed,0x6e,0xad,0xf5);
1545 #if defined(__cplusplus) && !defined(CINTERFACE)
1546 MIDL_INTERFACE("e93dcf6c-4b07-4e1e-8123-aa16ed6eadf5")
1547 IMFMediaTypeHandler : public IUnknown
1548 {
1549     virtual HRESULT STDMETHODCALLTYPE IsMediaTypeSupported(
1550         IMFMediaType *pMediaType,
1551         IMFMediaType **ppMediaType) = 0;
1552 
1553     virtual HRESULT STDMETHODCALLTYPE GetMediaTypeCount(
1554         DWORD *pdwTypeCount) = 0;
1555 
1556     virtual HRESULT STDMETHODCALLTYPE GetMediaTypeByIndex(
1557         DWORD dwIndex,
1558         IMFMediaType **ppType) = 0;
1559 
1560     virtual HRESULT STDMETHODCALLTYPE SetCurrentMediaType(
1561         IMFMediaType *pMediaType) = 0;
1562 
1563     virtual HRESULT STDMETHODCALLTYPE GetCurrentMediaType(
1564         IMFMediaType **ppMediaType) = 0;
1565 
1566     virtual HRESULT STDMETHODCALLTYPE GetMajorType(
1567         GUID *pguidMajorType) = 0;
1568 
1569 };
1570 #ifdef __CRT_UUID_DECL
1571 __CRT_UUID_DECL(IMFMediaTypeHandler, 0xe93dcf6c, 0x4b07, 0x4e1e, 0x81,0x23, 0xaa,0x16,0xed,0x6e,0xad,0xf5)
1572 #endif
1573 #else
1574 typedef struct IMFMediaTypeHandlerVtbl {
1575     BEGIN_INTERFACE
1576 
1577     /*** IUnknown methods ***/
1578     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1579         IMFMediaTypeHandler *This,
1580         REFIID riid,
1581         void **ppvObject);
1582 
1583     ULONG (STDMETHODCALLTYPE *AddRef)(
1584         IMFMediaTypeHandler *This);
1585 
1586     ULONG (STDMETHODCALLTYPE *Release)(
1587         IMFMediaTypeHandler *This);
1588 
1589     /*** IMFMediaTypeHandler methods ***/
1590     HRESULT (STDMETHODCALLTYPE *IsMediaTypeSupported)(
1591         IMFMediaTypeHandler *This,
1592         IMFMediaType *pMediaType,
1593         IMFMediaType **ppMediaType);
1594 
1595     HRESULT (STDMETHODCALLTYPE *GetMediaTypeCount)(
1596         IMFMediaTypeHandler *This,
1597         DWORD *pdwTypeCount);
1598 
1599     HRESULT (STDMETHODCALLTYPE *GetMediaTypeByIndex)(
1600         IMFMediaTypeHandler *This,
1601         DWORD dwIndex,
1602         IMFMediaType **ppType);
1603 
1604     HRESULT (STDMETHODCALLTYPE *SetCurrentMediaType)(
1605         IMFMediaTypeHandler *This,
1606         IMFMediaType *pMediaType);
1607 
1608     HRESULT (STDMETHODCALLTYPE *GetCurrentMediaType)(
1609         IMFMediaTypeHandler *This,
1610         IMFMediaType **ppMediaType);
1611 
1612     HRESULT (STDMETHODCALLTYPE *GetMajorType)(
1613         IMFMediaTypeHandler *This,
1614         GUID *pguidMajorType);
1615 
1616     END_INTERFACE
1617 } IMFMediaTypeHandlerVtbl;
1618 
1619 interface IMFMediaTypeHandler {
1620     CONST_VTBL IMFMediaTypeHandlerVtbl* lpVtbl;
1621 };
1622 
1623 #ifdef COBJMACROS
1624 #ifndef WIDL_C_INLINE_WRAPPERS
1625 /*** IUnknown methods ***/
1626 #define IMFMediaTypeHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
1627 #define IMFMediaTypeHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
1628 #define IMFMediaTypeHandler_Release(This) (This)->lpVtbl->Release(This)
1629 /*** IMFMediaTypeHandler methods ***/
1630 #define IMFMediaTypeHandler_IsMediaTypeSupported(This,pMediaType,ppMediaType) (This)->lpVtbl->IsMediaTypeSupported(This,pMediaType,ppMediaType)
1631 #define IMFMediaTypeHandler_GetMediaTypeCount(This,pdwTypeCount) (This)->lpVtbl->GetMediaTypeCount(This,pdwTypeCount)
1632 #define IMFMediaTypeHandler_GetMediaTypeByIndex(This,dwIndex,ppType) (This)->lpVtbl->GetMediaTypeByIndex(This,dwIndex,ppType)
1633 #define IMFMediaTypeHandler_SetCurrentMediaType(This,pMediaType) (This)->lpVtbl->SetCurrentMediaType(This,pMediaType)
1634 #define IMFMediaTypeHandler_GetCurrentMediaType(This,ppMediaType) (This)->lpVtbl->GetCurrentMediaType(This,ppMediaType)
1635 #define IMFMediaTypeHandler_GetMajorType(This,pguidMajorType) (This)->lpVtbl->GetMajorType(This,pguidMajorType)
1636 #else
1637 /*** IUnknown methods ***/
1638 static FORCEINLINE HRESULT IMFMediaTypeHandler_QueryInterface(IMFMediaTypeHandler* This,REFIID riid,void **ppvObject) {
1639     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
1640 }
1641 static FORCEINLINE ULONG IMFMediaTypeHandler_AddRef(IMFMediaTypeHandler* This) {
1642     return This->lpVtbl->AddRef(This);
1643 }
1644 static FORCEINLINE ULONG IMFMediaTypeHandler_Release(IMFMediaTypeHandler* This) {
1645     return This->lpVtbl->Release(This);
1646 }
1647 /*** IMFMediaTypeHandler methods ***/
1648 static FORCEINLINE HRESULT IMFMediaTypeHandler_IsMediaTypeSupported(IMFMediaTypeHandler* This,IMFMediaType *pMediaType,IMFMediaType **ppMediaType) {
1649     return This->lpVtbl->IsMediaTypeSupported(This,pMediaType,ppMediaType);
1650 }
1651 static FORCEINLINE HRESULT IMFMediaTypeHandler_GetMediaTypeCount(IMFMediaTypeHandler* This,DWORD *pdwTypeCount) {
1652     return This->lpVtbl->GetMediaTypeCount(This,pdwTypeCount);
1653 }
1654 static FORCEINLINE HRESULT IMFMediaTypeHandler_GetMediaTypeByIndex(IMFMediaTypeHandler* This,DWORD dwIndex,IMFMediaType **ppType) {
1655     return This->lpVtbl->GetMediaTypeByIndex(This,dwIndex,ppType);
1656 }
1657 static FORCEINLINE HRESULT IMFMediaTypeHandler_SetCurrentMediaType(IMFMediaTypeHandler* This,IMFMediaType *pMediaType) {
1658     return This->lpVtbl->SetCurrentMediaType(This,pMediaType);
1659 }
1660 static FORCEINLINE HRESULT IMFMediaTypeHandler_GetCurrentMediaType(IMFMediaTypeHandler* This,IMFMediaType **ppMediaType) {
1661     return This->lpVtbl->GetCurrentMediaType(This,ppMediaType);
1662 }
1663 static FORCEINLINE HRESULT IMFMediaTypeHandler_GetMajorType(IMFMediaTypeHandler* This,GUID *pguidMajorType) {
1664     return This->lpVtbl->GetMajorType(This,pguidMajorType);
1665 }
1666 #endif
1667 #endif
1668 
1669 #endif
1670 
1671 HRESULT STDMETHODCALLTYPE IMFMediaTypeHandler_RemoteGetCurrentMediaType_Proxy(
1672     IMFMediaTypeHandler* This,
1673     BYTE **ppbData,
1674     DWORD *pcbData);
1675 void __RPC_STUB IMFMediaTypeHandler_RemoteGetCurrentMediaType_Stub(
1676     IRpcStubBuffer* This,
1677     IRpcChannelBuffer* pRpcChannelBuffer,
1678     PRPC_MESSAGE pRpcMessage,
1679     DWORD* pdwStubPhase);
1680 HRESULT CALLBACK IMFMediaTypeHandler_GetCurrentMediaType_Proxy(
1681     IMFMediaTypeHandler* This,
1682     IMFMediaType **ppMediaType);
1683 HRESULT __RPC_STUB IMFMediaTypeHandler_GetCurrentMediaType_Stub(
1684     IMFMediaTypeHandler* This,
1685     BYTE **ppbData,
1686     DWORD *pcbData);
1687 
1688 #endif  /* __IMFMediaTypeHandler_INTERFACE_DEFINED__ */
1689 
1690 /*****************************************************************************
1691  * IMFStreamDescriptor interface
1692  */
1693 #ifndef __IMFStreamDescriptor_INTERFACE_DEFINED__
1694 #define __IMFStreamDescriptor_INTERFACE_DEFINED__
1695 
1696 DEFINE_GUID(IID_IMFStreamDescriptor, 0x56c03d9c, 0x9dbb, 0x45f5, 0xab,0x4b, 0xd8,0x0f,0x47,0xc0,0x59,0x38);
1697 #if defined(__cplusplus) && !defined(CINTERFACE)
1698 MIDL_INTERFACE("56c03d9c-9dbb-45f5-ab4b-d80f47c05938")
1699 IMFStreamDescriptor : public IMFAttributes
1700 {
1701     virtual HRESULT STDMETHODCALLTYPE GetStreamIdentifier(
1702         DWORD *pdwStreamIdentifier) = 0;
1703 
1704     virtual HRESULT STDMETHODCALLTYPE GetMediaTypeHandler(
1705         IMFMediaTypeHandler **ppMediaTypeHandler) = 0;
1706 
1707 };
1708 #ifdef __CRT_UUID_DECL
1709 __CRT_UUID_DECL(IMFStreamDescriptor, 0x56c03d9c, 0x9dbb, 0x45f5, 0xab,0x4b, 0xd8,0x0f,0x47,0xc0,0x59,0x38)
1710 #endif
1711 #else
1712 typedef struct IMFStreamDescriptorVtbl {
1713     BEGIN_INTERFACE
1714 
1715     /*** IUnknown methods ***/
1716     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
1717         IMFStreamDescriptor *This,
1718         REFIID riid,
1719         void **ppvObject);
1720 
1721     ULONG (STDMETHODCALLTYPE *AddRef)(
1722         IMFStreamDescriptor *This);
1723 
1724     ULONG (STDMETHODCALLTYPE *Release)(
1725         IMFStreamDescriptor *This);
1726 
1727     /*** IMFAttributes methods ***/
1728     HRESULT (STDMETHODCALLTYPE *GetItem)(
1729         IMFStreamDescriptor *This,
1730         REFGUID guidKey,
1731         PROPVARIANT *pValue);
1732 
1733     HRESULT (STDMETHODCALLTYPE *GetItemType)(
1734         IMFStreamDescriptor *This,
1735         REFGUID guidKey,
1736         MF_ATTRIBUTE_TYPE *pType);
1737 
1738     HRESULT (STDMETHODCALLTYPE *CompareItem)(
1739         IMFStreamDescriptor *This,
1740         REFGUID guidKey,
1741         REFPROPVARIANT Value,
1742         WINBOOL *pbResult);
1743 
1744     HRESULT (STDMETHODCALLTYPE *Compare)(
1745         IMFStreamDescriptor *This,
1746         IMFAttributes *pTheirs,
1747         MF_ATTRIBUTES_MATCH_TYPE MatchType,
1748         WINBOOL *pbResult);
1749 
1750     HRESULT (STDMETHODCALLTYPE *GetUINT32)(
1751         IMFStreamDescriptor *This,
1752         REFGUID guidKey,
1753         UINT32 *punValue);
1754 
1755     HRESULT (STDMETHODCALLTYPE *GetUINT64)(
1756         IMFStreamDescriptor *This,
1757         REFGUID guidKey,
1758         UINT64 *punValue);
1759 
1760     HRESULT (STDMETHODCALLTYPE *GetDouble)(
1761         IMFStreamDescriptor *This,
1762         REFGUID guidKey,
1763         double *pfValue);
1764 
1765     HRESULT (STDMETHODCALLTYPE *GetGUID)(
1766         IMFStreamDescriptor *This,
1767         REFGUID guidKey,
1768         GUID *pguidValue);
1769 
1770     HRESULT (STDMETHODCALLTYPE *GetStringLength)(
1771         IMFStreamDescriptor *This,
1772         REFGUID guidKey,
1773         UINT32 *pcchLength);
1774 
1775     HRESULT (STDMETHODCALLTYPE *GetString)(
1776         IMFStreamDescriptor *This,
1777         REFGUID guidKey,
1778         LPWSTR pwszValue,
1779         UINT32 cchBufSize,
1780         UINT32 *pcchLength);
1781 
1782     HRESULT (STDMETHODCALLTYPE *GetAllocatedString)(
1783         IMFStreamDescriptor *This,
1784         REFGUID guidKey,
1785         LPWSTR *ppwszValue,
1786         UINT32 *pcchLength);
1787 
1788     HRESULT (STDMETHODCALLTYPE *GetBlobSize)(
1789         IMFStreamDescriptor *This,
1790         REFGUID guidKey,
1791         UINT32 *pcbBlobSize);
1792 
1793     HRESULT (STDMETHODCALLTYPE *GetBlob)(
1794         IMFStreamDescriptor *This,
1795         REFGUID guidKey,
1796         UINT8 *pBuf,
1797         UINT32 cbBufSize,
1798         UINT32 *pcbBlobSize);
1799 
1800     HRESULT (STDMETHODCALLTYPE *GetAllocatedBlob)(
1801         IMFStreamDescriptor *This,
1802         REFGUID guidKey,
1803         UINT8 **ppBuf,
1804         UINT32 *pcbSize);
1805 
1806     HRESULT (STDMETHODCALLTYPE *GetUnknown)(
1807         IMFStreamDescriptor *This,
1808         REFGUID guidKey,
1809         REFIID riid,
1810         LPVOID *ppv);
1811 
1812     HRESULT (STDMETHODCALLTYPE *SetItem)(
1813         IMFStreamDescriptor *This,
1814         REFGUID guidKey,
1815         REFPROPVARIANT Value);
1816 
1817     HRESULT (STDMETHODCALLTYPE *DeleteItem)(
1818         IMFStreamDescriptor *This,
1819         REFGUID guidKey);
1820 
1821     HRESULT (STDMETHODCALLTYPE *DeleteAllItems)(
1822         IMFStreamDescriptor *This);
1823 
1824     HRESULT (STDMETHODCALLTYPE *SetUINT32)(
1825         IMFStreamDescriptor *This,
1826         REFGUID guidKey,
1827         UINT32 unValue);
1828 
1829     HRESULT (STDMETHODCALLTYPE *SetUINT64)(
1830         IMFStreamDescriptor *This,
1831         REFGUID guidKey,
1832         UINT64 unValue);
1833 
1834     HRESULT (STDMETHODCALLTYPE *SetDouble)(
1835         IMFStreamDescriptor *This,
1836         REFGUID guidKey,
1837         double fValue);
1838 
1839     HRESULT (STDMETHODCALLTYPE *SetGUID)(
1840         IMFStreamDescriptor *This,
1841         REFGUID guidKey,
1842         REFGUID guidValue);
1843 
1844     HRESULT (STDMETHODCALLTYPE *SetString)(
1845         IMFStreamDescriptor *This,
1846         REFGUID guidKey,
1847         LPCWSTR wszValue);
1848 
1849     HRESULT (STDMETHODCALLTYPE *SetBlob)(
1850         IMFStreamDescriptor *This,
1851         REFGUID guidKey,
1852         const UINT8 *pBuf,
1853         UINT32 cbBufSize);
1854 
1855     HRESULT (STDMETHODCALLTYPE *SetUnknown)(
1856         IMFStreamDescriptor *This,
1857         REFGUID guidKey,
1858         IUnknown *pUnknown);
1859 
1860     HRESULT (STDMETHODCALLTYPE *LockStore)(
1861         IMFStreamDescriptor *This);
1862 
1863     HRESULT (STDMETHODCALLTYPE *UnlockStore)(
1864         IMFStreamDescriptor *This);
1865 
1866     HRESULT (STDMETHODCALLTYPE *GetCount)(
1867         IMFStreamDescriptor *This,
1868         UINT32 *pcItems);
1869 
1870     HRESULT (STDMETHODCALLTYPE *GetItemByIndex)(
1871         IMFStreamDescriptor *This,
1872         UINT32 unIndex,
1873         GUID *pguidKey,
1874         PROPVARIANT *pValue);
1875 
1876     HRESULT (STDMETHODCALLTYPE *CopyAllItems)(
1877         IMFStreamDescriptor *This,
1878         IMFAttributes *pDest);
1879 
1880     /*** IMFStreamDescriptor methods ***/
1881     HRESULT (STDMETHODCALLTYPE *GetStreamIdentifier)(
1882         IMFStreamDescriptor *This,
1883         DWORD *pdwStreamIdentifier);
1884 
1885     HRESULT (STDMETHODCALLTYPE *GetMediaTypeHandler)(
1886         IMFStreamDescriptor *This,
1887         IMFMediaTypeHandler **ppMediaTypeHandler);
1888 
1889     END_INTERFACE
1890 } IMFStreamDescriptorVtbl;
1891 
1892 interface IMFStreamDescriptor {
1893     CONST_VTBL IMFStreamDescriptorVtbl* lpVtbl;
1894 };
1895 
1896 #ifdef COBJMACROS
1897 #ifndef WIDL_C_INLINE_WRAPPERS
1898 /*** IUnknown methods ***/
1899 #define IMFStreamDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
1900 #define IMFStreamDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
1901 #define IMFStreamDescriptor_Release(This) (This)->lpVtbl->Release(This)
1902 /*** IMFAttributes methods ***/
1903 #define IMFStreamDescriptor_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
1904 #define IMFStreamDescriptor_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
1905 #define IMFStreamDescriptor_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
1906 #define IMFStreamDescriptor_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
1907 #define IMFStreamDescriptor_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
1908 #define IMFStreamDescriptor_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
1909 #define IMFStreamDescriptor_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
1910 #define IMFStreamDescriptor_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
1911 #define IMFStreamDescriptor_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
1912 #define IMFStreamDescriptor_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
1913 #define IMFStreamDescriptor_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
1914 #define IMFStreamDescriptor_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
1915 #define IMFStreamDescriptor_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
1916 #define IMFStreamDescriptor_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
1917 #define IMFStreamDescriptor_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
1918 #define IMFStreamDescriptor_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
1919 #define IMFStreamDescriptor_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
1920 #define IMFStreamDescriptor_DeleteAllItems(This) (This)->lpVtbl->DeleteAllItems(This)
1921 #define IMFStreamDescriptor_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
1922 #define IMFStreamDescriptor_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
1923 #define IMFStreamDescriptor_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
1924 #define IMFStreamDescriptor_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
1925 #define IMFStreamDescriptor_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
1926 #define IMFStreamDescriptor_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
1927 #define IMFStreamDescriptor_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
1928 #define IMFStreamDescriptor_LockStore(This) (This)->lpVtbl->LockStore(This)
1929 #define IMFStreamDescriptor_UnlockStore(This) (This)->lpVtbl->UnlockStore(This)
1930 #define IMFStreamDescriptor_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
1931 #define IMFStreamDescriptor_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
1932 #define IMFStreamDescriptor_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
1933 /*** IMFStreamDescriptor methods ***/
1934 #define IMFStreamDescriptor_GetStreamIdentifier(This,pdwStreamIdentifier) (This)->lpVtbl->GetStreamIdentifier(This,pdwStreamIdentifier)
1935 #define IMFStreamDescriptor_GetMediaTypeHandler(This,ppMediaTypeHandler) (This)->lpVtbl->GetMediaTypeHandler(This,ppMediaTypeHandler)
1936 #else
1937 /*** IUnknown methods ***/
1938 static FORCEINLINE HRESULT IMFStreamDescriptor_QueryInterface(IMFStreamDescriptor* This,REFIID riid,void **ppvObject) {
1939     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
1940 }
1941 static FORCEINLINE ULONG IMFStreamDescriptor_AddRef(IMFStreamDescriptor* This) {
1942     return This->lpVtbl->AddRef(This);
1943 }
1944 static FORCEINLINE ULONG IMFStreamDescriptor_Release(IMFStreamDescriptor* This) {
1945     return This->lpVtbl->Release(This);
1946 }
1947 /*** IMFAttributes methods ***/
1948 static FORCEINLINE HRESULT IMFStreamDescriptor_GetItem(IMFStreamDescriptor* This,REFGUID guidKey,PROPVARIANT *pValue) {
1949     return This->lpVtbl->GetItem(This,guidKey,pValue);
1950 }
1951 static FORCEINLINE HRESULT IMFStreamDescriptor_GetItemType(IMFStreamDescriptor* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
1952     return This->lpVtbl->GetItemType(This,guidKey,pType);
1953 }
1954 static FORCEINLINE HRESULT IMFStreamDescriptor_CompareItem(IMFStreamDescriptor* This,REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) {
1955     return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
1956 }
1957 static FORCEINLINE HRESULT IMFStreamDescriptor_Compare(IMFStreamDescriptor* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) {
1958     return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
1959 }
1960 static FORCEINLINE HRESULT IMFStreamDescriptor_GetUINT32(IMFStreamDescriptor* This,REFGUID guidKey,UINT32 *punValue) {
1961     return This->lpVtbl->GetUINT32(This,guidKey,punValue);
1962 }
1963 static FORCEINLINE HRESULT IMFStreamDescriptor_GetUINT64(IMFStreamDescriptor* This,REFGUID guidKey,UINT64 *punValue) {
1964     return This->lpVtbl->GetUINT64(This,guidKey,punValue);
1965 }
1966 static FORCEINLINE HRESULT IMFStreamDescriptor_GetDouble(IMFStreamDescriptor* This,REFGUID guidKey,double *pfValue) {
1967     return This->lpVtbl->GetDouble(This,guidKey,pfValue);
1968 }
1969 static FORCEINLINE HRESULT IMFStreamDescriptor_GetGUID(IMFStreamDescriptor* This,REFGUID guidKey,GUID *pguidValue) {
1970     return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
1971 }
1972 static FORCEINLINE HRESULT IMFStreamDescriptor_GetStringLength(IMFStreamDescriptor* This,REFGUID guidKey,UINT32 *pcchLength) {
1973     return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
1974 }
1975 static FORCEINLINE HRESULT IMFStreamDescriptor_GetString(IMFStreamDescriptor* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
1976     return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
1977 }
1978 static FORCEINLINE HRESULT IMFStreamDescriptor_GetAllocatedString(IMFStreamDescriptor* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
1979     return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
1980 }
1981 static FORCEINLINE HRESULT IMFStreamDescriptor_GetBlobSize(IMFStreamDescriptor* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
1982     return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
1983 }
1984 static FORCEINLINE HRESULT IMFStreamDescriptor_GetBlob(IMFStreamDescriptor* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
1985     return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
1986 }
1987 static FORCEINLINE HRESULT IMFStreamDescriptor_GetAllocatedBlob(IMFStreamDescriptor* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
1988     return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
1989 }
1990 static FORCEINLINE HRESULT IMFStreamDescriptor_GetUnknown(IMFStreamDescriptor* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
1991     return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
1992 }
1993 static FORCEINLINE HRESULT IMFStreamDescriptor_SetItem(IMFStreamDescriptor* This,REFGUID guidKey,REFPROPVARIANT Value) {
1994     return This->lpVtbl->SetItem(This,guidKey,Value);
1995 }
1996 static FORCEINLINE HRESULT IMFStreamDescriptor_DeleteItem(IMFStreamDescriptor* This,REFGUID guidKey) {
1997     return This->lpVtbl->DeleteItem(This,guidKey);
1998 }
1999 static FORCEINLINE HRESULT IMFStreamDescriptor_DeleteAllItems(IMFStreamDescriptor* This) {
2000     return This->lpVtbl->DeleteAllItems(This);
2001 }
2002 static FORCEINLINE HRESULT IMFStreamDescriptor_SetUINT32(IMFStreamDescriptor* This,REFGUID guidKey,UINT32 unValue) {
2003     return This->lpVtbl->SetUINT32(This,guidKey,unValue);
2004 }
2005 static FORCEINLINE HRESULT IMFStreamDescriptor_SetUINT64(IMFStreamDescriptor* This,REFGUID guidKey,UINT64 unValue) {
2006     return This->lpVtbl->SetUINT64(This,guidKey,unValue);
2007 }
2008 static FORCEINLINE HRESULT IMFStreamDescriptor_SetDouble(IMFStreamDescriptor* This,REFGUID guidKey,double fValue) {
2009     return This->lpVtbl->SetDouble(This,guidKey,fValue);
2010 }
2011 static FORCEINLINE HRESULT IMFStreamDescriptor_SetGUID(IMFStreamDescriptor* This,REFGUID guidKey,REFGUID guidValue) {
2012     return This->lpVtbl->SetGUID(This,guidKey,guidValue);
2013 }
2014 static FORCEINLINE HRESULT IMFStreamDescriptor_SetString(IMFStreamDescriptor* This,REFGUID guidKey,LPCWSTR wszValue) {
2015     return This->lpVtbl->SetString(This,guidKey,wszValue);
2016 }
2017 static FORCEINLINE HRESULT IMFStreamDescriptor_SetBlob(IMFStreamDescriptor* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
2018     return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
2019 }
2020 static FORCEINLINE HRESULT IMFStreamDescriptor_SetUnknown(IMFStreamDescriptor* This,REFGUID guidKey,IUnknown *pUnknown) {
2021     return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
2022 }
2023 static FORCEINLINE HRESULT IMFStreamDescriptor_LockStore(IMFStreamDescriptor* This) {
2024     return This->lpVtbl->LockStore(This);
2025 }
2026 static FORCEINLINE HRESULT IMFStreamDescriptor_UnlockStore(IMFStreamDescriptor* This) {
2027     return This->lpVtbl->UnlockStore(This);
2028 }
2029 static FORCEINLINE HRESULT IMFStreamDescriptor_GetCount(IMFStreamDescriptor* This,UINT32 *pcItems) {
2030     return This->lpVtbl->GetCount(This,pcItems);
2031 }
2032 static FORCEINLINE HRESULT IMFStreamDescriptor_GetItemByIndex(IMFStreamDescriptor* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
2033     return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
2034 }
2035 static FORCEINLINE HRESULT IMFStreamDescriptor_CopyAllItems(IMFStreamDescriptor* This,IMFAttributes *pDest) {
2036     return This->lpVtbl->CopyAllItems(This,pDest);
2037 }
2038 /*** IMFStreamDescriptor methods ***/
2039 static FORCEINLINE HRESULT IMFStreamDescriptor_GetStreamIdentifier(IMFStreamDescriptor* This,DWORD *pdwStreamIdentifier) {
2040     return This->lpVtbl->GetStreamIdentifier(This,pdwStreamIdentifier);
2041 }
2042 static FORCEINLINE HRESULT IMFStreamDescriptor_GetMediaTypeHandler(IMFStreamDescriptor* This,IMFMediaTypeHandler **ppMediaTypeHandler) {
2043     return This->lpVtbl->GetMediaTypeHandler(This,ppMediaTypeHandler);
2044 }
2045 #endif
2046 #endif
2047 
2048 #endif
2049 
2050 
2051 #endif  /* __IMFStreamDescriptor_INTERFACE_DEFINED__ */
2052 
2053 /*****************************************************************************
2054  * IMFPresentationDescriptor interface
2055  */
2056 #ifndef __IMFPresentationDescriptor_INTERFACE_DEFINED__
2057 #define __IMFPresentationDescriptor_INTERFACE_DEFINED__
2058 
2059 DEFINE_GUID(IID_IMFPresentationDescriptor, 0x03cb2711, 0x24d7, 0x4db6, 0xa1,0x7f, 0xf3,0xa7,0xa4,0x79,0xa5,0x36);
2060 #if defined(__cplusplus) && !defined(CINTERFACE)
2061 MIDL_INTERFACE("03cb2711-24d7-4db6-a17f-f3a7a479a536")
2062 IMFPresentationDescriptor : public IMFAttributes
2063 {
2064     virtual HRESULT STDMETHODCALLTYPE GetStreamDescriptorCount(
2065         DWORD *pdwDescriptorCount) = 0;
2066 
2067     virtual HRESULT STDMETHODCALLTYPE GetStreamDescriptorByIndex(
2068         DWORD dwIndex,
2069         WINBOOL *pfSelected,
2070         IMFStreamDescriptor **ppDescriptor) = 0;
2071 
2072     virtual HRESULT STDMETHODCALLTYPE SelectStream(
2073         DWORD dwDescriptorIndex) = 0;
2074 
2075     virtual HRESULT STDMETHODCALLTYPE DeselectStream(
2076         DWORD dwDescriptorIndex) = 0;
2077 
2078     virtual HRESULT STDMETHODCALLTYPE Clone(
2079         IMFPresentationDescriptor **ppPresentationDescriptor) = 0;
2080 
2081 };
2082 #ifdef __CRT_UUID_DECL
2083 __CRT_UUID_DECL(IMFPresentationDescriptor, 0x03cb2711, 0x24d7, 0x4db6, 0xa1,0x7f, 0xf3,0xa7,0xa4,0x79,0xa5,0x36)
2084 #endif
2085 #else
2086 typedef struct IMFPresentationDescriptorVtbl {
2087     BEGIN_INTERFACE
2088 
2089     /*** IUnknown methods ***/
2090     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2091         IMFPresentationDescriptor *This,
2092         REFIID riid,
2093         void **ppvObject);
2094 
2095     ULONG (STDMETHODCALLTYPE *AddRef)(
2096         IMFPresentationDescriptor *This);
2097 
2098     ULONG (STDMETHODCALLTYPE *Release)(
2099         IMFPresentationDescriptor *This);
2100 
2101     /*** IMFAttributes methods ***/
2102     HRESULT (STDMETHODCALLTYPE *GetItem)(
2103         IMFPresentationDescriptor *This,
2104         REFGUID guidKey,
2105         PROPVARIANT *pValue);
2106 
2107     HRESULT (STDMETHODCALLTYPE *GetItemType)(
2108         IMFPresentationDescriptor *This,
2109         REFGUID guidKey,
2110         MF_ATTRIBUTE_TYPE *pType);
2111 
2112     HRESULT (STDMETHODCALLTYPE *CompareItem)(
2113         IMFPresentationDescriptor *This,
2114         REFGUID guidKey,
2115         REFPROPVARIANT Value,
2116         WINBOOL *pbResult);
2117 
2118     HRESULT (STDMETHODCALLTYPE *Compare)(
2119         IMFPresentationDescriptor *This,
2120         IMFAttributes *pTheirs,
2121         MF_ATTRIBUTES_MATCH_TYPE MatchType,
2122         WINBOOL *pbResult);
2123 
2124     HRESULT (STDMETHODCALLTYPE *GetUINT32)(
2125         IMFPresentationDescriptor *This,
2126         REFGUID guidKey,
2127         UINT32 *punValue);
2128 
2129     HRESULT (STDMETHODCALLTYPE *GetUINT64)(
2130         IMFPresentationDescriptor *This,
2131         REFGUID guidKey,
2132         UINT64 *punValue);
2133 
2134     HRESULT (STDMETHODCALLTYPE *GetDouble)(
2135         IMFPresentationDescriptor *This,
2136         REFGUID guidKey,
2137         double *pfValue);
2138 
2139     HRESULT (STDMETHODCALLTYPE *GetGUID)(
2140         IMFPresentationDescriptor *This,
2141         REFGUID guidKey,
2142         GUID *pguidValue);
2143 
2144     HRESULT (STDMETHODCALLTYPE *GetStringLength)(
2145         IMFPresentationDescriptor *This,
2146         REFGUID guidKey,
2147         UINT32 *pcchLength);
2148 
2149     HRESULT (STDMETHODCALLTYPE *GetString)(
2150         IMFPresentationDescriptor *This,
2151         REFGUID guidKey,
2152         LPWSTR pwszValue,
2153         UINT32 cchBufSize,
2154         UINT32 *pcchLength);
2155 
2156     HRESULT (STDMETHODCALLTYPE *GetAllocatedString)(
2157         IMFPresentationDescriptor *This,
2158         REFGUID guidKey,
2159         LPWSTR *ppwszValue,
2160         UINT32 *pcchLength);
2161 
2162     HRESULT (STDMETHODCALLTYPE *GetBlobSize)(
2163         IMFPresentationDescriptor *This,
2164         REFGUID guidKey,
2165         UINT32 *pcbBlobSize);
2166 
2167     HRESULT (STDMETHODCALLTYPE *GetBlob)(
2168         IMFPresentationDescriptor *This,
2169         REFGUID guidKey,
2170         UINT8 *pBuf,
2171         UINT32 cbBufSize,
2172         UINT32 *pcbBlobSize);
2173 
2174     HRESULT (STDMETHODCALLTYPE *GetAllocatedBlob)(
2175         IMFPresentationDescriptor *This,
2176         REFGUID guidKey,
2177         UINT8 **ppBuf,
2178         UINT32 *pcbSize);
2179 
2180     HRESULT (STDMETHODCALLTYPE *GetUnknown)(
2181         IMFPresentationDescriptor *This,
2182         REFGUID guidKey,
2183         REFIID riid,
2184         LPVOID *ppv);
2185 
2186     HRESULT (STDMETHODCALLTYPE *SetItem)(
2187         IMFPresentationDescriptor *This,
2188         REFGUID guidKey,
2189         REFPROPVARIANT Value);
2190 
2191     HRESULT (STDMETHODCALLTYPE *DeleteItem)(
2192         IMFPresentationDescriptor *This,
2193         REFGUID guidKey);
2194 
2195     HRESULT (STDMETHODCALLTYPE *DeleteAllItems)(
2196         IMFPresentationDescriptor *This);
2197 
2198     HRESULT (STDMETHODCALLTYPE *SetUINT32)(
2199         IMFPresentationDescriptor *This,
2200         REFGUID guidKey,
2201         UINT32 unValue);
2202 
2203     HRESULT (STDMETHODCALLTYPE *SetUINT64)(
2204         IMFPresentationDescriptor *This,
2205         REFGUID guidKey,
2206         UINT64 unValue);
2207 
2208     HRESULT (STDMETHODCALLTYPE *SetDouble)(
2209         IMFPresentationDescriptor *This,
2210         REFGUID guidKey,
2211         double fValue);
2212 
2213     HRESULT (STDMETHODCALLTYPE *SetGUID)(
2214         IMFPresentationDescriptor *This,
2215         REFGUID guidKey,
2216         REFGUID guidValue);
2217 
2218     HRESULT (STDMETHODCALLTYPE *SetString)(
2219         IMFPresentationDescriptor *This,
2220         REFGUID guidKey,
2221         LPCWSTR wszValue);
2222 
2223     HRESULT (STDMETHODCALLTYPE *SetBlob)(
2224         IMFPresentationDescriptor *This,
2225         REFGUID guidKey,
2226         const UINT8 *pBuf,
2227         UINT32 cbBufSize);
2228 
2229     HRESULT (STDMETHODCALLTYPE *SetUnknown)(
2230         IMFPresentationDescriptor *This,
2231         REFGUID guidKey,
2232         IUnknown *pUnknown);
2233 
2234     HRESULT (STDMETHODCALLTYPE *LockStore)(
2235         IMFPresentationDescriptor *This);
2236 
2237     HRESULT (STDMETHODCALLTYPE *UnlockStore)(
2238         IMFPresentationDescriptor *This);
2239 
2240     HRESULT (STDMETHODCALLTYPE *GetCount)(
2241         IMFPresentationDescriptor *This,
2242         UINT32 *pcItems);
2243 
2244     HRESULT (STDMETHODCALLTYPE *GetItemByIndex)(
2245         IMFPresentationDescriptor *This,
2246         UINT32 unIndex,
2247         GUID *pguidKey,
2248         PROPVARIANT *pValue);
2249 
2250     HRESULT (STDMETHODCALLTYPE *CopyAllItems)(
2251         IMFPresentationDescriptor *This,
2252         IMFAttributes *pDest);
2253 
2254     /*** IMFPresentationDescriptor methods ***/
2255     HRESULT (STDMETHODCALLTYPE *GetStreamDescriptorCount)(
2256         IMFPresentationDescriptor *This,
2257         DWORD *pdwDescriptorCount);
2258 
2259     HRESULT (STDMETHODCALLTYPE *GetStreamDescriptorByIndex)(
2260         IMFPresentationDescriptor *This,
2261         DWORD dwIndex,
2262         WINBOOL *pfSelected,
2263         IMFStreamDescriptor **ppDescriptor);
2264 
2265     HRESULT (STDMETHODCALLTYPE *SelectStream)(
2266         IMFPresentationDescriptor *This,
2267         DWORD dwDescriptorIndex);
2268 
2269     HRESULT (STDMETHODCALLTYPE *DeselectStream)(
2270         IMFPresentationDescriptor *This,
2271         DWORD dwDescriptorIndex);
2272 
2273     HRESULT (STDMETHODCALLTYPE *Clone)(
2274         IMFPresentationDescriptor *This,
2275         IMFPresentationDescriptor **ppPresentationDescriptor);
2276 
2277     END_INTERFACE
2278 } IMFPresentationDescriptorVtbl;
2279 
2280 interface IMFPresentationDescriptor {
2281     CONST_VTBL IMFPresentationDescriptorVtbl* lpVtbl;
2282 };
2283 
2284 #ifdef COBJMACROS
2285 #ifndef WIDL_C_INLINE_WRAPPERS
2286 /*** IUnknown methods ***/
2287 #define IMFPresentationDescriptor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
2288 #define IMFPresentationDescriptor_AddRef(This) (This)->lpVtbl->AddRef(This)
2289 #define IMFPresentationDescriptor_Release(This) (This)->lpVtbl->Release(This)
2290 /*** IMFAttributes methods ***/
2291 #define IMFPresentationDescriptor_GetItem(This,guidKey,pValue) (This)->lpVtbl->GetItem(This,guidKey,pValue)
2292 #define IMFPresentationDescriptor_GetItemType(This,guidKey,pType) (This)->lpVtbl->GetItemType(This,guidKey,pType)
2293 #define IMFPresentationDescriptor_CompareItem(This,guidKey,Value,pbResult) (This)->lpVtbl->CompareItem(This,guidKey,Value,pbResult)
2294 #define IMFPresentationDescriptor_Compare(This,pTheirs,MatchType,pbResult) (This)->lpVtbl->Compare(This,pTheirs,MatchType,pbResult)
2295 #define IMFPresentationDescriptor_GetUINT32(This,guidKey,punValue) (This)->lpVtbl->GetUINT32(This,guidKey,punValue)
2296 #define IMFPresentationDescriptor_GetUINT64(This,guidKey,punValue) (This)->lpVtbl->GetUINT64(This,guidKey,punValue)
2297 #define IMFPresentationDescriptor_GetDouble(This,guidKey,pfValue) (This)->lpVtbl->GetDouble(This,guidKey,pfValue)
2298 #define IMFPresentationDescriptor_GetGUID(This,guidKey,pguidValue) (This)->lpVtbl->GetGUID(This,guidKey,pguidValue)
2299 #define IMFPresentationDescriptor_GetStringLength(This,guidKey,pcchLength) (This)->lpVtbl->GetStringLength(This,guidKey,pcchLength)
2300 #define IMFPresentationDescriptor_GetString(This,guidKey,pwszValue,cchBufSize,pcchLength) (This)->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength)
2301 #define IMFPresentationDescriptor_GetAllocatedString(This,guidKey,ppwszValue,pcchLength) (This)->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength)
2302 #define IMFPresentationDescriptor_GetBlobSize(This,guidKey,pcbBlobSize) (This)->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize)
2303 #define IMFPresentationDescriptor_GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize) (This)->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize)
2304 #define IMFPresentationDescriptor_GetAllocatedBlob(This,guidKey,ppBuf,pcbSize) (This)->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize)
2305 #define IMFPresentationDescriptor_GetUnknown(This,guidKey,riid,ppv) (This)->lpVtbl->GetUnknown(This,guidKey,riid,ppv)
2306 #define IMFPresentationDescriptor_SetItem(This,guidKey,Value) (This)->lpVtbl->SetItem(This,guidKey,Value)
2307 #define IMFPresentationDescriptor_DeleteItem(This,guidKey) (This)->lpVtbl->DeleteItem(This,guidKey)
2308 #define IMFPresentationDescriptor_DeleteAllItems(This) (This)->lpVtbl->DeleteAllItems(This)
2309 #define IMFPresentationDescriptor_SetUINT32(This,guidKey,unValue) (This)->lpVtbl->SetUINT32(This,guidKey,unValue)
2310 #define IMFPresentationDescriptor_SetUINT64(This,guidKey,unValue) (This)->lpVtbl->SetUINT64(This,guidKey,unValue)
2311 #define IMFPresentationDescriptor_SetDouble(This,guidKey,fValue) (This)->lpVtbl->SetDouble(This,guidKey,fValue)
2312 #define IMFPresentationDescriptor_SetGUID(This,guidKey,guidValue) (This)->lpVtbl->SetGUID(This,guidKey,guidValue)
2313 #define IMFPresentationDescriptor_SetString(This,guidKey,wszValue) (This)->lpVtbl->SetString(This,guidKey,wszValue)
2314 #define IMFPresentationDescriptor_SetBlob(This,guidKey,pBuf,cbBufSize) (This)->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize)
2315 #define IMFPresentationDescriptor_SetUnknown(This,guidKey,pUnknown) (This)->lpVtbl->SetUnknown(This,guidKey,pUnknown)
2316 #define IMFPresentationDescriptor_LockStore(This) (This)->lpVtbl->LockStore(This)
2317 #define IMFPresentationDescriptor_UnlockStore(This) (This)->lpVtbl->UnlockStore(This)
2318 #define IMFPresentationDescriptor_GetCount(This,pcItems) (This)->lpVtbl->GetCount(This,pcItems)
2319 #define IMFPresentationDescriptor_GetItemByIndex(This,unIndex,pguidKey,pValue) (This)->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue)
2320 #define IMFPresentationDescriptor_CopyAllItems(This,pDest) (This)->lpVtbl->CopyAllItems(This,pDest)
2321 /*** IMFPresentationDescriptor methods ***/
2322 #define IMFPresentationDescriptor_GetStreamDescriptorCount(This,pdwDescriptorCount) (This)->lpVtbl->GetStreamDescriptorCount(This,pdwDescriptorCount)
2323 #define IMFPresentationDescriptor_GetStreamDescriptorByIndex(This,dwIndex,pfSelected,ppDescriptor) (This)->lpVtbl->GetStreamDescriptorByIndex(This,dwIndex,pfSelected,ppDescriptor)
2324 #define IMFPresentationDescriptor_SelectStream(This,dwDescriptorIndex) (This)->lpVtbl->SelectStream(This,dwDescriptorIndex)
2325 #define IMFPresentationDescriptor_DeselectStream(This,dwDescriptorIndex) (This)->lpVtbl->DeselectStream(This,dwDescriptorIndex)
2326 #define IMFPresentationDescriptor_Clone(This,ppPresentationDescriptor) (This)->lpVtbl->Clone(This,ppPresentationDescriptor)
2327 #else
2328 /*** IUnknown methods ***/
2329 static FORCEINLINE HRESULT IMFPresentationDescriptor_QueryInterface(IMFPresentationDescriptor* This,REFIID riid,void **ppvObject) {
2330     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
2331 }
2332 static FORCEINLINE ULONG IMFPresentationDescriptor_AddRef(IMFPresentationDescriptor* This) {
2333     return This->lpVtbl->AddRef(This);
2334 }
2335 static FORCEINLINE ULONG IMFPresentationDescriptor_Release(IMFPresentationDescriptor* This) {
2336     return This->lpVtbl->Release(This);
2337 }
2338 /*** IMFAttributes methods ***/
2339 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetItem(IMFPresentationDescriptor* This,REFGUID guidKey,PROPVARIANT *pValue) {
2340     return This->lpVtbl->GetItem(This,guidKey,pValue);
2341 }
2342 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetItemType(IMFPresentationDescriptor* This,REFGUID guidKey,MF_ATTRIBUTE_TYPE *pType) {
2343     return This->lpVtbl->GetItemType(This,guidKey,pType);
2344 }
2345 static FORCEINLINE HRESULT IMFPresentationDescriptor_CompareItem(IMFPresentationDescriptor* This,REFGUID guidKey,REFPROPVARIANT Value,WINBOOL *pbResult) {
2346     return This->lpVtbl->CompareItem(This,guidKey,Value,pbResult);
2347 }
2348 static FORCEINLINE HRESULT IMFPresentationDescriptor_Compare(IMFPresentationDescriptor* This,IMFAttributes *pTheirs,MF_ATTRIBUTES_MATCH_TYPE MatchType,WINBOOL *pbResult) {
2349     return This->lpVtbl->Compare(This,pTheirs,MatchType,pbResult);
2350 }
2351 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetUINT32(IMFPresentationDescriptor* This,REFGUID guidKey,UINT32 *punValue) {
2352     return This->lpVtbl->GetUINT32(This,guidKey,punValue);
2353 }
2354 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetUINT64(IMFPresentationDescriptor* This,REFGUID guidKey,UINT64 *punValue) {
2355     return This->lpVtbl->GetUINT64(This,guidKey,punValue);
2356 }
2357 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetDouble(IMFPresentationDescriptor* This,REFGUID guidKey,double *pfValue) {
2358     return This->lpVtbl->GetDouble(This,guidKey,pfValue);
2359 }
2360 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetGUID(IMFPresentationDescriptor* This,REFGUID guidKey,GUID *pguidValue) {
2361     return This->lpVtbl->GetGUID(This,guidKey,pguidValue);
2362 }
2363 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetStringLength(IMFPresentationDescriptor* This,REFGUID guidKey,UINT32 *pcchLength) {
2364     return This->lpVtbl->GetStringLength(This,guidKey,pcchLength);
2365 }
2366 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetString(IMFPresentationDescriptor* This,REFGUID guidKey,LPWSTR pwszValue,UINT32 cchBufSize,UINT32 *pcchLength) {
2367     return This->lpVtbl->GetString(This,guidKey,pwszValue,cchBufSize,pcchLength);
2368 }
2369 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetAllocatedString(IMFPresentationDescriptor* This,REFGUID guidKey,LPWSTR *ppwszValue,UINT32 *pcchLength) {
2370     return This->lpVtbl->GetAllocatedString(This,guidKey,ppwszValue,pcchLength);
2371 }
2372 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetBlobSize(IMFPresentationDescriptor* This,REFGUID guidKey,UINT32 *pcbBlobSize) {
2373     return This->lpVtbl->GetBlobSize(This,guidKey,pcbBlobSize);
2374 }
2375 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetBlob(IMFPresentationDescriptor* This,REFGUID guidKey,UINT8 *pBuf,UINT32 cbBufSize,UINT32 *pcbBlobSize) {
2376     return This->lpVtbl->GetBlob(This,guidKey,pBuf,cbBufSize,pcbBlobSize);
2377 }
2378 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetAllocatedBlob(IMFPresentationDescriptor* This,REFGUID guidKey,UINT8 **ppBuf,UINT32 *pcbSize) {
2379     return This->lpVtbl->GetAllocatedBlob(This,guidKey,ppBuf,pcbSize);
2380 }
2381 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetUnknown(IMFPresentationDescriptor* This,REFGUID guidKey,REFIID riid,LPVOID *ppv) {
2382     return This->lpVtbl->GetUnknown(This,guidKey,riid,ppv);
2383 }
2384 static FORCEINLINE HRESULT IMFPresentationDescriptor_SetItem(IMFPresentationDescriptor* This,REFGUID guidKey,REFPROPVARIANT Value) {
2385     return This->lpVtbl->SetItem(This,guidKey,Value);
2386 }
2387 static FORCEINLINE HRESULT IMFPresentationDescriptor_DeleteItem(IMFPresentationDescriptor* This,REFGUID guidKey) {
2388     return This->lpVtbl->DeleteItem(This,guidKey);
2389 }
2390 static FORCEINLINE HRESULT IMFPresentationDescriptor_DeleteAllItems(IMFPresentationDescriptor* This) {
2391     return This->lpVtbl->DeleteAllItems(This);
2392 }
2393 static FORCEINLINE HRESULT IMFPresentationDescriptor_SetUINT32(IMFPresentationDescriptor* This,REFGUID guidKey,UINT32 unValue) {
2394     return This->lpVtbl->SetUINT32(This,guidKey,unValue);
2395 }
2396 static FORCEINLINE HRESULT IMFPresentationDescriptor_SetUINT64(IMFPresentationDescriptor* This,REFGUID guidKey,UINT64 unValue) {
2397     return This->lpVtbl->SetUINT64(This,guidKey,unValue);
2398 }
2399 static FORCEINLINE HRESULT IMFPresentationDescriptor_SetDouble(IMFPresentationDescriptor* This,REFGUID guidKey,double fValue) {
2400     return This->lpVtbl->SetDouble(This,guidKey,fValue);
2401 }
2402 static FORCEINLINE HRESULT IMFPresentationDescriptor_SetGUID(IMFPresentationDescriptor* This,REFGUID guidKey,REFGUID guidValue) {
2403     return This->lpVtbl->SetGUID(This,guidKey,guidValue);
2404 }
2405 static FORCEINLINE HRESULT IMFPresentationDescriptor_SetString(IMFPresentationDescriptor* This,REFGUID guidKey,LPCWSTR wszValue) {
2406     return This->lpVtbl->SetString(This,guidKey,wszValue);
2407 }
2408 static FORCEINLINE HRESULT IMFPresentationDescriptor_SetBlob(IMFPresentationDescriptor* This,REFGUID guidKey,const UINT8 *pBuf,UINT32 cbBufSize) {
2409     return This->lpVtbl->SetBlob(This,guidKey,pBuf,cbBufSize);
2410 }
2411 static FORCEINLINE HRESULT IMFPresentationDescriptor_SetUnknown(IMFPresentationDescriptor* This,REFGUID guidKey,IUnknown *pUnknown) {
2412     return This->lpVtbl->SetUnknown(This,guidKey,pUnknown);
2413 }
2414 static FORCEINLINE HRESULT IMFPresentationDescriptor_LockStore(IMFPresentationDescriptor* This) {
2415     return This->lpVtbl->LockStore(This);
2416 }
2417 static FORCEINLINE HRESULT IMFPresentationDescriptor_UnlockStore(IMFPresentationDescriptor* This) {
2418     return This->lpVtbl->UnlockStore(This);
2419 }
2420 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetCount(IMFPresentationDescriptor* This,UINT32 *pcItems) {
2421     return This->lpVtbl->GetCount(This,pcItems);
2422 }
2423 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetItemByIndex(IMFPresentationDescriptor* This,UINT32 unIndex,GUID *pguidKey,PROPVARIANT *pValue) {
2424     return This->lpVtbl->GetItemByIndex(This,unIndex,pguidKey,pValue);
2425 }
2426 static FORCEINLINE HRESULT IMFPresentationDescriptor_CopyAllItems(IMFPresentationDescriptor* This,IMFAttributes *pDest) {
2427     return This->lpVtbl->CopyAllItems(This,pDest);
2428 }
2429 /*** IMFPresentationDescriptor methods ***/
2430 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetStreamDescriptorCount(IMFPresentationDescriptor* This,DWORD *pdwDescriptorCount) {
2431     return This->lpVtbl->GetStreamDescriptorCount(This,pdwDescriptorCount);
2432 }
2433 static FORCEINLINE HRESULT IMFPresentationDescriptor_GetStreamDescriptorByIndex(IMFPresentationDescriptor* This,DWORD dwIndex,WINBOOL *pfSelected,IMFStreamDescriptor **ppDescriptor) {
2434     return This->lpVtbl->GetStreamDescriptorByIndex(This,dwIndex,pfSelected,ppDescriptor);
2435 }
2436 static FORCEINLINE HRESULT IMFPresentationDescriptor_SelectStream(IMFPresentationDescriptor* This,DWORD dwDescriptorIndex) {
2437     return This->lpVtbl->SelectStream(This,dwDescriptorIndex);
2438 }
2439 static FORCEINLINE HRESULT IMFPresentationDescriptor_DeselectStream(IMFPresentationDescriptor* This,DWORD dwDescriptorIndex) {
2440     return This->lpVtbl->DeselectStream(This,dwDescriptorIndex);
2441 }
2442 static FORCEINLINE HRESULT IMFPresentationDescriptor_Clone(IMFPresentationDescriptor* This,IMFPresentationDescriptor **ppPresentationDescriptor) {
2443     return This->lpVtbl->Clone(This,ppPresentationDescriptor);
2444 }
2445 #endif
2446 #endif
2447 
2448 #endif
2449 
2450 
2451 #endif  /* __IMFPresentationDescriptor_INTERFACE_DEFINED__ */
2452 
2453 /*****************************************************************************
2454  * IMFMediaSource interface
2455  */
2456 #ifndef __IMFMediaSource_INTERFACE_DEFINED__
2457 #define __IMFMediaSource_INTERFACE_DEFINED__
2458 
2459 DEFINE_GUID(IID_IMFMediaSource, 0x279a808d, 0xaec7, 0x40c8, 0x9c,0x6b, 0xa6,0xb4,0x92,0xc7,0x8a,0x66);
2460 #if defined(__cplusplus) && !defined(CINTERFACE)
2461 MIDL_INTERFACE("279a808d-aec7-40c8-9c6b-a6b492c78a66")
2462 IMFMediaSource : public IMFMediaEventGenerator
2463 {
2464     virtual HRESULT STDMETHODCALLTYPE GetCharacteristics(
2465         DWORD *pdwCharacteristics) = 0;
2466 
2467     virtual HRESULT STDMETHODCALLTYPE CreatePresentationDescriptor(
2468         IMFPresentationDescriptor **ppPresentationDescriptor) = 0;
2469 
2470     virtual HRESULT STDMETHODCALLTYPE Start(
2471         IMFPresentationDescriptor *pPresentationDescriptor,
2472         const GUID *pguidTimeFormat,
2473         const PROPVARIANT *pvarStartPosition) = 0;
2474 
2475     virtual HRESULT STDMETHODCALLTYPE Stop(
2476         ) = 0;
2477 
2478     virtual HRESULT STDMETHODCALLTYPE Pause(
2479         ) = 0;
2480 
2481     virtual HRESULT STDMETHODCALLTYPE Shutdown(
2482         ) = 0;
2483 
2484 };
2485 #ifdef __CRT_UUID_DECL
2486 __CRT_UUID_DECL(IMFMediaSource, 0x279a808d, 0xaec7, 0x40c8, 0x9c,0x6b, 0xa6,0xb4,0x92,0xc7,0x8a,0x66)
2487 #endif
2488 #else
2489 typedef struct IMFMediaSourceVtbl {
2490     BEGIN_INTERFACE
2491 
2492     /*** IUnknown methods ***/
2493     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2494         IMFMediaSource *This,
2495         REFIID riid,
2496         void **ppvObject);
2497 
2498     ULONG (STDMETHODCALLTYPE *AddRef)(
2499         IMFMediaSource *This);
2500 
2501     ULONG (STDMETHODCALLTYPE *Release)(
2502         IMFMediaSource *This);
2503 
2504     /*** IMFMediaEventGenerator methods ***/
2505     HRESULT (STDMETHODCALLTYPE *GetEvent)(
2506         IMFMediaSource *This,
2507         DWORD dwFlags,
2508         IMFMediaEvent **ppEvent);
2509 
2510     HRESULT (STDMETHODCALLTYPE *BeginGetEvent)(
2511         IMFMediaSource *This,
2512         IMFAsyncCallback *pCallback,
2513         IUnknown *punkState);
2514 
2515     HRESULT (STDMETHODCALLTYPE *EndGetEvent)(
2516         IMFMediaSource *This,
2517         IMFAsyncResult *pResult,
2518         IMFMediaEvent **ppEvent);
2519 
2520     HRESULT (STDMETHODCALLTYPE *QueueEvent)(
2521         IMFMediaSource *This,
2522         MediaEventType met,
2523         REFGUID guidExtendedType,
2524         HRESULT hrStatus,
2525         const PROPVARIANT *pvValue);
2526 
2527     /*** IMFMediaSource methods ***/
2528     HRESULT (STDMETHODCALLTYPE *GetCharacteristics)(
2529         IMFMediaSource *This,
2530         DWORD *pdwCharacteristics);
2531 
2532     HRESULT (STDMETHODCALLTYPE *CreatePresentationDescriptor)(
2533         IMFMediaSource *This,
2534         IMFPresentationDescriptor **ppPresentationDescriptor);
2535 
2536     HRESULT (STDMETHODCALLTYPE *Start)(
2537         IMFMediaSource *This,
2538         IMFPresentationDescriptor *pPresentationDescriptor,
2539         const GUID *pguidTimeFormat,
2540         const PROPVARIANT *pvarStartPosition);
2541 
2542     HRESULT (STDMETHODCALLTYPE *Stop)(
2543         IMFMediaSource *This);
2544 
2545     HRESULT (STDMETHODCALLTYPE *Pause)(
2546         IMFMediaSource *This);
2547 
2548     HRESULT (STDMETHODCALLTYPE *Shutdown)(
2549         IMFMediaSource *This);
2550 
2551     END_INTERFACE
2552 } IMFMediaSourceVtbl;
2553 
2554 interface IMFMediaSource {
2555     CONST_VTBL IMFMediaSourceVtbl* lpVtbl;
2556 };
2557 
2558 #ifdef COBJMACROS
2559 #ifndef WIDL_C_INLINE_WRAPPERS
2560 /*** IUnknown methods ***/
2561 #define IMFMediaSource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
2562 #define IMFMediaSource_AddRef(This) (This)->lpVtbl->AddRef(This)
2563 #define IMFMediaSource_Release(This) (This)->lpVtbl->Release(This)
2564 /*** IMFMediaEventGenerator methods ***/
2565 #define IMFMediaSource_GetEvent(This,dwFlags,ppEvent) (This)->lpVtbl->GetEvent(This,dwFlags,ppEvent)
2566 #define IMFMediaSource_BeginGetEvent(This,pCallback,punkState) (This)->lpVtbl->BeginGetEvent(This,pCallback,punkState)
2567 #define IMFMediaSource_EndGetEvent(This,pResult,ppEvent) (This)->lpVtbl->EndGetEvent(This,pResult,ppEvent)
2568 #define IMFMediaSource_QueueEvent(This,met,guidExtendedType,hrStatus,pvValue) (This)->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue)
2569 /*** IMFMediaSource methods ***/
2570 #define IMFMediaSource_GetCharacteristics(This,pdwCharacteristics) (This)->lpVtbl->GetCharacteristics(This,pdwCharacteristics)
2571 #define IMFMediaSource_CreatePresentationDescriptor(This,ppPresentationDescriptor) (This)->lpVtbl->CreatePresentationDescriptor(This,ppPresentationDescriptor)
2572 #define IMFMediaSource_Start(This,pPresentationDescriptor,pguidTimeFormat,pvarStartPosition) (This)->lpVtbl->Start(This,pPresentationDescriptor,pguidTimeFormat,pvarStartPosition)
2573 #define IMFMediaSource_Stop(This) (This)->lpVtbl->Stop(This)
2574 #define IMFMediaSource_Pause(This) (This)->lpVtbl->Pause(This)
2575 #define IMFMediaSource_Shutdown(This) (This)->lpVtbl->Shutdown(This)
2576 #else
2577 /*** IUnknown methods ***/
2578 static FORCEINLINE HRESULT IMFMediaSource_QueryInterface(IMFMediaSource* This,REFIID riid,void **ppvObject) {
2579     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
2580 }
2581 static FORCEINLINE ULONG IMFMediaSource_AddRef(IMFMediaSource* This) {
2582     return This->lpVtbl->AddRef(This);
2583 }
2584 static FORCEINLINE ULONG IMFMediaSource_Release(IMFMediaSource* This) {
2585     return This->lpVtbl->Release(This);
2586 }
2587 /*** IMFMediaEventGenerator methods ***/
2588 static FORCEINLINE HRESULT IMFMediaSource_GetEvent(IMFMediaSource* This,DWORD dwFlags,IMFMediaEvent **ppEvent) {
2589     return This->lpVtbl->GetEvent(This,dwFlags,ppEvent);
2590 }
2591 static FORCEINLINE HRESULT IMFMediaSource_BeginGetEvent(IMFMediaSource* This,IMFAsyncCallback *pCallback,IUnknown *punkState) {
2592     return This->lpVtbl->BeginGetEvent(This,pCallback,punkState);
2593 }
2594 static FORCEINLINE HRESULT IMFMediaSource_EndGetEvent(IMFMediaSource* This,IMFAsyncResult *pResult,IMFMediaEvent **ppEvent) {
2595     return This->lpVtbl->EndGetEvent(This,pResult,ppEvent);
2596 }
2597 static FORCEINLINE HRESULT IMFMediaSource_QueueEvent(IMFMediaSource* This,MediaEventType met,REFGUID guidExtendedType,HRESULT hrStatus,const PROPVARIANT *pvValue) {
2598     return This->lpVtbl->QueueEvent(This,met,guidExtendedType,hrStatus,pvValue);
2599 }
2600 /*** IMFMediaSource methods ***/
2601 static FORCEINLINE HRESULT IMFMediaSource_GetCharacteristics(IMFMediaSource* This,DWORD *pdwCharacteristics) {
2602     return This->lpVtbl->GetCharacteristics(This,pdwCharacteristics);
2603 }
2604 static FORCEINLINE HRESULT IMFMediaSource_CreatePresentationDescriptor(IMFMediaSource* This,IMFPresentationDescriptor **ppPresentationDescriptor) {
2605     return This->lpVtbl->CreatePresentationDescriptor(This,ppPresentationDescriptor);
2606 }
2607 static FORCEINLINE HRESULT IMFMediaSource_Start(IMFMediaSource* This,IMFPresentationDescriptor *pPresentationDescriptor,const GUID *pguidTimeFormat,const PROPVARIANT *pvarStartPosition) {
2608     return This->lpVtbl->Start(This,pPresentationDescriptor,pguidTimeFormat,pvarStartPosition);
2609 }
2610 static FORCEINLINE HRESULT IMFMediaSource_Stop(IMFMediaSource* This) {
2611     return This->lpVtbl->Stop(This);
2612 }
2613 static FORCEINLINE HRESULT IMFMediaSource_Pause(IMFMediaSource* This) {
2614     return This->lpVtbl->Pause(This);
2615 }
2616 static FORCEINLINE HRESULT IMFMediaSource_Shutdown(IMFMediaSource* This) {
2617     return This->lpVtbl->Shutdown(This);
2618 }
2619 #endif
2620 #endif
2621 
2622 #endif
2623 
2624 HRESULT STDMETHODCALLTYPE IMFMediaSource_RemoteCreatePresentationDescriptor_Proxy(
2625     IMFMediaSource* This,
2626     DWORD *pcbPD,
2627     BYTE **pbPD,
2628     IMFPresentationDescriptor **ppRemotePD);
2629 void __RPC_STUB IMFMediaSource_RemoteCreatePresentationDescriptor_Stub(
2630     IRpcStubBuffer* This,
2631     IRpcChannelBuffer* pRpcChannelBuffer,
2632     PRPC_MESSAGE pRpcMessage,
2633     DWORD* pdwStubPhase);
2634 HRESULT CALLBACK IMFMediaSource_CreatePresentationDescriptor_Proxy(
2635     IMFMediaSource* This,
2636     IMFPresentationDescriptor **ppPresentationDescriptor);
2637 HRESULT __RPC_STUB IMFMediaSource_CreatePresentationDescriptor_Stub(
2638     IMFMediaSource* This,
2639     DWORD *pcbPD,
2640     BYTE **pbPD,
2641     IMFPresentationDescriptor **ppRemotePD);
2642 
2643 #endif  /* __IMFMediaSource_INTERFACE_DEFINED__ */
2644 
2645 typedef struct _MF_LEAKY_BUCKET_PAIR {
2646     DWORD dwBitrate;
2647     DWORD msBufferWindow;
2648 } MF_LEAKY_BUCKET_PAIR;
2649 typedef struct _MFBYTESTREAM_BUFFERING_PARAMS {
2650     QWORD cbTotalFileSize;
2651     QWORD cbPlayableDataSize;
2652     MF_LEAKY_BUCKET_PAIR *prgBuckets;
2653     DWORD cBuckets;
2654     QWORD qwNetBufferingTime;
2655     QWORD qwExtraBufferingTimeDuringSeek;
2656     QWORD qwPlayDuration;
2657     float dRate;
2658 } MFBYTESTREAM_BUFFERING_PARAMS;
2659 /*****************************************************************************
2660  * IMFByteStreamBuffering interface
2661  */
2662 #ifndef __IMFByteStreamBuffering_INTERFACE_DEFINED__
2663 #define __IMFByteStreamBuffering_INTERFACE_DEFINED__
2664 
2665 DEFINE_GUID(IID_IMFByteStreamBuffering, 0x6d66d782, 0x1d4f, 0x4db7, 0x8c,0x63, 0xcb,0x8c,0x77,0xf1,0xef,0x5e);
2666 #if defined(__cplusplus) && !defined(CINTERFACE)
2667 MIDL_INTERFACE("6d66d782-1d4f-4db7-8c63-cb8c77f1ef5e")
2668 IMFByteStreamBuffering : public IUnknown
2669 {
2670     virtual HRESULT STDMETHODCALLTYPE SetBufferingParams(
2671         MFBYTESTREAM_BUFFERING_PARAMS *pParams) = 0;
2672 
2673     virtual HRESULT STDMETHODCALLTYPE EnableBuffering(
2674         WINBOOL fEnable) = 0;
2675 
2676     virtual HRESULT STDMETHODCALLTYPE StopBuffering(
2677         ) = 0;
2678 
2679 };
2680 #ifdef __CRT_UUID_DECL
2681 __CRT_UUID_DECL(IMFByteStreamBuffering, 0x6d66d782, 0x1d4f, 0x4db7, 0x8c,0x63, 0xcb,0x8c,0x77,0xf1,0xef,0x5e)
2682 #endif
2683 #else
2684 typedef struct IMFByteStreamBufferingVtbl {
2685     BEGIN_INTERFACE
2686 
2687     /*** IUnknown methods ***/
2688     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2689         IMFByteStreamBuffering *This,
2690         REFIID riid,
2691         void **ppvObject);
2692 
2693     ULONG (STDMETHODCALLTYPE *AddRef)(
2694         IMFByteStreamBuffering *This);
2695 
2696     ULONG (STDMETHODCALLTYPE *Release)(
2697         IMFByteStreamBuffering *This);
2698 
2699     /*** IMFByteStreamBuffering methods ***/
2700     HRESULT (STDMETHODCALLTYPE *SetBufferingParams)(
2701         IMFByteStreamBuffering *This,
2702         MFBYTESTREAM_BUFFERING_PARAMS *pParams);
2703 
2704     HRESULT (STDMETHODCALLTYPE *EnableBuffering)(
2705         IMFByteStreamBuffering *This,
2706         WINBOOL fEnable);
2707 
2708     HRESULT (STDMETHODCALLTYPE *StopBuffering)(
2709         IMFByteStreamBuffering *This);
2710 
2711     END_INTERFACE
2712 } IMFByteStreamBufferingVtbl;
2713 
2714 interface IMFByteStreamBuffering {
2715     CONST_VTBL IMFByteStreamBufferingVtbl* lpVtbl;
2716 };
2717 
2718 #ifdef COBJMACROS
2719 #ifndef WIDL_C_INLINE_WRAPPERS
2720 /*** IUnknown methods ***/
2721 #define IMFByteStreamBuffering_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
2722 #define IMFByteStreamBuffering_AddRef(This) (This)->lpVtbl->AddRef(This)
2723 #define IMFByteStreamBuffering_Release(This) (This)->lpVtbl->Release(This)
2724 /*** IMFByteStreamBuffering methods ***/
2725 #define IMFByteStreamBuffering_SetBufferingParams(This,pParams) (This)->lpVtbl->SetBufferingParams(This,pParams)
2726 #define IMFByteStreamBuffering_EnableBuffering(This,fEnable) (This)->lpVtbl->EnableBuffering(This,fEnable)
2727 #define IMFByteStreamBuffering_StopBuffering(This) (This)->lpVtbl->StopBuffering(This)
2728 #else
2729 /*** IUnknown methods ***/
2730 static FORCEINLINE HRESULT IMFByteStreamBuffering_QueryInterface(IMFByteStreamBuffering* This,REFIID riid,void **ppvObject) {
2731     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
2732 }
2733 static FORCEINLINE ULONG IMFByteStreamBuffering_AddRef(IMFByteStreamBuffering* This) {
2734     return This->lpVtbl->AddRef(This);
2735 }
2736 static FORCEINLINE ULONG IMFByteStreamBuffering_Release(IMFByteStreamBuffering* This) {
2737     return This->lpVtbl->Release(This);
2738 }
2739 /*** IMFByteStreamBuffering methods ***/
2740 static FORCEINLINE HRESULT IMFByteStreamBuffering_SetBufferingParams(IMFByteStreamBuffering* This,MFBYTESTREAM_BUFFERING_PARAMS *pParams) {
2741     return This->lpVtbl->SetBufferingParams(This,pParams);
2742 }
2743 static FORCEINLINE HRESULT IMFByteStreamBuffering_EnableBuffering(IMFByteStreamBuffering* This,WINBOOL fEnable) {
2744     return This->lpVtbl->EnableBuffering(This,fEnable);
2745 }
2746 static FORCEINLINE HRESULT IMFByteStreamBuffering_StopBuffering(IMFByteStreamBuffering* This) {
2747     return This->lpVtbl->StopBuffering(This);
2748 }
2749 #endif
2750 #endif
2751 
2752 #endif
2753 
2754 
2755 #endif  /* __IMFByteStreamBuffering_INTERFACE_DEFINED__ */
2756 
2757 /*****************************************************************************
2758  * IMFClockStateSink interface
2759  */
2760 #ifndef __IMFClockStateSink_INTERFACE_DEFINED__
2761 #define __IMFClockStateSink_INTERFACE_DEFINED__
2762 
2763 DEFINE_GUID(IID_IMFClockStateSink, 0xf6696e82, 0x74f7, 0x4f3d, 0xa1,0x78, 0x8a,0x5e,0x09,0xc3,0x65,0x9f);
2764 #if defined(__cplusplus) && !defined(CINTERFACE)
2765 MIDL_INTERFACE("f6696e82-74f7-4f3d-a178-8a5e09c3659f")
2766 IMFClockStateSink : public IUnknown
2767 {
2768     virtual HRESULT STDMETHODCALLTYPE OnClockStart(
2769         MFTIME hnsSystemTime,
2770         LONGLONG llClockStartOffset) = 0;
2771 
2772     virtual HRESULT STDMETHODCALLTYPE OnClockStop(
2773         MFTIME hnsSystemTime) = 0;
2774 
2775     virtual HRESULT STDMETHODCALLTYPE OnClockPause(
2776         MFTIME hnsSystemTime) = 0;
2777 
2778     virtual HRESULT STDMETHODCALLTYPE OnClockRestart(
2779         MFTIME hnsSystemTime) = 0;
2780 
2781     virtual HRESULT STDMETHODCALLTYPE OnClockSetRate(
2782         MFTIME hnsSystemTime,
2783         float flRate) = 0;
2784 
2785 };
2786 #ifdef __CRT_UUID_DECL
2787 __CRT_UUID_DECL(IMFClockStateSink, 0xf6696e82, 0x74f7, 0x4f3d, 0xa1,0x78, 0x8a,0x5e,0x09,0xc3,0x65,0x9f)
2788 #endif
2789 #else
2790 typedef struct IMFClockStateSinkVtbl {
2791     BEGIN_INTERFACE
2792 
2793     /*** IUnknown methods ***/
2794     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
2795         IMFClockStateSink *This,
2796         REFIID riid,
2797         void **ppvObject);
2798 
2799     ULONG (STDMETHODCALLTYPE *AddRef)(
2800         IMFClockStateSink *This);
2801 
2802     ULONG (STDMETHODCALLTYPE *Release)(
2803         IMFClockStateSink *This);
2804 
2805     /*** IMFClockStateSink methods ***/
2806     HRESULT (STDMETHODCALLTYPE *OnClockStart)(
2807         IMFClockStateSink *This,
2808         MFTIME hnsSystemTime,
2809         LONGLONG llClockStartOffset);
2810 
2811     HRESULT (STDMETHODCALLTYPE *OnClockStop)(
2812         IMFClockStateSink *This,
2813         MFTIME hnsSystemTime);
2814 
2815     HRESULT (STDMETHODCALLTYPE *OnClockPause)(
2816         IMFClockStateSink *This,
2817         MFTIME hnsSystemTime);
2818 
2819     HRESULT (STDMETHODCALLTYPE *OnClockRestart)(
2820         IMFClockStateSink *This,
2821         MFTIME hnsSystemTime);
2822 
2823     HRESULT (STDMETHODCALLTYPE *OnClockSetRate)(
2824         IMFClockStateSink *This,
2825         MFTIME hnsSystemTime,
2826         float flRate);
2827 
2828     END_INTERFACE
2829 } IMFClockStateSinkVtbl;
2830 
2831 interface IMFClockStateSink {
2832     CONST_VTBL IMFClockStateSinkVtbl* lpVtbl;
2833 };
2834 
2835 #ifdef COBJMACROS
2836 #ifndef WIDL_C_INLINE_WRAPPERS
2837 /*** IUnknown methods ***/
2838 #define IMFClockStateSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
2839 #define IMFClockStateSink_AddRef(This) (This)->lpVtbl->AddRef(This)
2840 #define IMFClockStateSink_Release(This) (This)->lpVtbl->Release(This)
2841 /*** IMFClockStateSink methods ***/
2842 #define IMFClockStateSink_OnClockStart(This,hnsSystemTime,llClockStartOffset) (This)->lpVtbl->OnClockStart(This,hnsSystemTime,llClockStartOffset)
2843 #define IMFClockStateSink_OnClockStop(This,hnsSystemTime) (This)->lpVtbl->OnClockStop(This,hnsSystemTime)
2844 #define IMFClockStateSink_OnClockPause(This,hnsSystemTime) (This)->lpVtbl->OnClockPause(This,hnsSystemTime)
2845 #define IMFClockStateSink_OnClockRestart(This,hnsSystemTime) (This)->lpVtbl->OnClockRestart(This,hnsSystemTime)
2846 #define IMFClockStateSink_OnClockSetRate(This,hnsSystemTime,flRate) (This)->lpVtbl->OnClockSetRate(This,hnsSystemTime,flRate)
2847 #else
2848 /*** IUnknown methods ***/
2849 static FORCEINLINE HRESULT IMFClockStateSink_QueryInterface(IMFClockStateSink* This,REFIID riid,void **ppvObject) {
2850     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
2851 }
2852 static FORCEINLINE ULONG IMFClockStateSink_AddRef(IMFClockStateSink* This) {
2853     return This->lpVtbl->AddRef(This);
2854 }
2855 static FORCEINLINE ULONG IMFClockStateSink_Release(IMFClockStateSink* This) {
2856     return This->lpVtbl->Release(This);
2857 }
2858 /*** IMFClockStateSink methods ***/
2859 static FORCEINLINE HRESULT IMFClockStateSink_OnClockStart(IMFClockStateSink* This,MFTIME hnsSystemTime,LONGLONG llClockStartOffset) {
2860     return This->lpVtbl->OnClockStart(This,hnsSystemTime,llClockStartOffset);
2861 }
2862 static FORCEINLINE HRESULT IMFClockStateSink_OnClockStop(IMFClockStateSink* This,MFTIME hnsSystemTime) {
2863     return This->lpVtbl->OnClockStop(This,hnsSystemTime);
2864 }
2865 static FORCEINLINE HRESULT IMFClockStateSink_OnClockPause(IMFClockStateSink* This,MFTIME hnsSystemTime) {
2866     return This->lpVtbl->OnClockPause(This,hnsSystemTime);
2867 }
2868 static FORCEINLINE HRESULT IMFClockStateSink_OnClockRestart(IMFClockStateSink* This,MFTIME hnsSystemTime) {
2869     return This->lpVtbl->OnClockRestart(This,hnsSystemTime);
2870 }
2871 static FORCEINLINE HRESULT IMFClockStateSink_OnClockSetRate(IMFClockStateSink* This,MFTIME hnsSystemTime,float flRate) {
2872     return This->lpVtbl->OnClockSetRate(This,hnsSystemTime,flRate);
2873 }
2874 #endif
2875 #endif
2876 
2877 #endif
2878 
2879 
2880 #endif  /* __IMFClockStateSink_INTERFACE_DEFINED__ */
2881 
2882 HRESULT WINAPI MFRequireProtectedEnvironment(IMFPresentationDescriptor *pPresentationDescriptor);
2883 HRESULT WINAPI MFSerializePresentationDescriptor(IMFPresentationDescriptor *pPD,DWORD *pcbData,BYTE **ppbData);
2884 typedef DWORD MFSequencerElementId; /*Unknown type*/
2885 
2886 typedef enum MFCLOCK_CHARACTERISTICS_FLAGS {
2887   MFCLOCK_CHARACTERISTICS_FLAG_FREQUENCY_10MHZ   = 0x2,
2888   MFCLOCK_CHARACTERISTICS_FLAG_ALWAYS_RUNNING    = 0x4,
2889   MFCLOCK_CHARACTERISTICS_FLAG_IS_SYSTEM_CLOCK   = 0x8
2890 } MFCLOCK_CHARACTERISTICS_FLAGS;
2891 
2892 #if (WINVER >= 0x0601)
2893 
2894 typedef enum _MF_QUALITY_ADVISE_FLAGS {
2895   MF_QUALITY_CANNOT_KEEP_UP   = 0x1
2896 } MF_QUALITY_ADVISE_FLAGS;
2897 
2898 #endif /*(WINVER >= 0x0601)*/
2899 
2900 typedef enum _MF_QUALITY_DROP_MODE {
2901   MF_DROP_MODE_NONE   = 0x0,
2902   MF_DROP_MODE_1      = 0x1,
2903   MF_DROP_MODE_2      = 0x2,
2904   MF_DROP_MODE_3      = 0x3,
2905   MF_DROP_MODE_4      = 0x4,
2906   MF_DROP_MODE_5      = 0x5,
2907   MF_NUM_DROP_MODES   = 0x6
2908 } MF_QUALITY_DROP_MODE;
2909 
2910 typedef enum _MF_QUALITY_LEVEL {
2911   MF_QUALITY_NORMAL           = 0x0,
2912   MF_QUALITY_NORMAL_MINUS_1   = 0x1,
2913   MF_QUALITY_NORMAL_MINUS_2   = 0x2,
2914   MF_QUALITY_NORMAL_MINUS_3   = 0x3,
2915   MF_QUALITY_NORMAL_MINUS_4   = 0x4,
2916   MF_QUALITY_NORMAL_MINUS_5   = 0x5,
2917   MF_NUM_QUALITY_LEVELS       = 0x6
2918 } MF_QUALITY_LEVEL;
2919 
2920 typedef enum MF_SOURCE_READER_CONTROL_FLAG {
2921   MF_SOURCE_READER_CONTROLF_DRAIN   = 0x00000001
2922 } MF_SOURCE_READER_CONTROL_FLAG;
2923 
2924 typedef enum _MF_TOPOLOGY_RESOLUTION_STATUS_FLAGS {
2925   MF_TOPOLOGY_RESOLUTION_SUCCEEDED              = 0x00000000,
2926   MF_OPTIONAL_NODE_REJECTED_MEDIA_TYPE          = 0x00000001,
2927   MF_OPTIONAL_NODE_REJECTED_PROTECTED_PROCESS   = 0x00000002
2928 } MF_TOPOLOGY_RESOLUTION_STATUS_FLAGS;
2929 
2930 typedef enum _MF_TOPONODE_DRAIN_MODE {
2931   MF_TOPONODE_DRAIN_DEFAULT,
2932   MF_TOPONODE_DRAIN_ALWAYS,
2933   MF_TOPONODE_DRAIN_NEVER
2934 } MF_TOPONODE_DRAIN_MODE;
2935 
2936 typedef enum _MF_TOPONODE_FLUSH_MODE {
2937   MF_TOPONODE_FLUSH_ALWAYS,
2938   MF_TOPONODE_FLUSH_SEEK,
2939   MF_TOPONODE_FLUSH_NEVER
2940 } MF_TOPONODE_FLUSH_MODE;
2941 
2942 #if (WINVER >= 0x0601)
2943 
2944 typedef enum _MF_TRANSCODE_TOPOLOGY_MODE_FLAGS {
2945   MF_TRANSCODE_TOPOLOGYMODE_SOFTWARE_ONLY      = 0,
2946   MF_TRANSCODE_TOPOLOGYMODE_HARDWARE_ALLOWED   = 1
2947 } MF_TRANSCODE_TOPOLOGYMODE_FLAGS;
2948 
2949 #endif
2950 
2951 typedef enum  {
2952   MF_LICENSE_URL_UNTRUSTED,
2953   MF_LICENSE_URL_TRUSTED,
2954   MF_LICENSE_URL_TAMPERED
2955 } MF_URL_TRUST_STATUS;
2956 
2957 typedef enum MFASF_INDEXERFLAGS {
2958   MFASF_INDEXER_WRITE_NEW_INDEX            = 0x00000001,
2959   MFASF_INDEXER_READ_FOR_REVERSEPLAYBACK   = 0x00000004,
2960   MFASF_INDEXER_WRITE_FOR_LIVEREAD         = 0x00000008
2961 } MFASF_INDEXERFLAGS;
2962 
2963 typedef enum _MFCLOCK_RELATIONAL_FLAGS {
2964   MFCLOCK_RELATIONAL_FLAG_JITTER_NEVER_AHEAD   = 0x1
2965 } MFCLOCK_RELATIONAL_FLAGS;
2966 
2967 typedef enum _MFMEDIASOURCE_CHARACTERISTICS {
2968   MFMEDIASOURCE_IS_LIVE                      = 0x1,
2969   MFMEDIASOURCE_CAN_SEEK                     = 0x2,
2970   MFMEDIASOURCE_CAN_PAUSE                    = 0x4,
2971   MFMEDIASOURCE_HAS_SLOW_SEEK                = 0x8,
2972   MFMEDIASOURCE_HAS_MULTIPLE_PRESENTATIONS   = 0x10,
2973   MFMEDIASOURCE_CAN_SKIPFORWARD              = 0x20,
2974   MFMEDIASOURCE_CAN_SKIPBACKWARD             = 0x40
2975 } MFMEDIASOURCE_CHARACTERISTICS;
2976 
2977 typedef enum _MFNET_PROXYSETTINGS {
2978   MFNET_PROXYSETTING_NONE      = 0,
2979   MFNET_PROXYSETTING_MANUAL    = 1,
2980   MFNET_PROXYSETTING_AUTO      = 2,
2981   MFNET_PROXYSETTING_BROWSER   = 3
2982 } MFNET_PROXYSETTINGS;
2983 
2984 typedef enum _MFNetAuthenticationFlags {
2985   MFNET_AUTHENTICATION_PROXY            = 0x00000001,
2986   MFNET_AUTHENTICATION_CLEAR_TEXT       = 0x00000002,
2987   MFNET_AUTHENTICATION_LOGGED_ON_USER
2988 } MFNetAuthenticationFlags;
2989 
2990 typedef enum _MFNetCredentialOptions {
2991   MFNET_CREDENTIAL_SAVE               = 0x00000001,
2992   MFNET_CREDENTIAL_DONT_CACHE         = 0x00000002,
2993   MFNET_CREDENTIAL_ALLOW_CLEAR_TEXT   = 0x00000004
2994 } MFNetCredentialOptions;
2995 
2996 typedef enum _MFNetCredentialRequirements {
2997   REQUIRE_PROMPT          = 0x00000001,
2998   REQUIRE_SAVE_SELECTED   = 0x00000002
2999 } MFNetCredentialRequirements;
3000 
3001 typedef enum _MFNETSOURCE_CACHE_STATE {
3002   MFNETSOURCE_CACHE_UNAVAILABLE,
3003   MFNETSOURCE_CACHE_ACTIVE_WRITING,
3004   MFNETSOURCE_CACHE_ACTIVE_COMPLETE
3005 } MFNETSOURCE_CACHE_STATE;
3006 
3007 typedef enum _MFNETSOURCE_PROTOCOL_TYPE {
3008   MFNETSOURCE_UNDEFINED   = 0x0,
3009   MFNETSOURCE_HTTP        = 0x1,
3010   MFNETSOURCE_RTSP        = 0x2,
3011   MFNETSOURCE_FILE        = 0x3,
3012   MFNETSOURCE_MULTICAST   = 0x4
3013 } MFNETSOURCE_PROTOCOL_TYPE;
3014 
3015 typedef enum _MFNETSOURCE_STATISTICS_IDS {
3016   MFNETSOURCE_RECVPACKETS_ID                = 0,
3017   MFNETSOURCE_LOSTPACKETS_ID,
3018   MFNETSOURCE_RESENDSREQUESTED_ID,
3019   MFNETSOURCE_RESENDSRECEIVED_ID,
3020   MFNETSOURCE_RECOVEREDBYECCPACKETS_ID,
3021   MFNETSOURCE_RECOVEREDBYRTXPACKETS_ID,
3022   MFNETSOURCE_OUTPACKETS_ID,
3023   MFNETSOURCE_RECVRATE_ID,
3024   MFNETSOURCE_AVGBANDWIDTHBPS_ID,
3025   MFNETSOURCE_BYTESRECEIVED_ID,
3026   MFNETSOURCE_PROTOCOL_ID,
3027   MFNETSOURCE_TRANSPORT_ID,
3028   MFNETSOURCE_CACHE_STATE_ID,
3029   MFNETSOURCE_LINKBANDWIDTH_ID,
3030   MFNETSOURCE_CONTENTBITRATE_ID,
3031   MFNETSOURCE_SPEEDFACTOR_ID,
3032   MFNETSOURCE_BUFFERSIZE_ID,
3033   MFNETSOURCE_BUFFERPROGRESS_ID,
3034   MFNETSOURCE_LASTBWSWITCHTS_ID,
3035   MFNETSOURCE_SEEKRANGESTART_ID,
3036   MFNETSOURCE_SEEKRANGEEND_ID,
3037   MFNETSOURCE_BUFFERINGCOUNT_ID,
3038   MFNETSOURCE_INCORRECTLYSIGNEDPACKETS_ID,
3039   MFNETSOURCE_SIGNEDSESSION_ID,
3040   MFNETSOURCE_MAXBITRATE_ID,
3041   MFNETSOURCE_RECEPTION_QUALITY_ID,
3042   MFNETSOURCE_RECOVEREDPACKETS_ID,
3043   MFNETSOURCE_VBR_ID,
3044   MFNETSOURCE_DOWNLOADPROGRESS_ID
3045 } MFNETSOURCE_STATISTICS_IDS;
3046 
3047 typedef enum _MFNETSOURCE_TRANSPORT_TYPE {
3048   MFNETSOURCE_UDP,
3049   MFNETSOURCE_TCP
3050 } MFNETSOURCE_TRANSPORT_TYPE;
3051 
3052 typedef enum MF_OBJECT_TYPE {
3053   MF_OBJECT_MEDIASOURCE,
3054   MF_OBJECT_BYTESTREAM,
3055   MF_OBJECT_INVALID
3056 } MF_OBJECT_TYPE;
3057 
3058 typedef enum _MFPOLICYMANAGER_ACTION {
3059   PEACTION_NO          = 0,
3060   PEACTION_PLAY        = 1,
3061   PEACTION_COPY        = 2,
3062   PEACTION_EXPORT      = 3,
3063   PEACTION_EXTRACT     = 4,
3064   PEACTION_RESERVED1   = 5,
3065   PEACTION_RESERVED2   = 6,
3066   PEACTION_RESERVED3   = 7,
3067   PEACTION_LAST        = 7
3068 } MFPOLICYMANAGER_ACTION;
3069 
3070 typedef enum _MFRATE_DIRECTION {
3071   MFRATE_FORWARD,
3072   MFRATE_REVERSE
3073 } MFRATE_DIRECTION;
3074 
3075 typedef enum _MFSequencerTopologyFlags {
3076   SequencerTopologyFlags_Last   = 0x00000001
3077 } MFSequencerTopologyFlags;
3078 
3079 typedef enum _MFSHUTDOWN_STATUS {
3080   MFSHUTDOWN_INITIATED,
3081   MFSHUTDOWN_COMPLETED
3082 } MFSHUTDOWN_STATUS;
3083 
3084 typedef enum _MFSINK_WMDRMACTION {
3085   MFSINK_WMDRMACTION_UNDEFINED    = 0,
3086   MFSINK_WMDRMACTION_ENCODE       = 1,
3087   MFSINK_WMDRMACTION_TRANSCODE    = 2,
3088   MFSINK_WMDRMACTION_TRANSCRYPT   = 3,
3089   MFSINK_WMDRMACTION_LAST         = 3
3090 } MFSINK_WMDRMACTION;
3091 
3092 typedef enum MFSTREAMSINK_MARKER_TYPE {
3093   MFSTREAMSINK_MARKER_DEFAULT,
3094   MFSTREAMSINK_MARKER_ENDOFSEGMENT,
3095   MFSTREAMSINK_MARKER_TICK,
3096   MFSTREAMSINK_MARKER_EVENT
3097 } MFSTREAMSINK_MARKER_TYPE;
3098 
3099 typedef enum MFTIMER_FLAGS {
3100   MFTIMER_RELATIVE   = 0x00000001
3101 } MFTIMER_FLAGS;
3102 
3103 #if (WINVER >= 0x0601)
3104 
3105 typedef enum MFTOPLOGY_DXVA_MODE {
3106   MFTOPOLOGY_DXVA_DEFAULT   = 0,
3107   MFTOPOLOGY_DXVA_NONE      = 1,
3108   MFTOPOLOGY_DXVA_FULL      = 2
3109 } MFTOPOLOGY_DXVA_MODE;
3110 
3111 typedef enum MFTOPOLOGY_HARDWARE_MODE {
3112   MFTOPOLOGY_HWMODE_SOFTWARE_ONLY   = 0,
3113   MFTOPOLOGY_HWMODE_USE_HARDWARE    = 1
3114 } MFTOPOLOGY_HARDWARE_MODE;
3115 
3116 typedef struct _MFT_REGISTRATION_INFO {
3117   CLSID                  clsid;
3118   GUID                   guidCategory;
3119   UINT32                 uiFlags;
3120   LPCWSTR                pszName;
3121   DWORD                  cInTypes;
3122   MFT_REGISTER_TYPE_INFO *pInTypes;
3123   DWORD                  cOutTypes;
3124   MFT_REGISTER_TYPE_INFO *pOutTypes;
3125 } MFT_REGISTRATION_INFO;
3126 
3127 #endif /*(WINVER >= 0x0601)*/
3128 
3129 typedef struct _ASFFlatPicture {
3130   BYTE  bPictureType;
3131   DWORD dwDataLen;
3132 } ASF_FLAT_PICTURE;
3133 
3134 typedef struct _ASFFlatSynchronisedLyrics {
3135   BYTE  bTimeStampFormat;
3136   BYTE  bContentType;
3137   DWORD dwLyricsLen;
3138 } ASF_FLAT_SYNCHRONISED_LYRICS;
3139 
3140 typedef enum SAMPLE_PROTECTION_VERSION {
3141   SAMPLE_PROTECTION_VERSION_NO           = 0,
3142   SAMPLE_PROTECTION_VERSION_BASIC_LOKI   = 1,
3143   SAMPLE_PROTECTION_VERSION_SCATTER      = 2,
3144   SAMPLE_PROTECTION_VERSION_RC4          = 3
3145 } SAMPLE_PROTECTION_VERSION;
3146 
3147 typedef struct _MFINPUTTRUSTAUTHORITY_ACTION {
3148   MFPOLICYMANAGER_ACTION Action;
3149   BYTE                   *pbTicket;
3150   DWORD                  cbTicket;
3151 } MFINPUTTRUSTAUTHORITY_ACCESS_ACTION;
3152 
3153 typedef struct _MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS {
3154   DWORD                               dwSize;
3155   DWORD                               dwVer;
3156   DWORD                               cbSignatureOffset;
3157   DWORD                               cbSignatureSize;
3158   DWORD                               cbExtensionOffset;
3159   DWORD                               cbExtensionSize;
3160   DWORD                               cActions;
3161   MFINPUTTRUSTAUTHORITY_ACCESS_ACTION rgOutputActions[1];
3162 } MFINPUTTRUSTAUTHORITY_ACCESS_PARAMS;
3163 
3164 typedef struct _MFNetCredentialManagerGetParam {
3165   HRESULT hrOp;
3166   WINBOOL    fAllowLoggedOnUser;
3167   WINBOOL    fClearTextPackage;
3168   LPCWSTR pszUrl;
3169   LPCWSTR pszSite;
3170   LPCWSTR pszRealm;
3171   LPCWSTR pszPackage;
3172   LONG    nRetries;
3173 } MFNetCredentialManagerGetParam;
3174 
3175 #define MF_1_BYTE_ALIGNMENT     0x00000000
3176 #define MF_2_BYTE_ALIGNMENT     0x00000001
3177 #define MF_4_BYTE_ALIGNMENT     0x00000003
3178 #define MF_8_BYTE_ALIGNMENT     0x00000007
3179 #define MF_16_BYTE_ALIGNMENT    0x0000000F
3180 #define MF_32_BYTE_ALIGNMENT    0x0000001F
3181 #define MF_64_BYTE_ALIGNMENT    0x0000003F
3182 #define MF_128_BYTE_ALIGNMENT   0x0000007F
3183 #define MF_256_BYTE_ALIGNMENT   0x000000FF
3184 #define MF_512_BYTE_ALIGNMENT   0x000001FF
3185 
3186 #define MEDIASINK_FIXED_STREAMS                 0x00000001
3187 #define MEDIASINK_CANNOT_MATCH_CLOCK            0x00000002
3188 #define MEDIASINK_RATELESS                      0x00000004
3189 #define MEDIASINK_CLOCK_REQUIRED                0x00000008
3190 #define MEDIASINK_CAN_PREROLL                   0x00000010
3191 #define MEDIASINK_REQUIRE_REFERENCE_MEDIATYPE   0x00000020
3192 
3193 #define MF_RESOLUTION_MEDIASOURCE                                           0x00000001
3194 #define MF_RESOLUTION_BYTESTREAM                                            0x00000002
3195 #define MF_RESOLUTION_CONTENT_DOES_NOT_HAVE_TO_MATCH_EXTENSION_OR_MIME_TYPE 0x00000010
3196 #define MF_RESOLUTION_KEEP_BYTE_STREAM_ALIVE_ON_FAIL                        0x00000020
3197 #define MF_RESOLUTION_READ                                                  0x00010000
3198 #define MF_RESOLUTION_WRITE                                                 0x00020000
3199 #ifndef __IMFMediaSink_FWD_DEFINED__
3200 #define __IMFMediaSink_FWD_DEFINED__
3201 typedef interface IMFMediaSink IMFMediaSink;
3202 #ifdef __cplusplus
3203 interface IMFMediaSink;
3204 #endif /* __cplusplus */
3205 #endif
3206 
3207 #ifndef __IMFASFContentInfo_FWD_DEFINED__
3208 #define __IMFASFContentInfo_FWD_DEFINED__
3209 typedef interface IMFASFContentInfo IMFASFContentInfo;
3210 #ifdef __cplusplus
3211 interface IMFASFContentInfo;
3212 #endif /* __cplusplus */
3213 #endif
3214 
3215 #ifndef __IMFASFIndexer_FWD_DEFINED__
3216 #define __IMFASFIndexer_FWD_DEFINED__
3217 typedef interface IMFASFIndexer IMFASFIndexer;
3218 #ifdef __cplusplus
3219 interface IMFASFIndexer;
3220 #endif /* __cplusplus */
3221 #endif
3222 
3223 #ifndef __IMFASFMultiplexer_FWD_DEFINED__
3224 #define __IMFASFMultiplexer_FWD_DEFINED__
3225 typedef interface IMFASFMultiplexer IMFASFMultiplexer;
3226 #ifdef __cplusplus
3227 interface IMFASFMultiplexer;
3228 #endif /* __cplusplus */
3229 #endif
3230 
3231 #ifndef __IMFASFProfile_FWD_DEFINED__
3232 #define __IMFASFProfile_FWD_DEFINED__
3233 typedef interface IMFASFProfile IMFASFProfile;
3234 #ifdef __cplusplus
3235 interface IMFASFProfile;
3236 #endif /* __cplusplus */
3237 #endif
3238 
3239 #ifndef __IMFASFSplitter_FWD_DEFINED__
3240 #define __IMFASFSplitter_FWD_DEFINED__
3241 typedef interface IMFASFSplitter IMFASFSplitter;
3242 #ifdef __cplusplus
3243 interface IMFASFSplitter;
3244 #endif /* __cplusplus */
3245 #endif
3246 
3247 #ifndef __IMFPMPServer_FWD_DEFINED__
3248 #define __IMFPMPServer_FWD_DEFINED__
3249 typedef interface IMFPMPServer IMFPMPServer;
3250 #ifdef __cplusplus
3251 interface IMFPMPServer;
3252 #endif /* __cplusplus */
3253 #endif
3254 
3255 #ifndef __IMFPresentationClock_FWD_DEFINED__
3256 #define __IMFPresentationClock_FWD_DEFINED__
3257 typedef interface IMFPresentationClock IMFPresentationClock;
3258 #ifdef __cplusplus
3259 interface IMFPresentationClock;
3260 #endif /* __cplusplus */
3261 #endif
3262 
3263 #ifndef __IMFNetProxyLocator_FWD_DEFINED__
3264 #define __IMFNetProxyLocator_FWD_DEFINED__
3265 typedef interface IMFNetProxyLocator IMFNetProxyLocator;
3266 #ifdef __cplusplus
3267 interface IMFNetProxyLocator;
3268 #endif /* __cplusplus */
3269 #endif
3270 
3271 #ifndef __IMFRemoteDesktopPlugin_FWD_DEFINED__
3272 #define __IMFRemoteDesktopPlugin_FWD_DEFINED__
3273 typedef interface IMFRemoteDesktopPlugin IMFRemoteDesktopPlugin;
3274 #ifdef __cplusplus
3275 interface IMFRemoteDesktopPlugin;
3276 #endif /* __cplusplus */
3277 #endif
3278 
3279 #ifndef __IMFTransform_FWD_DEFINED__
3280 #define __IMFTransform_FWD_DEFINED__
3281 typedef interface IMFTransform IMFTransform;
3282 #ifdef __cplusplus
3283 interface IMFTransform;
3284 #endif /* __cplusplus */
3285 #endif
3286 
3287 #ifndef __IMFSampleGrabberSinkCallback_FWD_DEFINED__
3288 #define __IMFSampleGrabberSinkCallback_FWD_DEFINED__
3289 typedef interface IMFSampleGrabberSinkCallback IMFSampleGrabberSinkCallback;
3290 #ifdef __cplusplus
3291 interface IMFSampleGrabberSinkCallback;
3292 #endif /* __cplusplus */
3293 #endif
3294 
3295 #ifndef __IMFSequencerSource_FWD_DEFINED__
3296 #define __IMFSequencerSource_FWD_DEFINED__
3297 typedef interface IMFSequencerSource IMFSequencerSource;
3298 #ifdef __cplusplus
3299 interface IMFSequencerSource;
3300 #endif /* __cplusplus */
3301 #endif
3302 
3303 #ifndef __IMFQualityManager_FWD_DEFINED__
3304 #define __IMFQualityManager_FWD_DEFINED__
3305 typedef interface IMFQualityManager IMFQualityManager;
3306 #ifdef __cplusplus
3307 interface IMFQualityManager;
3308 #endif /* __cplusplus */
3309 #endif
3310 
3311 #ifndef __IMFSourceResolver_FWD_DEFINED__
3312 #define __IMFSourceResolver_FWD_DEFINED__
3313 typedef interface IMFSourceResolver IMFSourceResolver;
3314 #ifdef __cplusplus
3315 interface IMFSourceResolver;
3316 #endif /* __cplusplus */
3317 #endif
3318 
3319 #ifndef __IMFPresentationTimeSource_FWD_DEFINED__
3320 #define __IMFPresentationTimeSource_FWD_DEFINED__
3321 typedef interface IMFPresentationTimeSource IMFPresentationTimeSource;
3322 #ifdef __cplusplus
3323 interface IMFPresentationTimeSource;
3324 #endif /* __cplusplus */
3325 #endif
3326 
3327 #ifndef __IMFTopoLoader_FWD_DEFINED__
3328 #define __IMFTopoLoader_FWD_DEFINED__
3329 typedef interface IMFTopoLoader IMFTopoLoader;
3330 #ifdef __cplusplus
3331 interface IMFTopoLoader;
3332 #endif /* __cplusplus */
3333 #endif
3334 
3335 #ifndef __IMFTranscodeProfile_FWD_DEFINED__
3336 #define __IMFTranscodeProfile_FWD_DEFINED__
3337 typedef interface IMFTranscodeProfile IMFTranscodeProfile;
3338 #ifdef __cplusplus
3339 interface IMFTranscodeProfile;
3340 #endif /* __cplusplus */
3341 #endif
3342 
3343 HRESULT MFCreate3GPMediaSink(IMFByteStream *pIByteStream,IMFMediaType *pVideoMediaType,IMFMediaType *pAudioMediaType,IMFMediaSink **ppIMediaSink);
3344 HRESULT MFCreateAggregateSource(IMFCollection *pSourceCollection,IMFMediaSource **ppAggSource);
3345 
3346 HRESULT WINAPI MFCreateAlignedMemoryBuffer(DWORD cbMaxLength,DWORD fAlignmentFlags,IMFMediaBuffer **ppBuffer);
3347 HRESULT WINAPI MFCreateASFContentInfo(IMFASFContentInfo **ppIContentInfo);
3348 HRESULT WINAPI MFCreateASFIndexer(IMFASFIndexer **ppIIndexer);
3349 HRESULT WINAPI MFCreateASFIndexerByteStream(IMFByteStream *pIContentByteStream,QWORD cbIndexStartOffset,IMFByteStream **pIIndexByteStream);
3350 HRESULT WINAPI MFCreateASFMediaSink(IMFByteStream *pIByteStream,IMFMediaSink **ppIMediaSink);
3351 HRESULT WINAPI MFCreateASFMediaSinkActivate(LPCWSTR pwszFileName,IMFASFContentInfo *pContentInfo,IMFActivate **ppIActivate);
3352 HRESULT WINAPI MFCreateASFMultiplexer(IMFASFMultiplexer **ppIMultiplexer);
3353 HRESULT WINAPI MFCreateASFProfile(IMFASFProfile **ppIProfile);
3354 HRESULT WINAPI MFCreateASFProfileFromPresentationDescriptor(IMFPresentationDescriptor *pIPD,IMFASFProfile **ppIProfile);
3355 HRESULT WINAPI MFCreateASFSplitter(IMFASFSplitter **ppISplitter);
3356 HRESULT WINAPI MFCreateMediaSession(IMFAttributes *pConfiguration,IMFMediaSession **ppMS);
3357 HRESULT WINAPI MFCreateMP3MediaSink(IMFByteStream *pTargetByteStream,IMFMediaSink **ppMediaSink);
3358 HRESULT WINAPI MFCreateMPEG4MediaSink(IMFByteStream *pIByteStream,IMFMediaType *pVideoMediaType,IMFMediaType *pAudioMediaType,IMFMediaSink **ppIMediaSink);
3359 HRESULT WINAPI MFCreateNetSchemePlugin(REFIID riid,LPVOID *ppvHandler);
3360 HRESULT WINAPI MFCreatePMPServer(DWORD dwCreationFlags,IMFPMPServer **ppPMPServer);
3361 HRESULT WINAPI MFCreatePMPMediaSession(DWORD dwCreationFlags,IMFAttributes *pConfiguration,IMFMediaSession **ppMediaSession,IMFActivate **ppEnablerActivate);
3362 HRESULT WINAPI MFCreatePathFromURL(LPCWSTR pwszFileURL,LPWSTR *ppwszFilePath);
3363 HRESULT WINAPI MFCreatePresentationClock(IMFPresentationClock **ppPresentationClock);
3364 HRESULT WINAPI MFCreatePresentationDescriptor(DWORD cStreamDescriptors,IMFStreamDescriptor **apStreamDescriptors,IMFPresentationDescriptor **ppPresentationDescriptor);
3365 HRESULT WINAPI MFCreatePresentationDescriptorFromASFProfile(IMFASFProfile *pIProfile,IMFPresentationDescriptor **ppIPD);
3366 HRESULT WINAPI MFCreateProxyLocator(LPCWSTR pszProtocol,IPropertyStore *pProxyConfig,IMFNetProxyLocator **ppProxyLocator);
3367 HRESULT WINAPI MFCreateRemoteDesktopPlugin(IMFRemoteDesktopPlugin **ppPlugin);
3368 HRESULT WINAPI MFCreateSample(IMFSample **ppIMFSample);
3369 HRESULT WINAPI MFCreateSampleCopierMFT(IMFTransform **ppCopierMFT);
3370 HRESULT WINAPI MFCreateSampleGrabberSinkActivate(IMFMediaType *pIMFMediaType,IMFSampleGrabberSinkCallback *pIMFSampleGrabberSinkCallback,IMFActivate **ppIActivate);
3371 HRESULT WINAPI MFCreateSequencerSource(IUnknown *pReserved,IMFSequencerSource **ppSequencerSource);
3372 HRESULT WINAPI MFCreateSimpleTypeHandler(IMFMediaTypeHandler **ppHandler);
3373 HRESULT WINAPI MFCreateStandardQualityManager(IMFQualityManager **ppQualityManager);
3374 HRESULT WINAPI MFCreateStreamDescriptor(DWORD dwStreamIdentifier,DWORD cMediaTypes,IMFMediaType **apMediaTypes,IMFStreamDescriptor **ppDescriptor);
3375 HRESULT WINAPI MFCreateSourceResolver(IMFSourceResolver **ppISourceResolver);
3376 HRESULT WINAPI MFCreateSystemTimeSource(IMFPresentationTimeSource **ppSystemTimeSource);
3377 HRESULT WINAPI MFCreateTopoLoader(IMFTopoLoader **ppObj);
3378 HRESULT WINAPI MFCreateTopology(IMFTopology **ppTopo);
3379 HRESULT WINAPI MFCreateTopologyNode(MF_TOPOLOGY_TYPE NodeType,IMFTopologyNode **ppNode);
3380 HRESULT WINAPI MFCreateVideoRenderer(REFIID riidRenderer,void **ppVideoRenderer);
3381 HRESULT WINAPI MFCreateVideoRendererActivate(HWND hwndVideo,IMFActivate **ppActivate);
3382 HRESULT WINAPI MFGetService(IUnknown *punkObject,REFGUID guidService,REFIID riid,LPVOID *ppvObject);
3383 HRESULT WINAPI MFGetSupportedMimeTypes(PROPVARIANT *pPropVarMimeTypeArray);
3384 HRESULT WINAPI MFGetSupportedSchemes(PROPVARIANT *pPropVarSchemeArray);
3385 MFTIME WINAPI MFGetSystemTime(void);
3386 HRESULT WINAPI MFShutdownObject(IUnknown *pUnk);
3387 HRESULT WINAPI CreateNamedPropertyStore(INamedPropertyStore **ppStore);
3388 HRESULT WINAPI CreatePropertyStore(IPropertyStore **ppStore);
3389 #if (WINVER >= 0x0601)
3390 
3391 HRESULT WINAPI MFCreateTranscodeProfile(IMFTranscodeProfile **ppTranscodeProfile);
3392 HRESULT WINAPI MFCreateTranscodeSinkActivate(IMFActivate **ppActivate);
3393 HRESULT WINAPI MFCreateTranscodeTopology(IMFMediaSource *pSrc,LPCWSTR pwszOutputFilePath,IMFTranscodeProfile *pProfile,IMFTopology **ppTranscodeTopo);
3394 HRESULT WINAPI MFEnumDeviceSources(IMFAttributes *pAttributes,IMFActivate ***pppSourceActivate,UINT32 *pcSourceActivate);
3395 HRESULT WINAPI MFGetTopoNodeCurrentType(IMFTopologyNode *pNode,DWORD dwStreamIndex,WINBOOL fOutput,IMFMediaType **ppType);
3396 HRESULT WINAPI MFTranscodeGetAudioOutputAvailableTypes(REFGUID guidSubType,DWORD dwMFTFlags,IMFAttributes *pCodecConfig,IMFCollection **ppAvailableTypes);
3397 #endif
3398 EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME, 0x60d0e559,0x52f8,0x4fa2,0xbb,0xce,0xac,0xdb,0x34,0xa8,0xec,0x1);
3399 EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE, 0x56a819ca,0xc78,0x4de4,0xa0,0xa7,0x3d,0xda,0xba,0xf,0x24,0xd4);
3400 EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID, 0x30da9258,0xfeb9,0x47a7,0xa4,0x53,0x76,0x3a,0x7a,0x8e,0x1c,0x5f);
3401 EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE, 0xbc9d118e,0x8c67,0x4a18,0x85,0xd4,0x12,0xd3,0x0,0x40,0x5,0x52);
3402 EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY, 0x77f0ae69,0xc3bd,0x4509,0x94,0x1d,0x46,0x7e,0x4d,0x24,0x89,0x9e);
3403 EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE, 0xde7046ba,0x54d6,0x4487,0xa2,0xa4,0xec,0x7c,0xd,0x1b,0xd1,0x63);
3404 EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_MAX_BUFFERS, 0x7dd9b730,0x4f2d,0x41d5,0x8f,0x95,0xc,0xc9,0xa9,0x12,0xba,0x26);
3405 EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK, 0x58f0aad8,0x22bf,0x4f8a,0xbb,0x3d,0xd2,0xc4,0x97,0x8c,0x6e,0x2f);
3406 EXTERN_GUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID, 0x8ac3587a, 0x4ae7, 0x42d8, 0x99, 0xe0, 0x0a, 0x60, 0x13, 0xee, 0xf9, 0x0f);
3407 /* Begin additional prototypes for all interfaces */
3408 
3409 ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
3410 unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
3411 unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
3412 void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
3413 ULONG           __RPC_USER LPSAFEARRAY_UserSize     (ULONG *, ULONG, LPSAFEARRAY *);
3414 unsigned char * __RPC_USER LPSAFEARRAY_UserMarshal  (ULONG *, unsigned char *, LPSAFEARRAY *);
3415 unsigned char * __RPC_USER LPSAFEARRAY_UserUnmarshal(ULONG *, unsigned char *, LPSAFEARRAY *);
3416 void            __RPC_USER LPSAFEARRAY_UserFree     (ULONG *, LPSAFEARRAY *);
3417 
3418 /* End additional prototypes */
3419 
3420 #ifdef __cplusplus
3421 }
3422 #endif
3423 
3424 #endif /* __mfidl_h__ */
3425