1 /*** Autogenerated by WIDL 1.6 from include/mfreadwrite.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 __mfreadwrite_h__
16 #define __mfreadwrite_h__
17 
18 /* Forward declarations */
19 
20 #ifndef __IMFSourceReader_FWD_DEFINED__
21 #define __IMFSourceReader_FWD_DEFINED__
22 typedef interface IMFSourceReader IMFSourceReader;
23 #endif
24 
25 #ifndef __IMFSinkWriter_FWD_DEFINED__
26 #define __IMFSinkWriter_FWD_DEFINED__
27 typedef interface IMFSinkWriter IMFSinkWriter;
28 #endif
29 
30 #ifndef __IMFSourceReaderCallback_FWD_DEFINED__
31 #define __IMFSourceReaderCallback_FWD_DEFINED__
32 typedef interface IMFSourceReaderCallback IMFSourceReaderCallback;
33 #endif
34 
35 /* Headers for imported files */
36 
37 #include <mfobjects.h>
38 
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43 EXTERN_GUID(MF_SOURCE_READER_ASYNC_CALLBACK, 0x1e3dbeac,0xbb43,0x4c35,0xb5,0x07,0xcd,0x64,0x44,0x64,0xc9,0x65);
44 EXTERN_GUID(MF_SOURCE_READER_D3D_MANAGER, 0xec822da2,0xe1e9,0x4b29,0xa0,0xd8,0x56,0x3c,0x71,0x9f,0x52,0x69);
45 EXTERN_GUID(MF_SOURCE_READER_DISABLE_DXVA, 0xaa456cfd,0x3943,0x4a1e,0xa7,0x7d,0x18,0x38,0xc0,0xea,0x2e,0x35);
46 EXTERN_GUID(MF_SOURCE_READER_MEDIASOURCE_CONFIG, 0x9085abeb,0x0354,0x48f9,0xab,0xb5,0x20,0x0d,0xf8,0x38,0xc6,0x8e);
47 EXTERN_GUID(MF_SOURCE_READER_MEDIASOURCE_CHARACTERISTICS, 0x6d23f5c8,0xc5d7,0x4a9b,0x99,0x71,0x5d,0x11,0xf8,0xbc,0xa8,0x80);
48 EXTERN_GUID(MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING, 0xfb394f3d,0xccf1,0x42ee,0xbb,0xb3,0xf9,0xb8,0x45,0xd5,0x68,0x1d);
49 EXTERN_GUID(MF_SOURCE_READER_DISCONNECT_MEDIASOURCE_ON_SHUTDOWN, 0x56b67165,0x219e,0x456d,0xa2,0x2e,0x2d,0x30,0x04,0xc7,0xfe,0x56);
50 typedef enum MF_SOURCE_READER_FLAG {
51     MF_SOURCE_READERF_ERROR = 0x1,
52     MF_SOURCE_READERF_ENDOFSTREAM = 0x2,
53     MF_SOURCE_READERF_NEWSTREAM = 0x4,
54     MF_SOURCE_READERF_NATIVEMEDIATYPECHANGED = 0x10,
55     MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED = 0x20,
56     MF_SOURCE_READERF_STREAMTICK = 0x100
57 } MF_SOURCE_READER_FLAG;
58 typedef struct _MF_SINK_WRITER_STATISTICS {
59     DWORD cb;
60     LONGLONG llLastTimestampReceived;
61     LONGLONG llLastTimestampEncoded;
62     LONGLONG llLastTimestampProcessed;
63     LONGLONG llLastStreamTickReceived;
64     LONGLONG llLastSinkSampleRequest;
65     QWORD qwNumSamplesReceived;
66     QWORD qwNumSamplesEncoded;
67     QWORD qwNumSamplesProcessed;
68     QWORD qwNumStreamTicksReceived;
69     DWORD dwByteCountQueued;
70     QWORD qwByteCountProcessed;
71     DWORD dwNumOutstandingSinkSampleRequests;
72     DWORD dwAverageSampleRateReceived;
73     DWORD dwAverageSampleRateEncoded;
74     DWORD dwAverageSampleRateProcessed;
75 } MF_SINK_WRITER_STATISTICS;
76 enum {
77     MF_SOURCE_READER_INVALID_STREAM_INDEX = 0xffffffff,
78     MF_SOURCE_READER_ALL_STREAMS = 0xfffffffe,
79     MF_SOURCE_READER_ANY_STREAM = 0xfffffffe,
80     MF_SOURCE_READER_FIRST_AUDIO_STREAM = 0xfffffffd,
81     MF_SOURCE_READER_FIRST_VIDEO_STREAM = 0xfffffffc,
82     MF_SOURCE_READER_MEDIASOURCE = 0xffffffff
83 };
84 
85 /*****************************************************************************
86  * IMFSourceReader interface
87  */
88 #ifndef __IMFSourceReader_INTERFACE_DEFINED__
89 #define __IMFSourceReader_INTERFACE_DEFINED__
90 
91 DEFINE_GUID(IID_IMFSourceReader, 0x70ae66f2, 0xc809, 0x4e4f, 0x89,0x15, 0xbd,0xcb,0x40,0x6b,0x79,0x93);
92 #if defined(__cplusplus) && !defined(CINTERFACE)
93 MIDL_INTERFACE("70ae66f2-c809-4e4f-8915-bdcb406b7993")
94 IMFSourceReader : public IUnknown
95 {
96     virtual HRESULT STDMETHODCALLTYPE GetStreamSelection(
97         DWORD dwStreamIndex,
98         WINBOOL *pfSelected) = 0;
99 
100     virtual HRESULT STDMETHODCALLTYPE SetStreamSelection(
101         DWORD dwStreamIndex,
102         WINBOOL fSelected) = 0;
103 
104     virtual HRESULT STDMETHODCALLTYPE GetNativeMediaType(
105         DWORD dwStreamIndex,
106         DWORD dwMediaTypeIndex,
107         IMFMediaType **ppMediaType) = 0;
108 
109     virtual HRESULT STDMETHODCALLTYPE GetCurrentMediaType(
110         DWORD dwStreamIndex,
111         IMFMediaType **ppMediaType) = 0;
112 
113     virtual HRESULT STDMETHODCALLTYPE SetCurrentMediaType(
114         DWORD dwStreamIndex,
115         DWORD *pdwReserved,
116         IMFMediaType *pMediaType) = 0;
117 
118     virtual HRESULT STDMETHODCALLTYPE SetCurrentPosition(
119         REFGUID guidTimeFormat,
120         REFPROPVARIANT varPosition) = 0;
121 
122     virtual HRESULT STDMETHODCALLTYPE ReadSample(
123         DWORD dwStreamIndex,
124         DWORD dwControlFlags,
125         DWORD *pdwActualStreamIndex,
126         DWORD *pdwStreamFlags,
127         LONGLONG *pllTimestamp,
128         IMFSample **ppSample) = 0;
129 
130     virtual HRESULT STDMETHODCALLTYPE Flush(
131         DWORD dwStreamIndex) = 0;
132 
133     virtual HRESULT STDMETHODCALLTYPE GetServiceForStream(
134         DWORD dwStreamIndex,
135         REFGUID guidService,
136         REFIID riid,
137         LPVOID *ppvObject) = 0;
138 
139     virtual HRESULT STDMETHODCALLTYPE GetPresentationAttribute(
140         DWORD dwStreamIndex,
141         REFGUID guidAttribute,
142         PROPVARIANT *pvarAttribute) = 0;
143 
144 };
145 #ifdef __CRT_UUID_DECL
146 __CRT_UUID_DECL(IMFSourceReader, 0x70ae66f2, 0xc809, 0x4e4f, 0x89,0x15, 0xbd,0xcb,0x40,0x6b,0x79,0x93)
147 #endif
148 #else
149 typedef struct IMFSourceReaderVtbl {
150     BEGIN_INTERFACE
151 
152     /*** IUnknown methods ***/
153     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
154         IMFSourceReader* This,
155         REFIID riid,
156         void **ppvObject);
157 
158     ULONG (STDMETHODCALLTYPE *AddRef)(
159         IMFSourceReader* This);
160 
161     ULONG (STDMETHODCALLTYPE *Release)(
162         IMFSourceReader* This);
163 
164     /*** IMFSourceReader methods ***/
165     HRESULT (STDMETHODCALLTYPE *GetStreamSelection)(
166         IMFSourceReader* This,
167         DWORD dwStreamIndex,
168         WINBOOL *pfSelected);
169 
170     HRESULT (STDMETHODCALLTYPE *SetStreamSelection)(
171         IMFSourceReader* This,
172         DWORD dwStreamIndex,
173         WINBOOL fSelected);
174 
175     HRESULT (STDMETHODCALLTYPE *GetNativeMediaType)(
176         IMFSourceReader* This,
177         DWORD dwStreamIndex,
178         DWORD dwMediaTypeIndex,
179         IMFMediaType **ppMediaType);
180 
181     HRESULT (STDMETHODCALLTYPE *GetCurrentMediaType)(
182         IMFSourceReader* This,
183         DWORD dwStreamIndex,
184         IMFMediaType **ppMediaType);
185 
186     HRESULT (STDMETHODCALLTYPE *SetCurrentMediaType)(
187         IMFSourceReader* This,
188         DWORD dwStreamIndex,
189         DWORD *pdwReserved,
190         IMFMediaType *pMediaType);
191 
192     HRESULT (STDMETHODCALLTYPE *SetCurrentPosition)(
193         IMFSourceReader* This,
194         REFGUID guidTimeFormat,
195         REFPROPVARIANT varPosition);
196 
197     HRESULT (STDMETHODCALLTYPE *ReadSample)(
198         IMFSourceReader* This,
199         DWORD dwStreamIndex,
200         DWORD dwControlFlags,
201         DWORD *pdwActualStreamIndex,
202         DWORD *pdwStreamFlags,
203         LONGLONG *pllTimestamp,
204         IMFSample **ppSample);
205 
206     HRESULT (STDMETHODCALLTYPE *Flush)(
207         IMFSourceReader* This,
208         DWORD dwStreamIndex);
209 
210     HRESULT (STDMETHODCALLTYPE *GetServiceForStream)(
211         IMFSourceReader* This,
212         DWORD dwStreamIndex,
213         REFGUID guidService,
214         REFIID riid,
215         LPVOID *ppvObject);
216 
217     HRESULT (STDMETHODCALLTYPE *GetPresentationAttribute)(
218         IMFSourceReader* This,
219         DWORD dwStreamIndex,
220         REFGUID guidAttribute,
221         PROPVARIANT *pvarAttribute);
222 
223     END_INTERFACE
224 } IMFSourceReaderVtbl;
225 interface IMFSourceReader {
226     CONST_VTBL IMFSourceReaderVtbl* lpVtbl;
227 };
228 
229 #ifdef COBJMACROS
230 #ifndef WIDL_C_INLINE_WRAPPERS
231 /*** IUnknown methods ***/
232 #define IMFSourceReader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
233 #define IMFSourceReader_AddRef(This) (This)->lpVtbl->AddRef(This)
234 #define IMFSourceReader_Release(This) (This)->lpVtbl->Release(This)
235 /*** IMFSourceReader methods ***/
236 #define IMFSourceReader_GetStreamSelection(This,dwStreamIndex,pfSelected) (This)->lpVtbl->GetStreamSelection(This,dwStreamIndex,pfSelected)
237 #define IMFSourceReader_SetStreamSelection(This,dwStreamIndex,fSelected) (This)->lpVtbl->SetStreamSelection(This,dwStreamIndex,fSelected)
238 #define IMFSourceReader_GetNativeMediaType(This,dwStreamIndex,dwMediaTypeIndex,ppMediaType) (This)->lpVtbl->GetNativeMediaType(This,dwStreamIndex,dwMediaTypeIndex,ppMediaType)
239 #define IMFSourceReader_GetCurrentMediaType(This,dwStreamIndex,ppMediaType) (This)->lpVtbl->GetCurrentMediaType(This,dwStreamIndex,ppMediaType)
240 #define IMFSourceReader_SetCurrentMediaType(This,dwStreamIndex,pdwReserved,pMediaType) (This)->lpVtbl->SetCurrentMediaType(This,dwStreamIndex,pdwReserved,pMediaType)
241 #define IMFSourceReader_SetCurrentPosition(This,guidTimeFormat,varPosition) (This)->lpVtbl->SetCurrentPosition(This,guidTimeFormat,varPosition)
242 #define IMFSourceReader_ReadSample(This,dwStreamIndex,dwControlFlags,pdwActualStreamIndex,pdwStreamFlags,pllTimestamp,ppSample) (This)->lpVtbl->ReadSample(This,dwStreamIndex,dwControlFlags,pdwActualStreamIndex,pdwStreamFlags,pllTimestamp,ppSample)
243 #define IMFSourceReader_Flush(This,dwStreamIndex) (This)->lpVtbl->Flush(This,dwStreamIndex)
244 #define IMFSourceReader_GetServiceForStream(This,dwStreamIndex,guidService,riid,ppvObject) (This)->lpVtbl->GetServiceForStream(This,dwStreamIndex,guidService,riid,ppvObject)
245 #define IMFSourceReader_GetPresentationAttribute(This,dwStreamIndex,guidAttribute,pvarAttribute) (This)->lpVtbl->GetPresentationAttribute(This,dwStreamIndex,guidAttribute,pvarAttribute)
246 #else
247 /*** IUnknown methods ***/
248 static FORCEINLINE HRESULT IMFSourceReader_QueryInterface(IMFSourceReader* This,REFIID riid,void **ppvObject) {
249     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
250 }
251 static FORCEINLINE ULONG IMFSourceReader_AddRef(IMFSourceReader* This) {
252     return This->lpVtbl->AddRef(This);
253 }
254 static FORCEINLINE ULONG IMFSourceReader_Release(IMFSourceReader* This) {
255     return This->lpVtbl->Release(This);
256 }
257 /*** IMFSourceReader methods ***/
258 static FORCEINLINE HRESULT IMFSourceReader_GetStreamSelection(IMFSourceReader* This,DWORD dwStreamIndex,WINBOOL *pfSelected) {
259     return This->lpVtbl->GetStreamSelection(This,dwStreamIndex,pfSelected);
260 }
261 static FORCEINLINE HRESULT IMFSourceReader_SetStreamSelection(IMFSourceReader* This,DWORD dwStreamIndex,WINBOOL fSelected) {
262     return This->lpVtbl->SetStreamSelection(This,dwStreamIndex,fSelected);
263 }
264 static FORCEINLINE HRESULT IMFSourceReader_GetNativeMediaType(IMFSourceReader* This,DWORD dwStreamIndex,DWORD dwMediaTypeIndex,IMFMediaType **ppMediaType) {
265     return This->lpVtbl->GetNativeMediaType(This,dwStreamIndex,dwMediaTypeIndex,ppMediaType);
266 }
267 static FORCEINLINE HRESULT IMFSourceReader_GetCurrentMediaType(IMFSourceReader* This,DWORD dwStreamIndex,IMFMediaType **ppMediaType) {
268     return This->lpVtbl->GetCurrentMediaType(This,dwStreamIndex,ppMediaType);
269 }
270 static FORCEINLINE HRESULT IMFSourceReader_SetCurrentMediaType(IMFSourceReader* This,DWORD dwStreamIndex,DWORD *pdwReserved,IMFMediaType *pMediaType) {
271     return This->lpVtbl->SetCurrentMediaType(This,dwStreamIndex,pdwReserved,pMediaType);
272 }
273 static FORCEINLINE HRESULT IMFSourceReader_SetCurrentPosition(IMFSourceReader* This,REFGUID guidTimeFormat,REFPROPVARIANT varPosition) {
274     return This->lpVtbl->SetCurrentPosition(This,guidTimeFormat,varPosition);
275 }
276 static FORCEINLINE HRESULT IMFSourceReader_ReadSample(IMFSourceReader* This,DWORD dwStreamIndex,DWORD dwControlFlags,DWORD *pdwActualStreamIndex,DWORD *pdwStreamFlags,LONGLONG *pllTimestamp,IMFSample **ppSample) {
277     return This->lpVtbl->ReadSample(This,dwStreamIndex,dwControlFlags,pdwActualStreamIndex,pdwStreamFlags,pllTimestamp,ppSample);
278 }
279 static FORCEINLINE HRESULT IMFSourceReader_Flush(IMFSourceReader* This,DWORD dwStreamIndex) {
280     return This->lpVtbl->Flush(This,dwStreamIndex);
281 }
282 static FORCEINLINE HRESULT IMFSourceReader_GetServiceForStream(IMFSourceReader* This,DWORD dwStreamIndex,REFGUID guidService,REFIID riid,LPVOID *ppvObject) {
283     return This->lpVtbl->GetServiceForStream(This,dwStreamIndex,guidService,riid,ppvObject);
284 }
285 static FORCEINLINE HRESULT IMFSourceReader_GetPresentationAttribute(IMFSourceReader* This,DWORD dwStreamIndex,REFGUID guidAttribute,PROPVARIANT *pvarAttribute) {
286     return This->lpVtbl->GetPresentationAttribute(This,dwStreamIndex,guidAttribute,pvarAttribute);
287 }
288 #endif
289 #endif
290 
291 #endif
292 
293 HRESULT STDMETHODCALLTYPE IMFSourceReader_GetStreamSelection_Proxy(
294     IMFSourceReader* This,
295     DWORD dwStreamIndex,
296     WINBOOL *pfSelected);
297 void __RPC_STUB IMFSourceReader_GetStreamSelection_Stub(
298     IRpcStubBuffer* This,
299     IRpcChannelBuffer* pRpcChannelBuffer,
300     PRPC_MESSAGE pRpcMessage,
301     DWORD* pdwStubPhase);
302 HRESULT STDMETHODCALLTYPE IMFSourceReader_SetStreamSelection_Proxy(
303     IMFSourceReader* This,
304     DWORD dwStreamIndex,
305     WINBOOL fSelected);
306 void __RPC_STUB IMFSourceReader_SetStreamSelection_Stub(
307     IRpcStubBuffer* This,
308     IRpcChannelBuffer* pRpcChannelBuffer,
309     PRPC_MESSAGE pRpcMessage,
310     DWORD* pdwStubPhase);
311 HRESULT STDMETHODCALLTYPE IMFSourceReader_GetNativeMediaType_Proxy(
312     IMFSourceReader* This,
313     DWORD dwStreamIndex,
314     DWORD dwMediaTypeIndex,
315     IMFMediaType **ppMediaType);
316 void __RPC_STUB IMFSourceReader_GetNativeMediaType_Stub(
317     IRpcStubBuffer* This,
318     IRpcChannelBuffer* pRpcChannelBuffer,
319     PRPC_MESSAGE pRpcMessage,
320     DWORD* pdwStubPhase);
321 HRESULT STDMETHODCALLTYPE IMFSourceReader_GetCurrentMediaType_Proxy(
322     IMFSourceReader* This,
323     DWORD dwStreamIndex,
324     IMFMediaType **ppMediaType);
325 void __RPC_STUB IMFSourceReader_GetCurrentMediaType_Stub(
326     IRpcStubBuffer* This,
327     IRpcChannelBuffer* pRpcChannelBuffer,
328     PRPC_MESSAGE pRpcMessage,
329     DWORD* pdwStubPhase);
330 HRESULT STDMETHODCALLTYPE IMFSourceReader_SetCurrentMediaType_Proxy(
331     IMFSourceReader* This,
332     DWORD dwStreamIndex,
333     DWORD *pdwReserved,
334     IMFMediaType *pMediaType);
335 void __RPC_STUB IMFSourceReader_SetCurrentMediaType_Stub(
336     IRpcStubBuffer* This,
337     IRpcChannelBuffer* pRpcChannelBuffer,
338     PRPC_MESSAGE pRpcMessage,
339     DWORD* pdwStubPhase);
340 HRESULT STDMETHODCALLTYPE IMFSourceReader_SetCurrentPosition_Proxy(
341     IMFSourceReader* This,
342     REFGUID guidTimeFormat,
343     REFPROPVARIANT varPosition);
344 void __RPC_STUB IMFSourceReader_SetCurrentPosition_Stub(
345     IRpcStubBuffer* This,
346     IRpcChannelBuffer* pRpcChannelBuffer,
347     PRPC_MESSAGE pRpcMessage,
348     DWORD* pdwStubPhase);
349 HRESULT STDMETHODCALLTYPE IMFSourceReader_ReadSample_Proxy(
350     IMFSourceReader* This,
351     DWORD dwStreamIndex,
352     DWORD dwControlFlags,
353     DWORD *pdwActualStreamIndex,
354     DWORD *pdwStreamFlags,
355     LONGLONG *pllTimestamp,
356     IMFSample **ppSample);
357 void __RPC_STUB IMFSourceReader_ReadSample_Stub(
358     IRpcStubBuffer* This,
359     IRpcChannelBuffer* pRpcChannelBuffer,
360     PRPC_MESSAGE pRpcMessage,
361     DWORD* pdwStubPhase);
362 HRESULT STDMETHODCALLTYPE IMFSourceReader_Flush_Proxy(
363     IMFSourceReader* This,
364     DWORD dwStreamIndex);
365 void __RPC_STUB IMFSourceReader_Flush_Stub(
366     IRpcStubBuffer* This,
367     IRpcChannelBuffer* pRpcChannelBuffer,
368     PRPC_MESSAGE pRpcMessage,
369     DWORD* pdwStubPhase);
370 HRESULT STDMETHODCALLTYPE IMFSourceReader_GetServiceForStream_Proxy(
371     IMFSourceReader* This,
372     DWORD dwStreamIndex,
373     REFGUID guidService,
374     REFIID riid,
375     LPVOID *ppvObject);
376 void __RPC_STUB IMFSourceReader_GetServiceForStream_Stub(
377     IRpcStubBuffer* This,
378     IRpcChannelBuffer* pRpcChannelBuffer,
379     PRPC_MESSAGE pRpcMessage,
380     DWORD* pdwStubPhase);
381 HRESULT STDMETHODCALLTYPE IMFSourceReader_GetPresentationAttribute_Proxy(
382     IMFSourceReader* This,
383     DWORD dwStreamIndex,
384     REFGUID guidAttribute,
385     PROPVARIANT *pvarAttribute);
386 void __RPC_STUB IMFSourceReader_GetPresentationAttribute_Stub(
387     IRpcStubBuffer* This,
388     IRpcChannelBuffer* pRpcChannelBuffer,
389     PRPC_MESSAGE pRpcMessage,
390     DWORD* pdwStubPhase);
391 
392 #endif  /* __IMFSourceReader_INTERFACE_DEFINED__ */
393 
394 /*****************************************************************************
395  * IMFSinkWriter interface
396  */
397 #ifndef __IMFSinkWriter_INTERFACE_DEFINED__
398 #define __IMFSinkWriter_INTERFACE_DEFINED__
399 
400 DEFINE_GUID(IID_IMFSinkWriter, 0x3137f1cd, 0xfe5e, 0x4805, 0xa5,0xd8, 0xfb,0x47,0x74,0x48,0xcb,0x3d);
401 #if defined(__cplusplus) && !defined(CINTERFACE)
402 MIDL_INTERFACE("3137f1cd-fe5e-4805-a5d8-fb477448cb3d")
403 IMFSinkWriter : public IUnknown
404 {
405     virtual HRESULT STDMETHODCALLTYPE AddStream(
406         IMFMediaType *pTargetMediaType,
407         DWORD *pdwStreamIndex) = 0;
408 
409     virtual HRESULT STDMETHODCALLTYPE SetInputMediaType(
410         DWORD dwStreamIndex,
411         IMFMediaType *pInputMediaType,
412         IMFAttributes *pEncodingParameters) = 0;
413 
414     virtual HRESULT STDMETHODCALLTYPE BeginWriting(
415         ) = 0;
416 
417     virtual HRESULT STDMETHODCALLTYPE WriteSample(
418         DWORD dwStreamIndex,
419         IMFSample *pSample) = 0;
420 
421     virtual HRESULT STDMETHODCALLTYPE SendStreamTick(
422         DWORD dwStreamIndex,
423         LONGLONG llTimestamp) = 0;
424 
425     virtual HRESULT STDMETHODCALLTYPE PlaceMarker(
426         DWORD dwStreamIndex,
427         LPVOID pvContext) = 0;
428 
429     virtual HRESULT STDMETHODCALLTYPE NotifyEndOfSegment(
430         DWORD dwStreamIndex) = 0;
431 
432     virtual HRESULT STDMETHODCALLTYPE Flush(
433         DWORD dwStreamIndex) = 0;
434 
435     virtual HRESULT STDMETHODCALLTYPE Finalize(
436         ) = 0;
437 
438     virtual HRESULT STDMETHODCALLTYPE GetServiceForStream(
439         DWORD dwStreamIndex,
440         REFGUID guidService,
441         REFIID riid,
442         LPVOID *ppvObject) = 0;
443 
444     virtual HRESULT STDMETHODCALLTYPE GetStatistics(
445         DWORD dwStreamIndex,
446         MF_SINK_WRITER_STATISTICS *pStats) = 0;
447 
448 };
449 #ifdef __CRT_UUID_DECL
450 __CRT_UUID_DECL(IMFSinkWriter, 0x3137f1cd, 0xfe5e, 0x4805, 0xa5,0xd8, 0xfb,0x47,0x74,0x48,0xcb,0x3d)
451 #endif
452 #else
453 typedef struct IMFSinkWriterVtbl {
454     BEGIN_INTERFACE
455 
456     /*** IUnknown methods ***/
457     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
458         IMFSinkWriter* This,
459         REFIID riid,
460         void **ppvObject);
461 
462     ULONG (STDMETHODCALLTYPE *AddRef)(
463         IMFSinkWriter* This);
464 
465     ULONG (STDMETHODCALLTYPE *Release)(
466         IMFSinkWriter* This);
467 
468     /*** IMFSinkWriter methods ***/
469     HRESULT (STDMETHODCALLTYPE *AddStream)(
470         IMFSinkWriter* This,
471         IMFMediaType *pTargetMediaType,
472         DWORD *pdwStreamIndex);
473 
474     HRESULT (STDMETHODCALLTYPE *SetInputMediaType)(
475         IMFSinkWriter* This,
476         DWORD dwStreamIndex,
477         IMFMediaType *pInputMediaType,
478         IMFAttributes *pEncodingParameters);
479 
480     HRESULT (STDMETHODCALLTYPE *BeginWriting)(
481         IMFSinkWriter* This);
482 
483     HRESULT (STDMETHODCALLTYPE *WriteSample)(
484         IMFSinkWriter* This,
485         DWORD dwStreamIndex,
486         IMFSample *pSample);
487 
488     HRESULT (STDMETHODCALLTYPE *SendStreamTick)(
489         IMFSinkWriter* This,
490         DWORD dwStreamIndex,
491         LONGLONG llTimestamp);
492 
493     HRESULT (STDMETHODCALLTYPE *PlaceMarker)(
494         IMFSinkWriter* This,
495         DWORD dwStreamIndex,
496         LPVOID pvContext);
497 
498     HRESULT (STDMETHODCALLTYPE *NotifyEndOfSegment)(
499         IMFSinkWriter* This,
500         DWORD dwStreamIndex);
501 
502     HRESULT (STDMETHODCALLTYPE *Flush)(
503         IMFSinkWriter* This,
504         DWORD dwStreamIndex);
505 
506     HRESULT (STDMETHODCALLTYPE *Finalize)(
507         IMFSinkWriter* This);
508 
509     HRESULT (STDMETHODCALLTYPE *GetServiceForStream)(
510         IMFSinkWriter* This,
511         DWORD dwStreamIndex,
512         REFGUID guidService,
513         REFIID riid,
514         LPVOID *ppvObject);
515 
516     HRESULT (STDMETHODCALLTYPE *GetStatistics)(
517         IMFSinkWriter* This,
518         DWORD dwStreamIndex,
519         MF_SINK_WRITER_STATISTICS *pStats);
520 
521     END_INTERFACE
522 } IMFSinkWriterVtbl;
523 interface IMFSinkWriter {
524     CONST_VTBL IMFSinkWriterVtbl* lpVtbl;
525 };
526 
527 #ifdef COBJMACROS
528 #ifndef WIDL_C_INLINE_WRAPPERS
529 /*** IUnknown methods ***/
530 #define IMFSinkWriter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
531 #define IMFSinkWriter_AddRef(This) (This)->lpVtbl->AddRef(This)
532 #define IMFSinkWriter_Release(This) (This)->lpVtbl->Release(This)
533 /*** IMFSinkWriter methods ***/
534 #define IMFSinkWriter_AddStream(This,pTargetMediaType,pdwStreamIndex) (This)->lpVtbl->AddStream(This,pTargetMediaType,pdwStreamIndex)
535 #define IMFSinkWriter_SetInputMediaType(This,dwStreamIndex,pInputMediaType,pEncodingParameters) (This)->lpVtbl->SetInputMediaType(This,dwStreamIndex,pInputMediaType,pEncodingParameters)
536 #define IMFSinkWriter_BeginWriting(This) (This)->lpVtbl->BeginWriting(This)
537 #define IMFSinkWriter_WriteSample(This,dwStreamIndex,pSample) (This)->lpVtbl->WriteSample(This,dwStreamIndex,pSample)
538 #define IMFSinkWriter_SendStreamTick(This,dwStreamIndex,llTimestamp) (This)->lpVtbl->SendStreamTick(This,dwStreamIndex,llTimestamp)
539 #define IMFSinkWriter_PlaceMarker(This,dwStreamIndex,pvContext) (This)->lpVtbl->PlaceMarker(This,dwStreamIndex,pvContext)
540 #define IMFSinkWriter_NotifyEndOfSegment(This,dwStreamIndex) (This)->lpVtbl->NotifyEndOfSegment(This,dwStreamIndex)
541 #define IMFSinkWriter_Flush(This,dwStreamIndex) (This)->lpVtbl->Flush(This,dwStreamIndex)
542 #define IMFSinkWriter_Finalize(This) (This)->lpVtbl->Finalize(This)
543 #define IMFSinkWriter_GetServiceForStream(This,dwStreamIndex,guidService,riid,ppvObject) (This)->lpVtbl->GetServiceForStream(This,dwStreamIndex,guidService,riid,ppvObject)
544 #define IMFSinkWriter_GetStatistics(This,dwStreamIndex,pStats) (This)->lpVtbl->GetStatistics(This,dwStreamIndex,pStats)
545 #else
546 /*** IUnknown methods ***/
547 static FORCEINLINE HRESULT IMFSinkWriter_QueryInterface(IMFSinkWriter* This,REFIID riid,void **ppvObject) {
548     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
549 }
550 static FORCEINLINE ULONG IMFSinkWriter_AddRef(IMFSinkWriter* This) {
551     return This->lpVtbl->AddRef(This);
552 }
553 static FORCEINLINE ULONG IMFSinkWriter_Release(IMFSinkWriter* This) {
554     return This->lpVtbl->Release(This);
555 }
556 /*** IMFSinkWriter methods ***/
557 static FORCEINLINE HRESULT IMFSinkWriter_AddStream(IMFSinkWriter* This,IMFMediaType *pTargetMediaType,DWORD *pdwStreamIndex) {
558     return This->lpVtbl->AddStream(This,pTargetMediaType,pdwStreamIndex);
559 }
560 static FORCEINLINE HRESULT IMFSinkWriter_SetInputMediaType(IMFSinkWriter* This,DWORD dwStreamIndex,IMFMediaType *pInputMediaType,IMFAttributes *pEncodingParameters) {
561     return This->lpVtbl->SetInputMediaType(This,dwStreamIndex,pInputMediaType,pEncodingParameters);
562 }
563 static FORCEINLINE HRESULT IMFSinkWriter_BeginWriting(IMFSinkWriter* This) {
564     return This->lpVtbl->BeginWriting(This);
565 }
566 static FORCEINLINE HRESULT IMFSinkWriter_WriteSample(IMFSinkWriter* This,DWORD dwStreamIndex,IMFSample *pSample) {
567     return This->lpVtbl->WriteSample(This,dwStreamIndex,pSample);
568 }
569 static FORCEINLINE HRESULT IMFSinkWriter_SendStreamTick(IMFSinkWriter* This,DWORD dwStreamIndex,LONGLONG llTimestamp) {
570     return This->lpVtbl->SendStreamTick(This,dwStreamIndex,llTimestamp);
571 }
572 static FORCEINLINE HRESULT IMFSinkWriter_PlaceMarker(IMFSinkWriter* This,DWORD dwStreamIndex,LPVOID pvContext) {
573     return This->lpVtbl->PlaceMarker(This,dwStreamIndex,pvContext);
574 }
575 static FORCEINLINE HRESULT IMFSinkWriter_NotifyEndOfSegment(IMFSinkWriter* This,DWORD dwStreamIndex) {
576     return This->lpVtbl->NotifyEndOfSegment(This,dwStreamIndex);
577 }
578 static FORCEINLINE HRESULT IMFSinkWriter_Flush(IMFSinkWriter* This,DWORD dwStreamIndex) {
579     return This->lpVtbl->Flush(This,dwStreamIndex);
580 }
581 static FORCEINLINE HRESULT IMFSinkWriter_Finalize(IMFSinkWriter* This) {
582     return This->lpVtbl->Finalize(This);
583 }
584 static FORCEINLINE HRESULT IMFSinkWriter_GetServiceForStream(IMFSinkWriter* This,DWORD dwStreamIndex,REFGUID guidService,REFIID riid,LPVOID *ppvObject) {
585     return This->lpVtbl->GetServiceForStream(This,dwStreamIndex,guidService,riid,ppvObject);
586 }
587 static FORCEINLINE HRESULT IMFSinkWriter_GetStatistics(IMFSinkWriter* This,DWORD dwStreamIndex,MF_SINK_WRITER_STATISTICS *pStats) {
588     return This->lpVtbl->GetStatistics(This,dwStreamIndex,pStats);
589 }
590 #endif
591 #endif
592 
593 #endif
594 
595 HRESULT STDMETHODCALLTYPE IMFSinkWriter_AddStream_Proxy(
596     IMFSinkWriter* This,
597     IMFMediaType *pTargetMediaType,
598     DWORD *pdwStreamIndex);
599 void __RPC_STUB IMFSinkWriter_AddStream_Stub(
600     IRpcStubBuffer* This,
601     IRpcChannelBuffer* pRpcChannelBuffer,
602     PRPC_MESSAGE pRpcMessage,
603     DWORD* pdwStubPhase);
604 HRESULT STDMETHODCALLTYPE IMFSinkWriter_SetInputMediaType_Proxy(
605     IMFSinkWriter* This,
606     DWORD dwStreamIndex,
607     IMFMediaType *pInputMediaType,
608     IMFAttributes *pEncodingParameters);
609 void __RPC_STUB IMFSinkWriter_SetInputMediaType_Stub(
610     IRpcStubBuffer* This,
611     IRpcChannelBuffer* pRpcChannelBuffer,
612     PRPC_MESSAGE pRpcMessage,
613     DWORD* pdwStubPhase);
614 HRESULT STDMETHODCALLTYPE IMFSinkWriter_BeginWriting_Proxy(
615     IMFSinkWriter* This);
616 void __RPC_STUB IMFSinkWriter_BeginWriting_Stub(
617     IRpcStubBuffer* This,
618     IRpcChannelBuffer* pRpcChannelBuffer,
619     PRPC_MESSAGE pRpcMessage,
620     DWORD* pdwStubPhase);
621 HRESULT STDMETHODCALLTYPE IMFSinkWriter_WriteSample_Proxy(
622     IMFSinkWriter* This,
623     DWORD dwStreamIndex,
624     IMFSample *pSample);
625 void __RPC_STUB IMFSinkWriter_WriteSample_Stub(
626     IRpcStubBuffer* This,
627     IRpcChannelBuffer* pRpcChannelBuffer,
628     PRPC_MESSAGE pRpcMessage,
629     DWORD* pdwStubPhase);
630 HRESULT STDMETHODCALLTYPE IMFSinkWriter_SendStreamTick_Proxy(
631     IMFSinkWriter* This,
632     DWORD dwStreamIndex,
633     LONGLONG llTimestamp);
634 void __RPC_STUB IMFSinkWriter_SendStreamTick_Stub(
635     IRpcStubBuffer* This,
636     IRpcChannelBuffer* pRpcChannelBuffer,
637     PRPC_MESSAGE pRpcMessage,
638     DWORD* pdwStubPhase);
639 HRESULT STDMETHODCALLTYPE IMFSinkWriter_PlaceMarker_Proxy(
640     IMFSinkWriter* This,
641     DWORD dwStreamIndex,
642     LPVOID pvContext);
643 void __RPC_STUB IMFSinkWriter_PlaceMarker_Stub(
644     IRpcStubBuffer* This,
645     IRpcChannelBuffer* pRpcChannelBuffer,
646     PRPC_MESSAGE pRpcMessage,
647     DWORD* pdwStubPhase);
648 HRESULT STDMETHODCALLTYPE IMFSinkWriter_NotifyEndOfSegment_Proxy(
649     IMFSinkWriter* This,
650     DWORD dwStreamIndex);
651 void __RPC_STUB IMFSinkWriter_NotifyEndOfSegment_Stub(
652     IRpcStubBuffer* This,
653     IRpcChannelBuffer* pRpcChannelBuffer,
654     PRPC_MESSAGE pRpcMessage,
655     DWORD* pdwStubPhase);
656 HRESULT STDMETHODCALLTYPE IMFSinkWriter_Flush_Proxy(
657     IMFSinkWriter* This,
658     DWORD dwStreamIndex);
659 void __RPC_STUB IMFSinkWriter_Flush_Stub(
660     IRpcStubBuffer* This,
661     IRpcChannelBuffer* pRpcChannelBuffer,
662     PRPC_MESSAGE pRpcMessage,
663     DWORD* pdwStubPhase);
664 HRESULT STDMETHODCALLTYPE IMFSinkWriter_Finalize_Proxy(
665     IMFSinkWriter* This);
666 void __RPC_STUB IMFSinkWriter_Finalize_Stub(
667     IRpcStubBuffer* This,
668     IRpcChannelBuffer* pRpcChannelBuffer,
669     PRPC_MESSAGE pRpcMessage,
670     DWORD* pdwStubPhase);
671 HRESULT STDMETHODCALLTYPE IMFSinkWriter_GetServiceForStream_Proxy(
672     IMFSinkWriter* This,
673     DWORD dwStreamIndex,
674     REFGUID guidService,
675     REFIID riid,
676     LPVOID *ppvObject);
677 void __RPC_STUB IMFSinkWriter_GetServiceForStream_Stub(
678     IRpcStubBuffer* This,
679     IRpcChannelBuffer* pRpcChannelBuffer,
680     PRPC_MESSAGE pRpcMessage,
681     DWORD* pdwStubPhase);
682 HRESULT STDMETHODCALLTYPE IMFSinkWriter_GetStatistics_Proxy(
683     IMFSinkWriter* This,
684     DWORD dwStreamIndex,
685     MF_SINK_WRITER_STATISTICS *pStats);
686 void __RPC_STUB IMFSinkWriter_GetStatistics_Stub(
687     IRpcStubBuffer* This,
688     IRpcChannelBuffer* pRpcChannelBuffer,
689     PRPC_MESSAGE pRpcMessage,
690     DWORD* pdwStubPhase);
691 
692 #endif  /* __IMFSinkWriter_INTERFACE_DEFINED__ */
693 
694 /*****************************************************************************
695  * IMFSourceReaderCallback interface
696  */
697 #ifndef __IMFSourceReaderCallback_INTERFACE_DEFINED__
698 #define __IMFSourceReaderCallback_INTERFACE_DEFINED__
699 
700 DEFINE_GUID(IID_IMFSourceReaderCallback, 0xdeec8d99, 0xfa1d, 0x4d82, 0x84,0xc2, 0x2c,0x89,0x69,0x94,0x48,0x67);
701 #if defined(__cplusplus) && !defined(CINTERFACE)
702 MIDL_INTERFACE("deec8d99-fa1d-4d82-84c2-2c8969944867")
703 IMFSourceReaderCallback : public IUnknown
704 {
705     virtual HRESULT STDMETHODCALLTYPE OnReadSample(
706         HRESULT hrStatus,
707         DWORD dwStreamIndex,
708         DWORD dwStreamFlags,
709         LONGLONG llTimestamp,
710         IMFSample *pSample) = 0;
711 
712     virtual HRESULT STDMETHODCALLTYPE OnFlush(
713         DWORD dwStreamIndex) = 0;
714 
715     virtual HRESULT STDMETHODCALLTYPE OnEvent(
716         DWORD dwStreamIndex,
717         IMFMediaEvent *pEvent) = 0;
718 
719 };
720 #ifdef __CRT_UUID_DECL
721 __CRT_UUID_DECL(IMFSourceReaderCallback, 0xdeec8d99, 0xfa1d, 0x4d82, 0x84,0xc2, 0x2c,0x89,0x69,0x94,0x48,0x67)
722 #endif
723 #else
724 typedef struct IMFSourceReaderCallbackVtbl {
725     BEGIN_INTERFACE
726 
727     /*** IUnknown methods ***/
728     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
729         IMFSourceReaderCallback* This,
730         REFIID riid,
731         void **ppvObject);
732 
733     ULONG (STDMETHODCALLTYPE *AddRef)(
734         IMFSourceReaderCallback* This);
735 
736     ULONG (STDMETHODCALLTYPE *Release)(
737         IMFSourceReaderCallback* This);
738 
739     /*** IMFSourceReaderCallback methods ***/
740     HRESULT (STDMETHODCALLTYPE *OnReadSample)(
741         IMFSourceReaderCallback* This,
742         HRESULT hrStatus,
743         DWORD dwStreamIndex,
744         DWORD dwStreamFlags,
745         LONGLONG llTimestamp,
746         IMFSample *pSample);
747 
748     HRESULT (STDMETHODCALLTYPE *OnFlush)(
749         IMFSourceReaderCallback* This,
750         DWORD dwStreamIndex);
751 
752     HRESULT (STDMETHODCALLTYPE *OnEvent)(
753         IMFSourceReaderCallback* This,
754         DWORD dwStreamIndex,
755         IMFMediaEvent *pEvent);
756 
757     END_INTERFACE
758 } IMFSourceReaderCallbackVtbl;
759 interface IMFSourceReaderCallback {
760     CONST_VTBL IMFSourceReaderCallbackVtbl* lpVtbl;
761 };
762 
763 #ifdef COBJMACROS
764 #ifndef WIDL_C_INLINE_WRAPPERS
765 /*** IUnknown methods ***/
766 #define IMFSourceReaderCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
767 #define IMFSourceReaderCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
768 #define IMFSourceReaderCallback_Release(This) (This)->lpVtbl->Release(This)
769 /*** IMFSourceReaderCallback methods ***/
770 #define IMFSourceReaderCallback_OnReadSample(This,hrStatus,dwStreamIndex,dwStreamFlags,llTimestamp,pSample) (This)->lpVtbl->OnReadSample(This,hrStatus,dwStreamIndex,dwStreamFlags,llTimestamp,pSample)
771 #define IMFSourceReaderCallback_OnFlush(This,dwStreamIndex) (This)->lpVtbl->OnFlush(This,dwStreamIndex)
772 #define IMFSourceReaderCallback_OnEvent(This,dwStreamIndex,pEvent) (This)->lpVtbl->OnEvent(This,dwStreamIndex,pEvent)
773 #else
774 /*** IUnknown methods ***/
775 static FORCEINLINE HRESULT IMFSourceReaderCallback_QueryInterface(IMFSourceReaderCallback* This,REFIID riid,void **ppvObject) {
776     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
777 }
778 static FORCEINLINE ULONG IMFSourceReaderCallback_AddRef(IMFSourceReaderCallback* This) {
779     return This->lpVtbl->AddRef(This);
780 }
781 static FORCEINLINE ULONG IMFSourceReaderCallback_Release(IMFSourceReaderCallback* This) {
782     return This->lpVtbl->Release(This);
783 }
784 /*** IMFSourceReaderCallback methods ***/
785 static FORCEINLINE HRESULT IMFSourceReaderCallback_OnReadSample(IMFSourceReaderCallback* This,HRESULT hrStatus,DWORD dwStreamIndex,DWORD dwStreamFlags,LONGLONG llTimestamp,IMFSample *pSample) {
786     return This->lpVtbl->OnReadSample(This,hrStatus,dwStreamIndex,dwStreamFlags,llTimestamp,pSample);
787 }
788 static FORCEINLINE HRESULT IMFSourceReaderCallback_OnFlush(IMFSourceReaderCallback* This,DWORD dwStreamIndex) {
789     return This->lpVtbl->OnFlush(This,dwStreamIndex);
790 }
791 static FORCEINLINE HRESULT IMFSourceReaderCallback_OnEvent(IMFSourceReaderCallback* This,DWORD dwStreamIndex,IMFMediaEvent *pEvent) {
792     return This->lpVtbl->OnEvent(This,dwStreamIndex,pEvent);
793 }
794 #endif
795 #endif
796 
797 #endif
798 
799 HRESULT STDMETHODCALLTYPE IMFSourceReaderCallback_OnReadSample_Proxy(
800     IMFSourceReaderCallback* This,
801     HRESULT hrStatus,
802     DWORD dwStreamIndex,
803     DWORD dwStreamFlags,
804     LONGLONG llTimestamp,
805     IMFSample *pSample);
806 void __RPC_STUB IMFSourceReaderCallback_OnReadSample_Stub(
807     IRpcStubBuffer* This,
808     IRpcChannelBuffer* pRpcChannelBuffer,
809     PRPC_MESSAGE pRpcMessage,
810     DWORD* pdwStubPhase);
811 HRESULT STDMETHODCALLTYPE IMFSourceReaderCallback_OnFlush_Proxy(
812     IMFSourceReaderCallback* This,
813     DWORD dwStreamIndex);
814 void __RPC_STUB IMFSourceReaderCallback_OnFlush_Stub(
815     IRpcStubBuffer* This,
816     IRpcChannelBuffer* pRpcChannelBuffer,
817     PRPC_MESSAGE pRpcMessage,
818     DWORD* pdwStubPhase);
819 HRESULT STDMETHODCALLTYPE IMFSourceReaderCallback_OnEvent_Proxy(
820     IMFSourceReaderCallback* This,
821     DWORD dwStreamIndex,
822     IMFMediaEvent *pEvent);
823 void __RPC_STUB IMFSourceReaderCallback_OnEvent_Stub(
824     IRpcStubBuffer* This,
825     IRpcChannelBuffer* pRpcChannelBuffer,
826     PRPC_MESSAGE pRpcMessage,
827     DWORD* pdwStubPhase);
828 
829 #endif  /* __IMFSourceReaderCallback_INTERFACE_DEFINED__ */
830 
831 HRESULT WINAPI MFCreateSinkWriterFromMediaSink(IMFMediaSink *pMediaSink,IMFAttributes *pAttributes,IMFSinkWriter **ppSinkWriter);
832 HRESULT WINAPI MFCreateSinkWriterFromURL(LPCWSTR pwszOutputURL,IMFByteStream *pByteStream,IMFAttributes *pAttributes,IMFSinkWriter **ppSinkWriter);
833 HRESULT WINAPI MFCreateSourceReaderFromByteStream(IMFByteStream *pByteStream,IMFAttributes *pAttributes,IMFSourceReader **ppSourceReader);
834 HRESULT WINAPI MFCreateSourceReaderFromMediaSource(IMFMediaSource *pMediaSource,IMFAttributes *pAttributes,IMFSourceReader **ppSourceReader);
835 HRESULT WINAPI MFCreateSourceReaderFromURL(LPCWSTR pwszURL,IMFAttributes *pAttributes,IMFSourceReader **ppSourceReader);
836 /* Begin additional prototypes for all interfaces */
837 
838 
839 /* End additional prototypes */
840 
841 #ifdef __cplusplus
842 }
843 #endif
844 
845 #endif /* __mfreadwrite_h__ */
846