|  | /*** Autogenerated by WIDL 10.13 from include/mfmediaengine.idl - Do not edit ***/ | 
|  |  | 
|  | #ifdef _WIN32 | 
|  | #ifndef __REQUIRED_RPCNDR_H_VERSION__ | 
|  | #define __REQUIRED_RPCNDR_H_VERSION__ 475 | 
|  | #endif | 
|  | #include <rpc.h> | 
|  | #include <rpcndr.h> | 
|  | #endif | 
|  |  | 
|  | #ifndef COM_NO_WINDOWS_H | 
|  | #include <windows.h> | 
|  | #include <ole2.h> | 
|  | #endif | 
|  |  | 
|  | #ifndef __mfmediaengine_h__ | 
|  | #define __mfmediaengine_h__ | 
|  |  | 
|  | /* Forward declarations */ | 
|  |  | 
|  | #ifndef __IMFMediaError_FWD_DEFINED__ | 
|  | #define __IMFMediaError_FWD_DEFINED__ | 
|  | typedef interface IMFMediaError IMFMediaError; | 
|  | #ifdef __cplusplus | 
|  | interface IMFMediaError; | 
|  | #endif /* __cplusplus */ | 
|  | #endif | 
|  |  | 
|  | #ifndef __IMFMediaEngineSrcElements_FWD_DEFINED__ | 
|  | #define __IMFMediaEngineSrcElements_FWD_DEFINED__ | 
|  | typedef interface IMFMediaEngineSrcElements IMFMediaEngineSrcElements; | 
|  | #ifdef __cplusplus | 
|  | interface IMFMediaEngineSrcElements; | 
|  | #endif /* __cplusplus */ | 
|  | #endif | 
|  |  | 
|  | #ifndef __IMFMediaTimeRange_FWD_DEFINED__ | 
|  | #define __IMFMediaTimeRange_FWD_DEFINED__ | 
|  | typedef interface IMFMediaTimeRange IMFMediaTimeRange; | 
|  | #ifdef __cplusplus | 
|  | interface IMFMediaTimeRange; | 
|  | #endif /* __cplusplus */ | 
|  | #endif | 
|  |  | 
|  | #ifndef __IMFMediaEngine_FWD_DEFINED__ | 
|  | #define __IMFMediaEngine_FWD_DEFINED__ | 
|  | typedef interface IMFMediaEngine IMFMediaEngine; | 
|  | #ifdef __cplusplus | 
|  | interface IMFMediaEngine; | 
|  | #endif /* __cplusplus */ | 
|  | #endif | 
|  |  | 
|  | #ifndef __IMFMediaEngineEx_FWD_DEFINED__ | 
|  | #define __IMFMediaEngineEx_FWD_DEFINED__ | 
|  | typedef interface IMFMediaEngineEx IMFMediaEngineEx; | 
|  | #ifdef __cplusplus | 
|  | interface IMFMediaEngineEx; | 
|  | #endif /* __cplusplus */ | 
|  | #endif | 
|  |  | 
|  | #ifndef __IMFMediaEngineClassFactory_FWD_DEFINED__ | 
|  | #define __IMFMediaEngineClassFactory_FWD_DEFINED__ | 
|  | typedef interface IMFMediaEngineClassFactory IMFMediaEngineClassFactory; | 
|  | #ifdef __cplusplus | 
|  | interface IMFMediaEngineClassFactory; | 
|  | #endif /* __cplusplus */ | 
|  | #endif | 
|  |  | 
|  | #ifndef __IMFMediaEngineNotify_FWD_DEFINED__ | 
|  | #define __IMFMediaEngineNotify_FWD_DEFINED__ | 
|  | typedef interface IMFMediaEngineNotify IMFMediaEngineNotify; | 
|  | #ifdef __cplusplus | 
|  | interface IMFMediaEngineNotify; | 
|  | #endif /* __cplusplus */ | 
|  | #endif | 
|  |  | 
|  | #ifndef __IMFMediaEngineAudioEndpointId_FWD_DEFINED__ | 
|  | #define __IMFMediaEngineAudioEndpointId_FWD_DEFINED__ | 
|  | typedef interface IMFMediaEngineAudioEndpointId IMFMediaEngineAudioEndpointId; | 
|  | #ifdef __cplusplus | 
|  | interface IMFMediaEngineAudioEndpointId; | 
|  | #endif /* __cplusplus */ | 
|  | #endif | 
|  |  | 
|  | #ifndef __IMFMediaEngineExtension_FWD_DEFINED__ | 
|  | #define __IMFMediaEngineExtension_FWD_DEFINED__ | 
|  | typedef interface IMFMediaEngineExtension IMFMediaEngineExtension; | 
|  | #ifdef __cplusplus | 
|  | interface IMFMediaEngineExtension; | 
|  | #endif /* __cplusplus */ | 
|  | #endif | 
|  |  | 
|  | /* Headers for imported files */ | 
|  |  | 
|  | #include <mfidl.h> | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | EXTERN_GUID(CLSID_MFMediaEngineClassFactory, 0xb44392da, 0x499b, 0x446b, 0xa4, 0xcb, 0x00, 0x5f, 0xea, 0xd0, 0xe6, 0xd5); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_AUDIO_CATEGORY,                     0xc8d4c51d, 0x350e, 0x41f2, 0xba, 0x46, 0xfa, 0xeb, 0xbb, 0x08, 0x57, 0xf6); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_AUDIO_ENDPOINT_ROLE,                0xd2cb93d1, 0x116a, 0x44f2, 0x93, 0x85, 0xf7, 0xd0, 0xfd, 0xa2, 0xfb, 0x46); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_BROWSER_COMPATIBILITY_MODE,         0x4e0212e2, 0xe18f, 0x41e1, 0x95, 0xe5, 0xc0, 0xe7, 0xe9, 0x23, 0x5b, 0xc3); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_BROWSER_COMPATIBILITY_MODE_IE9,     0x052c2d39, 0x40c0, 0x4188, 0xab, 0x86, 0xf8, 0x28, 0x27, 0x3b, 0x75, 0x22); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_BROWSER_COMPATIBILITY_MODE_IE10,    0x11a47afd, 0x6589, 0x4124, 0xb3, 0x12, 0x61, 0x58, 0xec, 0x51, 0x7f, 0xc3); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_BROWSER_COMPATIBILITY_MODE_IE11,    0x1cf1315f, 0xce3f, 0x4035, 0x93, 0x91, 0x16, 0x14, 0x2f, 0x77, 0x51, 0x89); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_BROWSER_COMPATIBILITY_MODE_IE_EDGE, 0xa6f3e465, 0x3aca, 0x442c, 0xa3, 0xf0, 0xad, 0x6d, 0xda, 0xd8, 0x39, 0xae); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_CALLBACK,                           0xc60381b8, 0x83a4, 0x41f8, 0xa3, 0xd0, 0xde, 0x05, 0x07, 0x68, 0x49, 0xa9); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_COMPATIBILITY_MODE,                 0x3ef26ad4, 0xdc54, 0x45de, 0xb9, 0xaf, 0x76, 0xc8, 0xc6, 0x6b, 0xfa, 0x8e); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_COMPATIBILITY_MODE_WIN10,           0x5b25e089, 0x6ca7, 0x4139, 0xa2, 0xcb, 0xfc, 0xaa, 0xb3, 0x95, 0x52, 0xa3); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_COMPATIBILITY_MODE_WWA_EDGE,        0x15b29098, 0x9f01, 0x4e4d, 0xb6, 0x5a, 0xc0, 0x6c, 0x6c, 0x89, 0xda, 0x2a); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_CONTENT_PROTECTION_FLAGS,           0xe0350223, 0x5aaf, 0x4d76, 0xa7, 0xc3, 0x06, 0xde, 0x70, 0x89, 0x4d, 0xb4); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_CONTENT_PROTECTION_MANAGER,         0xfdd6dfaa, 0xbd85, 0x4af3, 0x9e, 0x0f, 0xa0, 0x1d, 0x53, 0x9d, 0x87, 0x6a); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_CONTINUE_ON_CODEC_ERROR,            0xdbcdb7f9, 0x48e4, 0x4295, 0xb7, 0x0d, 0xd5, 0x18, 0x23, 0x4e, 0xeb, 0x38); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_COREWINDOW,                         0xfccae4dc, 0x0b7f, 0x41c2, 0x9f, 0x96, 0x46, 0x59, 0x94, 0x8a, 0xcd, 0xdc); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_DXGI_MANAGER,                       0x065702da, 0x1094, 0x486d, 0x86, 0x17, 0xee, 0x7c, 0xc4, 0xee, 0x46, 0x48); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_EME_CALLBACK,                       0x494553a7, 0xa481, 0x4cb7, 0xbe, 0xc5, 0x38, 0x09, 0x03, 0x51, 0x37, 0x31); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_EXTENSION,                          0x3109fd46, 0x060d, 0x4b62, 0x8d, 0xcf, 0xfa, 0xff, 0x81, 0x13, 0x18, 0xd2); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_MEDIA_PLAYER_MODE,                  0x3ddd8d45, 0x5aa1, 0x4112, 0x82, 0xe5, 0x36, 0xf6, 0xa2, 0x19, 0x7e, 0x6e); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_NEEDKEY_CALLBACK,                   0x7ea80843, 0xb6e4, 0x432c, 0x8e, 0xa4, 0x78, 0x48, 0xff, 0xe4, 0x22, 0x0e); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_OPM_HWND,                           0xa0be8ee7, 0x0572, 0x4f2c, 0xa8, 0x01, 0x2a, 0x15, 0x1b, 0xd3, 0xe7, 0x26); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_PLAYBACK_HWND,                      0xd988879b, 0x67c9, 0x4d92, 0xba, 0xa7, 0x6e, 0xad, 0xd4, 0x46, 0x03, 0x9d); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_PLAYBACK_VISUAL,                    0x6debd26f, 0x6ab9, 0x4d7e, 0xb0, 0xee, 0xc6, 0x1a, 0x73, 0xff, 0xad, 0x15); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_SOURCE_RESOLVER_CONFIG_STORE,       0x0ac0c497, 0xb3c4, 0x48c9, 0x9c, 0xde, 0xbb, 0x8c, 0xa2, 0x44, 0x2c, 0xa3); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_STREAM_CONTAINS_ALPHA_CHANNEL,      0x5cbfaf44, 0xd2b2, 0x4cfb, 0x80, 0xa7, 0xd4, 0x29, 0xc7, 0x4c, 0x78, 0x9d); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_SYNCHRONOUS_CLOSE,                  0xc3c2e12f, 0x7e0e, 0x4e43, 0xb9, 0x1c, 0xdc, 0x99, 0x2c, 0xcd, 0xfa, 0x5e); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_TELEMETRY_APPLICATION_ID,           0x1e7b273b, 0xa7e4, 0x402a, 0x8f, 0x51, 0xc4, 0x8e, 0x88, 0xa2, 0xca, 0xbc); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_TRACK_ID,                           0x65bea312, 0x4043, 0x4815, 0x8e, 0xab, 0x44, 0xdc, 0xe2, 0xef, 0x8f, 0x2a); | 
|  | EXTERN_GUID(MF_MEDIA_ENGINE_VIDEO_OUTPUT_FORMAT,                0x5066893c, 0x8cf9, 0x42bc, 0x8b, 0x8a, 0x47, 0x22, 0x12, 0xe5, 0x27, 0x26); | 
|  | typedef enum MF_MEDIA_ENGINE_NETWORK { | 
|  | MF_MEDIA_ENGINE_NETWORK_EMPTY = 0, | 
|  | MF_MEDIA_ENGINE_NETWORK_IDLE = 1, | 
|  | MF_MEDIA_ENGINE_NETWORK_LOADING = 2, | 
|  | MF_MEDIA_ENGINE_NETWORK_NO_SOURCE = 3 | 
|  | } MF_MEDIA_ENGINE_NETWORK; | 
|  | typedef enum MF_MEDIA_ENGINE_ERR { | 
|  | MF_MEDIA_ENGINE_ERR_NOERROR = 0, | 
|  | MF_MEDIA_ENGINE_ERR_ABORTED = 1, | 
|  | MF_MEDIA_ENGINE_ERR_NETWORK = 2, | 
|  | MF_MEDIA_ENGINE_ERR_DECODE = 3, | 
|  | MF_MEDIA_ENGINE_ERR_SRC_NOT_SUPPORTED = 4, | 
|  | MF_MEDIA_ENGINE_ERR_ENCRYPTED = 5 | 
|  | } MF_MEDIA_ENGINE_ERR; | 
|  | typedef enum MF_MEDIA_ENGINE_PRELOAD { | 
|  | MF_MEDIA_ENGINE_PRELOAD_MISSING = 0, | 
|  | MF_MEDIA_ENGINE_PRELOAD_EMPTY = 1, | 
|  | MF_MEDIA_ENGINE_PRELOAD_NONE = 2, | 
|  | MF_MEDIA_ENGINE_PRELOAD_METADATA = 3, | 
|  | MF_MEDIA_ENGINE_PRELOAD_AUTOMATIC = 4 | 
|  | } MF_MEDIA_ENGINE_PRELOAD; | 
|  | typedef enum MF_MEDIA_ENGINE_CANPLAY { | 
|  | MF_MEDIA_ENGINE_CANPLAY_NOT_SUPPORTED = 0, | 
|  | MF_MEDIA_ENGINE_CANPLAY_MAYBE = 1, | 
|  | MF_MEDIA_ENGINE_CANPLAY_PROBABLY = 2 | 
|  | } MF_MEDIA_ENGINE_CANPLAY; | 
|  | #ifndef _MFVideoNormalizedRect_ | 
|  | #define _MFVideoNormalizedRect_ | 
|  | typedef struct MFVideoNormalizedRect { | 
|  | float left; | 
|  | float top; | 
|  | float right; | 
|  | float bottom; | 
|  | } MFVideoNormalizedRect; | 
|  | #endif | 
|  | typedef enum MF_MEDIA_ENGINE_CREATEFLAGS { | 
|  | MF_MEDIA_ENGINE_AUDIOONLY = 0x1, | 
|  | MF_MEDIA_ENGINE_WAITFORSTABLE_STATE = 0x2, | 
|  | MF_MEDIA_ENGINE_FORCEMUTE = 0x4, | 
|  | MF_MEDIA_ENGINE_REAL_TIME_MODE = 0x8, | 
|  | MF_MEDIA_ENGINE_DISABLE_LOCAL_PLUGINS = 0x10, | 
|  | MF_MEDIA_ENGINE_CREATEFLAGS_MASK = 0x1f | 
|  | } MF_MEDIA_ENGINE_CREATEFLAGS; | 
|  | typedef enum MF_MEDIA_ENGINE_EVENT { | 
|  | MF_MEDIA_ENGINE_EVENT_LOADSTART = 1, | 
|  | MF_MEDIA_ENGINE_EVENT_PROGRESS = 2, | 
|  | MF_MEDIA_ENGINE_EVENT_SUSPEND = 3, | 
|  | MF_MEDIA_ENGINE_EVENT_ABORT = 4, | 
|  | MF_MEDIA_ENGINE_EVENT_ERROR = 5, | 
|  | MF_MEDIA_ENGINE_EVENT_EMPTIED = 6, | 
|  | MF_MEDIA_ENGINE_EVENT_STALLED = 7, | 
|  | MF_MEDIA_ENGINE_EVENT_PLAY = 8, | 
|  | MF_MEDIA_ENGINE_EVENT_PAUSE = 9, | 
|  | MF_MEDIA_ENGINE_EVENT_LOADEDMETADATA = 10, | 
|  | MF_MEDIA_ENGINE_EVENT_LOADEDDATA = 11, | 
|  | MF_MEDIA_ENGINE_EVENT_WAITING = 12, | 
|  | MF_MEDIA_ENGINE_EVENT_PLAYING = 13, | 
|  | MF_MEDIA_ENGINE_EVENT_CANPLAY = 14, | 
|  | MF_MEDIA_ENGINE_EVENT_CANPLAYTHROUGH = 15, | 
|  | MF_MEDIA_ENGINE_EVENT_SEEKING = 16, | 
|  | MF_MEDIA_ENGINE_EVENT_SEEKED = 17, | 
|  | MF_MEDIA_ENGINE_EVENT_TIMEUPDATE = 18, | 
|  | MF_MEDIA_ENGINE_EVENT_ENDED = 19, | 
|  | MF_MEDIA_ENGINE_EVENT_RATECHANGE = 20, | 
|  | MF_MEDIA_ENGINE_EVENT_DURATIONCHANGE = 21, | 
|  | MF_MEDIA_ENGINE_EVENT_VOLUMECHANGE = 22, | 
|  | MF_MEDIA_ENGINE_EVENT_FORMATCHANGE = 1000, | 
|  | MF_MEDIA_ENGINE_EVENT_PURGEQUEUEDEVENTS = 1001, | 
|  | MF_MEDIA_ENGINE_EVENT_TIMELINE_MARKER = 1002, | 
|  | MF_MEDIA_ENGINE_EVENT_BALANCECHANGE = 1003, | 
|  | MF_MEDIA_ENGINE_EVENT_DOWNLOADCOMPLETE = 1004, | 
|  | MF_MEDIA_ENGINE_EVENT_BUFFERINGSTARTED = 1005, | 
|  | MF_MEDIA_ENGINE_EVENT_BUFFERINGENDED = 1006, | 
|  | MF_MEDIA_ENGINE_EVENT_FRAMESTEPCOMPLETED = 1007, | 
|  | MF_MEDIA_ENGINE_EVENT_NOTIFYSTABLESTATE = 1008, | 
|  | MF_MEDIA_ENGINE_EVENT_FIRSTFRAMEREADY = 1009, | 
|  | MF_MEDIA_ENGINE_EVENT_TRACKSCHANGE = 1010, | 
|  | MF_MEDIA_ENGINE_EVENT_OPMINFO = 1011, | 
|  | MF_MEDIA_ENGINE_EVENT_RESOURCELOST = 1012, | 
|  | MF_MEDIA_ENGINE_EVENT_DELAYLOADEVENT_CHANGED = 1013, | 
|  | MF_MEDIA_ENGINE_EVENT_STREAMRENDERINGERROR = 1014, | 
|  | MF_MEDIA_ENGINE_EVENT_SUPPORTEDRATES_CHANGED = 1015, | 
|  | MF_MEDIA_ENGINE_EVENT_AUDIOENDPOINTCHANGE = 1016 | 
|  | } MF_MEDIA_ENGINE_EVENT; | 
|  | typedef enum MF_MEDIA_ENGINE_READY { | 
|  | MF_MEDIA_ENGINE_READY_HAVE_NOTHING = 0, | 
|  | MF_MEDIA_ENGINE_READY_HAVE_METADATA = 1, | 
|  | MF_MEDIA_ENGINE_READY_HAVE_CURRENT_DATA = 2, | 
|  | MF_MEDIA_ENGINE_READY_HAVE_FUTURE_DATA = 3, | 
|  | MF_MEDIA_ENGINE_READY_HAVE_ENOUGH_DATA = 4 | 
|  | } MF_MEDIA_ENGINE_READY; | 
|  | /***************************************************************************** | 
|  | * IMFMediaError interface | 
|  | */ | 
|  | #ifndef __IMFMediaError_INTERFACE_DEFINED__ | 
|  | #define __IMFMediaError_INTERFACE_DEFINED__ | 
|  |  | 
|  | DEFINE_GUID(IID_IMFMediaError, 0xfc0e10d2, 0xab2a, 0x4501, 0xa9,0x51, 0x06,0xbb,0x10,0x75,0x18,0x4c); | 
|  | #if defined(__cplusplus) && !defined(CINTERFACE) | 
|  | MIDL_INTERFACE("fc0e10d2-ab2a-4501-a951-06bb1075184c") | 
|  | IMFMediaError : public IUnknown | 
|  | { | 
|  | virtual USHORT STDMETHODCALLTYPE GetErrorCode( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetExtendedErrorCode( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetErrorCode( | 
|  | MF_MEDIA_ENGINE_ERR error) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetExtendedErrorCode( | 
|  | HRESULT error) = 0; | 
|  |  | 
|  | }; | 
|  | #ifdef __CRT_UUID_DECL | 
|  | __CRT_UUID_DECL(IMFMediaError, 0xfc0e10d2, 0xab2a, 0x4501, 0xa9,0x51, 0x06,0xbb,0x10,0x75,0x18,0x4c) | 
|  | #endif | 
|  | #else | 
|  | typedef struct IMFMediaErrorVtbl { | 
|  | BEGIN_INTERFACE | 
|  |  | 
|  | /*** IUnknown methods ***/ | 
|  | HRESULT (STDMETHODCALLTYPE *QueryInterface)( | 
|  | IMFMediaError *This, | 
|  | REFIID riid, | 
|  | void **ppvObject); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *AddRef)( | 
|  | IMFMediaError *This); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *Release)( | 
|  | IMFMediaError *This); | 
|  |  | 
|  | /*** IMFMediaError methods ***/ | 
|  | USHORT (STDMETHODCALLTYPE *GetErrorCode)( | 
|  | IMFMediaError *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetExtendedErrorCode)( | 
|  | IMFMediaError *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetErrorCode)( | 
|  | IMFMediaError *This, | 
|  | MF_MEDIA_ENGINE_ERR error); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetExtendedErrorCode)( | 
|  | IMFMediaError *This, | 
|  | HRESULT error); | 
|  |  | 
|  | END_INTERFACE | 
|  | } IMFMediaErrorVtbl; | 
|  |  | 
|  | interface IMFMediaError { | 
|  | CONST_VTBL IMFMediaErrorVtbl* lpVtbl; | 
|  | }; | 
|  |  | 
|  | #ifdef COBJMACROS | 
|  | #ifndef WIDL_C_INLINE_WRAPPERS | 
|  | /*** IUnknown methods ***/ | 
|  | #define IMFMediaError_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) | 
|  | #define IMFMediaError_AddRef(This) (This)->lpVtbl->AddRef(This) | 
|  | #define IMFMediaError_Release(This) (This)->lpVtbl->Release(This) | 
|  | /*** IMFMediaError methods ***/ | 
|  | #define IMFMediaError_GetErrorCode(This) (This)->lpVtbl->GetErrorCode(This) | 
|  | #define IMFMediaError_GetExtendedErrorCode(This) (This)->lpVtbl->GetExtendedErrorCode(This) | 
|  | #define IMFMediaError_SetErrorCode(This,error) (This)->lpVtbl->SetErrorCode(This,error) | 
|  | #define IMFMediaError_SetExtendedErrorCode(This,error) (This)->lpVtbl->SetExtendedErrorCode(This,error) | 
|  | #else | 
|  | /*** IUnknown methods ***/ | 
|  | static inline HRESULT IMFMediaError_QueryInterface(IMFMediaError* This,REFIID riid,void **ppvObject) { | 
|  | return This->lpVtbl->QueryInterface(This,riid,ppvObject); | 
|  | } | 
|  | static inline ULONG IMFMediaError_AddRef(IMFMediaError* This) { | 
|  | return This->lpVtbl->AddRef(This); | 
|  | } | 
|  | static inline ULONG IMFMediaError_Release(IMFMediaError* This) { | 
|  | return This->lpVtbl->Release(This); | 
|  | } | 
|  | /*** IMFMediaError methods ***/ | 
|  | static inline USHORT IMFMediaError_GetErrorCode(IMFMediaError* This) { | 
|  | return This->lpVtbl->GetErrorCode(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaError_GetExtendedErrorCode(IMFMediaError* This) { | 
|  | return This->lpVtbl->GetExtendedErrorCode(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaError_SetErrorCode(IMFMediaError* This,MF_MEDIA_ENGINE_ERR error) { | 
|  | return This->lpVtbl->SetErrorCode(This,error); | 
|  | } | 
|  | static inline HRESULT IMFMediaError_SetExtendedErrorCode(IMFMediaError* This,HRESULT error) { | 
|  | return This->lpVtbl->SetExtendedErrorCode(This,error); | 
|  | } | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #endif  /* __IMFMediaError_INTERFACE_DEFINED__ */ | 
|  |  | 
|  | /***************************************************************************** | 
|  | * IMFMediaEngineSrcElements interface | 
|  | */ | 
|  | #ifndef __IMFMediaEngineSrcElements_INTERFACE_DEFINED__ | 
|  | #define __IMFMediaEngineSrcElements_INTERFACE_DEFINED__ | 
|  |  | 
|  | DEFINE_GUID(IID_IMFMediaEngineSrcElements, 0x7a5e5354, 0xb114, 0x4c72, 0xb9,0x91, 0x31,0x31,0xd7,0x50,0x32,0xea); | 
|  | #if defined(__cplusplus) && !defined(CINTERFACE) | 
|  | MIDL_INTERFACE("7a5e5354-b114-4c72-b991-3131d75032ea") | 
|  | IMFMediaEngineSrcElements : public IUnknown | 
|  | { | 
|  | virtual DWORD STDMETHODCALLTYPE GetLength( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetURL( | 
|  | DWORD index, | 
|  | BSTR *url) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetType( | 
|  | DWORD index, | 
|  | BSTR *type) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetMedia( | 
|  | DWORD index, | 
|  | BSTR *media) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE AddElement( | 
|  | BSTR url, | 
|  | BSTR type, | 
|  | BSTR media) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE RemoveAllElements( | 
|  | ) = 0; | 
|  |  | 
|  | }; | 
|  | #ifdef __CRT_UUID_DECL | 
|  | __CRT_UUID_DECL(IMFMediaEngineSrcElements, 0x7a5e5354, 0xb114, 0x4c72, 0xb9,0x91, 0x31,0x31,0xd7,0x50,0x32,0xea) | 
|  | #endif | 
|  | #else | 
|  | typedef struct IMFMediaEngineSrcElementsVtbl { | 
|  | BEGIN_INTERFACE | 
|  |  | 
|  | /*** IUnknown methods ***/ | 
|  | HRESULT (STDMETHODCALLTYPE *QueryInterface)( | 
|  | IMFMediaEngineSrcElements *This, | 
|  | REFIID riid, | 
|  | void **ppvObject); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *AddRef)( | 
|  | IMFMediaEngineSrcElements *This); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *Release)( | 
|  | IMFMediaEngineSrcElements *This); | 
|  |  | 
|  | /*** IMFMediaEngineSrcElements methods ***/ | 
|  | DWORD (STDMETHODCALLTYPE *GetLength)( | 
|  | IMFMediaEngineSrcElements *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetURL)( | 
|  | IMFMediaEngineSrcElements *This, | 
|  | DWORD index, | 
|  | BSTR *url); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetType)( | 
|  | IMFMediaEngineSrcElements *This, | 
|  | DWORD index, | 
|  | BSTR *type); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetMedia)( | 
|  | IMFMediaEngineSrcElements *This, | 
|  | DWORD index, | 
|  | BSTR *media); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *AddElement)( | 
|  | IMFMediaEngineSrcElements *This, | 
|  | BSTR url, | 
|  | BSTR type, | 
|  | BSTR media); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *RemoveAllElements)( | 
|  | IMFMediaEngineSrcElements *This); | 
|  |  | 
|  | END_INTERFACE | 
|  | } IMFMediaEngineSrcElementsVtbl; | 
|  |  | 
|  | interface IMFMediaEngineSrcElements { | 
|  | CONST_VTBL IMFMediaEngineSrcElementsVtbl* lpVtbl; | 
|  | }; | 
|  |  | 
|  | #ifdef COBJMACROS | 
|  | #ifndef WIDL_C_INLINE_WRAPPERS | 
|  | /*** IUnknown methods ***/ | 
|  | #define IMFMediaEngineSrcElements_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) | 
|  | #define IMFMediaEngineSrcElements_AddRef(This) (This)->lpVtbl->AddRef(This) | 
|  | #define IMFMediaEngineSrcElements_Release(This) (This)->lpVtbl->Release(This) | 
|  | /*** IMFMediaEngineSrcElements methods ***/ | 
|  | #define IMFMediaEngineSrcElements_GetLength(This) (This)->lpVtbl->GetLength(This) | 
|  | #define IMFMediaEngineSrcElements_GetURL(This,index,url) (This)->lpVtbl->GetURL(This,index,url) | 
|  | #define IMFMediaEngineSrcElements_GetType(This,index,type) (This)->lpVtbl->GetType(This,index,type) | 
|  | #define IMFMediaEngineSrcElements_GetMedia(This,index,media) (This)->lpVtbl->GetMedia(This,index,media) | 
|  | #define IMFMediaEngineSrcElements_AddElement(This,url,type,media) (This)->lpVtbl->AddElement(This,url,type,media) | 
|  | #define IMFMediaEngineSrcElements_RemoveAllElements(This) (This)->lpVtbl->RemoveAllElements(This) | 
|  | #else | 
|  | /*** IUnknown methods ***/ | 
|  | static inline HRESULT IMFMediaEngineSrcElements_QueryInterface(IMFMediaEngineSrcElements* This,REFIID riid,void **ppvObject) { | 
|  | return This->lpVtbl->QueryInterface(This,riid,ppvObject); | 
|  | } | 
|  | static inline ULONG IMFMediaEngineSrcElements_AddRef(IMFMediaEngineSrcElements* This) { | 
|  | return This->lpVtbl->AddRef(This); | 
|  | } | 
|  | static inline ULONG IMFMediaEngineSrcElements_Release(IMFMediaEngineSrcElements* This) { | 
|  | return This->lpVtbl->Release(This); | 
|  | } | 
|  | /*** IMFMediaEngineSrcElements methods ***/ | 
|  | static inline DWORD IMFMediaEngineSrcElements_GetLength(IMFMediaEngineSrcElements* This) { | 
|  | return This->lpVtbl->GetLength(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineSrcElements_GetURL(IMFMediaEngineSrcElements* This,DWORD index,BSTR *url) { | 
|  | return This->lpVtbl->GetURL(This,index,url); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineSrcElements_GetType(IMFMediaEngineSrcElements* This,DWORD index,BSTR *type) { | 
|  | return This->lpVtbl->GetType(This,index,type); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineSrcElements_GetMedia(IMFMediaEngineSrcElements* This,DWORD index,BSTR *media) { | 
|  | return This->lpVtbl->GetMedia(This,index,media); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineSrcElements_AddElement(IMFMediaEngineSrcElements* This,BSTR url,BSTR type,BSTR media) { | 
|  | return This->lpVtbl->AddElement(This,url,type,media); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineSrcElements_RemoveAllElements(IMFMediaEngineSrcElements* This) { | 
|  | return This->lpVtbl->RemoveAllElements(This); | 
|  | } | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #endif  /* __IMFMediaEngineSrcElements_INTERFACE_DEFINED__ */ | 
|  |  | 
|  | /***************************************************************************** | 
|  | * IMFMediaTimeRange interface | 
|  | */ | 
|  | #ifndef __IMFMediaTimeRange_INTERFACE_DEFINED__ | 
|  | #define __IMFMediaTimeRange_INTERFACE_DEFINED__ | 
|  |  | 
|  | DEFINE_GUID(IID_IMFMediaTimeRange, 0xdb71a2fc, 0x078a, 0x414e, 0x9d,0xf9, 0x8c,0x25,0x31,0xb0,0xaa,0x6c); | 
|  | #if defined(__cplusplus) && !defined(CINTERFACE) | 
|  | MIDL_INTERFACE("db71a2fc-078a-414e-9df9-8c2531b0aa6c") | 
|  | IMFMediaTimeRange : public IUnknown | 
|  | { | 
|  | virtual DWORD STDMETHODCALLTYPE GetLength( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetStart( | 
|  | DWORD index, | 
|  | double *start) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetEnd( | 
|  | DWORD index, | 
|  | double *end) = 0; | 
|  |  | 
|  | virtual WINBOOL STDMETHODCALLTYPE ContainsTime( | 
|  | double time) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE AddRange( | 
|  | double start, | 
|  | double end) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE Clear( | 
|  | ) = 0; | 
|  |  | 
|  | }; | 
|  | #ifdef __CRT_UUID_DECL | 
|  | __CRT_UUID_DECL(IMFMediaTimeRange, 0xdb71a2fc, 0x078a, 0x414e, 0x9d,0xf9, 0x8c,0x25,0x31,0xb0,0xaa,0x6c) | 
|  | #endif | 
|  | #else | 
|  | typedef struct IMFMediaTimeRangeVtbl { | 
|  | BEGIN_INTERFACE | 
|  |  | 
|  | /*** IUnknown methods ***/ | 
|  | HRESULT (STDMETHODCALLTYPE *QueryInterface)( | 
|  | IMFMediaTimeRange *This, | 
|  | REFIID riid, | 
|  | void **ppvObject); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *AddRef)( | 
|  | IMFMediaTimeRange *This); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *Release)( | 
|  | IMFMediaTimeRange *This); | 
|  |  | 
|  | /*** IMFMediaTimeRange methods ***/ | 
|  | DWORD (STDMETHODCALLTYPE *GetLength)( | 
|  | IMFMediaTimeRange *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetStart)( | 
|  | IMFMediaTimeRange *This, | 
|  | DWORD index, | 
|  | double *start); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetEnd)( | 
|  | IMFMediaTimeRange *This, | 
|  | DWORD index, | 
|  | double *end); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *ContainsTime)( | 
|  | IMFMediaTimeRange *This, | 
|  | double time); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *AddRange)( | 
|  | IMFMediaTimeRange *This, | 
|  | double start, | 
|  | double end); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *Clear)( | 
|  | IMFMediaTimeRange *This); | 
|  |  | 
|  | END_INTERFACE | 
|  | } IMFMediaTimeRangeVtbl; | 
|  |  | 
|  | interface IMFMediaTimeRange { | 
|  | CONST_VTBL IMFMediaTimeRangeVtbl* lpVtbl; | 
|  | }; | 
|  |  | 
|  | #ifdef COBJMACROS | 
|  | #ifndef WIDL_C_INLINE_WRAPPERS | 
|  | /*** IUnknown methods ***/ | 
|  | #define IMFMediaTimeRange_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) | 
|  | #define IMFMediaTimeRange_AddRef(This) (This)->lpVtbl->AddRef(This) | 
|  | #define IMFMediaTimeRange_Release(This) (This)->lpVtbl->Release(This) | 
|  | /*** IMFMediaTimeRange methods ***/ | 
|  | #define IMFMediaTimeRange_GetLength(This) (This)->lpVtbl->GetLength(This) | 
|  | #define IMFMediaTimeRange_GetStart(This,index,start) (This)->lpVtbl->GetStart(This,index,start) | 
|  | #define IMFMediaTimeRange_GetEnd(This,index,end) (This)->lpVtbl->GetEnd(This,index,end) | 
|  | #define IMFMediaTimeRange_ContainsTime(This,time) (This)->lpVtbl->ContainsTime(This,time) | 
|  | #define IMFMediaTimeRange_AddRange(This,start,end) (This)->lpVtbl->AddRange(This,start,end) | 
|  | #define IMFMediaTimeRange_Clear(This) (This)->lpVtbl->Clear(This) | 
|  | #else | 
|  | /*** IUnknown methods ***/ | 
|  | static inline HRESULT IMFMediaTimeRange_QueryInterface(IMFMediaTimeRange* This,REFIID riid,void **ppvObject) { | 
|  | return This->lpVtbl->QueryInterface(This,riid,ppvObject); | 
|  | } | 
|  | static inline ULONG IMFMediaTimeRange_AddRef(IMFMediaTimeRange* This) { | 
|  | return This->lpVtbl->AddRef(This); | 
|  | } | 
|  | static inline ULONG IMFMediaTimeRange_Release(IMFMediaTimeRange* This) { | 
|  | return This->lpVtbl->Release(This); | 
|  | } | 
|  | /*** IMFMediaTimeRange methods ***/ | 
|  | static inline DWORD IMFMediaTimeRange_GetLength(IMFMediaTimeRange* This) { | 
|  | return This->lpVtbl->GetLength(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaTimeRange_GetStart(IMFMediaTimeRange* This,DWORD index,double *start) { | 
|  | return This->lpVtbl->GetStart(This,index,start); | 
|  | } | 
|  | static inline HRESULT IMFMediaTimeRange_GetEnd(IMFMediaTimeRange* This,DWORD index,double *end) { | 
|  | return This->lpVtbl->GetEnd(This,index,end); | 
|  | } | 
|  | static inline WINBOOL IMFMediaTimeRange_ContainsTime(IMFMediaTimeRange* This,double time) { | 
|  | return This->lpVtbl->ContainsTime(This,time); | 
|  | } | 
|  | static inline HRESULT IMFMediaTimeRange_AddRange(IMFMediaTimeRange* This,double start,double end) { | 
|  | return This->lpVtbl->AddRange(This,start,end); | 
|  | } | 
|  | static inline HRESULT IMFMediaTimeRange_Clear(IMFMediaTimeRange* This) { | 
|  | return This->lpVtbl->Clear(This); | 
|  | } | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #endif  /* __IMFMediaTimeRange_INTERFACE_DEFINED__ */ | 
|  |  | 
|  | /***************************************************************************** | 
|  | * IMFMediaEngine interface | 
|  | */ | 
|  | #ifndef __IMFMediaEngine_INTERFACE_DEFINED__ | 
|  | #define __IMFMediaEngine_INTERFACE_DEFINED__ | 
|  |  | 
|  | #undef GetCurrentTime | 
|  | DEFINE_GUID(IID_IMFMediaEngine, 0x98a1b0bb, 0x03eb, 0x4935, 0xae,0x7c, 0x93,0xc1,0xfa,0x0e,0x1c,0x93); | 
|  | #if defined(__cplusplus) && !defined(CINTERFACE) | 
|  | MIDL_INTERFACE("98a1b0bb-03eb-4935-ae7c-93c1fa0e1c93") | 
|  | IMFMediaEngine : public IUnknown | 
|  | { | 
|  | virtual HRESULT STDMETHODCALLTYPE GetError( | 
|  | IMFMediaError **error) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetErrorCode( | 
|  | MF_MEDIA_ENGINE_ERR error) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetSourceElements( | 
|  | IMFMediaEngineSrcElements *elements) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetSource( | 
|  | BSTR url) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetCurrentSource( | 
|  | BSTR *url) = 0; | 
|  |  | 
|  | virtual USHORT STDMETHODCALLTYPE GetNetworkState( | 
|  | ) = 0; | 
|  |  | 
|  | virtual MF_MEDIA_ENGINE_PRELOAD STDMETHODCALLTYPE GetPreload( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetPreload( | 
|  | MF_MEDIA_ENGINE_PRELOAD preload) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetBuffered( | 
|  | IMFMediaTimeRange **buffered) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE Load( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE CanPlayType( | 
|  | BSTR type, | 
|  | MF_MEDIA_ENGINE_CANPLAY *answer) = 0; | 
|  |  | 
|  | virtual USHORT STDMETHODCALLTYPE GetReadyState( | 
|  | ) = 0; | 
|  |  | 
|  | virtual WINBOOL STDMETHODCALLTYPE IsSeeking( | 
|  | ) = 0; | 
|  |  | 
|  | virtual double STDMETHODCALLTYPE GetCurrentTime( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetCurrentTime( | 
|  | double time) = 0; | 
|  |  | 
|  | virtual double STDMETHODCALLTYPE GetStartTime( | 
|  | ) = 0; | 
|  |  | 
|  | virtual double STDMETHODCALLTYPE GetDuration( | 
|  | ) = 0; | 
|  |  | 
|  | virtual WINBOOL STDMETHODCALLTYPE IsPaused( | 
|  | ) = 0; | 
|  |  | 
|  | virtual double STDMETHODCALLTYPE GetDefaultPlaybackRate( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetDefaultPlaybackRate( | 
|  | double rate) = 0; | 
|  |  | 
|  | virtual double STDMETHODCALLTYPE GetPlaybackRate( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetPlaybackRate( | 
|  | double rate) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetPlayed( | 
|  | IMFMediaTimeRange **played) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetSeekable( | 
|  | IMFMediaTimeRange **seekable) = 0; | 
|  |  | 
|  | virtual WINBOOL STDMETHODCALLTYPE IsEnded( | 
|  | ) = 0; | 
|  |  | 
|  | virtual WINBOOL STDMETHODCALLTYPE GetAutoPlay( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetAutoPlay( | 
|  | WINBOOL autoplay) = 0; | 
|  |  | 
|  | virtual WINBOOL STDMETHODCALLTYPE GetLoop( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetLoop( | 
|  | WINBOOL loop) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE Play( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE Pause( | 
|  | ) = 0; | 
|  |  | 
|  | virtual WINBOOL STDMETHODCALLTYPE GetMuted( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetMuted( | 
|  | WINBOOL muted) = 0; | 
|  |  | 
|  | virtual double STDMETHODCALLTYPE GetVolume( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetVolume( | 
|  | double volume) = 0; | 
|  |  | 
|  | virtual WINBOOL STDMETHODCALLTYPE HasVideo( | 
|  | ) = 0; | 
|  |  | 
|  | virtual WINBOOL STDMETHODCALLTYPE HasAudio( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetNativeVideoSize( | 
|  | DWORD *cx, | 
|  | DWORD *cy) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetVideoAspectRatio( | 
|  | DWORD *cx, | 
|  | DWORD *cy) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE Shutdown( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE TransferVideoFrame( | 
|  | IUnknown *surface, | 
|  | const MFVideoNormalizedRect *src, | 
|  | const RECT *dst, | 
|  | const MFARGB *color) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE OnVideoStreamTick( | 
|  | LONGLONG *time) = 0; | 
|  |  | 
|  | }; | 
|  | #ifdef __CRT_UUID_DECL | 
|  | __CRT_UUID_DECL(IMFMediaEngine, 0x98a1b0bb, 0x03eb, 0x4935, 0xae,0x7c, 0x93,0xc1,0xfa,0x0e,0x1c,0x93) | 
|  | #endif | 
|  | #else | 
|  | typedef struct IMFMediaEngineVtbl { | 
|  | BEGIN_INTERFACE | 
|  |  | 
|  | /*** IUnknown methods ***/ | 
|  | HRESULT (STDMETHODCALLTYPE *QueryInterface)( | 
|  | IMFMediaEngine *This, | 
|  | REFIID riid, | 
|  | void **ppvObject); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *AddRef)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *Release)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | /*** IMFMediaEngine methods ***/ | 
|  | HRESULT (STDMETHODCALLTYPE *GetError)( | 
|  | IMFMediaEngine *This, | 
|  | IMFMediaError **error); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetErrorCode)( | 
|  | IMFMediaEngine *This, | 
|  | MF_MEDIA_ENGINE_ERR error); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetSourceElements)( | 
|  | IMFMediaEngine *This, | 
|  | IMFMediaEngineSrcElements *elements); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetSource)( | 
|  | IMFMediaEngine *This, | 
|  | BSTR url); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetCurrentSource)( | 
|  | IMFMediaEngine *This, | 
|  | BSTR *url); | 
|  |  | 
|  | USHORT (STDMETHODCALLTYPE *GetNetworkState)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | MF_MEDIA_ENGINE_PRELOAD (STDMETHODCALLTYPE *GetPreload)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetPreload)( | 
|  | IMFMediaEngine *This, | 
|  | MF_MEDIA_ENGINE_PRELOAD preload); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetBuffered)( | 
|  | IMFMediaEngine *This, | 
|  | IMFMediaTimeRange **buffered); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *Load)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *CanPlayType)( | 
|  | IMFMediaEngine *This, | 
|  | BSTR type, | 
|  | MF_MEDIA_ENGINE_CANPLAY *answer); | 
|  |  | 
|  | USHORT (STDMETHODCALLTYPE *GetReadyState)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *IsSeeking)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | double (STDMETHODCALLTYPE *GetCurrentTime)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetCurrentTime)( | 
|  | IMFMediaEngine *This, | 
|  | double time); | 
|  |  | 
|  | double (STDMETHODCALLTYPE *GetStartTime)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | double (STDMETHODCALLTYPE *GetDuration)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *IsPaused)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | double (STDMETHODCALLTYPE *GetDefaultPlaybackRate)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetDefaultPlaybackRate)( | 
|  | IMFMediaEngine *This, | 
|  | double rate); | 
|  |  | 
|  | double (STDMETHODCALLTYPE *GetPlaybackRate)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetPlaybackRate)( | 
|  | IMFMediaEngine *This, | 
|  | double rate); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetPlayed)( | 
|  | IMFMediaEngine *This, | 
|  | IMFMediaTimeRange **played); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetSeekable)( | 
|  | IMFMediaEngine *This, | 
|  | IMFMediaTimeRange **seekable); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *IsEnded)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *GetAutoPlay)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetAutoPlay)( | 
|  | IMFMediaEngine *This, | 
|  | WINBOOL autoplay); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *GetLoop)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetLoop)( | 
|  | IMFMediaEngine *This, | 
|  | WINBOOL loop); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *Play)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *Pause)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *GetMuted)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetMuted)( | 
|  | IMFMediaEngine *This, | 
|  | WINBOOL muted); | 
|  |  | 
|  | double (STDMETHODCALLTYPE *GetVolume)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetVolume)( | 
|  | IMFMediaEngine *This, | 
|  | double volume); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *HasVideo)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *HasAudio)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetNativeVideoSize)( | 
|  | IMFMediaEngine *This, | 
|  | DWORD *cx, | 
|  | DWORD *cy); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetVideoAspectRatio)( | 
|  | IMFMediaEngine *This, | 
|  | DWORD *cx, | 
|  | DWORD *cy); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *Shutdown)( | 
|  | IMFMediaEngine *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *TransferVideoFrame)( | 
|  | IMFMediaEngine *This, | 
|  | IUnknown *surface, | 
|  | const MFVideoNormalizedRect *src, | 
|  | const RECT *dst, | 
|  | const MFARGB *color); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *OnVideoStreamTick)( | 
|  | IMFMediaEngine *This, | 
|  | LONGLONG *time); | 
|  |  | 
|  | END_INTERFACE | 
|  | } IMFMediaEngineVtbl; | 
|  |  | 
|  | interface IMFMediaEngine { | 
|  | CONST_VTBL IMFMediaEngineVtbl* lpVtbl; | 
|  | }; | 
|  |  | 
|  | #ifdef COBJMACROS | 
|  | #ifndef WIDL_C_INLINE_WRAPPERS | 
|  | /*** IUnknown methods ***/ | 
|  | #define IMFMediaEngine_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) | 
|  | #define IMFMediaEngine_AddRef(This) (This)->lpVtbl->AddRef(This) | 
|  | #define IMFMediaEngine_Release(This) (This)->lpVtbl->Release(This) | 
|  | /*** IMFMediaEngine methods ***/ | 
|  | #define IMFMediaEngine_GetError(This,error) (This)->lpVtbl->GetError(This,error) | 
|  | #define IMFMediaEngine_SetErrorCode(This,error) (This)->lpVtbl->SetErrorCode(This,error) | 
|  | #define IMFMediaEngine_SetSourceElements(This,elements) (This)->lpVtbl->SetSourceElements(This,elements) | 
|  | #define IMFMediaEngine_SetSource(This,url) (This)->lpVtbl->SetSource(This,url) | 
|  | #define IMFMediaEngine_GetCurrentSource(This,url) (This)->lpVtbl->GetCurrentSource(This,url) | 
|  | #define IMFMediaEngine_GetNetworkState(This) (This)->lpVtbl->GetNetworkState(This) | 
|  | #define IMFMediaEngine_GetPreload(This) (This)->lpVtbl->GetPreload(This) | 
|  | #define IMFMediaEngine_SetPreload(This,preload) (This)->lpVtbl->SetPreload(This,preload) | 
|  | #define IMFMediaEngine_GetBuffered(This,buffered) (This)->lpVtbl->GetBuffered(This,buffered) | 
|  | #define IMFMediaEngine_Load(This) (This)->lpVtbl->Load(This) | 
|  | #define IMFMediaEngine_CanPlayType(This,type,answer) (This)->lpVtbl->CanPlayType(This,type,answer) | 
|  | #define IMFMediaEngine_GetReadyState(This) (This)->lpVtbl->GetReadyState(This) | 
|  | #define IMFMediaEngine_IsSeeking(This) (This)->lpVtbl->IsSeeking(This) | 
|  | #define IMFMediaEngine_GetCurrentTime(This) (This)->lpVtbl->GetCurrentTime(This) | 
|  | #define IMFMediaEngine_SetCurrentTime(This,time) (This)->lpVtbl->SetCurrentTime(This,time) | 
|  | #define IMFMediaEngine_GetStartTime(This) (This)->lpVtbl->GetStartTime(This) | 
|  | #define IMFMediaEngine_GetDuration(This) (This)->lpVtbl->GetDuration(This) | 
|  | #define IMFMediaEngine_IsPaused(This) (This)->lpVtbl->IsPaused(This) | 
|  | #define IMFMediaEngine_GetDefaultPlaybackRate(This) (This)->lpVtbl->GetDefaultPlaybackRate(This) | 
|  | #define IMFMediaEngine_SetDefaultPlaybackRate(This,rate) (This)->lpVtbl->SetDefaultPlaybackRate(This,rate) | 
|  | #define IMFMediaEngine_GetPlaybackRate(This) (This)->lpVtbl->GetPlaybackRate(This) | 
|  | #define IMFMediaEngine_SetPlaybackRate(This,rate) (This)->lpVtbl->SetPlaybackRate(This,rate) | 
|  | #define IMFMediaEngine_GetPlayed(This,played) (This)->lpVtbl->GetPlayed(This,played) | 
|  | #define IMFMediaEngine_GetSeekable(This,seekable) (This)->lpVtbl->GetSeekable(This,seekable) | 
|  | #define IMFMediaEngine_IsEnded(This) (This)->lpVtbl->IsEnded(This) | 
|  | #define IMFMediaEngine_GetAutoPlay(This) (This)->lpVtbl->GetAutoPlay(This) | 
|  | #define IMFMediaEngine_SetAutoPlay(This,autoplay) (This)->lpVtbl->SetAutoPlay(This,autoplay) | 
|  | #define IMFMediaEngine_GetLoop(This) (This)->lpVtbl->GetLoop(This) | 
|  | #define IMFMediaEngine_SetLoop(This,loop) (This)->lpVtbl->SetLoop(This,loop) | 
|  | #define IMFMediaEngine_Play(This) (This)->lpVtbl->Play(This) | 
|  | #define IMFMediaEngine_Pause(This) (This)->lpVtbl->Pause(This) | 
|  | #define IMFMediaEngine_GetMuted(This) (This)->lpVtbl->GetMuted(This) | 
|  | #define IMFMediaEngine_SetMuted(This,muted) (This)->lpVtbl->SetMuted(This,muted) | 
|  | #define IMFMediaEngine_GetVolume(This) (This)->lpVtbl->GetVolume(This) | 
|  | #define IMFMediaEngine_SetVolume(This,volume) (This)->lpVtbl->SetVolume(This,volume) | 
|  | #define IMFMediaEngine_HasVideo(This) (This)->lpVtbl->HasVideo(This) | 
|  | #define IMFMediaEngine_HasAudio(This) (This)->lpVtbl->HasAudio(This) | 
|  | #define IMFMediaEngine_GetNativeVideoSize(This,cx,cy) (This)->lpVtbl->GetNativeVideoSize(This,cx,cy) | 
|  | #define IMFMediaEngine_GetVideoAspectRatio(This,cx,cy) (This)->lpVtbl->GetVideoAspectRatio(This,cx,cy) | 
|  | #define IMFMediaEngine_Shutdown(This) (This)->lpVtbl->Shutdown(This) | 
|  | #define IMFMediaEngine_TransferVideoFrame(This,surface,src,dst,color) (This)->lpVtbl->TransferVideoFrame(This,surface,src,dst,color) | 
|  | #define IMFMediaEngine_OnVideoStreamTick(This,time) (This)->lpVtbl->OnVideoStreamTick(This,time) | 
|  | #else | 
|  | /*** IUnknown methods ***/ | 
|  | static inline HRESULT IMFMediaEngine_QueryInterface(IMFMediaEngine* This,REFIID riid,void **ppvObject) { | 
|  | return This->lpVtbl->QueryInterface(This,riid,ppvObject); | 
|  | } | 
|  | static inline ULONG IMFMediaEngine_AddRef(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->AddRef(This); | 
|  | } | 
|  | static inline ULONG IMFMediaEngine_Release(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->Release(This); | 
|  | } | 
|  | /*** IMFMediaEngine methods ***/ | 
|  | static inline HRESULT IMFMediaEngine_GetError(IMFMediaEngine* This,IMFMediaError **error) { | 
|  | return This->lpVtbl->GetError(This,error); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_SetErrorCode(IMFMediaEngine* This,MF_MEDIA_ENGINE_ERR error) { | 
|  | return This->lpVtbl->SetErrorCode(This,error); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_SetSourceElements(IMFMediaEngine* This,IMFMediaEngineSrcElements *elements) { | 
|  | return This->lpVtbl->SetSourceElements(This,elements); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_SetSource(IMFMediaEngine* This,BSTR url) { | 
|  | return This->lpVtbl->SetSource(This,url); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_GetCurrentSource(IMFMediaEngine* This,BSTR *url) { | 
|  | return This->lpVtbl->GetCurrentSource(This,url); | 
|  | } | 
|  | static inline USHORT IMFMediaEngine_GetNetworkState(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->GetNetworkState(This); | 
|  | } | 
|  | static inline MF_MEDIA_ENGINE_PRELOAD IMFMediaEngine_GetPreload(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->GetPreload(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_SetPreload(IMFMediaEngine* This,MF_MEDIA_ENGINE_PRELOAD preload) { | 
|  | return This->lpVtbl->SetPreload(This,preload); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_GetBuffered(IMFMediaEngine* This,IMFMediaTimeRange **buffered) { | 
|  | return This->lpVtbl->GetBuffered(This,buffered); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_Load(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->Load(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_CanPlayType(IMFMediaEngine* This,BSTR type,MF_MEDIA_ENGINE_CANPLAY *answer) { | 
|  | return This->lpVtbl->CanPlayType(This,type,answer); | 
|  | } | 
|  | static inline USHORT IMFMediaEngine_GetReadyState(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->GetReadyState(This); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngine_IsSeeking(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->IsSeeking(This); | 
|  | } | 
|  | static inline double IMFMediaEngine_GetCurrentTime(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->GetCurrentTime(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_SetCurrentTime(IMFMediaEngine* This,double time) { | 
|  | return This->lpVtbl->SetCurrentTime(This,time); | 
|  | } | 
|  | static inline double IMFMediaEngine_GetStartTime(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->GetStartTime(This); | 
|  | } | 
|  | static inline double IMFMediaEngine_GetDuration(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->GetDuration(This); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngine_IsPaused(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->IsPaused(This); | 
|  | } | 
|  | static inline double IMFMediaEngine_GetDefaultPlaybackRate(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->GetDefaultPlaybackRate(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_SetDefaultPlaybackRate(IMFMediaEngine* This,double rate) { | 
|  | return This->lpVtbl->SetDefaultPlaybackRate(This,rate); | 
|  | } | 
|  | static inline double IMFMediaEngine_GetPlaybackRate(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->GetPlaybackRate(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_SetPlaybackRate(IMFMediaEngine* This,double rate) { | 
|  | return This->lpVtbl->SetPlaybackRate(This,rate); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_GetPlayed(IMFMediaEngine* This,IMFMediaTimeRange **played) { | 
|  | return This->lpVtbl->GetPlayed(This,played); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_GetSeekable(IMFMediaEngine* This,IMFMediaTimeRange **seekable) { | 
|  | return This->lpVtbl->GetSeekable(This,seekable); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngine_IsEnded(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->IsEnded(This); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngine_GetAutoPlay(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->GetAutoPlay(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_SetAutoPlay(IMFMediaEngine* This,WINBOOL autoplay) { | 
|  | return This->lpVtbl->SetAutoPlay(This,autoplay); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngine_GetLoop(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->GetLoop(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_SetLoop(IMFMediaEngine* This,WINBOOL loop) { | 
|  | return This->lpVtbl->SetLoop(This,loop); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_Play(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->Play(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_Pause(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->Pause(This); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngine_GetMuted(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->GetMuted(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_SetMuted(IMFMediaEngine* This,WINBOOL muted) { | 
|  | return This->lpVtbl->SetMuted(This,muted); | 
|  | } | 
|  | static inline double IMFMediaEngine_GetVolume(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->GetVolume(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_SetVolume(IMFMediaEngine* This,double volume) { | 
|  | return This->lpVtbl->SetVolume(This,volume); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngine_HasVideo(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->HasVideo(This); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngine_HasAudio(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->HasAudio(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_GetNativeVideoSize(IMFMediaEngine* This,DWORD *cx,DWORD *cy) { | 
|  | return This->lpVtbl->GetNativeVideoSize(This,cx,cy); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_GetVideoAspectRatio(IMFMediaEngine* This,DWORD *cx,DWORD *cy) { | 
|  | return This->lpVtbl->GetVideoAspectRatio(This,cx,cy); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_Shutdown(IMFMediaEngine* This) { | 
|  | return This->lpVtbl->Shutdown(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_TransferVideoFrame(IMFMediaEngine* This,IUnknown *surface,const MFVideoNormalizedRect *src,const RECT *dst,const MFARGB *color) { | 
|  | return This->lpVtbl->TransferVideoFrame(This,surface,src,dst,color); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngine_OnVideoStreamTick(IMFMediaEngine* This,LONGLONG *time) { | 
|  | return This->lpVtbl->OnVideoStreamTick(This,time); | 
|  | } | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #endif  /* __IMFMediaEngine_INTERFACE_DEFINED__ */ | 
|  |  | 
|  | typedef enum MF_MEDIA_ENGINE_STATISTIC { | 
|  | MF_MEDIA_ENGINE_STATISTIC_FRAMES_RENDERED = 0, | 
|  | MF_MEDIA_ENGINE_STATISTIC_FRAMES_DROPPED = 1, | 
|  | MF_MEDIA_ENGINE_STATISTIC_BYTES_DOWNLOADED = 2, | 
|  | MF_MEDIA_ENGINE_STATISTIC_BUFFER_PROGRESS = 3, | 
|  | MF_MEDIA_ENGINE_STATISTIC_FRAMES_PER_SECOND = 4, | 
|  | MF_MEDIA_ENGINE_STATISTIC_PLAYBACK_JITTER = 5, | 
|  | MF_MEDIA_ENGINE_STATISTIC_FRAMES_CORRUPTED = 6, | 
|  | MF_MEDIA_ENGINE_STATISTIC_TOTAL_FRAME_DELAY = 7 | 
|  | } MF_MEDIA_ENGINE_STATISTIC; | 
|  | typedef enum MF_MEDIA_ENGINE_S3D_PACKING_MODE { | 
|  | MF_MEDIA_ENGINE_S3D_PACKING_MODE_NONE = 0, | 
|  | MF_MEDIA_ENGINE_S3D_PACKING_MODE_SIDE_BY_SIDE = 1, | 
|  | MF_MEDIA_ENGINE_S3D_PACKING_MODE_TOP_BOTTOM = 2 | 
|  | } MF_MEDIA_ENGINE_S3D_PACKING_MODE; | 
|  | typedef enum MF_MEDIA_ENGINE_SEEK_MODE { | 
|  | MF_MEDIA_ENGINE_SEEK_MODE_NORMAL = 0, | 
|  | MF_MEDIA_ENGINE_SEEK_MODE_APPROXIMATE = 1 | 
|  | } MF_MEDIA_ENGINE_SEEK_MODE; | 
|  | /***************************************************************************** | 
|  | * IMFMediaEngineEx interface | 
|  | */ | 
|  | #ifndef __IMFMediaEngineEx_INTERFACE_DEFINED__ | 
|  | #define __IMFMediaEngineEx_INTERFACE_DEFINED__ | 
|  |  | 
|  | DEFINE_GUID(IID_IMFMediaEngineEx, 0x83015ead, 0xb1e6, 0x40d0, 0xa9,0x8a, 0x37,0x14,0x5f,0xfe,0x1a,0xd1); | 
|  | #if defined(__cplusplus) && !defined(CINTERFACE) | 
|  | MIDL_INTERFACE("83015ead-b1e6-40d0-a98a-37145ffe1ad1") | 
|  | IMFMediaEngineEx : public IMFMediaEngine | 
|  | { | 
|  | virtual HRESULT STDMETHODCALLTYPE SetSourceFromByteStream( | 
|  | IMFByteStream *bytestream, | 
|  | BSTR url) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetStatistics( | 
|  | MF_MEDIA_ENGINE_STATISTIC stat_id, | 
|  | PROPVARIANT *stat) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE UpdateVideoStream( | 
|  | const MFVideoNormalizedRect *src, | 
|  | const RECT *dst, | 
|  | const MFARGB *border_color) = 0; | 
|  |  | 
|  | virtual double STDMETHODCALLTYPE GetBalance( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetBalance( | 
|  | double balance) = 0; | 
|  |  | 
|  | virtual WINBOOL STDMETHODCALLTYPE IsPlaybackRateSupported( | 
|  | double rate) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE FrameStep( | 
|  | WINBOOL forward) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetResourceCharacteristics( | 
|  | DWORD *flags) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetPresentationAttribute( | 
|  | REFGUID attribute, | 
|  | PROPVARIANT *value) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetNumberOfStreams( | 
|  | DWORD *stream_count) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetStreamAttribute( | 
|  | DWORD stream_index, | 
|  | REFGUID attribute, | 
|  | PROPVARIANT *value) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetStreamSelection( | 
|  | DWORD stream_index, | 
|  | WINBOOL *enabled) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetStreamSelection( | 
|  | DWORD stream_index, | 
|  | WINBOOL enabled) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE ApplyStreamSelections( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE IsProtected( | 
|  | WINBOOL *is_protected) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE InsertVideoEffect( | 
|  | IUnknown *effect, | 
|  | WINBOOL is_optional) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE InsertAudioEffect( | 
|  | IUnknown *effect, | 
|  | WINBOOL is_optional) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE RemoveAllEffects( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetTimelineMarkerTimer( | 
|  | double timeout) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetTimelineMarkerTimer( | 
|  | double *timeout) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE CancelTimelineMarkerTimer( | 
|  | ) = 0; | 
|  |  | 
|  | virtual WINBOOL STDMETHODCALLTYPE IsStereo3D( | 
|  | ) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetStereo3DFramePackingMode( | 
|  | MF_MEDIA_ENGINE_S3D_PACKING_MODE *mode) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetStereo3DFramePackingMode( | 
|  | MF_MEDIA_ENGINE_S3D_PACKING_MODE mode) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetStereo3DRenderMode( | 
|  | MF3DVideoOutputType *output_type) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetStereo3DRenderMode( | 
|  | MF3DVideoOutputType output_type) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE EnableWindowlessSwapchainMode( | 
|  | WINBOOL enable) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetVideoSwapchainHandle( | 
|  | HANDLE *swapchain) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE EnableHorizontalMirrorMode( | 
|  | WINBOOL enable) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetAudioStreamCategory( | 
|  | UINT32 *category) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetAudioStreamCategory( | 
|  | UINT32 category) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetAudioEndpointRole( | 
|  | UINT32 *role) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetAudioEndpointRole( | 
|  | UINT32 role) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetRealTimeMode( | 
|  | WINBOOL *enabled) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetRealTimeMode( | 
|  | WINBOOL enable) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE SetCurrentTimeEx( | 
|  | double seektime, | 
|  | MF_MEDIA_ENGINE_SEEK_MODE mode) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE EnableTimeUpdateTimer( | 
|  | WINBOOL enable) = 0; | 
|  |  | 
|  | }; | 
|  | #ifdef __CRT_UUID_DECL | 
|  | __CRT_UUID_DECL(IMFMediaEngineEx, 0x83015ead, 0xb1e6, 0x40d0, 0xa9,0x8a, 0x37,0x14,0x5f,0xfe,0x1a,0xd1) | 
|  | #endif | 
|  | #else | 
|  | typedef struct IMFMediaEngineExVtbl { | 
|  | BEGIN_INTERFACE | 
|  |  | 
|  | /*** IUnknown methods ***/ | 
|  | HRESULT (STDMETHODCALLTYPE *QueryInterface)( | 
|  | IMFMediaEngineEx *This, | 
|  | REFIID riid, | 
|  | void **ppvObject); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *AddRef)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *Release)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | /*** IMFMediaEngine methods ***/ | 
|  | HRESULT (STDMETHODCALLTYPE *GetError)( | 
|  | IMFMediaEngineEx *This, | 
|  | IMFMediaError **error); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetErrorCode)( | 
|  | IMFMediaEngineEx *This, | 
|  | MF_MEDIA_ENGINE_ERR error); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetSourceElements)( | 
|  | IMFMediaEngineEx *This, | 
|  | IMFMediaEngineSrcElements *elements); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetSource)( | 
|  | IMFMediaEngineEx *This, | 
|  | BSTR url); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetCurrentSource)( | 
|  | IMFMediaEngineEx *This, | 
|  | BSTR *url); | 
|  |  | 
|  | USHORT (STDMETHODCALLTYPE *GetNetworkState)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | MF_MEDIA_ENGINE_PRELOAD (STDMETHODCALLTYPE *GetPreload)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetPreload)( | 
|  | IMFMediaEngineEx *This, | 
|  | MF_MEDIA_ENGINE_PRELOAD preload); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetBuffered)( | 
|  | IMFMediaEngineEx *This, | 
|  | IMFMediaTimeRange **buffered); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *Load)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *CanPlayType)( | 
|  | IMFMediaEngineEx *This, | 
|  | BSTR type, | 
|  | MF_MEDIA_ENGINE_CANPLAY *answer); | 
|  |  | 
|  | USHORT (STDMETHODCALLTYPE *GetReadyState)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *IsSeeking)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | double (STDMETHODCALLTYPE *GetCurrentTime)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetCurrentTime)( | 
|  | IMFMediaEngineEx *This, | 
|  | double time); | 
|  |  | 
|  | double (STDMETHODCALLTYPE *GetStartTime)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | double (STDMETHODCALLTYPE *GetDuration)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *IsPaused)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | double (STDMETHODCALLTYPE *GetDefaultPlaybackRate)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetDefaultPlaybackRate)( | 
|  | IMFMediaEngineEx *This, | 
|  | double rate); | 
|  |  | 
|  | double (STDMETHODCALLTYPE *GetPlaybackRate)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetPlaybackRate)( | 
|  | IMFMediaEngineEx *This, | 
|  | double rate); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetPlayed)( | 
|  | IMFMediaEngineEx *This, | 
|  | IMFMediaTimeRange **played); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetSeekable)( | 
|  | IMFMediaEngineEx *This, | 
|  | IMFMediaTimeRange **seekable); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *IsEnded)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *GetAutoPlay)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetAutoPlay)( | 
|  | IMFMediaEngineEx *This, | 
|  | WINBOOL autoplay); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *GetLoop)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetLoop)( | 
|  | IMFMediaEngineEx *This, | 
|  | WINBOOL loop); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *Play)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *Pause)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *GetMuted)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetMuted)( | 
|  | IMFMediaEngineEx *This, | 
|  | WINBOOL muted); | 
|  |  | 
|  | double (STDMETHODCALLTYPE *GetVolume)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetVolume)( | 
|  | IMFMediaEngineEx *This, | 
|  | double volume); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *HasVideo)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *HasAudio)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetNativeVideoSize)( | 
|  | IMFMediaEngineEx *This, | 
|  | DWORD *cx, | 
|  | DWORD *cy); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetVideoAspectRatio)( | 
|  | IMFMediaEngineEx *This, | 
|  | DWORD *cx, | 
|  | DWORD *cy); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *Shutdown)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *TransferVideoFrame)( | 
|  | IMFMediaEngineEx *This, | 
|  | IUnknown *surface, | 
|  | const MFVideoNormalizedRect *src, | 
|  | const RECT *dst, | 
|  | const MFARGB *color); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *OnVideoStreamTick)( | 
|  | IMFMediaEngineEx *This, | 
|  | LONGLONG *time); | 
|  |  | 
|  | /*** IMFMediaEngineEx methods ***/ | 
|  | HRESULT (STDMETHODCALLTYPE *SetSourceFromByteStream)( | 
|  | IMFMediaEngineEx *This, | 
|  | IMFByteStream *bytestream, | 
|  | BSTR url); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetStatistics)( | 
|  | IMFMediaEngineEx *This, | 
|  | MF_MEDIA_ENGINE_STATISTIC stat_id, | 
|  | PROPVARIANT *stat); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *UpdateVideoStream)( | 
|  | IMFMediaEngineEx *This, | 
|  | const MFVideoNormalizedRect *src, | 
|  | const RECT *dst, | 
|  | const MFARGB *border_color); | 
|  |  | 
|  | double (STDMETHODCALLTYPE *GetBalance)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetBalance)( | 
|  | IMFMediaEngineEx *This, | 
|  | double balance); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *IsPlaybackRateSupported)( | 
|  | IMFMediaEngineEx *This, | 
|  | double rate); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *FrameStep)( | 
|  | IMFMediaEngineEx *This, | 
|  | WINBOOL forward); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetResourceCharacteristics)( | 
|  | IMFMediaEngineEx *This, | 
|  | DWORD *flags); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetPresentationAttribute)( | 
|  | IMFMediaEngineEx *This, | 
|  | REFGUID attribute, | 
|  | PROPVARIANT *value); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetNumberOfStreams)( | 
|  | IMFMediaEngineEx *This, | 
|  | DWORD *stream_count); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetStreamAttribute)( | 
|  | IMFMediaEngineEx *This, | 
|  | DWORD stream_index, | 
|  | REFGUID attribute, | 
|  | PROPVARIANT *value); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetStreamSelection)( | 
|  | IMFMediaEngineEx *This, | 
|  | DWORD stream_index, | 
|  | WINBOOL *enabled); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetStreamSelection)( | 
|  | IMFMediaEngineEx *This, | 
|  | DWORD stream_index, | 
|  | WINBOOL enabled); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *ApplyStreamSelections)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *IsProtected)( | 
|  | IMFMediaEngineEx *This, | 
|  | WINBOOL *is_protected); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *InsertVideoEffect)( | 
|  | IMFMediaEngineEx *This, | 
|  | IUnknown *effect, | 
|  | WINBOOL is_optional); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *InsertAudioEffect)( | 
|  | IMFMediaEngineEx *This, | 
|  | IUnknown *effect, | 
|  | WINBOOL is_optional); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *RemoveAllEffects)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetTimelineMarkerTimer)( | 
|  | IMFMediaEngineEx *This, | 
|  | double timeout); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetTimelineMarkerTimer)( | 
|  | IMFMediaEngineEx *This, | 
|  | double *timeout); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *CancelTimelineMarkerTimer)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | WINBOOL (STDMETHODCALLTYPE *IsStereo3D)( | 
|  | IMFMediaEngineEx *This); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetStereo3DFramePackingMode)( | 
|  | IMFMediaEngineEx *This, | 
|  | MF_MEDIA_ENGINE_S3D_PACKING_MODE *mode); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetStereo3DFramePackingMode)( | 
|  | IMFMediaEngineEx *This, | 
|  | MF_MEDIA_ENGINE_S3D_PACKING_MODE mode); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetStereo3DRenderMode)( | 
|  | IMFMediaEngineEx *This, | 
|  | MF3DVideoOutputType *output_type); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetStereo3DRenderMode)( | 
|  | IMFMediaEngineEx *This, | 
|  | MF3DVideoOutputType output_type); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *EnableWindowlessSwapchainMode)( | 
|  | IMFMediaEngineEx *This, | 
|  | WINBOOL enable); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetVideoSwapchainHandle)( | 
|  | IMFMediaEngineEx *This, | 
|  | HANDLE *swapchain); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *EnableHorizontalMirrorMode)( | 
|  | IMFMediaEngineEx *This, | 
|  | WINBOOL enable); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetAudioStreamCategory)( | 
|  | IMFMediaEngineEx *This, | 
|  | UINT32 *category); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetAudioStreamCategory)( | 
|  | IMFMediaEngineEx *This, | 
|  | UINT32 category); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetAudioEndpointRole)( | 
|  | IMFMediaEngineEx *This, | 
|  | UINT32 *role); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetAudioEndpointRole)( | 
|  | IMFMediaEngineEx *This, | 
|  | UINT32 role); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetRealTimeMode)( | 
|  | IMFMediaEngineEx *This, | 
|  | WINBOOL *enabled); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetRealTimeMode)( | 
|  | IMFMediaEngineEx *This, | 
|  | WINBOOL enable); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *SetCurrentTimeEx)( | 
|  | IMFMediaEngineEx *This, | 
|  | double seektime, | 
|  | MF_MEDIA_ENGINE_SEEK_MODE mode); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *EnableTimeUpdateTimer)( | 
|  | IMFMediaEngineEx *This, | 
|  | WINBOOL enable); | 
|  |  | 
|  | END_INTERFACE | 
|  | } IMFMediaEngineExVtbl; | 
|  |  | 
|  | interface IMFMediaEngineEx { | 
|  | CONST_VTBL IMFMediaEngineExVtbl* lpVtbl; | 
|  | }; | 
|  |  | 
|  | #ifdef COBJMACROS | 
|  | #ifndef WIDL_C_INLINE_WRAPPERS | 
|  | /*** IUnknown methods ***/ | 
|  | #define IMFMediaEngineEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) | 
|  | #define IMFMediaEngineEx_AddRef(This) (This)->lpVtbl->AddRef(This) | 
|  | #define IMFMediaEngineEx_Release(This) (This)->lpVtbl->Release(This) | 
|  | /*** IMFMediaEngine methods ***/ | 
|  | #define IMFMediaEngineEx_GetError(This,error) (This)->lpVtbl->GetError(This,error) | 
|  | #define IMFMediaEngineEx_SetErrorCode(This,error) (This)->lpVtbl->SetErrorCode(This,error) | 
|  | #define IMFMediaEngineEx_SetSourceElements(This,elements) (This)->lpVtbl->SetSourceElements(This,elements) | 
|  | #define IMFMediaEngineEx_SetSource(This,url) (This)->lpVtbl->SetSource(This,url) | 
|  | #define IMFMediaEngineEx_GetCurrentSource(This,url) (This)->lpVtbl->GetCurrentSource(This,url) | 
|  | #define IMFMediaEngineEx_GetNetworkState(This) (This)->lpVtbl->GetNetworkState(This) | 
|  | #define IMFMediaEngineEx_GetPreload(This) (This)->lpVtbl->GetPreload(This) | 
|  | #define IMFMediaEngineEx_SetPreload(This,preload) (This)->lpVtbl->SetPreload(This,preload) | 
|  | #define IMFMediaEngineEx_GetBuffered(This,buffered) (This)->lpVtbl->GetBuffered(This,buffered) | 
|  | #define IMFMediaEngineEx_Load(This) (This)->lpVtbl->Load(This) | 
|  | #define IMFMediaEngineEx_CanPlayType(This,type,answer) (This)->lpVtbl->CanPlayType(This,type,answer) | 
|  | #define IMFMediaEngineEx_GetReadyState(This) (This)->lpVtbl->GetReadyState(This) | 
|  | #define IMFMediaEngineEx_IsSeeking(This) (This)->lpVtbl->IsSeeking(This) | 
|  | #define IMFMediaEngineEx_GetCurrentTime(This) (This)->lpVtbl->GetCurrentTime(This) | 
|  | #define IMFMediaEngineEx_SetCurrentTime(This,time) (This)->lpVtbl->SetCurrentTime(This,time) | 
|  | #define IMFMediaEngineEx_GetStartTime(This) (This)->lpVtbl->GetStartTime(This) | 
|  | #define IMFMediaEngineEx_GetDuration(This) (This)->lpVtbl->GetDuration(This) | 
|  | #define IMFMediaEngineEx_IsPaused(This) (This)->lpVtbl->IsPaused(This) | 
|  | #define IMFMediaEngineEx_GetDefaultPlaybackRate(This) (This)->lpVtbl->GetDefaultPlaybackRate(This) | 
|  | #define IMFMediaEngineEx_SetDefaultPlaybackRate(This,rate) (This)->lpVtbl->SetDefaultPlaybackRate(This,rate) | 
|  | #define IMFMediaEngineEx_GetPlaybackRate(This) (This)->lpVtbl->GetPlaybackRate(This) | 
|  | #define IMFMediaEngineEx_SetPlaybackRate(This,rate) (This)->lpVtbl->SetPlaybackRate(This,rate) | 
|  | #define IMFMediaEngineEx_GetPlayed(This,played) (This)->lpVtbl->GetPlayed(This,played) | 
|  | #define IMFMediaEngineEx_GetSeekable(This,seekable) (This)->lpVtbl->GetSeekable(This,seekable) | 
|  | #define IMFMediaEngineEx_IsEnded(This) (This)->lpVtbl->IsEnded(This) | 
|  | #define IMFMediaEngineEx_GetAutoPlay(This) (This)->lpVtbl->GetAutoPlay(This) | 
|  | #define IMFMediaEngineEx_SetAutoPlay(This,autoplay) (This)->lpVtbl->SetAutoPlay(This,autoplay) | 
|  | #define IMFMediaEngineEx_GetLoop(This) (This)->lpVtbl->GetLoop(This) | 
|  | #define IMFMediaEngineEx_SetLoop(This,loop) (This)->lpVtbl->SetLoop(This,loop) | 
|  | #define IMFMediaEngineEx_Play(This) (This)->lpVtbl->Play(This) | 
|  | #define IMFMediaEngineEx_Pause(This) (This)->lpVtbl->Pause(This) | 
|  | #define IMFMediaEngineEx_GetMuted(This) (This)->lpVtbl->GetMuted(This) | 
|  | #define IMFMediaEngineEx_SetMuted(This,muted) (This)->lpVtbl->SetMuted(This,muted) | 
|  | #define IMFMediaEngineEx_GetVolume(This) (This)->lpVtbl->GetVolume(This) | 
|  | #define IMFMediaEngineEx_SetVolume(This,volume) (This)->lpVtbl->SetVolume(This,volume) | 
|  | #define IMFMediaEngineEx_HasVideo(This) (This)->lpVtbl->HasVideo(This) | 
|  | #define IMFMediaEngineEx_HasAudio(This) (This)->lpVtbl->HasAudio(This) | 
|  | #define IMFMediaEngineEx_GetNativeVideoSize(This,cx,cy) (This)->lpVtbl->GetNativeVideoSize(This,cx,cy) | 
|  | #define IMFMediaEngineEx_GetVideoAspectRatio(This,cx,cy) (This)->lpVtbl->GetVideoAspectRatio(This,cx,cy) | 
|  | #define IMFMediaEngineEx_Shutdown(This) (This)->lpVtbl->Shutdown(This) | 
|  | #define IMFMediaEngineEx_TransferVideoFrame(This,surface,src,dst,color) (This)->lpVtbl->TransferVideoFrame(This,surface,src,dst,color) | 
|  | #define IMFMediaEngineEx_OnVideoStreamTick(This,time) (This)->lpVtbl->OnVideoStreamTick(This,time) | 
|  | /*** IMFMediaEngineEx methods ***/ | 
|  | #define IMFMediaEngineEx_SetSourceFromByteStream(This,bytestream,url) (This)->lpVtbl->SetSourceFromByteStream(This,bytestream,url) | 
|  | #define IMFMediaEngineEx_GetStatistics(This,stat_id,stat) (This)->lpVtbl->GetStatistics(This,stat_id,stat) | 
|  | #define IMFMediaEngineEx_UpdateVideoStream(This,src,dst,border_color) (This)->lpVtbl->UpdateVideoStream(This,src,dst,border_color) | 
|  | #define IMFMediaEngineEx_GetBalance(This) (This)->lpVtbl->GetBalance(This) | 
|  | #define IMFMediaEngineEx_SetBalance(This,balance) (This)->lpVtbl->SetBalance(This,balance) | 
|  | #define IMFMediaEngineEx_IsPlaybackRateSupported(This,rate) (This)->lpVtbl->IsPlaybackRateSupported(This,rate) | 
|  | #define IMFMediaEngineEx_FrameStep(This,forward) (This)->lpVtbl->FrameStep(This,forward) | 
|  | #define IMFMediaEngineEx_GetResourceCharacteristics(This,flags) (This)->lpVtbl->GetResourceCharacteristics(This,flags) | 
|  | #define IMFMediaEngineEx_GetPresentationAttribute(This,attribute,value) (This)->lpVtbl->GetPresentationAttribute(This,attribute,value) | 
|  | #define IMFMediaEngineEx_GetNumberOfStreams(This,stream_count) (This)->lpVtbl->GetNumberOfStreams(This,stream_count) | 
|  | #define IMFMediaEngineEx_GetStreamAttribute(This,stream_index,attribute,value) (This)->lpVtbl->GetStreamAttribute(This,stream_index,attribute,value) | 
|  | #define IMFMediaEngineEx_GetStreamSelection(This,stream_index,enabled) (This)->lpVtbl->GetStreamSelection(This,stream_index,enabled) | 
|  | #define IMFMediaEngineEx_SetStreamSelection(This,stream_index,enabled) (This)->lpVtbl->SetStreamSelection(This,stream_index,enabled) | 
|  | #define IMFMediaEngineEx_ApplyStreamSelections(This) (This)->lpVtbl->ApplyStreamSelections(This) | 
|  | #define IMFMediaEngineEx_IsProtected(This,is_protected) (This)->lpVtbl->IsProtected(This,is_protected) | 
|  | #define IMFMediaEngineEx_InsertVideoEffect(This,effect,is_optional) (This)->lpVtbl->InsertVideoEffect(This,effect,is_optional) | 
|  | #define IMFMediaEngineEx_InsertAudioEffect(This,effect,is_optional) (This)->lpVtbl->InsertAudioEffect(This,effect,is_optional) | 
|  | #define IMFMediaEngineEx_RemoveAllEffects(This) (This)->lpVtbl->RemoveAllEffects(This) | 
|  | #define IMFMediaEngineEx_SetTimelineMarkerTimer(This,timeout) (This)->lpVtbl->SetTimelineMarkerTimer(This,timeout) | 
|  | #define IMFMediaEngineEx_GetTimelineMarkerTimer(This,timeout) (This)->lpVtbl->GetTimelineMarkerTimer(This,timeout) | 
|  | #define IMFMediaEngineEx_CancelTimelineMarkerTimer(This) (This)->lpVtbl->CancelTimelineMarkerTimer(This) | 
|  | #define IMFMediaEngineEx_IsStereo3D(This) (This)->lpVtbl->IsStereo3D(This) | 
|  | #define IMFMediaEngineEx_GetStereo3DFramePackingMode(This,mode) (This)->lpVtbl->GetStereo3DFramePackingMode(This,mode) | 
|  | #define IMFMediaEngineEx_SetStereo3DFramePackingMode(This,mode) (This)->lpVtbl->SetStereo3DFramePackingMode(This,mode) | 
|  | #define IMFMediaEngineEx_GetStereo3DRenderMode(This,output_type) (This)->lpVtbl->GetStereo3DRenderMode(This,output_type) | 
|  | #define IMFMediaEngineEx_SetStereo3DRenderMode(This,output_type) (This)->lpVtbl->SetStereo3DRenderMode(This,output_type) | 
|  | #define IMFMediaEngineEx_EnableWindowlessSwapchainMode(This,enable) (This)->lpVtbl->EnableWindowlessSwapchainMode(This,enable) | 
|  | #define IMFMediaEngineEx_GetVideoSwapchainHandle(This,swapchain) (This)->lpVtbl->GetVideoSwapchainHandle(This,swapchain) | 
|  | #define IMFMediaEngineEx_EnableHorizontalMirrorMode(This,enable) (This)->lpVtbl->EnableHorizontalMirrorMode(This,enable) | 
|  | #define IMFMediaEngineEx_GetAudioStreamCategory(This,category) (This)->lpVtbl->GetAudioStreamCategory(This,category) | 
|  | #define IMFMediaEngineEx_SetAudioStreamCategory(This,category) (This)->lpVtbl->SetAudioStreamCategory(This,category) | 
|  | #define IMFMediaEngineEx_GetAudioEndpointRole(This,role) (This)->lpVtbl->GetAudioEndpointRole(This,role) | 
|  | #define IMFMediaEngineEx_SetAudioEndpointRole(This,role) (This)->lpVtbl->SetAudioEndpointRole(This,role) | 
|  | #define IMFMediaEngineEx_GetRealTimeMode(This,enabled) (This)->lpVtbl->GetRealTimeMode(This,enabled) | 
|  | #define IMFMediaEngineEx_SetRealTimeMode(This,enable) (This)->lpVtbl->SetRealTimeMode(This,enable) | 
|  | #define IMFMediaEngineEx_SetCurrentTimeEx(This,seektime,mode) (This)->lpVtbl->SetCurrentTimeEx(This,seektime,mode) | 
|  | #define IMFMediaEngineEx_EnableTimeUpdateTimer(This,enable) (This)->lpVtbl->EnableTimeUpdateTimer(This,enable) | 
|  | #else | 
|  | /*** IUnknown methods ***/ | 
|  | static inline HRESULT IMFMediaEngineEx_QueryInterface(IMFMediaEngineEx* This,REFIID riid,void **ppvObject) { | 
|  | return This->lpVtbl->QueryInterface(This,riid,ppvObject); | 
|  | } | 
|  | static inline ULONG IMFMediaEngineEx_AddRef(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->AddRef(This); | 
|  | } | 
|  | static inline ULONG IMFMediaEngineEx_Release(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->Release(This); | 
|  | } | 
|  | /*** IMFMediaEngine methods ***/ | 
|  | static inline HRESULT IMFMediaEngineEx_GetError(IMFMediaEngineEx* This,IMFMediaError **error) { | 
|  | return This->lpVtbl->GetError(This,error); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetErrorCode(IMFMediaEngineEx* This,MF_MEDIA_ENGINE_ERR error) { | 
|  | return This->lpVtbl->SetErrorCode(This,error); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetSourceElements(IMFMediaEngineEx* This,IMFMediaEngineSrcElements *elements) { | 
|  | return This->lpVtbl->SetSourceElements(This,elements); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetSource(IMFMediaEngineEx* This,BSTR url) { | 
|  | return This->lpVtbl->SetSource(This,url); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetCurrentSource(IMFMediaEngineEx* This,BSTR *url) { | 
|  | return This->lpVtbl->GetCurrentSource(This,url); | 
|  | } | 
|  | static inline USHORT IMFMediaEngineEx_GetNetworkState(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->GetNetworkState(This); | 
|  | } | 
|  | static inline MF_MEDIA_ENGINE_PRELOAD IMFMediaEngineEx_GetPreload(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->GetPreload(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetPreload(IMFMediaEngineEx* This,MF_MEDIA_ENGINE_PRELOAD preload) { | 
|  | return This->lpVtbl->SetPreload(This,preload); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetBuffered(IMFMediaEngineEx* This,IMFMediaTimeRange **buffered) { | 
|  | return This->lpVtbl->GetBuffered(This,buffered); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_Load(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->Load(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_CanPlayType(IMFMediaEngineEx* This,BSTR type,MF_MEDIA_ENGINE_CANPLAY *answer) { | 
|  | return This->lpVtbl->CanPlayType(This,type,answer); | 
|  | } | 
|  | static inline USHORT IMFMediaEngineEx_GetReadyState(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->GetReadyState(This); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngineEx_IsSeeking(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->IsSeeking(This); | 
|  | } | 
|  | static inline double IMFMediaEngineEx_GetCurrentTime(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->GetCurrentTime(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetCurrentTime(IMFMediaEngineEx* This,double time) { | 
|  | return This->lpVtbl->SetCurrentTime(This,time); | 
|  | } | 
|  | static inline double IMFMediaEngineEx_GetStartTime(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->GetStartTime(This); | 
|  | } | 
|  | static inline double IMFMediaEngineEx_GetDuration(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->GetDuration(This); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngineEx_IsPaused(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->IsPaused(This); | 
|  | } | 
|  | static inline double IMFMediaEngineEx_GetDefaultPlaybackRate(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->GetDefaultPlaybackRate(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetDefaultPlaybackRate(IMFMediaEngineEx* This,double rate) { | 
|  | return This->lpVtbl->SetDefaultPlaybackRate(This,rate); | 
|  | } | 
|  | static inline double IMFMediaEngineEx_GetPlaybackRate(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->GetPlaybackRate(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetPlaybackRate(IMFMediaEngineEx* This,double rate) { | 
|  | return This->lpVtbl->SetPlaybackRate(This,rate); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetPlayed(IMFMediaEngineEx* This,IMFMediaTimeRange **played) { | 
|  | return This->lpVtbl->GetPlayed(This,played); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetSeekable(IMFMediaEngineEx* This,IMFMediaTimeRange **seekable) { | 
|  | return This->lpVtbl->GetSeekable(This,seekable); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngineEx_IsEnded(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->IsEnded(This); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngineEx_GetAutoPlay(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->GetAutoPlay(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetAutoPlay(IMFMediaEngineEx* This,WINBOOL autoplay) { | 
|  | return This->lpVtbl->SetAutoPlay(This,autoplay); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngineEx_GetLoop(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->GetLoop(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetLoop(IMFMediaEngineEx* This,WINBOOL loop) { | 
|  | return This->lpVtbl->SetLoop(This,loop); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_Play(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->Play(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_Pause(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->Pause(This); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngineEx_GetMuted(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->GetMuted(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetMuted(IMFMediaEngineEx* This,WINBOOL muted) { | 
|  | return This->lpVtbl->SetMuted(This,muted); | 
|  | } | 
|  | static inline double IMFMediaEngineEx_GetVolume(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->GetVolume(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetVolume(IMFMediaEngineEx* This,double volume) { | 
|  | return This->lpVtbl->SetVolume(This,volume); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngineEx_HasVideo(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->HasVideo(This); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngineEx_HasAudio(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->HasAudio(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetNativeVideoSize(IMFMediaEngineEx* This,DWORD *cx,DWORD *cy) { | 
|  | return This->lpVtbl->GetNativeVideoSize(This,cx,cy); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetVideoAspectRatio(IMFMediaEngineEx* This,DWORD *cx,DWORD *cy) { | 
|  | return This->lpVtbl->GetVideoAspectRatio(This,cx,cy); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_Shutdown(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->Shutdown(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_TransferVideoFrame(IMFMediaEngineEx* This,IUnknown *surface,const MFVideoNormalizedRect *src,const RECT *dst,const MFARGB *color) { | 
|  | return This->lpVtbl->TransferVideoFrame(This,surface,src,dst,color); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_OnVideoStreamTick(IMFMediaEngineEx* This,LONGLONG *time) { | 
|  | return This->lpVtbl->OnVideoStreamTick(This,time); | 
|  | } | 
|  | /*** IMFMediaEngineEx methods ***/ | 
|  | static inline HRESULT IMFMediaEngineEx_SetSourceFromByteStream(IMFMediaEngineEx* This,IMFByteStream *bytestream,BSTR url) { | 
|  | return This->lpVtbl->SetSourceFromByteStream(This,bytestream,url); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetStatistics(IMFMediaEngineEx* This,MF_MEDIA_ENGINE_STATISTIC stat_id,PROPVARIANT *stat) { | 
|  | return This->lpVtbl->GetStatistics(This,stat_id,stat); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_UpdateVideoStream(IMFMediaEngineEx* This,const MFVideoNormalizedRect *src,const RECT *dst,const MFARGB *border_color) { | 
|  | return This->lpVtbl->UpdateVideoStream(This,src,dst,border_color); | 
|  | } | 
|  | static inline double IMFMediaEngineEx_GetBalance(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->GetBalance(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetBalance(IMFMediaEngineEx* This,double balance) { | 
|  | return This->lpVtbl->SetBalance(This,balance); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngineEx_IsPlaybackRateSupported(IMFMediaEngineEx* This,double rate) { | 
|  | return This->lpVtbl->IsPlaybackRateSupported(This,rate); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_FrameStep(IMFMediaEngineEx* This,WINBOOL forward) { | 
|  | return This->lpVtbl->FrameStep(This,forward); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetResourceCharacteristics(IMFMediaEngineEx* This,DWORD *flags) { | 
|  | return This->lpVtbl->GetResourceCharacteristics(This,flags); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetPresentationAttribute(IMFMediaEngineEx* This,REFGUID attribute,PROPVARIANT *value) { | 
|  | return This->lpVtbl->GetPresentationAttribute(This,attribute,value); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetNumberOfStreams(IMFMediaEngineEx* This,DWORD *stream_count) { | 
|  | return This->lpVtbl->GetNumberOfStreams(This,stream_count); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetStreamAttribute(IMFMediaEngineEx* This,DWORD stream_index,REFGUID attribute,PROPVARIANT *value) { | 
|  | return This->lpVtbl->GetStreamAttribute(This,stream_index,attribute,value); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetStreamSelection(IMFMediaEngineEx* This,DWORD stream_index,WINBOOL *enabled) { | 
|  | return This->lpVtbl->GetStreamSelection(This,stream_index,enabled); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetStreamSelection(IMFMediaEngineEx* This,DWORD stream_index,WINBOOL enabled) { | 
|  | return This->lpVtbl->SetStreamSelection(This,stream_index,enabled); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_ApplyStreamSelections(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->ApplyStreamSelections(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_IsProtected(IMFMediaEngineEx* This,WINBOOL *is_protected) { | 
|  | return This->lpVtbl->IsProtected(This,is_protected); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_InsertVideoEffect(IMFMediaEngineEx* This,IUnknown *effect,WINBOOL is_optional) { | 
|  | return This->lpVtbl->InsertVideoEffect(This,effect,is_optional); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_InsertAudioEffect(IMFMediaEngineEx* This,IUnknown *effect,WINBOOL is_optional) { | 
|  | return This->lpVtbl->InsertAudioEffect(This,effect,is_optional); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_RemoveAllEffects(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->RemoveAllEffects(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetTimelineMarkerTimer(IMFMediaEngineEx* This,double timeout) { | 
|  | return This->lpVtbl->SetTimelineMarkerTimer(This,timeout); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetTimelineMarkerTimer(IMFMediaEngineEx* This,double *timeout) { | 
|  | return This->lpVtbl->GetTimelineMarkerTimer(This,timeout); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_CancelTimelineMarkerTimer(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->CancelTimelineMarkerTimer(This); | 
|  | } | 
|  | static inline WINBOOL IMFMediaEngineEx_IsStereo3D(IMFMediaEngineEx* This) { | 
|  | return This->lpVtbl->IsStereo3D(This); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetStereo3DFramePackingMode(IMFMediaEngineEx* This,MF_MEDIA_ENGINE_S3D_PACKING_MODE *mode) { | 
|  | return This->lpVtbl->GetStereo3DFramePackingMode(This,mode); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetStereo3DFramePackingMode(IMFMediaEngineEx* This,MF_MEDIA_ENGINE_S3D_PACKING_MODE mode) { | 
|  | return This->lpVtbl->SetStereo3DFramePackingMode(This,mode); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetStereo3DRenderMode(IMFMediaEngineEx* This,MF3DVideoOutputType *output_type) { | 
|  | return This->lpVtbl->GetStereo3DRenderMode(This,output_type); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetStereo3DRenderMode(IMFMediaEngineEx* This,MF3DVideoOutputType output_type) { | 
|  | return This->lpVtbl->SetStereo3DRenderMode(This,output_type); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_EnableWindowlessSwapchainMode(IMFMediaEngineEx* This,WINBOOL enable) { | 
|  | return This->lpVtbl->EnableWindowlessSwapchainMode(This,enable); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetVideoSwapchainHandle(IMFMediaEngineEx* This,HANDLE *swapchain) { | 
|  | return This->lpVtbl->GetVideoSwapchainHandle(This,swapchain); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_EnableHorizontalMirrorMode(IMFMediaEngineEx* This,WINBOOL enable) { | 
|  | return This->lpVtbl->EnableHorizontalMirrorMode(This,enable); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetAudioStreamCategory(IMFMediaEngineEx* This,UINT32 *category) { | 
|  | return This->lpVtbl->GetAudioStreamCategory(This,category); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetAudioStreamCategory(IMFMediaEngineEx* This,UINT32 category) { | 
|  | return This->lpVtbl->SetAudioStreamCategory(This,category); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetAudioEndpointRole(IMFMediaEngineEx* This,UINT32 *role) { | 
|  | return This->lpVtbl->GetAudioEndpointRole(This,role); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetAudioEndpointRole(IMFMediaEngineEx* This,UINT32 role) { | 
|  | return This->lpVtbl->SetAudioEndpointRole(This,role); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_GetRealTimeMode(IMFMediaEngineEx* This,WINBOOL *enabled) { | 
|  | return This->lpVtbl->GetRealTimeMode(This,enabled); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetRealTimeMode(IMFMediaEngineEx* This,WINBOOL enable) { | 
|  | return This->lpVtbl->SetRealTimeMode(This,enable); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_SetCurrentTimeEx(IMFMediaEngineEx* This,double seektime,MF_MEDIA_ENGINE_SEEK_MODE mode) { | 
|  | return This->lpVtbl->SetCurrentTimeEx(This,seektime,mode); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineEx_EnableTimeUpdateTimer(IMFMediaEngineEx* This,WINBOOL enable) { | 
|  | return This->lpVtbl->EnableTimeUpdateTimer(This,enable); | 
|  | } | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #endif  /* __IMFMediaEngineEx_INTERFACE_DEFINED__ */ | 
|  |  | 
|  | /***************************************************************************** | 
|  | * IMFMediaEngineClassFactory interface | 
|  | */ | 
|  | #ifndef __IMFMediaEngineClassFactory_INTERFACE_DEFINED__ | 
|  | #define __IMFMediaEngineClassFactory_INTERFACE_DEFINED__ | 
|  |  | 
|  | DEFINE_GUID(IID_IMFMediaEngineClassFactory, 0x4d645ace, 0x26aa, 0x4688, 0x9b,0xe1, 0xdf,0x35,0x16,0x99,0x0b,0x93); | 
|  | #if defined(__cplusplus) && !defined(CINTERFACE) | 
|  | MIDL_INTERFACE("4d645ace-26aa-4688-9be1-df3516990b93") | 
|  | IMFMediaEngineClassFactory : public IUnknown | 
|  | { | 
|  | virtual HRESULT STDMETHODCALLTYPE CreateInstance( | 
|  | DWORD flags, | 
|  | IMFAttributes *attributes, | 
|  | IMFMediaEngine **engine) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE CreateTimeRange( | 
|  | IMFMediaTimeRange **range) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE CreateError( | 
|  | IMFMediaError **error) = 0; | 
|  |  | 
|  | }; | 
|  | #ifdef __CRT_UUID_DECL | 
|  | __CRT_UUID_DECL(IMFMediaEngineClassFactory, 0x4d645ace, 0x26aa, 0x4688, 0x9b,0xe1, 0xdf,0x35,0x16,0x99,0x0b,0x93) | 
|  | #endif | 
|  | #else | 
|  | typedef struct IMFMediaEngineClassFactoryVtbl { | 
|  | BEGIN_INTERFACE | 
|  |  | 
|  | /*** IUnknown methods ***/ | 
|  | HRESULT (STDMETHODCALLTYPE *QueryInterface)( | 
|  | IMFMediaEngineClassFactory *This, | 
|  | REFIID riid, | 
|  | void **ppvObject); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *AddRef)( | 
|  | IMFMediaEngineClassFactory *This); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *Release)( | 
|  | IMFMediaEngineClassFactory *This); | 
|  |  | 
|  | /*** IMFMediaEngineClassFactory methods ***/ | 
|  | HRESULT (STDMETHODCALLTYPE *CreateInstance)( | 
|  | IMFMediaEngineClassFactory *This, | 
|  | DWORD flags, | 
|  | IMFAttributes *attributes, | 
|  | IMFMediaEngine **engine); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *CreateTimeRange)( | 
|  | IMFMediaEngineClassFactory *This, | 
|  | IMFMediaTimeRange **range); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *CreateError)( | 
|  | IMFMediaEngineClassFactory *This, | 
|  | IMFMediaError **error); | 
|  |  | 
|  | END_INTERFACE | 
|  | } IMFMediaEngineClassFactoryVtbl; | 
|  |  | 
|  | interface IMFMediaEngineClassFactory { | 
|  | CONST_VTBL IMFMediaEngineClassFactoryVtbl* lpVtbl; | 
|  | }; | 
|  |  | 
|  | #ifdef COBJMACROS | 
|  | #ifndef WIDL_C_INLINE_WRAPPERS | 
|  | /*** IUnknown methods ***/ | 
|  | #define IMFMediaEngineClassFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) | 
|  | #define IMFMediaEngineClassFactory_AddRef(This) (This)->lpVtbl->AddRef(This) | 
|  | #define IMFMediaEngineClassFactory_Release(This) (This)->lpVtbl->Release(This) | 
|  | /*** IMFMediaEngineClassFactory methods ***/ | 
|  | #define IMFMediaEngineClassFactory_CreateInstance(This,flags,attributes,engine) (This)->lpVtbl->CreateInstance(This,flags,attributes,engine) | 
|  | #define IMFMediaEngineClassFactory_CreateTimeRange(This,range) (This)->lpVtbl->CreateTimeRange(This,range) | 
|  | #define IMFMediaEngineClassFactory_CreateError(This,error) (This)->lpVtbl->CreateError(This,error) | 
|  | #else | 
|  | /*** IUnknown methods ***/ | 
|  | static inline HRESULT IMFMediaEngineClassFactory_QueryInterface(IMFMediaEngineClassFactory* This,REFIID riid,void **ppvObject) { | 
|  | return This->lpVtbl->QueryInterface(This,riid,ppvObject); | 
|  | } | 
|  | static inline ULONG IMFMediaEngineClassFactory_AddRef(IMFMediaEngineClassFactory* This) { | 
|  | return This->lpVtbl->AddRef(This); | 
|  | } | 
|  | static inline ULONG IMFMediaEngineClassFactory_Release(IMFMediaEngineClassFactory* This) { | 
|  | return This->lpVtbl->Release(This); | 
|  | } | 
|  | /*** IMFMediaEngineClassFactory methods ***/ | 
|  | static inline HRESULT IMFMediaEngineClassFactory_CreateInstance(IMFMediaEngineClassFactory* This,DWORD flags,IMFAttributes *attributes,IMFMediaEngine **engine) { | 
|  | return This->lpVtbl->CreateInstance(This,flags,attributes,engine); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineClassFactory_CreateTimeRange(IMFMediaEngineClassFactory* This,IMFMediaTimeRange **range) { | 
|  | return This->lpVtbl->CreateTimeRange(This,range); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineClassFactory_CreateError(IMFMediaEngineClassFactory* This,IMFMediaError **error) { | 
|  | return This->lpVtbl->CreateError(This,error); | 
|  | } | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #endif  /* __IMFMediaEngineClassFactory_INTERFACE_DEFINED__ */ | 
|  |  | 
|  | /***************************************************************************** | 
|  | * IMFMediaEngineNotify interface | 
|  | */ | 
|  | #ifndef __IMFMediaEngineNotify_INTERFACE_DEFINED__ | 
|  | #define __IMFMediaEngineNotify_INTERFACE_DEFINED__ | 
|  |  | 
|  | DEFINE_GUID(IID_IMFMediaEngineNotify, 0xfee7c112, 0xe776, 0x42b5, 0x9b,0xbf, 0x00,0x48,0x52,0x4e,0x2b,0xd5); | 
|  | #if defined(__cplusplus) && !defined(CINTERFACE) | 
|  | MIDL_INTERFACE("fee7c112-e776-42b5-9bbf-0048524e2bd5") | 
|  | IMFMediaEngineNotify : public IUnknown | 
|  | { | 
|  | virtual HRESULT STDMETHODCALLTYPE EventNotify( | 
|  | DWORD event, | 
|  | DWORD_PTR param1, | 
|  | DWORD param2) = 0; | 
|  |  | 
|  | }; | 
|  | #ifdef __CRT_UUID_DECL | 
|  | __CRT_UUID_DECL(IMFMediaEngineNotify, 0xfee7c112, 0xe776, 0x42b5, 0x9b,0xbf, 0x00,0x48,0x52,0x4e,0x2b,0xd5) | 
|  | #endif | 
|  | #else | 
|  | typedef struct IMFMediaEngineNotifyVtbl { | 
|  | BEGIN_INTERFACE | 
|  |  | 
|  | /*** IUnknown methods ***/ | 
|  | HRESULT (STDMETHODCALLTYPE *QueryInterface)( | 
|  | IMFMediaEngineNotify *This, | 
|  | REFIID riid, | 
|  | void **ppvObject); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *AddRef)( | 
|  | IMFMediaEngineNotify *This); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *Release)( | 
|  | IMFMediaEngineNotify *This); | 
|  |  | 
|  | /*** IMFMediaEngineNotify methods ***/ | 
|  | HRESULT (STDMETHODCALLTYPE *EventNotify)( | 
|  | IMFMediaEngineNotify *This, | 
|  | DWORD event, | 
|  | DWORD_PTR param1, | 
|  | DWORD param2); | 
|  |  | 
|  | END_INTERFACE | 
|  | } IMFMediaEngineNotifyVtbl; | 
|  |  | 
|  | interface IMFMediaEngineNotify { | 
|  | CONST_VTBL IMFMediaEngineNotifyVtbl* lpVtbl; | 
|  | }; | 
|  |  | 
|  | #ifdef COBJMACROS | 
|  | #ifndef WIDL_C_INLINE_WRAPPERS | 
|  | /*** IUnknown methods ***/ | 
|  | #define IMFMediaEngineNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) | 
|  | #define IMFMediaEngineNotify_AddRef(This) (This)->lpVtbl->AddRef(This) | 
|  | #define IMFMediaEngineNotify_Release(This) (This)->lpVtbl->Release(This) | 
|  | /*** IMFMediaEngineNotify methods ***/ | 
|  | #define IMFMediaEngineNotify_EventNotify(This,event,param1,param2) (This)->lpVtbl->EventNotify(This,event,param1,param2) | 
|  | #else | 
|  | /*** IUnknown methods ***/ | 
|  | static inline HRESULT IMFMediaEngineNotify_QueryInterface(IMFMediaEngineNotify* This,REFIID riid,void **ppvObject) { | 
|  | return This->lpVtbl->QueryInterface(This,riid,ppvObject); | 
|  | } | 
|  | static inline ULONG IMFMediaEngineNotify_AddRef(IMFMediaEngineNotify* This) { | 
|  | return This->lpVtbl->AddRef(This); | 
|  | } | 
|  | static inline ULONG IMFMediaEngineNotify_Release(IMFMediaEngineNotify* This) { | 
|  | return This->lpVtbl->Release(This); | 
|  | } | 
|  | /*** IMFMediaEngineNotify methods ***/ | 
|  | static inline HRESULT IMFMediaEngineNotify_EventNotify(IMFMediaEngineNotify* This,DWORD event,DWORD_PTR param1,DWORD param2) { | 
|  | return This->lpVtbl->EventNotify(This,event,param1,param2); | 
|  | } | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #endif  /* __IMFMediaEngineNotify_INTERFACE_DEFINED__ */ | 
|  |  | 
|  | /***************************************************************************** | 
|  | * IMFMediaEngineAudioEndpointId interface | 
|  | */ | 
|  | #ifndef __IMFMediaEngineAudioEndpointId_INTERFACE_DEFINED__ | 
|  | #define __IMFMediaEngineAudioEndpointId_INTERFACE_DEFINED__ | 
|  |  | 
|  | DEFINE_GUID(IID_IMFMediaEngineAudioEndpointId, 0x7a3bac98, 0x0e76, 0x49fb, 0x8c,0x20, 0x8a,0x86,0xfd,0x98,0xea,0xf2); | 
|  | #if defined(__cplusplus) && !defined(CINTERFACE) | 
|  | MIDL_INTERFACE("7a3bac98-0e76-49fb-8c20-8a86fd98eaf2") | 
|  | IMFMediaEngineAudioEndpointId : public IUnknown | 
|  | { | 
|  | virtual HRESULT STDMETHODCALLTYPE SetAudioEndpointId( | 
|  | LPCWSTR id) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE GetAudioEndpointId( | 
|  | LPWSTR *id) = 0; | 
|  |  | 
|  | }; | 
|  | #ifdef __CRT_UUID_DECL | 
|  | __CRT_UUID_DECL(IMFMediaEngineAudioEndpointId, 0x7a3bac98, 0x0e76, 0x49fb, 0x8c,0x20, 0x8a,0x86,0xfd,0x98,0xea,0xf2) | 
|  | #endif | 
|  | #else | 
|  | typedef struct IMFMediaEngineAudioEndpointIdVtbl { | 
|  | BEGIN_INTERFACE | 
|  |  | 
|  | /*** IUnknown methods ***/ | 
|  | HRESULT (STDMETHODCALLTYPE *QueryInterface)( | 
|  | IMFMediaEngineAudioEndpointId *This, | 
|  | REFIID riid, | 
|  | void **ppvObject); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *AddRef)( | 
|  | IMFMediaEngineAudioEndpointId *This); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *Release)( | 
|  | IMFMediaEngineAudioEndpointId *This); | 
|  |  | 
|  | /*** IMFMediaEngineAudioEndpointId methods ***/ | 
|  | HRESULT (STDMETHODCALLTYPE *SetAudioEndpointId)( | 
|  | IMFMediaEngineAudioEndpointId *This, | 
|  | LPCWSTR id); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *GetAudioEndpointId)( | 
|  | IMFMediaEngineAudioEndpointId *This, | 
|  | LPWSTR *id); | 
|  |  | 
|  | END_INTERFACE | 
|  | } IMFMediaEngineAudioEndpointIdVtbl; | 
|  |  | 
|  | interface IMFMediaEngineAudioEndpointId { | 
|  | CONST_VTBL IMFMediaEngineAudioEndpointIdVtbl* lpVtbl; | 
|  | }; | 
|  |  | 
|  | #ifdef COBJMACROS | 
|  | #ifndef WIDL_C_INLINE_WRAPPERS | 
|  | /*** IUnknown methods ***/ | 
|  | #define IMFMediaEngineAudioEndpointId_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) | 
|  | #define IMFMediaEngineAudioEndpointId_AddRef(This) (This)->lpVtbl->AddRef(This) | 
|  | #define IMFMediaEngineAudioEndpointId_Release(This) (This)->lpVtbl->Release(This) | 
|  | /*** IMFMediaEngineAudioEndpointId methods ***/ | 
|  | #define IMFMediaEngineAudioEndpointId_SetAudioEndpointId(This,id) (This)->lpVtbl->SetAudioEndpointId(This,id) | 
|  | #define IMFMediaEngineAudioEndpointId_GetAudioEndpointId(This,id) (This)->lpVtbl->GetAudioEndpointId(This,id) | 
|  | #else | 
|  | /*** IUnknown methods ***/ | 
|  | static inline HRESULT IMFMediaEngineAudioEndpointId_QueryInterface(IMFMediaEngineAudioEndpointId* This,REFIID riid,void **ppvObject) { | 
|  | return This->lpVtbl->QueryInterface(This,riid,ppvObject); | 
|  | } | 
|  | static inline ULONG IMFMediaEngineAudioEndpointId_AddRef(IMFMediaEngineAudioEndpointId* This) { | 
|  | return This->lpVtbl->AddRef(This); | 
|  | } | 
|  | static inline ULONG IMFMediaEngineAudioEndpointId_Release(IMFMediaEngineAudioEndpointId* This) { | 
|  | return This->lpVtbl->Release(This); | 
|  | } | 
|  | /*** IMFMediaEngineAudioEndpointId methods ***/ | 
|  | static inline HRESULT IMFMediaEngineAudioEndpointId_SetAudioEndpointId(IMFMediaEngineAudioEndpointId* This,LPCWSTR id) { | 
|  | return This->lpVtbl->SetAudioEndpointId(This,id); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineAudioEndpointId_GetAudioEndpointId(IMFMediaEngineAudioEndpointId* This,LPWSTR *id) { | 
|  | return This->lpVtbl->GetAudioEndpointId(This,id); | 
|  | } | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #endif  /* __IMFMediaEngineAudioEndpointId_INTERFACE_DEFINED__ */ | 
|  |  | 
|  | /***************************************************************************** | 
|  | * IMFMediaEngineExtension interface | 
|  | */ | 
|  | #ifndef __IMFMediaEngineExtension_INTERFACE_DEFINED__ | 
|  | #define __IMFMediaEngineExtension_INTERFACE_DEFINED__ | 
|  |  | 
|  | DEFINE_GUID(IID_IMFMediaEngineExtension, 0x2f69d622, 0x20b5, 0x41e9, 0xaf,0xdf, 0x89,0xce,0xd1,0xdd,0xa0,0x4e); | 
|  | #if defined(__cplusplus) && !defined(CINTERFACE) | 
|  | MIDL_INTERFACE("2f69d622-20b5-41e9-afdf-89ced1dda04e") | 
|  | IMFMediaEngineExtension : public IUnknown | 
|  | { | 
|  | virtual HRESULT STDMETHODCALLTYPE CanPlayType( | 
|  | WINBOOL audio_only, | 
|  | BSTR mime_type, | 
|  | MF_MEDIA_ENGINE_CANPLAY *answer) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE BeginCreateObject( | 
|  | BSTR url, | 
|  | IMFByteStream *bytestream, | 
|  | MF_OBJECT_TYPE type, | 
|  | IUnknown **cancel_cookie, | 
|  | IMFAsyncCallback *callback, | 
|  | IUnknown *state) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE CancelObjectCreation( | 
|  | IUnknown *cancel_cookie) = 0; | 
|  |  | 
|  | virtual HRESULT STDMETHODCALLTYPE EndCreateObject( | 
|  | IMFAsyncResult *result, | 
|  | IUnknown **object) = 0; | 
|  |  | 
|  | }; | 
|  | #ifdef __CRT_UUID_DECL | 
|  | __CRT_UUID_DECL(IMFMediaEngineExtension, 0x2f69d622, 0x20b5, 0x41e9, 0xaf,0xdf, 0x89,0xce,0xd1,0xdd,0xa0,0x4e) | 
|  | #endif | 
|  | #else | 
|  | typedef struct IMFMediaEngineExtensionVtbl { | 
|  | BEGIN_INTERFACE | 
|  |  | 
|  | /*** IUnknown methods ***/ | 
|  | HRESULT (STDMETHODCALLTYPE *QueryInterface)( | 
|  | IMFMediaEngineExtension *This, | 
|  | REFIID riid, | 
|  | void **ppvObject); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *AddRef)( | 
|  | IMFMediaEngineExtension *This); | 
|  |  | 
|  | ULONG (STDMETHODCALLTYPE *Release)( | 
|  | IMFMediaEngineExtension *This); | 
|  |  | 
|  | /*** IMFMediaEngineExtension methods ***/ | 
|  | HRESULT (STDMETHODCALLTYPE *CanPlayType)( | 
|  | IMFMediaEngineExtension *This, | 
|  | WINBOOL audio_only, | 
|  | BSTR mime_type, | 
|  | MF_MEDIA_ENGINE_CANPLAY *answer); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *BeginCreateObject)( | 
|  | IMFMediaEngineExtension *This, | 
|  | BSTR url, | 
|  | IMFByteStream *bytestream, | 
|  | MF_OBJECT_TYPE type, | 
|  | IUnknown **cancel_cookie, | 
|  | IMFAsyncCallback *callback, | 
|  | IUnknown *state); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *CancelObjectCreation)( | 
|  | IMFMediaEngineExtension *This, | 
|  | IUnknown *cancel_cookie); | 
|  |  | 
|  | HRESULT (STDMETHODCALLTYPE *EndCreateObject)( | 
|  | IMFMediaEngineExtension *This, | 
|  | IMFAsyncResult *result, | 
|  | IUnknown **object); | 
|  |  | 
|  | END_INTERFACE | 
|  | } IMFMediaEngineExtensionVtbl; | 
|  |  | 
|  | interface IMFMediaEngineExtension { | 
|  | CONST_VTBL IMFMediaEngineExtensionVtbl* lpVtbl; | 
|  | }; | 
|  |  | 
|  | #ifdef COBJMACROS | 
|  | #ifndef WIDL_C_INLINE_WRAPPERS | 
|  | /*** IUnknown methods ***/ | 
|  | #define IMFMediaEngineExtension_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) | 
|  | #define IMFMediaEngineExtension_AddRef(This) (This)->lpVtbl->AddRef(This) | 
|  | #define IMFMediaEngineExtension_Release(This) (This)->lpVtbl->Release(This) | 
|  | /*** IMFMediaEngineExtension methods ***/ | 
|  | #define IMFMediaEngineExtension_CanPlayType(This,audio_only,mime_type,answer) (This)->lpVtbl->CanPlayType(This,audio_only,mime_type,answer) | 
|  | #define IMFMediaEngineExtension_BeginCreateObject(This,url,bytestream,type,cancel_cookie,callback,state) (This)->lpVtbl->BeginCreateObject(This,url,bytestream,type,cancel_cookie,callback,state) | 
|  | #define IMFMediaEngineExtension_CancelObjectCreation(This,cancel_cookie) (This)->lpVtbl->CancelObjectCreation(This,cancel_cookie) | 
|  | #define IMFMediaEngineExtension_EndCreateObject(This,result,object) (This)->lpVtbl->EndCreateObject(This,result,object) | 
|  | #else | 
|  | /*** IUnknown methods ***/ | 
|  | static inline HRESULT IMFMediaEngineExtension_QueryInterface(IMFMediaEngineExtension* This,REFIID riid,void **ppvObject) { | 
|  | return This->lpVtbl->QueryInterface(This,riid,ppvObject); | 
|  | } | 
|  | static inline ULONG IMFMediaEngineExtension_AddRef(IMFMediaEngineExtension* This) { | 
|  | return This->lpVtbl->AddRef(This); | 
|  | } | 
|  | static inline ULONG IMFMediaEngineExtension_Release(IMFMediaEngineExtension* This) { | 
|  | return This->lpVtbl->Release(This); | 
|  | } | 
|  | /*** IMFMediaEngineExtension methods ***/ | 
|  | static inline HRESULT IMFMediaEngineExtension_CanPlayType(IMFMediaEngineExtension* This,WINBOOL audio_only,BSTR mime_type,MF_MEDIA_ENGINE_CANPLAY *answer) { | 
|  | return This->lpVtbl->CanPlayType(This,audio_only,mime_type,answer); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineExtension_BeginCreateObject(IMFMediaEngineExtension* This,BSTR url,IMFByteStream *bytestream,MF_OBJECT_TYPE type,IUnknown **cancel_cookie,IMFAsyncCallback *callback,IUnknown *state) { | 
|  | return This->lpVtbl->BeginCreateObject(This,url,bytestream,type,cancel_cookie,callback,state); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineExtension_CancelObjectCreation(IMFMediaEngineExtension* This,IUnknown *cancel_cookie) { | 
|  | return This->lpVtbl->CancelObjectCreation(This,cancel_cookie); | 
|  | } | 
|  | static inline HRESULT IMFMediaEngineExtension_EndCreateObject(IMFMediaEngineExtension* This,IMFAsyncResult *result,IUnknown **object) { | 
|  | return This->lpVtbl->EndCreateObject(This,result,object); | 
|  | } | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #endif  /* __IMFMediaEngineExtension_INTERFACE_DEFINED__ */ | 
|  |  | 
|  | /* Begin additional prototypes for all interfaces */ | 
|  |  | 
|  |  | 
|  | /* End additional prototypes */ | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  |  | 
|  | #endif /* __mfmediaengine_h__ */ |