zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

mfmediaengine.h (92911B) - Raw


      1 /*** Autogenerated by WIDL 10.4 from include/mfmediaengine.idl - Do not edit ***/
      2 
      3 #ifdef _WIN32
      4 #ifndef __REQUIRED_RPCNDR_H_VERSION__
      5 #define __REQUIRED_RPCNDR_H_VERSION__ 475
      6 #endif
      7 #include <rpc.h>
      8 #include <rpcndr.h>
      9 #endif
     10 
     11 #ifndef COM_NO_WINDOWS_H
     12 #include <windows.h>
     13 #include <ole2.h>
     14 #endif
     15 
     16 #ifndef __mfmediaengine_h__
     17 #define __mfmediaengine_h__
     18 
     19 /* Forward declarations */
     20 
     21 #ifndef __IMFMediaError_FWD_DEFINED__
     22 #define __IMFMediaError_FWD_DEFINED__
     23 typedef interface IMFMediaError IMFMediaError;
     24 #ifdef __cplusplus
     25 interface IMFMediaError;
     26 #endif /* __cplusplus */
     27 #endif
     28 
     29 #ifndef __IMFMediaEngineSrcElements_FWD_DEFINED__
     30 #define __IMFMediaEngineSrcElements_FWD_DEFINED__
     31 typedef interface IMFMediaEngineSrcElements IMFMediaEngineSrcElements;
     32 #ifdef __cplusplus
     33 interface IMFMediaEngineSrcElements;
     34 #endif /* __cplusplus */
     35 #endif
     36 
     37 #ifndef __IMFMediaTimeRange_FWD_DEFINED__
     38 #define __IMFMediaTimeRange_FWD_DEFINED__
     39 typedef interface IMFMediaTimeRange IMFMediaTimeRange;
     40 #ifdef __cplusplus
     41 interface IMFMediaTimeRange;
     42 #endif /* __cplusplus */
     43 #endif
     44 
     45 #ifndef __IMFMediaEngine_FWD_DEFINED__
     46 #define __IMFMediaEngine_FWD_DEFINED__
     47 typedef interface IMFMediaEngine IMFMediaEngine;
     48 #ifdef __cplusplus
     49 interface IMFMediaEngine;
     50 #endif /* __cplusplus */
     51 #endif
     52 
     53 #ifndef __IMFMediaEngineEx_FWD_DEFINED__
     54 #define __IMFMediaEngineEx_FWD_DEFINED__
     55 typedef interface IMFMediaEngineEx IMFMediaEngineEx;
     56 #ifdef __cplusplus
     57 interface IMFMediaEngineEx;
     58 #endif /* __cplusplus */
     59 #endif
     60 
     61 #ifndef __IMFMediaEngineClassFactory_FWD_DEFINED__
     62 #define __IMFMediaEngineClassFactory_FWD_DEFINED__
     63 typedef interface IMFMediaEngineClassFactory IMFMediaEngineClassFactory;
     64 #ifdef __cplusplus
     65 interface IMFMediaEngineClassFactory;
     66 #endif /* __cplusplus */
     67 #endif
     68 
     69 #ifndef __IMFMediaEngineNotify_FWD_DEFINED__
     70 #define __IMFMediaEngineNotify_FWD_DEFINED__
     71 typedef interface IMFMediaEngineNotify IMFMediaEngineNotify;
     72 #ifdef __cplusplus
     73 interface IMFMediaEngineNotify;
     74 #endif /* __cplusplus */
     75 #endif
     76 
     77 #ifndef __IMFMediaEngineAudioEndpointId_FWD_DEFINED__
     78 #define __IMFMediaEngineAudioEndpointId_FWD_DEFINED__
     79 typedef interface IMFMediaEngineAudioEndpointId IMFMediaEngineAudioEndpointId;
     80 #ifdef __cplusplus
     81 interface IMFMediaEngineAudioEndpointId;
     82 #endif /* __cplusplus */
     83 #endif
     84 
     85 #ifndef __IMFMediaEngineExtension_FWD_DEFINED__
     86 #define __IMFMediaEngineExtension_FWD_DEFINED__
     87 typedef interface IMFMediaEngineExtension IMFMediaEngineExtension;
     88 #ifdef __cplusplus
     89 interface IMFMediaEngineExtension;
     90 #endif /* __cplusplus */
     91 #endif
     92 
     93 /* Headers for imported files */
     94 
     95 #include <mfidl.h>
     96 
     97 #ifdef __cplusplus
     98 extern "C" {
     99 #endif
    100 
    101 EXTERN_GUID(CLSID_MFMediaEngineClassFactory, 0xb44392da, 0x499b, 0x446b, 0xa4, 0xcb, 0x00, 0x5f, 0xea, 0xd0, 0xe6, 0xd5);
    102 EXTERN_GUID(MF_MEDIA_ENGINE_AUDIO_CATEGORY,                     0xc8d4c51d, 0x350e, 0x41f2, 0xba, 0x46, 0xfa, 0xeb, 0xbb, 0x08, 0x57, 0xf6);
    103 EXTERN_GUID(MF_MEDIA_ENGINE_AUDIO_ENDPOINT_ROLE,                0xd2cb93d1, 0x116a, 0x44f2, 0x93, 0x85, 0xf7, 0xd0, 0xfd, 0xa2, 0xfb, 0x46);
    104 EXTERN_GUID(MF_MEDIA_ENGINE_BROWSER_COMPATIBILITY_MODE,         0x4e0212e2, 0xe18f, 0x41e1, 0x95, 0xe5, 0xc0, 0xe7, 0xe9, 0x23, 0x5b, 0xc3);
    105 EXTERN_GUID(MF_MEDIA_ENGINE_BROWSER_COMPATIBILITY_MODE_IE9,     0x052c2d39, 0x40c0, 0x4188, 0xab, 0x86, 0xf8, 0x28, 0x27, 0x3b, 0x75, 0x22);
    106 EXTERN_GUID(MF_MEDIA_ENGINE_BROWSER_COMPATIBILITY_MODE_IE10,    0x11a47afd, 0x6589, 0x4124, 0xb3, 0x12, 0x61, 0x58, 0xec, 0x51, 0x7f, 0xc3);
    107 EXTERN_GUID(MF_MEDIA_ENGINE_BROWSER_COMPATIBILITY_MODE_IE11,    0x1cf1315f, 0xce3f, 0x4035, 0x93, 0x91, 0x16, 0x14, 0x2f, 0x77, 0x51, 0x89);
    108 EXTERN_GUID(MF_MEDIA_ENGINE_BROWSER_COMPATIBILITY_MODE_IE_EDGE, 0xa6f3e465, 0x3aca, 0x442c, 0xa3, 0xf0, 0xad, 0x6d, 0xda, 0xd8, 0x39, 0xae);
    109 EXTERN_GUID(MF_MEDIA_ENGINE_CALLBACK,                           0xc60381b8, 0x83a4, 0x41f8, 0xa3, 0xd0, 0xde, 0x05, 0x07, 0x68, 0x49, 0xa9);
    110 EXTERN_GUID(MF_MEDIA_ENGINE_COMPATIBILITY_MODE,                 0x3ef26ad4, 0xdc54, 0x45de, 0xb9, 0xaf, 0x76, 0xc8, 0xc6, 0x6b, 0xfa, 0x8e);
    111 EXTERN_GUID(MF_MEDIA_ENGINE_COMPATIBILITY_MODE_WIN10,           0x5b25e089, 0x6ca7, 0x4139, 0xa2, 0xcb, 0xfc, 0xaa, 0xb3, 0x95, 0x52, 0xa3);
    112 EXTERN_GUID(MF_MEDIA_ENGINE_COMPATIBILITY_MODE_WWA_EDGE,        0x15b29098, 0x9f01, 0x4e4d, 0xb6, 0x5a, 0xc0, 0x6c, 0x6c, 0x89, 0xda, 0x2a);
    113 EXTERN_GUID(MF_MEDIA_ENGINE_CONTENT_PROTECTION_FLAGS,           0xe0350223, 0x5aaf, 0x4d76, 0xa7, 0xc3, 0x06, 0xde, 0x70, 0x89, 0x4d, 0xb4);
    114 EXTERN_GUID(MF_MEDIA_ENGINE_CONTENT_PROTECTION_MANAGER,         0xfdd6dfaa, 0xbd85, 0x4af3, 0x9e, 0x0f, 0xa0, 0x1d, 0x53, 0x9d, 0x87, 0x6a);
    115 EXTERN_GUID(MF_MEDIA_ENGINE_CONTINUE_ON_CODEC_ERROR,            0xdbcdb7f9, 0x48e4, 0x4295, 0xb7, 0x0d, 0xd5, 0x18, 0x23, 0x4e, 0xeb, 0x38);
    116 EXTERN_GUID(MF_MEDIA_ENGINE_COREWINDOW,                         0xfccae4dc, 0x0b7f, 0x41c2, 0x9f, 0x96, 0x46, 0x59, 0x94, 0x8a, 0xcd, 0xdc);
    117 EXTERN_GUID(MF_MEDIA_ENGINE_DXGI_MANAGER,                       0x065702da, 0x1094, 0x486d, 0x86, 0x17, 0xee, 0x7c, 0xc4, 0xee, 0x46, 0x48);
    118 EXTERN_GUID(MF_MEDIA_ENGINE_EME_CALLBACK,                       0x494553a7, 0xa481, 0x4cb7, 0xbe, 0xc5, 0x38, 0x09, 0x03, 0x51, 0x37, 0x31);
    119 EXTERN_GUID(MF_MEDIA_ENGINE_EXTENSION,                          0x3109fd46, 0x060d, 0x4b62, 0x8d, 0xcf, 0xfa, 0xff, 0x81, 0x13, 0x18, 0xd2);
    120 EXTERN_GUID(MF_MEDIA_ENGINE_MEDIA_PLAYER_MODE,                  0x3ddd8d45, 0x5aa1, 0x4112, 0x82, 0xe5, 0x36, 0xf6, 0xa2, 0x19, 0x7e, 0x6e);
    121 EXTERN_GUID(MF_MEDIA_ENGINE_NEEDKEY_CALLBACK,                   0x7ea80843, 0xb6e4, 0x432c, 0x8e, 0xa4, 0x78, 0x48, 0xff, 0xe4, 0x22, 0x0e);
    122 EXTERN_GUID(MF_MEDIA_ENGINE_OPM_HWND,                           0xa0be8ee7, 0x0572, 0x4f2c, 0xa8, 0x01, 0x2a, 0x15, 0x1b, 0xd3, 0xe7, 0x26);
    123 EXTERN_GUID(MF_MEDIA_ENGINE_PLAYBACK_HWND,                      0xd988879b, 0x67c9, 0x4d92, 0xba, 0xa7, 0x6e, 0xad, 0xd4, 0x46, 0x03, 0x9d);
    124 EXTERN_GUID(MF_MEDIA_ENGINE_PLAYBACK_VISUAL,                    0x6debd26f, 0x6ab9, 0x4d7e, 0xb0, 0xee, 0xc6, 0x1a, 0x73, 0xff, 0xad, 0x15);
    125 EXTERN_GUID(MF_MEDIA_ENGINE_SOURCE_RESOLVER_CONFIG_STORE,       0x0ac0c497, 0xb3c4, 0x48c9, 0x9c, 0xde, 0xbb, 0x8c, 0xa2, 0x44, 0x2c, 0xa3);
    126 EXTERN_GUID(MF_MEDIA_ENGINE_STREAM_CONTAINS_ALPHA_CHANNEL,      0x5cbfaf44, 0xd2b2, 0x4cfb, 0x80, 0xa7, 0xd4, 0x29, 0xc7, 0x4c, 0x78, 0x9d);
    127 EXTERN_GUID(MF_MEDIA_ENGINE_SYNCHRONOUS_CLOSE,                  0xc3c2e12f, 0x7e0e, 0x4e43, 0xb9, 0x1c, 0xdc, 0x99, 0x2c, 0xcd, 0xfa, 0x5e);
    128 EXTERN_GUID(MF_MEDIA_ENGINE_TELEMETRY_APPLICATION_ID,           0x1e7b273b, 0xa7e4, 0x402a, 0x8f, 0x51, 0xc4, 0x8e, 0x88, 0xa2, 0xca, 0xbc);
    129 EXTERN_GUID(MF_MEDIA_ENGINE_TRACK_ID,                           0x65bea312, 0x4043, 0x4815, 0x8e, 0xab, 0x44, 0xdc, 0xe2, 0xef, 0x8f, 0x2a);
    130 EXTERN_GUID(MF_MEDIA_ENGINE_VIDEO_OUTPUT_FORMAT,                0x5066893c, 0x8cf9, 0x42bc, 0x8b, 0x8a, 0x47, 0x22, 0x12, 0xe5, 0x27, 0x26);
    131 typedef enum MF_MEDIA_ENGINE_NETWORK {
    132     MF_MEDIA_ENGINE_NETWORK_EMPTY = 0,
    133     MF_MEDIA_ENGINE_NETWORK_IDLE = 1,
    134     MF_MEDIA_ENGINE_NETWORK_LOADING = 2,
    135     MF_MEDIA_ENGINE_NETWORK_NO_SOURCE = 3
    136 } MF_MEDIA_ENGINE_NETWORK;
    137 typedef enum MF_MEDIA_ENGINE_ERR {
    138     MF_MEDIA_ENGINE_ERR_NOERROR = 0,
    139     MF_MEDIA_ENGINE_ERR_ABORTED = 1,
    140     MF_MEDIA_ENGINE_ERR_NETWORK = 2,
    141     MF_MEDIA_ENGINE_ERR_DECODE = 3,
    142     MF_MEDIA_ENGINE_ERR_SRC_NOT_SUPPORTED = 4,
    143     MF_MEDIA_ENGINE_ERR_ENCRYPTED = 5
    144 } MF_MEDIA_ENGINE_ERR;
    145 typedef enum MF_MEDIA_ENGINE_PRELOAD {
    146     MF_MEDIA_ENGINE_PRELOAD_MISSING = 0,
    147     MF_MEDIA_ENGINE_PRELOAD_EMPTY = 1,
    148     MF_MEDIA_ENGINE_PRELOAD_NONE = 2,
    149     MF_MEDIA_ENGINE_PRELOAD_METADATA = 3,
    150     MF_MEDIA_ENGINE_PRELOAD_AUTOMATIC = 4
    151 } MF_MEDIA_ENGINE_PRELOAD;
    152 typedef enum MF_MEDIA_ENGINE_CANPLAY {
    153     MF_MEDIA_ENGINE_CANPLAY_NOT_SUPPORTED = 0,
    154     MF_MEDIA_ENGINE_CANPLAY_MAYBE = 1,
    155     MF_MEDIA_ENGINE_CANPLAY_PROBABLY = 2
    156 } MF_MEDIA_ENGINE_CANPLAY;
    157 #ifndef _MFVideoNormalizedRect_
    158 #define _MFVideoNormalizedRect_
    159 typedef struct MFVideoNormalizedRect {
    160     float left;
    161     float top;
    162     float right;
    163     float bottom;
    164 } MFVideoNormalizedRect;
    165 #endif
    166 typedef enum MF_MEDIA_ENGINE_CREATEFLAGS {
    167     MF_MEDIA_ENGINE_AUDIOONLY = 0x1,
    168     MF_MEDIA_ENGINE_WAITFORSTABLE_STATE = 0x2,
    169     MF_MEDIA_ENGINE_FORCEMUTE = 0x4,
    170     MF_MEDIA_ENGINE_REAL_TIME_MODE = 0x8,
    171     MF_MEDIA_ENGINE_DISABLE_LOCAL_PLUGINS = 0x10,
    172     MF_MEDIA_ENGINE_CREATEFLAGS_MASK = 0x1f
    173 } MF_MEDIA_ENGINE_CREATEFLAGS;
    174 typedef enum MF_MEDIA_ENGINE_EVENT {
    175     MF_MEDIA_ENGINE_EVENT_LOADSTART = 1,
    176     MF_MEDIA_ENGINE_EVENT_PROGRESS = 2,
    177     MF_MEDIA_ENGINE_EVENT_SUSPEND = 3,
    178     MF_MEDIA_ENGINE_EVENT_ABORT = 4,
    179     MF_MEDIA_ENGINE_EVENT_ERROR = 5,
    180     MF_MEDIA_ENGINE_EVENT_EMPTIED = 6,
    181     MF_MEDIA_ENGINE_EVENT_STALLED = 7,
    182     MF_MEDIA_ENGINE_EVENT_PLAY = 8,
    183     MF_MEDIA_ENGINE_EVENT_PAUSE = 9,
    184     MF_MEDIA_ENGINE_EVENT_LOADEDMETADATA = 10,
    185     MF_MEDIA_ENGINE_EVENT_LOADEDDATA = 11,
    186     MF_MEDIA_ENGINE_EVENT_WAITING = 12,
    187     MF_MEDIA_ENGINE_EVENT_PLAYING = 13,
    188     MF_MEDIA_ENGINE_EVENT_CANPLAY = 14,
    189     MF_MEDIA_ENGINE_EVENT_CANPLAYTHROUGH = 15,
    190     MF_MEDIA_ENGINE_EVENT_SEEKING = 16,
    191     MF_MEDIA_ENGINE_EVENT_SEEKED = 17,
    192     MF_MEDIA_ENGINE_EVENT_TIMEUPDATE = 18,
    193     MF_MEDIA_ENGINE_EVENT_ENDED = 19,
    194     MF_MEDIA_ENGINE_EVENT_RATECHANGE = 20,
    195     MF_MEDIA_ENGINE_EVENT_DURATIONCHANGE = 21,
    196     MF_MEDIA_ENGINE_EVENT_VOLUMECHANGE = 22,
    197     MF_MEDIA_ENGINE_EVENT_FORMATCHANGE = 1000,
    198     MF_MEDIA_ENGINE_EVENT_PURGEQUEUEDEVENTS = 1001,
    199     MF_MEDIA_ENGINE_EVENT_TIMELINE_MARKER = 1002,
    200     MF_MEDIA_ENGINE_EVENT_BALANCECHANGE = 1003,
    201     MF_MEDIA_ENGINE_EVENT_DOWNLOADCOMPLETE = 1004,
    202     MF_MEDIA_ENGINE_EVENT_BUFFERINGSTARTED = 1005,
    203     MF_MEDIA_ENGINE_EVENT_BUFFERINGENDED = 1006,
    204     MF_MEDIA_ENGINE_EVENT_FRAMESTEPCOMPLETED = 1007,
    205     MF_MEDIA_ENGINE_EVENT_NOTIFYSTABLESTATE = 1008,
    206     MF_MEDIA_ENGINE_EVENT_FIRSTFRAMEREADY = 1009,
    207     MF_MEDIA_ENGINE_EVENT_TRACKSCHANGE = 1010,
    208     MF_MEDIA_ENGINE_EVENT_OPMINFO = 1011,
    209     MF_MEDIA_ENGINE_EVENT_RESOURCELOST = 1012,
    210     MF_MEDIA_ENGINE_EVENT_DELAYLOADEVENT_CHANGED = 1013,
    211     MF_MEDIA_ENGINE_EVENT_STREAMRENDERINGERROR = 1014,
    212     MF_MEDIA_ENGINE_EVENT_SUPPORTEDRATES_CHANGED = 1015,
    213     MF_MEDIA_ENGINE_EVENT_AUDIOENDPOINTCHANGE = 1016
    214 } MF_MEDIA_ENGINE_EVENT;
    215 typedef enum MF_MEDIA_ENGINE_READY {
    216     MF_MEDIA_ENGINE_READY_HAVE_NOTHING = 0,
    217     MF_MEDIA_ENGINE_READY_HAVE_METADATA = 1,
    218     MF_MEDIA_ENGINE_READY_HAVE_CURRENT_DATA = 2,
    219     MF_MEDIA_ENGINE_READY_HAVE_FUTURE_DATA = 3,
    220     MF_MEDIA_ENGINE_READY_HAVE_ENOUGH_DATA = 4
    221 } MF_MEDIA_ENGINE_READY;
    222 /*****************************************************************************
    223  * IMFMediaError interface
    224  */
    225 #ifndef __IMFMediaError_INTERFACE_DEFINED__
    226 #define __IMFMediaError_INTERFACE_DEFINED__
    227 
    228 DEFINE_GUID(IID_IMFMediaError, 0xfc0e10d2, 0xab2a, 0x4501, 0xa9,0x51, 0x06,0xbb,0x10,0x75,0x18,0x4c);
    229 #if defined(__cplusplus) && !defined(CINTERFACE)
    230 MIDL_INTERFACE("fc0e10d2-ab2a-4501-a951-06bb1075184c")
    231 IMFMediaError : public IUnknown
    232 {
    233     virtual USHORT STDMETHODCALLTYPE GetErrorCode(
    234         ) = 0;
    235 
    236     virtual HRESULT STDMETHODCALLTYPE GetExtendedErrorCode(
    237         ) = 0;
    238 
    239     virtual HRESULT STDMETHODCALLTYPE SetErrorCode(
    240         MF_MEDIA_ENGINE_ERR error) = 0;
    241 
    242     virtual HRESULT STDMETHODCALLTYPE SetExtendedErrorCode(
    243         HRESULT error) = 0;
    244 
    245 };
    246 #ifdef __CRT_UUID_DECL
    247 __CRT_UUID_DECL(IMFMediaError, 0xfc0e10d2, 0xab2a, 0x4501, 0xa9,0x51, 0x06,0xbb,0x10,0x75,0x18,0x4c)
    248 #endif
    249 #else
    250 typedef struct IMFMediaErrorVtbl {
    251     BEGIN_INTERFACE
    252 
    253     /*** IUnknown methods ***/
    254     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
    255         IMFMediaError *This,
    256         REFIID riid,
    257         void **ppvObject);
    258 
    259     ULONG (STDMETHODCALLTYPE *AddRef)(
    260         IMFMediaError *This);
    261 
    262     ULONG (STDMETHODCALLTYPE *Release)(
    263         IMFMediaError *This);
    264 
    265     /*** IMFMediaError methods ***/
    266     USHORT (STDMETHODCALLTYPE *GetErrorCode)(
    267         IMFMediaError *This);
    268 
    269     HRESULT (STDMETHODCALLTYPE *GetExtendedErrorCode)(
    270         IMFMediaError *This);
    271 
    272     HRESULT (STDMETHODCALLTYPE *SetErrorCode)(
    273         IMFMediaError *This,
    274         MF_MEDIA_ENGINE_ERR error);
    275 
    276     HRESULT (STDMETHODCALLTYPE *SetExtendedErrorCode)(
    277         IMFMediaError *This,
    278         HRESULT error);
    279 
    280     END_INTERFACE
    281 } IMFMediaErrorVtbl;
    282 
    283 interface IMFMediaError {
    284     CONST_VTBL IMFMediaErrorVtbl* lpVtbl;
    285 };
    286 
    287 #ifdef COBJMACROS
    288 #ifndef WIDL_C_INLINE_WRAPPERS
    289 /*** IUnknown methods ***/
    290 #define IMFMediaError_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
    291 #define IMFMediaError_AddRef(This) (This)->lpVtbl->AddRef(This)
    292 #define IMFMediaError_Release(This) (This)->lpVtbl->Release(This)
    293 /*** IMFMediaError methods ***/
    294 #define IMFMediaError_GetErrorCode(This) (This)->lpVtbl->GetErrorCode(This)
    295 #define IMFMediaError_GetExtendedErrorCode(This) (This)->lpVtbl->GetExtendedErrorCode(This)
    296 #define IMFMediaError_SetErrorCode(This,error) (This)->lpVtbl->SetErrorCode(This,error)
    297 #define IMFMediaError_SetExtendedErrorCode(This,error) (This)->lpVtbl->SetExtendedErrorCode(This,error)
    298 #else
    299 /*** IUnknown methods ***/
    300 static inline HRESULT IMFMediaError_QueryInterface(IMFMediaError* This,REFIID riid,void **ppvObject) {
    301     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
    302 }
    303 static inline ULONG IMFMediaError_AddRef(IMFMediaError* This) {
    304     return This->lpVtbl->AddRef(This);
    305 }
    306 static inline ULONG IMFMediaError_Release(IMFMediaError* This) {
    307     return This->lpVtbl->Release(This);
    308 }
    309 /*** IMFMediaError methods ***/
    310 static inline USHORT IMFMediaError_GetErrorCode(IMFMediaError* This) {
    311     return This->lpVtbl->GetErrorCode(This);
    312 }
    313 static inline HRESULT IMFMediaError_GetExtendedErrorCode(IMFMediaError* This) {
    314     return This->lpVtbl->GetExtendedErrorCode(This);
    315 }
    316 static inline HRESULT IMFMediaError_SetErrorCode(IMFMediaError* This,MF_MEDIA_ENGINE_ERR error) {
    317     return This->lpVtbl->SetErrorCode(This,error);
    318 }
    319 static inline HRESULT IMFMediaError_SetExtendedErrorCode(IMFMediaError* This,HRESULT error) {
    320     return This->lpVtbl->SetExtendedErrorCode(This,error);
    321 }
    322 #endif
    323 #endif
    324 
    325 #endif
    326 
    327 
    328 #endif  /* __IMFMediaError_INTERFACE_DEFINED__ */
    329 
    330 /*****************************************************************************
    331  * IMFMediaEngineSrcElements interface
    332  */
    333 #ifndef __IMFMediaEngineSrcElements_INTERFACE_DEFINED__
    334 #define __IMFMediaEngineSrcElements_INTERFACE_DEFINED__
    335 
    336 DEFINE_GUID(IID_IMFMediaEngineSrcElements, 0x7a5e5354, 0xb114, 0x4c72, 0xb9,0x91, 0x31,0x31,0xd7,0x50,0x32,0xea);
    337 #if defined(__cplusplus) && !defined(CINTERFACE)
    338 MIDL_INTERFACE("7a5e5354-b114-4c72-b991-3131d75032ea")
    339 IMFMediaEngineSrcElements : public IUnknown
    340 {
    341     virtual DWORD STDMETHODCALLTYPE GetLength(
    342         ) = 0;
    343 
    344     virtual HRESULT STDMETHODCALLTYPE GetURL(
    345         DWORD index,
    346         BSTR *url) = 0;
    347 
    348     virtual HRESULT STDMETHODCALLTYPE GetType(
    349         DWORD index,
    350         BSTR *type) = 0;
    351 
    352     virtual HRESULT STDMETHODCALLTYPE GetMedia(
    353         DWORD index,
    354         BSTR *media) = 0;
    355 
    356     virtual HRESULT STDMETHODCALLTYPE AddElement(
    357         BSTR url,
    358         BSTR type,
    359         BSTR media) = 0;
    360 
    361     virtual HRESULT STDMETHODCALLTYPE RemoveAllElements(
    362         ) = 0;
    363 
    364 };
    365 #ifdef __CRT_UUID_DECL
    366 __CRT_UUID_DECL(IMFMediaEngineSrcElements, 0x7a5e5354, 0xb114, 0x4c72, 0xb9,0x91, 0x31,0x31,0xd7,0x50,0x32,0xea)
    367 #endif
    368 #else
    369 typedef struct IMFMediaEngineSrcElementsVtbl {
    370     BEGIN_INTERFACE
    371 
    372     /*** IUnknown methods ***/
    373     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
    374         IMFMediaEngineSrcElements *This,
    375         REFIID riid,
    376         void **ppvObject);
    377 
    378     ULONG (STDMETHODCALLTYPE *AddRef)(
    379         IMFMediaEngineSrcElements *This);
    380 
    381     ULONG (STDMETHODCALLTYPE *Release)(
    382         IMFMediaEngineSrcElements *This);
    383 
    384     /*** IMFMediaEngineSrcElements methods ***/
    385     DWORD (STDMETHODCALLTYPE *GetLength)(
    386         IMFMediaEngineSrcElements *This);
    387 
    388     HRESULT (STDMETHODCALLTYPE *GetURL)(
    389         IMFMediaEngineSrcElements *This,
    390         DWORD index,
    391         BSTR *url);
    392 
    393     HRESULT (STDMETHODCALLTYPE *GetType)(
    394         IMFMediaEngineSrcElements *This,
    395         DWORD index,
    396         BSTR *type);
    397 
    398     HRESULT (STDMETHODCALLTYPE *GetMedia)(
    399         IMFMediaEngineSrcElements *This,
    400         DWORD index,
    401         BSTR *media);
    402 
    403     HRESULT (STDMETHODCALLTYPE *AddElement)(
    404         IMFMediaEngineSrcElements *This,
    405         BSTR url,
    406         BSTR type,
    407         BSTR media);
    408 
    409     HRESULT (STDMETHODCALLTYPE *RemoveAllElements)(
    410         IMFMediaEngineSrcElements *This);
    411 
    412     END_INTERFACE
    413 } IMFMediaEngineSrcElementsVtbl;
    414 
    415 interface IMFMediaEngineSrcElements {
    416     CONST_VTBL IMFMediaEngineSrcElementsVtbl* lpVtbl;
    417 };
    418 
    419 #ifdef COBJMACROS
    420 #ifndef WIDL_C_INLINE_WRAPPERS
    421 /*** IUnknown methods ***/
    422 #define IMFMediaEngineSrcElements_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
    423 #define IMFMediaEngineSrcElements_AddRef(This) (This)->lpVtbl->AddRef(This)
    424 #define IMFMediaEngineSrcElements_Release(This) (This)->lpVtbl->Release(This)
    425 /*** IMFMediaEngineSrcElements methods ***/
    426 #define IMFMediaEngineSrcElements_GetLength(This) (This)->lpVtbl->GetLength(This)
    427 #define IMFMediaEngineSrcElements_GetURL(This,index,url) (This)->lpVtbl->GetURL(This,index,url)
    428 #define IMFMediaEngineSrcElements_GetType(This,index,type) (This)->lpVtbl->GetType(This,index,type)
    429 #define IMFMediaEngineSrcElements_GetMedia(This,index,media) (This)->lpVtbl->GetMedia(This,index,media)
    430 #define IMFMediaEngineSrcElements_AddElement(This,url,type,media) (This)->lpVtbl->AddElement(This,url,type,media)
    431 #define IMFMediaEngineSrcElements_RemoveAllElements(This) (This)->lpVtbl->RemoveAllElements(This)
    432 #else
    433 /*** IUnknown methods ***/
    434 static inline HRESULT IMFMediaEngineSrcElements_QueryInterface(IMFMediaEngineSrcElements* This,REFIID riid,void **ppvObject) {
    435     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
    436 }
    437 static inline ULONG IMFMediaEngineSrcElements_AddRef(IMFMediaEngineSrcElements* This) {
    438     return This->lpVtbl->AddRef(This);
    439 }
    440 static inline ULONG IMFMediaEngineSrcElements_Release(IMFMediaEngineSrcElements* This) {
    441     return This->lpVtbl->Release(This);
    442 }
    443 /*** IMFMediaEngineSrcElements methods ***/
    444 static inline DWORD IMFMediaEngineSrcElements_GetLength(IMFMediaEngineSrcElements* This) {
    445     return This->lpVtbl->GetLength(This);
    446 }
    447 static inline HRESULT IMFMediaEngineSrcElements_GetURL(IMFMediaEngineSrcElements* This,DWORD index,BSTR *url) {
    448     return This->lpVtbl->GetURL(This,index,url);
    449 }
    450 static inline HRESULT IMFMediaEngineSrcElements_GetType(IMFMediaEngineSrcElements* This,DWORD index,BSTR *type) {
    451     return This->lpVtbl->GetType(This,index,type);
    452 }
    453 static inline HRESULT IMFMediaEngineSrcElements_GetMedia(IMFMediaEngineSrcElements* This,DWORD index,BSTR *media) {
    454     return This->lpVtbl->GetMedia(This,index,media);
    455 }
    456 static inline HRESULT IMFMediaEngineSrcElements_AddElement(IMFMediaEngineSrcElements* This,BSTR url,BSTR type,BSTR media) {
    457     return This->lpVtbl->AddElement(This,url,type,media);
    458 }
    459 static inline HRESULT IMFMediaEngineSrcElements_RemoveAllElements(IMFMediaEngineSrcElements* This) {
    460     return This->lpVtbl->RemoveAllElements(This);
    461 }
    462 #endif
    463 #endif
    464 
    465 #endif
    466 
    467 
    468 #endif  /* __IMFMediaEngineSrcElements_INTERFACE_DEFINED__ */
    469 
    470 /*****************************************************************************
    471  * IMFMediaTimeRange interface
    472  */
    473 #ifndef __IMFMediaTimeRange_INTERFACE_DEFINED__
    474 #define __IMFMediaTimeRange_INTERFACE_DEFINED__
    475 
    476 DEFINE_GUID(IID_IMFMediaTimeRange, 0xdb71a2fc, 0x078a, 0x414e, 0x9d,0xf9, 0x8c,0x25,0x31,0xb0,0xaa,0x6c);
    477 #if defined(__cplusplus) && !defined(CINTERFACE)
    478 MIDL_INTERFACE("db71a2fc-078a-414e-9df9-8c2531b0aa6c")
    479 IMFMediaTimeRange : public IUnknown
    480 {
    481     virtual DWORD STDMETHODCALLTYPE GetLength(
    482         ) = 0;
    483 
    484     virtual HRESULT STDMETHODCALLTYPE GetStart(
    485         DWORD index,
    486         double *start) = 0;
    487 
    488     virtual HRESULT STDMETHODCALLTYPE GetEnd(
    489         DWORD index,
    490         double *end) = 0;
    491 
    492     virtual WINBOOL STDMETHODCALLTYPE ContainsTime(
    493         double time) = 0;
    494 
    495     virtual HRESULT STDMETHODCALLTYPE AddRange(
    496         double start,
    497         double end) = 0;
    498 
    499     virtual HRESULT STDMETHODCALLTYPE Clear(
    500         ) = 0;
    501 
    502 };
    503 #ifdef __CRT_UUID_DECL
    504 __CRT_UUID_DECL(IMFMediaTimeRange, 0xdb71a2fc, 0x078a, 0x414e, 0x9d,0xf9, 0x8c,0x25,0x31,0xb0,0xaa,0x6c)
    505 #endif
    506 #else
    507 typedef struct IMFMediaTimeRangeVtbl {
    508     BEGIN_INTERFACE
    509 
    510     /*** IUnknown methods ***/
    511     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
    512         IMFMediaTimeRange *This,
    513         REFIID riid,
    514         void **ppvObject);
    515 
    516     ULONG (STDMETHODCALLTYPE *AddRef)(
    517         IMFMediaTimeRange *This);
    518 
    519     ULONG (STDMETHODCALLTYPE *Release)(
    520         IMFMediaTimeRange *This);
    521 
    522     /*** IMFMediaTimeRange methods ***/
    523     DWORD (STDMETHODCALLTYPE *GetLength)(
    524         IMFMediaTimeRange *This);
    525 
    526     HRESULT (STDMETHODCALLTYPE *GetStart)(
    527         IMFMediaTimeRange *This,
    528         DWORD index,
    529         double *start);
    530 
    531     HRESULT (STDMETHODCALLTYPE *GetEnd)(
    532         IMFMediaTimeRange *This,
    533         DWORD index,
    534         double *end);
    535 
    536     WINBOOL (STDMETHODCALLTYPE *ContainsTime)(
    537         IMFMediaTimeRange *This,
    538         double time);
    539 
    540     HRESULT (STDMETHODCALLTYPE *AddRange)(
    541         IMFMediaTimeRange *This,
    542         double start,
    543         double end);
    544 
    545     HRESULT (STDMETHODCALLTYPE *Clear)(
    546         IMFMediaTimeRange *This);
    547 
    548     END_INTERFACE
    549 } IMFMediaTimeRangeVtbl;
    550 
    551 interface IMFMediaTimeRange {
    552     CONST_VTBL IMFMediaTimeRangeVtbl* lpVtbl;
    553 };
    554 
    555 #ifdef COBJMACROS
    556 #ifndef WIDL_C_INLINE_WRAPPERS
    557 /*** IUnknown methods ***/
    558 #define IMFMediaTimeRange_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
    559 #define IMFMediaTimeRange_AddRef(This) (This)->lpVtbl->AddRef(This)
    560 #define IMFMediaTimeRange_Release(This) (This)->lpVtbl->Release(This)
    561 /*** IMFMediaTimeRange methods ***/
    562 #define IMFMediaTimeRange_GetLength(This) (This)->lpVtbl->GetLength(This)
    563 #define IMFMediaTimeRange_GetStart(This,index,start) (This)->lpVtbl->GetStart(This,index,start)
    564 #define IMFMediaTimeRange_GetEnd(This,index,end) (This)->lpVtbl->GetEnd(This,index,end)
    565 #define IMFMediaTimeRange_ContainsTime(This,time) (This)->lpVtbl->ContainsTime(This,time)
    566 #define IMFMediaTimeRange_AddRange(This,start,end) (This)->lpVtbl->AddRange(This,start,end)
    567 #define IMFMediaTimeRange_Clear(This) (This)->lpVtbl->Clear(This)
    568 #else
    569 /*** IUnknown methods ***/
    570 static inline HRESULT IMFMediaTimeRange_QueryInterface(IMFMediaTimeRange* This,REFIID riid,void **ppvObject) {
    571     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
    572 }
    573 static inline ULONG IMFMediaTimeRange_AddRef(IMFMediaTimeRange* This) {
    574     return This->lpVtbl->AddRef(This);
    575 }
    576 static inline ULONG IMFMediaTimeRange_Release(IMFMediaTimeRange* This) {
    577     return This->lpVtbl->Release(This);
    578 }
    579 /*** IMFMediaTimeRange methods ***/
    580 static inline DWORD IMFMediaTimeRange_GetLength(IMFMediaTimeRange* This) {
    581     return This->lpVtbl->GetLength(This);
    582 }
    583 static inline HRESULT IMFMediaTimeRange_GetStart(IMFMediaTimeRange* This,DWORD index,double *start) {
    584     return This->lpVtbl->GetStart(This,index,start);
    585 }
    586 static inline HRESULT IMFMediaTimeRange_GetEnd(IMFMediaTimeRange* This,DWORD index,double *end) {
    587     return This->lpVtbl->GetEnd(This,index,end);
    588 }
    589 static inline WINBOOL IMFMediaTimeRange_ContainsTime(IMFMediaTimeRange* This,double time) {
    590     return This->lpVtbl->ContainsTime(This,time);
    591 }
    592 static inline HRESULT IMFMediaTimeRange_AddRange(IMFMediaTimeRange* This,double start,double end) {
    593     return This->lpVtbl->AddRange(This,start,end);
    594 }
    595 static inline HRESULT IMFMediaTimeRange_Clear(IMFMediaTimeRange* This) {
    596     return This->lpVtbl->Clear(This);
    597 }
    598 #endif
    599 #endif
    600 
    601 #endif
    602 
    603 
    604 #endif  /* __IMFMediaTimeRange_INTERFACE_DEFINED__ */
    605 
    606 /*****************************************************************************
    607  * IMFMediaEngine interface
    608  */
    609 #ifndef __IMFMediaEngine_INTERFACE_DEFINED__
    610 #define __IMFMediaEngine_INTERFACE_DEFINED__
    611 
    612 #undef GetCurrentTime
    613 DEFINE_GUID(IID_IMFMediaEngine, 0x98a1b0bb, 0x03eb, 0x4935, 0xae,0x7c, 0x93,0xc1,0xfa,0x0e,0x1c,0x93);
    614 #if defined(__cplusplus) && !defined(CINTERFACE)
    615 MIDL_INTERFACE("98a1b0bb-03eb-4935-ae7c-93c1fa0e1c93")
    616 IMFMediaEngine : public IUnknown
    617 {
    618     virtual HRESULT STDMETHODCALLTYPE GetError(
    619         IMFMediaError **error) = 0;
    620 
    621     virtual HRESULT STDMETHODCALLTYPE SetErrorCode(
    622         MF_MEDIA_ENGINE_ERR error) = 0;
    623 
    624     virtual HRESULT STDMETHODCALLTYPE SetSourceElements(
    625         IMFMediaEngineSrcElements *elements) = 0;
    626 
    627     virtual HRESULT STDMETHODCALLTYPE SetSource(
    628         BSTR url) = 0;
    629 
    630     virtual HRESULT STDMETHODCALLTYPE GetCurrentSource(
    631         BSTR *url) = 0;
    632 
    633     virtual USHORT STDMETHODCALLTYPE GetNetworkState(
    634         ) = 0;
    635 
    636     virtual MF_MEDIA_ENGINE_PRELOAD STDMETHODCALLTYPE GetPreload(
    637         ) = 0;
    638 
    639     virtual HRESULT STDMETHODCALLTYPE SetPreload(
    640         MF_MEDIA_ENGINE_PRELOAD preload) = 0;
    641 
    642     virtual HRESULT STDMETHODCALLTYPE GetBuffered(
    643         IMFMediaTimeRange **buffered) = 0;
    644 
    645     virtual HRESULT STDMETHODCALLTYPE Load(
    646         ) = 0;
    647 
    648     virtual HRESULT STDMETHODCALLTYPE CanPlayType(
    649         BSTR type,
    650         MF_MEDIA_ENGINE_CANPLAY *answer) = 0;
    651 
    652     virtual USHORT STDMETHODCALLTYPE GetReadyState(
    653         ) = 0;
    654 
    655     virtual WINBOOL STDMETHODCALLTYPE IsSeeking(
    656         ) = 0;
    657 
    658     virtual double STDMETHODCALLTYPE GetCurrentTime(
    659         ) = 0;
    660 
    661     virtual HRESULT STDMETHODCALLTYPE SetCurrentTime(
    662         double time) = 0;
    663 
    664     virtual double STDMETHODCALLTYPE GetStartTime(
    665         ) = 0;
    666 
    667     virtual double STDMETHODCALLTYPE GetDuration(
    668         ) = 0;
    669 
    670     virtual WINBOOL STDMETHODCALLTYPE IsPaused(
    671         ) = 0;
    672 
    673     virtual double STDMETHODCALLTYPE GetDefaultPlaybackRate(
    674         ) = 0;
    675 
    676     virtual HRESULT STDMETHODCALLTYPE SetDefaultPlaybackRate(
    677         double rate) = 0;
    678 
    679     virtual double STDMETHODCALLTYPE GetPlaybackRate(
    680         ) = 0;
    681 
    682     virtual HRESULT STDMETHODCALLTYPE SetPlaybackRate(
    683         double rate) = 0;
    684 
    685     virtual HRESULT STDMETHODCALLTYPE GetPlayed(
    686         IMFMediaTimeRange **played) = 0;
    687 
    688     virtual HRESULT STDMETHODCALLTYPE GetSeekable(
    689         IMFMediaTimeRange **seekable) = 0;
    690 
    691     virtual WINBOOL STDMETHODCALLTYPE IsEnded(
    692         ) = 0;
    693 
    694     virtual WINBOOL STDMETHODCALLTYPE GetAutoPlay(
    695         ) = 0;
    696 
    697     virtual HRESULT STDMETHODCALLTYPE SetAutoPlay(
    698         WINBOOL autoplay) = 0;
    699 
    700     virtual WINBOOL STDMETHODCALLTYPE GetLoop(
    701         ) = 0;
    702 
    703     virtual HRESULT STDMETHODCALLTYPE SetLoop(
    704         WINBOOL loop) = 0;
    705 
    706     virtual HRESULT STDMETHODCALLTYPE Play(
    707         ) = 0;
    708 
    709     virtual HRESULT STDMETHODCALLTYPE Pause(
    710         ) = 0;
    711 
    712     virtual WINBOOL STDMETHODCALLTYPE GetMuted(
    713         ) = 0;
    714 
    715     virtual HRESULT STDMETHODCALLTYPE SetMuted(
    716         WINBOOL muted) = 0;
    717 
    718     virtual double STDMETHODCALLTYPE GetVolume(
    719         ) = 0;
    720 
    721     virtual HRESULT STDMETHODCALLTYPE SetVolume(
    722         double volume) = 0;
    723 
    724     virtual WINBOOL STDMETHODCALLTYPE HasVideo(
    725         ) = 0;
    726 
    727     virtual WINBOOL STDMETHODCALLTYPE HasAudio(
    728         ) = 0;
    729 
    730     virtual HRESULT STDMETHODCALLTYPE GetNativeVideoSize(
    731         DWORD *cx,
    732         DWORD *cy) = 0;
    733 
    734     virtual HRESULT STDMETHODCALLTYPE GetVideoAspectRatio(
    735         DWORD *cx,
    736         DWORD *cy) = 0;
    737 
    738     virtual HRESULT STDMETHODCALLTYPE Shutdown(
    739         ) = 0;
    740 
    741     virtual HRESULT STDMETHODCALLTYPE TransferVideoFrame(
    742         IUnknown *surface,
    743         const MFVideoNormalizedRect *src,
    744         const RECT *dst,
    745         const MFARGB *color) = 0;
    746 
    747     virtual HRESULT STDMETHODCALLTYPE OnVideoStreamTick(
    748         LONGLONG *time) = 0;
    749 
    750 };
    751 #ifdef __CRT_UUID_DECL
    752 __CRT_UUID_DECL(IMFMediaEngine, 0x98a1b0bb, 0x03eb, 0x4935, 0xae,0x7c, 0x93,0xc1,0xfa,0x0e,0x1c,0x93)
    753 #endif
    754 #else
    755 typedef struct IMFMediaEngineVtbl {
    756     BEGIN_INTERFACE
    757 
    758     /*** IUnknown methods ***/
    759     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
    760         IMFMediaEngine *This,
    761         REFIID riid,
    762         void **ppvObject);
    763 
    764     ULONG (STDMETHODCALLTYPE *AddRef)(
    765         IMFMediaEngine *This);
    766 
    767     ULONG (STDMETHODCALLTYPE *Release)(
    768         IMFMediaEngine *This);
    769 
    770     /*** IMFMediaEngine methods ***/
    771     HRESULT (STDMETHODCALLTYPE *GetError)(
    772         IMFMediaEngine *This,
    773         IMFMediaError **error);
    774 
    775     HRESULT (STDMETHODCALLTYPE *SetErrorCode)(
    776         IMFMediaEngine *This,
    777         MF_MEDIA_ENGINE_ERR error);
    778 
    779     HRESULT (STDMETHODCALLTYPE *SetSourceElements)(
    780         IMFMediaEngine *This,
    781         IMFMediaEngineSrcElements *elements);
    782 
    783     HRESULT (STDMETHODCALLTYPE *SetSource)(
    784         IMFMediaEngine *This,
    785         BSTR url);
    786 
    787     HRESULT (STDMETHODCALLTYPE *GetCurrentSource)(
    788         IMFMediaEngine *This,
    789         BSTR *url);
    790 
    791     USHORT (STDMETHODCALLTYPE *GetNetworkState)(
    792         IMFMediaEngine *This);
    793 
    794     MF_MEDIA_ENGINE_PRELOAD (STDMETHODCALLTYPE *GetPreload)(
    795         IMFMediaEngine *This);
    796 
    797     HRESULT (STDMETHODCALLTYPE *SetPreload)(
    798         IMFMediaEngine *This,
    799         MF_MEDIA_ENGINE_PRELOAD preload);
    800 
    801     HRESULT (STDMETHODCALLTYPE *GetBuffered)(
    802         IMFMediaEngine *This,
    803         IMFMediaTimeRange **buffered);
    804 
    805     HRESULT (STDMETHODCALLTYPE *Load)(
    806         IMFMediaEngine *This);
    807 
    808     HRESULT (STDMETHODCALLTYPE *CanPlayType)(
    809         IMFMediaEngine *This,
    810         BSTR type,
    811         MF_MEDIA_ENGINE_CANPLAY *answer);
    812 
    813     USHORT (STDMETHODCALLTYPE *GetReadyState)(
    814         IMFMediaEngine *This);
    815 
    816     WINBOOL (STDMETHODCALLTYPE *IsSeeking)(
    817         IMFMediaEngine *This);
    818 
    819     double (STDMETHODCALLTYPE *GetCurrentTime)(
    820         IMFMediaEngine *This);
    821 
    822     HRESULT (STDMETHODCALLTYPE *SetCurrentTime)(
    823         IMFMediaEngine *This,
    824         double time);
    825 
    826     double (STDMETHODCALLTYPE *GetStartTime)(
    827         IMFMediaEngine *This);
    828 
    829     double (STDMETHODCALLTYPE *GetDuration)(
    830         IMFMediaEngine *This);
    831 
    832     WINBOOL (STDMETHODCALLTYPE *IsPaused)(
    833         IMFMediaEngine *This);
    834 
    835     double (STDMETHODCALLTYPE *GetDefaultPlaybackRate)(
    836         IMFMediaEngine *This);
    837 
    838     HRESULT (STDMETHODCALLTYPE *SetDefaultPlaybackRate)(
    839         IMFMediaEngine *This,
    840         double rate);
    841 
    842     double (STDMETHODCALLTYPE *GetPlaybackRate)(
    843         IMFMediaEngine *This);
    844 
    845     HRESULT (STDMETHODCALLTYPE *SetPlaybackRate)(
    846         IMFMediaEngine *This,
    847         double rate);
    848 
    849     HRESULT (STDMETHODCALLTYPE *GetPlayed)(
    850         IMFMediaEngine *This,
    851         IMFMediaTimeRange **played);
    852 
    853     HRESULT (STDMETHODCALLTYPE *GetSeekable)(
    854         IMFMediaEngine *This,
    855         IMFMediaTimeRange **seekable);
    856 
    857     WINBOOL (STDMETHODCALLTYPE *IsEnded)(
    858         IMFMediaEngine *This);
    859 
    860     WINBOOL (STDMETHODCALLTYPE *GetAutoPlay)(
    861         IMFMediaEngine *This);
    862 
    863     HRESULT (STDMETHODCALLTYPE *SetAutoPlay)(
    864         IMFMediaEngine *This,
    865         WINBOOL autoplay);
    866 
    867     WINBOOL (STDMETHODCALLTYPE *GetLoop)(
    868         IMFMediaEngine *This);
    869 
    870     HRESULT (STDMETHODCALLTYPE *SetLoop)(
    871         IMFMediaEngine *This,
    872         WINBOOL loop);
    873 
    874     HRESULT (STDMETHODCALLTYPE *Play)(
    875         IMFMediaEngine *This);
    876 
    877     HRESULT (STDMETHODCALLTYPE *Pause)(
    878         IMFMediaEngine *This);
    879 
    880     WINBOOL (STDMETHODCALLTYPE *GetMuted)(
    881         IMFMediaEngine *This);
    882 
    883     HRESULT (STDMETHODCALLTYPE *SetMuted)(
    884         IMFMediaEngine *This,
    885         WINBOOL muted);
    886 
    887     double (STDMETHODCALLTYPE *GetVolume)(
    888         IMFMediaEngine *This);
    889 
    890     HRESULT (STDMETHODCALLTYPE *SetVolume)(
    891         IMFMediaEngine *This,
    892         double volume);
    893 
    894     WINBOOL (STDMETHODCALLTYPE *HasVideo)(
    895         IMFMediaEngine *This);
    896 
    897     WINBOOL (STDMETHODCALLTYPE *HasAudio)(
    898         IMFMediaEngine *This);
    899 
    900     HRESULT (STDMETHODCALLTYPE *GetNativeVideoSize)(
    901         IMFMediaEngine *This,
    902         DWORD *cx,
    903         DWORD *cy);
    904 
    905     HRESULT (STDMETHODCALLTYPE *GetVideoAspectRatio)(
    906         IMFMediaEngine *This,
    907         DWORD *cx,
    908         DWORD *cy);
    909 
    910     HRESULT (STDMETHODCALLTYPE *Shutdown)(
    911         IMFMediaEngine *This);
    912 
    913     HRESULT (STDMETHODCALLTYPE *TransferVideoFrame)(
    914         IMFMediaEngine *This,
    915         IUnknown *surface,
    916         const MFVideoNormalizedRect *src,
    917         const RECT *dst,
    918         const MFARGB *color);
    919 
    920     HRESULT (STDMETHODCALLTYPE *OnVideoStreamTick)(
    921         IMFMediaEngine *This,
    922         LONGLONG *time);
    923 
    924     END_INTERFACE
    925 } IMFMediaEngineVtbl;
    926 
    927 interface IMFMediaEngine {
    928     CONST_VTBL IMFMediaEngineVtbl* lpVtbl;
    929 };
    930 
    931 #ifdef COBJMACROS
    932 #ifndef WIDL_C_INLINE_WRAPPERS
    933 /*** IUnknown methods ***/
    934 #define IMFMediaEngine_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
    935 #define IMFMediaEngine_AddRef(This) (This)->lpVtbl->AddRef(This)
    936 #define IMFMediaEngine_Release(This) (This)->lpVtbl->Release(This)
    937 /*** IMFMediaEngine methods ***/
    938 #define IMFMediaEngine_GetError(This,error) (This)->lpVtbl->GetError(This,error)
    939 #define IMFMediaEngine_SetErrorCode(This,error) (This)->lpVtbl->SetErrorCode(This,error)
    940 #define IMFMediaEngine_SetSourceElements(This,elements) (This)->lpVtbl->SetSourceElements(This,elements)
    941 #define IMFMediaEngine_SetSource(This,url) (This)->lpVtbl->SetSource(This,url)
    942 #define IMFMediaEngine_GetCurrentSource(This,url) (This)->lpVtbl->GetCurrentSource(This,url)
    943 #define IMFMediaEngine_GetNetworkState(This) (This)->lpVtbl->GetNetworkState(This)
    944 #define IMFMediaEngine_GetPreload(This) (This)->lpVtbl->GetPreload(This)
    945 #define IMFMediaEngine_SetPreload(This,preload) (This)->lpVtbl->SetPreload(This,preload)
    946 #define IMFMediaEngine_GetBuffered(This,buffered) (This)->lpVtbl->GetBuffered(This,buffered)
    947 #define IMFMediaEngine_Load(This) (This)->lpVtbl->Load(This)
    948 #define IMFMediaEngine_CanPlayType(This,type,answer) (This)->lpVtbl->CanPlayType(This,type,answer)
    949 #define IMFMediaEngine_GetReadyState(This) (This)->lpVtbl->GetReadyState(This)
    950 #define IMFMediaEngine_IsSeeking(This) (This)->lpVtbl->IsSeeking(This)
    951 #define IMFMediaEngine_GetCurrentTime(This) (This)->lpVtbl->GetCurrentTime(This)
    952 #define IMFMediaEngine_SetCurrentTime(This,time) (This)->lpVtbl->SetCurrentTime(This,time)
    953 #define IMFMediaEngine_GetStartTime(This) (This)->lpVtbl->GetStartTime(This)
    954 #define IMFMediaEngine_GetDuration(This) (This)->lpVtbl->GetDuration(This)
    955 #define IMFMediaEngine_IsPaused(This) (This)->lpVtbl->IsPaused(This)
    956 #define IMFMediaEngine_GetDefaultPlaybackRate(This) (This)->lpVtbl->GetDefaultPlaybackRate(This)
    957 #define IMFMediaEngine_SetDefaultPlaybackRate(This,rate) (This)->lpVtbl->SetDefaultPlaybackRate(This,rate)
    958 #define IMFMediaEngine_GetPlaybackRate(This) (This)->lpVtbl->GetPlaybackRate(This)
    959 #define IMFMediaEngine_SetPlaybackRate(This,rate) (This)->lpVtbl->SetPlaybackRate(This,rate)
    960 #define IMFMediaEngine_GetPlayed(This,played) (This)->lpVtbl->GetPlayed(This,played)
    961 #define IMFMediaEngine_GetSeekable(This,seekable) (This)->lpVtbl->GetSeekable(This,seekable)
    962 #define IMFMediaEngine_IsEnded(This) (This)->lpVtbl->IsEnded(This)
    963 #define IMFMediaEngine_GetAutoPlay(This) (This)->lpVtbl->GetAutoPlay(This)
    964 #define IMFMediaEngine_SetAutoPlay(This,autoplay) (This)->lpVtbl->SetAutoPlay(This,autoplay)
    965 #define IMFMediaEngine_GetLoop(This) (This)->lpVtbl->GetLoop(This)
    966 #define IMFMediaEngine_SetLoop(This,loop) (This)->lpVtbl->SetLoop(This,loop)
    967 #define IMFMediaEngine_Play(This) (This)->lpVtbl->Play(This)
    968 #define IMFMediaEngine_Pause(This) (This)->lpVtbl->Pause(This)
    969 #define IMFMediaEngine_GetMuted(This) (This)->lpVtbl->GetMuted(This)
    970 #define IMFMediaEngine_SetMuted(This,muted) (This)->lpVtbl->SetMuted(This,muted)
    971 #define IMFMediaEngine_GetVolume(This) (This)->lpVtbl->GetVolume(This)
    972 #define IMFMediaEngine_SetVolume(This,volume) (This)->lpVtbl->SetVolume(This,volume)
    973 #define IMFMediaEngine_HasVideo(This) (This)->lpVtbl->HasVideo(This)
    974 #define IMFMediaEngine_HasAudio(This) (This)->lpVtbl->HasAudio(This)
    975 #define IMFMediaEngine_GetNativeVideoSize(This,cx,cy) (This)->lpVtbl->GetNativeVideoSize(This,cx,cy)
    976 #define IMFMediaEngine_GetVideoAspectRatio(This,cx,cy) (This)->lpVtbl->GetVideoAspectRatio(This,cx,cy)
    977 #define IMFMediaEngine_Shutdown(This) (This)->lpVtbl->Shutdown(This)
    978 #define IMFMediaEngine_TransferVideoFrame(This,surface,src,dst,color) (This)->lpVtbl->TransferVideoFrame(This,surface,src,dst,color)
    979 #define IMFMediaEngine_OnVideoStreamTick(This,time) (This)->lpVtbl->OnVideoStreamTick(This,time)
    980 #else
    981 /*** IUnknown methods ***/
    982 static inline HRESULT IMFMediaEngine_QueryInterface(IMFMediaEngine* This,REFIID riid,void **ppvObject) {
    983     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
    984 }
    985 static inline ULONG IMFMediaEngine_AddRef(IMFMediaEngine* This) {
    986     return This->lpVtbl->AddRef(This);
    987 }
    988 static inline ULONG IMFMediaEngine_Release(IMFMediaEngine* This) {
    989     return This->lpVtbl->Release(This);
    990 }
    991 /*** IMFMediaEngine methods ***/
    992 static inline HRESULT IMFMediaEngine_GetError(IMFMediaEngine* This,IMFMediaError **error) {
    993     return This->lpVtbl->GetError(This,error);
    994 }
    995 static inline HRESULT IMFMediaEngine_SetErrorCode(IMFMediaEngine* This,MF_MEDIA_ENGINE_ERR error) {
    996     return This->lpVtbl->SetErrorCode(This,error);
    997 }
    998 static inline HRESULT IMFMediaEngine_SetSourceElements(IMFMediaEngine* This,IMFMediaEngineSrcElements *elements) {
    999     return This->lpVtbl->SetSourceElements(This,elements);
   1000 }
   1001 static inline HRESULT IMFMediaEngine_SetSource(IMFMediaEngine* This,BSTR url) {
   1002     return This->lpVtbl->SetSource(This,url);
   1003 }
   1004 static inline HRESULT IMFMediaEngine_GetCurrentSource(IMFMediaEngine* This,BSTR *url) {
   1005     return This->lpVtbl->GetCurrentSource(This,url);
   1006 }
   1007 static inline USHORT IMFMediaEngine_GetNetworkState(IMFMediaEngine* This) {
   1008     return This->lpVtbl->GetNetworkState(This);
   1009 }
   1010 static inline MF_MEDIA_ENGINE_PRELOAD IMFMediaEngine_GetPreload(IMFMediaEngine* This) {
   1011     return This->lpVtbl->GetPreload(This);
   1012 }
   1013 static inline HRESULT IMFMediaEngine_SetPreload(IMFMediaEngine* This,MF_MEDIA_ENGINE_PRELOAD preload) {
   1014     return This->lpVtbl->SetPreload(This,preload);
   1015 }
   1016 static inline HRESULT IMFMediaEngine_GetBuffered(IMFMediaEngine* This,IMFMediaTimeRange **buffered) {
   1017     return This->lpVtbl->GetBuffered(This,buffered);
   1018 }
   1019 static inline HRESULT IMFMediaEngine_Load(IMFMediaEngine* This) {
   1020     return This->lpVtbl->Load(This);
   1021 }
   1022 static inline HRESULT IMFMediaEngine_CanPlayType(IMFMediaEngine* This,BSTR type,MF_MEDIA_ENGINE_CANPLAY *answer) {
   1023     return This->lpVtbl->CanPlayType(This,type,answer);
   1024 }
   1025 static inline USHORT IMFMediaEngine_GetReadyState(IMFMediaEngine* This) {
   1026     return This->lpVtbl->GetReadyState(This);
   1027 }
   1028 static inline WINBOOL IMFMediaEngine_IsSeeking(IMFMediaEngine* This) {
   1029     return This->lpVtbl->IsSeeking(This);
   1030 }
   1031 static inline double IMFMediaEngine_GetCurrentTime(IMFMediaEngine* This) {
   1032     return This->lpVtbl->GetCurrentTime(This);
   1033 }
   1034 static inline HRESULT IMFMediaEngine_SetCurrentTime(IMFMediaEngine* This,double time) {
   1035     return This->lpVtbl->SetCurrentTime(This,time);
   1036 }
   1037 static inline double IMFMediaEngine_GetStartTime(IMFMediaEngine* This) {
   1038     return This->lpVtbl->GetStartTime(This);
   1039 }
   1040 static inline double IMFMediaEngine_GetDuration(IMFMediaEngine* This) {
   1041     return This->lpVtbl->GetDuration(This);
   1042 }
   1043 static inline WINBOOL IMFMediaEngine_IsPaused(IMFMediaEngine* This) {
   1044     return This->lpVtbl->IsPaused(This);
   1045 }
   1046 static inline double IMFMediaEngine_GetDefaultPlaybackRate(IMFMediaEngine* This) {
   1047     return This->lpVtbl->GetDefaultPlaybackRate(This);
   1048 }
   1049 static inline HRESULT IMFMediaEngine_SetDefaultPlaybackRate(IMFMediaEngine* This,double rate) {
   1050     return This->lpVtbl->SetDefaultPlaybackRate(This,rate);
   1051 }
   1052 static inline double IMFMediaEngine_GetPlaybackRate(IMFMediaEngine* This) {
   1053     return This->lpVtbl->GetPlaybackRate(This);
   1054 }
   1055 static inline HRESULT IMFMediaEngine_SetPlaybackRate(IMFMediaEngine* This,double rate) {
   1056     return This->lpVtbl->SetPlaybackRate(This,rate);
   1057 }
   1058 static inline HRESULT IMFMediaEngine_GetPlayed(IMFMediaEngine* This,IMFMediaTimeRange **played) {
   1059     return This->lpVtbl->GetPlayed(This,played);
   1060 }
   1061 static inline HRESULT IMFMediaEngine_GetSeekable(IMFMediaEngine* This,IMFMediaTimeRange **seekable) {
   1062     return This->lpVtbl->GetSeekable(This,seekable);
   1063 }
   1064 static inline WINBOOL IMFMediaEngine_IsEnded(IMFMediaEngine* This) {
   1065     return This->lpVtbl->IsEnded(This);
   1066 }
   1067 static inline WINBOOL IMFMediaEngine_GetAutoPlay(IMFMediaEngine* This) {
   1068     return This->lpVtbl->GetAutoPlay(This);
   1069 }
   1070 static inline HRESULT IMFMediaEngine_SetAutoPlay(IMFMediaEngine* This,WINBOOL autoplay) {
   1071     return This->lpVtbl->SetAutoPlay(This,autoplay);
   1072 }
   1073 static inline WINBOOL IMFMediaEngine_GetLoop(IMFMediaEngine* This) {
   1074     return This->lpVtbl->GetLoop(This);
   1075 }
   1076 static inline HRESULT IMFMediaEngine_SetLoop(IMFMediaEngine* This,WINBOOL loop) {
   1077     return This->lpVtbl->SetLoop(This,loop);
   1078 }
   1079 static inline HRESULT IMFMediaEngine_Play(IMFMediaEngine* This) {
   1080     return This->lpVtbl->Play(This);
   1081 }
   1082 static inline HRESULT IMFMediaEngine_Pause(IMFMediaEngine* This) {
   1083     return This->lpVtbl->Pause(This);
   1084 }
   1085 static inline WINBOOL IMFMediaEngine_GetMuted(IMFMediaEngine* This) {
   1086     return This->lpVtbl->GetMuted(This);
   1087 }
   1088 static inline HRESULT IMFMediaEngine_SetMuted(IMFMediaEngine* This,WINBOOL muted) {
   1089     return This->lpVtbl->SetMuted(This,muted);
   1090 }
   1091 static inline double IMFMediaEngine_GetVolume(IMFMediaEngine* This) {
   1092     return This->lpVtbl->GetVolume(This);
   1093 }
   1094 static inline HRESULT IMFMediaEngine_SetVolume(IMFMediaEngine* This,double volume) {
   1095     return This->lpVtbl->SetVolume(This,volume);
   1096 }
   1097 static inline WINBOOL IMFMediaEngine_HasVideo(IMFMediaEngine* This) {
   1098     return This->lpVtbl->HasVideo(This);
   1099 }
   1100 static inline WINBOOL IMFMediaEngine_HasAudio(IMFMediaEngine* This) {
   1101     return This->lpVtbl->HasAudio(This);
   1102 }
   1103 static inline HRESULT IMFMediaEngine_GetNativeVideoSize(IMFMediaEngine* This,DWORD *cx,DWORD *cy) {
   1104     return This->lpVtbl->GetNativeVideoSize(This,cx,cy);
   1105 }
   1106 static inline HRESULT IMFMediaEngine_GetVideoAspectRatio(IMFMediaEngine* This,DWORD *cx,DWORD *cy) {
   1107     return This->lpVtbl->GetVideoAspectRatio(This,cx,cy);
   1108 }
   1109 static inline HRESULT IMFMediaEngine_Shutdown(IMFMediaEngine* This) {
   1110     return This->lpVtbl->Shutdown(This);
   1111 }
   1112 static inline HRESULT IMFMediaEngine_TransferVideoFrame(IMFMediaEngine* This,IUnknown *surface,const MFVideoNormalizedRect *src,const RECT *dst,const MFARGB *color) {
   1113     return This->lpVtbl->TransferVideoFrame(This,surface,src,dst,color);
   1114 }
   1115 static inline HRESULT IMFMediaEngine_OnVideoStreamTick(IMFMediaEngine* This,LONGLONG *time) {
   1116     return This->lpVtbl->OnVideoStreamTick(This,time);
   1117 }
   1118 #endif
   1119 #endif
   1120 
   1121 #endif
   1122 
   1123 
   1124 #endif  /* __IMFMediaEngine_INTERFACE_DEFINED__ */
   1125 
   1126 typedef enum MF_MEDIA_ENGINE_STATISTIC {
   1127     MF_MEDIA_ENGINE_STATISTIC_FRAMES_RENDERED = 0,
   1128     MF_MEDIA_ENGINE_STATISTIC_FRAMES_DROPPED = 1,
   1129     MF_MEDIA_ENGINE_STATISTIC_BYTES_DOWNLOADED = 2,
   1130     MF_MEDIA_ENGINE_STATISTIC_BUFFER_PROGRESS = 3,
   1131     MF_MEDIA_ENGINE_STATISTIC_FRAMES_PER_SECOND = 4,
   1132     MF_MEDIA_ENGINE_STATISTIC_PLAYBACK_JITTER = 5,
   1133     MF_MEDIA_ENGINE_STATISTIC_FRAMES_CORRUPTED = 6,
   1134     MF_MEDIA_ENGINE_STATISTIC_TOTAL_FRAME_DELAY = 7
   1135 } MF_MEDIA_ENGINE_STATISTIC;
   1136 typedef enum MF_MEDIA_ENGINE_S3D_PACKING_MODE {
   1137     MF_MEDIA_ENGINE_S3D_PACKING_MODE_NONE = 0,
   1138     MF_MEDIA_ENGINE_S3D_PACKING_MODE_SIDE_BY_SIDE = 1,
   1139     MF_MEDIA_ENGINE_S3D_PACKING_MODE_TOP_BOTTOM = 2
   1140 } MF_MEDIA_ENGINE_S3D_PACKING_MODE;
   1141 typedef enum MF_MEDIA_ENGINE_SEEK_MODE {
   1142     MF_MEDIA_ENGINE_SEEK_MODE_NORMAL = 0,
   1143     MF_MEDIA_ENGINE_SEEK_MODE_APPROXIMATE = 1
   1144 } MF_MEDIA_ENGINE_SEEK_MODE;
   1145 /*****************************************************************************
   1146  * IMFMediaEngineEx interface
   1147  */
   1148 #ifndef __IMFMediaEngineEx_INTERFACE_DEFINED__
   1149 #define __IMFMediaEngineEx_INTERFACE_DEFINED__
   1150 
   1151 DEFINE_GUID(IID_IMFMediaEngineEx, 0x83015ead, 0xb1e6, 0x40d0, 0xa9,0x8a, 0x37,0x14,0x5f,0xfe,0x1a,0xd1);
   1152 #if defined(__cplusplus) && !defined(CINTERFACE)
   1153 MIDL_INTERFACE("83015ead-b1e6-40d0-a98a-37145ffe1ad1")
   1154 IMFMediaEngineEx : public IMFMediaEngine
   1155 {
   1156     virtual HRESULT STDMETHODCALLTYPE SetSourceFromByteStream(
   1157         IMFByteStream *bytestream,
   1158         BSTR url) = 0;
   1159 
   1160     virtual HRESULT STDMETHODCALLTYPE GetStatistics(
   1161         MF_MEDIA_ENGINE_STATISTIC stat_id,
   1162         PROPVARIANT *stat) = 0;
   1163 
   1164     virtual HRESULT STDMETHODCALLTYPE UpdateVideoStream(
   1165         const MFVideoNormalizedRect *src,
   1166         const RECT *dst,
   1167         const MFARGB *border_color) = 0;
   1168 
   1169     virtual double STDMETHODCALLTYPE GetBalance(
   1170         ) = 0;
   1171 
   1172     virtual HRESULT STDMETHODCALLTYPE SetBalance(
   1173         double balance) = 0;
   1174 
   1175     virtual WINBOOL STDMETHODCALLTYPE IsPlaybackRateSupported(
   1176         double rate) = 0;
   1177 
   1178     virtual HRESULT STDMETHODCALLTYPE FrameStep(
   1179         WINBOOL forward) = 0;
   1180 
   1181     virtual HRESULT STDMETHODCALLTYPE GetResourceCharacteristics(
   1182         DWORD *flags) = 0;
   1183 
   1184     virtual HRESULT STDMETHODCALLTYPE GetPresentationAttribute(
   1185         REFGUID attribute,
   1186         PROPVARIANT *value) = 0;
   1187 
   1188     virtual HRESULT STDMETHODCALLTYPE GetNumberOfStreams(
   1189         DWORD *stream_count) = 0;
   1190 
   1191     virtual HRESULT STDMETHODCALLTYPE GetStreamAttribute(
   1192         DWORD stream_index,
   1193         REFGUID attribute,
   1194         PROPVARIANT *value) = 0;
   1195 
   1196     virtual HRESULT STDMETHODCALLTYPE GetStreamSelection(
   1197         DWORD stream_index,
   1198         WINBOOL *enabled) = 0;
   1199 
   1200     virtual HRESULT STDMETHODCALLTYPE SetStreamSelection(
   1201         DWORD stream_index,
   1202         WINBOOL enabled) = 0;
   1203 
   1204     virtual HRESULT STDMETHODCALLTYPE ApplyStreamSelections(
   1205         ) = 0;
   1206 
   1207     virtual HRESULT STDMETHODCALLTYPE IsProtected(
   1208         WINBOOL *is_protected) = 0;
   1209 
   1210     virtual HRESULT STDMETHODCALLTYPE InsertVideoEffect(
   1211         IUnknown *effect,
   1212         WINBOOL is_optional) = 0;
   1213 
   1214     virtual HRESULT STDMETHODCALLTYPE InsertAudioEffect(
   1215         IUnknown *effect,
   1216         WINBOOL is_optional) = 0;
   1217 
   1218     virtual HRESULT STDMETHODCALLTYPE RemoveAllEffects(
   1219         ) = 0;
   1220 
   1221     virtual HRESULT STDMETHODCALLTYPE SetTimelineMarkerTimer(
   1222         double timeout) = 0;
   1223 
   1224     virtual HRESULT STDMETHODCALLTYPE GetTimelineMarkerTimer(
   1225         double *timeout) = 0;
   1226 
   1227     virtual HRESULT STDMETHODCALLTYPE CancelTimelineMarkerTimer(
   1228         ) = 0;
   1229 
   1230     virtual WINBOOL STDMETHODCALLTYPE IsStereo3D(
   1231         ) = 0;
   1232 
   1233     virtual HRESULT STDMETHODCALLTYPE GetStereo3DFramePackingMode(
   1234         MF_MEDIA_ENGINE_S3D_PACKING_MODE *mode) = 0;
   1235 
   1236     virtual HRESULT STDMETHODCALLTYPE SetStereo3DFramePackingMode(
   1237         MF_MEDIA_ENGINE_S3D_PACKING_MODE mode) = 0;
   1238 
   1239     virtual HRESULT STDMETHODCALLTYPE GetStereo3DRenderMode(
   1240         MF3DVideoOutputType *output_type) = 0;
   1241 
   1242     virtual HRESULT STDMETHODCALLTYPE SetStereo3DRenderMode(
   1243         MF3DVideoOutputType output_type) = 0;
   1244 
   1245     virtual HRESULT STDMETHODCALLTYPE EnableWindowlessSwapchainMode(
   1246         WINBOOL enable) = 0;
   1247 
   1248     virtual HRESULT STDMETHODCALLTYPE GetVideoSwapchainHandle(
   1249         HANDLE *swapchain) = 0;
   1250 
   1251     virtual HRESULT STDMETHODCALLTYPE EnableHorizontalMirrorMode(
   1252         WINBOOL enable) = 0;
   1253 
   1254     virtual HRESULT STDMETHODCALLTYPE GetAudioStreamCategory(
   1255         UINT32 *category) = 0;
   1256 
   1257     virtual HRESULT STDMETHODCALLTYPE SetAudioStreamCategory(
   1258         UINT32 category) = 0;
   1259 
   1260     virtual HRESULT STDMETHODCALLTYPE GetAudioEndpointRole(
   1261         UINT32 *role) = 0;
   1262 
   1263     virtual HRESULT STDMETHODCALLTYPE SetAudioEndpointRole(
   1264         UINT32 role) = 0;
   1265 
   1266     virtual HRESULT STDMETHODCALLTYPE GetRealTimeMode(
   1267         WINBOOL *enabled) = 0;
   1268 
   1269     virtual HRESULT STDMETHODCALLTYPE SetRealTimeMode(
   1270         WINBOOL enable) = 0;
   1271 
   1272     virtual HRESULT STDMETHODCALLTYPE SetCurrentTimeEx(
   1273         double seektime,
   1274         MF_MEDIA_ENGINE_SEEK_MODE mode) = 0;
   1275 
   1276     virtual HRESULT STDMETHODCALLTYPE EnableTimeUpdateTimer(
   1277         WINBOOL enable) = 0;
   1278 
   1279 };
   1280 #ifdef __CRT_UUID_DECL
   1281 __CRT_UUID_DECL(IMFMediaEngineEx, 0x83015ead, 0xb1e6, 0x40d0, 0xa9,0x8a, 0x37,0x14,0x5f,0xfe,0x1a,0xd1)
   1282 #endif
   1283 #else
   1284 typedef struct IMFMediaEngineExVtbl {
   1285     BEGIN_INTERFACE
   1286 
   1287     /*** IUnknown methods ***/
   1288     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
   1289         IMFMediaEngineEx *This,
   1290         REFIID riid,
   1291         void **ppvObject);
   1292 
   1293     ULONG (STDMETHODCALLTYPE *AddRef)(
   1294         IMFMediaEngineEx *This);
   1295 
   1296     ULONG (STDMETHODCALLTYPE *Release)(
   1297         IMFMediaEngineEx *This);
   1298 
   1299     /*** IMFMediaEngine methods ***/
   1300     HRESULT (STDMETHODCALLTYPE *GetError)(
   1301         IMFMediaEngineEx *This,
   1302         IMFMediaError **error);
   1303 
   1304     HRESULT (STDMETHODCALLTYPE *SetErrorCode)(
   1305         IMFMediaEngineEx *This,
   1306         MF_MEDIA_ENGINE_ERR error);
   1307 
   1308     HRESULT (STDMETHODCALLTYPE *SetSourceElements)(
   1309         IMFMediaEngineEx *This,
   1310         IMFMediaEngineSrcElements *elements);
   1311 
   1312     HRESULT (STDMETHODCALLTYPE *SetSource)(
   1313         IMFMediaEngineEx *This,
   1314         BSTR url);
   1315 
   1316     HRESULT (STDMETHODCALLTYPE *GetCurrentSource)(
   1317         IMFMediaEngineEx *This,
   1318         BSTR *url);
   1319 
   1320     USHORT (STDMETHODCALLTYPE *GetNetworkState)(
   1321         IMFMediaEngineEx *This);
   1322 
   1323     MF_MEDIA_ENGINE_PRELOAD (STDMETHODCALLTYPE *GetPreload)(
   1324         IMFMediaEngineEx *This);
   1325 
   1326     HRESULT (STDMETHODCALLTYPE *SetPreload)(
   1327         IMFMediaEngineEx *This,
   1328         MF_MEDIA_ENGINE_PRELOAD preload);
   1329 
   1330     HRESULT (STDMETHODCALLTYPE *GetBuffered)(
   1331         IMFMediaEngineEx *This,
   1332         IMFMediaTimeRange **buffered);
   1333 
   1334     HRESULT (STDMETHODCALLTYPE *Load)(
   1335         IMFMediaEngineEx *This);
   1336 
   1337     HRESULT (STDMETHODCALLTYPE *CanPlayType)(
   1338         IMFMediaEngineEx *This,
   1339         BSTR type,
   1340         MF_MEDIA_ENGINE_CANPLAY *answer);
   1341 
   1342     USHORT (STDMETHODCALLTYPE *GetReadyState)(
   1343         IMFMediaEngineEx *This);
   1344 
   1345     WINBOOL (STDMETHODCALLTYPE *IsSeeking)(
   1346         IMFMediaEngineEx *This);
   1347 
   1348     double (STDMETHODCALLTYPE *GetCurrentTime)(
   1349         IMFMediaEngineEx *This);
   1350 
   1351     HRESULT (STDMETHODCALLTYPE *SetCurrentTime)(
   1352         IMFMediaEngineEx *This,
   1353         double time);
   1354 
   1355     double (STDMETHODCALLTYPE *GetStartTime)(
   1356         IMFMediaEngineEx *This);
   1357 
   1358     double (STDMETHODCALLTYPE *GetDuration)(
   1359         IMFMediaEngineEx *This);
   1360 
   1361     WINBOOL (STDMETHODCALLTYPE *IsPaused)(
   1362         IMFMediaEngineEx *This);
   1363 
   1364     double (STDMETHODCALLTYPE *GetDefaultPlaybackRate)(
   1365         IMFMediaEngineEx *This);
   1366 
   1367     HRESULT (STDMETHODCALLTYPE *SetDefaultPlaybackRate)(
   1368         IMFMediaEngineEx *This,
   1369         double rate);
   1370 
   1371     double (STDMETHODCALLTYPE *GetPlaybackRate)(
   1372         IMFMediaEngineEx *This);
   1373 
   1374     HRESULT (STDMETHODCALLTYPE *SetPlaybackRate)(
   1375         IMFMediaEngineEx *This,
   1376         double rate);
   1377 
   1378     HRESULT (STDMETHODCALLTYPE *GetPlayed)(
   1379         IMFMediaEngineEx *This,
   1380         IMFMediaTimeRange **played);
   1381 
   1382     HRESULT (STDMETHODCALLTYPE *GetSeekable)(
   1383         IMFMediaEngineEx *This,
   1384         IMFMediaTimeRange **seekable);
   1385 
   1386     WINBOOL (STDMETHODCALLTYPE *IsEnded)(
   1387         IMFMediaEngineEx *This);
   1388 
   1389     WINBOOL (STDMETHODCALLTYPE *GetAutoPlay)(
   1390         IMFMediaEngineEx *This);
   1391 
   1392     HRESULT (STDMETHODCALLTYPE *SetAutoPlay)(
   1393         IMFMediaEngineEx *This,
   1394         WINBOOL autoplay);
   1395 
   1396     WINBOOL (STDMETHODCALLTYPE *GetLoop)(
   1397         IMFMediaEngineEx *This);
   1398 
   1399     HRESULT (STDMETHODCALLTYPE *SetLoop)(
   1400         IMFMediaEngineEx *This,
   1401         WINBOOL loop);
   1402 
   1403     HRESULT (STDMETHODCALLTYPE *Play)(
   1404         IMFMediaEngineEx *This);
   1405 
   1406     HRESULT (STDMETHODCALLTYPE *Pause)(
   1407         IMFMediaEngineEx *This);
   1408 
   1409     WINBOOL (STDMETHODCALLTYPE *GetMuted)(
   1410         IMFMediaEngineEx *This);
   1411 
   1412     HRESULT (STDMETHODCALLTYPE *SetMuted)(
   1413         IMFMediaEngineEx *This,
   1414         WINBOOL muted);
   1415 
   1416     double (STDMETHODCALLTYPE *GetVolume)(
   1417         IMFMediaEngineEx *This);
   1418 
   1419     HRESULT (STDMETHODCALLTYPE *SetVolume)(
   1420         IMFMediaEngineEx *This,
   1421         double volume);
   1422 
   1423     WINBOOL (STDMETHODCALLTYPE *HasVideo)(
   1424         IMFMediaEngineEx *This);
   1425 
   1426     WINBOOL (STDMETHODCALLTYPE *HasAudio)(
   1427         IMFMediaEngineEx *This);
   1428 
   1429     HRESULT (STDMETHODCALLTYPE *GetNativeVideoSize)(
   1430         IMFMediaEngineEx *This,
   1431         DWORD *cx,
   1432         DWORD *cy);
   1433 
   1434     HRESULT (STDMETHODCALLTYPE *GetVideoAspectRatio)(
   1435         IMFMediaEngineEx *This,
   1436         DWORD *cx,
   1437         DWORD *cy);
   1438 
   1439     HRESULT (STDMETHODCALLTYPE *Shutdown)(
   1440         IMFMediaEngineEx *This);
   1441 
   1442     HRESULT (STDMETHODCALLTYPE *TransferVideoFrame)(
   1443         IMFMediaEngineEx *This,
   1444         IUnknown *surface,
   1445         const MFVideoNormalizedRect *src,
   1446         const RECT *dst,
   1447         const MFARGB *color);
   1448 
   1449     HRESULT (STDMETHODCALLTYPE *OnVideoStreamTick)(
   1450         IMFMediaEngineEx *This,
   1451         LONGLONG *time);
   1452 
   1453     /*** IMFMediaEngineEx methods ***/
   1454     HRESULT (STDMETHODCALLTYPE *SetSourceFromByteStream)(
   1455         IMFMediaEngineEx *This,
   1456         IMFByteStream *bytestream,
   1457         BSTR url);
   1458 
   1459     HRESULT (STDMETHODCALLTYPE *GetStatistics)(
   1460         IMFMediaEngineEx *This,
   1461         MF_MEDIA_ENGINE_STATISTIC stat_id,
   1462         PROPVARIANT *stat);
   1463 
   1464     HRESULT (STDMETHODCALLTYPE *UpdateVideoStream)(
   1465         IMFMediaEngineEx *This,
   1466         const MFVideoNormalizedRect *src,
   1467         const RECT *dst,
   1468         const MFARGB *border_color);
   1469 
   1470     double (STDMETHODCALLTYPE *GetBalance)(
   1471         IMFMediaEngineEx *This);
   1472 
   1473     HRESULT (STDMETHODCALLTYPE *SetBalance)(
   1474         IMFMediaEngineEx *This,
   1475         double balance);
   1476 
   1477     WINBOOL (STDMETHODCALLTYPE *IsPlaybackRateSupported)(
   1478         IMFMediaEngineEx *This,
   1479         double rate);
   1480 
   1481     HRESULT (STDMETHODCALLTYPE *FrameStep)(
   1482         IMFMediaEngineEx *This,
   1483         WINBOOL forward);
   1484 
   1485     HRESULT (STDMETHODCALLTYPE *GetResourceCharacteristics)(
   1486         IMFMediaEngineEx *This,
   1487         DWORD *flags);
   1488 
   1489     HRESULT (STDMETHODCALLTYPE *GetPresentationAttribute)(
   1490         IMFMediaEngineEx *This,
   1491         REFGUID attribute,
   1492         PROPVARIANT *value);
   1493 
   1494     HRESULT (STDMETHODCALLTYPE *GetNumberOfStreams)(
   1495         IMFMediaEngineEx *This,
   1496         DWORD *stream_count);
   1497 
   1498     HRESULT (STDMETHODCALLTYPE *GetStreamAttribute)(
   1499         IMFMediaEngineEx *This,
   1500         DWORD stream_index,
   1501         REFGUID attribute,
   1502         PROPVARIANT *value);
   1503 
   1504     HRESULT (STDMETHODCALLTYPE *GetStreamSelection)(
   1505         IMFMediaEngineEx *This,
   1506         DWORD stream_index,
   1507         WINBOOL *enabled);
   1508 
   1509     HRESULT (STDMETHODCALLTYPE *SetStreamSelection)(
   1510         IMFMediaEngineEx *This,
   1511         DWORD stream_index,
   1512         WINBOOL enabled);
   1513 
   1514     HRESULT (STDMETHODCALLTYPE *ApplyStreamSelections)(
   1515         IMFMediaEngineEx *This);
   1516 
   1517     HRESULT (STDMETHODCALLTYPE *IsProtected)(
   1518         IMFMediaEngineEx *This,
   1519         WINBOOL *is_protected);
   1520 
   1521     HRESULT (STDMETHODCALLTYPE *InsertVideoEffect)(
   1522         IMFMediaEngineEx *This,
   1523         IUnknown *effect,
   1524         WINBOOL is_optional);
   1525 
   1526     HRESULT (STDMETHODCALLTYPE *InsertAudioEffect)(
   1527         IMFMediaEngineEx *This,
   1528         IUnknown *effect,
   1529         WINBOOL is_optional);
   1530 
   1531     HRESULT (STDMETHODCALLTYPE *RemoveAllEffects)(
   1532         IMFMediaEngineEx *This);
   1533 
   1534     HRESULT (STDMETHODCALLTYPE *SetTimelineMarkerTimer)(
   1535         IMFMediaEngineEx *This,
   1536         double timeout);
   1537 
   1538     HRESULT (STDMETHODCALLTYPE *GetTimelineMarkerTimer)(
   1539         IMFMediaEngineEx *This,
   1540         double *timeout);
   1541 
   1542     HRESULT (STDMETHODCALLTYPE *CancelTimelineMarkerTimer)(
   1543         IMFMediaEngineEx *This);
   1544 
   1545     WINBOOL (STDMETHODCALLTYPE *IsStereo3D)(
   1546         IMFMediaEngineEx *This);
   1547 
   1548     HRESULT (STDMETHODCALLTYPE *GetStereo3DFramePackingMode)(
   1549         IMFMediaEngineEx *This,
   1550         MF_MEDIA_ENGINE_S3D_PACKING_MODE *mode);
   1551 
   1552     HRESULT (STDMETHODCALLTYPE *SetStereo3DFramePackingMode)(
   1553         IMFMediaEngineEx *This,
   1554         MF_MEDIA_ENGINE_S3D_PACKING_MODE mode);
   1555 
   1556     HRESULT (STDMETHODCALLTYPE *GetStereo3DRenderMode)(
   1557         IMFMediaEngineEx *This,
   1558         MF3DVideoOutputType *output_type);
   1559 
   1560     HRESULT (STDMETHODCALLTYPE *SetStereo3DRenderMode)(
   1561         IMFMediaEngineEx *This,
   1562         MF3DVideoOutputType output_type);
   1563 
   1564     HRESULT (STDMETHODCALLTYPE *EnableWindowlessSwapchainMode)(
   1565         IMFMediaEngineEx *This,
   1566         WINBOOL enable);
   1567 
   1568     HRESULT (STDMETHODCALLTYPE *GetVideoSwapchainHandle)(
   1569         IMFMediaEngineEx *This,
   1570         HANDLE *swapchain);
   1571 
   1572     HRESULT (STDMETHODCALLTYPE *EnableHorizontalMirrorMode)(
   1573         IMFMediaEngineEx *This,
   1574         WINBOOL enable);
   1575 
   1576     HRESULT (STDMETHODCALLTYPE *GetAudioStreamCategory)(
   1577         IMFMediaEngineEx *This,
   1578         UINT32 *category);
   1579 
   1580     HRESULT (STDMETHODCALLTYPE *SetAudioStreamCategory)(
   1581         IMFMediaEngineEx *This,
   1582         UINT32 category);
   1583 
   1584     HRESULT (STDMETHODCALLTYPE *GetAudioEndpointRole)(
   1585         IMFMediaEngineEx *This,
   1586         UINT32 *role);
   1587 
   1588     HRESULT (STDMETHODCALLTYPE *SetAudioEndpointRole)(
   1589         IMFMediaEngineEx *This,
   1590         UINT32 role);
   1591 
   1592     HRESULT (STDMETHODCALLTYPE *GetRealTimeMode)(
   1593         IMFMediaEngineEx *This,
   1594         WINBOOL *enabled);
   1595 
   1596     HRESULT (STDMETHODCALLTYPE *SetRealTimeMode)(
   1597         IMFMediaEngineEx *This,
   1598         WINBOOL enable);
   1599 
   1600     HRESULT (STDMETHODCALLTYPE *SetCurrentTimeEx)(
   1601         IMFMediaEngineEx *This,
   1602         double seektime,
   1603         MF_MEDIA_ENGINE_SEEK_MODE mode);
   1604 
   1605     HRESULT (STDMETHODCALLTYPE *EnableTimeUpdateTimer)(
   1606         IMFMediaEngineEx *This,
   1607         WINBOOL enable);
   1608 
   1609     END_INTERFACE
   1610 } IMFMediaEngineExVtbl;
   1611 
   1612 interface IMFMediaEngineEx {
   1613     CONST_VTBL IMFMediaEngineExVtbl* lpVtbl;
   1614 };
   1615 
   1616 #ifdef COBJMACROS
   1617 #ifndef WIDL_C_INLINE_WRAPPERS
   1618 /*** IUnknown methods ***/
   1619 #define IMFMediaEngineEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
   1620 #define IMFMediaEngineEx_AddRef(This) (This)->lpVtbl->AddRef(This)
   1621 #define IMFMediaEngineEx_Release(This) (This)->lpVtbl->Release(This)
   1622 /*** IMFMediaEngine methods ***/
   1623 #define IMFMediaEngineEx_GetError(This,error) (This)->lpVtbl->GetError(This,error)
   1624 #define IMFMediaEngineEx_SetErrorCode(This,error) (This)->lpVtbl->SetErrorCode(This,error)
   1625 #define IMFMediaEngineEx_SetSourceElements(This,elements) (This)->lpVtbl->SetSourceElements(This,elements)
   1626 #define IMFMediaEngineEx_SetSource(This,url) (This)->lpVtbl->SetSource(This,url)
   1627 #define IMFMediaEngineEx_GetCurrentSource(This,url) (This)->lpVtbl->GetCurrentSource(This,url)
   1628 #define IMFMediaEngineEx_GetNetworkState(This) (This)->lpVtbl->GetNetworkState(This)
   1629 #define IMFMediaEngineEx_GetPreload(This) (This)->lpVtbl->GetPreload(This)
   1630 #define IMFMediaEngineEx_SetPreload(This,preload) (This)->lpVtbl->SetPreload(This,preload)
   1631 #define IMFMediaEngineEx_GetBuffered(This,buffered) (This)->lpVtbl->GetBuffered(This,buffered)
   1632 #define IMFMediaEngineEx_Load(This) (This)->lpVtbl->Load(This)
   1633 #define IMFMediaEngineEx_CanPlayType(This,type,answer) (This)->lpVtbl->CanPlayType(This,type,answer)
   1634 #define IMFMediaEngineEx_GetReadyState(This) (This)->lpVtbl->GetReadyState(This)
   1635 #define IMFMediaEngineEx_IsSeeking(This) (This)->lpVtbl->IsSeeking(This)
   1636 #define IMFMediaEngineEx_GetCurrentTime(This) (This)->lpVtbl->GetCurrentTime(This)
   1637 #define IMFMediaEngineEx_SetCurrentTime(This,time) (This)->lpVtbl->SetCurrentTime(This,time)
   1638 #define IMFMediaEngineEx_GetStartTime(This) (This)->lpVtbl->GetStartTime(This)
   1639 #define IMFMediaEngineEx_GetDuration(This) (This)->lpVtbl->GetDuration(This)
   1640 #define IMFMediaEngineEx_IsPaused(This) (This)->lpVtbl->IsPaused(This)
   1641 #define IMFMediaEngineEx_GetDefaultPlaybackRate(This) (This)->lpVtbl->GetDefaultPlaybackRate(This)
   1642 #define IMFMediaEngineEx_SetDefaultPlaybackRate(This,rate) (This)->lpVtbl->SetDefaultPlaybackRate(This,rate)
   1643 #define IMFMediaEngineEx_GetPlaybackRate(This) (This)->lpVtbl->GetPlaybackRate(This)
   1644 #define IMFMediaEngineEx_SetPlaybackRate(This,rate) (This)->lpVtbl->SetPlaybackRate(This,rate)
   1645 #define IMFMediaEngineEx_GetPlayed(This,played) (This)->lpVtbl->GetPlayed(This,played)
   1646 #define IMFMediaEngineEx_GetSeekable(This,seekable) (This)->lpVtbl->GetSeekable(This,seekable)
   1647 #define IMFMediaEngineEx_IsEnded(This) (This)->lpVtbl->IsEnded(This)
   1648 #define IMFMediaEngineEx_GetAutoPlay(This) (This)->lpVtbl->GetAutoPlay(This)
   1649 #define IMFMediaEngineEx_SetAutoPlay(This,autoplay) (This)->lpVtbl->SetAutoPlay(This,autoplay)
   1650 #define IMFMediaEngineEx_GetLoop(This) (This)->lpVtbl->GetLoop(This)
   1651 #define IMFMediaEngineEx_SetLoop(This,loop) (This)->lpVtbl->SetLoop(This,loop)
   1652 #define IMFMediaEngineEx_Play(This) (This)->lpVtbl->Play(This)
   1653 #define IMFMediaEngineEx_Pause(This) (This)->lpVtbl->Pause(This)
   1654 #define IMFMediaEngineEx_GetMuted(This) (This)->lpVtbl->GetMuted(This)
   1655 #define IMFMediaEngineEx_SetMuted(This,muted) (This)->lpVtbl->SetMuted(This,muted)
   1656 #define IMFMediaEngineEx_GetVolume(This) (This)->lpVtbl->GetVolume(This)
   1657 #define IMFMediaEngineEx_SetVolume(This,volume) (This)->lpVtbl->SetVolume(This,volume)
   1658 #define IMFMediaEngineEx_HasVideo(This) (This)->lpVtbl->HasVideo(This)
   1659 #define IMFMediaEngineEx_HasAudio(This) (This)->lpVtbl->HasAudio(This)
   1660 #define IMFMediaEngineEx_GetNativeVideoSize(This,cx,cy) (This)->lpVtbl->GetNativeVideoSize(This,cx,cy)
   1661 #define IMFMediaEngineEx_GetVideoAspectRatio(This,cx,cy) (This)->lpVtbl->GetVideoAspectRatio(This,cx,cy)
   1662 #define IMFMediaEngineEx_Shutdown(This) (This)->lpVtbl->Shutdown(This)
   1663 #define IMFMediaEngineEx_TransferVideoFrame(This,surface,src,dst,color) (This)->lpVtbl->TransferVideoFrame(This,surface,src,dst,color)
   1664 #define IMFMediaEngineEx_OnVideoStreamTick(This,time) (This)->lpVtbl->OnVideoStreamTick(This,time)
   1665 /*** IMFMediaEngineEx methods ***/
   1666 #define IMFMediaEngineEx_SetSourceFromByteStream(This,bytestream,url) (This)->lpVtbl->SetSourceFromByteStream(This,bytestream,url)
   1667 #define IMFMediaEngineEx_GetStatistics(This,stat_id,stat) (This)->lpVtbl->GetStatistics(This,stat_id,stat)
   1668 #define IMFMediaEngineEx_UpdateVideoStream(This,src,dst,border_color) (This)->lpVtbl->UpdateVideoStream(This,src,dst,border_color)
   1669 #define IMFMediaEngineEx_GetBalance(This) (This)->lpVtbl->GetBalance(This)
   1670 #define IMFMediaEngineEx_SetBalance(This,balance) (This)->lpVtbl->SetBalance(This,balance)
   1671 #define IMFMediaEngineEx_IsPlaybackRateSupported(This,rate) (This)->lpVtbl->IsPlaybackRateSupported(This,rate)
   1672 #define IMFMediaEngineEx_FrameStep(This,forward) (This)->lpVtbl->FrameStep(This,forward)
   1673 #define IMFMediaEngineEx_GetResourceCharacteristics(This,flags) (This)->lpVtbl->GetResourceCharacteristics(This,flags)
   1674 #define IMFMediaEngineEx_GetPresentationAttribute(This,attribute,value) (This)->lpVtbl->GetPresentationAttribute(This,attribute,value)
   1675 #define IMFMediaEngineEx_GetNumberOfStreams(This,stream_count) (This)->lpVtbl->GetNumberOfStreams(This,stream_count)
   1676 #define IMFMediaEngineEx_GetStreamAttribute(This,stream_index,attribute,value) (This)->lpVtbl->GetStreamAttribute(This,stream_index,attribute,value)
   1677 #define IMFMediaEngineEx_GetStreamSelection(This,stream_index,enabled) (This)->lpVtbl->GetStreamSelection(This,stream_index,enabled)
   1678 #define IMFMediaEngineEx_SetStreamSelection(This,stream_index,enabled) (This)->lpVtbl->SetStreamSelection(This,stream_index,enabled)
   1679 #define IMFMediaEngineEx_ApplyStreamSelections(This) (This)->lpVtbl->ApplyStreamSelections(This)
   1680 #define IMFMediaEngineEx_IsProtected(This,is_protected) (This)->lpVtbl->IsProtected(This,is_protected)
   1681 #define IMFMediaEngineEx_InsertVideoEffect(This,effect,is_optional) (This)->lpVtbl->InsertVideoEffect(This,effect,is_optional)
   1682 #define IMFMediaEngineEx_InsertAudioEffect(This,effect,is_optional) (This)->lpVtbl->InsertAudioEffect(This,effect,is_optional)
   1683 #define IMFMediaEngineEx_RemoveAllEffects(This) (This)->lpVtbl->RemoveAllEffects(This)
   1684 #define IMFMediaEngineEx_SetTimelineMarkerTimer(This,timeout) (This)->lpVtbl->SetTimelineMarkerTimer(This,timeout)
   1685 #define IMFMediaEngineEx_GetTimelineMarkerTimer(This,timeout) (This)->lpVtbl->GetTimelineMarkerTimer(This,timeout)
   1686 #define IMFMediaEngineEx_CancelTimelineMarkerTimer(This) (This)->lpVtbl->CancelTimelineMarkerTimer(This)
   1687 #define IMFMediaEngineEx_IsStereo3D(This) (This)->lpVtbl->IsStereo3D(This)
   1688 #define IMFMediaEngineEx_GetStereo3DFramePackingMode(This,mode) (This)->lpVtbl->GetStereo3DFramePackingMode(This,mode)
   1689 #define IMFMediaEngineEx_SetStereo3DFramePackingMode(This,mode) (This)->lpVtbl->SetStereo3DFramePackingMode(This,mode)
   1690 #define IMFMediaEngineEx_GetStereo3DRenderMode(This,output_type) (This)->lpVtbl->GetStereo3DRenderMode(This,output_type)
   1691 #define IMFMediaEngineEx_SetStereo3DRenderMode(This,output_type) (This)->lpVtbl->SetStereo3DRenderMode(This,output_type)
   1692 #define IMFMediaEngineEx_EnableWindowlessSwapchainMode(This,enable) (This)->lpVtbl->EnableWindowlessSwapchainMode(This,enable)
   1693 #define IMFMediaEngineEx_GetVideoSwapchainHandle(This,swapchain) (This)->lpVtbl->GetVideoSwapchainHandle(This,swapchain)
   1694 #define IMFMediaEngineEx_EnableHorizontalMirrorMode(This,enable) (This)->lpVtbl->EnableHorizontalMirrorMode(This,enable)
   1695 #define IMFMediaEngineEx_GetAudioStreamCategory(This,category) (This)->lpVtbl->GetAudioStreamCategory(This,category)
   1696 #define IMFMediaEngineEx_SetAudioStreamCategory(This,category) (This)->lpVtbl->SetAudioStreamCategory(This,category)
   1697 #define IMFMediaEngineEx_GetAudioEndpointRole(This,role) (This)->lpVtbl->GetAudioEndpointRole(This,role)
   1698 #define IMFMediaEngineEx_SetAudioEndpointRole(This,role) (This)->lpVtbl->SetAudioEndpointRole(This,role)
   1699 #define IMFMediaEngineEx_GetRealTimeMode(This,enabled) (This)->lpVtbl->GetRealTimeMode(This,enabled)
   1700 #define IMFMediaEngineEx_SetRealTimeMode(This,enable) (This)->lpVtbl->SetRealTimeMode(This,enable)
   1701 #define IMFMediaEngineEx_SetCurrentTimeEx(This,seektime,mode) (This)->lpVtbl->SetCurrentTimeEx(This,seektime,mode)
   1702 #define IMFMediaEngineEx_EnableTimeUpdateTimer(This,enable) (This)->lpVtbl->EnableTimeUpdateTimer(This,enable)
   1703 #else
   1704 /*** IUnknown methods ***/
   1705 static inline HRESULT IMFMediaEngineEx_QueryInterface(IMFMediaEngineEx* This,REFIID riid,void **ppvObject) {
   1706     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
   1707 }
   1708 static inline ULONG IMFMediaEngineEx_AddRef(IMFMediaEngineEx* This) {
   1709     return This->lpVtbl->AddRef(This);
   1710 }
   1711 static inline ULONG IMFMediaEngineEx_Release(IMFMediaEngineEx* This) {
   1712     return This->lpVtbl->Release(This);
   1713 }
   1714 /*** IMFMediaEngine methods ***/
   1715 static inline HRESULT IMFMediaEngineEx_GetError(IMFMediaEngineEx* This,IMFMediaError **error) {
   1716     return This->lpVtbl->GetError(This,error);
   1717 }
   1718 static inline HRESULT IMFMediaEngineEx_SetErrorCode(IMFMediaEngineEx* This,MF_MEDIA_ENGINE_ERR error) {
   1719     return This->lpVtbl->SetErrorCode(This,error);
   1720 }
   1721 static inline HRESULT IMFMediaEngineEx_SetSourceElements(IMFMediaEngineEx* This,IMFMediaEngineSrcElements *elements) {
   1722     return This->lpVtbl->SetSourceElements(This,elements);
   1723 }
   1724 static inline HRESULT IMFMediaEngineEx_SetSource(IMFMediaEngineEx* This,BSTR url) {
   1725     return This->lpVtbl->SetSource(This,url);
   1726 }
   1727 static inline HRESULT IMFMediaEngineEx_GetCurrentSource(IMFMediaEngineEx* This,BSTR *url) {
   1728     return This->lpVtbl->GetCurrentSource(This,url);
   1729 }
   1730 static inline USHORT IMFMediaEngineEx_GetNetworkState(IMFMediaEngineEx* This) {
   1731     return This->lpVtbl->GetNetworkState(This);
   1732 }
   1733 static inline MF_MEDIA_ENGINE_PRELOAD IMFMediaEngineEx_GetPreload(IMFMediaEngineEx* This) {
   1734     return This->lpVtbl->GetPreload(This);
   1735 }
   1736 static inline HRESULT IMFMediaEngineEx_SetPreload(IMFMediaEngineEx* This,MF_MEDIA_ENGINE_PRELOAD preload) {
   1737     return This->lpVtbl->SetPreload(This,preload);
   1738 }
   1739 static inline HRESULT IMFMediaEngineEx_GetBuffered(IMFMediaEngineEx* This,IMFMediaTimeRange **buffered) {
   1740     return This->lpVtbl->GetBuffered(This,buffered);
   1741 }
   1742 static inline HRESULT IMFMediaEngineEx_Load(IMFMediaEngineEx* This) {
   1743     return This->lpVtbl->Load(This);
   1744 }
   1745 static inline HRESULT IMFMediaEngineEx_CanPlayType(IMFMediaEngineEx* This,BSTR type,MF_MEDIA_ENGINE_CANPLAY *answer) {
   1746     return This->lpVtbl->CanPlayType(This,type,answer);
   1747 }
   1748 static inline USHORT IMFMediaEngineEx_GetReadyState(IMFMediaEngineEx* This) {
   1749     return This->lpVtbl->GetReadyState(This);
   1750 }
   1751 static inline WINBOOL IMFMediaEngineEx_IsSeeking(IMFMediaEngineEx* This) {
   1752     return This->lpVtbl->IsSeeking(This);
   1753 }
   1754 static inline double IMFMediaEngineEx_GetCurrentTime(IMFMediaEngineEx* This) {
   1755     return This->lpVtbl->GetCurrentTime(This);
   1756 }
   1757 static inline HRESULT IMFMediaEngineEx_SetCurrentTime(IMFMediaEngineEx* This,double time) {
   1758     return This->lpVtbl->SetCurrentTime(This,time);
   1759 }
   1760 static inline double IMFMediaEngineEx_GetStartTime(IMFMediaEngineEx* This) {
   1761     return This->lpVtbl->GetStartTime(This);
   1762 }
   1763 static inline double IMFMediaEngineEx_GetDuration(IMFMediaEngineEx* This) {
   1764     return This->lpVtbl->GetDuration(This);
   1765 }
   1766 static inline WINBOOL IMFMediaEngineEx_IsPaused(IMFMediaEngineEx* This) {
   1767     return This->lpVtbl->IsPaused(This);
   1768 }
   1769 static inline double IMFMediaEngineEx_GetDefaultPlaybackRate(IMFMediaEngineEx* This) {
   1770     return This->lpVtbl->GetDefaultPlaybackRate(This);
   1771 }
   1772 static inline HRESULT IMFMediaEngineEx_SetDefaultPlaybackRate(IMFMediaEngineEx* This,double rate) {
   1773     return This->lpVtbl->SetDefaultPlaybackRate(This,rate);
   1774 }
   1775 static inline double IMFMediaEngineEx_GetPlaybackRate(IMFMediaEngineEx* This) {
   1776     return This->lpVtbl->GetPlaybackRate(This);
   1777 }
   1778 static inline HRESULT IMFMediaEngineEx_SetPlaybackRate(IMFMediaEngineEx* This,double rate) {
   1779     return This->lpVtbl->SetPlaybackRate(This,rate);
   1780 }
   1781 static inline HRESULT IMFMediaEngineEx_GetPlayed(IMFMediaEngineEx* This,IMFMediaTimeRange **played) {
   1782     return This->lpVtbl->GetPlayed(This,played);
   1783 }
   1784 static inline HRESULT IMFMediaEngineEx_GetSeekable(IMFMediaEngineEx* This,IMFMediaTimeRange **seekable) {
   1785     return This->lpVtbl->GetSeekable(This,seekable);
   1786 }
   1787 static inline WINBOOL IMFMediaEngineEx_IsEnded(IMFMediaEngineEx* This) {
   1788     return This->lpVtbl->IsEnded(This);
   1789 }
   1790 static inline WINBOOL IMFMediaEngineEx_GetAutoPlay(IMFMediaEngineEx* This) {
   1791     return This->lpVtbl->GetAutoPlay(This);
   1792 }
   1793 static inline HRESULT IMFMediaEngineEx_SetAutoPlay(IMFMediaEngineEx* This,WINBOOL autoplay) {
   1794     return This->lpVtbl->SetAutoPlay(This,autoplay);
   1795 }
   1796 static inline WINBOOL IMFMediaEngineEx_GetLoop(IMFMediaEngineEx* This) {
   1797     return This->lpVtbl->GetLoop(This);
   1798 }
   1799 static inline HRESULT IMFMediaEngineEx_SetLoop(IMFMediaEngineEx* This,WINBOOL loop) {
   1800     return This->lpVtbl->SetLoop(This,loop);
   1801 }
   1802 static inline HRESULT IMFMediaEngineEx_Play(IMFMediaEngineEx* This) {
   1803     return This->lpVtbl->Play(This);
   1804 }
   1805 static inline HRESULT IMFMediaEngineEx_Pause(IMFMediaEngineEx* This) {
   1806     return This->lpVtbl->Pause(This);
   1807 }
   1808 static inline WINBOOL IMFMediaEngineEx_GetMuted(IMFMediaEngineEx* This) {
   1809     return This->lpVtbl->GetMuted(This);
   1810 }
   1811 static inline HRESULT IMFMediaEngineEx_SetMuted(IMFMediaEngineEx* This,WINBOOL muted) {
   1812     return This->lpVtbl->SetMuted(This,muted);
   1813 }
   1814 static inline double IMFMediaEngineEx_GetVolume(IMFMediaEngineEx* This) {
   1815     return This->lpVtbl->GetVolume(This);
   1816 }
   1817 static inline HRESULT IMFMediaEngineEx_SetVolume(IMFMediaEngineEx* This,double volume) {
   1818     return This->lpVtbl->SetVolume(This,volume);
   1819 }
   1820 static inline WINBOOL IMFMediaEngineEx_HasVideo(IMFMediaEngineEx* This) {
   1821     return This->lpVtbl->HasVideo(This);
   1822 }
   1823 static inline WINBOOL IMFMediaEngineEx_HasAudio(IMFMediaEngineEx* This) {
   1824     return This->lpVtbl->HasAudio(This);
   1825 }
   1826 static inline HRESULT IMFMediaEngineEx_GetNativeVideoSize(IMFMediaEngineEx* This,DWORD *cx,DWORD *cy) {
   1827     return This->lpVtbl->GetNativeVideoSize(This,cx,cy);
   1828 }
   1829 static inline HRESULT IMFMediaEngineEx_GetVideoAspectRatio(IMFMediaEngineEx* This,DWORD *cx,DWORD *cy) {
   1830     return This->lpVtbl->GetVideoAspectRatio(This,cx,cy);
   1831 }
   1832 static inline HRESULT IMFMediaEngineEx_Shutdown(IMFMediaEngineEx* This) {
   1833     return This->lpVtbl->Shutdown(This);
   1834 }
   1835 static inline HRESULT IMFMediaEngineEx_TransferVideoFrame(IMFMediaEngineEx* This,IUnknown *surface,const MFVideoNormalizedRect *src,const RECT *dst,const MFARGB *color) {
   1836     return This->lpVtbl->TransferVideoFrame(This,surface,src,dst,color);
   1837 }
   1838 static inline HRESULT IMFMediaEngineEx_OnVideoStreamTick(IMFMediaEngineEx* This,LONGLONG *time) {
   1839     return This->lpVtbl->OnVideoStreamTick(This,time);
   1840 }
   1841 /*** IMFMediaEngineEx methods ***/
   1842 static inline HRESULT IMFMediaEngineEx_SetSourceFromByteStream(IMFMediaEngineEx* This,IMFByteStream *bytestream,BSTR url) {
   1843     return This->lpVtbl->SetSourceFromByteStream(This,bytestream,url);
   1844 }
   1845 static inline HRESULT IMFMediaEngineEx_GetStatistics(IMFMediaEngineEx* This,MF_MEDIA_ENGINE_STATISTIC stat_id,PROPVARIANT *stat) {
   1846     return This->lpVtbl->GetStatistics(This,stat_id,stat);
   1847 }
   1848 static inline HRESULT IMFMediaEngineEx_UpdateVideoStream(IMFMediaEngineEx* This,const MFVideoNormalizedRect *src,const RECT *dst,const MFARGB *border_color) {
   1849     return This->lpVtbl->UpdateVideoStream(This,src,dst,border_color);
   1850 }
   1851 static inline double IMFMediaEngineEx_GetBalance(IMFMediaEngineEx* This) {
   1852     return This->lpVtbl->GetBalance(This);
   1853 }
   1854 static inline HRESULT IMFMediaEngineEx_SetBalance(IMFMediaEngineEx* This,double balance) {
   1855     return This->lpVtbl->SetBalance(This,balance);
   1856 }
   1857 static inline WINBOOL IMFMediaEngineEx_IsPlaybackRateSupported(IMFMediaEngineEx* This,double rate) {
   1858     return This->lpVtbl->IsPlaybackRateSupported(This,rate);
   1859 }
   1860 static inline HRESULT IMFMediaEngineEx_FrameStep(IMFMediaEngineEx* This,WINBOOL forward) {
   1861     return This->lpVtbl->FrameStep(This,forward);
   1862 }
   1863 static inline HRESULT IMFMediaEngineEx_GetResourceCharacteristics(IMFMediaEngineEx* This,DWORD *flags) {
   1864     return This->lpVtbl->GetResourceCharacteristics(This,flags);
   1865 }
   1866 static inline HRESULT IMFMediaEngineEx_GetPresentationAttribute(IMFMediaEngineEx* This,REFGUID attribute,PROPVARIANT *value) {
   1867     return This->lpVtbl->GetPresentationAttribute(This,attribute,value);
   1868 }
   1869 static inline HRESULT IMFMediaEngineEx_GetNumberOfStreams(IMFMediaEngineEx* This,DWORD *stream_count) {
   1870     return This->lpVtbl->GetNumberOfStreams(This,stream_count);
   1871 }
   1872 static inline HRESULT IMFMediaEngineEx_GetStreamAttribute(IMFMediaEngineEx* This,DWORD stream_index,REFGUID attribute,PROPVARIANT *value) {
   1873     return This->lpVtbl->GetStreamAttribute(This,stream_index,attribute,value);
   1874 }
   1875 static inline HRESULT IMFMediaEngineEx_GetStreamSelection(IMFMediaEngineEx* This,DWORD stream_index,WINBOOL *enabled) {
   1876     return This->lpVtbl->GetStreamSelection(This,stream_index,enabled);
   1877 }
   1878 static inline HRESULT IMFMediaEngineEx_SetStreamSelection(IMFMediaEngineEx* This,DWORD stream_index,WINBOOL enabled) {
   1879     return This->lpVtbl->SetStreamSelection(This,stream_index,enabled);
   1880 }
   1881 static inline HRESULT IMFMediaEngineEx_ApplyStreamSelections(IMFMediaEngineEx* This) {
   1882     return This->lpVtbl->ApplyStreamSelections(This);
   1883 }
   1884 static inline HRESULT IMFMediaEngineEx_IsProtected(IMFMediaEngineEx* This,WINBOOL *is_protected) {
   1885     return This->lpVtbl->IsProtected(This,is_protected);
   1886 }
   1887 static inline HRESULT IMFMediaEngineEx_InsertVideoEffect(IMFMediaEngineEx* This,IUnknown *effect,WINBOOL is_optional) {
   1888     return This->lpVtbl->InsertVideoEffect(This,effect,is_optional);
   1889 }
   1890 static inline HRESULT IMFMediaEngineEx_InsertAudioEffect(IMFMediaEngineEx* This,IUnknown *effect,WINBOOL is_optional) {
   1891     return This->lpVtbl->InsertAudioEffect(This,effect,is_optional);
   1892 }
   1893 static inline HRESULT IMFMediaEngineEx_RemoveAllEffects(IMFMediaEngineEx* This) {
   1894     return This->lpVtbl->RemoveAllEffects(This);
   1895 }
   1896 static inline HRESULT IMFMediaEngineEx_SetTimelineMarkerTimer(IMFMediaEngineEx* This,double timeout) {
   1897     return This->lpVtbl->SetTimelineMarkerTimer(This,timeout);
   1898 }
   1899 static inline HRESULT IMFMediaEngineEx_GetTimelineMarkerTimer(IMFMediaEngineEx* This,double *timeout) {
   1900     return This->lpVtbl->GetTimelineMarkerTimer(This,timeout);
   1901 }
   1902 static inline HRESULT IMFMediaEngineEx_CancelTimelineMarkerTimer(IMFMediaEngineEx* This) {
   1903     return This->lpVtbl->CancelTimelineMarkerTimer(This);
   1904 }
   1905 static inline WINBOOL IMFMediaEngineEx_IsStereo3D(IMFMediaEngineEx* This) {
   1906     return This->lpVtbl->IsStereo3D(This);
   1907 }
   1908 static inline HRESULT IMFMediaEngineEx_GetStereo3DFramePackingMode(IMFMediaEngineEx* This,MF_MEDIA_ENGINE_S3D_PACKING_MODE *mode) {
   1909     return This->lpVtbl->GetStereo3DFramePackingMode(This,mode);
   1910 }
   1911 static inline HRESULT IMFMediaEngineEx_SetStereo3DFramePackingMode(IMFMediaEngineEx* This,MF_MEDIA_ENGINE_S3D_PACKING_MODE mode) {
   1912     return This->lpVtbl->SetStereo3DFramePackingMode(This,mode);
   1913 }
   1914 static inline HRESULT IMFMediaEngineEx_GetStereo3DRenderMode(IMFMediaEngineEx* This,MF3DVideoOutputType *output_type) {
   1915     return This->lpVtbl->GetStereo3DRenderMode(This,output_type);
   1916 }
   1917 static inline HRESULT IMFMediaEngineEx_SetStereo3DRenderMode(IMFMediaEngineEx* This,MF3DVideoOutputType output_type) {
   1918     return This->lpVtbl->SetStereo3DRenderMode(This,output_type);
   1919 }
   1920 static inline HRESULT IMFMediaEngineEx_EnableWindowlessSwapchainMode(IMFMediaEngineEx* This,WINBOOL enable) {
   1921     return This->lpVtbl->EnableWindowlessSwapchainMode(This,enable);
   1922 }
   1923 static inline HRESULT IMFMediaEngineEx_GetVideoSwapchainHandle(IMFMediaEngineEx* This,HANDLE *swapchain) {
   1924     return This->lpVtbl->GetVideoSwapchainHandle(This,swapchain);
   1925 }
   1926 static inline HRESULT IMFMediaEngineEx_EnableHorizontalMirrorMode(IMFMediaEngineEx* This,WINBOOL enable) {
   1927     return This->lpVtbl->EnableHorizontalMirrorMode(This,enable);
   1928 }
   1929 static inline HRESULT IMFMediaEngineEx_GetAudioStreamCategory(IMFMediaEngineEx* This,UINT32 *category) {
   1930     return This->lpVtbl->GetAudioStreamCategory(This,category);
   1931 }
   1932 static inline HRESULT IMFMediaEngineEx_SetAudioStreamCategory(IMFMediaEngineEx* This,UINT32 category) {
   1933     return This->lpVtbl->SetAudioStreamCategory(This,category);
   1934 }
   1935 static inline HRESULT IMFMediaEngineEx_GetAudioEndpointRole(IMFMediaEngineEx* This,UINT32 *role) {
   1936     return This->lpVtbl->GetAudioEndpointRole(This,role);
   1937 }
   1938 static inline HRESULT IMFMediaEngineEx_SetAudioEndpointRole(IMFMediaEngineEx* This,UINT32 role) {
   1939     return This->lpVtbl->SetAudioEndpointRole(This,role);
   1940 }
   1941 static inline HRESULT IMFMediaEngineEx_GetRealTimeMode(IMFMediaEngineEx* This,WINBOOL *enabled) {
   1942     return This->lpVtbl->GetRealTimeMode(This,enabled);
   1943 }
   1944 static inline HRESULT IMFMediaEngineEx_SetRealTimeMode(IMFMediaEngineEx* This,WINBOOL enable) {
   1945     return This->lpVtbl->SetRealTimeMode(This,enable);
   1946 }
   1947 static inline HRESULT IMFMediaEngineEx_SetCurrentTimeEx(IMFMediaEngineEx* This,double seektime,MF_MEDIA_ENGINE_SEEK_MODE mode) {
   1948     return This->lpVtbl->SetCurrentTimeEx(This,seektime,mode);
   1949 }
   1950 static inline HRESULT IMFMediaEngineEx_EnableTimeUpdateTimer(IMFMediaEngineEx* This,WINBOOL enable) {
   1951     return This->lpVtbl->EnableTimeUpdateTimer(This,enable);
   1952 }
   1953 #endif
   1954 #endif
   1955 
   1956 #endif
   1957 
   1958 
   1959 #endif  /* __IMFMediaEngineEx_INTERFACE_DEFINED__ */
   1960 
   1961 /*****************************************************************************
   1962  * IMFMediaEngineClassFactory interface
   1963  */
   1964 #ifndef __IMFMediaEngineClassFactory_INTERFACE_DEFINED__
   1965 #define __IMFMediaEngineClassFactory_INTERFACE_DEFINED__
   1966 
   1967 DEFINE_GUID(IID_IMFMediaEngineClassFactory, 0x4d645ace, 0x26aa, 0x4688, 0x9b,0xe1, 0xdf,0x35,0x16,0x99,0x0b,0x93);
   1968 #if defined(__cplusplus) && !defined(CINTERFACE)
   1969 MIDL_INTERFACE("4d645ace-26aa-4688-9be1-df3516990b93")
   1970 IMFMediaEngineClassFactory : public IUnknown
   1971 {
   1972     virtual HRESULT STDMETHODCALLTYPE CreateInstance(
   1973         DWORD flags,
   1974         IMFAttributes *attributes,
   1975         IMFMediaEngine **engine) = 0;
   1976 
   1977     virtual HRESULT STDMETHODCALLTYPE CreateTimeRange(
   1978         IMFMediaTimeRange **range) = 0;
   1979 
   1980     virtual HRESULT STDMETHODCALLTYPE CreateError(
   1981         IMFMediaError **error) = 0;
   1982 
   1983 };
   1984 #ifdef __CRT_UUID_DECL
   1985 __CRT_UUID_DECL(IMFMediaEngineClassFactory, 0x4d645ace, 0x26aa, 0x4688, 0x9b,0xe1, 0xdf,0x35,0x16,0x99,0x0b,0x93)
   1986 #endif
   1987 #else
   1988 typedef struct IMFMediaEngineClassFactoryVtbl {
   1989     BEGIN_INTERFACE
   1990 
   1991     /*** IUnknown methods ***/
   1992     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
   1993         IMFMediaEngineClassFactory *This,
   1994         REFIID riid,
   1995         void **ppvObject);
   1996 
   1997     ULONG (STDMETHODCALLTYPE *AddRef)(
   1998         IMFMediaEngineClassFactory *This);
   1999 
   2000     ULONG (STDMETHODCALLTYPE *Release)(
   2001         IMFMediaEngineClassFactory *This);
   2002 
   2003     /*** IMFMediaEngineClassFactory methods ***/
   2004     HRESULT (STDMETHODCALLTYPE *CreateInstance)(
   2005         IMFMediaEngineClassFactory *This,
   2006         DWORD flags,
   2007         IMFAttributes *attributes,
   2008         IMFMediaEngine **engine);
   2009 
   2010     HRESULT (STDMETHODCALLTYPE *CreateTimeRange)(
   2011         IMFMediaEngineClassFactory *This,
   2012         IMFMediaTimeRange **range);
   2013 
   2014     HRESULT (STDMETHODCALLTYPE *CreateError)(
   2015         IMFMediaEngineClassFactory *This,
   2016         IMFMediaError **error);
   2017 
   2018     END_INTERFACE
   2019 } IMFMediaEngineClassFactoryVtbl;
   2020 
   2021 interface IMFMediaEngineClassFactory {
   2022     CONST_VTBL IMFMediaEngineClassFactoryVtbl* lpVtbl;
   2023 };
   2024 
   2025 #ifdef COBJMACROS
   2026 #ifndef WIDL_C_INLINE_WRAPPERS
   2027 /*** IUnknown methods ***/
   2028 #define IMFMediaEngineClassFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
   2029 #define IMFMediaEngineClassFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
   2030 #define IMFMediaEngineClassFactory_Release(This) (This)->lpVtbl->Release(This)
   2031 /*** IMFMediaEngineClassFactory methods ***/
   2032 #define IMFMediaEngineClassFactory_CreateInstance(This,flags,attributes,engine) (This)->lpVtbl->CreateInstance(This,flags,attributes,engine)
   2033 #define IMFMediaEngineClassFactory_CreateTimeRange(This,range) (This)->lpVtbl->CreateTimeRange(This,range)
   2034 #define IMFMediaEngineClassFactory_CreateError(This,error) (This)->lpVtbl->CreateError(This,error)
   2035 #else
   2036 /*** IUnknown methods ***/
   2037 static inline HRESULT IMFMediaEngineClassFactory_QueryInterface(IMFMediaEngineClassFactory* This,REFIID riid,void **ppvObject) {
   2038     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
   2039 }
   2040 static inline ULONG IMFMediaEngineClassFactory_AddRef(IMFMediaEngineClassFactory* This) {
   2041     return This->lpVtbl->AddRef(This);
   2042 }
   2043 static inline ULONG IMFMediaEngineClassFactory_Release(IMFMediaEngineClassFactory* This) {
   2044     return This->lpVtbl->Release(This);
   2045 }
   2046 /*** IMFMediaEngineClassFactory methods ***/
   2047 static inline HRESULT IMFMediaEngineClassFactory_CreateInstance(IMFMediaEngineClassFactory* This,DWORD flags,IMFAttributes *attributes,IMFMediaEngine **engine) {
   2048     return This->lpVtbl->CreateInstance(This,flags,attributes,engine);
   2049 }
   2050 static inline HRESULT IMFMediaEngineClassFactory_CreateTimeRange(IMFMediaEngineClassFactory* This,IMFMediaTimeRange **range) {
   2051     return This->lpVtbl->CreateTimeRange(This,range);
   2052 }
   2053 static inline HRESULT IMFMediaEngineClassFactory_CreateError(IMFMediaEngineClassFactory* This,IMFMediaError **error) {
   2054     return This->lpVtbl->CreateError(This,error);
   2055 }
   2056 #endif
   2057 #endif
   2058 
   2059 #endif
   2060 
   2061 
   2062 #endif  /* __IMFMediaEngineClassFactory_INTERFACE_DEFINED__ */
   2063 
   2064 /*****************************************************************************
   2065  * IMFMediaEngineNotify interface
   2066  */
   2067 #ifndef __IMFMediaEngineNotify_INTERFACE_DEFINED__
   2068 #define __IMFMediaEngineNotify_INTERFACE_DEFINED__
   2069 
   2070 DEFINE_GUID(IID_IMFMediaEngineNotify, 0xfee7c112, 0xe776, 0x42b5, 0x9b,0xbf, 0x00,0x48,0x52,0x4e,0x2b,0xd5);
   2071 #if defined(__cplusplus) && !defined(CINTERFACE)
   2072 MIDL_INTERFACE("fee7c112-e776-42b5-9bbf-0048524e2bd5")
   2073 IMFMediaEngineNotify : public IUnknown
   2074 {
   2075     virtual HRESULT STDMETHODCALLTYPE EventNotify(
   2076         DWORD event,
   2077         DWORD_PTR param1,
   2078         DWORD param2) = 0;
   2079 
   2080 };
   2081 #ifdef __CRT_UUID_DECL
   2082 __CRT_UUID_DECL(IMFMediaEngineNotify, 0xfee7c112, 0xe776, 0x42b5, 0x9b,0xbf, 0x00,0x48,0x52,0x4e,0x2b,0xd5)
   2083 #endif
   2084 #else
   2085 typedef struct IMFMediaEngineNotifyVtbl {
   2086     BEGIN_INTERFACE
   2087 
   2088     /*** IUnknown methods ***/
   2089     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
   2090         IMFMediaEngineNotify *This,
   2091         REFIID riid,
   2092         void **ppvObject);
   2093 
   2094     ULONG (STDMETHODCALLTYPE *AddRef)(
   2095         IMFMediaEngineNotify *This);
   2096 
   2097     ULONG (STDMETHODCALLTYPE *Release)(
   2098         IMFMediaEngineNotify *This);
   2099 
   2100     /*** IMFMediaEngineNotify methods ***/
   2101     HRESULT (STDMETHODCALLTYPE *EventNotify)(
   2102         IMFMediaEngineNotify *This,
   2103         DWORD event,
   2104         DWORD_PTR param1,
   2105         DWORD param2);
   2106 
   2107     END_INTERFACE
   2108 } IMFMediaEngineNotifyVtbl;
   2109 
   2110 interface IMFMediaEngineNotify {
   2111     CONST_VTBL IMFMediaEngineNotifyVtbl* lpVtbl;
   2112 };
   2113 
   2114 #ifdef COBJMACROS
   2115 #ifndef WIDL_C_INLINE_WRAPPERS
   2116 /*** IUnknown methods ***/
   2117 #define IMFMediaEngineNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
   2118 #define IMFMediaEngineNotify_AddRef(This) (This)->lpVtbl->AddRef(This)
   2119 #define IMFMediaEngineNotify_Release(This) (This)->lpVtbl->Release(This)
   2120 /*** IMFMediaEngineNotify methods ***/
   2121 #define IMFMediaEngineNotify_EventNotify(This,event,param1,param2) (This)->lpVtbl->EventNotify(This,event,param1,param2)
   2122 #else
   2123 /*** IUnknown methods ***/
   2124 static inline HRESULT IMFMediaEngineNotify_QueryInterface(IMFMediaEngineNotify* This,REFIID riid,void **ppvObject) {
   2125     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
   2126 }
   2127 static inline ULONG IMFMediaEngineNotify_AddRef(IMFMediaEngineNotify* This) {
   2128     return This->lpVtbl->AddRef(This);
   2129 }
   2130 static inline ULONG IMFMediaEngineNotify_Release(IMFMediaEngineNotify* This) {
   2131     return This->lpVtbl->Release(This);
   2132 }
   2133 /*** IMFMediaEngineNotify methods ***/
   2134 static inline HRESULT IMFMediaEngineNotify_EventNotify(IMFMediaEngineNotify* This,DWORD event,DWORD_PTR param1,DWORD param2) {
   2135     return This->lpVtbl->EventNotify(This,event,param1,param2);
   2136 }
   2137 #endif
   2138 #endif
   2139 
   2140 #endif
   2141 
   2142 
   2143 #endif  /* __IMFMediaEngineNotify_INTERFACE_DEFINED__ */
   2144 
   2145 /*****************************************************************************
   2146  * IMFMediaEngineAudioEndpointId interface
   2147  */
   2148 #ifndef __IMFMediaEngineAudioEndpointId_INTERFACE_DEFINED__
   2149 #define __IMFMediaEngineAudioEndpointId_INTERFACE_DEFINED__
   2150 
   2151 DEFINE_GUID(IID_IMFMediaEngineAudioEndpointId, 0x7a3bac98, 0x0e76, 0x49fb, 0x8c,0x20, 0x8a,0x86,0xfd,0x98,0xea,0xf2);
   2152 #if defined(__cplusplus) && !defined(CINTERFACE)
   2153 MIDL_INTERFACE("7a3bac98-0e76-49fb-8c20-8a86fd98eaf2")
   2154 IMFMediaEngineAudioEndpointId : public IUnknown
   2155 {
   2156     virtual HRESULT STDMETHODCALLTYPE SetAudioEndpointId(
   2157         LPCWSTR id) = 0;
   2158 
   2159     virtual HRESULT STDMETHODCALLTYPE GetAudioEndpointId(
   2160         LPWSTR *id) = 0;
   2161 
   2162 };
   2163 #ifdef __CRT_UUID_DECL
   2164 __CRT_UUID_DECL(IMFMediaEngineAudioEndpointId, 0x7a3bac98, 0x0e76, 0x49fb, 0x8c,0x20, 0x8a,0x86,0xfd,0x98,0xea,0xf2)
   2165 #endif
   2166 #else
   2167 typedef struct IMFMediaEngineAudioEndpointIdVtbl {
   2168     BEGIN_INTERFACE
   2169 
   2170     /*** IUnknown methods ***/
   2171     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
   2172         IMFMediaEngineAudioEndpointId *This,
   2173         REFIID riid,
   2174         void **ppvObject);
   2175 
   2176     ULONG (STDMETHODCALLTYPE *AddRef)(
   2177         IMFMediaEngineAudioEndpointId *This);
   2178 
   2179     ULONG (STDMETHODCALLTYPE *Release)(
   2180         IMFMediaEngineAudioEndpointId *This);
   2181 
   2182     /*** IMFMediaEngineAudioEndpointId methods ***/
   2183     HRESULT (STDMETHODCALLTYPE *SetAudioEndpointId)(
   2184         IMFMediaEngineAudioEndpointId *This,
   2185         LPCWSTR id);
   2186 
   2187     HRESULT (STDMETHODCALLTYPE *GetAudioEndpointId)(
   2188         IMFMediaEngineAudioEndpointId *This,
   2189         LPWSTR *id);
   2190 
   2191     END_INTERFACE
   2192 } IMFMediaEngineAudioEndpointIdVtbl;
   2193 
   2194 interface IMFMediaEngineAudioEndpointId {
   2195     CONST_VTBL IMFMediaEngineAudioEndpointIdVtbl* lpVtbl;
   2196 };
   2197 
   2198 #ifdef COBJMACROS
   2199 #ifndef WIDL_C_INLINE_WRAPPERS
   2200 /*** IUnknown methods ***/
   2201 #define IMFMediaEngineAudioEndpointId_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
   2202 #define IMFMediaEngineAudioEndpointId_AddRef(This) (This)->lpVtbl->AddRef(This)
   2203 #define IMFMediaEngineAudioEndpointId_Release(This) (This)->lpVtbl->Release(This)
   2204 /*** IMFMediaEngineAudioEndpointId methods ***/
   2205 #define IMFMediaEngineAudioEndpointId_SetAudioEndpointId(This,id) (This)->lpVtbl->SetAudioEndpointId(This,id)
   2206 #define IMFMediaEngineAudioEndpointId_GetAudioEndpointId(This,id) (This)->lpVtbl->GetAudioEndpointId(This,id)
   2207 #else
   2208 /*** IUnknown methods ***/
   2209 static inline HRESULT IMFMediaEngineAudioEndpointId_QueryInterface(IMFMediaEngineAudioEndpointId* This,REFIID riid,void **ppvObject) {
   2210     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
   2211 }
   2212 static inline ULONG IMFMediaEngineAudioEndpointId_AddRef(IMFMediaEngineAudioEndpointId* This) {
   2213     return This->lpVtbl->AddRef(This);
   2214 }
   2215 static inline ULONG IMFMediaEngineAudioEndpointId_Release(IMFMediaEngineAudioEndpointId* This) {
   2216     return This->lpVtbl->Release(This);
   2217 }
   2218 /*** IMFMediaEngineAudioEndpointId methods ***/
   2219 static inline HRESULT IMFMediaEngineAudioEndpointId_SetAudioEndpointId(IMFMediaEngineAudioEndpointId* This,LPCWSTR id) {
   2220     return This->lpVtbl->SetAudioEndpointId(This,id);
   2221 }
   2222 static inline HRESULT IMFMediaEngineAudioEndpointId_GetAudioEndpointId(IMFMediaEngineAudioEndpointId* This,LPWSTR *id) {
   2223     return This->lpVtbl->GetAudioEndpointId(This,id);
   2224 }
   2225 #endif
   2226 #endif
   2227 
   2228 #endif
   2229 
   2230 
   2231 #endif  /* __IMFMediaEngineAudioEndpointId_INTERFACE_DEFINED__ */
   2232 
   2233 /*****************************************************************************
   2234  * IMFMediaEngineExtension interface
   2235  */
   2236 #ifndef __IMFMediaEngineExtension_INTERFACE_DEFINED__
   2237 #define __IMFMediaEngineExtension_INTERFACE_DEFINED__
   2238 
   2239 DEFINE_GUID(IID_IMFMediaEngineExtension, 0x2f69d622, 0x20b5, 0x41e9, 0xaf,0xdf, 0x89,0xce,0xd1,0xdd,0xa0,0x4e);
   2240 #if defined(__cplusplus) && !defined(CINTERFACE)
   2241 MIDL_INTERFACE("2f69d622-20b5-41e9-afdf-89ced1dda04e")
   2242 IMFMediaEngineExtension : public IUnknown
   2243 {
   2244     virtual HRESULT STDMETHODCALLTYPE CanPlayType(
   2245         WINBOOL audio_only,
   2246         BSTR mime_type,
   2247         MF_MEDIA_ENGINE_CANPLAY *answer) = 0;
   2248 
   2249     virtual HRESULT STDMETHODCALLTYPE BeginCreateObject(
   2250         BSTR url,
   2251         IMFByteStream *bytestream,
   2252         MF_OBJECT_TYPE type,
   2253         IUnknown **cancel_cookie,
   2254         IMFAsyncCallback *callback,
   2255         IUnknown *state) = 0;
   2256 
   2257     virtual HRESULT STDMETHODCALLTYPE CancelObjectCreation(
   2258         IUnknown *cancel_cookie) = 0;
   2259 
   2260     virtual HRESULT STDMETHODCALLTYPE EndCreateObject(
   2261         IMFAsyncResult *result,
   2262         IUnknown **object) = 0;
   2263 
   2264 };
   2265 #ifdef __CRT_UUID_DECL
   2266 __CRT_UUID_DECL(IMFMediaEngineExtension, 0x2f69d622, 0x20b5, 0x41e9, 0xaf,0xdf, 0x89,0xce,0xd1,0xdd,0xa0,0x4e)
   2267 #endif
   2268 #else
   2269 typedef struct IMFMediaEngineExtensionVtbl {
   2270     BEGIN_INTERFACE
   2271 
   2272     /*** IUnknown methods ***/
   2273     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
   2274         IMFMediaEngineExtension *This,
   2275         REFIID riid,
   2276         void **ppvObject);
   2277 
   2278     ULONG (STDMETHODCALLTYPE *AddRef)(
   2279         IMFMediaEngineExtension *This);
   2280 
   2281     ULONG (STDMETHODCALLTYPE *Release)(
   2282         IMFMediaEngineExtension *This);
   2283 
   2284     /*** IMFMediaEngineExtension methods ***/
   2285     HRESULT (STDMETHODCALLTYPE *CanPlayType)(
   2286         IMFMediaEngineExtension *This,
   2287         WINBOOL audio_only,
   2288         BSTR mime_type,
   2289         MF_MEDIA_ENGINE_CANPLAY *answer);
   2290 
   2291     HRESULT (STDMETHODCALLTYPE *BeginCreateObject)(
   2292         IMFMediaEngineExtension *This,
   2293         BSTR url,
   2294         IMFByteStream *bytestream,
   2295         MF_OBJECT_TYPE type,
   2296         IUnknown **cancel_cookie,
   2297         IMFAsyncCallback *callback,
   2298         IUnknown *state);
   2299 
   2300     HRESULT (STDMETHODCALLTYPE *CancelObjectCreation)(
   2301         IMFMediaEngineExtension *This,
   2302         IUnknown *cancel_cookie);
   2303 
   2304     HRESULT (STDMETHODCALLTYPE *EndCreateObject)(
   2305         IMFMediaEngineExtension *This,
   2306         IMFAsyncResult *result,
   2307         IUnknown **object);
   2308 
   2309     END_INTERFACE
   2310 } IMFMediaEngineExtensionVtbl;
   2311 
   2312 interface IMFMediaEngineExtension {
   2313     CONST_VTBL IMFMediaEngineExtensionVtbl* lpVtbl;
   2314 };
   2315 
   2316 #ifdef COBJMACROS
   2317 #ifndef WIDL_C_INLINE_WRAPPERS
   2318 /*** IUnknown methods ***/
   2319 #define IMFMediaEngineExtension_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
   2320 #define IMFMediaEngineExtension_AddRef(This) (This)->lpVtbl->AddRef(This)
   2321 #define IMFMediaEngineExtension_Release(This) (This)->lpVtbl->Release(This)
   2322 /*** IMFMediaEngineExtension methods ***/
   2323 #define IMFMediaEngineExtension_CanPlayType(This,audio_only,mime_type,answer) (This)->lpVtbl->CanPlayType(This,audio_only,mime_type,answer)
   2324 #define IMFMediaEngineExtension_BeginCreateObject(This,url,bytestream,type,cancel_cookie,callback,state) (This)->lpVtbl->BeginCreateObject(This,url,bytestream,type,cancel_cookie,callback,state)
   2325 #define IMFMediaEngineExtension_CancelObjectCreation(This,cancel_cookie) (This)->lpVtbl->CancelObjectCreation(This,cancel_cookie)
   2326 #define IMFMediaEngineExtension_EndCreateObject(This,result,object) (This)->lpVtbl->EndCreateObject(This,result,object)
   2327 #else
   2328 /*** IUnknown methods ***/
   2329 static inline HRESULT IMFMediaEngineExtension_QueryInterface(IMFMediaEngineExtension* This,REFIID riid,void **ppvObject) {
   2330     return This->lpVtbl->QueryInterface(This,riid,ppvObject);
   2331 }
   2332 static inline ULONG IMFMediaEngineExtension_AddRef(IMFMediaEngineExtension* This) {
   2333     return This->lpVtbl->AddRef(This);
   2334 }
   2335 static inline ULONG IMFMediaEngineExtension_Release(IMFMediaEngineExtension* This) {
   2336     return This->lpVtbl->Release(This);
   2337 }
   2338 /*** IMFMediaEngineExtension methods ***/
   2339 static inline HRESULT IMFMediaEngineExtension_CanPlayType(IMFMediaEngineExtension* This,WINBOOL audio_only,BSTR mime_type,MF_MEDIA_ENGINE_CANPLAY *answer) {
   2340     return This->lpVtbl->CanPlayType(This,audio_only,mime_type,answer);
   2341 }
   2342 static inline HRESULT IMFMediaEngineExtension_BeginCreateObject(IMFMediaEngineExtension* This,BSTR url,IMFByteStream *bytestream,MF_OBJECT_TYPE type,IUnknown **cancel_cookie,IMFAsyncCallback *callback,IUnknown *state) {
   2343     return This->lpVtbl->BeginCreateObject(This,url,bytestream,type,cancel_cookie,callback,state);
   2344 }
   2345 static inline HRESULT IMFMediaEngineExtension_CancelObjectCreation(IMFMediaEngineExtension* This,IUnknown *cancel_cookie) {
   2346     return This->lpVtbl->CancelObjectCreation(This,cancel_cookie);
   2347 }
   2348 static inline HRESULT IMFMediaEngineExtension_EndCreateObject(IMFMediaEngineExtension* This,IMFAsyncResult *result,IUnknown **object) {
   2349     return This->lpVtbl->EndCreateObject(This,result,object);
   2350 }
   2351 #endif
   2352 #endif
   2353 
   2354 #endif
   2355 
   2356 
   2357 #endif  /* __IMFMediaEngineExtension_INTERFACE_DEFINED__ */
   2358 
   2359 /* Begin additional prototypes for all interfaces */
   2360 
   2361 
   2362 /* End additional prototypes */
   2363 
   2364 #ifdef __cplusplus
   2365 }
   2366 #endif
   2367 
   2368 #endif /* __mfmediaengine_h__ */