diff --git a/mingw-w64-headers/Makefile.am b/mingw-w64-headers/Makefile.am
index ddbdd31..f686da9 100644
--- a/mingw-w64-headers/Makefile.am
+++ b/mingw-w64-headers/Makefile.am
@@ -107,6 +107,7 @@
   include/devicetopology.idl \
   include/downloadmgr.idl \
   include/drmexternals.idl \
+  include/dvdif.idl \
   include/dxgi.idl \
   include/dxgi1_2.idl \
   include/dxgi1_3.idl \
diff --git a/mingw-w64-headers/Makefile.in b/mingw-w64-headers/Makefile.in
index efe31fb..19e143d 100644
--- a/mingw-w64-headers/Makefile.in
+++ b/mingw-w64-headers/Makefile.in
@@ -302,6 +302,7 @@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -406,6 +407,7 @@
 @HAVE_WIDL_TRUE@  include/devicetopology.idl \
 @HAVE_WIDL_TRUE@  include/downloadmgr.idl \
 @HAVE_WIDL_TRUE@  include/drmexternals.idl \
+@HAVE_WIDL_TRUE@  include/dvdif.idl \
 @HAVE_WIDL_TRUE@  include/dxgi.idl \
 @HAVE_WIDL_TRUE@  include/dxgi1_2.idl \
 @HAVE_WIDL_TRUE@  include/dxgi1_3.idl \
diff --git a/mingw-w64-headers/include/dvdif.h b/mingw-w64-headers/include/dvdif.h
new file mode 100644
index 0000000..638d877
--- /dev/null
+++ b/mingw-w64-headers/include/dvdif.h
@@ -0,0 +1,2781 @@
+/*** Autogenerated by WIDL 5.0-rc1 from include/dvdif.idl - Do not edit ***/
+
+#ifdef _WIN32
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+#endif
+
+#ifndef COM_NO_WINDOWS_H
+#include <windows.h>
+#include <ole2.h>
+#endif
+
+#ifndef __dvdif_h__
+#define __dvdif_h__
+
+/* Forward declarations */
+
+#ifndef __IDvdControl_FWD_DEFINED__
+#define __IDvdControl_FWD_DEFINED__
+typedef interface IDvdControl IDvdControl;
+#ifdef __cplusplus
+interface IDvdControl;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDvdInfo_FWD_DEFINED__
+#define __IDvdInfo_FWD_DEFINED__
+typedef interface IDvdInfo IDvdInfo;
+#ifdef __cplusplus
+interface IDvdInfo;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDvdCmd_FWD_DEFINED__
+#define __IDvdCmd_FWD_DEFINED__
+typedef interface IDvdCmd IDvdCmd;
+#ifdef __cplusplus
+interface IDvdCmd;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDvdState_FWD_DEFINED__
+#define __IDvdState_FWD_DEFINED__
+typedef interface IDvdState IDvdState;
+#ifdef __cplusplus
+interface IDvdState;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDvdControl2_FWD_DEFINED__
+#define __IDvdControl2_FWD_DEFINED__
+typedef interface IDvdControl2 IDvdControl2;
+#ifdef __cplusplus
+interface IDvdControl2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDvdInfo2_FWD_DEFINED__
+#define __IDvdInfo2_FWD_DEFINED__
+typedef interface IDvdInfo2 IDvdInfo2;
+#ifdef __cplusplus
+interface IDvdInfo2;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IDvdGraphBuilder_FWD_DEFINED__
+#define __IDvdGraphBuilder_FWD_DEFINED__
+typedef interface IDvdGraphBuilder IDvdGraphBuilder;
+#ifdef __cplusplus
+interface IDvdGraphBuilder;
+#endif /* __cplusplus */
+#endif
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+#include <objidl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <ddraw.h>
+#if 0
+#ifndef __IGraphBuilder_FWD_DEFINED__
+#define __IGraphBuilder_FWD_DEFINED__
+typedef interface IGraphBuilder IGraphBuilder;
+#ifdef __cplusplus
+interface IGraphBuilder;
+#endif /* __cplusplus */
+#endif
+
+#endif
+typedef enum tagDVD_DOMAIN {
+    DVD_DOMAIN_FirstPlay = 1,
+    DVD_DOMAIN_VideoManagerMenu = 2,
+    DVD_DOMAIN_VideoTitleSetMenu = 3,
+    DVD_DOMAIN_Title = 4,
+    DVD_DOMAIN_Stop = 5
+} DVD_DOMAIN;
+typedef enum tagDVD_MENU_ID {
+    DVD_MENU_Title = 2,
+    DVD_MENU_Root = 3,
+    DVD_MENU_Subpicture = 4,
+    DVD_MENU_Audio = 5,
+    DVD_MENU_Angle = 6,
+    DVD_MENU_Chapter = 7
+} DVD_MENU_ID;
+typedef enum tagDVD_DISC_SIDE {
+    DVD_SIDE_A = 1,
+    DVD_SIDE_B = 2
+} DVD_DISC_SIDE;
+typedef enum tagDVD_PREFERRED_DISPLAY_MODE {
+    DISPLAY_CONTENT_DEFAULT = 0,
+    DISPLAY_16x9 = 1,
+    DISPLAY_4x3_PANSCAN_PREFERRED = 2,
+    DISPLAY_4x3_LETTERBOX_PREFERRED = 3
+} DVD_PREFERRED_DISPLAY_MODE;
+typedef WORD DVD_REGISTER;
+typedef DVD_REGISTER GPRMARRAY[16];
+typedef DVD_REGISTER SPRMARRAY[24];
+typedef struct tagDVD_ATR {
+    ULONG ulCAT;
+    BYTE pbATRI[768];
+} DVD_ATR;
+typedef BYTE DVD_VideoATR[2];
+typedef BYTE DVD_AudioATR[8];
+typedef BYTE DVD_SubpictureATR[6];
+typedef enum tagDVD_FRAMERATE {
+    DVD_FPS_25 = 1,
+    DVD_FPS_30NonDrop = 3
+} DVD_FRAMERATE;
+typedef struct tagDVD_TIMECODE
+{
+   ULONG Hours1 : 4;
+   ULONG Hours10 : 4;
+   ULONG Minutes1 : 4;
+   ULONG Minutes10 : 4;
+   ULONG Seconds1 : 4;
+   ULONG Seconds10 : 4;
+   ULONG Frames1 : 4;
+   ULONG Frames10 : 2;
+   ULONG FrameRateCode : 2;
+} DVD_TIMECODE;
+typedef enum tagDVD_NavCmdType {
+    DVD_NavCmdType_Pre = 1,
+    DVD_NavCmdType_Post = 2,
+    DVD_NavCmdType_Cell = 3,
+    DVD_NavCmdType_Button = 4
+} DVD_NavCmdType;
+typedef enum tagDVD_TIMECODE_FLAGS {
+    DVD_TC_FLAG_25fps = 0x1,
+    DVD_TC_FLAG_30fps = 0x2,
+    DVD_TC_FLAG_DropFrame = 0x4,
+    DVD_TC_FLAG_Interpolated = 0x8
+} DVD_TIMECODE_FLAGS;
+typedef struct tagDVD_HMSF_TIMECODE {
+    BYTE bHours;
+    BYTE bMinutes;
+    BYTE bSeconds;
+    BYTE bFrames;
+} DVD_HMSF_TIMECODE;
+typedef struct tagDVD_PLAYBACK_LOCATION2 {
+    ULONG TitleNum;
+    ULONG ChapterNum;
+    DVD_HMSF_TIMECODE TimeCode;
+    ULONG TimeCodeFlags;
+} DVD_PLAYBACK_LOCATION2;
+typedef struct tagDVD_PLAYBACK_LOCATION {
+    ULONG TitleNum;
+    ULONG ChapterNum;
+    ULONG TimeCode;
+} DVD_PLAYBACK_LOCATION;
+typedef DWORD VALID_UOP_SOMTHING_OR_OTHER;
+typedef enum __WIDL_dvdif_generated_name_0000000E {
+    UOP_FLAG_Play_Title_Or_AtTime = 0x1,
+    UOP_FLAG_Play_Chapter = 0x2,
+    UOP_FLAG_Play_Title = 0x4,
+    UOP_FLAG_Stop = 0x8,
+    UOP_FLAG_ReturnFromSubMenu = 0x10,
+    UOP_FLAG_Play_Chapter_Or_AtTime = 0x20,
+    UOP_FLAG_PlayPrev_Or_Replay_Chapter = 0x40,
+    UOP_FLAG_PlayNext_Chapter = 0x80,
+    UOP_FLAG_Play_Forwards = 0x100,
+    UOP_FLAG_Play_Backwards = 0x200,
+    UOP_FLAG_ShowMenu_Title = 0x400,
+    UOP_FLAG_ShowMenu_Root = 0x800,
+    UOP_FLAG_ShowMenu_SubPic = 0x1000,
+    UOP_FLAG_ShowMenu_Audio = 0x2000,
+    UOP_FLAG_ShowMenu_Angle = 0x4000,
+    UOP_FLAG_ShowMenu_Chapter = 0x8000,
+    UOP_FLAG_Resume = 0x10000,
+    UOP_FLAG_Select_Or_Activate_Button = 0x20000,
+    UOP_FLAG_Still_Off = 0x40000,
+    UOP_FLAG_Pause_On = 0x80000,
+    UOP_FLAG_Select_Audio_Stream = 0x100000,
+    UOP_FLAG_Select_SubPic_Stream = 0x200000,
+    UOP_FLAG_Select_Angle = 0x400000,
+    UOP_FLAG_Select_Karaoke_Audio_Presentation_Mode = 0x800000,
+    UOP_FLAG_Select_Video_Mode_Preference = 0x1000000
+} VALID_UOP_FLAG;
+typedef enum __WIDL_dvdif_generated_name_0000000F {
+    DVD_CMD_FLAG_None = 0x0,
+    DVD_CMD_FLAG_Flush = 0x1,
+    DVD_CMD_FLAG_SendEvents = 0x2,
+    DVD_CMD_FLAG_Block = 0x4,
+    DVD_CMD_FLAG_StartWhenRendered = 0x8,
+    DVD_CMD_FLAG_EndAfterRendered = 0x10
+} DVD_CMD_FLAGS;
+typedef enum __WIDL_dvdif_generated_name_00000010 {
+    DVD_ResetOnStop = 1,
+    DVD_NotifyParentalLevelChange = 2,
+    DVD_HMSF_TimeCodeEvents = 3,
+    DVD_AudioDuringFFwdRew = 4,
+    DVD_EnableNonblockingAPIs = 5,
+    DVD_CacheSizeInMB = 6,
+    DVD_EnablePortableBookmarks = 7,
+    DVD_EnableExtendedCopyProtectErrors = 8,
+    DVD_NotifyPositionChange = 9,
+    DVD_IncreaseOutputControl = 10,
+    DVD_EnableStreaming = 11,
+    DVD_EnableESOutput = 12,
+    DVD_EnableTitleLength = 13,
+    DVD_DisableStillThrottle = 14,
+    DVD_EnableLoggingEvents = 15,
+    DVD_MaxReadBurstInKB = 16,
+    DVD_ReadBurstPeriodInMS = 17,
+    DVD_RestartDisc = 18,
+    DVD_EnableCC = 19
+} DVD_OPTION_FLAG;
+typedef enum __WIDL_dvdif_generated_name_00000011 {
+    DVD_Relative_Upper = 1,
+    DVD_Relative_Lower = 2,
+    DVD_Relative_Left = 3,
+    DVD_Relative_Right = 4
+} DVD_RELATIVE_BUTTON;
+typedef enum tagDVD_PARENTAL_LEVEL {
+    DVD_PARENTAL_LEVEL_8 = 0x8000,
+    DVD_PARENTAL_LEVEL_7 = 0x4000,
+    DVD_PARENTAL_LEVEL_6 = 0x2000,
+    DVD_PARENTAL_LEVEL_5 = 0x1000,
+    DVD_PARENTAL_LEVEL_4 = 0x800,
+    DVD_PARENTAL_LEVEL_3 = 0x400,
+    DVD_PARENTAL_LEVEL_2 = 0x200,
+    DVD_PARENTAL_LEVEL_1 = 0x100
+} DVD_PARENTAL_LEVEL;
+typedef enum tagDVD_AUDIO_LANG_EXT {
+    DVD_AUD_EXT_NotSpecified = 0,
+    DVD_AUD_EXT_Captions = 1,
+    DVD_AUD_EXT_VisuallyImpaired = 2,
+    DVD_AUD_EXT_DirectorComments1 = 3,
+    DVD_AUD_EXT_DirectorComments2 = 4
+} DVD_AUDIO_LANG_EXT;
+typedef enum tagDVD_SUBPICTURE_LANG_EXT {
+    DVD_SP_EXT_NotSpecified = 0,
+    DVD_SP_EXT_Caption_Normal = 1,
+    DVD_SP_EXT_Caption_Big = 2,
+    DVD_SP_EXT_Caption_Children = 3,
+    DVD_SP_EXT_CC_Normal = 5,
+    DVD_SP_EXT_CC_Big = 6,
+    DVD_SP_EXT_CC_Children = 7,
+    DVD_SP_EXT_Forced = 9,
+    DVD_SP_EXT_DirectorComments_Normal = 13,
+    DVD_SP_EXT_DirectorComments_Big = 14,
+    DVD_SP_EXT_DirectorComments_Children = 15
+} DVD_SUBPICTURE_LANG_EXT;
+typedef enum tagDVD_AUDIO_APPMODE {
+    DVD_AudioMode_None = 0,
+    DVD_AudioMode_Karaoke = 1,
+    DVD_AudioMode_Surround = 2,
+    DVD_AudioMode_Other = 3
+} DVD_AUDIO_APPMODE;
+typedef enum tagDVD_AUDIO_FORMAT {
+    DVD_AudioFormat_AC3 = 0,
+    DVD_AudioFormat_MPEG1 = 1,
+    DVD_AudioFormat_MPEG1_DRC = 2,
+    DVD_AudioFormat_MPEG2 = 3,
+    DVD_AudioFormat_MPEG2_DRC = 4,
+    DVD_AudioFormat_LPCM = 5,
+    DVD_AudioFormat_DTS = 6,
+    DVD_AudioFormat_SDDS = 7,
+    DVD_AudioFormat_Other = 8
+} DVD_AUDIO_FORMAT;
+typedef enum tagDVD_KARAOKE_DOWNMIX {
+    DVD_Mix_0to0 = 0x1,
+    DVD_Mix_1to0 = 0x2,
+    DVD_Mix_2to0 = 0x4,
+    DVD_Mix_3to0 = 0x8,
+    DVD_Mix_4to0 = 0x10,
+    DVD_Mix_Lto0 = 0x20,
+    DVD_Mix_Rto0 = 0x40,
+    DVD_Mix_0to1 = 0x100,
+    DVD_Mix_1to1 = 0x200,
+    DVD_Mix_2to1 = 0x400,
+    DVD_Mix_3to1 = 0x800,
+    DVD_Mix_4to1 = 0x1000,
+    DVD_Mix_Lto1 = 0x2000,
+    DVD_Mix_Rto1 = 0x4000
+} DVD_KARAOKE_DOWNMIX;
+typedef enum tagDVD_KARAOKE_CONTENTS {
+    DVD_Karaoke_GuideVocal1 = 0x1,
+    DVD_Karaoke_GuideVocal2 = 0x2,
+    DVD_Karaoke_GuideMelody1 = 0x4,
+    DVD_Karaoke_GuideMelody2 = 0x8,
+    DVD_Karaoke_GuideMelodyA = 0x10,
+    DVD_Karaoke_GuideMelodyB = 0x20,
+    DVD_Karaoke_SoundEffectA = 0x40,
+    DVD_Karaoke_SoundEffectB = 0x80
+} DVD_KARAOKE_CONTENTS;
+typedef enum tagDVD_KARAOKE_ASSIGNMENT {
+    DVD_Assignment_reserved0 = 0,
+    DVD_Assignment_reserved1 = 1,
+    DVD_Assignment_LR = 2,
+    DVD_Assignment_LRM = 3,
+    DVD_Assignment_LR1 = 4,
+    DVD_Assignment_LRM1 = 5,
+    DVD_Assignment_LR12 = 6,
+    DVD_Assignment_LRM12 = 7
+} DVD_KARAOKE_ASSIGNMENT;
+typedef struct tagDVD_MUA_MixingInfo {
+    WINBOOL fMixTo0;
+    WINBOOL fMixTo1;
+    WINBOOL fMix0InPhase;
+    WINBOOL fMix1InPhase;
+    DWORD dwSpeakerPosition;
+} DVD_MUA_MixingInfo;
+typedef struct tagDVD_MUA_Coeff {
+    double log2_alpha;
+    double log2_beta;
+} DVD_MUA_Coeff;
+typedef enum tagDVD_VIDEO_COMPRESSION {
+    DVD_VideoCompression_Other = 0,
+    DVD_VideoCompression_MPEG1 = 1,
+    DVD_VideoCompression_MPEG2 = 2
+} DVD_VIDEO_COMPRESSION;
+typedef enum tagDVD_SUBPICTURE_TYPE {
+    DVD_SPType_NotSpecified = 0,
+    DVD_SPType_Language = 1,
+    DVD_SPType_Other = 2
+} DVD_SUBPICTURE_TYPE;
+typedef enum tagDVD_SUBPICTURE_CODING {
+    DVD_SPCoding_RunLength = 0,
+    DVD_SPCoding_Extended = 1,
+    DVD_SPCoding_Other = 2
+} DVD_SUBPICTURE_CODING;
+typedef enum tagDVD_TITLE_APPMODE {
+    DVD_AppMode_Not_Specified = 0,
+    DVD_AppMode_Karaoke = 1,
+    DVD_AppMode_Other = 3
+} DVD_TITLE_APPMODE;
+enum DVD_TextStringType {
+    DVD_Struct_Volume = 0x1,
+    DVD_Struct_Title = 0x2,
+    DVD_Struct_ParentalID = 0x3,
+    DVD_Struct_PartOfTitle = 0x4,
+    DVD_Struct_Cell = 0x5,
+    DVD_Stream_Audio = 0x10,
+    DVD_Stream_Subpicture = 0x11,
+    DVD_Stream_Angle = 0x12,
+    DVD_Channel_Audio = 0x20,
+    DVD_General_Name = 0x30,
+    DVD_General_Comments = 0x31,
+    DVD_Title_Series = 0x38,
+    DVD_Title_Movie = 0x39,
+    DVD_Title_Video = 0x3a,
+    DVD_Title_Album = 0x3b,
+    DVD_Title_Song = 0x3c,
+    DVD_Title_Other = 0x3f,
+    DVD_Title_Sub_Series = 0x40,
+    DVD_Title_Sub_Movie = 0x41,
+    DVD_Title_Sub_Video = 0x42,
+    DVD_Title_Sub_Album = 0x43,
+    DVD_Title_Sub_Song = 0x44,
+    DVD_Title_Sub_Other = 0x47,
+    DVD_Title_Orig_Series = 0x48,
+    DVD_Title_Orig_Movie = 0x49,
+    DVD_Title_Orig_Video = 0x4a,
+    DVD_Title_Orig_Album = 0x4b,
+    DVD_Title_Orig_Song = 0x4c,
+    DVD_Title_Orig_Other = 0x4f,
+    DVD_Other_Scene = 0x50,
+    DVD_Other_Cut = 0x51,
+    DVD_Other_Take = 0x52
+};
+enum DVD_TextCharSet {
+    DVD_CharSet_Unicode = 0,
+    DVD_CharSet_ISO646 = 1,
+    DVD_CharSet_JIS_Roman_Kanji = 2,
+    DVD_CharSet_ISO8859_1 = 3,
+    DVD_CharSet_ShiftJIS_Kanji_Roman_Katakana = 4
+};
+typedef struct tagDVD_AudioAttributes {
+    DVD_AUDIO_APPMODE AppMode;
+    BYTE AppModeData;
+    DVD_AUDIO_FORMAT AudioFormat;
+    LCID Language;
+    DVD_AUDIO_LANG_EXT LanguageExtension;
+    WINBOOL fHasMultichannelInfo;
+    DWORD dwFrequency;
+    BYTE bQuantization;
+    BYTE bNumberOfChannels;
+    DWORD dwReserved[2];
+} DVD_AudioAttributes;
+typedef struct tagDVD_MultichannelAudioAttributes {
+    DVD_MUA_MixingInfo Info[8];
+    DVD_MUA_Coeff Coeff[8];
+} DVD_MultichannelAudioAttributes;
+typedef struct tagDVD_VideoAttributes {
+    WINBOOL fPanscanPermitted;
+    WINBOOL fLetterboxPermitted;
+    ULONG ulAspectX;
+    ULONG ulAspectY;
+    ULONG ulFrameRate;
+    ULONG ulFrameHeight;
+    DVD_VIDEO_COMPRESSION Compression;
+    WINBOOL fLine21Field1InGOP;
+    WINBOOL fLine21Field2InGOP;
+    ULONG ulSourceResolutionX;
+    ULONG ulSourceResolutionY;
+    WINBOOL fIsSourceLetterboxed;
+    WINBOOL fIsFilmMode;
+} DVD_VideoAttributes;
+typedef struct tagDVD_SubpictureAttributes {
+    DVD_SUBPICTURE_TYPE Type;
+    DVD_SUBPICTURE_CODING CodingMode;
+    LCID Language;
+    DVD_SUBPICTURE_LANG_EXT LanguageExtension;
+} DVD_SubpictureAttributes;
+typedef struct tagDVD_KaraokeAttributes {
+    BYTE bVersion;
+    WINBOOL fMasterOfCeremoniesInGuideVocal1;
+    WINBOOL fDuet;
+    DVD_KARAOKE_ASSIGNMENT ChannelAssignment;
+    WORD wChannelContents[8];
+} DVD_KaraokeAttributes;
+typedef struct tagDVD_TitleMainAttributes {
+    union {
+        DVD_TITLE_APPMODE AppMode;
+        DVD_HMSF_TIMECODE TitleLength;
+    } DUMMYUNIONNAME;
+    DVD_VideoAttributes VideoAttributes;
+    ULONG ulNumberOfAudioStreams;
+    DVD_AudioAttributes AudioAttributes[8];
+    DVD_MultichannelAudioAttributes MultichannelAudioAttributes[8];
+    ULONG ulNumberOfSubpictureStreams;
+    DVD_SubpictureAttributes SubpictureAttributes[32];
+} DVD_TitleAttributes;
+typedef struct tagDVD_MenuAttributes {
+    WINBOOL fCompatibleRegion[8];
+    DVD_VideoAttributes VideoAttributes;
+    WINBOOL fAudioPresent;
+    DVD_AudioAttributes AudioAttributes;
+    WINBOOL fSubpicturePresent;
+    DVD_SubpictureAttributes SubpictureAttributes;
+} DVD_MenuAttributes;
+#define DVD_TITLE_MENU           0x000
+#define DVD_STREAM_DATA_VMGM     0x400
+#define DVD_STREAM_DATA_VTSM     0x401
+#define DVD_STREAM_DATA_CURRENT  0x800
+#define DVD_DEFAULT_AUDIO_STREAM 0x00f
+#define DVD_AUDIO_CAPS_AC3   0x00000001
+#define DVD_AUDIO_CAPS_MPEG2 0x00000002
+#define DVD_AUDIO_CAPS_LPCM  0x00000004
+#define DVD_AUDIO_CAPS_DTS   0x00000008
+#define DVD_AUDIO_CAPS_SDDS  0x00000010
+typedef struct tagDVD_DECODER_CAPS {
+    DWORD dwSize;
+    DWORD dwAudioCaps;
+    double dFwdMaxRateVideo;
+    double dFwdMaxRateAudio;
+    double dFwdMaxRateSP;
+    double dBwdMaxRateVideo;
+    double dBwdMaxRateAudio;
+    double dBwdMaxRateSP;
+    DWORD dwRes1;
+    DWORD dwRes2;
+    DWORD dwRes3;
+    DWORD dwRes4;
+} DVD_DECODER_CAPS;
+typedef enum _AM_DVD_GRAPH_FLAGS {
+    AM_DVD_HWDEC_PREFER = 0x1,
+    AM_DVD_HWDEC_ONLY = 0x2,
+    AM_DVD_SWDEC_PREFER = 0x4,
+    AM_DVD_SWDEC_ONLY = 0x8,
+    AM_DVD_NOVPE = 0x100,
+    AM_DVD_DO_NOT_CLEAR = 0x200,
+    AM_DVD_VMR9_ONLY = 0x800,
+    AM_DVD_EVR_ONLY = 0x1000,
+    AM_DVD_EVR_QOS = 0x2000,
+    AM_DVD_ADAPT_GRAPH = 0x4000,
+    AM_DVD_MASK = 0xffff
+} AM_DVD_GRAPH_FLAGS;
+typedef enum _AM_DVD_STREAM_FLAGS {
+    AM_DVD_STREAM_VIDEO = 0x1,
+    AM_DVD_STREAM_AUDIO = 0x2,
+    AM_DVD_STREAM_SUBPIC = 0x4
+} AM_DVD_STREAM_FLAGS;
+typedef struct tagAM_DVD_RENDERSTATUS {
+    HRESULT hrVPEStatus;
+    WINBOOL bDvdVolInvalid;
+    WINBOOL bDvdVolUnknown;
+    WINBOOL bNoLine21In;
+    WINBOOL bNoLine21Out;
+    int iNumStreams;
+    int iNumStreamsFailed;
+    DWORD dwFailedStreamsFlag;
+} AM_DVD_RENDERSTATUS;
+/*****************************************************************************
+ * IDvdControl interface
+ */
+#ifndef __IDvdControl_INTERFACE_DEFINED__
+#define __IDvdControl_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDvdControl, 0xa70efe61, 0xe2a3, 0x11d0, 0xa9,0xbe, 0x00,0xaa,0x00,0x61,0xbe,0x93);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a70efe61-e2a3-11d0-a9be-00aa0061be93")
+IDvdControl : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE TitlePlay(
+        ULONG title) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ChapterPlay(
+        ULONG title,
+        ULONG chapter) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE TimePlay(
+        ULONG title,
+        ULONG time) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE StopForResume(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GoUp(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE TimeSearch(
+        ULONG time) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ChapterSearch(
+        ULONG chapter) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PrevPGSearch(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE TopPGSearch(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE NextPGSearch(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ForwardScan(
+        double speed) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BackwardScan(
+        double speed) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE MenuCall(
+        DVD_MENU_ID id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Resume(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE UpperButtonSelect(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LowerButtonSelect(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE LeftButtonSelect(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RightButtonSelect(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ButtonActivate(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ButtonSelectActivate(
+        ULONG button) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE StillOff(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PauseOn(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PauseOff(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE MenuLanguageSelect(
+        LCID language) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AudioStreamChange(
+        ULONG audio) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SubpictureStreamChange(
+        ULONG subpicture,
+        WINBOOL enable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AngleChange(
+        ULONG angle) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ParentalLevelSelect(
+        ULONG level) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ParentalCountrySelect(
+        WORD country) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE KaraokeAudioPresentationModeChange(
+        ULONG mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE VideoModePreference(
+        ULONG mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetRoot(
+        const WCHAR *path) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE MouseActivate(
+        POINT point) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE MouseSelect(
+        POINT point) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ChapterPlayAutoStop(
+        ULONG title,
+        ULONG chapter,
+        ULONG count) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDvdControl, 0xa70efe61, 0xe2a3, 0x11d0, 0xa9,0xbe, 0x00,0xaa,0x00,0x61,0xbe,0x93)
+#endif
+#else
+typedef struct IDvdControlVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDvdControl *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDvdControl *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDvdControl *This);
+
+    /*** IDvdControl methods ***/
+    HRESULT (STDMETHODCALLTYPE *TitlePlay)(
+        IDvdControl *This,
+        ULONG title);
+
+    HRESULT (STDMETHODCALLTYPE *ChapterPlay)(
+        IDvdControl *This,
+        ULONG title,
+        ULONG chapter);
+
+    HRESULT (STDMETHODCALLTYPE *TimePlay)(
+        IDvdControl *This,
+        ULONG title,
+        ULONG time);
+
+    HRESULT (STDMETHODCALLTYPE *StopForResume)(
+        IDvdControl *This);
+
+    HRESULT (STDMETHODCALLTYPE *GoUp)(
+        IDvdControl *This);
+
+    HRESULT (STDMETHODCALLTYPE *TimeSearch)(
+        IDvdControl *This,
+        ULONG time);
+
+    HRESULT (STDMETHODCALLTYPE *ChapterSearch)(
+        IDvdControl *This,
+        ULONG chapter);
+
+    HRESULT (STDMETHODCALLTYPE *PrevPGSearch)(
+        IDvdControl *This);
+
+    HRESULT (STDMETHODCALLTYPE *TopPGSearch)(
+        IDvdControl *This);
+
+    HRESULT (STDMETHODCALLTYPE *NextPGSearch)(
+        IDvdControl *This);
+
+    HRESULT (STDMETHODCALLTYPE *ForwardScan)(
+        IDvdControl *This,
+        double speed);
+
+    HRESULT (STDMETHODCALLTYPE *BackwardScan)(
+        IDvdControl *This,
+        double speed);
+
+    HRESULT (STDMETHODCALLTYPE *MenuCall)(
+        IDvdControl *This,
+        DVD_MENU_ID id);
+
+    HRESULT (STDMETHODCALLTYPE *Resume)(
+        IDvdControl *This);
+
+    HRESULT (STDMETHODCALLTYPE *UpperButtonSelect)(
+        IDvdControl *This);
+
+    HRESULT (STDMETHODCALLTYPE *LowerButtonSelect)(
+        IDvdControl *This);
+
+    HRESULT (STDMETHODCALLTYPE *LeftButtonSelect)(
+        IDvdControl *This);
+
+    HRESULT (STDMETHODCALLTYPE *RightButtonSelect)(
+        IDvdControl *This);
+
+    HRESULT (STDMETHODCALLTYPE *ButtonActivate)(
+        IDvdControl *This);
+
+    HRESULT (STDMETHODCALLTYPE *ButtonSelectActivate)(
+        IDvdControl *This,
+        ULONG button);
+
+    HRESULT (STDMETHODCALLTYPE *StillOff)(
+        IDvdControl *This);
+
+    HRESULT (STDMETHODCALLTYPE *PauseOn)(
+        IDvdControl *This);
+
+    HRESULT (STDMETHODCALLTYPE *PauseOff)(
+        IDvdControl *This);
+
+    HRESULT (STDMETHODCALLTYPE *MenuLanguageSelect)(
+        IDvdControl *This,
+        LCID language);
+
+    HRESULT (STDMETHODCALLTYPE *AudioStreamChange)(
+        IDvdControl *This,
+        ULONG audio);
+
+    HRESULT (STDMETHODCALLTYPE *SubpictureStreamChange)(
+        IDvdControl *This,
+        ULONG subpicture,
+        WINBOOL enable);
+
+    HRESULT (STDMETHODCALLTYPE *AngleChange)(
+        IDvdControl *This,
+        ULONG angle);
+
+    HRESULT (STDMETHODCALLTYPE *ParentalLevelSelect)(
+        IDvdControl *This,
+        ULONG level);
+
+    HRESULT (STDMETHODCALLTYPE *ParentalCountrySelect)(
+        IDvdControl *This,
+        WORD country);
+
+    HRESULT (STDMETHODCALLTYPE *KaraokeAudioPresentationModeChange)(
+        IDvdControl *This,
+        ULONG mode);
+
+    HRESULT (STDMETHODCALLTYPE *VideoModePreference)(
+        IDvdControl *This,
+        ULONG mode);
+
+    HRESULT (STDMETHODCALLTYPE *SetRoot)(
+        IDvdControl *This,
+        const WCHAR *path);
+
+    HRESULT (STDMETHODCALLTYPE *MouseActivate)(
+        IDvdControl *This,
+        POINT point);
+
+    HRESULT (STDMETHODCALLTYPE *MouseSelect)(
+        IDvdControl *This,
+        POINT point);
+
+    HRESULT (STDMETHODCALLTYPE *ChapterPlayAutoStop)(
+        IDvdControl *This,
+        ULONG title,
+        ULONG chapter,
+        ULONG count);
+
+    END_INTERFACE
+} IDvdControlVtbl;
+
+interface IDvdControl {
+    CONST_VTBL IDvdControlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDvdControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDvdControl_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDvdControl_Release(This) (This)->lpVtbl->Release(This)
+/*** IDvdControl methods ***/
+#define IDvdControl_TitlePlay(This,title) (This)->lpVtbl->TitlePlay(This,title)
+#define IDvdControl_ChapterPlay(This,title,chapter) (This)->lpVtbl->ChapterPlay(This,title,chapter)
+#define IDvdControl_TimePlay(This,title,time) (This)->lpVtbl->TimePlay(This,title,time)
+#define IDvdControl_StopForResume(This) (This)->lpVtbl->StopForResume(This)
+#define IDvdControl_GoUp(This) (This)->lpVtbl->GoUp(This)
+#define IDvdControl_TimeSearch(This,time) (This)->lpVtbl->TimeSearch(This,time)
+#define IDvdControl_ChapterSearch(This,chapter) (This)->lpVtbl->ChapterSearch(This,chapter)
+#define IDvdControl_PrevPGSearch(This) (This)->lpVtbl->PrevPGSearch(This)
+#define IDvdControl_TopPGSearch(This) (This)->lpVtbl->TopPGSearch(This)
+#define IDvdControl_NextPGSearch(This) (This)->lpVtbl->NextPGSearch(This)
+#define IDvdControl_ForwardScan(This,speed) (This)->lpVtbl->ForwardScan(This,speed)
+#define IDvdControl_BackwardScan(This,speed) (This)->lpVtbl->BackwardScan(This,speed)
+#define IDvdControl_MenuCall(This,id) (This)->lpVtbl->MenuCall(This,id)
+#define IDvdControl_Resume(This) (This)->lpVtbl->Resume(This)
+#define IDvdControl_UpperButtonSelect(This) (This)->lpVtbl->UpperButtonSelect(This)
+#define IDvdControl_LowerButtonSelect(This) (This)->lpVtbl->LowerButtonSelect(This)
+#define IDvdControl_LeftButtonSelect(This) (This)->lpVtbl->LeftButtonSelect(This)
+#define IDvdControl_RightButtonSelect(This) (This)->lpVtbl->RightButtonSelect(This)
+#define IDvdControl_ButtonActivate(This) (This)->lpVtbl->ButtonActivate(This)
+#define IDvdControl_ButtonSelectActivate(This,button) (This)->lpVtbl->ButtonSelectActivate(This,button)
+#define IDvdControl_StillOff(This) (This)->lpVtbl->StillOff(This)
+#define IDvdControl_PauseOn(This) (This)->lpVtbl->PauseOn(This)
+#define IDvdControl_PauseOff(This) (This)->lpVtbl->PauseOff(This)
+#define IDvdControl_MenuLanguageSelect(This,language) (This)->lpVtbl->MenuLanguageSelect(This,language)
+#define IDvdControl_AudioStreamChange(This,audio) (This)->lpVtbl->AudioStreamChange(This,audio)
+#define IDvdControl_SubpictureStreamChange(This,subpicture,enable) (This)->lpVtbl->SubpictureStreamChange(This,subpicture,enable)
+#define IDvdControl_AngleChange(This,angle) (This)->lpVtbl->AngleChange(This,angle)
+#define IDvdControl_ParentalLevelSelect(This,level) (This)->lpVtbl->ParentalLevelSelect(This,level)
+#define IDvdControl_ParentalCountrySelect(This,country) (This)->lpVtbl->ParentalCountrySelect(This,country)
+#define IDvdControl_KaraokeAudioPresentationModeChange(This,mode) (This)->lpVtbl->KaraokeAudioPresentationModeChange(This,mode)
+#define IDvdControl_VideoModePreference(This,mode) (This)->lpVtbl->VideoModePreference(This,mode)
+#define IDvdControl_SetRoot(This,path) (This)->lpVtbl->SetRoot(This,path)
+#define IDvdControl_MouseActivate(This,point) (This)->lpVtbl->MouseActivate(This,point)
+#define IDvdControl_MouseSelect(This,point) (This)->lpVtbl->MouseSelect(This,point)
+#define IDvdControl_ChapterPlayAutoStop(This,title,chapter,count) (This)->lpVtbl->ChapterPlayAutoStop(This,title,chapter,count)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDvdControl_QueryInterface(IDvdControl* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDvdControl_AddRef(IDvdControl* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDvdControl_Release(IDvdControl* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDvdControl methods ***/
+static FORCEINLINE HRESULT IDvdControl_TitlePlay(IDvdControl* This,ULONG title) {
+    return This->lpVtbl->TitlePlay(This,title);
+}
+static FORCEINLINE HRESULT IDvdControl_ChapterPlay(IDvdControl* This,ULONG title,ULONG chapter) {
+    return This->lpVtbl->ChapterPlay(This,title,chapter);
+}
+static FORCEINLINE HRESULT IDvdControl_TimePlay(IDvdControl* This,ULONG title,ULONG time) {
+    return This->lpVtbl->TimePlay(This,title,time);
+}
+static FORCEINLINE HRESULT IDvdControl_StopForResume(IDvdControl* This) {
+    return This->lpVtbl->StopForResume(This);
+}
+static FORCEINLINE HRESULT IDvdControl_GoUp(IDvdControl* This) {
+    return This->lpVtbl->GoUp(This);
+}
+static FORCEINLINE HRESULT IDvdControl_TimeSearch(IDvdControl* This,ULONG time) {
+    return This->lpVtbl->TimeSearch(This,time);
+}
+static FORCEINLINE HRESULT IDvdControl_ChapterSearch(IDvdControl* This,ULONG chapter) {
+    return This->lpVtbl->ChapterSearch(This,chapter);
+}
+static FORCEINLINE HRESULT IDvdControl_PrevPGSearch(IDvdControl* This) {
+    return This->lpVtbl->PrevPGSearch(This);
+}
+static FORCEINLINE HRESULT IDvdControl_TopPGSearch(IDvdControl* This) {
+    return This->lpVtbl->TopPGSearch(This);
+}
+static FORCEINLINE HRESULT IDvdControl_NextPGSearch(IDvdControl* This) {
+    return This->lpVtbl->NextPGSearch(This);
+}
+static FORCEINLINE HRESULT IDvdControl_ForwardScan(IDvdControl* This,double speed) {
+    return This->lpVtbl->ForwardScan(This,speed);
+}
+static FORCEINLINE HRESULT IDvdControl_BackwardScan(IDvdControl* This,double speed) {
+    return This->lpVtbl->BackwardScan(This,speed);
+}
+static FORCEINLINE HRESULT IDvdControl_MenuCall(IDvdControl* This,DVD_MENU_ID id) {
+    return This->lpVtbl->MenuCall(This,id);
+}
+static FORCEINLINE HRESULT IDvdControl_Resume(IDvdControl* This) {
+    return This->lpVtbl->Resume(This);
+}
+static FORCEINLINE HRESULT IDvdControl_UpperButtonSelect(IDvdControl* This) {
+    return This->lpVtbl->UpperButtonSelect(This);
+}
+static FORCEINLINE HRESULT IDvdControl_LowerButtonSelect(IDvdControl* This) {
+    return This->lpVtbl->LowerButtonSelect(This);
+}
+static FORCEINLINE HRESULT IDvdControl_LeftButtonSelect(IDvdControl* This) {
+    return This->lpVtbl->LeftButtonSelect(This);
+}
+static FORCEINLINE HRESULT IDvdControl_RightButtonSelect(IDvdControl* This) {
+    return This->lpVtbl->RightButtonSelect(This);
+}
+static FORCEINLINE HRESULT IDvdControl_ButtonActivate(IDvdControl* This) {
+    return This->lpVtbl->ButtonActivate(This);
+}
+static FORCEINLINE HRESULT IDvdControl_ButtonSelectActivate(IDvdControl* This,ULONG button) {
+    return This->lpVtbl->ButtonSelectActivate(This,button);
+}
+static FORCEINLINE HRESULT IDvdControl_StillOff(IDvdControl* This) {
+    return This->lpVtbl->StillOff(This);
+}
+static FORCEINLINE HRESULT IDvdControl_PauseOn(IDvdControl* This) {
+    return This->lpVtbl->PauseOn(This);
+}
+static FORCEINLINE HRESULT IDvdControl_PauseOff(IDvdControl* This) {
+    return This->lpVtbl->PauseOff(This);
+}
+static FORCEINLINE HRESULT IDvdControl_MenuLanguageSelect(IDvdControl* This,LCID language) {
+    return This->lpVtbl->MenuLanguageSelect(This,language);
+}
+static FORCEINLINE HRESULT IDvdControl_AudioStreamChange(IDvdControl* This,ULONG audio) {
+    return This->lpVtbl->AudioStreamChange(This,audio);
+}
+static FORCEINLINE HRESULT IDvdControl_SubpictureStreamChange(IDvdControl* This,ULONG subpicture,WINBOOL enable) {
+    return This->lpVtbl->SubpictureStreamChange(This,subpicture,enable);
+}
+static FORCEINLINE HRESULT IDvdControl_AngleChange(IDvdControl* This,ULONG angle) {
+    return This->lpVtbl->AngleChange(This,angle);
+}
+static FORCEINLINE HRESULT IDvdControl_ParentalLevelSelect(IDvdControl* This,ULONG level) {
+    return This->lpVtbl->ParentalLevelSelect(This,level);
+}
+static FORCEINLINE HRESULT IDvdControl_ParentalCountrySelect(IDvdControl* This,WORD country) {
+    return This->lpVtbl->ParentalCountrySelect(This,country);
+}
+static FORCEINLINE HRESULT IDvdControl_KaraokeAudioPresentationModeChange(IDvdControl* This,ULONG mode) {
+    return This->lpVtbl->KaraokeAudioPresentationModeChange(This,mode);
+}
+static FORCEINLINE HRESULT IDvdControl_VideoModePreference(IDvdControl* This,ULONG mode) {
+    return This->lpVtbl->VideoModePreference(This,mode);
+}
+static FORCEINLINE HRESULT IDvdControl_SetRoot(IDvdControl* This,const WCHAR *path) {
+    return This->lpVtbl->SetRoot(This,path);
+}
+static FORCEINLINE HRESULT IDvdControl_MouseActivate(IDvdControl* This,POINT point) {
+    return This->lpVtbl->MouseActivate(This,point);
+}
+static FORCEINLINE HRESULT IDvdControl_MouseSelect(IDvdControl* This,POINT point) {
+    return This->lpVtbl->MouseSelect(This,point);
+}
+static FORCEINLINE HRESULT IDvdControl_ChapterPlayAutoStop(IDvdControl* This,ULONG title,ULONG chapter,ULONG count) {
+    return This->lpVtbl->ChapterPlayAutoStop(This,title,chapter,count);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDvdControl_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDvdInfo interface
+ */
+#ifndef __IDvdInfo_INTERFACE_DEFINED__
+#define __IDvdInfo_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDvdInfo, 0xa70efe60, 0xe2a3, 0x11d0, 0xa9,0xbe, 0x00,0xaa,0x00,0x61,0xbe,0x93);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("a70efe60-e2a3-11d0-a9be-00aa0061be93")
+IDvdInfo : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentDomain(
+        DVD_DOMAIN *domain) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentLocation(
+        DVD_PLAYBACK_LOCATION *location) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTotalTitleTime(
+        ULONG *time) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentButton(
+        ULONG *count,
+        ULONG *current) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentAngle(
+        ULONG *count,
+        ULONG *current) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentAudio(
+        ULONG *count,
+        ULONG *current) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentSubpicture(
+        ULONG *count,
+        ULONG *current,
+        WINBOOL *enable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentUOPS(
+        VALID_UOP_SOMTHING_OR_OTHER *uops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAllSPRMs(
+        SPRMARRAY *regs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAllGPRMs(
+        GPRMARRAY *regs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAudioLanguage(
+        ULONG stream,
+        LCID *language) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSubpictureLanguage(
+        ULONG stream,
+        LCID *language) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTitleAttributes(
+        ULONG title,
+        DVD_ATR *attr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVMGAttributes(
+        DVD_ATR *attr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentVideoAttributes(
+        DVD_VideoATR *attr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentAudioAttributes(
+        DVD_AudioATR *attr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentSubpictureAttributes(
+        DVD_SubpictureATR *attr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentVolumeInfo(
+        ULONG *volume_count,
+        ULONG *current,
+        DVD_DISC_SIDE *side,
+        ULONG *title_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDVDTextInfo(
+        BYTE *text_manager,
+        ULONG size,
+        ULONG *ret_size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPlayerParentalLevel(
+        ULONG *level,
+        ULONG *country_code) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetNumberOfChapters(
+        ULONG title,
+        ULONG *count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTitleParentalLevels(
+        ULONG title,
+        ULONG *levels) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetRoot(
+        char *path,
+        ULONG size,
+        ULONG *ret_size) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDvdInfo, 0xa70efe60, 0xe2a3, 0x11d0, 0xa9,0xbe, 0x00,0xaa,0x00,0x61,0xbe,0x93)
+#endif
+#else
+typedef struct IDvdInfoVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDvdInfo *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDvdInfo *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDvdInfo *This);
+
+    /*** IDvdInfo methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetCurrentDomain)(
+        IDvdInfo *This,
+        DVD_DOMAIN *domain);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentLocation)(
+        IDvdInfo *This,
+        DVD_PLAYBACK_LOCATION *location);
+
+    HRESULT (STDMETHODCALLTYPE *GetTotalTitleTime)(
+        IDvdInfo *This,
+        ULONG *time);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentButton)(
+        IDvdInfo *This,
+        ULONG *count,
+        ULONG *current);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentAngle)(
+        IDvdInfo *This,
+        ULONG *count,
+        ULONG *current);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentAudio)(
+        IDvdInfo *This,
+        ULONG *count,
+        ULONG *current);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentSubpicture)(
+        IDvdInfo *This,
+        ULONG *count,
+        ULONG *current,
+        WINBOOL *enable);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentUOPS)(
+        IDvdInfo *This,
+        VALID_UOP_SOMTHING_OR_OTHER *uops);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllSPRMs)(
+        IDvdInfo *This,
+        SPRMARRAY *regs);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllGPRMs)(
+        IDvdInfo *This,
+        GPRMARRAY *regs);
+
+    HRESULT (STDMETHODCALLTYPE *GetAudioLanguage)(
+        IDvdInfo *This,
+        ULONG stream,
+        LCID *language);
+
+    HRESULT (STDMETHODCALLTYPE *GetSubpictureLanguage)(
+        IDvdInfo *This,
+        ULONG stream,
+        LCID *language);
+
+    HRESULT (STDMETHODCALLTYPE *GetTitleAttributes)(
+        IDvdInfo *This,
+        ULONG title,
+        DVD_ATR *attr);
+
+    HRESULT (STDMETHODCALLTYPE *GetVMGAttributes)(
+        IDvdInfo *This,
+        DVD_ATR *attr);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentVideoAttributes)(
+        IDvdInfo *This,
+        DVD_VideoATR *attr);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentAudioAttributes)(
+        IDvdInfo *This,
+        DVD_AudioATR *attr);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentSubpictureAttributes)(
+        IDvdInfo *This,
+        DVD_SubpictureATR *attr);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentVolumeInfo)(
+        IDvdInfo *This,
+        ULONG *volume_count,
+        ULONG *current,
+        DVD_DISC_SIDE *side,
+        ULONG *title_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetDVDTextInfo)(
+        IDvdInfo *This,
+        BYTE *text_manager,
+        ULONG size,
+        ULONG *ret_size);
+
+    HRESULT (STDMETHODCALLTYPE *GetPlayerParentalLevel)(
+        IDvdInfo *This,
+        ULONG *level,
+        ULONG *country_code);
+
+    HRESULT (STDMETHODCALLTYPE *GetNumberOfChapters)(
+        IDvdInfo *This,
+        ULONG title,
+        ULONG *count);
+
+    HRESULT (STDMETHODCALLTYPE *GetTitleParentalLevels)(
+        IDvdInfo *This,
+        ULONG title,
+        ULONG *levels);
+
+    HRESULT (STDMETHODCALLTYPE *GetRoot)(
+        IDvdInfo *This,
+        char *path,
+        ULONG size,
+        ULONG *ret_size);
+
+    END_INTERFACE
+} IDvdInfoVtbl;
+
+interface IDvdInfo {
+    CONST_VTBL IDvdInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDvdInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDvdInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDvdInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IDvdInfo methods ***/
+#define IDvdInfo_GetCurrentDomain(This,domain) (This)->lpVtbl->GetCurrentDomain(This,domain)
+#define IDvdInfo_GetCurrentLocation(This,location) (This)->lpVtbl->GetCurrentLocation(This,location)
+#define IDvdInfo_GetTotalTitleTime(This,time) (This)->lpVtbl->GetTotalTitleTime(This,time)
+#define IDvdInfo_GetCurrentButton(This,count,current) (This)->lpVtbl->GetCurrentButton(This,count,current)
+#define IDvdInfo_GetCurrentAngle(This,count,current) (This)->lpVtbl->GetCurrentAngle(This,count,current)
+#define IDvdInfo_GetCurrentAudio(This,count,current) (This)->lpVtbl->GetCurrentAudio(This,count,current)
+#define IDvdInfo_GetCurrentSubpicture(This,count,current,enable) (This)->lpVtbl->GetCurrentSubpicture(This,count,current,enable)
+#define IDvdInfo_GetCurrentUOPS(This,uops) (This)->lpVtbl->GetCurrentUOPS(This,uops)
+#define IDvdInfo_GetAllSPRMs(This,regs) (This)->lpVtbl->GetAllSPRMs(This,regs)
+#define IDvdInfo_GetAllGPRMs(This,regs) (This)->lpVtbl->GetAllGPRMs(This,regs)
+#define IDvdInfo_GetAudioLanguage(This,stream,language) (This)->lpVtbl->GetAudioLanguage(This,stream,language)
+#define IDvdInfo_GetSubpictureLanguage(This,stream,language) (This)->lpVtbl->GetSubpictureLanguage(This,stream,language)
+#define IDvdInfo_GetTitleAttributes(This,title,attr) (This)->lpVtbl->GetTitleAttributes(This,title,attr)
+#define IDvdInfo_GetVMGAttributes(This,attr) (This)->lpVtbl->GetVMGAttributes(This,attr)
+#define IDvdInfo_GetCurrentVideoAttributes(This,attr) (This)->lpVtbl->GetCurrentVideoAttributes(This,attr)
+#define IDvdInfo_GetCurrentAudioAttributes(This,attr) (This)->lpVtbl->GetCurrentAudioAttributes(This,attr)
+#define IDvdInfo_GetCurrentSubpictureAttributes(This,attr) (This)->lpVtbl->GetCurrentSubpictureAttributes(This,attr)
+#define IDvdInfo_GetCurrentVolumeInfo(This,volume_count,current,side,title_count) (This)->lpVtbl->GetCurrentVolumeInfo(This,volume_count,current,side,title_count)
+#define IDvdInfo_GetDVDTextInfo(This,text_manager,size,ret_size) (This)->lpVtbl->GetDVDTextInfo(This,text_manager,size,ret_size)
+#define IDvdInfo_GetPlayerParentalLevel(This,level,country_code) (This)->lpVtbl->GetPlayerParentalLevel(This,level,country_code)
+#define IDvdInfo_GetNumberOfChapters(This,title,count) (This)->lpVtbl->GetNumberOfChapters(This,title,count)
+#define IDvdInfo_GetTitleParentalLevels(This,title,levels) (This)->lpVtbl->GetTitleParentalLevels(This,title,levels)
+#define IDvdInfo_GetRoot(This,path,size,ret_size) (This)->lpVtbl->GetRoot(This,path,size,ret_size)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDvdInfo_QueryInterface(IDvdInfo* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDvdInfo_AddRef(IDvdInfo* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDvdInfo_Release(IDvdInfo* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDvdInfo methods ***/
+static FORCEINLINE HRESULT IDvdInfo_GetCurrentDomain(IDvdInfo* This,DVD_DOMAIN *domain) {
+    return This->lpVtbl->GetCurrentDomain(This,domain);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetCurrentLocation(IDvdInfo* This,DVD_PLAYBACK_LOCATION *location) {
+    return This->lpVtbl->GetCurrentLocation(This,location);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetTotalTitleTime(IDvdInfo* This,ULONG *time) {
+    return This->lpVtbl->GetTotalTitleTime(This,time);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetCurrentButton(IDvdInfo* This,ULONG *count,ULONG *current) {
+    return This->lpVtbl->GetCurrentButton(This,count,current);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetCurrentAngle(IDvdInfo* This,ULONG *count,ULONG *current) {
+    return This->lpVtbl->GetCurrentAngle(This,count,current);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetCurrentAudio(IDvdInfo* This,ULONG *count,ULONG *current) {
+    return This->lpVtbl->GetCurrentAudio(This,count,current);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetCurrentSubpicture(IDvdInfo* This,ULONG *count,ULONG *current,WINBOOL *enable) {
+    return This->lpVtbl->GetCurrentSubpicture(This,count,current,enable);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetCurrentUOPS(IDvdInfo* This,VALID_UOP_SOMTHING_OR_OTHER *uops) {
+    return This->lpVtbl->GetCurrentUOPS(This,uops);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetAllSPRMs(IDvdInfo* This,SPRMARRAY *regs) {
+    return This->lpVtbl->GetAllSPRMs(This,regs);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetAllGPRMs(IDvdInfo* This,GPRMARRAY *regs) {
+    return This->lpVtbl->GetAllGPRMs(This,regs);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetAudioLanguage(IDvdInfo* This,ULONG stream,LCID *language) {
+    return This->lpVtbl->GetAudioLanguage(This,stream,language);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetSubpictureLanguage(IDvdInfo* This,ULONG stream,LCID *language) {
+    return This->lpVtbl->GetSubpictureLanguage(This,stream,language);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetTitleAttributes(IDvdInfo* This,ULONG title,DVD_ATR *attr) {
+    return This->lpVtbl->GetTitleAttributes(This,title,attr);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetVMGAttributes(IDvdInfo* This,DVD_ATR *attr) {
+    return This->lpVtbl->GetVMGAttributes(This,attr);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetCurrentVideoAttributes(IDvdInfo* This,DVD_VideoATR *attr) {
+    return This->lpVtbl->GetCurrentVideoAttributes(This,attr);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetCurrentAudioAttributes(IDvdInfo* This,DVD_AudioATR *attr) {
+    return This->lpVtbl->GetCurrentAudioAttributes(This,attr);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetCurrentSubpictureAttributes(IDvdInfo* This,DVD_SubpictureATR *attr) {
+    return This->lpVtbl->GetCurrentSubpictureAttributes(This,attr);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetCurrentVolumeInfo(IDvdInfo* This,ULONG *volume_count,ULONG *current,DVD_DISC_SIDE *side,ULONG *title_count) {
+    return This->lpVtbl->GetCurrentVolumeInfo(This,volume_count,current,side,title_count);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetDVDTextInfo(IDvdInfo* This,BYTE *text_manager,ULONG size,ULONG *ret_size) {
+    return This->lpVtbl->GetDVDTextInfo(This,text_manager,size,ret_size);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetPlayerParentalLevel(IDvdInfo* This,ULONG *level,ULONG *country_code) {
+    return This->lpVtbl->GetPlayerParentalLevel(This,level,country_code);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetNumberOfChapters(IDvdInfo* This,ULONG title,ULONG *count) {
+    return This->lpVtbl->GetNumberOfChapters(This,title,count);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetTitleParentalLevels(IDvdInfo* This,ULONG title,ULONG *levels) {
+    return This->lpVtbl->GetTitleParentalLevels(This,title,levels);
+}
+static FORCEINLINE HRESULT IDvdInfo_GetRoot(IDvdInfo* This,char *path,ULONG size,ULONG *ret_size) {
+    return This->lpVtbl->GetRoot(This,path,size,ret_size);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDvdInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDvdCmd interface
+ */
+#ifndef __IDvdCmd_INTERFACE_DEFINED__
+#define __IDvdCmd_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDvdCmd, 0x5a4a97e4, 0x94ee, 0x4a55, 0x97,0x51, 0x74,0xb5,0x64,0x3a,0xa2,0x7d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("5a4a97e4-94ee-4a55-9751-74b5643aa27d")
+IDvdCmd : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE WaitForStart(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE WaitForEnd(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDvdCmd, 0x5a4a97e4, 0x94ee, 0x4a55, 0x97,0x51, 0x74,0xb5,0x64,0x3a,0xa2,0x7d)
+#endif
+#else
+typedef struct IDvdCmdVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDvdCmd *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDvdCmd *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDvdCmd *This);
+
+    /*** IDvdCmd methods ***/
+    HRESULT (STDMETHODCALLTYPE *WaitForStart)(
+        IDvdCmd *This);
+
+    HRESULT (STDMETHODCALLTYPE *WaitForEnd)(
+        IDvdCmd *This);
+
+    END_INTERFACE
+} IDvdCmdVtbl;
+
+interface IDvdCmd {
+    CONST_VTBL IDvdCmdVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDvdCmd_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDvdCmd_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDvdCmd_Release(This) (This)->lpVtbl->Release(This)
+/*** IDvdCmd methods ***/
+#define IDvdCmd_WaitForStart(This) (This)->lpVtbl->WaitForStart(This)
+#define IDvdCmd_WaitForEnd(This) (This)->lpVtbl->WaitForEnd(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDvdCmd_QueryInterface(IDvdCmd* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDvdCmd_AddRef(IDvdCmd* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDvdCmd_Release(IDvdCmd* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDvdCmd methods ***/
+static FORCEINLINE HRESULT IDvdCmd_WaitForStart(IDvdCmd* This) {
+    return This->lpVtbl->WaitForStart(This);
+}
+static FORCEINLINE HRESULT IDvdCmd_WaitForEnd(IDvdCmd* This) {
+    return This->lpVtbl->WaitForEnd(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDvdCmd_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDvdState interface
+ */
+#ifndef __IDvdState_INTERFACE_DEFINED__
+#define __IDvdState_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDvdState, 0x86303d6d, 0x1c4a, 0x4087, 0xab,0x42, 0xf7,0x11,0x16,0x70,0x48,0xef);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("86303d6d-1c4a-4087-ab42-f711167048ef")
+IDvdState : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetDiscID(
+        ULONGLONG *id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetParentalLevel(
+        ULONG *level) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDvdState, 0x86303d6d, 0x1c4a, 0x4087, 0xab,0x42, 0xf7,0x11,0x16,0x70,0x48,0xef)
+#endif
+#else
+typedef struct IDvdStateVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDvdState *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDvdState *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDvdState *This);
+
+    /*** IDvdState methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetDiscID)(
+        IDvdState *This,
+        ULONGLONG *id);
+
+    HRESULT (STDMETHODCALLTYPE *GetParentalLevel)(
+        IDvdState *This,
+        ULONG *level);
+
+    END_INTERFACE
+} IDvdStateVtbl;
+
+interface IDvdState {
+    CONST_VTBL IDvdStateVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDvdState_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDvdState_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDvdState_Release(This) (This)->lpVtbl->Release(This)
+/*** IDvdState methods ***/
+#define IDvdState_GetDiscID(This,id) (This)->lpVtbl->GetDiscID(This,id)
+#define IDvdState_GetParentalLevel(This,level) (This)->lpVtbl->GetParentalLevel(This,level)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDvdState_QueryInterface(IDvdState* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDvdState_AddRef(IDvdState* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDvdState_Release(IDvdState* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDvdState methods ***/
+static FORCEINLINE HRESULT IDvdState_GetDiscID(IDvdState* This,ULONGLONG *id) {
+    return This->lpVtbl->GetDiscID(This,id);
+}
+static FORCEINLINE HRESULT IDvdState_GetParentalLevel(IDvdState* This,ULONG *level) {
+    return This->lpVtbl->GetParentalLevel(This,level);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDvdState_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDvdControl2 interface
+ */
+#ifndef __IDvdControl2_INTERFACE_DEFINED__
+#define __IDvdControl2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDvdControl2, 0x33bc7430, 0xeec0, 0x11d2, 0x82,0x01, 0x00,0xa0,0xc9,0xd7,0x48,0x42);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("33bc7430-eec0-11d2-8201-00a0c9d74842")
+IDvdControl2 : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE PlayTitle(
+        ULONG title,
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PlayChapterInTitle(
+        ULONG title,
+        ULONG chapter,
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PlayTimeInTitle(
+        ULONG title,
+        DVD_HMSF_TIMECODE *time,
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Stop(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReturnFromSubmenu(
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PlayAtTime(
+        DVD_HMSF_TIMECODE *time,
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PlayChapter(
+        ULONG chapter,
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PlayPrevChapter(
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ReplayChapter(
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PlayNextChapter(
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PlayForwards(
+        double speed,
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PlayBackwards(
+        double speed,
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ShowMenu(
+        DVD_MENU_ID id,
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Resume(
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectRelativeButton(
+        DVD_RELATIVE_BUTTON button) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ActivateButton(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectButton(
+        ULONG button) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectAndActivateButton(
+        ULONG button) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE StillOff(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Pause(
+        WINBOOL enable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectAudioStream(
+        ULONG stream,
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectSubpictureStream(
+        ULONG stream,
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetSubpictureState(
+        WINBOOL enable,
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectAngle(
+        ULONG angle,
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectParentalLevel(
+        ULONG level) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectParentalCountry(
+        BYTE country[2]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectKaraokeAudioPresentationMode(
+        ULONG mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectVideoModePreference(
+        ULONG mode) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetDVDDirectory(
+        const WCHAR *path) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE ActivateAtPosition(
+        POINT point) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectAtPosition(
+        POINT point) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PlayChaptersAutoStop(
+        ULONG title,
+        ULONG chapter,
+        ULONG count,
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE AcceptParentalLevelChange(
+        WINBOOL accept) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetOption(
+        DVD_OPTION_FLAG flag,
+        WINBOOL option) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetState(
+        IDvdState *state,
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE PlayPeriodInTitleAutoStop(
+        ULONG title,
+        DVD_HMSF_TIMECODE *start_time,
+        DVD_HMSF_TIMECODE *end_time,
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetGRPM(
+        ULONG index,
+        WORD value,
+        DWORD flags,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectDefaultMenuLanguage(
+        LCID language) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectDefaultAudioLanguage(
+        LCID language,
+        DVD_AUDIO_LANG_EXT extension) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectDefaultSubpictureLanguage(
+        LCID language,
+        DVD_SUBPICTURE_LANG_EXT extension) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDvdControl2, 0x33bc7430, 0xeec0, 0x11d2, 0x82,0x01, 0x00,0xa0,0xc9,0xd7,0x48,0x42)
+#endif
+#else
+typedef struct IDvdControl2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDvdControl2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDvdControl2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDvdControl2 *This);
+
+    /*** IDvdControl2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *PlayTitle)(
+        IDvdControl2 *This,
+        ULONG title,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *PlayChapterInTitle)(
+        IDvdControl2 *This,
+        ULONG title,
+        ULONG chapter,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *PlayTimeInTitle)(
+        IDvdControl2 *This,
+        ULONG title,
+        DVD_HMSF_TIMECODE *time,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        IDvdControl2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *ReturnFromSubmenu)(
+        IDvdControl2 *This,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *PlayAtTime)(
+        IDvdControl2 *This,
+        DVD_HMSF_TIMECODE *time,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *PlayChapter)(
+        IDvdControl2 *This,
+        ULONG chapter,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *PlayPrevChapter)(
+        IDvdControl2 *This,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *ReplayChapter)(
+        IDvdControl2 *This,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *PlayNextChapter)(
+        IDvdControl2 *This,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *PlayForwards)(
+        IDvdControl2 *This,
+        double speed,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *PlayBackwards)(
+        IDvdControl2 *This,
+        double speed,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *ShowMenu)(
+        IDvdControl2 *This,
+        DVD_MENU_ID id,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *Resume)(
+        IDvdControl2 *This,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *SelectRelativeButton)(
+        IDvdControl2 *This,
+        DVD_RELATIVE_BUTTON button);
+
+    HRESULT (STDMETHODCALLTYPE *ActivateButton)(
+        IDvdControl2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SelectButton)(
+        IDvdControl2 *This,
+        ULONG button);
+
+    HRESULT (STDMETHODCALLTYPE *SelectAndActivateButton)(
+        IDvdControl2 *This,
+        ULONG button);
+
+    HRESULT (STDMETHODCALLTYPE *StillOff)(
+        IDvdControl2 *This);
+
+    HRESULT (STDMETHODCALLTYPE *Pause)(
+        IDvdControl2 *This,
+        WINBOOL enable);
+
+    HRESULT (STDMETHODCALLTYPE *SelectAudioStream)(
+        IDvdControl2 *This,
+        ULONG stream,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *SelectSubpictureStream)(
+        IDvdControl2 *This,
+        ULONG stream,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *SetSubpictureState)(
+        IDvdControl2 *This,
+        WINBOOL enable,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *SelectAngle)(
+        IDvdControl2 *This,
+        ULONG angle,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *SelectParentalLevel)(
+        IDvdControl2 *This,
+        ULONG level);
+
+    HRESULT (STDMETHODCALLTYPE *SelectParentalCountry)(
+        IDvdControl2 *This,
+        BYTE country[2]);
+
+    HRESULT (STDMETHODCALLTYPE *SelectKaraokeAudioPresentationMode)(
+        IDvdControl2 *This,
+        ULONG mode);
+
+    HRESULT (STDMETHODCALLTYPE *SelectVideoModePreference)(
+        IDvdControl2 *This,
+        ULONG mode);
+
+    HRESULT (STDMETHODCALLTYPE *SetDVDDirectory)(
+        IDvdControl2 *This,
+        const WCHAR *path);
+
+    HRESULT (STDMETHODCALLTYPE *ActivateAtPosition)(
+        IDvdControl2 *This,
+        POINT point);
+
+    HRESULT (STDMETHODCALLTYPE *SelectAtPosition)(
+        IDvdControl2 *This,
+        POINT point);
+
+    HRESULT (STDMETHODCALLTYPE *PlayChaptersAutoStop)(
+        IDvdControl2 *This,
+        ULONG title,
+        ULONG chapter,
+        ULONG count,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *AcceptParentalLevelChange)(
+        IDvdControl2 *This,
+        WINBOOL accept);
+
+    HRESULT (STDMETHODCALLTYPE *SetOption)(
+        IDvdControl2 *This,
+        DVD_OPTION_FLAG flag,
+        WINBOOL option);
+
+    HRESULT (STDMETHODCALLTYPE *SetState)(
+        IDvdControl2 *This,
+        IDvdState *state,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *PlayPeriodInTitleAutoStop)(
+        IDvdControl2 *This,
+        ULONG title,
+        DVD_HMSF_TIMECODE *start_time,
+        DVD_HMSF_TIMECODE *end_time,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *SetGRPM)(
+        IDvdControl2 *This,
+        ULONG index,
+        WORD value,
+        DWORD flags,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *SelectDefaultMenuLanguage)(
+        IDvdControl2 *This,
+        LCID language);
+
+    HRESULT (STDMETHODCALLTYPE *SelectDefaultAudioLanguage)(
+        IDvdControl2 *This,
+        LCID language,
+        DVD_AUDIO_LANG_EXT extension);
+
+    HRESULT (STDMETHODCALLTYPE *SelectDefaultSubpictureLanguage)(
+        IDvdControl2 *This,
+        LCID language,
+        DVD_SUBPICTURE_LANG_EXT extension);
+
+    END_INTERFACE
+} IDvdControl2Vtbl;
+
+interface IDvdControl2 {
+    CONST_VTBL IDvdControl2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDvdControl2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDvdControl2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDvdControl2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDvdControl2 methods ***/
+#define IDvdControl2_PlayTitle(This,title,flags,cmd) (This)->lpVtbl->PlayTitle(This,title,flags,cmd)
+#define IDvdControl2_PlayChapterInTitle(This,title,chapter,flags,cmd) (This)->lpVtbl->PlayChapterInTitle(This,title,chapter,flags,cmd)
+#define IDvdControl2_PlayTimeInTitle(This,title,time,flags,cmd) (This)->lpVtbl->PlayTimeInTitle(This,title,time,flags,cmd)
+#define IDvdControl2_Stop(This) (This)->lpVtbl->Stop(This)
+#define IDvdControl2_ReturnFromSubmenu(This,flags,cmd) (This)->lpVtbl->ReturnFromSubmenu(This,flags,cmd)
+#define IDvdControl2_PlayAtTime(This,time,flags,cmd) (This)->lpVtbl->PlayAtTime(This,time,flags,cmd)
+#define IDvdControl2_PlayChapter(This,chapter,flags,cmd) (This)->lpVtbl->PlayChapter(This,chapter,flags,cmd)
+#define IDvdControl2_PlayPrevChapter(This,flags,cmd) (This)->lpVtbl->PlayPrevChapter(This,flags,cmd)
+#define IDvdControl2_ReplayChapter(This,flags,cmd) (This)->lpVtbl->ReplayChapter(This,flags,cmd)
+#define IDvdControl2_PlayNextChapter(This,flags,cmd) (This)->lpVtbl->PlayNextChapter(This,flags,cmd)
+#define IDvdControl2_PlayForwards(This,speed,flags,cmd) (This)->lpVtbl->PlayForwards(This,speed,flags,cmd)
+#define IDvdControl2_PlayBackwards(This,speed,flags,cmd) (This)->lpVtbl->PlayBackwards(This,speed,flags,cmd)
+#define IDvdControl2_ShowMenu(This,id,flags,cmd) (This)->lpVtbl->ShowMenu(This,id,flags,cmd)
+#define IDvdControl2_Resume(This,flags,cmd) (This)->lpVtbl->Resume(This,flags,cmd)
+#define IDvdControl2_SelectRelativeButton(This,button) (This)->lpVtbl->SelectRelativeButton(This,button)
+#define IDvdControl2_ActivateButton(This) (This)->lpVtbl->ActivateButton(This)
+#define IDvdControl2_SelectButton(This,button) (This)->lpVtbl->SelectButton(This,button)
+#define IDvdControl2_SelectAndActivateButton(This,button) (This)->lpVtbl->SelectAndActivateButton(This,button)
+#define IDvdControl2_StillOff(This) (This)->lpVtbl->StillOff(This)
+#define IDvdControl2_Pause(This,enable) (This)->lpVtbl->Pause(This,enable)
+#define IDvdControl2_SelectAudioStream(This,stream,flags,cmd) (This)->lpVtbl->SelectAudioStream(This,stream,flags,cmd)
+#define IDvdControl2_SelectSubpictureStream(This,stream,flags,cmd) (This)->lpVtbl->SelectSubpictureStream(This,stream,flags,cmd)
+#define IDvdControl2_SetSubpictureState(This,enable,flags,cmd) (This)->lpVtbl->SetSubpictureState(This,enable,flags,cmd)
+#define IDvdControl2_SelectAngle(This,angle,flags,cmd) (This)->lpVtbl->SelectAngle(This,angle,flags,cmd)
+#define IDvdControl2_SelectParentalLevel(This,level) (This)->lpVtbl->SelectParentalLevel(This,level)
+#define IDvdControl2_SelectParentalCountry(This,country) (This)->lpVtbl->SelectParentalCountry(This,country)
+#define IDvdControl2_SelectKaraokeAudioPresentationMode(This,mode) (This)->lpVtbl->SelectKaraokeAudioPresentationMode(This,mode)
+#define IDvdControl2_SelectVideoModePreference(This,mode) (This)->lpVtbl->SelectVideoModePreference(This,mode)
+#define IDvdControl2_SetDVDDirectory(This,path) (This)->lpVtbl->SetDVDDirectory(This,path)
+#define IDvdControl2_ActivateAtPosition(This,point) (This)->lpVtbl->ActivateAtPosition(This,point)
+#define IDvdControl2_SelectAtPosition(This,point) (This)->lpVtbl->SelectAtPosition(This,point)
+#define IDvdControl2_PlayChaptersAutoStop(This,title,chapter,count,flags,cmd) (This)->lpVtbl->PlayChaptersAutoStop(This,title,chapter,count,flags,cmd)
+#define IDvdControl2_AcceptParentalLevelChange(This,accept) (This)->lpVtbl->AcceptParentalLevelChange(This,accept)
+#define IDvdControl2_SetOption(This,flag,option) (This)->lpVtbl->SetOption(This,flag,option)
+#define IDvdControl2_SetState(This,state,flags,cmd) (This)->lpVtbl->SetState(This,state,flags,cmd)
+#define IDvdControl2_PlayPeriodInTitleAutoStop(This,title,start_time,end_time,flags,cmd) (This)->lpVtbl->PlayPeriodInTitleAutoStop(This,title,start_time,end_time,flags,cmd)
+#define IDvdControl2_SetGRPM(This,index,value,flags,cmd) (This)->lpVtbl->SetGRPM(This,index,value,flags,cmd)
+#define IDvdControl2_SelectDefaultMenuLanguage(This,language) (This)->lpVtbl->SelectDefaultMenuLanguage(This,language)
+#define IDvdControl2_SelectDefaultAudioLanguage(This,language,extension) (This)->lpVtbl->SelectDefaultAudioLanguage(This,language,extension)
+#define IDvdControl2_SelectDefaultSubpictureLanguage(This,language,extension) (This)->lpVtbl->SelectDefaultSubpictureLanguage(This,language,extension)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDvdControl2_QueryInterface(IDvdControl2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDvdControl2_AddRef(IDvdControl2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDvdControl2_Release(IDvdControl2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDvdControl2 methods ***/
+static FORCEINLINE HRESULT IDvdControl2_PlayTitle(IDvdControl2* This,ULONG title,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->PlayTitle(This,title,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_PlayChapterInTitle(IDvdControl2* This,ULONG title,ULONG chapter,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->PlayChapterInTitle(This,title,chapter,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_PlayTimeInTitle(IDvdControl2* This,ULONG title,DVD_HMSF_TIMECODE *time,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->PlayTimeInTitle(This,title,time,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_Stop(IDvdControl2* This) {
+    return This->lpVtbl->Stop(This);
+}
+static FORCEINLINE HRESULT IDvdControl2_ReturnFromSubmenu(IDvdControl2* This,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->ReturnFromSubmenu(This,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_PlayAtTime(IDvdControl2* This,DVD_HMSF_TIMECODE *time,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->PlayAtTime(This,time,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_PlayChapter(IDvdControl2* This,ULONG chapter,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->PlayChapter(This,chapter,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_PlayPrevChapter(IDvdControl2* This,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->PlayPrevChapter(This,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_ReplayChapter(IDvdControl2* This,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->ReplayChapter(This,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_PlayNextChapter(IDvdControl2* This,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->PlayNextChapter(This,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_PlayForwards(IDvdControl2* This,double speed,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->PlayForwards(This,speed,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_PlayBackwards(IDvdControl2* This,double speed,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->PlayBackwards(This,speed,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_ShowMenu(IDvdControl2* This,DVD_MENU_ID id,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->ShowMenu(This,id,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_Resume(IDvdControl2* This,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->Resume(This,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_SelectRelativeButton(IDvdControl2* This,DVD_RELATIVE_BUTTON button) {
+    return This->lpVtbl->SelectRelativeButton(This,button);
+}
+static FORCEINLINE HRESULT IDvdControl2_ActivateButton(IDvdControl2* This) {
+    return This->lpVtbl->ActivateButton(This);
+}
+static FORCEINLINE HRESULT IDvdControl2_SelectButton(IDvdControl2* This,ULONG button) {
+    return This->lpVtbl->SelectButton(This,button);
+}
+static FORCEINLINE HRESULT IDvdControl2_SelectAndActivateButton(IDvdControl2* This,ULONG button) {
+    return This->lpVtbl->SelectAndActivateButton(This,button);
+}
+static FORCEINLINE HRESULT IDvdControl2_StillOff(IDvdControl2* This) {
+    return This->lpVtbl->StillOff(This);
+}
+static FORCEINLINE HRESULT IDvdControl2_Pause(IDvdControl2* This,WINBOOL enable) {
+    return This->lpVtbl->Pause(This,enable);
+}
+static FORCEINLINE HRESULT IDvdControl2_SelectAudioStream(IDvdControl2* This,ULONG stream,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->SelectAudioStream(This,stream,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_SelectSubpictureStream(IDvdControl2* This,ULONG stream,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->SelectSubpictureStream(This,stream,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_SetSubpictureState(IDvdControl2* This,WINBOOL enable,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->SetSubpictureState(This,enable,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_SelectAngle(IDvdControl2* This,ULONG angle,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->SelectAngle(This,angle,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_SelectParentalLevel(IDvdControl2* This,ULONG level) {
+    return This->lpVtbl->SelectParentalLevel(This,level);
+}
+static FORCEINLINE HRESULT IDvdControl2_SelectParentalCountry(IDvdControl2* This,BYTE country[2]) {
+    return This->lpVtbl->SelectParentalCountry(This,country);
+}
+static FORCEINLINE HRESULT IDvdControl2_SelectKaraokeAudioPresentationMode(IDvdControl2* This,ULONG mode) {
+    return This->lpVtbl->SelectKaraokeAudioPresentationMode(This,mode);
+}
+static FORCEINLINE HRESULT IDvdControl2_SelectVideoModePreference(IDvdControl2* This,ULONG mode) {
+    return This->lpVtbl->SelectVideoModePreference(This,mode);
+}
+static FORCEINLINE HRESULT IDvdControl2_SetDVDDirectory(IDvdControl2* This,const WCHAR *path) {
+    return This->lpVtbl->SetDVDDirectory(This,path);
+}
+static FORCEINLINE HRESULT IDvdControl2_ActivateAtPosition(IDvdControl2* This,POINT point) {
+    return This->lpVtbl->ActivateAtPosition(This,point);
+}
+static FORCEINLINE HRESULT IDvdControl2_SelectAtPosition(IDvdControl2* This,POINT point) {
+    return This->lpVtbl->SelectAtPosition(This,point);
+}
+static FORCEINLINE HRESULT IDvdControl2_PlayChaptersAutoStop(IDvdControl2* This,ULONG title,ULONG chapter,ULONG count,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->PlayChaptersAutoStop(This,title,chapter,count,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_AcceptParentalLevelChange(IDvdControl2* This,WINBOOL accept) {
+    return This->lpVtbl->AcceptParentalLevelChange(This,accept);
+}
+static FORCEINLINE HRESULT IDvdControl2_SetOption(IDvdControl2* This,DVD_OPTION_FLAG flag,WINBOOL option) {
+    return This->lpVtbl->SetOption(This,flag,option);
+}
+static FORCEINLINE HRESULT IDvdControl2_SetState(IDvdControl2* This,IDvdState *state,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->SetState(This,state,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_PlayPeriodInTitleAutoStop(IDvdControl2* This,ULONG title,DVD_HMSF_TIMECODE *start_time,DVD_HMSF_TIMECODE *end_time,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->PlayPeriodInTitleAutoStop(This,title,start_time,end_time,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_SetGRPM(IDvdControl2* This,ULONG index,WORD value,DWORD flags,IDvdCmd **cmd) {
+    return This->lpVtbl->SetGRPM(This,index,value,flags,cmd);
+}
+static FORCEINLINE HRESULT IDvdControl2_SelectDefaultMenuLanguage(IDvdControl2* This,LCID language) {
+    return This->lpVtbl->SelectDefaultMenuLanguage(This,language);
+}
+static FORCEINLINE HRESULT IDvdControl2_SelectDefaultAudioLanguage(IDvdControl2* This,LCID language,DVD_AUDIO_LANG_EXT extension) {
+    return This->lpVtbl->SelectDefaultAudioLanguage(This,language,extension);
+}
+static FORCEINLINE HRESULT IDvdControl2_SelectDefaultSubpictureLanguage(IDvdControl2* This,LCID language,DVD_SUBPICTURE_LANG_EXT extension) {
+    return This->lpVtbl->SelectDefaultSubpictureLanguage(This,language,extension);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDvdControl2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDvdInfo2 interface
+ */
+#ifndef __IDvdInfo2_INTERFACE_DEFINED__
+#define __IDvdInfo2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDvdInfo2, 0x34151510, 0xeec0, 0x11d2, 0x82,0x01, 0x00,0xa0,0xc9,0xd7,0x48,0x42);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("34151510-eec0-11d2-8201-00a0c9d74842")
+IDvdInfo2 : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentDomain(
+        DVD_DOMAIN *domain) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentLocation(
+        DVD_PLAYBACK_LOCATION2 *location) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTotalTitleTime(
+        DVD_HMSF_TIMECODE *time,
+        ULONG *flags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentButton(
+        ULONG *count,
+        ULONG *current) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentAngle(
+        ULONG *count,
+        ULONG *current) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentAudio(
+        ULONG *count,
+        ULONG *current) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentSubpicture(
+        ULONG *count,
+        ULONG *current,
+        WINBOOL *enable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentUOPS(
+        ULONG *uops) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAllSPRMs(
+        SPRMARRAY *regs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAllGPRMs(
+        GPRMARRAY *regs) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAudioLanguage(
+        ULONG stream,
+        LCID *language) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSubpictureLanguage(
+        ULONG stream,
+        LCID *language) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTitleAttributes(
+        ULONG index,
+        DVD_MenuAttributes *menu,
+        DVD_TitleAttributes *title) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVMGAttributes(
+        DVD_MenuAttributes *attr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetVideoAttributes(
+        DVD_VideoAttributes *attr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAudioAttributes(
+        ULONG stream,
+        DVD_AudioAttributes *attr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetKaraokeAttributes(
+        ULONG stream,
+        DVD_KaraokeAttributes *attr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetSubpictureAttributes(
+        ULONG stream,
+        DVD_SubpictureAttributes *attr) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentVolumeInfo(
+        ULONG *volume_count,
+        ULONG *current,
+        DVD_DISC_SIDE *side,
+        ULONG *title_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDVDTextNumberOfLanguages(
+        ULONG *count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDVDTextLanguageInfo(
+        ULONG index,
+        ULONG *string_count,
+        LCID *language,
+        enum DVD_TextCharSet *character_set) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDVDTextStringAsNative(
+        ULONG lang_index,
+        ULONG string_index,
+        BYTE *string,
+        ULONG size,
+        ULONG *ret_size,
+        enum DVD_TextStringType *type) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDVDTextStringAsUnicode(
+        ULONG lang_index,
+        ULONG string_index,
+        WCHAR *string,
+        ULONG size,
+        ULONG *ret_size,
+        enum DVD_TextStringType *type) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetPlayerParentalLevel(
+        ULONG *level,
+        BYTE country_code[2]) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetNumberOfChapters(
+        ULONG title,
+        ULONG *count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetTitleParentalLevels(
+        ULONG title,
+        ULONG *levels) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDVDDirectory(
+        WCHAR *path,
+        ULONG size,
+        ULONG *ret_size) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsAudioStreamEnabled(
+        ULONG stream,
+        WINBOOL *enable) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDiscID(
+        const WCHAR *path,
+        ULONGLONG *id) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetState(
+        IDvdState **state) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetMenuLanguages(
+        LCID *languages,
+        ULONG count,
+        ULONG *ret_count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetButtonAtPosition(
+        POINT point,
+        ULONG *button) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCmdFromEvent(
+        LONG_PTR param,
+        IDvdCmd **cmd) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDefaultMenuLanguage(
+        LCID *language) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDefaultAudioLanguage(
+        LCID *language,
+        DVD_AUDIO_LANG_EXT *extension) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SelectDefaultSubpictureLanguage(
+        LCID *language,
+        DVD_SUBPICTURE_LANG_EXT *extension) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDecoderCaps(
+        DVD_DECODER_CAPS *caps) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetButtonRect(
+        ULONG button,
+        RECT *rect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsSubpictureStreamEnabled(
+        ULONG stream,
+        WINBOOL *enable) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDvdInfo2, 0x34151510, 0xeec0, 0x11d2, 0x82,0x01, 0x00,0xa0,0xc9,0xd7,0x48,0x42)
+#endif
+#else
+typedef struct IDvdInfo2Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDvdInfo2 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDvdInfo2 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDvdInfo2 *This);
+
+    /*** IDvdInfo2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetCurrentDomain)(
+        IDvdInfo2 *This,
+        DVD_DOMAIN *domain);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentLocation)(
+        IDvdInfo2 *This,
+        DVD_PLAYBACK_LOCATION2 *location);
+
+    HRESULT (STDMETHODCALLTYPE *GetTotalTitleTime)(
+        IDvdInfo2 *This,
+        DVD_HMSF_TIMECODE *time,
+        ULONG *flags);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentButton)(
+        IDvdInfo2 *This,
+        ULONG *count,
+        ULONG *current);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentAngle)(
+        IDvdInfo2 *This,
+        ULONG *count,
+        ULONG *current);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentAudio)(
+        IDvdInfo2 *This,
+        ULONG *count,
+        ULONG *current);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentSubpicture)(
+        IDvdInfo2 *This,
+        ULONG *count,
+        ULONG *current,
+        WINBOOL *enable);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentUOPS)(
+        IDvdInfo2 *This,
+        ULONG *uops);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllSPRMs)(
+        IDvdInfo2 *This,
+        SPRMARRAY *regs);
+
+    HRESULT (STDMETHODCALLTYPE *GetAllGPRMs)(
+        IDvdInfo2 *This,
+        GPRMARRAY *regs);
+
+    HRESULT (STDMETHODCALLTYPE *GetAudioLanguage)(
+        IDvdInfo2 *This,
+        ULONG stream,
+        LCID *language);
+
+    HRESULT (STDMETHODCALLTYPE *GetSubpictureLanguage)(
+        IDvdInfo2 *This,
+        ULONG stream,
+        LCID *language);
+
+    HRESULT (STDMETHODCALLTYPE *GetTitleAttributes)(
+        IDvdInfo2 *This,
+        ULONG index,
+        DVD_MenuAttributes *menu,
+        DVD_TitleAttributes *title);
+
+    HRESULT (STDMETHODCALLTYPE *GetVMGAttributes)(
+        IDvdInfo2 *This,
+        DVD_MenuAttributes *attr);
+
+    HRESULT (STDMETHODCALLTYPE *GetVideoAttributes)(
+        IDvdInfo2 *This,
+        DVD_VideoAttributes *attr);
+
+    HRESULT (STDMETHODCALLTYPE *GetAudioAttributes)(
+        IDvdInfo2 *This,
+        ULONG stream,
+        DVD_AudioAttributes *attr);
+
+    HRESULT (STDMETHODCALLTYPE *GetKaraokeAttributes)(
+        IDvdInfo2 *This,
+        ULONG stream,
+        DVD_KaraokeAttributes *attr);
+
+    HRESULT (STDMETHODCALLTYPE *GetSubpictureAttributes)(
+        IDvdInfo2 *This,
+        ULONG stream,
+        DVD_SubpictureAttributes *attr);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentVolumeInfo)(
+        IDvdInfo2 *This,
+        ULONG *volume_count,
+        ULONG *current,
+        DVD_DISC_SIDE *side,
+        ULONG *title_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetDVDTextNumberOfLanguages)(
+        IDvdInfo2 *This,
+        ULONG *count);
+
+    HRESULT (STDMETHODCALLTYPE *GetDVDTextLanguageInfo)(
+        IDvdInfo2 *This,
+        ULONG index,
+        ULONG *string_count,
+        LCID *language,
+        enum DVD_TextCharSet *character_set);
+
+    HRESULT (STDMETHODCALLTYPE *GetDVDTextStringAsNative)(
+        IDvdInfo2 *This,
+        ULONG lang_index,
+        ULONG string_index,
+        BYTE *string,
+        ULONG size,
+        ULONG *ret_size,
+        enum DVD_TextStringType *type);
+
+    HRESULT (STDMETHODCALLTYPE *GetDVDTextStringAsUnicode)(
+        IDvdInfo2 *This,
+        ULONG lang_index,
+        ULONG string_index,
+        WCHAR *string,
+        ULONG size,
+        ULONG *ret_size,
+        enum DVD_TextStringType *type);
+
+    HRESULT (STDMETHODCALLTYPE *GetPlayerParentalLevel)(
+        IDvdInfo2 *This,
+        ULONG *level,
+        BYTE country_code[2]);
+
+    HRESULT (STDMETHODCALLTYPE *GetNumberOfChapters)(
+        IDvdInfo2 *This,
+        ULONG title,
+        ULONG *count);
+
+    HRESULT (STDMETHODCALLTYPE *GetTitleParentalLevels)(
+        IDvdInfo2 *This,
+        ULONG title,
+        ULONG *levels);
+
+    HRESULT (STDMETHODCALLTYPE *GetDVDDirectory)(
+        IDvdInfo2 *This,
+        WCHAR *path,
+        ULONG size,
+        ULONG *ret_size);
+
+    HRESULT (STDMETHODCALLTYPE *IsAudioStreamEnabled)(
+        IDvdInfo2 *This,
+        ULONG stream,
+        WINBOOL *enable);
+
+    HRESULT (STDMETHODCALLTYPE *GetDiscID)(
+        IDvdInfo2 *This,
+        const WCHAR *path,
+        ULONGLONG *id);
+
+    HRESULT (STDMETHODCALLTYPE *GetState)(
+        IDvdInfo2 *This,
+        IDvdState **state);
+
+    HRESULT (STDMETHODCALLTYPE *GetMenuLanguages)(
+        IDvdInfo2 *This,
+        LCID *languages,
+        ULONG count,
+        ULONG *ret_count);
+
+    HRESULT (STDMETHODCALLTYPE *GetButtonAtPosition)(
+        IDvdInfo2 *This,
+        POINT point,
+        ULONG *button);
+
+    HRESULT (STDMETHODCALLTYPE *GetCmdFromEvent)(
+        IDvdInfo2 *This,
+        LONG_PTR param,
+        IDvdCmd **cmd);
+
+    HRESULT (STDMETHODCALLTYPE *GetDefaultMenuLanguage)(
+        IDvdInfo2 *This,
+        LCID *language);
+
+    HRESULT (STDMETHODCALLTYPE *GetDefaultAudioLanguage)(
+        IDvdInfo2 *This,
+        LCID *language,
+        DVD_AUDIO_LANG_EXT *extension);
+
+    HRESULT (STDMETHODCALLTYPE *SelectDefaultSubpictureLanguage)(
+        IDvdInfo2 *This,
+        LCID *language,
+        DVD_SUBPICTURE_LANG_EXT *extension);
+
+    HRESULT (STDMETHODCALLTYPE *GetDecoderCaps)(
+        IDvdInfo2 *This,
+        DVD_DECODER_CAPS *caps);
+
+    HRESULT (STDMETHODCALLTYPE *GetButtonRect)(
+        IDvdInfo2 *This,
+        ULONG button,
+        RECT *rect);
+
+    HRESULT (STDMETHODCALLTYPE *IsSubpictureStreamEnabled)(
+        IDvdInfo2 *This,
+        ULONG stream,
+        WINBOOL *enable);
+
+    END_INTERFACE
+} IDvdInfo2Vtbl;
+
+interface IDvdInfo2 {
+    CONST_VTBL IDvdInfo2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDvdInfo2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDvdInfo2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDvdInfo2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDvdInfo2 methods ***/
+#define IDvdInfo2_GetCurrentDomain(This,domain) (This)->lpVtbl->GetCurrentDomain(This,domain)
+#define IDvdInfo2_GetCurrentLocation(This,location) (This)->lpVtbl->GetCurrentLocation(This,location)
+#define IDvdInfo2_GetTotalTitleTime(This,time,flags) (This)->lpVtbl->GetTotalTitleTime(This,time,flags)
+#define IDvdInfo2_GetCurrentButton(This,count,current) (This)->lpVtbl->GetCurrentButton(This,count,current)
+#define IDvdInfo2_GetCurrentAngle(This,count,current) (This)->lpVtbl->GetCurrentAngle(This,count,current)
+#define IDvdInfo2_GetCurrentAudio(This,count,current) (This)->lpVtbl->GetCurrentAudio(This,count,current)
+#define IDvdInfo2_GetCurrentSubpicture(This,count,current,enable) (This)->lpVtbl->GetCurrentSubpicture(This,count,current,enable)
+#define IDvdInfo2_GetCurrentUOPS(This,uops) (This)->lpVtbl->GetCurrentUOPS(This,uops)
+#define IDvdInfo2_GetAllSPRMs(This,regs) (This)->lpVtbl->GetAllSPRMs(This,regs)
+#define IDvdInfo2_GetAllGPRMs(This,regs) (This)->lpVtbl->GetAllGPRMs(This,regs)
+#define IDvdInfo2_GetAudioLanguage(This,stream,language) (This)->lpVtbl->GetAudioLanguage(This,stream,language)
+#define IDvdInfo2_GetSubpictureLanguage(This,stream,language) (This)->lpVtbl->GetSubpictureLanguage(This,stream,language)
+#define IDvdInfo2_GetTitleAttributes(This,index,menu,title) (This)->lpVtbl->GetTitleAttributes(This,index,menu,title)
+#define IDvdInfo2_GetVMGAttributes(This,attr) (This)->lpVtbl->GetVMGAttributes(This,attr)
+#define IDvdInfo2_GetVideoAttributes(This,attr) (This)->lpVtbl->GetVideoAttributes(This,attr)
+#define IDvdInfo2_GetAudioAttributes(This,stream,attr) (This)->lpVtbl->GetAudioAttributes(This,stream,attr)
+#define IDvdInfo2_GetKaraokeAttributes(This,stream,attr) (This)->lpVtbl->GetKaraokeAttributes(This,stream,attr)
+#define IDvdInfo2_GetSubpictureAttributes(This,stream,attr) (This)->lpVtbl->GetSubpictureAttributes(This,stream,attr)
+#define IDvdInfo2_GetCurrentVolumeInfo(This,volume_count,current,side,title_count) (This)->lpVtbl->GetCurrentVolumeInfo(This,volume_count,current,side,title_count)
+#define IDvdInfo2_GetDVDTextNumberOfLanguages(This,count) (This)->lpVtbl->GetDVDTextNumberOfLanguages(This,count)
+#define IDvdInfo2_GetDVDTextLanguageInfo(This,index,string_count,language,character_set) (This)->lpVtbl->GetDVDTextLanguageInfo(This,index,string_count,language,character_set)
+#define IDvdInfo2_GetDVDTextStringAsNative(This,lang_index,string_index,string,size,ret_size,type) (This)->lpVtbl->GetDVDTextStringAsNative(This,lang_index,string_index,string,size,ret_size,type)
+#define IDvdInfo2_GetDVDTextStringAsUnicode(This,lang_index,string_index,string,size,ret_size,type) (This)->lpVtbl->GetDVDTextStringAsUnicode(This,lang_index,string_index,string,size,ret_size,type)
+#define IDvdInfo2_GetPlayerParentalLevel(This,level,country_code) (This)->lpVtbl->GetPlayerParentalLevel(This,level,country_code)
+#define IDvdInfo2_GetNumberOfChapters(This,title,count) (This)->lpVtbl->GetNumberOfChapters(This,title,count)
+#define IDvdInfo2_GetTitleParentalLevels(This,title,levels) (This)->lpVtbl->GetTitleParentalLevels(This,title,levels)
+#define IDvdInfo2_GetDVDDirectory(This,path,size,ret_size) (This)->lpVtbl->GetDVDDirectory(This,path,size,ret_size)
+#define IDvdInfo2_IsAudioStreamEnabled(This,stream,enable) (This)->lpVtbl->IsAudioStreamEnabled(This,stream,enable)
+#define IDvdInfo2_GetDiscID(This,path,id) (This)->lpVtbl->GetDiscID(This,path,id)
+#define IDvdInfo2_GetState(This,state) (This)->lpVtbl->GetState(This,state)
+#define IDvdInfo2_GetMenuLanguages(This,languages,count,ret_count) (This)->lpVtbl->GetMenuLanguages(This,languages,count,ret_count)
+#define IDvdInfo2_GetButtonAtPosition(This,point,button) (This)->lpVtbl->GetButtonAtPosition(This,point,button)
+#define IDvdInfo2_GetCmdFromEvent(This,param,cmd) (This)->lpVtbl->GetCmdFromEvent(This,param,cmd)
+#define IDvdInfo2_GetDefaultMenuLanguage(This,language) (This)->lpVtbl->GetDefaultMenuLanguage(This,language)
+#define IDvdInfo2_GetDefaultAudioLanguage(This,language,extension) (This)->lpVtbl->GetDefaultAudioLanguage(This,language,extension)
+#define IDvdInfo2_SelectDefaultSubpictureLanguage(This,language,extension) (This)->lpVtbl->SelectDefaultSubpictureLanguage(This,language,extension)
+#define IDvdInfo2_GetDecoderCaps(This,caps) (This)->lpVtbl->GetDecoderCaps(This,caps)
+#define IDvdInfo2_GetButtonRect(This,button,rect) (This)->lpVtbl->GetButtonRect(This,button,rect)
+#define IDvdInfo2_IsSubpictureStreamEnabled(This,stream,enable) (This)->lpVtbl->IsSubpictureStreamEnabled(This,stream,enable)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDvdInfo2_QueryInterface(IDvdInfo2* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDvdInfo2_AddRef(IDvdInfo2* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDvdInfo2_Release(IDvdInfo2* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDvdInfo2 methods ***/
+static FORCEINLINE HRESULT IDvdInfo2_GetCurrentDomain(IDvdInfo2* This,DVD_DOMAIN *domain) {
+    return This->lpVtbl->GetCurrentDomain(This,domain);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetCurrentLocation(IDvdInfo2* This,DVD_PLAYBACK_LOCATION2 *location) {
+    return This->lpVtbl->GetCurrentLocation(This,location);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetTotalTitleTime(IDvdInfo2* This,DVD_HMSF_TIMECODE *time,ULONG *flags) {
+    return This->lpVtbl->GetTotalTitleTime(This,time,flags);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetCurrentButton(IDvdInfo2* This,ULONG *count,ULONG *current) {
+    return This->lpVtbl->GetCurrentButton(This,count,current);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetCurrentAngle(IDvdInfo2* This,ULONG *count,ULONG *current) {
+    return This->lpVtbl->GetCurrentAngle(This,count,current);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetCurrentAudio(IDvdInfo2* This,ULONG *count,ULONG *current) {
+    return This->lpVtbl->GetCurrentAudio(This,count,current);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetCurrentSubpicture(IDvdInfo2* This,ULONG *count,ULONG *current,WINBOOL *enable) {
+    return This->lpVtbl->GetCurrentSubpicture(This,count,current,enable);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetCurrentUOPS(IDvdInfo2* This,ULONG *uops) {
+    return This->lpVtbl->GetCurrentUOPS(This,uops);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetAllSPRMs(IDvdInfo2* This,SPRMARRAY *regs) {
+    return This->lpVtbl->GetAllSPRMs(This,regs);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetAllGPRMs(IDvdInfo2* This,GPRMARRAY *regs) {
+    return This->lpVtbl->GetAllGPRMs(This,regs);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetAudioLanguage(IDvdInfo2* This,ULONG stream,LCID *language) {
+    return This->lpVtbl->GetAudioLanguage(This,stream,language);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetSubpictureLanguage(IDvdInfo2* This,ULONG stream,LCID *language) {
+    return This->lpVtbl->GetSubpictureLanguage(This,stream,language);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetTitleAttributes(IDvdInfo2* This,ULONG index,DVD_MenuAttributes *menu,DVD_TitleAttributes *title) {
+    return This->lpVtbl->GetTitleAttributes(This,index,menu,title);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetVMGAttributes(IDvdInfo2* This,DVD_MenuAttributes *attr) {
+    return This->lpVtbl->GetVMGAttributes(This,attr);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetVideoAttributes(IDvdInfo2* This,DVD_VideoAttributes *attr) {
+    return This->lpVtbl->GetVideoAttributes(This,attr);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetAudioAttributes(IDvdInfo2* This,ULONG stream,DVD_AudioAttributes *attr) {
+    return This->lpVtbl->GetAudioAttributes(This,stream,attr);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetKaraokeAttributes(IDvdInfo2* This,ULONG stream,DVD_KaraokeAttributes *attr) {
+    return This->lpVtbl->GetKaraokeAttributes(This,stream,attr);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetSubpictureAttributes(IDvdInfo2* This,ULONG stream,DVD_SubpictureAttributes *attr) {
+    return This->lpVtbl->GetSubpictureAttributes(This,stream,attr);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetCurrentVolumeInfo(IDvdInfo2* This,ULONG *volume_count,ULONG *current,DVD_DISC_SIDE *side,ULONG *title_count) {
+    return This->lpVtbl->GetCurrentVolumeInfo(This,volume_count,current,side,title_count);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetDVDTextNumberOfLanguages(IDvdInfo2* This,ULONG *count) {
+    return This->lpVtbl->GetDVDTextNumberOfLanguages(This,count);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetDVDTextLanguageInfo(IDvdInfo2* This,ULONG index,ULONG *string_count,LCID *language,enum DVD_TextCharSet *character_set) {
+    return This->lpVtbl->GetDVDTextLanguageInfo(This,index,string_count,language,character_set);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetDVDTextStringAsNative(IDvdInfo2* This,ULONG lang_index,ULONG string_index,BYTE *string,ULONG size,ULONG *ret_size,enum DVD_TextStringType *type) {
+    return This->lpVtbl->GetDVDTextStringAsNative(This,lang_index,string_index,string,size,ret_size,type);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetDVDTextStringAsUnicode(IDvdInfo2* This,ULONG lang_index,ULONG string_index,WCHAR *string,ULONG size,ULONG *ret_size,enum DVD_TextStringType *type) {
+    return This->lpVtbl->GetDVDTextStringAsUnicode(This,lang_index,string_index,string,size,ret_size,type);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetPlayerParentalLevel(IDvdInfo2* This,ULONG *level,BYTE country_code[2]) {
+    return This->lpVtbl->GetPlayerParentalLevel(This,level,country_code);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetNumberOfChapters(IDvdInfo2* This,ULONG title,ULONG *count) {
+    return This->lpVtbl->GetNumberOfChapters(This,title,count);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetTitleParentalLevels(IDvdInfo2* This,ULONG title,ULONG *levels) {
+    return This->lpVtbl->GetTitleParentalLevels(This,title,levels);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetDVDDirectory(IDvdInfo2* This,WCHAR *path,ULONG size,ULONG *ret_size) {
+    return This->lpVtbl->GetDVDDirectory(This,path,size,ret_size);
+}
+static FORCEINLINE HRESULT IDvdInfo2_IsAudioStreamEnabled(IDvdInfo2* This,ULONG stream,WINBOOL *enable) {
+    return This->lpVtbl->IsAudioStreamEnabled(This,stream,enable);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetDiscID(IDvdInfo2* This,const WCHAR *path,ULONGLONG *id) {
+    return This->lpVtbl->GetDiscID(This,path,id);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetState(IDvdInfo2* This,IDvdState **state) {
+    return This->lpVtbl->GetState(This,state);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetMenuLanguages(IDvdInfo2* This,LCID *languages,ULONG count,ULONG *ret_count) {
+    return This->lpVtbl->GetMenuLanguages(This,languages,count,ret_count);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetButtonAtPosition(IDvdInfo2* This,POINT point,ULONG *button) {
+    return This->lpVtbl->GetButtonAtPosition(This,point,button);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetCmdFromEvent(IDvdInfo2* This,LONG_PTR param,IDvdCmd **cmd) {
+    return This->lpVtbl->GetCmdFromEvent(This,param,cmd);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetDefaultMenuLanguage(IDvdInfo2* This,LCID *language) {
+    return This->lpVtbl->GetDefaultMenuLanguage(This,language);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetDefaultAudioLanguage(IDvdInfo2* This,LCID *language,DVD_AUDIO_LANG_EXT *extension) {
+    return This->lpVtbl->GetDefaultAudioLanguage(This,language,extension);
+}
+static FORCEINLINE HRESULT IDvdInfo2_SelectDefaultSubpictureLanguage(IDvdInfo2* This,LCID *language,DVD_SUBPICTURE_LANG_EXT *extension) {
+    return This->lpVtbl->SelectDefaultSubpictureLanguage(This,language,extension);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetDecoderCaps(IDvdInfo2* This,DVD_DECODER_CAPS *caps) {
+    return This->lpVtbl->GetDecoderCaps(This,caps);
+}
+static FORCEINLINE HRESULT IDvdInfo2_GetButtonRect(IDvdInfo2* This,ULONG button,RECT *rect) {
+    return This->lpVtbl->GetButtonRect(This,button,rect);
+}
+static FORCEINLINE HRESULT IDvdInfo2_IsSubpictureStreamEnabled(IDvdInfo2* This,ULONG stream,WINBOOL *enable) {
+    return This->lpVtbl->IsSubpictureStreamEnabled(This,stream,enable);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDvdInfo2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDvdGraphBuilder interface
+ */
+#ifndef __IDvdGraphBuilder_INTERFACE_DEFINED__
+#define __IDvdGraphBuilder_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDvdGraphBuilder, 0xfcc152b6, 0xf372, 0x11d0, 0x8e,0x00, 0x00,0xc0,0x4f,0xd7,0xc0,0x8b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("fcc152b6-f372-11d0-8e00-00c04fd7c08b")
+IDvdGraphBuilder : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetFiltergraph(
+        IGraphBuilder **graph) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetDvdInterface(
+        REFIID iid,
+        void **out) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RenderDvdVideoVolume(
+        const WCHAR *path,
+        DWORD flags,
+        AM_DVD_RENDERSTATUS *status) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IDvdGraphBuilder, 0xfcc152b6, 0xf372, 0x11d0, 0x8e,0x00, 0x00,0xc0,0x4f,0xd7,0xc0,0x8b)
+#endif
+#else
+typedef struct IDvdGraphBuilderVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDvdGraphBuilder *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDvdGraphBuilder *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDvdGraphBuilder *This);
+
+    /*** IDvdGraphBuilder methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetFiltergraph)(
+        IDvdGraphBuilder *This,
+        IGraphBuilder **graph);
+
+    HRESULT (STDMETHODCALLTYPE *GetDvdInterface)(
+        IDvdGraphBuilder *This,
+        REFIID iid,
+        void **out);
+
+    HRESULT (STDMETHODCALLTYPE *RenderDvdVideoVolume)(
+        IDvdGraphBuilder *This,
+        const WCHAR *path,
+        DWORD flags,
+        AM_DVD_RENDERSTATUS *status);
+
+    END_INTERFACE
+} IDvdGraphBuilderVtbl;
+
+interface IDvdGraphBuilder {
+    CONST_VTBL IDvdGraphBuilderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IDvdGraphBuilder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDvdGraphBuilder_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDvdGraphBuilder_Release(This) (This)->lpVtbl->Release(This)
+/*** IDvdGraphBuilder methods ***/
+#define IDvdGraphBuilder_GetFiltergraph(This,graph) (This)->lpVtbl->GetFiltergraph(This,graph)
+#define IDvdGraphBuilder_GetDvdInterface(This,iid,out) (This)->lpVtbl->GetDvdInterface(This,iid,out)
+#define IDvdGraphBuilder_RenderDvdVideoVolume(This,path,flags,status) (This)->lpVtbl->RenderDvdVideoVolume(This,path,flags,status)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IDvdGraphBuilder_QueryInterface(IDvdGraphBuilder* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IDvdGraphBuilder_AddRef(IDvdGraphBuilder* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IDvdGraphBuilder_Release(IDvdGraphBuilder* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IDvdGraphBuilder methods ***/
+static FORCEINLINE HRESULT IDvdGraphBuilder_GetFiltergraph(IDvdGraphBuilder* This,IGraphBuilder **graph) {
+    return This->lpVtbl->GetFiltergraph(This,graph);
+}
+static FORCEINLINE HRESULT IDvdGraphBuilder_GetDvdInterface(IDvdGraphBuilder* This,REFIID iid,void **out) {
+    return This->lpVtbl->GetDvdInterface(This,iid,out);
+}
+static FORCEINLINE HRESULT IDvdGraphBuilder_RenderDvdVideoVolume(IDvdGraphBuilder* This,const WCHAR *path,DWORD flags,AM_DVD_RENDERSTATUS *status) {
+    return This->lpVtbl->RenderDvdVideoVolume(This,path,flags,status);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IDvdGraphBuilder_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __dvdif_h__ */
diff --git a/mingw-w64-headers/include/dvdif.idl b/mingw-w64-headers/include/dvdif.idl
new file mode 100644
index 0000000..3640a56
--- /dev/null
+++ b/mingw-w64-headers/include/dvdif.idl
@@ -0,0 +1,742 @@
+/*
+ * Copyright (C) 2020 Vijay Kiran Kamuju
+ *
+ * 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
+ */
+
+#if 0
+pragma makedep install
+#endif
+
+import "unknwn.idl";
+import "objidl.idl";
+
+cpp_quote("#include <ddraw.h>")
+
+cpp_quote("#if 0")
+interface IGraphBuilder;
+cpp_quote("#endif")
+
+typedef enum tagDVD_DOMAIN
+{
+    DVD_DOMAIN_FirstPlay = 1,
+    DVD_DOMAIN_VideoManagerMenu,
+    DVD_DOMAIN_VideoTitleSetMenu,
+    DVD_DOMAIN_Title,
+    DVD_DOMAIN_Stop
+} DVD_DOMAIN;
+
+typedef enum tagDVD_MENU_ID
+{
+    DVD_MENU_Title      = 2,
+    DVD_MENU_Root       = 3,
+    DVD_MENU_Subpicture = 4,
+    DVD_MENU_Audio      = 5,
+    DVD_MENU_Angle      = 6,
+    DVD_MENU_Chapter    = 7
+} DVD_MENU_ID;
+
+typedef enum tagDVD_DISC_SIDE
+{
+    DVD_SIDE_A = 1,
+    DVD_SIDE_B = 2
+} DVD_DISC_SIDE;
+
+typedef enum tagDVD_PREFERRED_DISPLAY_MODE
+{
+    DISPLAY_CONTENT_DEFAULT         = 0,
+    DISPLAY_16x9                    = 1,
+    DISPLAY_4x3_PANSCAN_PREFERRED   = 2,
+    DISPLAY_4x3_LETTERBOX_PREFERRED = 3
+} DVD_PREFERRED_DISPLAY_MODE;
+
+typedef WORD DVD_REGISTER;
+typedef DVD_REGISTER GPRMARRAY[16];
+typedef DVD_REGISTER SPRMARRAY[24];
+
+typedef struct tagDVD_ATR
+{
+    ULONG ulCAT;
+    BYTE  pbATRI[768];
+} DVD_ATR;
+
+typedef BYTE DVD_VideoATR[2];
+typedef BYTE DVD_AudioATR[8];
+typedef BYTE DVD_SubpictureATR[6];
+
+typedef enum tagDVD_FRAMERATE
+{
+    DVD_FPS_25        = 1,
+    DVD_FPS_30NonDrop = 3
+} DVD_FRAMERATE;
+
+cpp_quote("typedef struct tagDVD_TIMECODE")
+cpp_quote("{")
+cpp_quote("   ULONG Hours1 : 4;")
+cpp_quote("   ULONG Hours10 : 4;")
+cpp_quote("   ULONG Minutes1 : 4;")
+cpp_quote("   ULONG Minutes10 : 4;")
+cpp_quote("   ULONG Seconds1 : 4;")
+cpp_quote("   ULONG Seconds10 : 4;")
+cpp_quote("   ULONG Frames1 : 4;")
+cpp_quote("   ULONG Frames10 : 2;")
+cpp_quote("   ULONG FrameRateCode : 2;")
+cpp_quote("} DVD_TIMECODE;")
+
+typedef enum tagDVD_NavCmdType
+{
+    DVD_NavCmdType_Pre    = 1,
+    DVD_NavCmdType_Post   = 2,
+    DVD_NavCmdType_Cell   = 3,
+    DVD_NavCmdType_Button = 4
+} DVD_NavCmdType;
+
+typedef enum tagDVD_TIMECODE_FLAGS
+{
+    DVD_TC_FLAG_25fps         = 0x00000001,
+    DVD_TC_FLAG_30fps         = 0x00000002,
+    DVD_TC_FLAG_DropFrame     = 0x00000004,
+    DVD_TC_FLAG_Interpolated  = 0x00000008
+} DVD_TIMECODE_FLAGS;
+
+typedef struct tagDVD_HMSF_TIMECODE
+{
+    BYTE bHours;
+    BYTE bMinutes;
+    BYTE bSeconds;
+    BYTE bFrames;
+} DVD_HMSF_TIMECODE;
+
+typedef struct tagDVD_PLAYBACK_LOCATION2
+{
+    ULONG TitleNum;
+    ULONG ChapterNum;
+    DVD_HMSF_TIMECODE TimeCode;
+    ULONG TimeCodeFlags;
+} DVD_PLAYBACK_LOCATION2;
+
+typedef struct tagDVD_PLAYBACK_LOCATION
+{
+    ULONG TitleNum;
+    ULONG ChapterNum;
+    ULONG TimeCode;
+} DVD_PLAYBACK_LOCATION;
+
+typedef DWORD VALID_UOP_SOMTHING_OR_OTHER;
+
+typedef enum
+{
+    UOP_FLAG_Play_Title_Or_AtTime         = 0x00000001,
+    UOP_FLAG_Play_Chapter                 = 0x00000002,
+    UOP_FLAG_Play_Title                   = 0x00000004,
+    UOP_FLAG_Stop                         = 0x00000008,
+    UOP_FLAG_ReturnFromSubMenu            = 0x00000010,
+    UOP_FLAG_Play_Chapter_Or_AtTime       = 0x00000020,
+    UOP_FLAG_PlayPrev_Or_Replay_Chapter   = 0x00000040,
+    UOP_FLAG_PlayNext_Chapter             = 0x00000080,
+    UOP_FLAG_Play_Forwards                = 0x00000100,
+    UOP_FLAG_Play_Backwards               = 0x00000200,
+    UOP_FLAG_ShowMenu_Title               = 0x00000400,
+    UOP_FLAG_ShowMenu_Root                = 0x00000800,
+    UOP_FLAG_ShowMenu_SubPic              = 0x00001000,
+    UOP_FLAG_ShowMenu_Audio               = 0x00002000,
+    UOP_FLAG_ShowMenu_Angle               = 0x00004000,
+    UOP_FLAG_ShowMenu_Chapter             = 0x00008000,
+    UOP_FLAG_Resume                       = 0x00010000,
+    UOP_FLAG_Select_Or_Activate_Button    = 0x00020000,
+    UOP_FLAG_Still_Off                    = 0x00040000,
+    UOP_FLAG_Pause_On                     = 0x00080000,
+    UOP_FLAG_Select_Audio_Stream          = 0x00100000,
+    UOP_FLAG_Select_SubPic_Stream         = 0x00200000,
+    UOP_FLAG_Select_Angle                 = 0x00400000,
+    UOP_FLAG_Select_Karaoke_Audio_Presentation_Mode = 0x00800000,
+    UOP_FLAG_Select_Video_Mode_Preference = 0x01000000
+} VALID_UOP_FLAG;
+
+typedef enum
+{
+    DVD_CMD_FLAG_None              = 0x00000000,
+    DVD_CMD_FLAG_Flush             = 0x00000001,
+    DVD_CMD_FLAG_SendEvents        = 0x00000002,
+    DVD_CMD_FLAG_Block             = 0x00000004,
+    DVD_CMD_FLAG_StartWhenRendered = 0x00000008,
+    DVD_CMD_FLAG_EndAfterRendered  = 0x00000010
+} DVD_CMD_FLAGS;
+
+typedef enum
+{
+    DVD_ResetOnStop                     = 1,
+    DVD_NotifyParentalLevelChange       = 2,
+    DVD_HMSF_TimeCodeEvents             = 3,
+    DVD_AudioDuringFFwdRew              = 4,
+    DVD_EnableNonblockingAPIs           = 5,
+    DVD_CacheSizeInMB                   = 6,
+    DVD_EnablePortableBookmarks         = 7,
+    DVD_EnableExtendedCopyProtectErrors = 8,
+    DVD_NotifyPositionChange            = 9,
+    DVD_IncreaseOutputControl           = 10,
+    DVD_EnableStreaming                 = 11,
+    DVD_EnableESOutput                  = 12,
+    DVD_EnableTitleLength               = 13,
+    DVD_DisableStillThrottle            = 14,
+    DVD_EnableLoggingEvents             = 15,
+    DVD_MaxReadBurstInKB                = 16,
+    DVD_ReadBurstPeriodInMS             = 17,
+    DVD_RestartDisc                     = 18,
+    DVD_EnableCC                        = 19
+} DVD_OPTION_FLAG;
+
+typedef enum
+{
+    DVD_Relative_Upper = 1,
+    DVD_Relative_Lower = 2,
+    DVD_Relative_Left  = 3,
+    DVD_Relative_Right = 4
+} DVD_RELATIVE_BUTTON;
+
+typedef enum tagDVD_PARENTAL_LEVEL
+{
+    DVD_PARENTAL_LEVEL_8 = 0x8000,
+    DVD_PARENTAL_LEVEL_7 = 0x4000,
+    DVD_PARENTAL_LEVEL_6 = 0x2000,
+    DVD_PARENTAL_LEVEL_5 = 0x1000,
+    DVD_PARENTAL_LEVEL_4 = 0x0800,
+    DVD_PARENTAL_LEVEL_3 = 0x0400,
+    DVD_PARENTAL_LEVEL_2 = 0x0200,
+    DVD_PARENTAL_LEVEL_1 = 0x0100
+} DVD_PARENTAL_LEVEL;
+
+typedef enum tagDVD_AUDIO_LANG_EXT
+{
+    DVD_AUD_EXT_NotSpecified      = 0,
+    DVD_AUD_EXT_Captions          = 1,
+    DVD_AUD_EXT_VisuallyImpaired  = 2,
+    DVD_AUD_EXT_DirectorComments1 = 3,
+    DVD_AUD_EXT_DirectorComments2 = 4
+} DVD_AUDIO_LANG_EXT;
+
+typedef enum tagDVD_SUBPICTURE_LANG_EXT
+{
+    DVD_SP_EXT_NotSpecified              = 0,
+    DVD_SP_EXT_Caption_Normal            = 1,
+    DVD_SP_EXT_Caption_Big               = 2,
+    DVD_SP_EXT_Caption_Children          = 3,
+    DVD_SP_EXT_CC_Normal                 = 5,
+    DVD_SP_EXT_CC_Big                    = 6,
+    DVD_SP_EXT_CC_Children               = 7,
+    DVD_SP_EXT_Forced                    = 9,
+    DVD_SP_EXT_DirectorComments_Normal   = 13,
+    DVD_SP_EXT_DirectorComments_Big      = 14,
+    DVD_SP_EXT_DirectorComments_Children = 15
+} DVD_SUBPICTURE_LANG_EXT;
+
+typedef enum tagDVD_AUDIO_APPMODE
+{
+    DVD_AudioMode_None     = 0,
+    DVD_AudioMode_Karaoke  = 1,
+    DVD_AudioMode_Surround = 2,
+    DVD_AudioMode_Other    = 3
+} DVD_AUDIO_APPMODE;
+
+typedef enum tagDVD_AUDIO_FORMAT
+{
+    DVD_AudioFormat_AC3       = 0,
+    DVD_AudioFormat_MPEG1     = 1,
+    DVD_AudioFormat_MPEG1_DRC = 2,
+    DVD_AudioFormat_MPEG2     = 3,
+    DVD_AudioFormat_MPEG2_DRC = 4,
+    DVD_AudioFormat_LPCM      = 5,
+    DVD_AudioFormat_DTS       = 6,
+    DVD_AudioFormat_SDDS      = 7,
+    DVD_AudioFormat_Other     = 8
+} DVD_AUDIO_FORMAT;
+
+typedef enum tagDVD_KARAOKE_DOWNMIX
+{
+    DVD_Mix_0to0 = 0x0001,
+    DVD_Mix_1to0 = 0x0002,
+    DVD_Mix_2to0 = 0x0004,
+    DVD_Mix_3to0 = 0x0008,
+    DVD_Mix_4to0 = 0x0010,
+    DVD_Mix_Lto0 = 0x0020,
+    DVD_Mix_Rto0 = 0x0040,
+    DVD_Mix_0to1 = 0x0100,
+    DVD_Mix_1to1 = 0x0200,
+    DVD_Mix_2to1 = 0x0400,
+    DVD_Mix_3to1 = 0x0800,
+    DVD_Mix_4to1 = 0x1000,
+    DVD_Mix_Lto1 = 0x2000,
+    DVD_Mix_Rto1 = 0x4000
+} DVD_KARAOKE_DOWNMIX;
+
+typedef enum tagDVD_KARAOKE_CONTENTS
+{
+    DVD_Karaoke_GuideVocal1  = 0x0001,
+    DVD_Karaoke_GuideVocal2  = 0x0002,
+    DVD_Karaoke_GuideMelody1 = 0x0004,
+    DVD_Karaoke_GuideMelody2 = 0x0008,
+    DVD_Karaoke_GuideMelodyA = 0x0010,
+    DVD_Karaoke_GuideMelodyB = 0x0020,
+    DVD_Karaoke_SoundEffectA = 0x0040,
+    DVD_Karaoke_SoundEffectB = 0x0080
+} DVD_KARAOKE_CONTENTS;
+
+typedef enum tagDVD_KARAOKE_ASSIGNMENT
+{
+    DVD_Assignment_reserved0   = 0,
+    DVD_Assignment_reserved1   = 1,
+    DVD_Assignment_LR          = 2,
+    DVD_Assignment_LRM         = 3,
+    DVD_Assignment_LR1         = 4,
+    DVD_Assignment_LRM1        = 5,
+    DVD_Assignment_LR12        = 6,
+    DVD_Assignment_LRM12       = 7
+} DVD_KARAOKE_ASSIGNMENT;
+
+typedef struct tagDVD_MUA_MixingInfo
+{
+    BOOL  fMixTo0;
+    BOOL  fMixTo1;
+    BOOL  fMix0InPhase;
+    BOOL  fMix1InPhase;
+    DWORD dwSpeakerPosition;
+} DVD_MUA_MixingInfo;
+
+typedef struct tagDVD_MUA_Coeff
+{
+    double log2_alpha;
+    double log2_beta;
+} DVD_MUA_Coeff;
+
+typedef enum tagDVD_VIDEO_COMPRESSION
+{
+    DVD_VideoCompression_Other  = 0,
+    DVD_VideoCompression_MPEG1  = 1,
+    DVD_VideoCompression_MPEG2  = 2
+} DVD_VIDEO_COMPRESSION;
+
+typedef enum tagDVD_SUBPICTURE_TYPE
+{
+    DVD_SPType_NotSpecified = 0,
+    DVD_SPType_Language     = 1,
+    DVD_SPType_Other        = 2
+} DVD_SUBPICTURE_TYPE;
+
+typedef enum tagDVD_SUBPICTURE_CODING
+{
+    DVD_SPCoding_RunLength = 0,
+    DVD_SPCoding_Extended  = 1,
+    DVD_SPCoding_Other     = 2
+} DVD_SUBPICTURE_CODING;
+
+typedef enum tagDVD_TITLE_APPMODE
+{
+    DVD_AppMode_Not_Specified = 0,
+    DVD_AppMode_Karaoke       = 1,
+    DVD_AppMode_Other         = 3
+} DVD_TITLE_APPMODE;
+
+enum DVD_TextStringType
+{
+    DVD_Struct_Volume      = 0x01,
+    DVD_Struct_Title       = 0x02,
+    DVD_Struct_ParentalID  = 0x03,
+    DVD_Struct_PartOfTitle = 0x04,
+    DVD_Struct_Cell        = 0x05,
+    DVD_Stream_Audio       = 0x10,
+    DVD_Stream_Subpicture  = 0x11,
+    DVD_Stream_Angle       = 0x12,
+    DVD_Channel_Audio      = 0x20,
+    DVD_General_Name       = 0x30,
+    DVD_General_Comments   = 0x31,
+    DVD_Title_Series       = 0x38,
+    DVD_Title_Movie        = 0x39,
+    DVD_Title_Video        = 0x3a,
+    DVD_Title_Album        = 0x3b,
+    DVD_Title_Song         = 0x3c,
+    DVD_Title_Other        = 0x3f,
+    DVD_Title_Sub_Series   = 0x40,
+    DVD_Title_Sub_Movie    = 0x41,
+    DVD_Title_Sub_Video    = 0x42,
+    DVD_Title_Sub_Album    = 0x43,
+    DVD_Title_Sub_Song     = 0x44,
+    DVD_Title_Sub_Other    = 0x47,
+    DVD_Title_Orig_Series  = 0x48,
+    DVD_Title_Orig_Movie   = 0x49,
+    DVD_Title_Orig_Video   = 0x4a,
+    DVD_Title_Orig_Album   = 0x4b,
+    DVD_Title_Orig_Song    = 0x4c,
+    DVD_Title_Orig_Other   = 0x4f,
+    DVD_Other_Scene        = 0x50,
+    DVD_Other_Cut          = 0x51,
+    DVD_Other_Take         = 0x52
+};
+
+enum DVD_TextCharSet
+{
+    DVD_CharSet_Unicode                       = 0,
+    DVD_CharSet_ISO646                        = 1,
+    DVD_CharSet_JIS_Roman_Kanji               = 2,
+    DVD_CharSet_ISO8859_1                     = 3,
+    DVD_CharSet_ShiftJIS_Kanji_Roman_Katakana = 4
+};
+
+typedef struct tagDVD_AudioAttributes
+{
+    DVD_AUDIO_APPMODE AppMode;
+    BYTE  AppModeData;
+    DVD_AUDIO_FORMAT AudioFormat;
+    LCID  Language;
+    DVD_AUDIO_LANG_EXT LanguageExtension;
+    BOOL  fHasMultichannelInfo;
+    DWORD dwFrequency;
+    BYTE  bQuantization;
+    BYTE  bNumberOfChannels;
+    DWORD dwReserved[2];
+} DVD_AudioAttributes;
+
+typedef struct tagDVD_MultichannelAudioAttributes
+{
+    DVD_MUA_MixingInfo Info[8];
+    DVD_MUA_Coeff Coeff[8];
+} DVD_MultichannelAudioAttributes;
+
+typedef struct tagDVD_VideoAttributes
+{
+    BOOL  fPanscanPermitted;
+    BOOL  fLetterboxPermitted;
+    ULONG ulAspectX;
+    ULONG ulAspectY;
+    ULONG ulFrameRate;
+    ULONG ulFrameHeight;
+    DVD_VIDEO_COMPRESSION Compression;
+    BOOL  fLine21Field1InGOP;
+    BOOL  fLine21Field2InGOP;
+    ULONG ulSourceResolutionX;
+    ULONG ulSourceResolutionY;
+    BOOL  fIsSourceLetterboxed;
+    BOOL  fIsFilmMode;
+} DVD_VideoAttributes;
+
+typedef struct tagDVD_SubpictureAttributes
+{
+    DVD_SUBPICTURE_TYPE Type;
+    DVD_SUBPICTURE_CODING CodingMode;
+    LCID Language;
+    DVD_SUBPICTURE_LANG_EXT LanguageExtension;
+} DVD_SubpictureAttributes;
+
+typedef struct tagDVD_KaraokeAttributes
+{
+    BYTE bVersion;
+    BOOL fMasterOfCeremoniesInGuideVocal1;
+    BOOL fDuet;
+    DVD_KARAOKE_ASSIGNMENT ChannelAssignment;
+    WORD wChannelContents[8];
+} DVD_KaraokeAttributes;
+
+typedef struct tagDVD_TitleMainAttributes
+{
+    union
+    {
+        DVD_TITLE_APPMODE AppMode;
+        DVD_HMSF_TIMECODE TitleLength;
+    } DUMMYUNIONNAME;
+    DVD_VideoAttributes VideoAttributes;
+    ULONG ulNumberOfAudioStreams;
+    DVD_AudioAttributes  AudioAttributes[8];
+    DVD_MultichannelAudioAttributes MultichannelAudioAttributes[8];
+    ULONG ulNumberOfSubpictureStreams;
+    DVD_SubpictureAttributes SubpictureAttributes[32];
+} DVD_TitleAttributes;
+
+typedef struct tagDVD_MenuAttributes
+{
+    BOOL fCompatibleRegion[8];
+    DVD_VideoAttributes VideoAttributes;
+    BOOL fAudioPresent;
+    DVD_AudioAttributes AudioAttributes;
+    BOOL fSubpicturePresent;
+    DVD_SubpictureAttributes SubpictureAttributes;
+} DVD_MenuAttributes;
+
+cpp_quote ("#define DVD_TITLE_MENU           0x000")
+cpp_quote ("#define DVD_STREAM_DATA_VMGM     0x400")
+cpp_quote ("#define DVD_STREAM_DATA_VTSM     0x401")
+cpp_quote ("#define DVD_STREAM_DATA_CURRENT  0x800")
+cpp_quote ("#define DVD_DEFAULT_AUDIO_STREAM 0x00f")
+
+cpp_quote ("#define DVD_AUDIO_CAPS_AC3   0x00000001")
+cpp_quote ("#define DVD_AUDIO_CAPS_MPEG2 0x00000002")
+cpp_quote ("#define DVD_AUDIO_CAPS_LPCM  0x00000004")
+cpp_quote ("#define DVD_AUDIO_CAPS_DTS   0x00000008")
+cpp_quote ("#define DVD_AUDIO_CAPS_SDDS  0x00000010")
+
+typedef struct tagDVD_DECODER_CAPS
+{
+    DWORD  dwSize;
+    DWORD  dwAudioCaps;
+    double dFwdMaxRateVideo;
+    double dFwdMaxRateAudio;
+    double dFwdMaxRateSP;
+    double dBwdMaxRateVideo;
+    double dBwdMaxRateAudio;
+    double dBwdMaxRateSP;
+    DWORD  dwRes1;
+    DWORD  dwRes2;
+    DWORD  dwRes3;
+    DWORD  dwRes4;
+} DVD_DECODER_CAPS;
+
+typedef enum _AM_DVD_GRAPH_FLAGS
+{
+    AM_DVD_HWDEC_PREFER = 0x0001,
+    AM_DVD_HWDEC_ONLY   = 0x0002,
+    AM_DVD_SWDEC_PREFER = 0x0004,
+    AM_DVD_SWDEC_ONLY   = 0x0008,
+    AM_DVD_NOVPE        = 0x0100,
+    AM_DVD_DO_NOT_CLEAR = 0x0200,
+    AM_DVD_VMR9_ONLY    = 0x0800,
+    AM_DVD_EVR_ONLY     = 0x1000,
+    AM_DVD_EVR_QOS      = 0x2000,
+    AM_DVD_ADAPT_GRAPH  = 0x4000,
+    AM_DVD_MASK         = 0xffff
+} AM_DVD_GRAPH_FLAGS;
+
+typedef enum _AM_DVD_STREAM_FLAGS
+{
+    AM_DVD_STREAM_VIDEO  = 0x01,
+    AM_DVD_STREAM_AUDIO  = 0x02,
+    AM_DVD_STREAM_SUBPIC = 0x04
+} AM_DVD_STREAM_FLAGS;
+
+typedef struct tagAM_DVD_RENDERSTATUS
+{
+    HRESULT hrVPEStatus;
+    BOOL  bDvdVolInvalid;
+    BOOL  bDvdVolUnknown;
+    BOOL  bNoLine21In;
+    BOOL  bNoLine21Out;
+    int   iNumStreams;
+    int   iNumStreamsFailed;
+    DWORD dwFailedStreamsFlag;
+} AM_DVD_RENDERSTATUS;
+
+[
+    local,
+    object,
+    uuid(a70efe61-e2a3-11d0-a9be-00aa0061be93),
+]
+interface IDvdControl : IUnknown
+{
+    HRESULT TitlePlay([in] ULONG title);
+    HRESULT ChapterPlay([in] ULONG title, [in] ULONG chapter);
+    HRESULT TimePlay([in] ULONG title, [in] ULONG time);
+    HRESULT StopForResume();
+    HRESULT GoUp();
+    HRESULT TimeSearch([in] ULONG time);
+    HRESULT ChapterSearch([in] ULONG chapter);
+    HRESULT PrevPGSearch();
+    HRESULT TopPGSearch();
+    HRESULT NextPGSearch();
+    HRESULT ForwardScan([in] double speed);
+    HRESULT BackwardScan([in] double speed);
+    HRESULT MenuCall([in] DVD_MENU_ID id);
+    HRESULT Resume();
+    HRESULT UpperButtonSelect();
+    HRESULT LowerButtonSelect();
+    HRESULT LeftButtonSelect();
+    HRESULT RightButtonSelect();
+    HRESULT ButtonActivate();
+    HRESULT ButtonSelectActivate([in] ULONG button);
+    HRESULT StillOff();
+    HRESULT PauseOn();
+    HRESULT PauseOff();
+    HRESULT MenuLanguageSelect([in] LCID language);
+    HRESULT AudioStreamChange([in] ULONG audio);
+    HRESULT SubpictureStreamChange([in] ULONG subpicture, [in] BOOL enable);
+    HRESULT AngleChange([in] ULONG angle);
+    HRESULT ParentalLevelSelect([in] ULONG level);
+    HRESULT ParentalCountrySelect([in] WORD country);
+    HRESULT KaraokeAudioPresentationModeChange([in] ULONG mode);
+    HRESULT VideoModePreference([in] ULONG mode);
+    HRESULT SetRoot([in] const WCHAR *path);
+    HRESULT MouseActivate([in] POINT point);
+    HRESULT MouseSelect([in] POINT point);
+    HRESULT ChapterPlayAutoStop([in] ULONG title, [in] ULONG chapter, [in] ULONG count);
+}
+
+[
+    local,
+    object,
+    uuid(a70efe60-e2a3-11d0-a9be-00aa0061be93),
+]
+interface IDvdInfo : IUnknown
+{
+    HRESULT GetCurrentDomain([out] DVD_DOMAIN *domain);
+    HRESULT GetCurrentLocation([out] DVD_PLAYBACK_LOCATION *location);
+    HRESULT GetTotalTitleTime([out] ULONG *time);
+    HRESULT GetCurrentButton([out] ULONG *count, [out] ULONG *current);
+    HRESULT GetCurrentAngle([out] ULONG *count, [out] ULONG *current);
+    HRESULT GetCurrentAudio([out] ULONG *count, [out] ULONG *current);
+    HRESULT GetCurrentSubpicture([out] ULONG *count, [out] ULONG *current, [out] BOOL *enable);
+    HRESULT GetCurrentUOPS([out] VALID_UOP_SOMTHING_OR_OTHER *uops);
+    HRESULT GetAllSPRMs([out] SPRMARRAY *regs);
+    HRESULT GetAllGPRMs([out] GPRMARRAY *regs);
+    HRESULT GetAudioLanguage([in] ULONG stream, [out] LCID *language);
+    HRESULT GetSubpictureLanguage([in] ULONG stream, [out] LCID *language);
+    HRESULT GetTitleAttributes([in] ULONG title, [out] DVD_ATR *attr);
+    HRESULT GetVMGAttributes([out] DVD_ATR *attr);
+    HRESULT GetCurrentVideoAttributes([out] DVD_VideoATR *attr);
+    HRESULT GetCurrentAudioAttributes([out] DVD_AudioATR *attr);
+    HRESULT GetCurrentSubpictureAttributes([out] DVD_SubpictureATR *attr);
+    HRESULT GetCurrentVolumeInfo([out] ULONG *volume_count, [out] ULONG *current, [out] DVD_DISC_SIDE *side, [out] ULONG *title_count);
+    HRESULT GetDVDTextInfo([out, size_is(size)] BYTE *text_manager, [in] ULONG size, [out] ULONG *ret_size);
+    HRESULT GetPlayerParentalLevel([out] ULONG *level, [out] ULONG *country_code);
+    HRESULT GetNumberOfChapters([in] ULONG title, [out] ULONG *count);
+    HRESULT GetTitleParentalLevels([in] ULONG title, [out] ULONG *levels);
+    HRESULT GetRoot([out, size_is(size)] char *path, [in] ULONG size, [out] ULONG *ret_size);
+}
+
+[
+    local,
+    object,
+    uuid(5a4a97e4-94ee-4a55-9751-74b5643aa27d),
+]
+interface IDvdCmd : IUnknown
+{
+    HRESULT WaitForStart();
+    HRESULT WaitForEnd();
+}
+
+[
+    local,
+    object,
+    uuid(86303d6d-1c4a-4087-ab42-f711167048ef),
+]
+interface IDvdState : IUnknown
+{
+    HRESULT GetDiscID([out] ULONGLONG *id);
+    HRESULT GetParentalLevel([out] ULONG *level);
+}
+
+[
+    local,
+    object,
+    uuid(33bc7430-eec0-11d2-8201-00a0c9d74842),
+]
+interface IDvdControl2 : IUnknown
+{
+    HRESULT PlayTitle([in] ULONG title, [in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT PlayChapterInTitle([in] ULONG title, [in] ULONG chapter, [in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT PlayTimeInTitle([in] ULONG title, [in] DVD_HMSF_TIMECODE *time, [in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT Stop();
+    HRESULT ReturnFromSubmenu([in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT PlayAtTime([in] DVD_HMSF_TIMECODE *time, [in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT PlayChapter([in] ULONG chapter, [in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT PlayPrevChapter([in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT ReplayChapter([in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT PlayNextChapter([in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT PlayForwards([in] double speed, [in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT PlayBackwards([in] double speed, [in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT ShowMenu([in] DVD_MENU_ID id, [in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT Resume([in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT SelectRelativeButton([in] DVD_RELATIVE_BUTTON button);
+    HRESULT ActivateButton();
+    HRESULT SelectButton([in] ULONG button);
+    HRESULT SelectAndActivateButton([in] ULONG button);
+    HRESULT StillOff();
+    HRESULT Pause([in] BOOL enable);
+    HRESULT SelectAudioStream([in] ULONG stream, [in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT SelectSubpictureStream([in] ULONG stream, [in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT SetSubpictureState([in] BOOL enable, [in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT SelectAngle([in] ULONG angle, [in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT SelectParentalLevel([in] ULONG level);
+    HRESULT SelectParentalCountry([in] BYTE country[2]);
+    HRESULT SelectKaraokeAudioPresentationMode([in] ULONG mode);
+    HRESULT SelectVideoModePreference([in] ULONG mode);
+    HRESULT SetDVDDirectory([in] const WCHAR *path);
+    HRESULT ActivateAtPosition([in] POINT point);
+    HRESULT SelectAtPosition([in] POINT point);
+    HRESULT PlayChaptersAutoStop([in] ULONG title, [in] ULONG chapter, [in] ULONG count, [in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT AcceptParentalLevelChange([in] BOOL accept);
+    HRESULT SetOption([in] DVD_OPTION_FLAG flag, [in] BOOL option);
+    HRESULT SetState([in] IDvdState *state, [in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT PlayPeriodInTitleAutoStop([in] ULONG title, [in] DVD_HMSF_TIMECODE *start_time, [in] DVD_HMSF_TIMECODE *end_time, [in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT SetGRPM([in] ULONG index, [in] WORD value, [in] DWORD flags, [out] IDvdCmd **cmd);
+    HRESULT SelectDefaultMenuLanguage([in] LCID language);
+    HRESULT SelectDefaultAudioLanguage([in] LCID language, [in] DVD_AUDIO_LANG_EXT extension);
+    HRESULT SelectDefaultSubpictureLanguage([in] LCID language, [in] DVD_SUBPICTURE_LANG_EXT extension);
+}
+
+[
+    local,
+    object,
+    uuid(34151510-eec0-11d2-8201-00a0c9d74842),
+]
+interface IDvdInfo2 : IUnknown
+{
+    HRESULT GetCurrentDomain([out] DVD_DOMAIN *domain);
+    HRESULT GetCurrentLocation([out] DVD_PLAYBACK_LOCATION2 *location);
+    HRESULT GetTotalTitleTime([out] DVD_HMSF_TIMECODE *time, [out] ULONG *flags);
+    HRESULT GetCurrentButton([out] ULONG *count, [out] ULONG *current);
+    HRESULT GetCurrentAngle([out] ULONG *count, [out] ULONG *current);
+    HRESULT GetCurrentAudio([out] ULONG *count, [out] ULONG *current);
+    HRESULT GetCurrentSubpicture([out] ULONG *count, [out] ULONG *current, [out] BOOL *enable);
+    HRESULT GetCurrentUOPS([out] ULONG *uops);
+    HRESULT GetAllSPRMs([out] SPRMARRAY *regs);
+    HRESULT GetAllGPRMs([out] GPRMARRAY *regs);
+    HRESULT GetAudioLanguage([in] ULONG stream, [out] LCID *language);
+    HRESULT GetSubpictureLanguage([in] ULONG stream, [out] LCID *language);
+    HRESULT GetTitleAttributes([in] ULONG index, [out] DVD_MenuAttributes *menu, [out] DVD_TitleAttributes *title);
+    HRESULT GetVMGAttributes([out] DVD_MenuAttributes *attr);
+    HRESULT GetVideoAttributes([out] DVD_VideoAttributes *attr);
+    HRESULT GetAudioAttributes([in] ULONG stream, [out] DVD_AudioAttributes *attr);
+    HRESULT GetKaraokeAttributes([in] ULONG stream, [out] DVD_KaraokeAttributes *attr);
+    HRESULT GetSubpictureAttributes([in] ULONG stream, [out] DVD_SubpictureAttributes *attr);
+    HRESULT GetCurrentVolumeInfo([out] ULONG *volume_count, [out] ULONG *current, [out] DVD_DISC_SIDE *side, [out] ULONG *title_count);
+    HRESULT GetDVDTextNumberOfLanguages([out] ULONG *count);
+    HRESULT GetDVDTextLanguageInfo([in] ULONG index, [out] ULONG *string_count, [out] LCID *language, [out] enum DVD_TextCharSet *character_set);
+    HRESULT GetDVDTextStringAsNative([in] ULONG lang_index, [in] ULONG string_index, [out] BYTE *string, [in] ULONG size, [out] ULONG *ret_size, [out] enum DVD_TextStringType *type);
+    HRESULT GetDVDTextStringAsUnicode([in] ULONG lang_index, [in] ULONG string_index, [out] WCHAR *string, [in] ULONG size, [out] ULONG *ret_size, [out] enum DVD_TextStringType *type);
+    HRESULT GetPlayerParentalLevel([out] ULONG *level, [out] BYTE country_code[2]);
+    HRESULT GetNumberOfChapters([in] ULONG title, [out] ULONG *count);
+    HRESULT GetTitleParentalLevels([in] ULONG title, [out] ULONG *levels);
+    HRESULT GetDVDDirectory([out, size_is(size)] WCHAR *path, [in] ULONG size, [out] ULONG *ret_size);
+    HRESULT IsAudioStreamEnabled([in] ULONG stream, [out] BOOL *enable);
+    HRESULT GetDiscID([in] const WCHAR *path, [out] ULONGLONG *id);
+    HRESULT GetState([out] IDvdState **state);
+    HRESULT GetMenuLanguages([out] LCID *languages, [in] ULONG count, [out] ULONG *ret_count);
+    HRESULT GetButtonAtPosition([in] POINT point, [out] ULONG *button);
+    HRESULT GetCmdFromEvent([in] LONG_PTR param, [out] IDvdCmd **cmd);
+    HRESULT GetDefaultMenuLanguage([out] LCID *language);
+    HRESULT GetDefaultAudioLanguage([out] LCID *language, [out] DVD_AUDIO_LANG_EXT *extension);
+    HRESULT SelectDefaultSubpictureLanguage([out] LCID *language, [out] DVD_SUBPICTURE_LANG_EXT *extension);
+    HRESULT GetDecoderCaps([out] DVD_DECODER_CAPS *caps);
+    HRESULT GetButtonRect([in] ULONG button, [out] RECT *rect);
+    HRESULT IsSubpictureStreamEnabled([in] ULONG stream, [out] BOOL *enable);
+}
+
+[
+    local,
+    object,
+    uuid(fcc152b6-f372-11d0-8e00-00c04fd7c08b),
+]
+interface IDvdGraphBuilder : IUnknown
+{
+    HRESULT GetFiltergraph([out] IGraphBuilder **graph);
+    HRESULT GetDvdInterface([in] REFIID iid, [out] void **out);
+    HRESULT RenderDvdVideoVolume([in] const WCHAR *path, [in] DWORD flags, [out] AM_DVD_RENDERSTATUS *status);
+}
diff --git a/mingw-w64-headers/wine-import.sh b/mingw-w64-headers/wine-import.sh
index 315f934..c9f2d10 100755
--- a/mingw-w64-headers/wine-import.sh
+++ b/mingw-w64-headers/wine-import.sh
@@ -142,6 +142,7 @@
 	devicetopology \
 	downloadmgr \
 	drmexternals \
+	dvdif \
 	dxgi \
 	dxgi1_2 \
 	dxgi1_3 \
