master
   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__
  23typedef interface IMFMediaError IMFMediaError;
  24#ifdef __cplusplus
  25interface IMFMediaError;
  26#endif /* __cplusplus */
  27#endif
  28
  29#ifndef __IMFMediaEngineSrcElements_FWD_DEFINED__
  30#define __IMFMediaEngineSrcElements_FWD_DEFINED__
  31typedef interface IMFMediaEngineSrcElements IMFMediaEngineSrcElements;
  32#ifdef __cplusplus
  33interface IMFMediaEngineSrcElements;
  34#endif /* __cplusplus */
  35#endif
  36
  37#ifndef __IMFMediaTimeRange_FWD_DEFINED__
  38#define __IMFMediaTimeRange_FWD_DEFINED__
  39typedef interface IMFMediaTimeRange IMFMediaTimeRange;
  40#ifdef __cplusplus
  41interface IMFMediaTimeRange;
  42#endif /* __cplusplus */
  43#endif
  44
  45#ifndef __IMFMediaEngine_FWD_DEFINED__
  46#define __IMFMediaEngine_FWD_DEFINED__
  47typedef interface IMFMediaEngine IMFMediaEngine;
  48#ifdef __cplusplus
  49interface IMFMediaEngine;
  50#endif /* __cplusplus */
  51#endif
  52
  53#ifndef __IMFMediaEngineEx_FWD_DEFINED__
  54#define __IMFMediaEngineEx_FWD_DEFINED__
  55typedef interface IMFMediaEngineEx IMFMediaEngineEx;
  56#ifdef __cplusplus
  57interface IMFMediaEngineEx;
  58#endif /* __cplusplus */
  59#endif
  60
  61#ifndef __IMFMediaEngineClassFactory_FWD_DEFINED__
  62#define __IMFMediaEngineClassFactory_FWD_DEFINED__
  63typedef interface IMFMediaEngineClassFactory IMFMediaEngineClassFactory;
  64#ifdef __cplusplus
  65interface IMFMediaEngineClassFactory;
  66#endif /* __cplusplus */
  67#endif
  68
  69#ifndef __IMFMediaEngineNotify_FWD_DEFINED__
  70#define __IMFMediaEngineNotify_FWD_DEFINED__
  71typedef interface IMFMediaEngineNotify IMFMediaEngineNotify;
  72#ifdef __cplusplus
  73interface IMFMediaEngineNotify;
  74#endif /* __cplusplus */
  75#endif
  76
  77#ifndef __IMFMediaEngineAudioEndpointId_FWD_DEFINED__
  78#define __IMFMediaEngineAudioEndpointId_FWD_DEFINED__
  79typedef interface IMFMediaEngineAudioEndpointId IMFMediaEngineAudioEndpointId;
  80#ifdef __cplusplus
  81interface IMFMediaEngineAudioEndpointId;
  82#endif /* __cplusplus */
  83#endif
  84
  85#ifndef __IMFMediaEngineExtension_FWD_DEFINED__
  86#define __IMFMediaEngineExtension_FWD_DEFINED__
  87typedef interface IMFMediaEngineExtension IMFMediaEngineExtension;
  88#ifdef __cplusplus
  89interface IMFMediaEngineExtension;
  90#endif /* __cplusplus */
  91#endif
  92
  93/* Headers for imported files */
  94
  95#include <mfidl.h>
  96
  97#ifdef __cplusplus
  98extern "C" {
  99#endif
 100
 101EXTERN_GUID(CLSID_MFMediaEngineClassFactory, 0xb44392da, 0x499b, 0x446b, 0xa4, 0xcb, 0x00, 0x5f, 0xea, 0xd0, 0xe6, 0xd5);
 102EXTERN_GUID(MF_MEDIA_ENGINE_AUDIO_CATEGORY,                     0xc8d4c51d, 0x350e, 0x41f2, 0xba, 0x46, 0xfa, 0xeb, 0xbb, 0x08, 0x57, 0xf6);
 103EXTERN_GUID(MF_MEDIA_ENGINE_AUDIO_ENDPOINT_ROLE,                0xd2cb93d1, 0x116a, 0x44f2, 0x93, 0x85, 0xf7, 0xd0, 0xfd, 0xa2, 0xfb, 0x46);
 104EXTERN_GUID(MF_MEDIA_ENGINE_BROWSER_COMPATIBILITY_MODE,         0x4e0212e2, 0xe18f, 0x41e1, 0x95, 0xe5, 0xc0, 0xe7, 0xe9, 0x23, 0x5b, 0xc3);
 105EXTERN_GUID(MF_MEDIA_ENGINE_BROWSER_COMPATIBILITY_MODE_IE9,     0x052c2d39, 0x40c0, 0x4188, 0xab, 0x86, 0xf8, 0x28, 0x27, 0x3b, 0x75, 0x22);
 106EXTERN_GUID(MF_MEDIA_ENGINE_BROWSER_COMPATIBILITY_MODE_IE10,    0x11a47afd, 0x6589, 0x4124, 0xb3, 0x12, 0x61, 0x58, 0xec, 0x51, 0x7f, 0xc3);
 107EXTERN_GUID(MF_MEDIA_ENGINE_BROWSER_COMPATIBILITY_MODE_IE11,    0x1cf1315f, 0xce3f, 0x4035, 0x93, 0x91, 0x16, 0x14, 0x2f, 0x77, 0x51, 0x89);
 108EXTERN_GUID(MF_MEDIA_ENGINE_BROWSER_COMPATIBILITY_MODE_IE_EDGE, 0xa6f3e465, 0x3aca, 0x442c, 0xa3, 0xf0, 0xad, 0x6d, 0xda, 0xd8, 0x39, 0xae);
 109EXTERN_GUID(MF_MEDIA_ENGINE_CALLBACK,                           0xc60381b8, 0x83a4, 0x41f8, 0xa3, 0xd0, 0xde, 0x05, 0x07, 0x68, 0x49, 0xa9);
 110EXTERN_GUID(MF_MEDIA_ENGINE_COMPATIBILITY_MODE,                 0x3ef26ad4, 0xdc54, 0x45de, 0xb9, 0xaf, 0x76, 0xc8, 0xc6, 0x6b, 0xfa, 0x8e);
 111EXTERN_GUID(MF_MEDIA_ENGINE_COMPATIBILITY_MODE_WIN10,           0x5b25e089, 0x6ca7, 0x4139, 0xa2, 0xcb, 0xfc, 0xaa, 0xb3, 0x95, 0x52, 0xa3);
 112EXTERN_GUID(MF_MEDIA_ENGINE_COMPATIBILITY_MODE_WWA_EDGE,        0x15b29098, 0x9f01, 0x4e4d, 0xb6, 0x5a, 0xc0, 0x6c, 0x6c, 0x89, 0xda, 0x2a);
 113EXTERN_GUID(MF_MEDIA_ENGINE_CONTENT_PROTECTION_FLAGS,           0xe0350223, 0x5aaf, 0x4d76, 0xa7, 0xc3, 0x06, 0xde, 0x70, 0x89, 0x4d, 0xb4);
 114EXTERN_GUID(MF_MEDIA_ENGINE_CONTENT_PROTECTION_MANAGER,         0xfdd6dfaa, 0xbd85, 0x4af3, 0x9e, 0x0f, 0xa0, 0x1d, 0x53, 0x9d, 0x87, 0x6a);
 115EXTERN_GUID(MF_MEDIA_ENGINE_CONTINUE_ON_CODEC_ERROR,            0xdbcdb7f9, 0x48e4, 0x4295, 0xb7, 0x0d, 0xd5, 0x18, 0x23, 0x4e, 0xeb, 0x38);
 116EXTERN_GUID(MF_MEDIA_ENGINE_COREWINDOW,                         0xfccae4dc, 0x0b7f, 0x41c2, 0x9f, 0x96, 0x46, 0x59, 0x94, 0x8a, 0xcd, 0xdc);
 117EXTERN_GUID(MF_MEDIA_ENGINE_DXGI_MANAGER,                       0x065702da, 0x1094, 0x486d, 0x86, 0x17, 0xee, 0x7c, 0xc4, 0xee, 0x46, 0x48);
 118EXTERN_GUID(MF_MEDIA_ENGINE_EME_CALLBACK,                       0x494553a7, 0xa481, 0x4cb7, 0xbe, 0xc5, 0x38, 0x09, 0x03, 0x51, 0x37, 0x31);
 119EXTERN_GUID(MF_MEDIA_ENGINE_EXTENSION,                          0x3109fd46, 0x060d, 0x4b62, 0x8d, 0xcf, 0xfa, 0xff, 0x81, 0x13, 0x18, 0xd2);
 120EXTERN_GUID(MF_MEDIA_ENGINE_MEDIA_PLAYER_MODE,                  0x3ddd8d45, 0x5aa1, 0x4112, 0x82, 0xe5, 0x36, 0xf6, 0xa2, 0x19, 0x7e, 0x6e);
 121EXTERN_GUID(MF_MEDIA_ENGINE_NEEDKEY_CALLBACK,                   0x7ea80843, 0xb6e4, 0x432c, 0x8e, 0xa4, 0x78, 0x48, 0xff, 0xe4, 0x22, 0x0e);
 122EXTERN_GUID(MF_MEDIA_ENGINE_OPM_HWND,                           0xa0be8ee7, 0x0572, 0x4f2c, 0xa8, 0x01, 0x2a, 0x15, 0x1b, 0xd3, 0xe7, 0x26);
 123EXTERN_GUID(MF_MEDIA_ENGINE_PLAYBACK_HWND,                      0xd988879b, 0x67c9, 0x4d92, 0xba, 0xa7, 0x6e, 0xad, 0xd4, 0x46, 0x03, 0x9d);
 124EXTERN_GUID(MF_MEDIA_ENGINE_PLAYBACK_VISUAL,                    0x6debd26f, 0x6ab9, 0x4d7e, 0xb0, 0xee, 0xc6, 0x1a, 0x73, 0xff, 0xad, 0x15);
 125EXTERN_GUID(MF_MEDIA_ENGINE_SOURCE_RESOLVER_CONFIG_STORE,       0x0ac0c497, 0xb3c4, 0x48c9, 0x9c, 0xde, 0xbb, 0x8c, 0xa2, 0x44, 0x2c, 0xa3);
 126EXTERN_GUID(MF_MEDIA_ENGINE_STREAM_CONTAINS_ALPHA_CHANNEL,      0x5cbfaf44, 0xd2b2, 0x4cfb, 0x80, 0xa7, 0xd4, 0x29, 0xc7, 0x4c, 0x78, 0x9d);
 127EXTERN_GUID(MF_MEDIA_ENGINE_SYNCHRONOUS_CLOSE,                  0xc3c2e12f, 0x7e0e, 0x4e43, 0xb9, 0x1c, 0xdc, 0x99, 0x2c, 0xcd, 0xfa, 0x5e);
 128EXTERN_GUID(MF_MEDIA_ENGINE_TELEMETRY_APPLICATION_ID,           0x1e7b273b, 0xa7e4, 0x402a, 0x8f, 0x51, 0xc4, 0x8e, 0x88, 0xa2, 0xca, 0xbc);
 129EXTERN_GUID(MF_MEDIA_ENGINE_TRACK_ID,                           0x65bea312, 0x4043, 0x4815, 0x8e, 0xab, 0x44, 0xdc, 0xe2, 0xef, 0x8f, 0x2a);
 130EXTERN_GUID(MF_MEDIA_ENGINE_VIDEO_OUTPUT_FORMAT,                0x5066893c, 0x8cf9, 0x42bc, 0x8b, 0x8a, 0x47, 0x22, 0x12, 0xe5, 0x27, 0x26);
 131typedef 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;
 137typedef 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;
 145typedef 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;
 152typedef 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_
 159typedef struct MFVideoNormalizedRect {
 160    float left;
 161    float top;
 162    float right;
 163    float bottom;
 164} MFVideoNormalizedRect;
 165#endif
 166typedef 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;
 174typedef 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;
 215typedef 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
 228DEFINE_GUID(IID_IMFMediaError, 0xfc0e10d2, 0xab2a, 0x4501, 0xa9,0x51, 0x06,0xbb,0x10,0x75,0x18,0x4c);
 229#if defined(__cplusplus) && !defined(CINTERFACE)
 230MIDL_INTERFACE("fc0e10d2-ab2a-4501-a951-06bb1075184c")
 231IMFMediaError : 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
 250typedef 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
 283interface 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 ***/
 300static inline HRESULT IMFMediaError_QueryInterface(IMFMediaError* This,REFIID riid,void **ppvObject) {
 301    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
 302}
 303static inline ULONG IMFMediaError_AddRef(IMFMediaError* This) {
 304    return This->lpVtbl->AddRef(This);
 305}
 306static inline ULONG IMFMediaError_Release(IMFMediaError* This) {
 307    return This->lpVtbl->Release(This);
 308}
 309/*** IMFMediaError methods ***/
 310static inline USHORT IMFMediaError_GetErrorCode(IMFMediaError* This) {
 311    return This->lpVtbl->GetErrorCode(This);
 312}
 313static inline HRESULT IMFMediaError_GetExtendedErrorCode(IMFMediaError* This) {
 314    return This->lpVtbl->GetExtendedErrorCode(This);
 315}
 316static inline HRESULT IMFMediaError_SetErrorCode(IMFMediaError* This,MF_MEDIA_ENGINE_ERR error) {
 317    return This->lpVtbl->SetErrorCode(This,error);
 318}
 319static 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
 336DEFINE_GUID(IID_IMFMediaEngineSrcElements, 0x7a5e5354, 0xb114, 0x4c72, 0xb9,0x91, 0x31,0x31,0xd7,0x50,0x32,0xea);
 337#if defined(__cplusplus) && !defined(CINTERFACE)
 338MIDL_INTERFACE("7a5e5354-b114-4c72-b991-3131d75032ea")
 339IMFMediaEngineSrcElements : 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
 369typedef 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
 415interface 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 ***/
 434static inline HRESULT IMFMediaEngineSrcElements_QueryInterface(IMFMediaEngineSrcElements* This,REFIID riid,void **ppvObject) {
 435    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
 436}
 437static inline ULONG IMFMediaEngineSrcElements_AddRef(IMFMediaEngineSrcElements* This) {
 438    return This->lpVtbl->AddRef(This);
 439}
 440static inline ULONG IMFMediaEngineSrcElements_Release(IMFMediaEngineSrcElements* This) {
 441    return This->lpVtbl->Release(This);
 442}
 443/*** IMFMediaEngineSrcElements methods ***/
 444static inline DWORD IMFMediaEngineSrcElements_GetLength(IMFMediaEngineSrcElements* This) {
 445    return This->lpVtbl->GetLength(This);
 446}
 447static inline HRESULT IMFMediaEngineSrcElements_GetURL(IMFMediaEngineSrcElements* This,DWORD index,BSTR *url) {
 448    return This->lpVtbl->GetURL(This,index,url);
 449}
 450static inline HRESULT IMFMediaEngineSrcElements_GetType(IMFMediaEngineSrcElements* This,DWORD index,BSTR *type) {
 451    return This->lpVtbl->GetType(This,index,type);
 452}
 453static inline HRESULT IMFMediaEngineSrcElements_GetMedia(IMFMediaEngineSrcElements* This,DWORD index,BSTR *media) {
 454    return This->lpVtbl->GetMedia(This,index,media);
 455}
 456static inline HRESULT IMFMediaEngineSrcElements_AddElement(IMFMediaEngineSrcElements* This,BSTR url,BSTR type,BSTR media) {
 457    return This->lpVtbl->AddElement(This,url,type,media);
 458}
 459static 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
 476DEFINE_GUID(IID_IMFMediaTimeRange, 0xdb71a2fc, 0x078a, 0x414e, 0x9d,0xf9, 0x8c,0x25,0x31,0xb0,0xaa,0x6c);
 477#if defined(__cplusplus) && !defined(CINTERFACE)
 478MIDL_INTERFACE("db71a2fc-078a-414e-9df9-8c2531b0aa6c")
 479IMFMediaTimeRange : 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
 507typedef 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
 551interface 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 ***/
 570static inline HRESULT IMFMediaTimeRange_QueryInterface(IMFMediaTimeRange* This,REFIID riid,void **ppvObject) {
 571    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
 572}
 573static inline ULONG IMFMediaTimeRange_AddRef(IMFMediaTimeRange* This) {
 574    return This->lpVtbl->AddRef(This);
 575}
 576static inline ULONG IMFMediaTimeRange_Release(IMFMediaTimeRange* This) {
 577    return This->lpVtbl->Release(This);
 578}
 579/*** IMFMediaTimeRange methods ***/
 580static inline DWORD IMFMediaTimeRange_GetLength(IMFMediaTimeRange* This) {
 581    return This->lpVtbl->GetLength(This);
 582}
 583static inline HRESULT IMFMediaTimeRange_GetStart(IMFMediaTimeRange* This,DWORD index,double *start) {
 584    return This->lpVtbl->GetStart(This,index,start);
 585}
 586static inline HRESULT IMFMediaTimeRange_GetEnd(IMFMediaTimeRange* This,DWORD index,double *end) {
 587    return This->lpVtbl->GetEnd(This,index,end);
 588}
 589static inline WINBOOL IMFMediaTimeRange_ContainsTime(IMFMediaTimeRange* This,double time) {
 590    return This->lpVtbl->ContainsTime(This,time);
 591}
 592static inline HRESULT IMFMediaTimeRange_AddRange(IMFMediaTimeRange* This,double start,double end) {
 593    return This->lpVtbl->AddRange(This,start,end);
 594}
 595static 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
 613DEFINE_GUID(IID_IMFMediaEngine, 0x98a1b0bb, 0x03eb, 0x4935, 0xae,0x7c, 0x93,0xc1,0xfa,0x0e,0x1c,0x93);
 614#if defined(__cplusplus) && !defined(CINTERFACE)
 615MIDL_INTERFACE("98a1b0bb-03eb-4935-ae7c-93c1fa0e1c93")
 616IMFMediaEngine : 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
 755typedef 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
 927interface 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 ***/
 982static inline HRESULT IMFMediaEngine_QueryInterface(IMFMediaEngine* This,REFIID riid,void **ppvObject) {
 983    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
 984}
 985static inline ULONG IMFMediaEngine_AddRef(IMFMediaEngine* This) {
 986    return This->lpVtbl->AddRef(This);
 987}
 988static inline ULONG IMFMediaEngine_Release(IMFMediaEngine* This) {
 989    return This->lpVtbl->Release(This);
 990}
 991/*** IMFMediaEngine methods ***/
 992static inline HRESULT IMFMediaEngine_GetError(IMFMediaEngine* This,IMFMediaError **error) {
 993    return This->lpVtbl->GetError(This,error);
 994}
 995static inline HRESULT IMFMediaEngine_SetErrorCode(IMFMediaEngine* This,MF_MEDIA_ENGINE_ERR error) {
 996    return This->lpVtbl->SetErrorCode(This,error);
 997}
 998static inline HRESULT IMFMediaEngine_SetSourceElements(IMFMediaEngine* This,IMFMediaEngineSrcElements *elements) {
 999    return This->lpVtbl->SetSourceElements(This,elements);
1000}
1001static inline HRESULT IMFMediaEngine_SetSource(IMFMediaEngine* This,BSTR url) {
1002    return This->lpVtbl->SetSource(This,url);
1003}
1004static inline HRESULT IMFMediaEngine_GetCurrentSource(IMFMediaEngine* This,BSTR *url) {
1005    return This->lpVtbl->GetCurrentSource(This,url);
1006}
1007static inline USHORT IMFMediaEngine_GetNetworkState(IMFMediaEngine* This) {
1008    return This->lpVtbl->GetNetworkState(This);
1009}
1010static inline MF_MEDIA_ENGINE_PRELOAD IMFMediaEngine_GetPreload(IMFMediaEngine* This) {
1011    return This->lpVtbl->GetPreload(This);
1012}
1013static inline HRESULT IMFMediaEngine_SetPreload(IMFMediaEngine* This,MF_MEDIA_ENGINE_PRELOAD preload) {
1014    return This->lpVtbl->SetPreload(This,preload);
1015}
1016static inline HRESULT IMFMediaEngine_GetBuffered(IMFMediaEngine* This,IMFMediaTimeRange **buffered) {
1017    return This->lpVtbl->GetBuffered(This,buffered);
1018}
1019static inline HRESULT IMFMediaEngine_Load(IMFMediaEngine* This) {
1020    return This->lpVtbl->Load(This);
1021}
1022static inline HRESULT IMFMediaEngine_CanPlayType(IMFMediaEngine* This,BSTR type,MF_MEDIA_ENGINE_CANPLAY *answer) {
1023    return This->lpVtbl->CanPlayType(This,type,answer);
1024}
1025static inline USHORT IMFMediaEngine_GetReadyState(IMFMediaEngine* This) {
1026    return This->lpVtbl->GetReadyState(This);
1027}
1028static inline WINBOOL IMFMediaEngine_IsSeeking(IMFMediaEngine* This) {
1029    return This->lpVtbl->IsSeeking(This);
1030}
1031static inline double IMFMediaEngine_GetCurrentTime(IMFMediaEngine* This) {
1032    return This->lpVtbl->GetCurrentTime(This);
1033}
1034static inline HRESULT IMFMediaEngine_SetCurrentTime(IMFMediaEngine* This,double time) {
1035    return This->lpVtbl->SetCurrentTime(This,time);
1036}
1037static inline double IMFMediaEngine_GetStartTime(IMFMediaEngine* This) {
1038    return This->lpVtbl->GetStartTime(This);
1039}
1040static inline double IMFMediaEngine_GetDuration(IMFMediaEngine* This) {
1041    return This->lpVtbl->GetDuration(This);
1042}
1043static inline WINBOOL IMFMediaEngine_IsPaused(IMFMediaEngine* This) {
1044    return This->lpVtbl->IsPaused(This);
1045}
1046static inline double IMFMediaEngine_GetDefaultPlaybackRate(IMFMediaEngine* This) {
1047    return This->lpVtbl->GetDefaultPlaybackRate(This);
1048}
1049static inline HRESULT IMFMediaEngine_SetDefaultPlaybackRate(IMFMediaEngine* This,double rate) {
1050    return This->lpVtbl->SetDefaultPlaybackRate(This,rate);
1051}
1052static inline double IMFMediaEngine_GetPlaybackRate(IMFMediaEngine* This) {
1053    return This->lpVtbl->GetPlaybackRate(This);
1054}
1055static inline HRESULT IMFMediaEngine_SetPlaybackRate(IMFMediaEngine* This,double rate) {
1056    return This->lpVtbl->SetPlaybackRate(This,rate);
1057}
1058static inline HRESULT IMFMediaEngine_GetPlayed(IMFMediaEngine* This,IMFMediaTimeRange **played) {
1059    return This->lpVtbl->GetPlayed(This,played);
1060}
1061static inline HRESULT IMFMediaEngine_GetSeekable(IMFMediaEngine* This,IMFMediaTimeRange **seekable) {
1062    return This->lpVtbl->GetSeekable(This,seekable);
1063}
1064static inline WINBOOL IMFMediaEngine_IsEnded(IMFMediaEngine* This) {
1065    return This->lpVtbl->IsEnded(This);
1066}
1067static inline WINBOOL IMFMediaEngine_GetAutoPlay(IMFMediaEngine* This) {
1068    return This->lpVtbl->GetAutoPlay(This);
1069}
1070static inline HRESULT IMFMediaEngine_SetAutoPlay(IMFMediaEngine* This,WINBOOL autoplay) {
1071    return This->lpVtbl->SetAutoPlay(This,autoplay);
1072}
1073static inline WINBOOL IMFMediaEngine_GetLoop(IMFMediaEngine* This) {
1074    return This->lpVtbl->GetLoop(This);
1075}
1076static inline HRESULT IMFMediaEngine_SetLoop(IMFMediaEngine* This,WINBOOL loop) {
1077    return This->lpVtbl->SetLoop(This,loop);
1078}
1079static inline HRESULT IMFMediaEngine_Play(IMFMediaEngine* This) {
1080    return This->lpVtbl->Play(This);
1081}
1082static inline HRESULT IMFMediaEngine_Pause(IMFMediaEngine* This) {
1083    return This->lpVtbl->Pause(This);
1084}
1085static inline WINBOOL IMFMediaEngine_GetMuted(IMFMediaEngine* This) {
1086    return This->lpVtbl->GetMuted(This);
1087}
1088static inline HRESULT IMFMediaEngine_SetMuted(IMFMediaEngine* This,WINBOOL muted) {
1089    return This->lpVtbl->SetMuted(This,muted);
1090}
1091static inline double IMFMediaEngine_GetVolume(IMFMediaEngine* This) {
1092    return This->lpVtbl->GetVolume(This);
1093}
1094static inline HRESULT IMFMediaEngine_SetVolume(IMFMediaEngine* This,double volume) {
1095    return This->lpVtbl->SetVolume(This,volume);
1096}
1097static inline WINBOOL IMFMediaEngine_HasVideo(IMFMediaEngine* This) {
1098    return This->lpVtbl->HasVideo(This);
1099}
1100static inline WINBOOL IMFMediaEngine_HasAudio(IMFMediaEngine* This) {
1101    return This->lpVtbl->HasAudio(This);
1102}
1103static inline HRESULT IMFMediaEngine_GetNativeVideoSize(IMFMediaEngine* This,DWORD *cx,DWORD *cy) {
1104    return This->lpVtbl->GetNativeVideoSize(This,cx,cy);
1105}
1106static inline HRESULT IMFMediaEngine_GetVideoAspectRatio(IMFMediaEngine* This,DWORD *cx,DWORD *cy) {
1107    return This->lpVtbl->GetVideoAspectRatio(This,cx,cy);
1108}
1109static inline HRESULT IMFMediaEngine_Shutdown(IMFMediaEngine* This) {
1110    return This->lpVtbl->Shutdown(This);
1111}
1112static 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}
1115static 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
1126typedef 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;
1136typedef 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;
1141typedef 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
1151DEFINE_GUID(IID_IMFMediaEngineEx, 0x83015ead, 0xb1e6, 0x40d0, 0xa9,0x8a, 0x37,0x14,0x5f,0xfe,0x1a,0xd1);
1152#if defined(__cplusplus) && !defined(CINTERFACE)
1153MIDL_INTERFACE("83015ead-b1e6-40d0-a98a-37145ffe1ad1")
1154IMFMediaEngineEx : 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
1284typedef 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
1612interface 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 ***/
1705static inline HRESULT IMFMediaEngineEx_QueryInterface(IMFMediaEngineEx* This,REFIID riid,void **ppvObject) {
1706    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
1707}
1708static inline ULONG IMFMediaEngineEx_AddRef(IMFMediaEngineEx* This) {
1709    return This->lpVtbl->AddRef(This);
1710}
1711static inline ULONG IMFMediaEngineEx_Release(IMFMediaEngineEx* This) {
1712    return This->lpVtbl->Release(This);
1713}
1714/*** IMFMediaEngine methods ***/
1715static inline HRESULT IMFMediaEngineEx_GetError(IMFMediaEngineEx* This,IMFMediaError **error) {
1716    return This->lpVtbl->GetError(This,error);
1717}
1718static inline HRESULT IMFMediaEngineEx_SetErrorCode(IMFMediaEngineEx* This,MF_MEDIA_ENGINE_ERR error) {
1719    return This->lpVtbl->SetErrorCode(This,error);
1720}
1721static inline HRESULT IMFMediaEngineEx_SetSourceElements(IMFMediaEngineEx* This,IMFMediaEngineSrcElements *elements) {
1722    return This->lpVtbl->SetSourceElements(This,elements);
1723}
1724static inline HRESULT IMFMediaEngineEx_SetSource(IMFMediaEngineEx* This,BSTR url) {
1725    return This->lpVtbl->SetSource(This,url);
1726}
1727static inline HRESULT IMFMediaEngineEx_GetCurrentSource(IMFMediaEngineEx* This,BSTR *url) {
1728    return This->lpVtbl->GetCurrentSource(This,url);
1729}
1730static inline USHORT IMFMediaEngineEx_GetNetworkState(IMFMediaEngineEx* This) {
1731    return This->lpVtbl->GetNetworkState(This);
1732}
1733static inline MF_MEDIA_ENGINE_PRELOAD IMFMediaEngineEx_GetPreload(IMFMediaEngineEx* This) {
1734    return This->lpVtbl->GetPreload(This);
1735}
1736static inline HRESULT IMFMediaEngineEx_SetPreload(IMFMediaEngineEx* This,MF_MEDIA_ENGINE_PRELOAD preload) {
1737    return This->lpVtbl->SetPreload(This,preload);
1738}
1739static inline HRESULT IMFMediaEngineEx_GetBuffered(IMFMediaEngineEx* This,IMFMediaTimeRange **buffered) {
1740    return This->lpVtbl->GetBuffered(This,buffered);
1741}
1742static inline HRESULT IMFMediaEngineEx_Load(IMFMediaEngineEx* This) {
1743    return This->lpVtbl->Load(This);
1744}
1745static inline HRESULT IMFMediaEngineEx_CanPlayType(IMFMediaEngineEx* This,BSTR type,MF_MEDIA_ENGINE_CANPLAY *answer) {
1746    return This->lpVtbl->CanPlayType(This,type,answer);
1747}
1748static inline USHORT IMFMediaEngineEx_GetReadyState(IMFMediaEngineEx* This) {
1749    return This->lpVtbl->GetReadyState(This);
1750}
1751static inline WINBOOL IMFMediaEngineEx_IsSeeking(IMFMediaEngineEx* This) {
1752    return This->lpVtbl->IsSeeking(This);
1753}
1754static inline double IMFMediaEngineEx_GetCurrentTime(IMFMediaEngineEx* This) {
1755    return This->lpVtbl->GetCurrentTime(This);
1756}
1757static inline HRESULT IMFMediaEngineEx_SetCurrentTime(IMFMediaEngineEx* This,double time) {
1758    return This->lpVtbl->SetCurrentTime(This,time);
1759}
1760static inline double IMFMediaEngineEx_GetStartTime(IMFMediaEngineEx* This) {
1761    return This->lpVtbl->GetStartTime(This);
1762}
1763static inline double IMFMediaEngineEx_GetDuration(IMFMediaEngineEx* This) {
1764    return This->lpVtbl->GetDuration(This);
1765}
1766static inline WINBOOL IMFMediaEngineEx_IsPaused(IMFMediaEngineEx* This) {
1767    return This->lpVtbl->IsPaused(This);
1768}
1769static inline double IMFMediaEngineEx_GetDefaultPlaybackRate(IMFMediaEngineEx* This) {
1770    return This->lpVtbl->GetDefaultPlaybackRate(This);
1771}
1772static inline HRESULT IMFMediaEngineEx_SetDefaultPlaybackRate(IMFMediaEngineEx* This,double rate) {
1773    return This->lpVtbl->SetDefaultPlaybackRate(This,rate);
1774}
1775static inline double IMFMediaEngineEx_GetPlaybackRate(IMFMediaEngineEx* This) {
1776    return This->lpVtbl->GetPlaybackRate(This);
1777}
1778static inline HRESULT IMFMediaEngineEx_SetPlaybackRate(IMFMediaEngineEx* This,double rate) {
1779    return This->lpVtbl->SetPlaybackRate(This,rate);
1780}
1781static inline HRESULT IMFMediaEngineEx_GetPlayed(IMFMediaEngineEx* This,IMFMediaTimeRange **played) {
1782    return This->lpVtbl->GetPlayed(This,played);
1783}
1784static inline HRESULT IMFMediaEngineEx_GetSeekable(IMFMediaEngineEx* This,IMFMediaTimeRange **seekable) {
1785    return This->lpVtbl->GetSeekable(This,seekable);
1786}
1787static inline WINBOOL IMFMediaEngineEx_IsEnded(IMFMediaEngineEx* This) {
1788    return This->lpVtbl->IsEnded(This);
1789}
1790static inline WINBOOL IMFMediaEngineEx_GetAutoPlay(IMFMediaEngineEx* This) {
1791    return This->lpVtbl->GetAutoPlay(This);
1792}
1793static inline HRESULT IMFMediaEngineEx_SetAutoPlay(IMFMediaEngineEx* This,WINBOOL autoplay) {
1794    return This->lpVtbl->SetAutoPlay(This,autoplay);
1795}
1796static inline WINBOOL IMFMediaEngineEx_GetLoop(IMFMediaEngineEx* This) {
1797    return This->lpVtbl->GetLoop(This);
1798}
1799static inline HRESULT IMFMediaEngineEx_SetLoop(IMFMediaEngineEx* This,WINBOOL loop) {
1800    return This->lpVtbl->SetLoop(This,loop);
1801}
1802static inline HRESULT IMFMediaEngineEx_Play(IMFMediaEngineEx* This) {
1803    return This->lpVtbl->Play(This);
1804}
1805static inline HRESULT IMFMediaEngineEx_Pause(IMFMediaEngineEx* This) {
1806    return This->lpVtbl->Pause(This);
1807}
1808static inline WINBOOL IMFMediaEngineEx_GetMuted(IMFMediaEngineEx* This) {
1809    return This->lpVtbl->GetMuted(This);
1810}
1811static inline HRESULT IMFMediaEngineEx_SetMuted(IMFMediaEngineEx* This,WINBOOL muted) {
1812    return This->lpVtbl->SetMuted(This,muted);
1813}
1814static inline double IMFMediaEngineEx_GetVolume(IMFMediaEngineEx* This) {
1815    return This->lpVtbl->GetVolume(This);
1816}
1817static inline HRESULT IMFMediaEngineEx_SetVolume(IMFMediaEngineEx* This,double volume) {
1818    return This->lpVtbl->SetVolume(This,volume);
1819}
1820static inline WINBOOL IMFMediaEngineEx_HasVideo(IMFMediaEngineEx* This) {
1821    return This->lpVtbl->HasVideo(This);
1822}
1823static inline WINBOOL IMFMediaEngineEx_HasAudio(IMFMediaEngineEx* This) {
1824    return This->lpVtbl->HasAudio(This);
1825}
1826static inline HRESULT IMFMediaEngineEx_GetNativeVideoSize(IMFMediaEngineEx* This,DWORD *cx,DWORD *cy) {
1827    return This->lpVtbl->GetNativeVideoSize(This,cx,cy);
1828}
1829static inline HRESULT IMFMediaEngineEx_GetVideoAspectRatio(IMFMediaEngineEx* This,DWORD *cx,DWORD *cy) {
1830    return This->lpVtbl->GetVideoAspectRatio(This,cx,cy);
1831}
1832static inline HRESULT IMFMediaEngineEx_Shutdown(IMFMediaEngineEx* This) {
1833    return This->lpVtbl->Shutdown(This);
1834}
1835static 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}
1838static inline HRESULT IMFMediaEngineEx_OnVideoStreamTick(IMFMediaEngineEx* This,LONGLONG *time) {
1839    return This->lpVtbl->OnVideoStreamTick(This,time);
1840}
1841/*** IMFMediaEngineEx methods ***/
1842static inline HRESULT IMFMediaEngineEx_SetSourceFromByteStream(IMFMediaEngineEx* This,IMFByteStream *bytestream,BSTR url) {
1843    return This->lpVtbl->SetSourceFromByteStream(This,bytestream,url);
1844}
1845static inline HRESULT IMFMediaEngineEx_GetStatistics(IMFMediaEngineEx* This,MF_MEDIA_ENGINE_STATISTIC stat_id,PROPVARIANT *stat) {
1846    return This->lpVtbl->GetStatistics(This,stat_id,stat);
1847}
1848static 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}
1851static inline double IMFMediaEngineEx_GetBalance(IMFMediaEngineEx* This) {
1852    return This->lpVtbl->GetBalance(This);
1853}
1854static inline HRESULT IMFMediaEngineEx_SetBalance(IMFMediaEngineEx* This,double balance) {
1855    return This->lpVtbl->SetBalance(This,balance);
1856}
1857static inline WINBOOL IMFMediaEngineEx_IsPlaybackRateSupported(IMFMediaEngineEx* This,double rate) {
1858    return This->lpVtbl->IsPlaybackRateSupported(This,rate);
1859}
1860static inline HRESULT IMFMediaEngineEx_FrameStep(IMFMediaEngineEx* This,WINBOOL forward) {
1861    return This->lpVtbl->FrameStep(This,forward);
1862}
1863static inline HRESULT IMFMediaEngineEx_GetResourceCharacteristics(IMFMediaEngineEx* This,DWORD *flags) {
1864    return This->lpVtbl->GetResourceCharacteristics(This,flags);
1865}
1866static inline HRESULT IMFMediaEngineEx_GetPresentationAttribute(IMFMediaEngineEx* This,REFGUID attribute,PROPVARIANT *value) {
1867    return This->lpVtbl->GetPresentationAttribute(This,attribute,value);
1868}
1869static inline HRESULT IMFMediaEngineEx_GetNumberOfStreams(IMFMediaEngineEx* This,DWORD *stream_count) {
1870    return This->lpVtbl->GetNumberOfStreams(This,stream_count);
1871}
1872static inline HRESULT IMFMediaEngineEx_GetStreamAttribute(IMFMediaEngineEx* This,DWORD stream_index,REFGUID attribute,PROPVARIANT *value) {
1873    return This->lpVtbl->GetStreamAttribute(This,stream_index,attribute,value);
1874}
1875static inline HRESULT IMFMediaEngineEx_GetStreamSelection(IMFMediaEngineEx* This,DWORD stream_index,WINBOOL *enabled) {
1876    return This->lpVtbl->GetStreamSelection(This,stream_index,enabled);
1877}
1878static inline HRESULT IMFMediaEngineEx_SetStreamSelection(IMFMediaEngineEx* This,DWORD stream_index,WINBOOL enabled) {
1879    return This->lpVtbl->SetStreamSelection(This,stream_index,enabled);
1880}
1881static inline HRESULT IMFMediaEngineEx_ApplyStreamSelections(IMFMediaEngineEx* This) {
1882    return This->lpVtbl->ApplyStreamSelections(This);
1883}
1884static inline HRESULT IMFMediaEngineEx_IsProtected(IMFMediaEngineEx* This,WINBOOL *is_protected) {
1885    return This->lpVtbl->IsProtected(This,is_protected);
1886}
1887static inline HRESULT IMFMediaEngineEx_InsertVideoEffect(IMFMediaEngineEx* This,IUnknown *effect,WINBOOL is_optional) {
1888    return This->lpVtbl->InsertVideoEffect(This,effect,is_optional);
1889}
1890static inline HRESULT IMFMediaEngineEx_InsertAudioEffect(IMFMediaEngineEx* This,IUnknown *effect,WINBOOL is_optional) {
1891    return This->lpVtbl->InsertAudioEffect(This,effect,is_optional);
1892}
1893static inline HRESULT IMFMediaEngineEx_RemoveAllEffects(IMFMediaEngineEx* This) {
1894    return This->lpVtbl->RemoveAllEffects(This);
1895}
1896static inline HRESULT IMFMediaEngineEx_SetTimelineMarkerTimer(IMFMediaEngineEx* This,double timeout) {
1897    return This->lpVtbl->SetTimelineMarkerTimer(This,timeout);
1898}
1899static inline HRESULT IMFMediaEngineEx_GetTimelineMarkerTimer(IMFMediaEngineEx* This,double *timeout) {
1900    return This->lpVtbl->GetTimelineMarkerTimer(This,timeout);
1901}
1902static inline HRESULT IMFMediaEngineEx_CancelTimelineMarkerTimer(IMFMediaEngineEx* This) {
1903    return This->lpVtbl->CancelTimelineMarkerTimer(This);
1904}
1905static inline WINBOOL IMFMediaEngineEx_IsStereo3D(IMFMediaEngineEx* This) {
1906    return This->lpVtbl->IsStereo3D(This);
1907}
1908static inline HRESULT IMFMediaEngineEx_GetStereo3DFramePackingMode(IMFMediaEngineEx* This,MF_MEDIA_ENGINE_S3D_PACKING_MODE *mode) {
1909    return This->lpVtbl->GetStereo3DFramePackingMode(This,mode);
1910}
1911static inline HRESULT IMFMediaEngineEx_SetStereo3DFramePackingMode(IMFMediaEngineEx* This,MF_MEDIA_ENGINE_S3D_PACKING_MODE mode) {
1912    return This->lpVtbl->SetStereo3DFramePackingMode(This,mode);
1913}
1914static inline HRESULT IMFMediaEngineEx_GetStereo3DRenderMode(IMFMediaEngineEx* This,MF3DVideoOutputType *output_type) {
1915    return This->lpVtbl->GetStereo3DRenderMode(This,output_type);
1916}
1917static inline HRESULT IMFMediaEngineEx_SetStereo3DRenderMode(IMFMediaEngineEx* This,MF3DVideoOutputType output_type) {
1918    return This->lpVtbl->SetStereo3DRenderMode(This,output_type);
1919}
1920static inline HRESULT IMFMediaEngineEx_EnableWindowlessSwapchainMode(IMFMediaEngineEx* This,WINBOOL enable) {
1921    return This->lpVtbl->EnableWindowlessSwapchainMode(This,enable);
1922}
1923static inline HRESULT IMFMediaEngineEx_GetVideoSwapchainHandle(IMFMediaEngineEx* This,HANDLE *swapchain) {
1924    return This->lpVtbl->GetVideoSwapchainHandle(This,swapchain);
1925}
1926static inline HRESULT IMFMediaEngineEx_EnableHorizontalMirrorMode(IMFMediaEngineEx* This,WINBOOL enable) {
1927    return This->lpVtbl->EnableHorizontalMirrorMode(This,enable);
1928}
1929static inline HRESULT IMFMediaEngineEx_GetAudioStreamCategory(IMFMediaEngineEx* This,UINT32 *category) {
1930    return This->lpVtbl->GetAudioStreamCategory(This,category);
1931}
1932static inline HRESULT IMFMediaEngineEx_SetAudioStreamCategory(IMFMediaEngineEx* This,UINT32 category) {
1933    return This->lpVtbl->SetAudioStreamCategory(This,category);
1934}
1935static inline HRESULT IMFMediaEngineEx_GetAudioEndpointRole(IMFMediaEngineEx* This,UINT32 *role) {
1936    return This->lpVtbl->GetAudioEndpointRole(This,role);
1937}
1938static inline HRESULT IMFMediaEngineEx_SetAudioEndpointRole(IMFMediaEngineEx* This,UINT32 role) {
1939    return This->lpVtbl->SetAudioEndpointRole(This,role);
1940}
1941static inline HRESULT IMFMediaEngineEx_GetRealTimeMode(IMFMediaEngineEx* This,WINBOOL *enabled) {
1942    return This->lpVtbl->GetRealTimeMode(This,enabled);
1943}
1944static inline HRESULT IMFMediaEngineEx_SetRealTimeMode(IMFMediaEngineEx* This,WINBOOL enable) {
1945    return This->lpVtbl->SetRealTimeMode(This,enable);
1946}
1947static inline HRESULT IMFMediaEngineEx_SetCurrentTimeEx(IMFMediaEngineEx* This,double seektime,MF_MEDIA_ENGINE_SEEK_MODE mode) {
1948    return This->lpVtbl->SetCurrentTimeEx(This,seektime,mode);
1949}
1950static 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
1967DEFINE_GUID(IID_IMFMediaEngineClassFactory, 0x4d645ace, 0x26aa, 0x4688, 0x9b,0xe1, 0xdf,0x35,0x16,0x99,0x0b,0x93);
1968#if defined(__cplusplus) && !defined(CINTERFACE)
1969MIDL_INTERFACE("4d645ace-26aa-4688-9be1-df3516990b93")
1970IMFMediaEngineClassFactory : 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
1988typedef 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
2021interface 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 ***/
2037static inline HRESULT IMFMediaEngineClassFactory_QueryInterface(IMFMediaEngineClassFactory* This,REFIID riid,void **ppvObject) {
2038    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
2039}
2040static inline ULONG IMFMediaEngineClassFactory_AddRef(IMFMediaEngineClassFactory* This) {
2041    return This->lpVtbl->AddRef(This);
2042}
2043static inline ULONG IMFMediaEngineClassFactory_Release(IMFMediaEngineClassFactory* This) {
2044    return This->lpVtbl->Release(This);
2045}
2046/*** IMFMediaEngineClassFactory methods ***/
2047static inline HRESULT IMFMediaEngineClassFactory_CreateInstance(IMFMediaEngineClassFactory* This,DWORD flags,IMFAttributes *attributes,IMFMediaEngine **engine) {
2048    return This->lpVtbl->CreateInstance(This,flags,attributes,engine);
2049}
2050static inline HRESULT IMFMediaEngineClassFactory_CreateTimeRange(IMFMediaEngineClassFactory* This,IMFMediaTimeRange **range) {
2051    return This->lpVtbl->CreateTimeRange(This,range);
2052}
2053static 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
2070DEFINE_GUID(IID_IMFMediaEngineNotify, 0xfee7c112, 0xe776, 0x42b5, 0x9b,0xbf, 0x00,0x48,0x52,0x4e,0x2b,0xd5);
2071#if defined(__cplusplus) && !defined(CINTERFACE)
2072MIDL_INTERFACE("fee7c112-e776-42b5-9bbf-0048524e2bd5")
2073IMFMediaEngineNotify : 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
2085typedef 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
2110interface 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 ***/
2124static inline HRESULT IMFMediaEngineNotify_QueryInterface(IMFMediaEngineNotify* This,REFIID riid,void **ppvObject) {
2125    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
2126}
2127static inline ULONG IMFMediaEngineNotify_AddRef(IMFMediaEngineNotify* This) {
2128    return This->lpVtbl->AddRef(This);
2129}
2130static inline ULONG IMFMediaEngineNotify_Release(IMFMediaEngineNotify* This) {
2131    return This->lpVtbl->Release(This);
2132}
2133/*** IMFMediaEngineNotify methods ***/
2134static 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
2151DEFINE_GUID(IID_IMFMediaEngineAudioEndpointId, 0x7a3bac98, 0x0e76, 0x49fb, 0x8c,0x20, 0x8a,0x86,0xfd,0x98,0xea,0xf2);
2152#if defined(__cplusplus) && !defined(CINTERFACE)
2153MIDL_INTERFACE("7a3bac98-0e76-49fb-8c20-8a86fd98eaf2")
2154IMFMediaEngineAudioEndpointId : 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
2167typedef 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
2194interface 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 ***/
2209static inline HRESULT IMFMediaEngineAudioEndpointId_QueryInterface(IMFMediaEngineAudioEndpointId* This,REFIID riid,void **ppvObject) {
2210    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
2211}
2212static inline ULONG IMFMediaEngineAudioEndpointId_AddRef(IMFMediaEngineAudioEndpointId* This) {
2213    return This->lpVtbl->AddRef(This);
2214}
2215static inline ULONG IMFMediaEngineAudioEndpointId_Release(IMFMediaEngineAudioEndpointId* This) {
2216    return This->lpVtbl->Release(This);
2217}
2218/*** IMFMediaEngineAudioEndpointId methods ***/
2219static inline HRESULT IMFMediaEngineAudioEndpointId_SetAudioEndpointId(IMFMediaEngineAudioEndpointId* This,LPCWSTR id) {
2220    return This->lpVtbl->SetAudioEndpointId(This,id);
2221}
2222static 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
2239DEFINE_GUID(IID_IMFMediaEngineExtension, 0x2f69d622, 0x20b5, 0x41e9, 0xaf,0xdf, 0x89,0xce,0xd1,0xdd,0xa0,0x4e);
2240#if defined(__cplusplus) && !defined(CINTERFACE)
2241MIDL_INTERFACE("2f69d622-20b5-41e9-afdf-89ced1dda04e")
2242IMFMediaEngineExtension : 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
2269typedef 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
2312interface 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 ***/
2329static inline HRESULT IMFMediaEngineExtension_QueryInterface(IMFMediaEngineExtension* This,REFIID riid,void **ppvObject) {
2330    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
2331}
2332static inline ULONG IMFMediaEngineExtension_AddRef(IMFMediaEngineExtension* This) {
2333    return This->lpVtbl->AddRef(This);
2334}
2335static inline ULONG IMFMediaEngineExtension_Release(IMFMediaEngineExtension* This) {
2336    return This->lpVtbl->Release(This);
2337}
2338/*** IMFMediaEngineExtension methods ***/
2339static 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}
2342static 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}
2345static inline HRESULT IMFMediaEngineExtension_CancelObjectCreation(IMFMediaEngineExtension* This,IUnknown *cancel_cookie) {
2346    return This->lpVtbl->CancelObjectCreation(This,cancel_cookie);
2347}
2348static 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__ */