/*
 * 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);
}
