diff --git a/mingw-w64-headers/direct-x/ChangeLog b/mingw-w64-headers/direct-x/ChangeLog
index a426c2c..7c1f385 100644
--- a/mingw-w64-headers/direct-x/ChangeLog
+++ b/mingw-w64-headers/direct-x/ChangeLog
@@ -1,5 +1,11 @@
 2010-02-11  Ozkan Sezer <sezeroz@gmail.com>
 
+	* dshow.h: Updated from wine-1.1.38.
+	* amaudio.h, amvideo.idl, amvideo.h, audevcod.h, errors.h, evcode.h,
+	vfwmsgs.h: Added missing dshow dependency headers from wine-1.1.38.
+
+2010-02-11  Ozkan Sezer <sezeroz@gmail.com>
+
 	* ddstream.h, docobj.h, downloadmgr.h: Regenerated using widl-1.1.38
 	from the latest wine-1.1.38 *.idl files.
 	* ddstream.idl, docobj.idl, downloadmgr.idl: Added as idl versions.
diff --git a/mingw-w64-headers/direct-x/include/amaudio.h b/mingw-w64-headers/direct-x/include/amaudio.h
new file mode 100644
index 0000000..21892c6
--- /dev/null
+++ b/mingw-w64-headers/direct-x/include/amaudio.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2010 Maarten Lankhorst for Codeweavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __AMAUDIO__
+#define __AMAUDIO__
+
+#include <mmsystem.h>
+#include <dsound.h>
+
+#undef INTERFACE
+#define INTERFACE IAMDirectSound
+
+DECLARE_INTERFACE_(IAMDirectSound,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+
+    /*** IAMDirectSound methods ***/
+    STDMETHOD(GetDirectSoundInterface)(THIS_ IDirectSound **ds) PURE;
+    STDMETHOD(GetPrimaryBufferInterface(THIS_ IDirectSoundBuffer **buf) PURE;
+    STDMETHOD(GetSecondaryBufferInterface)(THIS_ IDirectSoundBuffer **buf) PURE;
+    STDMETHOD(ReleaseDirectSoundInterface(THIS_ IDirectSound *ds) PURE;
+    STDMETHOD(ReleasePrimaryBufferInterface(THIS_ IDirectSoundBuffer *buf) PURE;
+    STDMETHOD(ReleaseSecondaryBufferInterface(THIS_ IDirectSoundBuffer *buf) PURE;
+    STDMETHOD(SetFocusWindow)(THIS_ HWND hwnd, BOOL bgsilent) PURE;
+    STDMETHOD(GetFocusWindow)(THIS_ HWND hwnd) PURE;
+};
+
+#endif
diff --git a/mingw-w64-headers/direct-x/include/amvideo.h b/mingw-w64-headers/direct-x/include/amvideo.h
new file mode 100644
index 0000000..54a0fb0
--- /dev/null
+++ b/mingw-w64-headers/direct-x/include/amvideo.h
@@ -0,0 +1,1291 @@
+/*** Autogenerated by WIDL 1.1.38 from amvideo.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_AMVIDEO_H
+#define __WIDL_AMVIDEO_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <objidl.h>
+
+/* Forward declarations */
+
+#ifndef __IDirectDrawVideo_FWD_DEFINED__
+#define __IDirectDrawVideo_FWD_DEFINED__
+typedef interface IDirectDrawVideo IDirectDrawVideo;
+#endif
+
+#ifndef __IQualProp_FWD_DEFINED__
+#define __IQualProp_FWD_DEFINED__
+typedef interface IQualProp IQualProp;
+#endif
+
+#ifndef __IFullScreenVideo_FWD_DEFINED__
+#define __IFullScreenVideo_FWD_DEFINED__
+typedef interface IFullScreenVideo IFullScreenVideo;
+#endif
+
+#ifndef __IFullScreenVideoEx_FWD_DEFINED__
+#define __IFullScreenVideoEx_FWD_DEFINED__
+typedef interface IFullScreenVideoEx IFullScreenVideoEx;
+#endif
+
+#ifndef __IBaseVideoMixer_FWD_DEFINED__
+#define __IBaseVideoMixer_FWD_DEFINED__
+typedef interface IBaseVideoMixer IBaseVideoMixer;
+#endif
+
+
+#if 0
+typedef void *LPDIRECTDRAW;
+typedef void DDSURFACEDESC;
+typedef void DDCAPS;
+typedef DWORD RGBQUAD;
+typedef LONGLONG REFERENCE_TIME;
+typedef struct __WIDL_amvideo_generated_name_00000000 {
+    DWORD biSize;
+    LONG biWidth;
+    LONG biHeight;
+    WORD biPlanes;
+    WORD biBitCount;
+    DWORD biCompression;
+    DWORD biSizeImage;
+    LONG biXPelsPerMeter;
+    LONG biYPelsPerMeter;
+    DWORD biClrUsed;
+    DWORD biClrImportant;
+} BITMAPINFOHEADER;
+typedef struct __WIDL_amvideo_generated_name_00000000 *PBITMAPINFOHEADER;
+typedef struct __WIDL_amvideo_generated_name_00000000 *LPBITMAPINFOHEADER;
+#endif
+#include <ddraw.h>
+#define AMDDS_NONE 0x00
+#define AMDDS_DCIPS 0x01
+#define AMDDS_PS 0x02
+#define AMDDS_RGBOVR 0x04
+#define AMDDS_YUVOVR 0x08
+#define AMDDS_RGBOFF 0x10
+#define AMDDS_YUVOFF 0x20
+#define AMDDS_RGBFLP 0x40
+#define AMDDS_YUVFLP 0x80
+#define AMDDS_ALL 0xFF
+#define AMDDS_DEFAULT AMDDS_ALL
+#define AMDDS_YUV (AMDDS_YUVOFF | AMDDS_YUVOVR | AMDDS_YUVFLP)
+#define AMDDS_RGB (AMDDS_RGBOFF | AMDDS_RGBOVR | AMDDS_RGBFLP)
+#define AMDSS_PRIMARY (AMDDS_DCIPS | AMDDS_PS)
+/*****************************************************************************
+ * IDirectDrawVideo interface
+ */
+#ifndef __IDirectDrawVideo_INTERFACE_DEFINED__
+#define __IDirectDrawVideo_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IDirectDrawVideo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetSwitches(
+        DWORD *pSwitches) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSwitches(
+        DWORD Switches) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCaps(
+        DDCAPS *pCaps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetEmulatedCaps(
+        DDCAPS *pCaps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSurfaceDesc(
+        DDSURFACEDESC *pSurfaceDesc) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFourCCCodes(
+        DWORD *pCount,
+        DWORD *pCodes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDirectDraw(
+        LPDIRECTDRAW pDirectDraw) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDirectDraw(
+        LPDIRECTDRAW *ppDirectDraw) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSurfaceType(
+        DWORD *pSurfaceType) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDefault(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UseScanLine(
+        LONG UseScanLine) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CanUseScanLine(
+        LONG *UseScanLine) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UseOverlayStretch(
+        LONG UseOverlayStretch) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE CanUseOverlayStretch(
+        LONG *UseOverlayStretch) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UseWhenFullScreen(
+        LONG UseWhenFullScreen) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE WillUseFullScreen(
+        LONG *UseWhenFullScreen) = 0;
+
+};
+#else
+typedef struct IDirectDrawVideoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDirectDrawVideo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDirectDrawVideo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDirectDrawVideo* This);
+
+    /*** IDirectDrawVideo methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSwitches)(
+        IDirectDrawVideo* This,
+        DWORD *pSwitches);
+
+    HRESULT (STDMETHODCALLTYPE *SetSwitches)(
+        IDirectDrawVideo* This,
+        DWORD Switches);
+
+    HRESULT (STDMETHODCALLTYPE *GetCaps)(
+        IDirectDrawVideo* This,
+        DDCAPS *pCaps);
+
+    HRESULT (STDMETHODCALLTYPE *GetEmulatedCaps)(
+        IDirectDrawVideo* This,
+        DDCAPS *pCaps);
+
+    HRESULT (STDMETHODCALLTYPE *GetSurfaceDesc)(
+        IDirectDrawVideo* This,
+        DDSURFACEDESC *pSurfaceDesc);
+
+    HRESULT (STDMETHODCALLTYPE *GetFourCCCodes)(
+        IDirectDrawVideo* This,
+        DWORD *pCount,
+        DWORD *pCodes);
+
+    HRESULT (STDMETHODCALLTYPE *SetDirectDraw)(
+        IDirectDrawVideo* This,
+        LPDIRECTDRAW pDirectDraw);
+
+    HRESULT (STDMETHODCALLTYPE *GetDirectDraw)(
+        IDirectDrawVideo* This,
+        LPDIRECTDRAW *ppDirectDraw);
+
+    HRESULT (STDMETHODCALLTYPE *GetSurfaceType)(
+        IDirectDrawVideo* This,
+        DWORD *pSurfaceType);
+
+    HRESULT (STDMETHODCALLTYPE *SetDefault)(
+        IDirectDrawVideo* This);
+
+    HRESULT (STDMETHODCALLTYPE *UseScanLine)(
+        IDirectDrawVideo* This,
+        LONG UseScanLine);
+
+    HRESULT (STDMETHODCALLTYPE *CanUseScanLine)(
+        IDirectDrawVideo* This,
+        LONG *UseScanLine);
+
+    HRESULT (STDMETHODCALLTYPE *UseOverlayStretch)(
+        IDirectDrawVideo* This,
+        LONG UseOverlayStretch);
+
+    HRESULT (STDMETHODCALLTYPE *CanUseOverlayStretch)(
+        IDirectDrawVideo* This,
+        LONG *UseOverlayStretch);
+
+    HRESULT (STDMETHODCALLTYPE *UseWhenFullScreen)(
+        IDirectDrawVideo* This,
+        LONG UseWhenFullScreen);
+
+    HRESULT (STDMETHODCALLTYPE *WillUseFullScreen)(
+        IDirectDrawVideo* This,
+        LONG *UseWhenFullScreen);
+
+    END_INTERFACE
+} IDirectDrawVideoVtbl;
+interface IDirectDrawVideo {
+    CONST_VTBL IDirectDrawVideoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IDirectDrawVideo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectDrawVideo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectDrawVideo_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectDrawVideo methods ***/
+#define IDirectDrawVideo_GetSwitches(This,pSwitches) (This)->lpVtbl->GetSwitches(This,pSwitches)
+#define IDirectDrawVideo_SetSwitches(This,Switches) (This)->lpVtbl->SetSwitches(This,Switches)
+#define IDirectDrawVideo_GetCaps(This,pCaps) (This)->lpVtbl->GetCaps(This,pCaps)
+#define IDirectDrawVideo_GetEmulatedCaps(This,pCaps) (This)->lpVtbl->GetEmulatedCaps(This,pCaps)
+#define IDirectDrawVideo_GetSurfaceDesc(This,pSurfaceDesc) (This)->lpVtbl->GetSurfaceDesc(This,pSurfaceDesc)
+#define IDirectDrawVideo_GetFourCCCodes(This,pCount,pCodes) (This)->lpVtbl->GetFourCCCodes(This,pCount,pCodes)
+#define IDirectDrawVideo_SetDirectDraw(This,pDirectDraw) (This)->lpVtbl->SetDirectDraw(This,pDirectDraw)
+#define IDirectDrawVideo_GetDirectDraw(This,ppDirectDraw) (This)->lpVtbl->GetDirectDraw(This,ppDirectDraw)
+#define IDirectDrawVideo_GetSurfaceType(This,pSurfaceType) (This)->lpVtbl->GetSurfaceType(This,pSurfaceType)
+#define IDirectDrawVideo_SetDefault(This) (This)->lpVtbl->SetDefault(This)
+#define IDirectDrawVideo_UseScanLine(This,UseScanLine) (This)->lpVtbl->UseScanLine(This,UseScanLine)
+#define IDirectDrawVideo_CanUseScanLine(This,UseScanLine) (This)->lpVtbl->CanUseScanLine(This,UseScanLine)
+#define IDirectDrawVideo_UseOverlayStretch(This,UseOverlayStretch) (This)->lpVtbl->UseOverlayStretch(This,UseOverlayStretch)
+#define IDirectDrawVideo_CanUseOverlayStretch(This,UseOverlayStretch) (This)->lpVtbl->CanUseOverlayStretch(This,UseOverlayStretch)
+#define IDirectDrawVideo_UseWhenFullScreen(This,UseWhenFullScreen) (This)->lpVtbl->UseWhenFullScreen(This,UseWhenFullScreen)
+#define IDirectDrawVideo_WillUseFullScreen(This,UseWhenFullScreen) (This)->lpVtbl->WillUseFullScreen(This,UseWhenFullScreen)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDirectDrawVideo_GetSwitches_Proxy(
+    IDirectDrawVideo* This,
+    DWORD *pSwitches);
+void __RPC_STUB IDirectDrawVideo_GetSwitches_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectDrawVideo_SetSwitches_Proxy(
+    IDirectDrawVideo* This,
+    DWORD Switches);
+void __RPC_STUB IDirectDrawVideo_SetSwitches_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectDrawVideo_GetCaps_Proxy(
+    IDirectDrawVideo* This,
+    DDCAPS *pCaps);
+void __RPC_STUB IDirectDrawVideo_GetCaps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectDrawVideo_GetEmulatedCaps_Proxy(
+    IDirectDrawVideo* This,
+    DDCAPS *pCaps);
+void __RPC_STUB IDirectDrawVideo_GetEmulatedCaps_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectDrawVideo_GetSurfaceDesc_Proxy(
+    IDirectDrawVideo* This,
+    DDSURFACEDESC *pSurfaceDesc);
+void __RPC_STUB IDirectDrawVideo_GetSurfaceDesc_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectDrawVideo_GetFourCCCodes_Proxy(
+    IDirectDrawVideo* This,
+    DWORD *pCount,
+    DWORD *pCodes);
+void __RPC_STUB IDirectDrawVideo_GetFourCCCodes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectDrawVideo_SetDirectDraw_Proxy(
+    IDirectDrawVideo* This,
+    LPDIRECTDRAW pDirectDraw);
+void __RPC_STUB IDirectDrawVideo_SetDirectDraw_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectDrawVideo_GetDirectDraw_Proxy(
+    IDirectDrawVideo* This,
+    LPDIRECTDRAW *ppDirectDraw);
+void __RPC_STUB IDirectDrawVideo_GetDirectDraw_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectDrawVideo_GetSurfaceType_Proxy(
+    IDirectDrawVideo* This,
+    DWORD *pSurfaceType);
+void __RPC_STUB IDirectDrawVideo_GetSurfaceType_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectDrawVideo_SetDefault_Proxy(
+    IDirectDrawVideo* This);
+void __RPC_STUB IDirectDrawVideo_SetDefault_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectDrawVideo_UseScanLine_Proxy(
+    IDirectDrawVideo* This,
+    LONG UseScanLine);
+void __RPC_STUB IDirectDrawVideo_UseScanLine_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectDrawVideo_CanUseScanLine_Proxy(
+    IDirectDrawVideo* This,
+    LONG *UseScanLine);
+void __RPC_STUB IDirectDrawVideo_CanUseScanLine_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectDrawVideo_UseOverlayStretch_Proxy(
+    IDirectDrawVideo* This,
+    LONG UseOverlayStretch);
+void __RPC_STUB IDirectDrawVideo_UseOverlayStretch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectDrawVideo_CanUseOverlayStretch_Proxy(
+    IDirectDrawVideo* This,
+    LONG *UseOverlayStretch);
+void __RPC_STUB IDirectDrawVideo_CanUseOverlayStretch_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectDrawVideo_UseWhenFullScreen_Proxy(
+    IDirectDrawVideo* This,
+    LONG UseWhenFullScreen);
+void __RPC_STUB IDirectDrawVideo_UseWhenFullScreen_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectDrawVideo_WillUseFullScreen_Proxy(
+    IDirectDrawVideo* This,
+    LONG *UseWhenFullScreen);
+void __RPC_STUB IDirectDrawVideo_WillUseFullScreen_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDirectDrawVideo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IQualProp interface
+ */
+#ifndef __IQualProp_INTERFACE_DEFINED__
+#define __IQualProp_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IQualProp : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE get_FramesDroppedInRenderer(
+        int *pcFrames) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_FramesDrawn(
+        int *pcFramesDrawn) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AvgFrameRate(
+        int *piAvgFrameRate) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_Jitter(
+        int *iJitter) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_AvgSyncOffset(
+        int *piAvg) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE get_DevSyncOffset(
+        int *piDev) = 0;
+
+};
+#else
+typedef struct IQualPropVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IQualProp* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IQualProp* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IQualProp* This);
+
+    /*** IQualProp methods ***/
+    HRESULT (STDMETHODCALLTYPE *get_FramesDroppedInRenderer)(
+        IQualProp* This,
+        int *pcFrames);
+
+    HRESULT (STDMETHODCALLTYPE *get_FramesDrawn)(
+        IQualProp* This,
+        int *pcFramesDrawn);
+
+    HRESULT (STDMETHODCALLTYPE *get_AvgFrameRate)(
+        IQualProp* This,
+        int *piAvgFrameRate);
+
+    HRESULT (STDMETHODCALLTYPE *get_Jitter)(
+        IQualProp* This,
+        int *iJitter);
+
+    HRESULT (STDMETHODCALLTYPE *get_AvgSyncOffset)(
+        IQualProp* This,
+        int *piAvg);
+
+    HRESULT (STDMETHODCALLTYPE *get_DevSyncOffset)(
+        IQualProp* This,
+        int *piDev);
+
+    END_INTERFACE
+} IQualPropVtbl;
+interface IQualProp {
+    CONST_VTBL IQualPropVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IQualProp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IQualProp_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IQualProp_Release(This) (This)->lpVtbl->Release(This)
+/*** IQualProp methods ***/
+#define IQualProp_get_FramesDroppedInRenderer(This,pcFrames) (This)->lpVtbl->get_FramesDroppedInRenderer(This,pcFrames)
+#define IQualProp_get_FramesDrawn(This,pcFramesDrawn) (This)->lpVtbl->get_FramesDrawn(This,pcFramesDrawn)
+#define IQualProp_get_AvgFrameRate(This,piAvgFrameRate) (This)->lpVtbl->get_AvgFrameRate(This,piAvgFrameRate)
+#define IQualProp_get_Jitter(This,iJitter) (This)->lpVtbl->get_Jitter(This,iJitter)
+#define IQualProp_get_AvgSyncOffset(This,piAvg) (This)->lpVtbl->get_AvgSyncOffset(This,piAvg)
+#define IQualProp_get_DevSyncOffset(This,piDev) (This)->lpVtbl->get_DevSyncOffset(This,piDev)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IQualProp_get_FramesDroppedInRenderer_Proxy(
+    IQualProp* This,
+    int *pcFrames);
+void __RPC_STUB IQualProp_get_FramesDroppedInRenderer_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IQualProp_get_FramesDrawn_Proxy(
+    IQualProp* This,
+    int *pcFramesDrawn);
+void __RPC_STUB IQualProp_get_FramesDrawn_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IQualProp_get_AvgFrameRate_Proxy(
+    IQualProp* This,
+    int *piAvgFrameRate);
+void __RPC_STUB IQualProp_get_AvgFrameRate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IQualProp_get_Jitter_Proxy(
+    IQualProp* This,
+    int *iJitter);
+void __RPC_STUB IQualProp_get_Jitter_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IQualProp_get_AvgSyncOffset_Proxy(
+    IQualProp* This,
+    int *piAvg);
+void __RPC_STUB IQualProp_get_AvgSyncOffset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IQualProp_get_DevSyncOffset_Proxy(
+    IQualProp* This,
+    int *piDev);
+void __RPC_STUB IQualProp_get_DevSyncOffset_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IQualProp_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IFullScreenVideo interface
+ */
+#ifndef __IFullScreenVideo_INTERFACE_DEFINED__
+#define __IFullScreenVideo_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IFullScreenVideo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE CountModes(
+        LONG *pModes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetModeInfo(
+        LONG Mode,
+        LONG *pWidth,
+        LONG *pHeight,
+        LONG *pDepth) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentMode(
+        LONG *pMode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsModeAvailable(
+        LONG Mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsModeEnabled(
+        LONG Mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEnabled(
+        LONG Mode,
+        LONG bEnabled) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetClipFactor(
+        LONG *pClipFactor) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClipFactor(
+        LONG ClipFactor) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMessageDrain(
+        HWND hwnd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMessageDrain(
+        HWND *hwnd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetMonitor(
+        LONG Monitor) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMonitor(
+        LONG *Monitor) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE HideOnDeactivate(
+        LONG Hide) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsHideOnDeactivate(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetCaption(
+        BSTR strCaption) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCaption(
+        BSTR *pstrCaption) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDefault(
+        ) = 0;
+
+};
+#else
+typedef struct IFullScreenVideoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IFullScreenVideo* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IFullScreenVideo* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IFullScreenVideo* This);
+
+    /*** IFullScreenVideo methods ***/
+    HRESULT (STDMETHODCALLTYPE *CountModes)(
+        IFullScreenVideo* This,
+        LONG *pModes);
+
+    HRESULT (STDMETHODCALLTYPE *GetModeInfo)(
+        IFullScreenVideo* This,
+        LONG Mode,
+        LONG *pWidth,
+        LONG *pHeight,
+        LONG *pDepth);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentMode)(
+        IFullScreenVideo* This,
+        LONG *pMode);
+
+    HRESULT (STDMETHODCALLTYPE *IsModeAvailable)(
+        IFullScreenVideo* This,
+        LONG Mode);
+
+    HRESULT (STDMETHODCALLTYPE *IsModeEnabled)(
+        IFullScreenVideo* This,
+        LONG Mode);
+
+    HRESULT (STDMETHODCALLTYPE *SetEnabled)(
+        IFullScreenVideo* This,
+        LONG Mode,
+        LONG bEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *GetClipFactor)(
+        IFullScreenVideo* This,
+        LONG *pClipFactor);
+
+    HRESULT (STDMETHODCALLTYPE *SetClipFactor)(
+        IFullScreenVideo* This,
+        LONG ClipFactor);
+
+    HRESULT (STDMETHODCALLTYPE *SetMessageDrain)(
+        IFullScreenVideo* This,
+        HWND hwnd);
+
+    HRESULT (STDMETHODCALLTYPE *GetMessageDrain)(
+        IFullScreenVideo* This,
+        HWND *hwnd);
+
+    HRESULT (STDMETHODCALLTYPE *SetMonitor)(
+        IFullScreenVideo* This,
+        LONG Monitor);
+
+    HRESULT (STDMETHODCALLTYPE *GetMonitor)(
+        IFullScreenVideo* This,
+        LONG *Monitor);
+
+    HRESULT (STDMETHODCALLTYPE *HideOnDeactivate)(
+        IFullScreenVideo* This,
+        LONG Hide);
+
+    HRESULT (STDMETHODCALLTYPE *IsHideOnDeactivate)(
+        IFullScreenVideo* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetCaption)(
+        IFullScreenVideo* This,
+        BSTR strCaption);
+
+    HRESULT (STDMETHODCALLTYPE *GetCaption)(
+        IFullScreenVideo* This,
+        BSTR *pstrCaption);
+
+    HRESULT (STDMETHODCALLTYPE *SetDefault)(
+        IFullScreenVideo* This);
+
+    END_INTERFACE
+} IFullScreenVideoVtbl;
+interface IFullScreenVideo {
+    CONST_VTBL IFullScreenVideoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IFullScreenVideo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IFullScreenVideo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IFullScreenVideo_Release(This) (This)->lpVtbl->Release(This)
+/*** IFullScreenVideo methods ***/
+#define IFullScreenVideo_CountModes(This,pModes) (This)->lpVtbl->CountModes(This,pModes)
+#define IFullScreenVideo_GetModeInfo(This,Mode,pWidth,pHeight,pDepth) (This)->lpVtbl->GetModeInfo(This,Mode,pWidth,pHeight,pDepth)
+#define IFullScreenVideo_GetCurrentMode(This,pMode) (This)->lpVtbl->GetCurrentMode(This,pMode)
+#define IFullScreenVideo_IsModeAvailable(This,Mode) (This)->lpVtbl->IsModeAvailable(This,Mode)
+#define IFullScreenVideo_IsModeEnabled(This,Mode) (This)->lpVtbl->IsModeEnabled(This,Mode)
+#define IFullScreenVideo_SetEnabled(This,Mode,bEnabled) (This)->lpVtbl->SetEnabled(This,Mode,bEnabled)
+#define IFullScreenVideo_GetClipFactor(This,pClipFactor) (This)->lpVtbl->GetClipFactor(This,pClipFactor)
+#define IFullScreenVideo_SetClipFactor(This,ClipFactor) (This)->lpVtbl->SetClipFactor(This,ClipFactor)
+#define IFullScreenVideo_SetMessageDrain(This,hwnd) (This)->lpVtbl->SetMessageDrain(This,hwnd)
+#define IFullScreenVideo_GetMessageDrain(This,hwnd) (This)->lpVtbl->GetMessageDrain(This,hwnd)
+#define IFullScreenVideo_SetMonitor(This,Monitor) (This)->lpVtbl->SetMonitor(This,Monitor)
+#define IFullScreenVideo_GetMonitor(This,Monitor) (This)->lpVtbl->GetMonitor(This,Monitor)
+#define IFullScreenVideo_HideOnDeactivate(This,Hide) (This)->lpVtbl->HideOnDeactivate(This,Hide)
+#define IFullScreenVideo_IsHideOnDeactivate(This) (This)->lpVtbl->IsHideOnDeactivate(This)
+#define IFullScreenVideo_SetCaption(This,strCaption) (This)->lpVtbl->SetCaption(This,strCaption)
+#define IFullScreenVideo_GetCaption(This,pstrCaption) (This)->lpVtbl->GetCaption(This,pstrCaption)
+#define IFullScreenVideo_SetDefault(This) (This)->lpVtbl->SetDefault(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_CountModes_Proxy(
+    IFullScreenVideo* This,
+    LONG *pModes);
+void __RPC_STUB IFullScreenVideo_CountModes_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_GetModeInfo_Proxy(
+    IFullScreenVideo* This,
+    LONG Mode,
+    LONG *pWidth,
+    LONG *pHeight,
+    LONG *pDepth);
+void __RPC_STUB IFullScreenVideo_GetModeInfo_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_GetCurrentMode_Proxy(
+    IFullScreenVideo* This,
+    LONG *pMode);
+void __RPC_STUB IFullScreenVideo_GetCurrentMode_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_IsModeAvailable_Proxy(
+    IFullScreenVideo* This,
+    LONG Mode);
+void __RPC_STUB IFullScreenVideo_IsModeAvailable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_IsModeEnabled_Proxy(
+    IFullScreenVideo* This,
+    LONG Mode);
+void __RPC_STUB IFullScreenVideo_IsModeEnabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_SetEnabled_Proxy(
+    IFullScreenVideo* This,
+    LONG Mode,
+    LONG bEnabled);
+void __RPC_STUB IFullScreenVideo_SetEnabled_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_GetClipFactor_Proxy(
+    IFullScreenVideo* This,
+    LONG *pClipFactor);
+void __RPC_STUB IFullScreenVideo_GetClipFactor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_SetClipFactor_Proxy(
+    IFullScreenVideo* This,
+    LONG ClipFactor);
+void __RPC_STUB IFullScreenVideo_SetClipFactor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_SetMessageDrain_Proxy(
+    IFullScreenVideo* This,
+    HWND hwnd);
+void __RPC_STUB IFullScreenVideo_SetMessageDrain_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_GetMessageDrain_Proxy(
+    IFullScreenVideo* This,
+    HWND *hwnd);
+void __RPC_STUB IFullScreenVideo_GetMessageDrain_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_SetMonitor_Proxy(
+    IFullScreenVideo* This,
+    LONG Monitor);
+void __RPC_STUB IFullScreenVideo_SetMonitor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_GetMonitor_Proxy(
+    IFullScreenVideo* This,
+    LONG *Monitor);
+void __RPC_STUB IFullScreenVideo_GetMonitor_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_HideOnDeactivate_Proxy(
+    IFullScreenVideo* This,
+    LONG Hide);
+void __RPC_STUB IFullScreenVideo_HideOnDeactivate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_IsHideOnDeactivate_Proxy(
+    IFullScreenVideo* This);
+void __RPC_STUB IFullScreenVideo_IsHideOnDeactivate_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_SetCaption_Proxy(
+    IFullScreenVideo* This,
+    BSTR strCaption);
+void __RPC_STUB IFullScreenVideo_SetCaption_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_GetCaption_Proxy(
+    IFullScreenVideo* This,
+    BSTR *pstrCaption);
+void __RPC_STUB IFullScreenVideo_GetCaption_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideo_SetDefault_Proxy(
+    IFullScreenVideo* This);
+void __RPC_STUB IFullScreenVideo_SetDefault_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IFullScreenVideo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IFullScreenVideoEx interface
+ */
+#ifndef __IFullScreenVideoEx_INTERFACE_DEFINED__
+#define __IFullScreenVideoEx_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IFullScreenVideoEx : public IFullScreenVideo
+{
+    virtual HRESULT STDMETHODCALLTYPE SetAcceleratorTable(
+        HWND hwnd,
+        HACCEL hAccel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAcceleratorTable(
+        HWND *phwnd,
+        HACCEL *phAccel) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE KeepPixelAspectRatio(
+        LONG KeepAspect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsKeepPixelAspectRatio(
+        LONG *pKeepAspect) = 0;
+
+};
+#else
+typedef struct IFullScreenVideoExVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IFullScreenVideoEx* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IFullScreenVideoEx* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IFullScreenVideoEx* This);
+
+    /*** IFullScreenVideo methods ***/
+    HRESULT (STDMETHODCALLTYPE *CountModes)(
+        IFullScreenVideoEx* This,
+        LONG *pModes);
+
+    HRESULT (STDMETHODCALLTYPE *GetModeInfo)(
+        IFullScreenVideoEx* This,
+        LONG Mode,
+        LONG *pWidth,
+        LONG *pHeight,
+        LONG *pDepth);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentMode)(
+        IFullScreenVideoEx* This,
+        LONG *pMode);
+
+    HRESULT (STDMETHODCALLTYPE *IsModeAvailable)(
+        IFullScreenVideoEx* This,
+        LONG Mode);
+
+    HRESULT (STDMETHODCALLTYPE *IsModeEnabled)(
+        IFullScreenVideoEx* This,
+        LONG Mode);
+
+    HRESULT (STDMETHODCALLTYPE *SetEnabled)(
+        IFullScreenVideoEx* This,
+        LONG Mode,
+        LONG bEnabled);
+
+    HRESULT (STDMETHODCALLTYPE *GetClipFactor)(
+        IFullScreenVideoEx* This,
+        LONG *pClipFactor);
+
+    HRESULT (STDMETHODCALLTYPE *SetClipFactor)(
+        IFullScreenVideoEx* This,
+        LONG ClipFactor);
+
+    HRESULT (STDMETHODCALLTYPE *SetMessageDrain)(
+        IFullScreenVideoEx* This,
+        HWND hwnd);
+
+    HRESULT (STDMETHODCALLTYPE *GetMessageDrain)(
+        IFullScreenVideoEx* This,
+        HWND *hwnd);
+
+    HRESULT (STDMETHODCALLTYPE *SetMonitor)(
+        IFullScreenVideoEx* This,
+        LONG Monitor);
+
+    HRESULT (STDMETHODCALLTYPE *GetMonitor)(
+        IFullScreenVideoEx* This,
+        LONG *Monitor);
+
+    HRESULT (STDMETHODCALLTYPE *HideOnDeactivate)(
+        IFullScreenVideoEx* This,
+        LONG Hide);
+
+    HRESULT (STDMETHODCALLTYPE *IsHideOnDeactivate)(
+        IFullScreenVideoEx* This);
+
+    HRESULT (STDMETHODCALLTYPE *SetCaption)(
+        IFullScreenVideoEx* This,
+        BSTR strCaption);
+
+    HRESULT (STDMETHODCALLTYPE *GetCaption)(
+        IFullScreenVideoEx* This,
+        BSTR *pstrCaption);
+
+    HRESULT (STDMETHODCALLTYPE *SetDefault)(
+        IFullScreenVideoEx* This);
+
+    /*** IFullScreenVideoEx methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetAcceleratorTable)(
+        IFullScreenVideoEx* This,
+        HWND hwnd,
+        HACCEL hAccel);
+
+    HRESULT (STDMETHODCALLTYPE *GetAcceleratorTable)(
+        IFullScreenVideoEx* This,
+        HWND *phwnd,
+        HACCEL *phAccel);
+
+    HRESULT (STDMETHODCALLTYPE *KeepPixelAspectRatio)(
+        IFullScreenVideoEx* This,
+        LONG KeepAspect);
+
+    HRESULT (STDMETHODCALLTYPE *IsKeepPixelAspectRatio)(
+        IFullScreenVideoEx* This,
+        LONG *pKeepAspect);
+
+    END_INTERFACE
+} IFullScreenVideoExVtbl;
+interface IFullScreenVideoEx {
+    CONST_VTBL IFullScreenVideoExVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IFullScreenVideoEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IFullScreenVideoEx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IFullScreenVideoEx_Release(This) (This)->lpVtbl->Release(This)
+/*** IFullScreenVideo methods ***/
+#define IFullScreenVideoEx_CountModes(This,pModes) (This)->lpVtbl->CountModes(This,pModes)
+#define IFullScreenVideoEx_GetModeInfo(This,Mode,pWidth,pHeight,pDepth) (This)->lpVtbl->GetModeInfo(This,Mode,pWidth,pHeight,pDepth)
+#define IFullScreenVideoEx_GetCurrentMode(This,pMode) (This)->lpVtbl->GetCurrentMode(This,pMode)
+#define IFullScreenVideoEx_IsModeAvailable(This,Mode) (This)->lpVtbl->IsModeAvailable(This,Mode)
+#define IFullScreenVideoEx_IsModeEnabled(This,Mode) (This)->lpVtbl->IsModeEnabled(This,Mode)
+#define IFullScreenVideoEx_SetEnabled(This,Mode,bEnabled) (This)->lpVtbl->SetEnabled(This,Mode,bEnabled)
+#define IFullScreenVideoEx_GetClipFactor(This,pClipFactor) (This)->lpVtbl->GetClipFactor(This,pClipFactor)
+#define IFullScreenVideoEx_SetClipFactor(This,ClipFactor) (This)->lpVtbl->SetClipFactor(This,ClipFactor)
+#define IFullScreenVideoEx_SetMessageDrain(This,hwnd) (This)->lpVtbl->SetMessageDrain(This,hwnd)
+#define IFullScreenVideoEx_GetMessageDrain(This,hwnd) (This)->lpVtbl->GetMessageDrain(This,hwnd)
+#define IFullScreenVideoEx_SetMonitor(This,Monitor) (This)->lpVtbl->SetMonitor(This,Monitor)
+#define IFullScreenVideoEx_GetMonitor(This,Monitor) (This)->lpVtbl->GetMonitor(This,Monitor)
+#define IFullScreenVideoEx_HideOnDeactivate(This,Hide) (This)->lpVtbl->HideOnDeactivate(This,Hide)
+#define IFullScreenVideoEx_IsHideOnDeactivate(This) (This)->lpVtbl->IsHideOnDeactivate(This)
+#define IFullScreenVideoEx_SetCaption(This,strCaption) (This)->lpVtbl->SetCaption(This,strCaption)
+#define IFullScreenVideoEx_GetCaption(This,pstrCaption) (This)->lpVtbl->GetCaption(This,pstrCaption)
+#define IFullScreenVideoEx_SetDefault(This) (This)->lpVtbl->SetDefault(This)
+/*** IFullScreenVideoEx methods ***/
+#define IFullScreenVideoEx_SetAcceleratorTable(This,hwnd,hAccel) (This)->lpVtbl->SetAcceleratorTable(This,hwnd,hAccel)
+#define IFullScreenVideoEx_GetAcceleratorTable(This,phwnd,phAccel) (This)->lpVtbl->GetAcceleratorTable(This,phwnd,phAccel)
+#define IFullScreenVideoEx_KeepPixelAspectRatio(This,KeepAspect) (This)->lpVtbl->KeepPixelAspectRatio(This,KeepAspect)
+#define IFullScreenVideoEx_IsKeepPixelAspectRatio(This,pKeepAspect) (This)->lpVtbl->IsKeepPixelAspectRatio(This,pKeepAspect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IFullScreenVideoEx_SetAcceleratorTable_Proxy(
+    IFullScreenVideoEx* This,
+    HWND hwnd,
+    HACCEL hAccel);
+void __RPC_STUB IFullScreenVideoEx_SetAcceleratorTable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideoEx_GetAcceleratorTable_Proxy(
+    IFullScreenVideoEx* This,
+    HWND *phwnd,
+    HACCEL *phAccel);
+void __RPC_STUB IFullScreenVideoEx_GetAcceleratorTable_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideoEx_KeepPixelAspectRatio_Proxy(
+    IFullScreenVideoEx* This,
+    LONG KeepAspect);
+void __RPC_STUB IFullScreenVideoEx_KeepPixelAspectRatio_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFullScreenVideoEx_IsKeepPixelAspectRatio_Proxy(
+    IFullScreenVideoEx* This,
+    LONG *pKeepAspect);
+void __RPC_STUB IFullScreenVideoEx_IsKeepPixelAspectRatio_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IFullScreenVideoEx_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBaseVideoMixer interface
+ */
+#ifndef __IBaseVideoMixer_INTERFACE_DEFINED__
+#define __IBaseVideoMixer_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IBaseVideoMixer : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetLeadPin(
+        int iPin) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetLeadPin(
+        int *piPin) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetInputPinCount(
+        int *piPinCount) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsUsingClock(
+        int *pbValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetUsingClock(
+        int bValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetClockPeriod(
+        int *pbValue) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetClockPeriod(
+        int bValue) = 0;
+
+};
+#else
+typedef struct IBaseVideoMixerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IBaseVideoMixer* This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IBaseVideoMixer* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IBaseVideoMixer* This);
+
+    /*** IBaseVideoMixer methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetLeadPin)(
+        IBaseVideoMixer* This,
+        int iPin);
+
+    HRESULT (STDMETHODCALLTYPE *GetLeadPin)(
+        IBaseVideoMixer* This,
+        int *piPin);
+
+    HRESULT (STDMETHODCALLTYPE *GetInputPinCount)(
+        IBaseVideoMixer* This,
+        int *piPinCount);
+
+    HRESULT (STDMETHODCALLTYPE *IsUsingClock)(
+        IBaseVideoMixer* This,
+        int *pbValue);
+
+    HRESULT (STDMETHODCALLTYPE *SetUsingClock)(
+        IBaseVideoMixer* This,
+        int bValue);
+
+    HRESULT (STDMETHODCALLTYPE *GetClockPeriod)(
+        IBaseVideoMixer* This,
+        int *pbValue);
+
+    HRESULT (STDMETHODCALLTYPE *SetClockPeriod)(
+        IBaseVideoMixer* This,
+        int bValue);
+
+    END_INTERFACE
+} IBaseVideoMixerVtbl;
+interface IBaseVideoMixer {
+    CONST_VTBL IBaseVideoMixerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IBaseVideoMixer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBaseVideoMixer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBaseVideoMixer_Release(This) (This)->lpVtbl->Release(This)
+/*** IBaseVideoMixer methods ***/
+#define IBaseVideoMixer_SetLeadPin(This,iPin) (This)->lpVtbl->SetLeadPin(This,iPin)
+#define IBaseVideoMixer_GetLeadPin(This,piPin) (This)->lpVtbl->GetLeadPin(This,piPin)
+#define IBaseVideoMixer_GetInputPinCount(This,piPinCount) (This)->lpVtbl->GetInputPinCount(This,piPinCount)
+#define IBaseVideoMixer_IsUsingClock(This,pbValue) (This)->lpVtbl->IsUsingClock(This,pbValue)
+#define IBaseVideoMixer_SetUsingClock(This,bValue) (This)->lpVtbl->SetUsingClock(This,bValue)
+#define IBaseVideoMixer_GetClockPeriod(This,pbValue) (This)->lpVtbl->GetClockPeriod(This,pbValue)
+#define IBaseVideoMixer_SetClockPeriod(This,bValue) (This)->lpVtbl->SetClockPeriod(This,bValue)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBaseVideoMixer_SetLeadPin_Proxy(
+    IBaseVideoMixer* This,
+    int iPin);
+void __RPC_STUB IBaseVideoMixer_SetLeadPin_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBaseVideoMixer_GetLeadPin_Proxy(
+    IBaseVideoMixer* This,
+    int *piPin);
+void __RPC_STUB IBaseVideoMixer_GetLeadPin_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBaseVideoMixer_GetInputPinCount_Proxy(
+    IBaseVideoMixer* This,
+    int *piPinCount);
+void __RPC_STUB IBaseVideoMixer_GetInputPinCount_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBaseVideoMixer_IsUsingClock_Proxy(
+    IBaseVideoMixer* This,
+    int *pbValue);
+void __RPC_STUB IBaseVideoMixer_IsUsingClock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBaseVideoMixer_SetUsingClock_Proxy(
+    IBaseVideoMixer* This,
+    int bValue);
+void __RPC_STUB IBaseVideoMixer_SetUsingClock_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBaseVideoMixer_GetClockPeriod_Proxy(
+    IBaseVideoMixer* This,
+    int *pbValue);
+void __RPC_STUB IBaseVideoMixer_GetClockPeriod_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBaseVideoMixer_SetClockPeriod_Proxy(
+    IBaseVideoMixer* This,
+    int bValue);
+void __RPC_STUB IBaseVideoMixer_SetClockPeriod_Stub(
+    IRpcStubBuffer* This,
+    IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IBaseVideoMixer_INTERFACE_DEFINED__ */
+
+#define iPALETTE_COLORS 256
+#define iEGA_COLORS 16
+#define iMASK_COLORS 3
+#define iTRUECOLOR 16
+#define iRED 0
+#define iGREEN 1
+#define iBLUE 2
+#define iPALETTE 8
+#define iMAXBITS 8
+typedef struct tag_TRUECOLORINFO {
+    DWORD dwBitMasks[3];
+    RGBQUAD bmiColors[256];
+} TRUECOLORINFO;
+typedef struct tagVIDEOINFOHEADER {
+    RECT rcSource;
+    RECT rcTarget;
+    DWORD dwBitRate;
+    DWORD dwBitErrorRate;
+    REFERENCE_TIME AvgTimePerFrame;
+    BITMAPINFOHEADER bmiHeader;
+} VIDEOINFOHEADER;
+typedef struct tagVIDEOINFO {
+    RECT rcSource;
+    RECT rcTarget;
+    DWORD dwBitRate;
+    DWORD dwBitErrorRate;
+    REFERENCE_TIME AvgTimePerFrame;
+    BITMAPINFOHEADER bmiHeader;
+    union {
+        RGBQUAD bmiColors[256];
+        DWORD dwBitMasks[3];
+        TRUECOLORINFO TrueColorInfo;
+    } DUMMYUNIONNAME;
+} VIDEOINFO;
+typedef struct tagMPEG1VIDEOINFO {
+    VIDEOINFOHEADER hdr;
+    DWORD dwStartTimeCode;
+    DWORD cbSequenceHeader;
+    BYTE bSequenceHeader[1];
+} MPEG1VIDEOINFO;
+#define MAX_SIZE_MPEG1_SEQUENCE_INFO 140
+#define MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)
+typedef struct tagAnalogVideoInfo {
+    RECT rcSource;
+    RECT rcTarget;
+    DWORD dwActiveWidth;
+    DWORD dwActiveHeight;
+    REFERENCE_TIME AvgTimePerFrame;
+} ANALOGVIDEOINFO;
+typedef enum __WIDL_amvideo_generated_name_00000001 {
+    AM_PROPERTY_FRAMESTEP_STEP = 0x1,
+    AM_PROPERTY_FRAMESTEP_CANCEL = 0x2,
+    AM_PROPERTY_FRAMESTEP_CANSTEP = 0x3,
+    AM_PROPERTY_FRAMESTEP_CANSTEPMULTIPLE = 0x4
+} AM_PROPERTY_FRAMESTEP;
+typedef struct _AM_FRAMESTEP_STEP {
+    DWORD dwFramesToStep;
+} AM_FRAMESTEP_STEP;
+/* Begin additional prototypes for all interfaces */
+
+ULONG           __RPC_USER HWND_UserSize     (ULONG *, ULONG, HWND *);
+unsigned char * __RPC_USER HWND_UserMarshal  (ULONG *, unsigned char *, HWND *);
+unsigned char * __RPC_USER HWND_UserUnmarshal(ULONG *, unsigned char *, HWND *);
+void            __RPC_USER HWND_UserFree     (ULONG *, HWND *);
+ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
+unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
+unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
+void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_AMVIDEO_H */
diff --git a/mingw-w64-headers/direct-x/include/amvideo.idl b/mingw-w64-headers/direct-x/include/amvideo.idl
new file mode 100644
index 0000000..ea486d5
--- /dev/null
+++ b/mingw-w64-headers/direct-x/include/amvideo.idl
@@ -0,0 +1,241 @@
+/*
+ * Copyright (C) 2003 Robert Shearman
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+import "objidl.idl";
+
+/* trick widl into thinking that it knows the DirectDraw types 
+ * as there is no IDL file for them (yet) */
+cpp_quote("#if 0")
+typedef void * LPDIRECTDRAW;
+typedef void DDSURFACEDESC,DDCAPS;
+typedef DWORD RGBQUAD;
+typedef LONGLONG REFERENCE_TIME;
+typedef struct
+{
+    DWORD 	biSize;
+    LONG  	biWidth;
+    LONG  	biHeight;
+    WORD 	biPlanes;
+    WORD 	biBitCount;
+    DWORD 	biCompression;
+    DWORD 	biSizeImage;
+    LONG  	biXPelsPerMeter;
+    LONG  	biYPelsPerMeter;
+    DWORD 	biClrUsed;
+    DWORD 	biClrImportant;
+} BITMAPINFOHEADER, *PBITMAPINFOHEADER, *LPBITMAPINFOHEADER;
+cpp_quote("#endif")
+
+cpp_quote("#include <ddraw.h>")
+
+cpp_quote("#define AMDDS_NONE 0x00")
+cpp_quote("#define AMDDS_DCIPS 0x01")
+cpp_quote("#define AMDDS_PS 0x02")
+cpp_quote("#define AMDDS_RGBOVR 0x04")
+cpp_quote("#define AMDDS_YUVOVR 0x08")
+cpp_quote("#define AMDDS_RGBOFF 0x10")
+cpp_quote("#define AMDDS_YUVOFF 0x20")
+cpp_quote("#define AMDDS_RGBFLP 0x40")
+cpp_quote("#define AMDDS_YUVFLP 0x80")
+cpp_quote("#define AMDDS_ALL 0xFF")
+cpp_quote("#define AMDDS_DEFAULT AMDDS_ALL")
+
+cpp_quote("#define AMDDS_YUV (AMDDS_YUVOFF | AMDDS_YUVOVR | AMDDS_YUVFLP)")
+cpp_quote("#define AMDDS_RGB (AMDDS_RGBOFF | AMDDS_RGBOVR | AMDDS_RGBFLP)")
+cpp_quote("#define AMDSS_PRIMARY (AMDDS_DCIPS | AMDDS_PS)")
+
+[
+    object,
+    /* uuid(36d39eb0-dd75-11ce-bf0e-00aa0055595a)  conflicts with uuids.h */
+    pointer_default(unique),
+    local
+]
+interface IDirectDrawVideo : IUnknown
+{
+    HRESULT GetSwitches([out] DWORD * pSwitches);
+    HRESULT SetSwitches([in] DWORD Switches);
+    HRESULT GetCaps([out] DDCAPS * pCaps);
+    HRESULT GetEmulatedCaps([out] DDCAPS *pCaps);
+    HRESULT GetSurfaceDesc([out] DDSURFACEDESC * pSurfaceDesc);
+    HRESULT GetFourCCCodes([out] DWORD * pCount, [out] DWORD * pCodes);
+    HRESULT SetDirectDraw([in] LPDIRECTDRAW pDirectDraw);
+    HRESULT GetDirectDraw([out] LPDIRECTDRAW * ppDirectDraw);
+    HRESULT GetSurfaceType([out] DWORD * pSurfaceType);
+    HRESULT SetDefault();
+    HRESULT UseScanLine([in] long UseScanLine);
+    HRESULT CanUseScanLine([out] long * UseScanLine);
+    HRESULT UseOverlayStretch([in] long UseOverlayStretch);
+    HRESULT CanUseOverlayStretch([out] long * UseOverlayStretch);
+    HRESULT UseWhenFullScreen([in] long UseWhenFullScreen);
+    HRESULT WillUseFullScreen([out] long * UseWhenFullScreen);
+}
+
+[
+    object,
+    /* uuid(1bd0ecb0-f8e2-11ce-aac6-0020af0b99a3)  conflicts with uuids.h */
+    pointer_default(unique),
+    local
+]
+interface IQualProp : IUnknown
+{
+    [propget] HRESULT FramesDroppedInRenderer([out] int * pcFrames);
+    [propget] HRESULT FramesDrawn([out] int * pcFramesDrawn);
+    [propget] HRESULT AvgFrameRate([out] int * piAvgFrameRate);
+    [propget] HRESULT Jitter([out] int * iJitter);
+    [propget] HRESULT AvgSyncOffset([out] int * piAvg);
+    [propget] HRESULT DevSyncOffset([out] int * piDev);
+}
+
+[
+    object,
+    /* uuid(dd1d7110-7836-11cf-bf47-00aa0055595a)  conflicts with uuids.h */
+    pointer_default(unique)
+]
+interface IFullScreenVideo : IUnknown
+{
+    HRESULT CountModes([out] long * pModes);
+    HRESULT GetModeInfo([in] long Mode, [out] long * pWidth, [out] long * pHeight, [out] long * pDepth);
+    HRESULT GetCurrentMode([out] long * pMode);
+    HRESULT IsModeAvailable([in] long Mode);
+    HRESULT IsModeEnabled([in] long Mode);
+    HRESULT SetEnabled([in] long Mode, [in] long bEnabled);
+    HRESULT GetClipFactor([out] long * pClipFactor);
+    HRESULT SetClipFactor([in] long ClipFactor);
+    HRESULT SetMessageDrain([in] HWND hwnd);
+    HRESULT GetMessageDrain([out] HWND * hwnd);
+    HRESULT SetMonitor([in] long Monitor);
+    HRESULT GetMonitor([out] long * Monitor);
+    HRESULT HideOnDeactivate([in] long Hide);
+    HRESULT IsHideOnDeactivate();
+    HRESULT SetCaption([in] BSTR strCaption);
+    HRESULT GetCaption([out] BSTR * pstrCaption);
+    HRESULT SetDefault();
+}
+
+[
+    object,
+    /* uuid(53479470-f1dd-11cf-bc42-00aa00ac74f6)  conflicts with uuids.h */
+    pointer_default(unique),
+    local
+]
+interface IFullScreenVideoEx : IFullScreenVideo
+{
+    HRESULT SetAcceleratorTable([in] HWND hwnd, [in] HACCEL hAccel);
+    HRESULT GetAcceleratorTable([out] HWND * phwnd, [out] HACCEL * phAccel);
+    HRESULT KeepPixelAspectRatio([in] long KeepAspect);
+    /* FIXME: not sure is this next method is an [out] */
+    HRESULT IsKeepPixelAspectRatio([out] long * pKeepAspect);
+}
+
+[
+    object,
+    /* uuid(61ded640-e912-11ce-a099-00aa00479a58)  conflicts with uuids.h */
+    pointer_default(unique),
+    local
+]
+interface IBaseVideoMixer : IUnknown
+{
+    HRESULT SetLeadPin([in] int iPin);
+    HRESULT GetLeadPin([out] int * piPin);
+    HRESULT GetInputPinCount([out] int * piPinCount);
+    HRESULT IsUsingClock([out] int * pbValue);
+    HRESULT SetUsingClock([in] int bValue);
+    HRESULT GetClockPeriod([out] int * pbValue);
+    HRESULT SetClockPeriod([in] int bValue);
+}
+
+#define iPALETTE_COLORS 256
+#define iMASK_COLORS 3
+
+cpp_quote("#define iPALETTE_COLORS 256")
+cpp_quote("#define iEGA_COLORS 16")
+cpp_quote("#define iMASK_COLORS 3")
+cpp_quote("#define iTRUECOLOR 16")
+cpp_quote("#define iRED 0")
+cpp_quote("#define iGREEN 1")
+cpp_quote("#define iBLUE 2")
+cpp_quote("#define iPALETTE 8")
+cpp_quote("#define iMAXBITS 8")
+
+typedef struct tag_TRUECOLORINFO
+{
+    DWORD dwBitMasks[iMASK_COLORS];
+    RGBQUAD bmiColors[iPALETTE_COLORS];
+} TRUECOLORINFO;
+
+typedef struct tagVIDEOINFOHEADER
+{
+    RECT rcSource;
+    RECT rcTarget;
+    DWORD dwBitRate;
+    DWORD dwBitErrorRate;
+    REFERENCE_TIME AvgTimePerFrame;
+
+    BITMAPINFOHEADER bmiHeader;
+} VIDEOINFOHEADER;
+
+typedef struct tagVIDEOINFO
+{
+    RECT rcSource;
+    RECT rcTarget;
+    DWORD dwBitRate;
+    DWORD dwBitErrorRate;
+    REFERENCE_TIME AvgTimePerFrame;
+
+    BITMAPINFOHEADER bmiHeader;
+
+    union
+    {
+        RGBQUAD bmiColors[iPALETTE_COLORS];
+        DWORD dwBitMasks[iMASK_COLORS];
+        TRUECOLORINFO TrueColorInfo;
+    } DUMMYUNIONNAME;
+} VIDEOINFO;
+
+typedef struct tagMPEG1VIDEOINFO
+{
+    VIDEOINFOHEADER hdr;
+    DWORD dwStartTimeCode;
+    DWORD cbSequenceHeader;
+    BYTE bSequenceHeader[1];
+} MPEG1VIDEOINFO;
+
+cpp_quote("#define MAX_SIZE_MPEG1_SEQUENCE_INFO 140")
+cpp_quote("#define MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)")
+
+typedef struct tagAnalogVideoInfo
+{
+    RECT rcSource;
+    RECT rcTarget;
+    DWORD dwActiveWidth;
+    DWORD dwActiveHeight;
+    REFERENCE_TIME AvgTimePerFrame;
+} ANALOGVIDEOINFO;
+
+typedef enum
+{
+    AM_PROPERTY_FRAMESTEP_STEP = 0x01,
+    AM_PROPERTY_FRAMESTEP_CANCEL = 0x02,
+    AM_PROPERTY_FRAMESTEP_CANSTEP = 0x03,
+    AM_PROPERTY_FRAMESTEP_CANSTEPMULTIPLE = 0x04
+} AM_PROPERTY_FRAMESTEP;
+
+typedef struct _AM_FRAMESTEP_STEP
+{
+    DWORD dwFramesToStep;
+} AM_FRAMESTEP_STEP;
diff --git a/mingw-w64-headers/direct-x/include/audevcod.h b/mingw-w64-headers/direct-x/include/audevcod.h
new file mode 100644
index 0000000..116f1a8
--- /dev/null
+++ b/mingw-w64-headers/direct-x/include/audevcod.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __AUDEVCOD__
+#define __AUDEVCOD__
+
+typedef enum _tagSND_DEVICE_ERROR
+{
+    SNDDEV_ERROR_Open=1,
+    SNDDEV_ERROR_Close=2,
+    SNDDEV_ERROR_GetCaps=3,
+    SNDDEV_ERROR_PrepareHeader=4,
+    SNDDEV_ERROR_UnprepareHeader=5,
+    SNDDEV_ERROR_Reset=6,
+    SNDDEV_ERROR_Restart=7,
+    SNDDEV_ERROR_GetPosition=8,
+    SNDDEV_ERROR_Write=9,
+    SNDDEV_ERROR_Pause=10,
+    SNDDEV_ERROR_Stop=11,
+    SNDDEV_ERROR_Start=12,
+    SNDDEV_ERROR_AddBuffer=13,
+    SNDDEV_ERROR_Query=14
+} SNDDEV_ERR;
+
+#define EC_SND_DEVICE_ERROR_BASE 0x0200
+#define EC_SNDDEV_IN_ERROR       (EC_SND_DEVICE_ERROR_BASE+0x00)
+#define EC_SNDDEV_OUT_ERROR      (EC_SND_DEVICE_ERROR_BASE+0x01)
+
+#endif  /* __AUDEVCOD__ */
diff --git a/mingw-w64-headers/direct-x/include/dshow.h b/mingw-w64-headers/direct-x/include/dshow.h
index 349ad9d..6513140 100644
--- a/mingw-w64-headers/direct-x/include/dshow.h
+++ b/mingw-w64-headers/direct-x/include/dshow.h
@@ -21,24 +21,35 @@
 
 #define AM_NOVTABLE
 
-#include <windef.h>
-#include <wingdi.h>
-#include <objbase.h>
+#ifndef __WINESRC__
+# include <windows.h>
+# include <windowsx.h>
+#else
+# include <windef.h>
+# include <wingdi.h>
+# include <objbase.h>
+#endif
+#include <olectl.h>
 #include <ddraw.h>
 #include <mmsystem.h>
+/* FIXME: #include <strsafe.h>*/
 
 #ifndef NUMELMS
 #define NUMELMS(array) (sizeof(array)/sizeof((array)[0]))
 #endif
 
 #include <strmif.h>
-/*#include <amvideo.h>*/
-/*#include <amaudio.h>*/
+#include <amvideo.h>
+#ifdef DSHOW_USE_AMAUDIO
+/* FIXME: #include <amaudio.h>*/
+#endif
 #include <control.h>
-/*#include <evcode.h>*/
+#include <evcode.h>
 #include <uuids.h>
 #include <errors.h>
+/* FIXME: #include <edevdefs.h> */
 #include <audevcod.h>
+/* FIXME: #include <dvdevcod.h> */
 
 #ifndef OATRUE
 #define OATRUE (-1)
@@ -47,19 +58,4 @@
 #define OAFALSE (0)
 #endif
 
-#include "dmdls.h"
-
-#ifndef VIDEINFOHEADER_DEFINED
-#define VIDEINFOHEADER_DEFINED
-
-typedef struct tagVIDEOINFOHEADER {
-    RECT                rcSource;
-    RECT                rcTarget;
-    DWORD               dwBitRate;
-    DWORD               dwBitErrorRate;
-    REFERENCE_TIME      AvgTimePerFrame;
-    BITMAPINFOHEADER    bmiHeader;
-} VIDEOINFOHEADER;
-#endif
-
 #endif /* __DSHOW_INCLUDED__ */
diff --git a/mingw-w64-headers/direct-x/include/errors.h b/mingw-w64-headers/direct-x/include/errors.h
new file mode 100644
index 0000000..c8c3067
--- /dev/null
+++ b/mingw-w64-headers/direct-x/include/errors.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2006 Hans Leidekker
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __ERRORS__
+#define __ERRORS__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define AMOVIEAPI
+
+#define VFW_FIRST_CODE      0x200
+#define MAX_ERROR_TEXT_LEN  160
+
+#include <vfwmsgs.h>
+
+typedef BOOL (WINAPI* AMGETERRORTEXTPROCA)(HRESULT,char*,DWORD);
+typedef BOOL (WINAPI* AMGETERRORTEXTPROCW)(HRESULT,WCHAR*,DWORD);
+DECL_WINELIB_TYPE_AW(AMGETERRORTEXTPROC)
+
+DWORD WINAPI AMGetErrorTextA(HRESULT,LPSTR,DWORD);
+DWORD WINAPI AMGetErrorTextW(HRESULT,LPWSTR,DWORD);
+#define AMGetErrorText WINELIB_NAME_AW(AMGetErrorText)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __ERRORS__ */
diff --git a/mingw-w64-headers/direct-x/include/evcode.h b/mingw-w64-headers/direct-x/include/evcode.h
new file mode 100644
index 0000000..3cbdd9d
--- /dev/null
+++ b/mingw-w64-headers/direct-x/include/evcode.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2004 Christian Costa
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __WINE_EVCODE_H
+#define __WINE_EVCODE_H
+
+#define EC_SYSTEMBASE                       0x00
+#define EC_USER                             0x8000
+
+#define EC_COMPLETE                         0x01
+#define EC_USERABORT                        0x02
+#define EC_ERRORABORT                       0x03
+#define EC_TIME                             0x04
+#define EC_REPAINT                          0x05
+#define EC_STREAM_ERROR_STOPPED             0x06
+#define EC_STREAM_ERROR_STILLPLAYING        0x07
+#define EC_ERROR_STILLPLAYING               0x08
+#define EC_PALETTE_CHANGED                  0x09
+#define EC_VIDEO_SIZE_CHANGED               0x0A
+#define EC_QUALITY_CHANGE                   0x0B
+#define EC_SHUTTING_DOWN                    0x0C
+#define EC_CLOCK_CHANGED                    0x0D
+#define EC_OPENING_FILE                     0x10
+#define EC_BUFFERING_DATA                   0x11
+#define EC_FULLSCREEN_LOST                  0x12
+#define EC_ACTIVATE                         0x13
+#define EC_NEED_RESTART                     0x14
+#define EC_WINDOW_DESTROYED                 0x15
+#define EC_DISPLAY_CHANGED                  0x16
+#define EC_STARVATION                       0x17
+#define EC_OLE_EVENT                        0x18
+#define EC_NOTIFY_WINDOW                    0x19
+#define EC_STREAM_CONTROL_STOPPED           0x1A
+#define EC_STREAM_CONTROL_STARTED           0x1B
+#define EC_END_OF_SEGMENT                   0x1C
+#define EC_SEGMENT_STARTED                  0x1D
+#define EC_LENGTH_CHANGED                   0x1E
+
+#endif /* __WINE_EVCODE_H */
diff --git a/mingw-w64-headers/direct-x/include/vfwmsgs.h b/mingw-w64-headers/direct-x/include/vfwmsgs.h
new file mode 100644
index 0000000..16b25c3
--- /dev/null
+++ b/mingw-w64-headers/direct-x/include/vfwmsgs.h
@@ -0,0 +1,166 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#define VFW_S_NO_MORE_ITEMS              ((HRESULT)0x00040103)
+#define VFW_S_DUPLICATE_NAME             ((HRESULT)0x0004022D)
+#define VFW_S_STATE_INTERMEDIATE         ((HRESULT)0x00040237)
+#define VFW_S_PARTIAL_RENDER             ((HRESULT)0x00040242)
+#define VFW_S_SOME_DATA_IGNORED          ((HRESULT)0x00040245)
+#define VFW_S_CONNECTIONS_DEFERRED       ((HRESULT)0x00040246)
+#define VFW_S_RESOURCE_NOT_NEEDED        ((HRESULT)0x00040250)
+#define VFW_S_MEDIA_TYPE_IGNORED         ((HRESULT)0x00040254)
+#define VFW_S_VIDEO_NOT_RENDERED         ((HRESULT)0x00040257)
+#define VFW_S_AUDIO_NOT_RENDERED         ((HRESULT)0x00040258)
+#define VFW_S_RPZA                       ((HRESULT)0x0004025A)
+#define VFW_S_ESTIMATED                  ((HRESULT)0x00040260)
+#define VFW_S_RESERVED                   ((HRESULT)0x00040263)
+#define VFW_S_STREAM_OFF                 ((HRESULT)0x00040267)
+#define VFW_S_CANT_CUE                   ((HRESULT)0x00040268)
+#define VFW_S_NO_STOP_TIME               ((HRESULT)0x00040270)
+#define VFW_S_NOPREVIEWPIN               ((HRESULT)0x0004027E)
+#define VFW_S_DVD_NON_ONE_SEQUENTIAL     ((HRESULT)0x00040280)
+#define VFW_S_DVD_CHANNEL_CONTENTS_NOT_AVAILABLE ((HRESULT)0x0004028C)
+#define VFW_S_DVD_NOT_ACCURATE           ((HRESULT)0x0004028D)
+#define VFW_E_INVALIDMEDIATYPE           ((HRESULT)0x80040200)
+#define VFW_E_INVALIDSUBTYPE             ((HRESULT)0x80040201)
+#define VFW_E_NEED_OWNER                 ((HRESULT)0x80040202)
+#define VFW_E_ENUM_OUT_OF_SYNC           ((HRESULT)0x80040203)
+#define VFW_E_ALREADY_CONNECTED          ((HRESULT)0x80040204)
+#define VFW_E_FILTER_ACTIVE              ((HRESULT)0x80040205)
+#define VFW_E_NO_TYPES                   ((HRESULT)0x80040206)
+#define VFW_E_NO_ACCEPTABLE_TYPES        ((HRESULT)0x80040207)
+#define VFW_E_INVALID_DIRECTION          ((HRESULT)0x80040208)
+#define VFW_E_NOT_CONNECTED              ((HRESULT)0x80040209)
+#define VFW_E_NO_ALLOCATOR               ((HRESULT)0x8004020A)
+#define VFW_E_RUNTIME_ERROR              ((HRESULT)0x8004020B)
+#define VFW_E_BUFFER_NOTSET              ((HRESULT)0x8004020C)
+#define VFW_E_BUFFER_OVERFLOW            ((HRESULT)0x8004020D)
+#define VFW_E_BADALIGN                   ((HRESULT)0x8004020E)
+#define VFW_E_ALREADY_COMMITTED          ((HRESULT)0x8004020F)
+#define VFW_E_BUFFERS_OUTSTANDING        ((HRESULT)0x80040210)
+#define VFW_E_NOT_COMMITTED              ((HRESULT)0x80040211)
+#define VFW_E_SIZENOTSET                 ((HRESULT)0x80040212)
+#define VFW_E_NO_CLOCK                   ((HRESULT)0x80040213)
+#define VFW_E_NO_SINK                    ((HRESULT)0x80040214)
+#define VFW_E_NO_INTERFACE               ((HRESULT)0x80040215)
+#define VFW_E_NOT_FOUND                  ((HRESULT)0x80040216)
+#define VFW_E_CANNOT_CONNECT             ((HRESULT)0x80040217)
+#define VFW_E_CANNOT_RENDER              ((HRESULT)0x80040218)
+#define VFW_E_CHANGING_FORMAT            ((HRESULT)0x80040219)
+#define VFW_E_NO_COLOR_KEY_SET           ((HRESULT)0x8004021A)
+#define VFW_E_NOT_OVERLAY_CONNECTION     ((HRESULT)0x8004021B)
+#define VFW_E_NOT_SAMPLE_CONNECTION      ((HRESULT)0x8004021C)
+#define VFW_E_PALETTE_SET                ((HRESULT)0x8004021D)
+#define VFW_E_COLOR_KEY_SET              ((HRESULT)0x8004021E)
+#define VFW_E_NO_COLOR_KEY_FOUND         ((HRESULT)0x8004021F)
+#define VFW_E_NO_PALETTE_AVAILABLE       ((HRESULT)0x80040220)
+#define VFW_E_NO_DISPLAY_PALETTE         ((HRESULT)0x80040221)
+#define VFW_E_TOO_MANY_COLORS            ((HRESULT)0x80040222)
+#define VFW_E_STATE_CHANGED              ((HRESULT)0x80040223)
+#define VFW_E_NOT_STOPPED                ((HRESULT)0x80040224)
+#define VFW_E_NOT_PAUSED                 ((HRESULT)0x80040225)
+#define VFW_E_NOT_RUNNING                ((HRESULT)0x80040226)
+#define VFW_E_WRONG_STATE                ((HRESULT)0x80040227)
+#define VFW_E_START_TIME_AFTER_END       ((HRESULT)0x80040228)
+#define VFW_E_INVALID_RECT               ((HRESULT)0x80040229)
+#define VFW_E_TYPE_NOT_ACCEPTED          ((HRESULT)0x8004022A)
+#define VFW_E_SAMPLE_REJECTED            ((HRESULT)0x8004022B)
+#define VFW_E_SAMPLE_REJECTED_EOS        ((HRESULT)0x8004022C)
+#define VFW_E_DUPLICATE_NAME             ((HRESULT)0x8004022D)
+#define VFW_E_TIMEOUT                    ((HRESULT)0x8004022E)
+#define VFW_E_INVALID_FILE_FORMAT        ((HRESULT)0x8004022F)
+#define VFW_E_ENUM_OUT_OF_RANGE          ((HRESULT)0x80040230)
+#define VFW_E_CIRCULAR_GRAPH             ((HRESULT)0x80040231)
+#define VFW_E_NOT_ALLOWED_TO_SAVE        ((HRESULT)0x80040232)
+#define VFW_E_TIME_ALREADY_PASSED        ((HRESULT)0x80040233)
+#define VFW_E_ALREADY_CANCELLED          ((HRESULT)0x80040234)
+#define VFW_E_CORRUPT_GRAPH_FILE         ((HRESULT)0x80040235)
+#define VFW_E_ADVISE_ALREADY_SET         ((HRESULT)0x80040236)
+#define VFW_E_NO_MODEX_AVAILABLE         ((HRESULT)0x80040238)
+#define VFW_E_NO_ADVISE_SET              ((HRESULT)0x80040239)
+#define VFW_E_NO_FULLSCREEN              ((HRESULT)0x8004023A)
+#define VFW_E_IN_FULLSCREEN_MODE         ((HRESULT)0x8004023B)
+#define VFW_E_UNKNOWN_FILE_TYPE          ((HRESULT)0x80040240)
+#define VFW_E_CANNOT_LOAD_SOURCE_FILTER  ((HRESULT)0x80040241)
+#define VFW_E_FILE_TOO_SHORT             ((HRESULT)0x80040243)
+#define VFW_E_INVALID_FILE_VERSION       ((HRESULT)0x80040244)
+#define VFW_E_INVALID_CLSID              ((HRESULT)0x80040247)
+#define VFW_E_INVALID_MEDIA_TYPE         ((HRESULT)0x80040248)
+#define VFW_E_SAMPLE_TIME_NOT_SET        ((HRESULT)0x80040249)
+#define VFW_E_MEDIA_TIME_NOT_SET         ((HRESULT)0x80040251)
+#define VFW_E_NO_TIME_FORMAT_SET         ((HRESULT)0x80040252)
+#define VFW_E_MONO_AUDIO_HW              ((HRESULT)0x80040253)
+#define VFW_E_NO_DECOMPRESSOR            ((HRESULT)0x80040255)
+#define VFW_E_NO_AUDIO_HARDWARE          ((HRESULT)0x80040256)
+#define VFW_E_RPZA                       ((HRESULT)0x80040259)
+#define VFW_E_PROCESSOR_NOT_SUITABLE     ((HRESULT)0x8004025B)
+#define VFW_E_UNSUPPORTED_AUDIO          ((HRESULT)0x8004025C)
+#define VFW_E_UNSUPPORTED_VIDEO          ((HRESULT)0x8004025D)
+#define VFW_E_MPEG_NOT_CONSTRAINED       ((HRESULT)0x8004025E)
+#define VFW_E_NOT_IN_GRAPH               ((HRESULT)0x8004025F)
+#define VFW_E_NO_TIME_FORMAT             ((HRESULT)0x80040261)
+#define VFW_E_READ_ONLY                  ((HRESULT)0x80040262)
+#define VFW_E_BUFFER_UNDERFLOW           ((HRESULT)0x80040264)
+#define VFW_E_UNSUPPORTED_STREAM         ((HRESULT)0x80040265)
+#define VFW_E_NO_TRANSPORT               ((HRESULT)0x80040266)
+#define VFW_E_BAD_VIDEOCD                ((HRESULT)0x80040269)
+#define VFW_E_OUT_OF_VIDEO_MEMORY        ((HRESULT)0x80040271)
+#define VFW_E_VP_NEGOTIATION_FAILED      ((HRESULT)0x80040272)
+#define VFW_E_DDRAW_CAPS_NOT_SUITABLE    ((HRESULT)0x80040273)
+#define VFW_E_NO_VP_HARDWARE             ((HRESULT)0x80040274)
+#define VFW_E_NO_CAPTURE_HARDWARE        ((HRESULT)0x80040275)
+#define VFW_E_DVD_OPERATION_INHIBITED    ((HRESULT)0x80040276)
+#define VFW_E_DVD_INVALIDDOMAIN          ((HRESULT)0x80040277)
+#define VFW_E_DVD_NO_BUTTON              ((HRESULT)0x80040278)
+#define VFW_E_DVD_GRAPHNOTREADY          ((HRESULT)0x80040279)
+#define VFW_E_DVD_RENDERFAIL             ((HRESULT)0x8004027A)
+#define VFW_E_DVD_DECNOTENOUGH           ((HRESULT)0x8004027B)
+#define VFW_E_DDRAW_VERSION_NOT_SUITABLE ((HRESULT)0x8004027C)
+#define VFW_E_COPYPROT_FAILED            ((HRESULT)0x8004027D)
+#define VFW_E_TIME_EXPIRED               ((HRESULT)0x8004027F)
+#define VFW_E_DVD_WRONG_SPEED            ((HRESULT)0x80040281)
+#define VFW_E_DVD_MENU_DOES_NOT_EXIST    ((HRESULT)0x80040282)
+#define VFW_E_DVD_CMD_CANCELLED          ((HRESULT)0x80040283)
+#define VFW_E_DVD_STATE_WRONG_VERSION    ((HRESULT)0x80040284)
+#define VFW_E_DVD_STATE_CORRUPT          ((HRESULT)0x80040285)
+#define VFW_E_DVD_STATE_WRONG_DISC       ((HRESULT)0x80040286)
+#define VFW_E_DVD_INCOMPATIBLE_REGION    ((HRESULT)0x80040287)
+#define VFW_E_DVD_NO_ATTRIBUTES          ((HRESULT)0x80040288)
+#define VFW_E_DVD_NO_GOUP_PGC            ((HRESULT)0x80040289)
+#define VFW_E_DVD_LOW_PARENTAL_LEVEL     ((HRESULT)0x8004028A)
+#define VFW_E_DVD_NOT_IN_KARAOKE_MODE    ((HRESULT)0x8004028B)
+#define VFW_E_FRAME_STEP_UNSUPPORTED     ((HRESULT)0x8004028E)
+#define VFW_E_DVD_STREAM_DISABLED        ((HRESULT)0x8004028F)
+#define VFW_E_DVD_TITLE_UNKNOWN          ((HRESULT)0x80040290)
+#define VFW_E_DVD_INVALID_DISC           ((HRESULT)0x80040291)
+#define VFW_E_DVD_NO_RESUME_INFORMATION  ((HRESULT)0x80040292)
+#define VFW_E_PIN_ALREADY_BLOCKED_ON_THIS_THREAD ((HRESULT)0x80040293)
+#define VFW_E_PIN_ALREADY_BLOCKED        ((HRESULT)0x80040294)
+#define VFW_E_CERTIFICATION_FAILURE      ((HRESULT)0x80040295)
+#define VFW_E_VMR_NOT_IN_MIXER_MODE      ((HRESULT)0x80040296)
+#define VFW_E_VMR_NO_AP_SUPPLIED         ((HRESULT)0x80040297)
+#define VFW_E_VMR_NO_DEINTERLACE_HW      ((HRESULT)0x80040298)
+#define VFW_E_DVD_VMR9_INCOMPATIBLEDEC   ((HRESULT)0x8004029A)
+#define VFW_E_BAD_KEY                    ((HRESULT)0x800403F2)
+
+#ifndef E_PROP_ID_UNSUPPORTED
+#define E_PROP_ID_UNSUPPORTED            ((HRESULT)0x80070490)
+#endif
+#ifndef E_PROP_SET_UNSUPPORTED
+#define E_PROP_SET_UNSUPPORTED           ((HRESULT)0x80070492)
+#endif
