Added some missing WMF declarations.

git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/trunk@5603 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-headers/include/mfapi.h b/mingw-w64-headers/include/mfapi.h
index 119e453..3e99293 100644
--- a/mingw-w64-headers/include/mfapi.h
+++ b/mingw-w64-headers/include/mfapi.h
@@ -443,6 +443,17 @@
   GUID  formattype;
 } MT_ARBITRARY_HEADER;
 
+enum _MFT_ENUM_FLAG {
+  MFT_ENUM_FLAG_SYNCMFT          = 0x00000001,
+  MFT_ENUM_FLAG_ASYNCMFT         = 0x00000002,
+  MFT_ENUM_FLAG_HARDWARE         = 0x00000004,
+  MFT_ENUM_FLAG_FIELDOFUSE       = 0x00000008,
+  MFT_ENUM_FLAG_LOCALMFT         = 0x00000010,
+  MFT_ENUM_FLAG_TRANSCODE_ONLY   = 0x00000020,
+  MFT_ENUM_FLAG_SORTANDFILTER    = 0x00000040,
+  MFT_ENUM_FLAG_ALL              = 0x0000003F
+};
+
 HRESULT WINAPI MFCreateMFByteStreamOnStream(IStream *pStream,IMFByteStream **ppByteStream);
 HRESULT WINAPI MFGetMFTMerit(IUnknown *pMFT,UINT32 cbVerifier,const BYTE *verifier,DWORD *merit);
 HRESULT WINAPI MFGetPluginControl(IMFPluginControl **ppPluginControl);
diff --git a/mingw-w64-headers/include/mfidl.h b/mingw-w64-headers/include/mfidl.h
index 19be78b..9ed0eb1 100644
--- a/mingw-w64-headers/include/mfidl.h
+++ b/mingw-w64-headers/include/mfidl.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 1.5.22 from include/mfidl.idl - Do not edit ***/
+/*** Autogenerated by WIDL 1.5.24 from include/mfidl.idl - Do not edit ***/
 
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
 #define __REQUIRED_RPCNDR_H_VERSION__ 475
@@ -1454,6 +1454,14 @@
   WCHAR wszName[MAX_PATH];
 } MFRR_COMPONENT_HASH_INFO, *PMFRR_COMPONENT_HASH_INFO;
 EXTERN_GUID(MF_PD_DURATION, 0x6c990d33,0xbb8e,0x477a,0x85,0x98,0xd,0x5d,0x96,0xfc,0xd8,0x8a);
+typedef enum _MF_CONNECT_METHOD {
+    MF_CONNECT_DIRECT = 0x0,
+    MF_CONNECT_ALLOW_CONVERTER = 0x1,
+    MF_CONNECT_ALLOW_DECODER = 0x3,
+    MF_CONNECT_RESOLVE_INDEPENDENT_OUTPUTTYPES = 0x4,
+    MF_CONNECT_AS_OPTIONAL = 0x10000,
+    MF_CONNECT_AS_OPTIONAL_BRANCH = 0x20000
+} MF_CONNECT_METHOD;
 /*****************************************************************************
  * IMFMediaSession interface
  */
diff --git a/mingw-w64-headers/include/mfidl.idl b/mingw-w64-headers/include/mfidl.idl
index f435b50..9c3a2fc 100644
--- a/mingw-w64-headers/include/mfidl.idl
+++ b/mingw-w64-headers/include/mfidl.idl
@@ -132,6 +132,15 @@
 
 cpp_quote("EXTERN_GUID(MF_PD_DURATION, 0x6c990d33,0xbb8e,0x477a,0x85,0x98,0xd,0x5d,0x96,0xfc,0xd8,0x8a);")
 
+typedef enum _MF_CONNECT_METHOD {
+    MF_CONNECT_DIRECT                            = 0x00000000,
+    MF_CONNECT_ALLOW_CONVERTER                   = 0x00000001,
+    MF_CONNECT_ALLOW_DECODER                     = 0x00000003,
+    MF_CONNECT_RESOLVE_INDEPENDENT_OUTPUTTYPES   = 0x00000004,
+    MF_CONNECT_AS_OPTIONAL                       = 0x00010000,
+    MF_CONNECT_AS_OPTIONAL_BRANCH                = 0x00020000
+} MF_CONNECT_METHOD;
+
 [
     object,
     uuid(90377834-21d0-4dee-8214-ba2e3e6c1127),
diff --git a/mingw-w64-headers/include/mfobjects.h b/mingw-w64-headers/include/mfobjects.h
index d3cf429..2b5c576 100644
--- a/mingw-w64-headers/include/mfobjects.h
+++ b/mingw-w64-headers/include/mfobjects.h
@@ -87,6 +87,11 @@
 typedef interface IMFCollection IMFCollection;
 #endif
 
+#ifndef __IMFPluginControl_FWD_DEFINED__
+#define __IMFPluginControl_FWD_DEFINED__
+typedef interface IMFPluginControl IMFPluginControl;
+#endif
+
 /* Headers for imported files */
 
 #include <unknwn.h>
@@ -2304,6 +2309,10 @@
 
 #endif  /* __IMFMediaType_INTERFACE_DEFINED__ */
 
+#define MF_MEDIATYPE_EQUAL_MAJOR_TYPES          0x00000001
+#define MF_MEDIATYPE_EQUAL_FORMAT_TYPES         0x00000002
+#define MF_MEDIATYPE_EQUAL_FORMAT_DATA          0x00000004
+#define MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA     0x00000008
 /*****************************************************************************
  * IMFAudioMediaType interface
  */
@@ -2711,6 +2720,28 @@
     GUID guidMajorType;
     GUID guidSubtype;
 } MFT_REGISTER_TYPE_INFO;
+typedef enum _MFVideoFlags {
+    MFVideoFlag_PAD_TO_Mask = 0x1 | 0x2,
+    MFVideoFlag_PAD_TO_None = 0 * 0x1,
+    MFVideoFlag_PAD_TO_4x3 = 1 * 0x1,
+    MFVideoFlag_PAD_TO_16x9 = 2 * 0x1,
+    MFVideoFlag_SrcContentHintMask = (0x4 | 0x8) | 0x10,
+    MFVideoFlag_SrcContentHintNone = 0 * 0x4,
+    MFVideoFlag_SrcContentHint16x9 = 1 * 0x4,
+    MFVideoFlag_SrcContentHint235_1 = 2 * 0x4,
+    MFVideoFlag_AnalogProtected = 0x20,
+    MFVideoFlag_DigitallyProtected = 0x40,
+    MFVideoFlag_ProgressiveContent = 0x80,
+    MFVideoFlag_FieldRepeatCountMask = (0x100 | 0x200) | 0x400,
+    MFVideoFlag_FieldRepeatCountShift = 8,
+    MFVideoFlag_ProgressiveSeqReset = 0x800,
+    MFVideoFlag_PanScanEnabled = 0x20000,
+    MFVideoFlag_LowerFieldFirst = 0x40000,
+    MFVideoFlag_BottomUpLinearRep = 0x80000,
+    MFVideoFlags_DXVASurface = 0x100000,
+    MFVideoFlags_RenderTargetSurface = 0x400000,
+    MFVideoFlags_ForceQWORD = 0x7fffffff
+} MFVideoFlags;
 typedef struct _MFRatio {
     DWORD Numerator;
     DWORD Denominator;
@@ -2853,6 +2884,18 @@
     MFVideoCompressedInfo compressedInfo;
     MFVideoSurfaceInfo surfaceInfo;
 } MFVIDEOFORMAT;
+typedef enum _MFStandardVideoFormat {
+    MFStdVideoFormat_reserved = 0,
+    MFStdVideoFormat_NTSC = 1,
+    MFStdVideoFormat_PAL = 2,
+    MFStdVideoFormat_DVD_NTSC = 3,
+    MFStdVideoFormat_DVD_PAL = 4,
+    MFStdVideoFormat_DV_PAL = 5,
+    MFStdVideoFormat_DV_NTSC = 6,
+    MFStdVideoFormat_ATSC_SD480i = 7,
+    MFStdVideoFormat_ATSC_HD1080i = 8,
+    MFStdVideoFormat_ATSC_HD720p = 9
+} MFStandardVideoFormat;
 /*****************************************************************************
  * IMFVideoMediaType interface
  */
@@ -4549,6 +4592,38 @@
 
 #endif  /* __IMFByteStream_INTERFACE_DEFINED__ */
 
+#define MFBYTESTREAM_IS_READABLE                0x00000001
+#define MFBYTESTREAM_IS_WRITABLE                0x00000002
+#define MFBYTESTREAM_IS_SEEKABLE                0x00000004
+#define MFBYTESTREAM_IS_REMOTE                  0x00000008
+#define MFBYTESTREAM_IS_DIRECTORY               0x00000080
+#define MFBYTESTREAM_HAS_SLOW_SEEK              0x00000100
+#define MFBYTESTREAM_IS_PARTIALLY_DOWNLOADED    0x00000200
+#define MFBYTESTREAM_SHARE_WRITE                0x00000400
+#define MFBYTESTREAM_SEEK_FLAG_CANCEL_PENDING_IO  0x00000001
+EXTERN_GUID(MF_BYTESTREAM_ORIGIN_NAME,        0xfc358288,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);
+EXTERN_GUID(MF_BYTESTREAM_CONTENT_TYPE,       0xfc358289,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);
+EXTERN_GUID(MF_BYTESTREAM_DURATION,           0xfc35828a,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);
+EXTERN_GUID(MF_BYTESTREAM_LAST_MODIFIED_TIME, 0xfc35828b,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);
+EXTERN_GUID(MF_BYTESTREAM_IFO_FILE_URI,       0xfc35828c,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);
+EXTERN_GUID(MF_BYTESTREAM_DLNA_PROFILE_ID,    0xfc35828d,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);
+typedef enum MF_FILE_ACCESSMODE {
+    MF_ACCESSMODE_READ = 1,
+    MF_ACCESSMODE_WRITE = 2,
+    MF_ACCESSMODE_READWRITE = 3
+} MF_FILE_ACCESSMODE;
+typedef enum __WIDL_mmreg_h_generated_name_00000002 {
+    MF_OPENMODE_FAIL_IF_NOT_EXIST = 0,
+    MF_OPENMODE_FAIL_IF_EXIST = 1,
+    MF_OPENMODE_RESET_IF_EXIST = 2,
+    MF_OPENMODE_APPEND_IF_EXIST = 3,
+    MF_OPENMODE_DELETE_IF_EXIST = 4
+} MF_FILE_OPENMODE;
+typedef enum __WIDL_mmreg_h_generated_name_00000003 {
+    MF_FILEFLAGS_NONE = 0x0,
+    MF_FILEFLAGS_NOBUFFERING = 0x1,
+    MF_FILEFLAGS_ALLOW_WRITE_SHARING = 0x2
+} MF_FILE_FLAGS;
 /*****************************************************************************
  * IMFCollection interface
  */
@@ -4735,93 +4810,225 @@
 
 #endif  /* __IMFCollection_INTERFACE_DEFINED__ */
 
-typedef enum _MF_CONNECT_METHOD {
-  MF_CONNECT_DIRECT                            = 0x00000000,
-  MF_CONNECT_ALLOW_CONVERTER                   = 0x00000001,
-  MF_CONNECT_ALLOW_DECODER                     = 0x00000003,
-  MF_CONNECT_RESOLVE_INDEPENDENT_OUTPUTTYPES   = 0x00000004,
-  MF_CONNECT_AS_OPTIONAL                       = 0x00010000,
-  MF_CONNECT_AS_OPTIONAL_BRANCH                = 0x00020000 
-} MF_CONNECT_METHOD;
-
-typedef enum MF_FILE_ACCESSMODE {
-  MF_ACCESSMODE_READ        = 1,
-  MF_ACCESSMODE_WRITE       = 2,
-  MF_ACCESSMODE_READWRITE   = 3 
-} MF_FILE_ACCESSMODE;
-
-typedef enum  {
-  MF_FILEFLAGS_NONE                  = 0x00000000,
-  MF_FILEFLAGS_NOBUFFERING           = 0x00000001,
-  MF_FILEFLAGS_ALLOW_WRITE_SHARING   = 0x00000002 
-} MF_FILE_FLAGS;
-
-typedef enum  {
-  MF_OPENMODE_FAIL_IF_NOT_EXIST   = 0,
-  MF_OPENMODE_FAIL_IF_EXIST       = 1,
-  MF_OPENMODE_RESET_IF_EXIST      = 2,
-  MF_OPENMODE_APPEND_IF_EXIST     = 3,
-  MF_OPENMODE_DELETE_IF_EXIST     = 4 
-} MF_FILE_OPENMODE;
-
-#if (_WIN32_WINNT >= 0x0601)
-
 typedef enum _MF_Plugin_Type {
-  MF_Plugin_Type_MFT           = 0,
-  MF_Plugin_Type_MediaSource   = 1 
+    MF_Plugin_Type_MFT = 0,
+    MF_Plugin_Type_MediaSource = 1
 } MF_Plugin_Type;
+/*****************************************************************************
+ * IMFPluginControl interface
+ */
+#ifndef __IMFPluginControl_INTERFACE_DEFINED__
+#define __IMFPluginControl_INTERFACE_DEFINED__
 
-#endif /*(_WIN32_WINNT >= 0x0601)*/
+DEFINE_GUID(IID_IMFPluginControl, 0x5c6c44bf, 0x1db6, 0x435b, 0x92,0x49, 0xe8,0xcd,0x10,0xfd,0xec,0x96);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("5c6c44bf-1db6-435b-9249-e8cd10fdec96")
+IMFPluginControl : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetPreferredClsid(
+        DWORD pluginType,
+        LPCWSTR selector,
+        CLSID *clsid) = 0;
 
-typedef enum _MFStandardVideoFormat {
-  MFStdVideoFormat_reserved       = 0,
-  MFStdVideoFormat_NTSC,
-  MFStdVideoFormat_PAL,
-  MFStdVideoFormat_DVD_NTSC,
-  MFStdVideoFormat_DVD_PAL,
-  MFStdVideoFormat_DV_PAL,
-  MFStdVideoFormat_DV_NTSC,
-  MFStdVideoFormat_ATSC_SD480i,
-  MFStdVideoFormat_ATSC_HD1080i,
-  MFStdVideoFormat_ATSC_HD720p 
-} MFStandardVideoFormat;
+    virtual HRESULT STDMETHODCALLTYPE GetPreferredClsidByIndex(
+        DWORD pluginType,
+        DWORD index,
+        LPWSTR *selector,
+        CLSID *clsid) = 0;
 
-typedef enum _MFVideoFlags {
-  MFVideoFlag_PAD_TO_Mask             = 0x0001 | 0x0002,
-  MFVideoFlag_PAD_TO_None             = 0 * 0x0001,
-  MFVideoFlag_PAD_TO_4x3              = 1 * 0x0001,
-  MFVideoFlag_PAD_TO_16x9             = 2 * 0x0001,
-  MFVideoFlag_SrcContentHintMask      = 0x0004 | 0x0008 | 0x0010,
-  MFVideoFlag_SrcContentHintNone      = 0 * 0x0004,
-  MFVideoFlag_SrcContentHint16x9      = 1 * 0x0004,
-  MFVideoFlag_SrcContentHint235_1     = 2 * 0x0004,
-  MFVideoFlag_AnalogProtected         = 0x0020,
-  MFVideoFlag_DigitallyProtected      = 0x0040,
-  MFVideoFlag_ProgressiveContent      = 0x0080,
-  MFVideoFlag_FieldRepeatCountMask    = 0x0100 | 0x0200 | 0x0400,
-  MFVideoFlag_FieldRepeatCountShift   = 8,
-  MFVideoFlag_ProgressiveSeqReset     = 0x0800,
-  MFVideoFlag_PanScanEnabled          = 0x20000,
-  MFVideoFlag_LowerFieldFirst         = 0x40000,
-  MFVideoFlag_BottomUpLinearRep       = 0x80000,
-  MFVideoFlags_DXVASurface            = 0x100000,
-  MFVideoFlags_RenderTargetSurface    = 0x400000,
-  MFVideoFlags_ForceQWORD             = 0x7FFFFFFF 
-} MFVideoFlags;
+    virtual HRESULT STDMETHODCALLTYPE SetPreferredClsid(
+        DWORD pluginType,
+        LPCWSTR selector,
+        const CLSID *clsid) = 0;
 
-#define MF_MEDIATYPE_EQUAL_MAJOR_TYPES          0x00000001
-#define MF_MEDIATYPE_EQUAL_FORMAT_TYPES         0x00000002
-#define MF_MEDIATYPE_EQUAL_FORMAT_DATA          0x00000004
-#define MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA     0x00000008
+    virtual HRESULT STDMETHODCALLTYPE IsDisabled(
+        DWORD pluginType,
+        REFCLSID clsid) = 0;
 
-#define MFBYTESTREAM_IS_READABLE                0x00000001
-#define MFBYTESTREAM_IS_WRITABLE                0x00000002
-#define MFBYTESTREAM_IS_SEEKABLE                0x00000004
-#define MFBYTESTREAM_IS_REMOTE                  0x00000008
-#define MFBYTESTREAM_IS_DIRECTORY               0x00000080
-#define MFBYTESTREAM_HAS_SLOW_SEEK              0x00000100
-#define MFBYTESTREAM_IS_PARTIALLY_DOWNLOADED    0x00000200
-#define MFBYTESTREAM_SHARE_WRITE                0x00000400
+    virtual HRESULT STDMETHODCALLTYPE GetDisabledByIndex(
+        DWORD pluginType,
+        DWORD index,
+        CLSID *clsid) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDisabled(
+        DWORD pluginType,
+        REFCLSID clsid,
+        WINBOOL disabled) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFPluginControl, 0x5c6c44bf, 0x1db6, 0x435b, 0x92,0x49, 0xe8,0xcd,0x10,0xfd,0xec,0x96)
+#endif
+#else
+typedef struct IMFPluginControlVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFPluginControl* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFPluginControl* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFPluginControl* This);
+
+    /*** IMFPluginControl methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetPreferredClsid)(
+        IMFPluginControl* This,
+        DWORD pluginType,
+        LPCWSTR selector,
+        CLSID *clsid);
+
+    HRESULT (STDMETHODCALLTYPE *GetPreferredClsidByIndex)(
+        IMFPluginControl* This,
+        DWORD pluginType,
+        DWORD index,
+        LPWSTR *selector,
+        CLSID *clsid);
+
+    HRESULT (STDMETHODCALLTYPE *SetPreferredClsid)(
+        IMFPluginControl* This,
+        DWORD pluginType,
+        LPCWSTR selector,
+        const CLSID *clsid);
+
+    HRESULT (STDMETHODCALLTYPE *IsDisabled)(
+        IMFPluginControl* This,
+        DWORD pluginType,
+        REFCLSID clsid);
+
+    HRESULT (STDMETHODCALLTYPE *GetDisabledByIndex)(
+        IMFPluginControl* This,
+        DWORD pluginType,
+        DWORD index,
+        CLSID *clsid);
+
+    HRESULT (STDMETHODCALLTYPE *SetDisabled)(
+        IMFPluginControl* This,
+        DWORD pluginType,
+        REFCLSID clsid,
+        WINBOOL disabled);
+
+    END_INTERFACE
+} IMFPluginControlVtbl;
+interface IMFPluginControl {
+    CONST_VTBL IMFPluginControlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFPluginControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFPluginControl_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFPluginControl_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFPluginControl methods ***/
+#define IMFPluginControl_GetPreferredClsid(This,pluginType,selector,clsid) (This)->lpVtbl->GetPreferredClsid(This,pluginType,selector,clsid)
+#define IMFPluginControl_GetPreferredClsidByIndex(This,pluginType,index,selector,clsid) (This)->lpVtbl->GetPreferredClsidByIndex(This,pluginType,index,selector,clsid)
+#define IMFPluginControl_SetPreferredClsid(This,pluginType,selector,clsid) (This)->lpVtbl->SetPreferredClsid(This,pluginType,selector,clsid)
+#define IMFPluginControl_IsDisabled(This,pluginType,clsid) (This)->lpVtbl->IsDisabled(This,pluginType,clsid)
+#define IMFPluginControl_GetDisabledByIndex(This,pluginType,index,clsid) (This)->lpVtbl->GetDisabledByIndex(This,pluginType,index,clsid)
+#define IMFPluginControl_SetDisabled(This,pluginType,clsid,disabled) (This)->lpVtbl->SetDisabled(This,pluginType,clsid,disabled)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMFPluginControl_QueryInterface(IMFPluginControl* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMFPluginControl_AddRef(IMFPluginControl* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMFPluginControl_Release(IMFPluginControl* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFPluginControl methods ***/
+static FORCEINLINE HRESULT IMFPluginControl_GetPreferredClsid(IMFPluginControl* This,DWORD pluginType,LPCWSTR selector,CLSID *clsid) {
+    return This->lpVtbl->GetPreferredClsid(This,pluginType,selector,clsid);
+}
+static FORCEINLINE HRESULT IMFPluginControl_GetPreferredClsidByIndex(IMFPluginControl* This,DWORD pluginType,DWORD index,LPWSTR *selector,CLSID *clsid) {
+    return This->lpVtbl->GetPreferredClsidByIndex(This,pluginType,index,selector,clsid);
+}
+static FORCEINLINE HRESULT IMFPluginControl_SetPreferredClsid(IMFPluginControl* This,DWORD pluginType,LPCWSTR selector,const CLSID *clsid) {
+    return This->lpVtbl->SetPreferredClsid(This,pluginType,selector,clsid);
+}
+static FORCEINLINE HRESULT IMFPluginControl_IsDisabled(IMFPluginControl* This,DWORD pluginType,REFCLSID clsid) {
+    return This->lpVtbl->IsDisabled(This,pluginType,clsid);
+}
+static FORCEINLINE HRESULT IMFPluginControl_GetDisabledByIndex(IMFPluginControl* This,DWORD pluginType,DWORD index,CLSID *clsid) {
+    return This->lpVtbl->GetDisabledByIndex(This,pluginType,index,clsid);
+}
+static FORCEINLINE HRESULT IMFPluginControl_SetDisabled(IMFPluginControl* This,DWORD pluginType,REFCLSID clsid,WINBOOL disabled) {
+    return This->lpVtbl->SetDisabled(This,pluginType,clsid,disabled);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMFPluginControl_GetPreferredClsid_Proxy(
+    IMFPluginControl* This,
+    DWORD pluginType,
+    LPCWSTR selector,
+    CLSID *clsid);
+void __RPC_STUB IMFPluginControl_GetPreferredClsid_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFPluginControl_GetPreferredClsidByIndex_Proxy(
+    IMFPluginControl* This,
+    DWORD pluginType,
+    DWORD index,
+    LPWSTR *selector,
+    CLSID *clsid);
+void __RPC_STUB IMFPluginControl_GetPreferredClsidByIndex_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFPluginControl_SetPreferredClsid_Proxy(
+    IMFPluginControl* This,
+    DWORD pluginType,
+    LPCWSTR selector,
+    const CLSID *clsid);
+void __RPC_STUB IMFPluginControl_SetPreferredClsid_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFPluginControl_IsDisabled_Proxy(
+    IMFPluginControl* This,
+    DWORD pluginType,
+    REFCLSID clsid);
+void __RPC_STUB IMFPluginControl_IsDisabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFPluginControl_GetDisabledByIndex_Proxy(
+    IMFPluginControl* This,
+    DWORD pluginType,
+    DWORD index,
+    CLSID *clsid);
+void __RPC_STUB IMFPluginControl_GetDisabledByIndex_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFPluginControl_SetDisabled_Proxy(
+    IMFPluginControl* This,
+    DWORD pluginType,
+    REFCLSID clsid,
+    WINBOOL disabled);
+void __RPC_STUB IMFPluginControl_SetDisabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMFPluginControl_INTERFACE_DEFINED__ */
+
 /* Begin additional prototypes for all interfaces */
 
 ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
diff --git a/mingw-w64-headers/include/mfobjects.idl b/mingw-w64-headers/include/mfobjects.idl
index 767f46f..a9d744e 100644
--- a/mingw-w64-headers/include/mfobjects.idl
+++ b/mingw-w64-headers/include/mfobjects.idl
@@ -143,6 +143,11 @@
     HRESULT FreeRepresentation([in] GUID guidRepresentation, [in] LPVOID pvRepresentation);
 }
 
+cpp_quote("#define MF_MEDIATYPE_EQUAL_MAJOR_TYPES          0x00000001")
+cpp_quote("#define MF_MEDIATYPE_EQUAL_FORMAT_TYPES         0x00000002")
+cpp_quote("#define MF_MEDIATYPE_EQUAL_FORMAT_DATA          0x00000004")
+cpp_quote("#define MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA     0x00000008")
+
 [
     object,
     uuid(26a0adc3-ce26-4672-9304-69552edd3faf),
@@ -158,6 +163,29 @@
     GUID guidSubtype;
 } MFT_REGISTER_TYPE_INFO;
 
+typedef enum _MFVideoFlags {
+    MFVideoFlag_PAD_TO_Mask             = 0x0001 | 0x0002,
+    MFVideoFlag_PAD_TO_None             = 0 * 0x0001,
+    MFVideoFlag_PAD_TO_4x3              = 1 * 0x0001,
+    MFVideoFlag_PAD_TO_16x9             = 2 * 0x0001,
+    MFVideoFlag_SrcContentHintMask      = 0x0004 | 0x0008 | 0x0010,
+    MFVideoFlag_SrcContentHintNone      = 0 * 0x0004,
+    MFVideoFlag_SrcContentHint16x9      = 1 * 0x0004,
+    MFVideoFlag_SrcContentHint235_1     = 2 * 0x0004,
+    MFVideoFlag_AnalogProtected         = 0x0020,
+    MFVideoFlag_DigitallyProtected      = 0x0040,
+    MFVideoFlag_ProgressiveContent      = 0x0080,
+    MFVideoFlag_FieldRepeatCountMask    = 0x0100 | 0x0200 | 0x0400,
+    MFVideoFlag_FieldRepeatCountShift   = 8,
+    MFVideoFlag_ProgressiveSeqReset     = 0x0800,
+    MFVideoFlag_PanScanEnabled          = 0x20000,
+    MFVideoFlag_LowerFieldFirst         = 0x40000,
+    MFVideoFlag_BottomUpLinearRep       = 0x80000,
+    MFVideoFlags_DXVASurface            = 0x100000,
+    MFVideoFlags_RenderTargetSurface    = 0x400000,
+    MFVideoFlags_ForceQWORD             = 0x7FFFFFFF
+} MFVideoFlags;
+
 typedef struct _MFRatio {
     DWORD Numerator;
     DWORD Denominator;
@@ -325,6 +353,19 @@
     MFVideoSurfaceInfo    surfaceInfo;
 } MFVIDEOFORMAT;
 
+typedef enum _MFStandardVideoFormat {
+  MFStdVideoFormat_reserved       = 0,
+  MFStdVideoFormat_NTSC,
+  MFStdVideoFormat_PAL,
+  MFStdVideoFormat_DVD_NTSC,
+  MFStdVideoFormat_DVD_PAL,
+  MFStdVideoFormat_DV_PAL,
+  MFStdVideoFormat_DV_NTSC,
+  MFStdVideoFormat_ATSC_SD480i,
+  MFStdVideoFormat_ATSC_HD1080i,
+  MFStdVideoFormat_ATSC_HD720p
+} MFStandardVideoFormat;
+
 [
     object,
     uuid(b99f381f-a8f9-47a2-a5af-ca3a225a3890),
@@ -446,6 +487,44 @@
     HRESULT Close();
 }
 
+cpp_quote("#define MFBYTESTREAM_IS_READABLE                0x00000001")
+cpp_quote("#define MFBYTESTREAM_IS_WRITABLE                0x00000002")
+cpp_quote("#define MFBYTESTREAM_IS_SEEKABLE                0x00000004")
+cpp_quote("#define MFBYTESTREAM_IS_REMOTE                  0x00000008")
+cpp_quote("#define MFBYTESTREAM_IS_DIRECTORY               0x00000080")
+cpp_quote("#define MFBYTESTREAM_HAS_SLOW_SEEK              0x00000100")
+cpp_quote("#define MFBYTESTREAM_IS_PARTIALLY_DOWNLOADED    0x00000200")
+cpp_quote("#define MFBYTESTREAM_SHARE_WRITE                0x00000400")
+
+cpp_quote("#define MFBYTESTREAM_SEEK_FLAG_CANCEL_PENDING_IO  0x00000001")
+
+cpp_quote("EXTERN_GUID(MF_BYTESTREAM_ORIGIN_NAME,        0xfc358288,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);")
+cpp_quote("EXTERN_GUID(MF_BYTESTREAM_CONTENT_TYPE,       0xfc358289,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);")
+cpp_quote("EXTERN_GUID(MF_BYTESTREAM_DURATION,           0xfc35828a,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);")
+cpp_quote("EXTERN_GUID(MF_BYTESTREAM_LAST_MODIFIED_TIME, 0xfc35828b,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);")
+cpp_quote("EXTERN_GUID(MF_BYTESTREAM_IFO_FILE_URI,       0xfc35828c,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);")
+cpp_quote("EXTERN_GUID(MF_BYTESTREAM_DLNA_PROFILE_ID,    0xfc35828d,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);")
+
+typedef enum MF_FILE_ACCESSMODE {
+    MF_ACCESSMODE_READ      = 1,
+    MF_ACCESSMODE_WRITE     = 2,
+    MF_ACCESSMODE_READWRITE = 3 
+} MF_FILE_ACCESSMODE;
+
+typedef enum  {
+    MF_OPENMODE_FAIL_IF_NOT_EXIST   = 0,
+    MF_OPENMODE_FAIL_IF_EXIST       = 1,
+    MF_OPENMODE_RESET_IF_EXIST      = 2,
+    MF_OPENMODE_APPEND_IF_EXIST     = 3,
+    MF_OPENMODE_DELETE_IF_EXIST     = 4 
+} MF_FILE_OPENMODE;
+
+typedef enum  {
+    MF_FILEFLAGS_NONE                  = 0x00000000,
+    MF_FILEFLAGS_NOBUFFERING           = 0x00000001,
+    MF_FILEFLAGS_ALLOW_WRITE_SHARING   = 0x00000002 
+} MF_FILE_FLAGS;
+
 [
     object,
     uuid(5bc8a76b-869a-46a3-9b03-fa218a66aebe)
@@ -460,90 +539,23 @@
     HRESULT RemoveAllElements();
 }
 
-cpp_quote("typedef enum _MF_CONNECT_METHOD {")
-cpp_quote("  MF_CONNECT_DIRECT                            = 0x00000000,")
-cpp_quote("  MF_CONNECT_ALLOW_CONVERTER                   = 0x00000001,")
-cpp_quote("  MF_CONNECT_ALLOW_DECODER                     = 0x00000003,")
-cpp_quote("  MF_CONNECT_RESOLVE_INDEPENDENT_OUTPUTTYPES   = 0x00000004,")
-cpp_quote("  MF_CONNECT_AS_OPTIONAL                       = 0x00010000,")
-cpp_quote("  MF_CONNECT_AS_OPTIONAL_BRANCH                = 0x00020000 ")
-cpp_quote("} MF_CONNECT_METHOD;")
-cpp_quote("")
-cpp_quote("typedef enum MF_FILE_ACCESSMODE {")
-cpp_quote("  MF_ACCESSMODE_READ        = 1,")
-cpp_quote("  MF_ACCESSMODE_WRITE       = 2,")
-cpp_quote("  MF_ACCESSMODE_READWRITE   = 3 ")
-cpp_quote("} MF_FILE_ACCESSMODE;")
-cpp_quote("")
-cpp_quote("typedef enum  {")
-cpp_quote("  MF_FILEFLAGS_NONE                  = 0x00000000,")
-cpp_quote("  MF_FILEFLAGS_NOBUFFERING           = 0x00000001,")
-cpp_quote("  MF_FILEFLAGS_ALLOW_WRITE_SHARING   = 0x00000002 ")
-cpp_quote("} MF_FILE_FLAGS;")
-cpp_quote("")
-cpp_quote("typedef enum  {")
-cpp_quote("  MF_OPENMODE_FAIL_IF_NOT_EXIST   = 0,")
-cpp_quote("  MF_OPENMODE_FAIL_IF_EXIST       = 1,")
-cpp_quote("  MF_OPENMODE_RESET_IF_EXIST      = 2,")
-cpp_quote("  MF_OPENMODE_APPEND_IF_EXIST     = 3,")
-cpp_quote("  MF_OPENMODE_DELETE_IF_EXIST     = 4 ")
-cpp_quote("} MF_FILE_OPENMODE;")
-cpp_quote("")
-cpp_quote("#if (_WIN32_WINNT >= 0x0601)")
-cpp_quote("")
-cpp_quote("typedef enum _MF_Plugin_Type {")
-cpp_quote("  MF_Plugin_Type_MFT           = 0,")
-cpp_quote("  MF_Plugin_Type_MediaSource   = 1 ")
-cpp_quote("} MF_Plugin_Type;")
-cpp_quote("")
-cpp_quote("#endif /*(_WIN32_WINNT >= 0x0601)*/")
-cpp_quote("")
-cpp_quote("typedef enum _MFStandardVideoFormat {")
-cpp_quote("  MFStdVideoFormat_reserved       = 0,")
-cpp_quote("  MFStdVideoFormat_NTSC,")
-cpp_quote("  MFStdVideoFormat_PAL,")
-cpp_quote("  MFStdVideoFormat_DVD_NTSC,")
-cpp_quote("  MFStdVideoFormat_DVD_PAL,")
-cpp_quote("  MFStdVideoFormat_DV_PAL,")
-cpp_quote("  MFStdVideoFormat_DV_NTSC,")
-cpp_quote("  MFStdVideoFormat_ATSC_SD480i,")
-cpp_quote("  MFStdVideoFormat_ATSC_HD1080i,")
-cpp_quote("  MFStdVideoFormat_ATSC_HD720p ")
-cpp_quote("} MFStandardVideoFormat;")
-cpp_quote("")
-cpp_quote("typedef enum _MFVideoFlags {")
-cpp_quote("  MFVideoFlag_PAD_TO_Mask             = 0x0001 | 0x0002,")
-cpp_quote("  MFVideoFlag_PAD_TO_None             = 0 * 0x0001,")
-cpp_quote("  MFVideoFlag_PAD_TO_4x3              = 1 * 0x0001,")
-cpp_quote("  MFVideoFlag_PAD_TO_16x9             = 2 * 0x0001,")
-cpp_quote("  MFVideoFlag_SrcContentHintMask      = 0x0004 | 0x0008 | 0x0010,")
-cpp_quote("  MFVideoFlag_SrcContentHintNone      = 0 * 0x0004,")
-cpp_quote("  MFVideoFlag_SrcContentHint16x9      = 1 * 0x0004,")
-cpp_quote("  MFVideoFlag_SrcContentHint235_1     = 2 * 0x0004,")
-cpp_quote("  MFVideoFlag_AnalogProtected         = 0x0020,")
-cpp_quote("  MFVideoFlag_DigitallyProtected      = 0x0040,")
-cpp_quote("  MFVideoFlag_ProgressiveContent      = 0x0080,")
-cpp_quote("  MFVideoFlag_FieldRepeatCountMask    = 0x0100 | 0x0200 | 0x0400,")
-cpp_quote("  MFVideoFlag_FieldRepeatCountShift   = 8,")
-cpp_quote("  MFVideoFlag_ProgressiveSeqReset     = 0x0800,")
-cpp_quote("  MFVideoFlag_PanScanEnabled          = 0x20000,")
-cpp_quote("  MFVideoFlag_LowerFieldFirst         = 0x40000,")
-cpp_quote("  MFVideoFlag_BottomUpLinearRep       = 0x80000,")
-cpp_quote("  MFVideoFlags_DXVASurface            = 0x100000,")
-cpp_quote("  MFVideoFlags_RenderTargetSurface    = 0x400000,")
-cpp_quote("  MFVideoFlags_ForceQWORD             = 0x7FFFFFFF ")
-cpp_quote("} MFVideoFlags;")
-cpp_quote("")
-cpp_quote("#define MF_MEDIATYPE_EQUAL_MAJOR_TYPES          0x00000001")
-cpp_quote("#define MF_MEDIATYPE_EQUAL_FORMAT_TYPES         0x00000002")
-cpp_quote("#define MF_MEDIATYPE_EQUAL_FORMAT_DATA          0x00000004")
-cpp_quote("#define MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA     0x00000008")
-cpp_quote("")
-cpp_quote("#define MFBYTESTREAM_IS_READABLE                0x00000001")
-cpp_quote("#define MFBYTESTREAM_IS_WRITABLE                0x00000002")
-cpp_quote("#define MFBYTESTREAM_IS_SEEKABLE                0x00000004")
-cpp_quote("#define MFBYTESTREAM_IS_REMOTE                  0x00000008")
-cpp_quote("#define MFBYTESTREAM_IS_DIRECTORY               0x00000080")
-cpp_quote("#define MFBYTESTREAM_HAS_SLOW_SEEK              0x00000100")
-cpp_quote("#define MFBYTESTREAM_IS_PARTIALLY_DOWNLOADED    0x00000200")
-cpp_quote("#define MFBYTESTREAM_SHARE_WRITE                0x00000400")
+typedef enum _MF_Plugin_Type {
+    MF_Plugin_Type_MFT           = 0,
+    MF_Plugin_Type_MediaSource   = 1
+} MF_Plugin_Type;
+
+[
+    object,
+    local,
+    uuid(5c6c44bf-1db6-435b-9249-e8cd10fdec96),
+    pointer_default(unique)
+]
+interface IMFPluginControl : IUnknown
+{
+   HRESULT GetPreferredClsid(DWORD pluginType, LPCWSTR selector, CLSID *clsid);
+   HRESULT GetPreferredClsidByIndex(DWORD pluginType, DWORD index, LPWSTR *selector, CLSID *clsid);
+   HRESULT SetPreferredClsid(DWORD pluginType, LPCWSTR selector, const CLSID *clsid);
+   HRESULT IsDisabled(DWORD pluginType, REFCLSID clsid);
+   HRESULT GetDisabledByIndex(DWORD pluginType, DWORD index, CLSID *clsid);
+   HRESULT SetDisabled(DWORD pluginType, REFCLSID clsid, BOOL disabled);
+}
diff --git a/mingw-w64-headers/include/mfplay.h b/mingw-w64-headers/include/mfplay.h
index 0263a5f..89680d9 100644
--- a/mingw-w64-headers/include/mfplay.h
+++ b/mingw-w64-headers/include/mfplay.h
@@ -32,17 +32,6 @@
   MFP_CREDENTIAL_LOGGED_ON_USER   = 0x00000020 
 } _MFP_CREDENTIAL_FLAGS;
 
-enum _MFT_ENUM_FLAG {
-  MFT_ENUM_FLAG_SYNCMFT          = 0x00000001,
-  MFT_ENUM_FLAG_ASYNCMFT         = 0x00000002,
-  MFT_ENUM_FLAG_HARDWARE         = 0x00000004,
-  MFT_ENUM_FLAG_FIELDOFUSE       = 0x00000008,
-  MFT_ENUM_FLAG_LOCALMFT         = 0x00000010,
-  MFT_ENUM_FLAG_TRANSCODE_ONLY   = 0x00000020,
-  MFT_ENUM_FLAG_SORTANDFILTER    = 0x00000040,
-  MFT_ENUM_FLAG_ALL              = 0x0000003F 
-};
-
 typedef enum MFP_EVENT_TYPE {
   MFP_EVENT_TYPE_PLAY                      = 0,
   MFP_EVENT_TYPE_PAUSE                     = 1,
diff --git a/mingw-w64-headers/include/mfreadwrite.h b/mingw-w64-headers/include/mfreadwrite.h
index 14445aa..5ca6a77 100644
--- a/mingw-w64-headers/include/mfreadwrite.h
+++ b/mingw-w64-headers/include/mfreadwrite.h
@@ -27,6 +27,11 @@
 typedef interface IMFSinkWriter IMFSinkWriter;
 #endif
 
+#ifndef __IMFSourceReaderCallback_FWD_DEFINED__
+#define __IMFSourceReaderCallback_FWD_DEFINED__
+typedef interface IMFSourceReaderCallback IMFSourceReaderCallback;
+#endif
+
 /* Headers for imported files */
 
 #include <mfobjects.h>
@@ -35,6 +40,13 @@
 extern "C" {
 #endif
 
+EXTERN_GUID(MF_SOURCE_READER_ASYNC_CALLBACK, 0x1e3dbeac,0xbb43,0x4c35,0xb5,0x07,0xcd,0x64,0x44,0x64,0xc9,0x65);
+EXTERN_GUID(MF_SOURCE_READER_D3D_MANAGER, 0xec822da2,0xe1e9,0x4b29,0xa0,0xd8,0x56,0x3c,0x71,0x9f,0x52,0x69);
+EXTERN_GUID(MF_SOURCE_READER_DISABLE_DXVA, 0xaa456cfd,0x3943,0x4a1e,0xa7,0x7d,0x18,0x38,0xc0,0xea,0x2e,0x35);
+EXTERN_GUID(MF_SOURCE_READER_MEDIASOURCE_CONFIG, 0x9085abeb,0x0354,0x48f9,0xab,0xb5,0x20,0x0d,0xf8,0x38,0xc6,0x8e);
+EXTERN_GUID(MF_SOURCE_READER_MEDIASOURCE_CHARACTERISTICS, 0x6d23f5c8,0xc5d7,0x4a9b,0x99,0x71,0x5d,0x11,0xf8,0xbc,0xa8,0x80);
+EXTERN_GUID(MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING, 0xfb394f3d,0xccf1,0x42ee,0xbb,0xb3,0xf9,0xb8,0x45,0xd5,0x68,0x1d);
+EXTERN_GUID(MF_SOURCE_READER_DISCONNECT_MEDIASOURCE_ON_SHUTDOWN, 0x56b67165,0x219e,0x456d,0xa2,0x2e,0x2d,0x30,0x04,0xc7,0xfe,0x56);
 typedef enum MF_SOURCE_READER_FLAG {
     MF_SOURCE_READERF_ERROR = 0x1,
     MF_SOURCE_READERF_ENDOFSTREAM = 0x2,
@@ -679,7 +691,143 @@
 
 #endif  /* __IMFSinkWriter_INTERFACE_DEFINED__ */
 
-EXTERN_GUID( MF_SOURCE_READER_MEDIASOURCE_CHARACTERISTICS, 0x6d23f5c8,0xc5d7,0x4a9b,0x99,0x71,0x5d,0x11,0xf8,0xbc,0xa8,0x80);
+/*****************************************************************************
+ * IMFSourceReaderCallback interface
+ */
+#ifndef __IMFSourceReaderCallback_INTERFACE_DEFINED__
+#define __IMFSourceReaderCallback_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IMFSourceReaderCallback, 0xdeec8d99, 0xfa1d, 0x4d82, 0x84,0xc2, 0x2c,0x89,0x69,0x94,0x48,0x67);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("deec8d99-fa1d-4d82-84c2-2c8969944867")
+IMFSourceReaderCallback : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE OnReadSample(
+        HRESULT hrStatus,
+        DWORD dwStreamIndex,
+        DWORD dwStreamFlags,
+        LONGLONG llTimestamp,
+        IMFSample *pSample) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnFlush(
+        DWORD dwStreamIndex) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnEvent(
+        DWORD dwStreamIndex,
+        IMFMediaEvent *pEvent) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IMFSourceReaderCallback, 0xdeec8d99, 0xfa1d, 0x4d82, 0x84,0xc2, 0x2c,0x89,0x69,0x94,0x48,0x67)
+#endif
+#else
+typedef struct IMFSourceReaderCallbackVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IMFSourceReaderCallback* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IMFSourceReaderCallback* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IMFSourceReaderCallback* This);
+
+    /*** IMFSourceReaderCallback methods ***/
+    HRESULT (STDMETHODCALLTYPE *OnReadSample)(
+        IMFSourceReaderCallback* This,
+        HRESULT hrStatus,
+        DWORD dwStreamIndex,
+        DWORD dwStreamFlags,
+        LONGLONG llTimestamp,
+        IMFSample *pSample);
+
+    HRESULT (STDMETHODCALLTYPE *OnFlush)(
+        IMFSourceReaderCallback* This,
+        DWORD dwStreamIndex);
+
+    HRESULT (STDMETHODCALLTYPE *OnEvent)(
+        IMFSourceReaderCallback* This,
+        DWORD dwStreamIndex,
+        IMFMediaEvent *pEvent);
+
+    END_INTERFACE
+} IMFSourceReaderCallbackVtbl;
+interface IMFSourceReaderCallback {
+    CONST_VTBL IMFSourceReaderCallbackVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IMFSourceReaderCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMFSourceReaderCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMFSourceReaderCallback_Release(This) (This)->lpVtbl->Release(This)
+/*** IMFSourceReaderCallback methods ***/
+#define IMFSourceReaderCallback_OnReadSample(This,hrStatus,dwStreamIndex,dwStreamFlags,llTimestamp,pSample) (This)->lpVtbl->OnReadSample(This,hrStatus,dwStreamIndex,dwStreamFlags,llTimestamp,pSample)
+#define IMFSourceReaderCallback_OnFlush(This,dwStreamIndex) (This)->lpVtbl->OnFlush(This,dwStreamIndex)
+#define IMFSourceReaderCallback_OnEvent(This,dwStreamIndex,pEvent) (This)->lpVtbl->OnEvent(This,dwStreamIndex,pEvent)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IMFSourceReaderCallback_QueryInterface(IMFSourceReaderCallback* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IMFSourceReaderCallback_AddRef(IMFSourceReaderCallback* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IMFSourceReaderCallback_Release(IMFSourceReaderCallback* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IMFSourceReaderCallback methods ***/
+static FORCEINLINE HRESULT IMFSourceReaderCallback_OnReadSample(IMFSourceReaderCallback* This,HRESULT hrStatus,DWORD dwStreamIndex,DWORD dwStreamFlags,LONGLONG llTimestamp,IMFSample *pSample) {
+    return This->lpVtbl->OnReadSample(This,hrStatus,dwStreamIndex,dwStreamFlags,llTimestamp,pSample);
+}
+static FORCEINLINE HRESULT IMFSourceReaderCallback_OnFlush(IMFSourceReaderCallback* This,DWORD dwStreamIndex) {
+    return This->lpVtbl->OnFlush(This,dwStreamIndex);
+}
+static FORCEINLINE HRESULT IMFSourceReaderCallback_OnEvent(IMFSourceReaderCallback* This,DWORD dwStreamIndex,IMFMediaEvent *pEvent) {
+    return This->lpVtbl->OnEvent(This,dwStreamIndex,pEvent);
+}
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMFSourceReaderCallback_OnReadSample_Proxy(
+    IMFSourceReaderCallback* This,
+    HRESULT hrStatus,
+    DWORD dwStreamIndex,
+    DWORD dwStreamFlags,
+    LONGLONG llTimestamp,
+    IMFSample *pSample);
+void __RPC_STUB IMFSourceReaderCallback_OnReadSample_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFSourceReaderCallback_OnFlush_Proxy(
+    IMFSourceReaderCallback* This,
+    DWORD dwStreamIndex);
+void __RPC_STUB IMFSourceReaderCallback_OnFlush_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMFSourceReaderCallback_OnEvent_Proxy(
+    IMFSourceReaderCallback* This,
+    DWORD dwStreamIndex,
+    IMFMediaEvent *pEvent);
+void __RPC_STUB IMFSourceReaderCallback_OnEvent_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IMFSourceReaderCallback_INTERFACE_DEFINED__ */
+
 HRESULT WINAPI MFCreateSinkWriterFromMediaSink(IMFMediaSink *pMediaSink,IMFAttributes *pAttributes,IMFSinkWriter **ppSinkWriter);
 HRESULT WINAPI MFCreateSinkWriterFromURL(LPCWSTR pwszOutputURL,IMFByteStream *pByteStream,IMFAttributes *pAttributes,IMFSinkWriter **ppSinkWriter);
 HRESULT WINAPI MFCreateSourceReaderFromByteStream(IMFByteStream *pByteStream,IMFAttributes *pAttributes,IMFSourceReader **ppSourceReader);
diff --git a/mingw-w64-headers/include/mfreadwrite.idl b/mingw-w64-headers/include/mfreadwrite.idl
index 0d91790..163178a 100644
--- a/mingw-w64-headers/include/mfreadwrite.idl
+++ b/mingw-w64-headers/include/mfreadwrite.idl
@@ -6,6 +6,14 @@
 
 import "mfobjects.idl";
 
+cpp_quote("EXTERN_GUID(MF_SOURCE_READER_ASYNC_CALLBACK, 0x1e3dbeac,0xbb43,0x4c35,0xb5,0x07,0xcd,0x64,0x44,0x64,0xc9,0x65);")
+cpp_quote("EXTERN_GUID(MF_SOURCE_READER_D3D_MANAGER, 0xec822da2,0xe1e9,0x4b29,0xa0,0xd8,0x56,0x3c,0x71,0x9f,0x52,0x69);")
+cpp_quote("EXTERN_GUID(MF_SOURCE_READER_DISABLE_DXVA, 0xaa456cfd,0x3943,0x4a1e,0xa7,0x7d,0x18,0x38,0xc0,0xea,0x2e,0x35);")
+cpp_quote("EXTERN_GUID(MF_SOURCE_READER_MEDIASOURCE_CONFIG, 0x9085abeb,0x0354,0x48f9,0xab,0xb5,0x20,0x0d,0xf8,0x38,0xc6,0x8e);")
+cpp_quote("EXTERN_GUID(MF_SOURCE_READER_MEDIASOURCE_CHARACTERISTICS, 0x6d23f5c8,0xc5d7,0x4a9b,0x99,0x71,0x5d,0x11,0xf8,0xbc,0xa8,0x80);")
+cpp_quote("EXTERN_GUID(MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING, 0xfb394f3d,0xccf1,0x42ee,0xbb,0xb3,0xf9,0xb8,0x45,0xd5,0x68,0x1d);" )
+cpp_quote("EXTERN_GUID(MF_SOURCE_READER_DISCONNECT_MEDIASOURCE_ON_SHUTDOWN, 0x56b67165,0x219e,0x456d,0xa2,0x2e,0x2d,0x30,0x04,0xc7,0xfe,0x56);" )
+
 typedef [v1_enum] enum MF_SOURCE_READER_FLAG {
     MF_SOURCE_READERF_ERROR                     = 0x00000001,
     MF_SOURCE_READERF_ENDOFSTREAM               = 0x00000002,
@@ -85,7 +93,18 @@
     HRESULT GetStatistics([in] DWORD dwStreamIndex, [out] MF_SINK_WRITER_STATISTICS *pStats);
 }
 
-cpp_quote("EXTERN_GUID( MF_SOURCE_READER_MEDIASOURCE_CHARACTERISTICS, 0x6d23f5c8,0xc5d7,0x4a9b,0x99,0x71,0x5d,0x11,0xf8,0xbc,0xa8,0x80);")
+[
+    object,
+    uuid(deec8d99-fa1d-4d82-84c2-2c8969944867),
+    local
+]
+interface IMFSourceReaderCallback : IUnknown
+{
+    HRESULT OnReadSample([in] HRESULT hrStatus, [in] DWORD dwStreamIndex, [in] DWORD dwStreamFlags,
+            [in] LONGLONG llTimestamp, [in] IMFSample *pSample);
+    HRESULT OnFlush([in] DWORD dwStreamIndex);
+    HRESULT OnEvent([in] DWORD dwStreamIndex, [in] IMFMediaEvent *pEvent);
+}
 
 cpp_quote("HRESULT WINAPI MFCreateSinkWriterFromMediaSink(IMFMediaSink *pMediaSink,IMFAttributes *pAttributes,IMFSinkWriter **ppSinkWriter);")
 cpp_quote("HRESULT WINAPI MFCreateSinkWriterFromURL(LPCWSTR pwszOutputURL,IMFByteStream *pByteStream,IMFAttributes *pAttributes,IMFSinkWriter **ppSinkWriter);")
diff --git a/mingw-w64-headers/include/mftransform.h b/mingw-w64-headers/include/mftransform.h
index 85f1d81..08ebd83 100644
--- a/mingw-w64-headers/include/mftransform.h
+++ b/mingw-w64-headers/include/mftransform.h
@@ -15,19 +15,6 @@
     MFT_DRAIN_NO_TAILS        = 0x00000001 
   };
 
-#if (_WIN32_WINNT >= 0x0601)
-  enum _MFT_ENUM_FLAG {
-  MFT_ENUM_FLAG_SYNCMFT          = 0x00000001,
-  MFT_ENUM_FLAG_ASYNCMFT         = 0x00000002,
-  MFT_ENUM_FLAG_HARDWARE         = 0x00000004,
-  MFT_ENUM_FLAG_FIELDOFUSE       = 0x00000008,
-  MFT_ENUM_FLAG_LOCALMFT         = 0x00000010,
-  MFT_ENUM_FLAG_TRANSCODE_ONLY   = 0x00000020,
-  MFT_ENUM_FLAG_SORTANDFILTER    = 0x00000040,
-  MFT_ENUM_FLAG_ALL              = 0x0000003F 
-};
-#endif /*(_WIN32_WINNT >= 0x0601)*/
-
   enum _MFT_INPUT_STATUS_FLAGS {
     MFT_INPUT_STATUS_ACCEPT_DATA   = 0x00000001 
   };