dvdif.idl
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:91k
- //------------------------------------------------------------------------------
- // File: DVDIf.idl
- //
- // Desc: DirectShow interfaces to control playback of a DVD filter graph.
- //
- // Copyright (c) 1992-2000, Microsoft Corporation. All rights reserved.
- //------------------------------------------------------------------------------
- // forward declarations - these are the interfaces declared in this file
- import "unknwn.idl";
- import "objidl.idl";
- cpp_quote("#include <ddraw.h>")
- interface IDvdControl;
- interface IDvdInfo;
- interface IDirectDraw;
- interface IDirectDrawSurface;
- interface IDvdGraphBuilder ;
- interface IDDrawExclModeVideo;
- interface IDDrawExclModeVideoCallback;
- interface IDvdCmd;
- interface IDvdState;
- //==========================================================================
- //==========================================================================
- //
- // typedefs used by IDvdControl and IDvdInfo interfaces.
- //
- //==========================================================================
- //==========================================================================
- typedef enum tagDVD_DOMAIN {
- // The DVD_DOMAIN is used to indicate the stat of a DVD player.
- DVD_DOMAIN_FirstPlay=1, // doing default initialization of a dvd disc
- DVD_DOMAIN_VideoManagerMenu, // displaying menus for whole disc
- DVD_DOMAIN_VideoTitleSetMenu, // displaying menus for current title set
- DVD_DOMAIN_Title, // displaying current title
- DVD_DOMAIN_Stop // player is in stopped state
- } DVD_DOMAIN;
- typedef enum tagDVD_MENU_ID {
- DVD_MENU_Title = 2, // to choose a title from any VTS in a DVD-Video volume
- DVD_MENU_Root = 3, // main menu for a specific VTS
- DVD_MENU_Subpicture =4, // to choose subpicture stream in a VTS
- DVD_MENU_Audio = 5, // to choose audio stream in a VTS
- DVD_MENU_Angle = 6, // to choose angle num in a VTS
- DVD_MENU_Chapter = 7 // to choose a chapter in a VTS
- // the Root menu always provides a means of getting to to Subpicture, Audio,
- // Angle and Chapter menus if they exist.
- } 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
- {
- // DVD_PREFERRED_DISPLAY_MODE is used to indicate the user's
- // preferred window aspect ratio and preferred method of converion of
- // 16*9 content to a 4*3 window aspect ratio. Pan-scan and letterboxing are
- // the two conversion methods. This enum is used to indicate only a preference of
- // conversion mechinism since some content can only be converted using one
- // of these methods. 4*3 content is converted to a 16*9 window always by using
- // "reverse" letterboxing where black bars are added to the right and left
- // sides of the display instead of the top and bottom of the display as in the 16*9
- // to 4*3 conversion useing letterboxing.
- DISPLAY_CONTENT_DEFAULT = 0, // default to content
- DISPLAY_16x9 = 1, // 16x9 display
- DISPLAY_4x3_PANSCAN_PREFERRED = 2, // 4x3 display with pan-scan preferrence
- DISPLAY_4x3_LETTERBOX_PREFERRED = 3 // 4x3 display with letterbox preferrence
- } DVD_PREFERRED_DISPLAY_MODE;
- typedef WORD DVD_REGISTER;
- typedef DVD_REGISTER GPRMARRAY[16]; // DVD-Video 1.0 has 16 16-bit General Parameter Registers
- typedef DVD_REGISTER SPRMARRAY[24]; // DVD-Video 1.0 has 24 16-bit System Parameter Registers
- // these are only for IDVDInfo1 compatibility and require the DVD-Video 1.0 specification
- // Please use the IDVDInfo2's DVD_Title/MenuAttributes, DVD_VideoAttributes, DVD_AudioAttributes, and DVD_SubpictureAttributes
- typedef struct tagDVD_ATR
- {
- //
- // Refer to the DVD-Video 1.0 spec to parse these structures.
- //
- ULONG ulCAT; // VMG_CAT if this is for a volume; or VTS_CAT
- // if this is for a Video Title Set (VTS)
- BYTE pbATRI[768];// All stream attributes for menu and title from bytes
- // 256 to 1023 of VMGI or VTSI.
- } DVD_ATR;
- typedef BYTE DVD_VideoATR[2]; // video stream attributes.
- typedef BYTE DVD_AudioATR[8]; // audio stream attributes.
- typedef BYTE DVD_SubpictureATR[6]; // subpicture stream attributes.
- // DVD1.0 Timecode is BCD encoded in this format: 0xHhMmSsFf, where
- // H is tens of hours
- // h is hours
- // M is tens of minutes
- // m is minutes
- // S is tens of seconds
- // s is seconds
- // F is tens of frames
- // f is frames
- // Note that you must know the frame rate to interperate the frame count as time.
- typedef enum tagDVD_FRAMERATE
- {
- DVD_FPS_25 =1, // 25 frames per second
- DVD_FPS_30NonDrop = 3 // exactly 30 frames per second
- } DVD_FRAMERATE;
- cpp_quote("typedef struct tagDVD_TIMECODE")
- cpp_quote("{")
- cpp_quote(" ULONG Hours1 :4; // Hours")
- cpp_quote(" ULONG Hours10 :4; // Tens of Hours ")
- cpp_quote("")
- cpp_quote(" ULONG Minutes1 :4; // Minutes ")
- cpp_quote(" ULONG Minutes10:4; // Tens of Minutes ")
- cpp_quote("")
- cpp_quote(" ULONG Seconds1 :4; // Seconds ")
- cpp_quote(" ULONG Seconds10:4; // Tens of Seconds ")
- cpp_quote("")
- cpp_quote(" ULONG Frames1 :4; // Frames ")
- cpp_quote(" ULONG Frames10 :2; // Tens of Frames ")
- cpp_quote("")
- cpp_quote(" ULONG FrameRateCode: 2; // use DVD_FRAMERATE to indicate frames/sec and drop/non-drop")
- cpp_quote("} DVD_TIMECODE;")
- //
- // Newer IDVD2 methods can use the HMSF format instead
- // Call SetOption( DVD_HMSF_TimeCodeEvents, TRUE) to return EC_DVD_CURRENT_HMSF_TIME
- // instead of EC_DVD_CURRENT_TIME events
- //
- typedef enum tagDVD_TIMECODE_FLAGS
- {
- DVD_TC_FLAG_25fps = 0x00000001, // 25 frames per second
- DVD_TC_FLAG_30fps = 0x00000002, // 30 frames per second
- DVD_TC_FLAG_DropFrame = 0x00000004, // 29.97 instead of 30 fps
- DVD_TC_FLAG_Interpolated = 0x00000008, // timecode may be inaccurate
- // remainder of bits are reserved and should not be read
- } DVD_TIMECODE_FLAGS;
- // this can be cast to/from a ULONG
- typedef struct tagDVD_HMSF_TIMECODE
- {
- BYTE bHours;
- BYTE bMinutes;
- BYTE bSeconds;
- BYTE bFrames;
- } DVD_HMSF_TIMECODE;
- typedef struct tagDVD_PLAYBACK_LOCATION2
- {
- //
- // TitleNum & ChapterNum or TitleNum & TimeCode are sufficient to save
- // playback location for One_Sequential_PGC_Titles.
- //
- ULONG TitleNum; // title number for whole disc (TTN not VTS_TTN)
- ULONG ChapterNum; // part-of-title number with title. 0xffffffff if not Once_Sequential_PGC_Title
- DVD_HMSF_TIMECODE TimeCode; // use DVD_TIMECODE for current playback time.
- ULONG TimeCodeFlags; // union of DVD_TIMECODE_EVENT_FLAGS
- } DVD_PLAYBACK_LOCATION2;
- typedef struct tagDVD_PLAYBACK_LOCATION
- {
- //
- // TitleNum & ChapterNum or TitleNum & TimeCode are sufficient to save
- // playback location for One_Sequential_PGC_Titles.
- //
- ULONG TitleNum; // title number for whole disc (TTN not VTS_TTN)
- ULONG ChapterNum; // part-of-title number with title. 0xffffffff if not Once_Sequential_PGC_Title
- ULONG TimeCode; // use DVD_TIMECODE for current playback time. 0xffffffff if not Once_Sequential_PGC_Title
- } DVD_PLAYBACK_LOCATION;
- typedef DWORD VALID_UOP_SOMTHING_OR_OTHER;
- typedef enum {
- //
- // Annex J User Functions ---
- //
- UOP_FLAG_Play_Title_Or_AtTime = 0x00000001, // Title_Or_Time_Play
- UOP_FLAG_Play_Chapter = 0x00000002, // Chapter_Search_Or_Play
- UOP_FLAG_Play_Title = 0x00000004, // Title_Play
- UOP_FLAG_Stop = 0x00000008, // Stop
- UOP_FLAG_ReturnFromSubMenu = 0x00000010, // GoUp
- UOP_FLAG_Play_Chapter_Or_AtTime = 0x00000020, // Time_Or_Chapter_Search
- UOP_FLAG_PlayPrev_Or_Replay_Chapter = 0x00000040, // Prev_Or_Top_PG_Search
- UOP_FLAG_PlayNext_Chapter = 0x00000080, // Next_PG_Search
- UOP_FLAG_Play_Forwards = 0x00000100, // Forward_Scan
- UOP_FLAG_Play_Backwards = 0x00000200, // Backward_Scan
- UOP_FLAG_ShowMenu_Title = 0x00000400, // Title_Menu_Call
- UOP_FLAG_ShowMenu_Root = 0x00000800, // Root_Menu_Call
- UOP_FLAG_ShowMenu_SubPic = 0x00001000, // SubPic_Menu_Call
- UOP_FLAG_ShowMenu_Audio = 0x00002000, // Audio_Menu_Call
- UOP_FLAG_ShowMenu_Angle = 0x00004000, // Angle_Menu_Call
- UOP_FLAG_ShowMenu_Chapter = 0x00008000, // Chapter_Menu_Call
- UOP_FLAG_Resume = 0x00010000, // Resume
- UOP_FLAG_Select_Or_Activate_Button = 0x00020000, // Button_Select_Or_Activate
- UOP_FLAG_Still_Off = 0x00040000, // Still_Off
- UOP_FLAG_Pause_On = 0x00080000, // Pause_On
- UOP_FLAG_Select_Audio_Stream = 0x00100000, // Audio_Stream_Change
- UOP_FLAG_Select_SubPic_Stream = 0x00200000, // SubPic_Stream_Change
- UOP_FLAG_Select_Angle = 0x00400000, // Angle_Change
- UOP_FLAG_Select_Karaoke_Audio_Presentation_Mode = 0x00800000, // Karaoke_Audio_Pres_Mode_Change
- UOP_FLAG_Select_Video_Mode_Preference = 0x01000000 // Video_Pres_Mode_Change
- } 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, // block end
- DVD_CMD_FLAG_StartWhenRendered = 0x00000008, // command "start" when the first frame is rendered
- DVD_CMD_FLAG_EndAfterRendered = 0x00000010, // command "ends" after the last frame is rendered
- } DVD_CMD_FLAGS;
- // For IDVDControl2::SetOption flags
- typedef enum {
- DVD_ResetOnStop = 1, // default TRUE
- DVD_NotifyParentalLevelChange = 2, // default FALSE
- DVD_HMSF_TimeCodeEvents = 3, // default FALSE (send DVD_CURRENT_TIME events)
- } DVD_OPTION_FLAG;
- typedef enum {
- DVD_Relative_Upper = 1,
- DVD_Relative_Lower = 2,
- DVD_Relative_Left = 3,
- DVD_Relative_Right = 4
- } DVD_RELATIVE_BUTTON;
- // Parental Level Information
- 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, // no special mode
- 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, // MPEG1 with dynamic range control
- DVD_AudioFormat_MPEG2 = 3,
- DVD_AudioFormat_MPEG2_DRC = 4, // MPEG2 with dynamic range control
- DVD_AudioFormat_LPCM = 5,
- DVD_AudioFormat_DTS = 6,
- DVD_AudioFormat_SDDS = 7,
- DVD_AudioFormat_Other = 8
- } DVD_AUDIO_FORMAT;
- // flags for SelectKaraokeAudioPresentationMode
- typedef enum tagDVD_KARAOKE_DOWNMIX
- {
- DVD_Mix_0to0 = 0x0001, // unused - reserved for future use
- DVD_Mix_1to0 = 0x0002, // unused - reserved for future use
- DVD_Mix_2to0 = 0x0004,
- DVD_Mix_3to0 = 0x0008,
- DVD_Mix_4to0 = 0x0010,
- DVD_Mix_Lto0 = 0x0020, // mix auxillary L to channel 0 (left speaker)
- DVD_Mix_Rto0 = 0x0040, // mix auxillary R to channel 0 (left speaker)
- DVD_Mix_0to1 = 0x0100, // unused - reserved for future use
- DVD_Mix_1to1 = 0x0200, // unused - reserved for future use
- DVD_Mix_2to1 = 0x0400,
- DVD_Mix_3to1 = 0x0800,
- DVD_Mix_4to1 = 0x1000,
- DVD_Mix_Lto1 = 0x2000, // mix auxillary L to channel 1 (right speaker)
- DVD_Mix_Rto1 = 0x4000, // mix auxillary R to channel 1 (right speaker)
- } DVD_KARAOKE_DOWNMIX;
- typedef struct tagDVD_AudioAttributes
- {
- DVD_AUDIO_APPMODE AppMode;
- BYTE AppModeData;
- DVD_AUDIO_FORMAT AudioFormat; // Use GetKaraokeAttributes()
- LCID Language; // 0 if no language is present
- DVD_AUDIO_LANG_EXT LanguageExtension; // (captions, if for children etc)
- BOOL fHasMultichannelInfo; // multichannel attributes are present (Use GetMultiChannelAudioAttributes())
- DWORD dwFrequency; // in hertz (48k, 96k)
- BYTE bQuantization; // resolution (16, 20, 24 bits etc), 0 is unknown
- BYTE bNumberOfChannels; // 5.1 AC3 has 6 channels
- DWORD dwReserved[2];
- } DVD_AudioAttributes;
- typedef struct tagDVD_MUA_MixingInfo
- {
- // surround sound mixing information applied when:
- // AppMode = DVD_AudioMode_Surround
- // AudioFormat = DVD_AudioFormat_LPCM,
- // fHasMultichannelInfo=1 modes are all on
- //
- BOOL fMixTo0;
- BOOL fMixTo1;
- //
- BOOL fMix0InPhase;
- BOOL fMix1InPhase;
- DWORD dwSpeakerPosition; // see ksmedia.h: SPEAKER_FRONT_LEFT, SPEAKER_FRONT_RIGHT, etc
- } DVD_MUA_MixingInfo;
- // The alpha coeff is used to mix to ACH0 and beta is used to mix to ACH1
- //
- // In general:
- // ACH0 = coeff[0].alpha * value[0] + coeff[1].alpha * value[1] + ...
- // ACH1 = coeff[0].beta * value[0] + coeff[1].beta * value[1] + ...
- typedef struct tagDVD_MUA_Coeff
- {
- double log2_alpha; // actual coeff = 2^alpha
- double log2_beta; // actual coeff = 2^beta
- } DVD_MUA_Coeff;
- typedef struct tagDVD_MultichannelAudioAttributes
- {
- // actual Data for each data stream
- DVD_MUA_MixingInfo Info[8];
- DVD_MUA_Coeff Coeff[8];
- } DVD_MultichannelAudioAttributes;
- // bitwise OR of these flags descript the contents of each channel
- 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, // left right
- DVD_Assignment_LRM = 3, // left right middle
- DVD_Assignment_LR1 = 4, // left right audio1
- DVD_Assignment_LRM1 = 5, // left right middle audio1
- DVD_Assignment_LR12 = 6, // left right audio1 audio2
- DVD_Assignment_LRM12 = 7 // left right middle audio1 audio2
- } DVD_KARAOKE_ASSIGNMENT;
- typedef struct tagDVD_KaraokeAttributes
- {
- BYTE bVersion;
- BOOL fMasterOfCeremoniesInGuideVocal1;
- BOOL fDuet; // false = solo
- DVD_KARAOKE_ASSIGNMENT ChannelAssignment;
- WORD wChannelContents[8]; // logical OR of DVD_KARAOKE_CONTENTS
- } DVD_KaraokeAttributes;
- typedef enum tagDVD_VIDEO_COMPRESSION
- {
- DVD_VideoCompression_Other = 0,
- DVD_VideoCompression_MPEG1 = 1,
- DVD_VideoCompression_MPEG2 = 2,
- } DVD_VIDEO_COMPRESSION;
- typedef struct tagDVD_VideoAttributes
- {
- BOOL fPanscanPermitted; // if a 4x3 display, can be shown as PanScan
- BOOL fLetterboxPermitted; // if a 4x3 display, can be shown as Letterbox
- ULONG ulAspectX; // 4x3 or 16x9
- ULONG ulAspectY;
- ULONG ulFrameRate; // 50hz or 60hz
- ULONG ulFrameHeight; // 525 (60hz) or 625 (50hz)
- DVD_VIDEO_COMPRESSION Compression;// MPEG1 or MPEG2
- BOOL fLine21Field1InGOP; // true if there is user data in field 1 of GOP of video stream
- BOOL fLine21Field2InGOP; // true if there is user data in field 1 of GOP of video stream
- ULONG ulSourceResolutionX; // X source resolution (352,704, or 720)
- ULONG ulSourceResolutionY; // Y source resolution (240,480, 288 or 576)
- BOOL fIsSourceLetterboxed; // subpictures and highlights (e.g. subtitles or menu buttons) are only
- // displayed in the active video area and cannot be displayed in the top/bottom 'black' bars
- BOOL fIsFilmMode; // for 625/50hz systems, is film mode (true) or camera mode (false)
- } DVD_VideoAttributes;
- 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 struct tagDVD_SubpictureAttributes
- {
- DVD_SUBPICTURE_TYPE Type;
- DVD_SUBPICTURE_CODING CodingMode;
- LCID Language;
- DVD_SUBPICTURE_LANG_EXT LanguageExtension;
- } DVD_SubpictureAttributes;
- typedef enum tagDVD_TITLE_APPMODE
- {
- DVD_AppMode_Not_Specified = 0, // no special mode
- DVD_AppMode_Karaoke = 1,
- DVD_AppMode_Other = 3,
- } DVD_TITLE_APPMODE;
- typedef struct tagDVD_TitleMainAttributes
- {
- // for Titles
- DVD_TITLE_APPMODE AppMode;
- // Attributes about the 'main' video of the menu or title
- DVD_VideoAttributes VideoAttributes;
- ULONG ulNumberOfAudioStreams;
- DVD_AudioAttributes AudioAttributes[8];
- // present if the multichannel bit is set in the corresponding stream's audio attributes
- DVD_MultichannelAudioAttributes MultichannelAudioAttributes[8];
- ULONG ulNumberOfSubpictureStreams;
- DVD_SubpictureAttributes SubpictureAttributes[32];
- } DVD_TitleAttributes;
- typedef struct tagDVD_MenuAttributes
- {
- // for VMG only
- BOOL fCompatibleRegion[8]; // indeces 0..7 correspond to regions 1..8
- // Attributes about the main menu (VMGM or VTSM)
- DVD_VideoAttributes VideoAttributes;
- BOOL fAudioPresent;
- DVD_AudioAttributes AudioAttributes;
- BOOL fSubpicturePresent;
- DVD_SubpictureAttributes SubpictureAttributes;
- } DVD_MenuAttributes;
- //==========================================================================
- //==========================================================================
- // IDvdControl interface -- Basic DVD-Video playback control.
- // This modeled after the app control of a player specified in Annex J
- // of the DVD Video spec. IDvdInfo can be used to get information useful
- // in using IDvdControl
- //==========================================================================
- //==========================================================================
- [
- object,
- uuid(A70EFE61-E2A3-11d0-A9BE-00AA0061BE93),
- pointer_default(unique)
- ]
- interface IDvdControl : IUnknown {
- import "unknwn.idl";
-
- // TitlePlay
- // Start playing the specified title number.
- // Title numbers range between 1 and 99.
- HRESULT TitlePlay
- ( [in] ULONG ulTitle
- );
- // ChapterPlay
- // Start playing at the specified chapter (or part-of-title)
- // within the specified title. Chapters range from 1 to 999.
- HRESULT ChapterPlay
- ( [in] ULONG ulTitle,
- [in] ULONG ulChapter
- );
- // TimePlay
- // Start playing at the specified time within the specified title.
- // NOTE: the actual start time will be the closest sync point before
- // or equal to the specified frame number.
- HRESULT TimePlay
- ( [in] ULONG ulTitle,
- [in] ULONG bcdTime // use DVD_TIMECODE. Framerate code is ignored.
- );
- // StopForResume
- // Stop playback after saving resume information. DVD Navigator transfers to the DVD "Stop State" and
- // (same as DVD_DOMAIN_Stop), but filter graph remains in DirectShow's Run state.
- HRESULT StopForResume();
- // GoUp
- // Start playback of the program chain currently authored as the "GoUp_PGCN".
- HRESULT GoUp();
- // TimeSearch
- // Start playing at the specified time within the current title.
- // NOTE: the actual start time will be the closest sync point before
- // or equal to the specified frame number.
- HRESULT TimeSearch
- ( [in] ULONG bcdTime // use DVD_TIMECODE. Framerate code is ignored.
- );
- // ChapterSearch
- // Start playing at the specified chapter (or part-of-title) within
- // the current title.
- HRESULT ChapterSearch
- ( [in] ULONG ulChapter
- );
- // PrevPGSearch
- // Start playing at the beginning of the previous DVD "program".
- // For One-Sequential_PGC_Titles (which includes most titles) a program
- // is equivalent to a chapter, otherwise a program is part of a chapter.
- HRESULT PrevPGSearch();
- // TopPGSearch
- // Start playing from the beginning of they current program.
- HRESULT TopPGSearch();
- // NextPGSearch
- // Start playing from the beginning of the next program.
- HRESULT NextPGSearch();
- // ForwardScan
- // Set forward play at the specified speed.
- // dwSpeed == 1 is normal play
- // dwSpeed < 1 is slow play
- // dwSpeed > 1 is fast play
- // For dwSpeed != 1, audio and subpicture is muted.
- HRESULT ForwardScan
- ( [in] double dwSpeed
- );
- // BackwardScan
- // Set reverse play at the specified speed.
- // dwSpeed == 1 is normal play speed in reverse
- // dwSpeed < 1 is slow play in reverse
- // dwSpeed > 1 is fast play in reverse
- // For reverse play, audio and subpicture are always muted.
- HRESULT BackwardScan
- ( [in] double dwSpeed
- );
- // MenuCall
- // Start playback of the Menu specified by an enum DVD_MENU_ID.
- HRESULT MenuCall
- ( [in] DVD_MENU_ID MenuID
- );
- // Resume
- // Returns to title playback in DVD_DOMAIN_Title. This is typically
- // done after MenuCall which puts the DVD Navigator in
- // DVD_DOMAIN_VideoTitleSetMenu or DVD_DOMAIN_VideoManagerMenu.
- HRESULT Resume();
- // UpperButtonSelect
- // Selects the button above the current button.
- // "Selecting" a DVD button simply highlights the button but does
- // not "Activate" the button. Selecting is the Windows equivalent
- // to tabbing to a button but not pressing the space bar or enter key.
- // Activating is the Windows equivalent of pressing the space bar or
- // enter key after tabbing to a button.
- HRESULT UpperButtonSelect();
- // LowerButtonSelect
- // Selects the button below the current button.
- HRESULT LowerButtonSelect();
- // LeftButtonSelect
- // Selects the button to the left of the current button.
- HRESULT LeftButtonSelect();
- // RightButtonSelect
- // Selects the button to the right of the current button.
- HRESULT RightButtonSelect();
- // ButtonActivate
- // Activates current button.
- HRESULT ButtonActivate();
- // ButtonSelectAndActivate
- // Selects and then activates the button specified by the user.
- // ulButton is intended to be a number entered by a user corresponding
- // to button numbers currently displayed on screen.
- // Button numbers range from 1 to 36.
- HRESULT ButtonSelectAndActivate
- ( [in] ULONG ulButton
- );
- // StillOff
- // Releases any current still if there are no available buttons.
- // This includes VOBU stills, Cell stills, and PGC stills, whether the
- // still is infinite. When buttons are available, stills are released by
- // activating a button. Note this does not release a Pause.
- HRESULT StillOff();
- // PauseOn
- // Freezes playback and any internal timers. This is similar to
- // IMediaControl::Pause()
- HRESULT PauseOn();
- // PauseOff
- // Releases a Pause.
- HRESULT PauseOff();
- // MenuLanguageSelect
- // Selects the default language for menus. Languages are specified with
- // Windows standard LCIDs. LCIDs can be created from ISO-639 codes with
- // MAKELCID( MAKELANGID(wISO639LangID ,SUBLANG_DEFAULT ), SORT_DEFAULT )
- // NOTE: MAKELANGID seems to have a bug so 'jp' may have to be used
- // instead of 'ja' for the ISO639 code for Japanese.
- // MenuLanguageSelect may only called from the DVD Stop state (DVD_DOMAIN_Stop).
- HRESULT MenuLanguageSelect
- ( [in] LCID Language
- );
- // AudioStreamChange
- // Changes the current audio stream.
- HRESULT AudioStreamChange
- ( [in] ULONG ulAudio
- );
- // SubpictureStreamChange
- // Changes the current subpicture stream number to nSubpic, and toggles
- // its display.
- HRESULT SubpictureStreamChange
- ( [in] ULONG ulSubPicture,
- [in] BOOL bDisplay
- );
- // AngleChange
- // Changes the current angle number.
- HRESULT AngleChange
- ( [in] ULONG ulAngle
- );
- // ParentalLevelSelect
- // Selects the current player parental level between 1 and 8. The
- // defined parental levels are listed below :
- //
- // Level Rating
- // ----- ------
- //
- // 1 G
- // 3 PG
- // 4 PG13
- // 6 R
- // 7 NC17
- // Higher levels can play lower level content; lower levels cannot play
- // higher level content. The DVD Navigator provides no restriction on
- // setting the parental level. DVD player application may enforce
- // restriction on parental level setting, such as password protection for
- // raising the current parental level. Parental Management is disabled in
- // the Navigator by default.
- //
- // Note : To disable parental management, pass 0xffffffff for ulParentalLevel
- // If parental management is disabled, then the player will play the
- // first PGC in a parental block regardless of parental IDs.
- //
- HRESULT ParentalLevelSelect
- ( [in] ULONG ulParentalLevel
- );
- // ParentalCountrySelect
- // Sets the country in which to interpret the the Parental Level.
- // The country specified using the Alpha-2 code of the ISO-3166 standard,
- // with the addition of 'ZZ'
- HRESULT ParentalCountrySelect
- ( [in] WORD wCountry
- );
- // KaraokeAudioPresentationModeChange
- // Sets the Karaoke audio mode.
- // NOTE: This and all other Karoke support is currently not implemented.
- HRESULT KaraokeAudioPresentationModeChange
- ( [in] ULONG ulMode
- );
- // VideoModePreferrence
- // The user can specify the preferred display mode that should
- // be used to display content. The parameter is a ULONG that has
- // one of the values defined in DVD_PREFERRED_DISPLAY_MODE
- HRESULT VideoModePreferrence
- ( [in] ULONG ulPreferredDisplayMode
- );
-
- // SetRoot
- // Sets the root directory containing the DVD-Video volume.
- // Can only be called from the DVD Stop State (DVD_DOMAIN_Stop).
- // If the root directory is not successfully set before
- // IMediaControl::Play is called, the first drive starting from c:
- // containing a VIDEO_TS directory in the top level directory
- // will be used as the root.
- HRESULT SetRoot
- ( [in] LPCWSTR pszPath
- );
- // MouseActivate
- // This is typically called in response to a mouse click.
- // The specified point within the display window is to see if it is
- // within a current DVD button's highlight rect. If it is, that
- // button is first selected, then activated.
- // NOTE: DVD Buttons do not all necessarily have highlight rects,
- // button rects can overlap, and button rects do not always
- // correspond to the visual representation of DVD buttons.
- HRESULT MouseActivate // typically called after a mouse click
- ( [in] POINT point
- );
- // MouseSelect
- // This is typically called in response to a mouse move within the
- // display window.
- // The specified point within the display window is to see if it is
- // within a current DVD button's highlight rect. If it is, that
- // button is selected.
- // NOTE: DVD Buttons do not all necessarily have highlight rects,
- // button rects can overlap, and button rects do not always
- // correspond to the visual representation of DVD buttons.
- HRESULT MouseSelect // typically called after a mouse move
- ( [in] POINT point
- );
-
- // ChapterPlayAutoStop
- // Start playing at the specified chapter within the specified title
- // and play the number of chapters specified by the third parameter.
- // Chapters range from 1 to 999.
- HRESULT ChapterPlayAutoStop
- ( [in] ULONG ulTitle, // title number
- [in] ULONG ulChapter, // chapter number to start playback
- [in] ULONG ulChaptersToPlay // number of chapters to play from the start chapter
- );
- }
- //==========================================================================
- //==========================================================================
- // IDvdInfo interface -- allow an app to query for attributes of available
- // DVD titles and DVD player status. Also allow for control of a DVD
- // player beyond Annex J in the DVD spec.
- //==========================================================================
- //==========================================================================
- [
- object,
- uuid(A70EFE60-E2A3-11d0-A9BE-00AA0061BE93),
- pointer_default(unique)
- ]
- interface IDvdInfo : IUnknown {
- import "unknwn.idl";
- // GetCurrentDomain
- // Returns the current DVD Domain of the DVD player.
- HRESULT GetCurrentDomain
- ( [out] DVD_DOMAIN *pDomain
- );
- // GetCurrentLocation
- // Returns information sufficient to restart playback of a video
- // from the current playback location in titles that don't explicitly
- // disable seeking to the current location.
- HRESULT GetCurrentLocation
- ( [out] DVD_PLAYBACK_LOCATION *pLocation
- );
- // GetTotalTitleTime
- // Return the total playback time for the current title. Only works
- // for One_Sequential_PGC_Titles.
- HRESULT GetTotalTitleTime
- ( [out] ULONG * pulTotalTime // use DVD_TIMECODE.
- );
- // GetCurrentButton
- // Indicates the number of currently available buttons and the current
- // selected button number. If buttons are not present it returns 0 for
- // both pulButtonsAvailable and pulCurrentButton
- HRESULT GetCurrentButton
- ( [out] ULONG * pulButtonsAvailable,
- [out] ULONG * pulCurrentButton
- );
- // GetCurrentAngle
- // Indicates the number of currently available angles and the current
- // selected angle number. If *pnAnglesAvailable==1, then the current
- // video is not multiangle.
- HRESULT GetCurrentAngle
- ( [out] ULONG * pulAnglesAvailable,
- [out] ULONG * pulCurrentAngle
- );
- // GetCurrentAudio
- // Indicates the number of currently available audio streams and
- // the current selected audio stream number.
- // This only work when in DVD_DOMAIN_Title.
- HRESULT GetCurrentAudio
- ( [out] ULONG * pulStreamsAvailable,
- [out] ULONG * pulCurrentStream
- );
- // GetCurrentSubpicture
- // Indicates the number of currently available subpicture streams,
- // the current selected subpicture stream number, and if the
- // subpicture display is currently disabled. Subpicture streams
- // authored as Forcedly Activated stream will be displayed even if
- // subpicture display has been disabled by the app with
- // IDVDControl::SubpictureChangeStream.
- // This only work when in DVD_DOMAIN_Title.
- HRESULT GetCurrentSubpicture
- ( [out] ULONG * pulStreamsAvailable,
- [out] ULONG * pulCurrentStream,
- [out] BOOL * pIsDisabled
- );
- // GetCurrentUOPS
- // Indicates which IDVDControl methods are currently valid. DVD titles
- // can enable or disable individual user operations at almost any point
- // during playback.
- HRESULT GetCurrentUOPS
- ( [out] VALID_UOP_SOMTHING_OR_OTHER * pUOP
- );
- // GetAllSPRMs
- // Returns the current contents of all System Parameter Registers.
- // See DVD-Video spec for use of individual registers.
- HRESULT GetAllSPRMs
- ( [out] SPRMARRAY * pRegisterArray
- );
- // GetAllGPRMs
- // Returns the current contents of all General Parameter Registers.
- // Use of GPRMs is title specific.
- HRESULT GetAllGPRMs
- ( [out] GPRMARRAY * pRegisterArray
- );
- // GetAudioLanguage
- // Returns the language of the specified stream within the current
- // title. Does not return languages for menus. Sets *pLanguage=0 if
- // if the stream does not include language.
- // Use GetLocaleInfo(*pLanguage, LOCALE_SENGLANGUAGE, pszString, cbSize)
- // to create a human readable string name from the result LCID.
- HRESULT GetAudioLanguage
- ( [in] ULONG ulStream,
- [out] LCID * pLanguage
- );
- // GetSubpictureLanguage
- // Returns the language of the specified stream within the current
- // title. Does not return languages for menus. Sets *pLanguage=0 if
- // if the stream does not include language.
- // Use GetLocaleInfo(*pLanguage, LOCALE_SENGLANGUAGE, pszString, cbSize)
- // to create a human readable string name from the result LCID.
- HRESULT GetSubpictureLanguage
- ( [in] ULONG ulStream,
- [out] LCID * pLanguage
- );
- // GetTitleAttributes
- // Returns attributes of all video, audio, and subpicture
- // streams for the specified title including menus.
- // If nTitle == 0xffffffff, attributes for the current title are returned.
- HRESULT GetTitleAttributes
- ( [in] ULONG ulTitle, // requested title number
- [out] DVD_ATR * pATR
- );
- // GetVMGAttributes
- // Returns attributes of all video, audio, and subpicture
- // streams for Video Manager Menus. Some menus, such as the DVD_MENU_Title
- // are in a separate group of streams called the VMG (Video Manager) and
- // are not associated with any particular title number.
- HRESULT GetVMGAttributes
- ( [out] DVD_ATR * pATR
- );
- // GetCurrentVideoAttributes
- // Returns the video attributes for the current title or menu.
- HRESULT GetCurrentVideoAttributes
- ( [out] DVD_VideoATR *pATR
- );
- // GetCurrentAudioAttributes
- // Returns the video attributes for the stream in the current
- // title or menu.
- HRESULT GetCurrentAudioAttributes
- ( [out] DVD_AudioATR *pATR
- );
- // GetCurrentSubpictureAttributes
- // Returns the video attributes for the stream in the current
- // title or menu.
- HRESULT GetCurrentSubpictureAttributes
- ( [out] DVD_SubpictureATR *pATR
- );
- // GetCurrentVolumeInfo
- // Returns current DVD volume info.
- HRESULT GetCurrentVolumeInfo
- ( [out] ULONG *pulNumOfVol, // number of volumes (disc sides?) in a volume set
- [out] ULONG *pulThisVolNum, // volume number for this root directory
- [out] DVD_DISC_SIDE *pSide, // current disc side
- [out] ULONG *pulNumOfTitles // number of titles available in this volume
- );
- // GetDVDTextInfo
- // Returns the TXTDT_MG structure, which can contain text descriptions for title
- // name, volume name, producer name, vocalist name, etc. in various languages.
- // refer to Section 4.1.6 and Annex A of the DVD-Video spec.
- // If the buffer size passed in is insufficient (for example if cbBufSize==0),
- // then E_OUTOFMEMORY is returned, and *pcbActualSize is set to the required size.
- HRESULT GetDVDTextInfo
- ( [out, size_is(ulBufSize)] BYTE *pTextManager,
- [in] ULONG ulBufSize, // buffer size passed in
- [out] ULONG *pulActualSize // amount of actual data return
- );
- // GetPlayerParentalLevel
- // Returns the current parental level and the current country code
- // that has been set in the system registers in player.
- // See Table 3.3.4-1 of the DVD-Video spec for the defined parental levels.
- // Valid Parental Levels = 1..8 if parental management is enabled
- // 0xffffffff if parental management is disabled
- // See ISO3166 : Alpha-2 Code for the country codes.
- HRESULT GetPlayerParentalLevel
- ( [out] ULONG *pulParentalLevel, // current parental level
- [out] ULONG *pulCountryCode // current country code
- );
-
- // GetNumberOfChapters
- // Returns the number of chapters that are defined for a
- // given title.
- HRESULT GetNumberOfChapters
- ( [in] ULONG ulTitle, // Title for which number of chapters is requested
- [out] ULONG *pulNumberOfChapters // Number of chapters for the specified title
- );
- // GetTitleParentalLevels
- // Returns the parental levels that are defined for a
- // particular title. pParentalLevels will be combination
- // of DVD_PARENTAL_LEVEL_8, DVD_PARENTAL_LEVEL_6, or
- // DVD_PARENTAL_LEVEL_1 "OR"ed together
- HRESULT GetTitleParentalLevels
- ( [in] ULONG ulTitle, // Title for which parental levels are requested
- [out] ULONG *pulParentalLevels // Parental levels defined for the title "OR"ed together
- );
- // GetRoot
- // Returns the root directory that is set in the player. If a valid root
- // has been found, it returns the root string. Otherwise, it returns 0 for
- // pcbActualSize indicating that a valid root directory has not been found
- // or initialized.
- //
- // !!! used to return LPTSTR. interface was changed to return
- // LPSTR (ansi) for compatibility. COM APIs should pass with
- // UNICODE strings only.
- //
- HRESULT GetRoot
- ( [out, size_is(ulBufSize)] LPSTR pRoot, // pointer to buffer to get root string
- [in] ULONG ulBufSize, // size of buffer passed in
- [out] ULONG *pulActualSize // size of actual data returned
- );
- }
- //==========================================================================
- //==========================================================================
- // IDvdCmd interface -- the IDVDControl2 command sequencing object.
- //
- // For the IDVDControl2 interface, the application can track the status of
- // commands that have been issued to the navigator. Each command is identified
- // by an IDvdCmd object. The IDvdCmd object stores the results of the command
- // at both the start (when the command has begun processing) and the end after
- // it has completed. It also allows the app to synchronize with the processing
- // of the command.
- //
- // The command object also allows the app to uniquely identify and correlate
- // completion events (if it prefers to process events in a message loop instead
- // of creating another process).
- //
- // Allows the app to track the status of an issued command to the nav.
- //==========================================================================
- //==========================================================================
- [
- object,
- uuid(5a4a97e4-94ee-4a55-9751-74b5643aa27d),
- pointer_default(unique)
- ]
- interface IDvdCmd : IUnknown {
- import "unknwn.idl";
- //
- // WaitForStart
- //
- // Blocks the application until the command has begun.
- //
- HRESULT WaitForStart();
- //
- // WaitForEnd
- //
- // Blocks until the command has completed or has been cancelled.
- HRESULT WaitForEnd();
- }
- //==========================================================================
- //==========================================================================
- // IDvdState interface -- the State state object.
- //
- // Whenever the application wishes to save or restore a location on the disc,
- // it needs to store the DVD state into an object.
- // The State object supports the IPersistStream
- //
- //==========================================================================
- //==========================================================================
- [
- object,
- uuid(86303d6d-1c4a-4087-ab42-f711167048ef),
- pointer_default(unique)
- ]
- interface IDvdState : IUnknown
- {
- //
- // GetDiscID
- //
- // Returns the disc ID from which the bookmark was made.
- //
- HRESULT GetDiscID
- ( [out] ULONGLONG* pullUniqueID ); // 64-bit unique id for the disc
- //
- // GetParentalLevel
- //
- // Returns the state's parental level
- //
- HRESULT GetParentalLevel
- ( [out] ULONG* pulParentalLevel );
- }
- //==========================================================================
- //==========================================================================
- // IDvdControl2 interface -- Basic DVD-Video playback control.
- // This is modeled after the app control of a player specified in Annex J
- // of the DVD Video spec. IDvdInfo2 can be used to get information useful
- // in using IDvdControl2
- //==========================================================================
- //==========================================================================
- [
- object,
- uuid(33BC7430-EEC0-11D2-8201-00A0C9D74842),
- pointer_default(unique)
- ]
- interface IDvdControl2 : IUnknown {
- import "unknwn.idl";
-
- // PlayTitle
- //
- // Start playing from the beginning of the specified title number.
- // Annex J: Title_Play
- // Title numbers range between 1 and 99.
- HRESULT PlayTitle
- ( [in] ULONG ulTitle,
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd
- );
- // PlayChapterInTitle
- //
- // Start playing from the beginning of the given chapter (or part-of-title) number
- // within the specified title number.
- // Annex J: PTT_Play
- // Title numbers range between 1 and 99.
- // Chapters range from 1 to 999.
- HRESULT PlayChapterInTitle
- ( [in] ULONG ulTitle,
- [in] ULONG ulChapter,
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd
- );
- // PlayAtTimeInTitle
- //
- // Start playing from the specified time within the specified title number.
- // NOTE: the actual start time will be the closest sync point before
- // or equal to the specified frame number.
- // Annex J: Time_Play
- // Title numbers range between 1 and 99.
- HRESULT PlayAtTimeInTitle
- ( [in] ULONG ulTitle,
- [in] DVD_HMSF_TIMECODE* pStartTime,
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd
- );
- // Stop
- // Stop playback by transferring DVD Navigator to the DVD "Stop State" (same
- // as DVD_DOMAIN_Stop), but filter graph remains in DirectShow's Run state.
- // Annex J: Stop
- HRESULT Stop();
- // ReturnFromSubmenu
- //
- // Stop playback of current program chain (PGC) and start playing the PGC
- // specified by "GoUp_PGCN".in the PGCI.
- // If the GoUp_PGCN value is 0xFFFF the Resume() operation is carried out.
- // Annex J: GoUp
- HRESULT ReturnFromSubmenu(
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd );
- // PlayAtTime
- // Start playing at the specified time within the current title.
- // NOTE: the actual start time will be the closest sync point before
- // or equal to the specified frame number.
- // Annex J: Time_Search
- // The time is in BCD format, passed in as a ULONG.
- HRESULT PlayAtTime
- ( [in] DVD_HMSF_TIMECODE* pTime,
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd
- );
- // PlayChapter
- // Start playing at the specified chapter (or part-of-title) within
- // the current title.
- // Annex J: PTT_Search
- // Chapters range from 1 to 999.
- HRESULT PlayChapter
- ( [in] ULONG ulChapter,
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd
- );
- // PlayPrevChapter
- // Start playing at the beginning of the previous DVD "program".
- // For One-Sequential_PGC_Titles (which includes most titles) a program
- // is equivalent to a chapter, otherwise a program is part of a chapter.
- // Annex J: PrevPG_Search
- HRESULT PlayPrevChapter(
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd );
- // ReplayChapter
- // Start playing from the beginning of they current program.
- // Annex J: TopPG_Search
- HRESULT ReplayChapter(
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd );
- // PlayNextChapter
- // Start playing from the beginning of the next program.
- // Annex J: NextPG_Search
- HRESULT PlayNextChapter(
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd );
- // PlayForwards
- // Set forward play at the specified speed.
- // Annex J: Forward_Scan
- // dSpeed == 1 is normal play
- // dSpeed < 1 is slow play
- // dSpeed > 1 is fast play
- // For dSpeed != 1, audio and subpicture is muted.
- HRESULT PlayForwards
- ( [in] double dSpeed,
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd
- );
- // PlayBackwards
- // Set reverse play at the specified speed.
- // Annex J: Backward_Scan
- // dSpeed == 1 is normal play speed in reverse
- // dSpeed < 1 is slow play in reverse
- // dSpeed > 1 is fast play in reverse
- // For reverse play, audio and subpicture are always muted.
- HRESULT PlayBackwards
- ( [in] double dSpeed,
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd
- );
- // ShowMenu
- // Start playback of the Menu specified by an enum DVD_MENU_ID.
- // Annex J: Menu_Call
- HRESULT ShowMenu
- ( [in] DVD_MENU_ID MenuID,
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd
- );
- // Resume
- // Returns to title playback in DVD_DOMAIN_Title. This is typically
- // done after MenuCall which puts the DVD Navigator in
- // DVD_DOMAIN_VideoTitleSetMenu or DVD_DOMAIN_VideoManagerMenu.
- // Annex J: Resume
- HRESULT Resume(
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd );
- // SelectRelativeButton
- // Moves the selection highlight above, below, to the left of, or to the right of the
- // currently selected.
- // "Selecting" a DVD button simply highlights the button but does
- // not "Activate" the button. Selecting is the Windows equivalent
- // to tabbing to a button but not pressing the space bar or enter key.
- // Activating is the Windows equivalent of pressing the space bar or
- // enter key after tabbing to a button.
- // Annex J: Upper_button_Select, Lower_button_Select, Left_button_Select, Right_button_Select
- HRESULT SelectRelativeButton( DVD_RELATIVE_BUTTON buttonDir );
- // ActivateButton
- // Activates current button.
- // Annex J: Button_Activate
- HRESULT ActivateButton();
- // SelectButton
- // Selects a specific button (with the index from 1 to 36).
- // ulButton is intended to be a number entered by a user corresponding
- // to button numbers currently displayed on screen.
- // Button numbers range from 1 to 36.
- HRESULT SelectButton
- ( [in] ULONG ulButton
- );
- // SelectAndActivateButton
- // Selects and then activates the button specified by the user.
- // ulButton is intended to be a number entered by a user corresponding
- // to button numbers currently displayed on screen.
- // Annex J: Button_Select_And_Activate
- // Button numbers range from 1 to 36.
- HRESULT SelectAndActivateButton
- ( [in] ULONG ulButton
- );
- // StillOff
- // Releases any current still if there are no available buttons.
- // This includes VOBU stills, Cell stills, and PGC stills, whether the
- // still is infinite. When buttons are available, stills are released by
- // activating a button. Note this does not release a Pause.
- // Annex J: Still_Off
- HRESULT StillOff();
- // Pause
- // Freezes / unfreezes playback and any internal timers. This is similar to
- // IMediaControl::Pause(), but not the same in effect as IMediaControl::Pause
- // puts the filter (all filters, if done to the graph) in paused state.
- // Annex J: Pause_On and Pause_Off
- // bState is TRUE or FALSE to indicate whether to do Puase_on/Pause_Off according
- // to Annex J terminology.
- HRESULT Pause
- ( [in] BOOL bState
- );
- // SelectAudioStream
- // Changes the current audio stream to ulAudio.
- // Annex J: Audio_Stream_Change
- // Audio stream number ranges between 0 and 7 or DEFAULT_AUDIO_STREAM (15 - default based on default language & language extension)
- HRESULT SelectAudioStream
- ( [in] ULONG ulAudio,
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd
- );
- // SelectSubpictureStream
- // Changes the current subpicture stream number to ulSubPicture
- // Annex J: Sub-picture_Stream_Change (first param)
- // Subpicture stream number should be between 0 and 31 or 63.
- HRESULT SelectSubpictureStream
- ( [in] ULONG ulSubPicture,
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd
- );
- // SetSubpictureState
- // Turns on/off current subpicture stream display.
- // Annex J: Sub-picture_Stream_Change (second param)
- // Subpicture state is On or Off (TRUE or FALSE)
- HRESULT SetSubpictureState
- ( [in] BOOL bState,
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd
- );
- // SelectAngle
- // Changes the current angle number.
- // Annex J: Angle_Change
- // Angle number is between 1 and 9.
- HRESULT SelectAngle
- ( [in] ULONG ulAngle,
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd
- );
- // SelectParentalLevel
- // Selects the current player parental level.
- // Annex J: Parental_Level_Select
- // Parental level ranges between 1 and 8.
- // The defined parental levels are listed below :
- //
- // Level Rating
- // ----- ------
- // 1 G
- // 3 PG
- // 4 PG13
- // 6 R
- // 7 NC17
- // Higher levels can play lower level content; lower levels cannot play
- // higher level content. The DVD Navigator provides no restriction on
- // setting the parental level. DVD player application may enforce
- // restriction on parental level setting, such as password protection for
- // raising the current parental level. Parental Management is disabled in
- // the Navigator by default.
- //
- // Note : To disable parental management, pass 0xffffffff for ulParentalLevel
- // If parental management is disabled, then the player will play the
- // first PGC in a parental block regardless of parental IDs.
- //
- HRESULT SelectParentalLevel
- ( [in] ULONG ulParentalLevel
- );
- // SelectParentalCountry
- // Sets the country in which to interpret the Parental Level.
- // Annex J: Parental_Country_Select
- // The country specified using the Alpha-2 code of the ISO-3166 standard,
- HRESULT SelectParentalCountry
- ( [in] BYTE bCountry[2]
- );
- // SelectKaraokeAudioPresentationMode
- // Sets the Karaoke audio mode.
- // Annex J: Karaoke_Audio_Presentation_Mode_Change
- // NOTE: This and all other Karoke support is currently not implemented.
- // Mode represents the audio mixing mode for Karaoke (same info as SPRM11).
- // Use a bitwise OR of the bits in DVD_KARAOKE_DOWNMIX
- HRESULT SelectKaraokeAudioPresentationMode
- ( [in] ULONG ulMode
- );
- // SelectVideoModePreference
- // The user can specify the (initial) preferred display mode (aspect ratio)
- // (wide / letterbox / pan-scan) that should be used to display content
- // (16 : 9).
- // Annex J: Video_Presentation_Mode_Change
- // The parameter is a ULONG that has one of the values defined in
- // DVD_PREFERRED_DISPLAY_MODE
- HRESULT SelectVideoModePreference
- ( [in] ULONG ulPreferredDisplayMode
- );
-
- // SetDVDDirectory
- // Sets the root directory containing the DVD-Video volume.
- // Can only be called from the DVD Stop State (DVD_DOMAIN_Stop).
- // If the root directory is not successfully set before
- // IMediaControl::Play is called, the first drive starting from c:
- // containing a VIDEO_TS directory in the top level directory
- // will be used as the root.
- HRESULT SetDVDDirectory
- ( [in] LPCWSTR pszwPath
- );
- // ActivateAtPosition
- // This is typically called in response to a mouse click.
- // The specified point within the display window is to see if it is
- // within a current DVD button's highlight rect. If it is, that
- // button is first selected, then activated.
- // NOTE: DVD Buttons do not all necessarily have highlight rects,
- // button rects can overlap, and button rects do not always
- // correspond to the visual representation of DVD buttons.
- HRESULT ActivateAtPosition // typically called after a mouse click
- ( [in] POINT point
- );
- // SelectAtPosition
- // This is typically called in response to a mouse move within the
- // display window.
- // The specified point within the display window is to see if it is
- // within a current DVD button's highlight rect. If it is, that
- // button is selected.
- // NOTE: DVD Buttons do not all necessarily have highlight rects,
- // button rects can overlap, and button rects do not always
- // correspond to the visual representation of DVD buttons.
- HRESULT SelectAtPosition // typically called after a mouse move
- ( [in] POINT point
- );
-
- // PlayChaptersAutoStop
- // Start playing at the specified chapter within the specified title
- // and play the number of chapters specified by the third parameter.
- // Then the playback stops by sending an event EC_DVD_CHAPTER_AUTOSTOP.
- // Title ranges from 1 to 99.
- // Chapter (and number of chapters to play) ranges from 1 to 999.
- HRESULT PlayChaptersAutoStop
- ( [in] ULONG ulTitle, // title number
- [in] ULONG ulChapter, // chapter number to start playback
- [in] ULONG ulChaptersToPlay, // number of chapters to play from the start chapter
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd
- );
- // AcceptParentalLevelChange
- //
- // Application's way of informing the Navigator that the required parental
- // level change indicated through a previous event was accepted or rejected
- // by the app (and unblock the Navigator).
- //
- // FALSE - reject the disc's request to change the current parental level.
- // TRUE - change the parental level as required by the disc.
- HRESULT AcceptParentalLevelChange
- ( [in] BOOL bAccept
- );
- // SetOption(flag, true/false )
- // Flags:
- //
- // DVD_ResetOnStop
- // Disable reset of the Navigator's internal state on the
- // subsequent IMediaControl::Stop() call(s).
- //
- // FALSE - Navigator does not reset its state on the subsequent Stop calls
- // (play from the current location on next Run call).
- // TRUE - (default) Navigator resets its state on the subsequent Stop call
- // (play from the first play PGC on the Run call after the Stop).
- //
- // DVD_NotifyParentalLevelChange
- //
- // Allows the application to indicate to the Navigator that it wants to control
- // parent level change (e.g., through a dialog box) and indicate the acceptance
- // or rejection of the new parental level to the Navigator through
- // AcceptParentalLevelChange().
- //
- // FALSE - disable (default). Always reject request by the disc to change parental level.
- // TRUE - enable. Navigator will send the app a 'EC_DVD_PARENTAL_LEVEL_CHANGE' event
- // and block until AcceptParentalLevelChange() is called by the app.
- //
- // DVD_HMSF_TimeCodeEvents
- //
- // Lets the application specify to the Navigator if it wants to get the new time
- // event EC_DVD_CURRENT_HMSF_TIME with the HMSF format rather than the older
- // EC_DVD_CURRENT_TIME events.
- //
- // FALSE - disable (default). Older EC_DVD_CURRENT_TIME events are returned.
- // TRUE - enable. Navigator will send the app EC_DVD_CURRENT_HMSF_TIME events.
- HRESULT SetOption
- ( [in] DVD_OPTION_FLAG flag,
- [in] BOOL fState
- );
- // SetState
- //
- // The navigator will use the location information in the given state object to restore
- // the navigator's position to a specific location on the disc.
- // A valid state object is returned by either calling GetState(), or by using
- // "CoCreateInstance( CLSID_DVDState, NULL, CLSCTX_INPROC_SERVER, IID_IDvdState, (void **) ppState )"
- // to create a state object, followed by pState->IPersist::Load() to read it from memory or disk.
- //
- HRESULT SetState
- ( [in] IDvdState* pState,
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd
- );
- // PlayPeriodInTitleAutoStop
- //
- // Start playing from the specified time within the specified title number until the specified end time.
- // NOTE: the actual start and end times will be the closest sync points before
- // or equal to the specified frame number.
- // Annex J: Time_Play for a limited range
- // Title numbers range between 1 and 99.
- HRESULT PlayPeriodInTitleAutoStop
- ( [in] ULONG ulTitle,
- [in] DVD_HMSF_TIMECODE* pStartTime,
- [in] DVD_HMSF_TIMECODE* pEndTime,
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd
- );
- // SetGPRM
- // Sets the current contents of a DVD General Parameter Register.
- // Use of GPRMs is title specific.
- HRESULT SetGPRM
- ( [in] ULONG ulIndex,
- [in] WORD wValue,
- [in] DWORD dwFlags,
- [out] IDvdCmd** ppCmd
- );
- // SelectDefaultMenuLanguage
- // Selects the default language for menus.
- // Languages are specified with Windows standard LCIDs. LCIDs can be created
- // from ISO-639 codes with
- // MAKELCID( MAKELANGID(wISO639LangID ,SUBLANG_DEFAULT ), SORT_DEFAULT ).
- // SelectMenuLanguage may only called from the DVD Stop state (DVD_DOMAIN_Stop).
- // Annex J: Menu_Language_Select
- //
- // NOT TRUE ANYMORE:
- // NOTE: MAKELANGID seems to have a bug so 'jp' may have to be used
- // instead of 'ja' for the ISO639 code for Japanese.
- HRESULT SelectDefaultMenuLanguage
- ( [in] LCID Language
- );
- // SelectDefaultAudioLanguage
- // Selects the default audio language.
- // Languages are specified with Windows standard LCIDs.
- HRESULT SelectDefaultAudioLanguage
- ( [in] LCID Language,
- [in] DVD_AUDIO_LANG_EXT audioExtension
- );
- // SelectDefaultSubpictureLanguage
- // Selects the default subpicture language.
- // Languages are specified with Windows standard LCIDs.
- HRESULT SelectDefaultSubpictureLanguage
- ( [in] LCID Language,
- [in] DVD_SUBPICTURE_LANG_EXT subpictureExtension
- );
- }
- //==========================================================================
- //==========================================================================
- // IDvdInfo2 interface -- allows an app to query for attributes of available
- // DVD titles and DVD player status. Also allows for control of a DVD
- // player beyond Annex J in the DVD spec.
- //==========================================================================
- //==========================================================================
- enum DVD_TextStringType {
- // disc structure (0x00..0x0f)
- DVD_Struct_Volume = 0x01,
- DVD_Struct_Title = 0x02,
- DVD_Struct_ParentalID = 0x03,
- DVD_Struct_PartOfTitle = 0x04,
- DVD_Struct_Cell = 0x05,
- // stream (0x10..0x1f)
- DVD_Stream_Audio = 0x10,
- DVD_Stream_Subpicture = 0x11,
- DVD_Stream_Angle = 0x12,
- // channel in stream (0x20..0x2f)
- DVD_Channel_Audio = 0x20,
- // Application information
- // General (0x30..0x37)
- DVD_General_Name = 0x30,
- DVD_General_Comments = 0x31,
- // Title (0x38..0x3f)
- DVD_Title_Series = 0x38,
- DVD_Title_Movie = 0x39,
- DVD_Title_Video = 0x3a,
- DVD_Title_Album = 0x3b,
- DVD_Title_Song = 0x3c,
- DVD_Title_Other = 0x3f,
- // Title (sub) (0x40..0x47)
- 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,
- // Title (original) (0x48..0x4f)
- 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,
- // Other info (0x50..0x57)
- DVD_Other_Scene = 0x50,
- DVD_Other_Cut = 0x51,
- DVD_Other_Take = 0x52,
- // Language 0x58..0x5b
- // Work 0x5c..0x6b
- // Character 0x6c..0x8f
- // Data 0x90..0x93
- // Karaoke 0x94..0x9b
- // Category 0x9c..0x9f
- // Lyrics 0xa0..0xa3
- // Document 0xa4..0xa7
- // Others 0xa8..0xab
- // Reserved 0xac..0xaf
- // Admin 0xb0..0xb7
- // more admin 0xb8..0xc0
- // Reserved 0xd0..0xdf
- // vendor 0xe0..0xef
- // extension 0xf0..0xf7
- // reserved 0xf8..0xff
- };
- 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
- };
- cpp_quote ("#define DVD_TITLE_MENU 0x000")
- cpp_quote ("#define DVD_STREAM_DATA_CURRENT 0x800")
- cpp_quote ("#define DVD_STREAM_DATA_VMGM 0x400")
- cpp_quote ("#define DVD_STREAM_DATA_VTSM 0x401")
- cpp_quote ("#define DVD_DEFAULT_AUDIO_STREAM 0x0f")
- // DVD Decoder Caps data
- typedef struct tagDVD_DECODER_CAPS
- {
- DWORD dwSize ; // size of this struct
- DWORD dwAudioCaps ; // bits indicating audio support (AC3, DTS, SDDS, LPCM etc.) of decoder
- double dFwdMaxRateVideo ; // max data rate for video going forward
- double dFwdMaxRateAudio ; // ... .. .. ... audio ... ...
- double dFwdMaxRateSP ; // ... .. .. ... SP ... ...
- double dBwdMaxRateVideo ; // if smooth reverse is not available, this will be set to 0
- double dBwdMaxRateAudio ; // -- ditto --
- double dBwdMaxRateSP ; // -- ditto --
- DWORD dwRes1 ; // reserved for future expansion
- DWORD dwRes2 ; // -- ditto --
- DWORD dwRes3 ; // -- ditto --
- DWORD dwRes4 ; // -- ditto --
- } DVD_DECODER_CAPS ;
- // Bits for decoder's audio format support
- 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")
- [
- object,
- uuid(34151510-EEC0-11D2-8201-00A0C9D74842),
- pointer_default(unique)
- ]
- interface IDvdInfo2 : IUnknown {
- import "unknwn.idl";
- // GetCurrentDomain
- // Returns the current DVD Domain of the DVD player.
- HRESULT GetCurrentDomain
- ( [out] DVD_DOMAIN *pDomain
- );
- // GetCurrentLocation
- // Returns information sufficient to restart playback of a video
- // from the current playback location in titles that don't explicitly
- // disable seeking to the current location.
- HRESULT GetCurrentLocation
- ( [out] DVD_PLAYBACK_LOCATION2 *pLocation
- );
- // GetTotalTitleTime
- // Returns the total playback time for the current title. Only works
- // for One_Sequential_PGC_Titles.
- // THIS SHOULD CHANGE, RIGHT?
- HRESULT GetTotalTitleTime
- ( [out] DVD_HMSF_TIMECODE* pTotalTime,
- [out] ULONG* ulTimeCodeFlags // union of DVD_TIMECODE_FLAGS
- );
- // GetCurrentButton
- // Indicates the number of currently available buttons and the current
- // selected button number. If buttons are not present it returns 0 for
- // both pulButtonsAvailable and pulCurrentButton
- HRESULT GetCurrentButton
- ( [out] ULONG * pulButtonsAvailable,
- [out] ULONG * pulCurrentButton
- );
- // GetCurrentAngle
- // Indicates the number of currently available angles and the current
- // selected angle number. If *pulAnglesAvailable is returned as 1 then
- // the current content is not multiangle.
- HRESULT GetCurrentAngle
- ( [out] ULONG * pulAnglesAvailable,
- [out] ULONG * pulCurrentAngle
- );
- // GetCurrentAudio
- // Indicates the number of currently available audio streams and
- // the currently selected audio stream number.
- // This only works inside the Title domain.
- HRESULT GetCurrentAudio
- ( [out] ULONG * pulStreamsAvailable,
- [out] ULONG * pulCurrentStream
- );
- // GetCurrentSubpicture
- // Indicates the number of currently available subpicture streams,
- // the currently selected subpicture stream number, and if the
- // subpicture display is currently disabled. Subpicture streams
- // authored as "Forcedly Activated" stream will be displayed even if
- // subpicture display has been disabled by the app with
- // IDVDControl::SetSubpictureState.
- // This only works inside the Title domain.
- HRESULT GetCurrentSubpicture
- ( [out] ULONG * pulStreamsAvailable,
- [out] ULONG * pulCurrentStream,
- [out] BOOL * pbIsDisabled
- );
- // GetCurrentUOPS
- // Indicates which IDVDControl methods (Annex J user operations) are
- // currently valid. DVD titles can enable or disable individual user
- // operations at almost any point during playback.
- HRESULT GetCurrentUOPS
- ( [out] ULONG * pulUOPs
- );
- // GetAllSPRMs
- // Returns the current contents of all DVD System Parameter Registers.
- // See DVD-Video spec for use of individual registers.
- // WE SHOULD DOC THE SPRMs RATHER THAN ASKING TO REFER TO DVD SPEC.
- HRESULT GetAllSPRMs
- ( [out] SPRMARRAY * pRegisterArray
- );
- // GetAllGPRMs
- // Returns the current contents of all DVD General Parameter Registers.
- // Use of GPRMs is title specific.
- // WE SHOULD DOC THE GPRMs RATHER THAN ASKING TO REFER TO DVD SPEC.
- HRESULT GetAllGPRMs
- ( [out] GPRMARRAY * pRegisterArray
- );
- // GetAudioLanguage
- // Returns the language of the specified stream within the current title.
- // Does not return languages for menus. Returns *pLanguage as 0 if the
- // stream does not include language.
- // Use Win32 API GetLocaleInfo(*pLanguage, LOCALE_SENGLANGUAGE, pszString, cbSize)
- // to create a human readable string name from the returned LCID.
- HRESULT GetAudioLanguage
- ( [in] ULONG ulStream,
- [out] LCID * pLanguage
- );
- // GetSubpictureLanguage
- // Returns the language of the specified stream within the current title.
- // Does not return languages for menus. Returns *pLanguage=0 as 0 if the
- // stream does not include language.
- // Use Win32 API GetLocaleInfo(*pLanguage, LOCALE_SENGLANGUAGE, pszString, cbSize)
- // to create a human readable string name from the returned LCID.
- HRESULT GetSubpictureLanguage
- ( [in] ULONG ulStream,
- [out] LCID * pLanguage
- );
- // GetTitleAttributes
- // Returns attributes of all video, audio, and subpicture streams for the
- // specified title including menus.
- // If 0xffffffff is specified as ulTitle, attributes for the current title
- // are returned.
- HRESULT GetTitleAttributes
- ( [in] ULONG ulTitle, // requested title number
- [out] DVD_MenuAttributes * pMenu,
- [out] DVD_TitleAttributes * pTitle
- );
- // GetVMGAttributes
- // Returns attributes of all video, audio, and subpicture
- // streams for Video Manager Menus. This method suppliments GetTitleAttributes()
- // for some menus, such as the Title menu, which are in a separate group of
- // streams called the VMG (Video Manager) and are not associated with any
- // particular title number.
- HRESULT GetVMGAttributes
- ( [out] DVD_MenuAttributes* pATR
- );
- // GetCurrentVideoAttributes
- // Returns the video attributes for the current title or menu.
- //
- HRESULT GetCurrentVideoAttributes
- ( [out] DVD_VideoAttributes * pATR
- );
- // GetAudioAttributes
- // Returns the audio attributes for the specified stream in the current title
- // or menu.
- HRESULT GetAudioAttributes
- ( [in] ULONG ulStream,
- [out] DVD_AudioAttributes *pATR
- );
- // GetKaraokeChannelContents
- // Returns the karaoke contents of each channel of the specified stream in the current title
- // or menu.
- HRESULT GetKaraokeAttributes
- ( [in] ULONG ulStream,
- [out] DVD_KaraokeAttributes* pAttributes
- );
- // GetSubpictureAttributes
- // Returns the subpicture attributes for the specified stream in the current
- // title or menu.
- HRESULT GetSubpictureAttributes
- ( [in] ULONG ulStream,
- [out] DVD_SubpictureAttributes *pATR
- );
- // GetDVDVolumeInfo
- // Returns current DVD volume information.
- HRESULT GetDVDVolumeInfo
- ( [out] ULONG *pulNumOfVolumes, // number of volumes (disc sides?) in a volume set
- [out] ULONG *pulVolume, // volume number for current DVD directory
- [out] DVD_DISC_SIDE *pSide, // current disc side
- [out] ULONG *pulNumOfTitles // number of titles available in this volume
- );
- // GetDVDTextNumberOfLanguages
- // Returns the number of text languages for the current DVD directory.
- // Should return some error code if no root directory is found.
- HRESULT GetDVDTextNumberOfLanguages
- ( [out] ULONG * pulNumOfLangs
- );
-
- // GetDVDTextLanguageInfo
- // Returns the text languages information (number of strings, language code,
- // char set) for the specified language index.
- // Should return some error code if an invalid text index is specified.
- HRESULT GetDVDTextLanguageInfo
- ( [in] ULONG ulLangIndex,
- [out] ULONG* pulNumOfStrings,
- [out] LCID* pLangCode,
- [out] enum DVD_TextCharSet * pbCharacterSet
- );
- // GetDVDTextStringAsNative
- // Returns the text string as an array of bytes for the specified language
- // index.and string index.
- // Should return some error code if an invalid text or string index is specified.
- // It also just returns the length of the string if pchBuffer is specified as NULL.
- HRESULT GetDVDTextStringAsNative
- ( [in] ULONG ulLangIndex,
- [in] ULONG ulStringIndex,
- [out] BYTE* pbBuffer,
- [in] ULONG ulMaxBufferSize,
- [out] ULONG* pulActualSize,
- [out] enum DVD_TextStringType* pType
- );
- // GetDVDTextStringAsUnicode
- // Returns the text string in Unicode for the specified language index.and string index.
- // Should return some error code if an invalid text or string index is specified.
- // It also just returns the length of the string if pchBuffer is specified as NULL.
- HRESULT GetDVDTextStringAsUnicode
- ( [in] ULONG ulLangIndex,
- [in] ULONG ulStringIndex,
- [out] WCHAR* pchwBuffer,
- [in] ULONG ulMaxBufferSize,
- [out] ULONG* pulActualSize,
- [out] enum DVD_TextStringType* pType
- );
- // GetPlayerParentalLevel
- // Returns the current parental level and the current country code that has
- // been set in the system registers in player.
- // See Table 3.3.4-1 of the DVD-Video spec for the defined parental levels.
- // Valid Parental Levels range from 1 to 8 if parental management is enabled.
- // Returns 0xffffffff if parental management is disabled
- // See ISO3166 : Alpha-2 Code for the country codes.
- HRESULT GetPlayerParentalLevel
- ( [out] ULONG *pulParentalLevel, // current parental level
- [out] BYTE pbCountryCode[2] // current country code
- );
-
- // GetNumberOfChapters
- // Returns the number of chapters that are defined for a
- // given title.
- HRESULT GetNumberOfChapters
- ( [in] ULONG ulTitle, // Title for which number of chapters is requested
- [out] ULONG *pulNumOfChapters // Number of chapters for the specified title
- );
- // GetTitleParentalLevels
- // Returns the parental levels that are defined for a particular title.
- // pulParentalLevels will be combination of DVD_PARENTAL_LEVEL_8,
- // DVD_PARENTAL_LEVEL_6, or DVD_PARENTAL_LEVEL_1 OR-ed together
- HRESULT GetTitleParentalLevels
- ( [in] ULONG ulTitle, // Title for which parental levels are requested
- [out] ULONG *pulParentalLevels // Parental levels defined for the title "OR"ed together
- );
- // GetDVDDirectory
- // Returns the root directory that is set in the player. If a valid root
- // has been found, it returns the root string. Otherwise, it returns 0 for
- // pcbActualSize indicating that a valid root directory has not been found
- // or initialized.
- //
- // !!! used to return LPTSTR. interface was changed to return
- // LPSTR (ansi) for compatibility. COM APIs should pass with
- // UNICODE strings only.
- //
- HRESULT GetDVDDirectory
- ( [out, size_is(ulMaxSize)] LPWSTR pszwPath, // pointer to buffer to get root string
- [in] ULONG ulMaxSize, // size of buffer in WCHARs passed in
- [out] ULONG *pulActualSize // size of actual data returned (in WCHARs)
- );
-
- // IsAudioStreamEnabled
- //
- // Determines if the specified audio stream is enabled/disabled in the current PGC.
- //
- // ulStreamNum - audio stream number to test
- // pbEnabled - where to place the result
- HRESULT IsAudioStreamEnabled
- ( [in] ULONG ulStreamNum, // stream number to test
- [out] BOOL *pbEnabled // returned state
- );
- // GetDiscID
- //
- // If pszwPath is specified as NULL, DVD Navigator will use the current path
- // that would be returned by GetDVDDirectory() at this point.
- //
- // Returns a 64-bit identification number for the specified DVD disc.
- HRESULT GetDiscID
- ( [in] LPCWSTR pszwPath, // root path (should we rather use const WCHAR*?)
- [out] ULONGLONG* pullDiscID // 64-bit unique id for the disc
- ) ;
- // GetState
- //
- // The navigator will create a new state object and save the current location into it.
- // The state object can be used to restore the navigator the saved location at a later time.
- // A new IDvdState object is created (with a single AddRef) and returned in *pStateData.
- // The object must be Released() when the application is finished with it.
- //
- HRESULT GetState
- ( [out] IDvdState **pStateData // returned object
- );
- //
- // GetMenuLanguages
- //
- // Navigator gets all of the menu languages for the VMGM and VTSM domains.
- //
- HRESULT GetMenuLanguages
- ( [out] LCID *pLanguages, // data buffer (NULL returns #languages)
- [in] ULONG ulMaxLanguages, // maxiumum number of languages to retrieve
- [out] ULONG *pulActualLanguages // actual number of languages retrieved
- );
- //
- // GetButtonAtPosition
- //
- // This is typically called in response to a mouse move within the
- // display window.
- // It returns the button located at the specified point within the display window.
- // If no button is present at that position, then VFW_E_DVD_NO_BUTTON is returned.
- // Button indices start at 1.
- //
- // NOTE: DVD Buttons do not all necessarily have highlight rects,
- // button rects can overlap, and button rects do not always
- // correspond to the visual representation of DVD buttons.
- HRESULT GetButtonAtPosition // typically called after a mouse move
- ( [in] POINT point,
- [out] ULONG *pulButtonIndex
- );
- //
- // GetCmdFromEvent
- //
- // This method maps an EC_DVD_CMD_BEGIN/COMPLETE/CANCEL event's lParam1 into an AddRef'd
- // IDvdCmd pointer. You must Release the returned pointer. NULL is returned if the function
- // fails.
- //
- HRESULT GetCmdFromEvent
- ( [in] LONG_PTR lParam1,
- [out] IDvdCmd **pCmdObj
- );
- // GetDefaultMenuLanguage
- // Returns the default language for menus.
- HRESULT GetDefaultMenuLanguage
- ( [out] LCID * pLanguage
- );
- // GetDefaultAudioLanguage
- // Gets the default audio language.
- // Languages are specified with Windows standard LCIDs.
- HRESULT GetDefaultAudioLanguage
- ( [out] LCID* pLanguage,
- [out] DVD_AUDIO_LANG_EXT* pAudioExtension
- );
- // GetDefaultSubpictureLanguage
- // Gets the default subpicture language.
- // Languages are specified with Windows standard LCIDs.
- HRESULT GetDefaultSubpictureLanguage
- ( [out] LCID* pLanguage,
- [out] DVD_SUBPICTURE_LANG_EXT* pSubpictureExtension
- );
- //
- // GetDecoderCaps:
- // Retrieves the DVD decoder's details about max data rate for video, audio
- // and subpicture (going backward and forward) as well as support for various
- // types of audio (AC3, MPEG2, DTS, SDDS, LPCM).
- //
- HRESULT GetDecoderCaps
- ( [out] DVD_DECODER_CAPS *pCaps
- ) ;
- //
- // GetButtonRect:
- // Retrieves the coordinates for a given button number
- //
- HRESULT GetButtonRect
- ( [in] ULONG ulButton,
- [out] RECT *pRect
- ) ;
- // IsSubpictureStreamEnabled
- //
- // Determines if the specified subpicture stream is enabled/disabled in the current PGC.
- //
- // ulStreamNum - Subpicture stream number to test
- // pbEnabled - where to place the result
- HRESULT IsSubpictureStreamEnabled
- ( [in] ULONG ulStreamNum, // stream number to test
- [out] BOOL *pbEnabled // returned state
- );
- }
- //==========================================================================
- //==========================================================================
- //
- // typedefs used by IDvdGraphBuilder interface.
- //
- //==========================================================================
- //==========================================================================
- typedef enum _AM_DVD_GRAPH_FLAGS {
- AM_DVD_HWDEC_PREFER = 0x01, // default
- AM_DVD_HWDEC_ONLY = 0x02,
- AM_DVD_SWDEC_PREFER = 0x04,
- AM_DVD_SWDEC_ONLY = 0x08,
- AM_DVD_NOVPE = 0x100
- } 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 {
- HRESULT hrVPEStatus ; // VPE mixing error code (0 => success)
- BOOL bDvdVolInvalid ; // Is specified DVD volume invalid?
- BOOL bDvdVolUnknown ; // Is DVD volume to be played not specified/not found?
- BOOL bNoLine21In ; // video decoder doesn't produce line21 (CC) data
- BOOL bNoLine21Out ; // can't show decoded line21 data as CC on video
- int iNumStreams ; // number of DVD streams to render
- int iNumStreamsFailed ; // number of streams failed to render
- DWORD dwFailedStreamsFlag ; // combination of flags to indicate failed streams
- } AM_DVD_RENDERSTATUS ;
- //
- // IDvdGraphBuilder interface to build a filter graph for DVD-Video playback.
- //
- [
- object,
- local,
- uuid(FCC152B6-F372-11d0-8E00-00C04FD7C08B),
- pointer_default(unique)
- ]
- interface IDvdGraphBuilder : IUnknown {
- // Returns the IGraphBuilder interface for the filtergraph used by the
- // CDvdGraphBuilder object.
- // Remember to *ppGB->Release() when you're done with it
- HRESULT GetFiltergraph
- ( [out] IGraphBuilder **ppGB
- ) ;
- // Gets specific interface pointers in the DVD-Video playback graph to
- // make DVD-Video playback development easier.
- // It helps get the following interfaces to control playback/show CC/
- // position window/control volume etc:
- // - IDvdControl, IDvdInfo
- // - IAMLine21Decoder
- // - IVideoWindow, IBasicVideo
- // - IBasicAudio
- // This method will return
- // a) E_INVALIDARG if ppvIF is invalid
- // b) E_NOINTERFACE if riid is an IID we don't know about
- // c) VFW_E_DVD_GRAPHNOTREADY if the graph has not been built through
- // RenderDvdVideoVolume() yet.
- // Remember to *ppvIF->Release() when you're done with it
- HRESULT GetDvdInterface
- ( [in] REFIID riid, // IID of the interface required
- [out] void **ppvIF // returns pointer to the required interface
- ) ;
- // Builds a filter graph according to user specs for playing back a
- // DVD-Video volume.
- // This method returns S_FALSE if
- // 1. the graph has been either built, but either
- // a) VPE mixing doesn't work (app didn't use AM_DVD_NOVPE flag)
- // b) video decoder doesn't produce line21 data
- // c) line21 data couldn't be rendered (decoding/mixing problem)
- // d) the call specified an invalid volume path or DVD Nav couldn't
- // locate any DVD-Video volume to be played.
- // 2. some streams didn't render (completely), but the others have
- // been rendered so that the volume can be partially played back.
- // The status is indicated through the fields of the pStatus (out)
- // parameter.
- // About 1(a), the app will have enough info to tell the user that the
- // video won't be visible unless a TV is connected to the NTSC out
- // port of the DVD decoder (presumably HW in this case).
- // For case 1(b) & (c), the app "can" put up a warning/informative message
- // that closed captioning is not available because of the decoder.
- // 1(d) helps an app to ask the user to insert a DVD-Video disc if none
- // is specified/available in the drive when playback is started.
- // This method builds the graph even if
- // - an invalid DVD-Video volume is specified
- // - the caller uses lpwszPathName = NULL to make the DVD Nav to locate
- // the default volume to be played back, but DVD Nav doesn't find a
- // default DVD-Video volume to be played back.
- // An app can later specify the volume using IDvdControl::SetRoot()
- // method.
- // #2 will help the app indicate to the user that some of the streams
- // can't be played.
- //
- // The graph is built using filters based on the dwFlags value (to use
- // HW decoders or SW decoders or a mix of them).
- // The dwFlags value is one of the values in AM_DVD_GRAPH_FLAGS enum
- // type. The default value is AM_DVD_HWDEC_PREFER. None of the
- // AM_DVD_HWDEC_xxx or AM_DVD_SWDEC_xxx flags can be mixed. However
- // AM_DVD_NOVPE can be OR-ed with any of the AM_DVD_HWDEC_xxx flags.
- //
- // The method returns S_OK if the playback graph is built successfully
- // with all the streams completely rendered and a valid DVD-Video volume
- // is specified or a default one has been located.
- //
- // If the dwFlags specify conflicting options, E_INVALIDARG is returned.
- // If the graph building fails, the method returns one of the following
- // error codes:
- // VFW_E_DVD_RENDERFAIL, VFW_E_DVD_DECNOTENOUGH
- //
- HRESULT RenderDvdVideoVolume
- ( [in] LPCWSTR lpcwszPathName, // Can be NULL too
- [in] DWORD dwFlags, // 0 is the default (use max HW)
- [out] AM_DVD_RENDERSTATUS *pStatus // returns indications of ANY failure
- ) ;
- }
- //
- // DDraw Exclusive Mode Video standard COM interface for Overlay Mixer
- //
- [
- object,
- local,
- uuid(153ACC21-D83B-11d1-82BF-00A0C9696C8F),
- pointer_default(unique)
- ]
- interface IDDrawExclModeVideo : IUnknown {
- // set a ddraw object to be used by the overlay mixer. If even one of the pins
- // of the ovmixer is connected, then it won't start using the new ddraw obect
- // immediately but just cache it. It will start using it the next time, all its
- // pins are disconnected.
- HRESULT SetDDrawObject([in] IDirectDraw *pDDrawObject);
- // gets the ddraw object currently being used by the overlay mixer. If the app has not
- // set any ddraw object and the ovmixer has not yet allocated one, then *ppDDrawObject
- // will be set to NULL and *pbUsingExternal will be set TO FALSE. Otherwise *pbUsingExternal
- // will be set to TRUE if the ovmixer is currently USING an app given ddraw object and FALSE
- // othewise
- HRESULT GetDDrawObject([out] IDirectDraw **ppDDrawObject,
- [out] BOOL *pbUsingExternal);
- // set a primary surface to be used by the overlay mixer. If even one of the pins
- // of the ovmixer is connected, then it won't start using the new primary surface
- // immediately but just cache it. It will start using it the next time, all its
- // pins are disconnected.
- // Also when the ovmixer does start using an app given primary surface, it will delete
- // its output pin (and not draw its own colorkey) since the app is expected to do the
- // window management and drawing colorkey etc on the primary surface
- // This function makes sure that the surface provided exposes IDirectDrawSurface3, and
- // is consistent with the ddraw object provided.
- HRESULT SetDDrawSurface([in] IDirectDrawSurface *pDDrawSurface);
- // gets the ddraw surface currently being used by the overlay mixer. If the app has not
- // set any ddraw surface and the ovmixer has not yet allocated one, then *ppDDrawSurface
- // will be set to NULL and *pbUsingExternal will be set to FALSE. Otherwise *pbUsingExternal
- // will be set to TRUE if the ovmixer is curretnly USING an app given ddraw surface and FALSE
- // otherwise
- HRESULT GetDDrawSurface([out] IDirectDrawSurface **ppDDrawSurface,
- [out] BOOL *pbUsingExternal);
- // set draw paramters on the ovmixer (src and dest rect). Note that if the mode
- // of the ovmixer is set to LETTER_BOX, then the ovmixer might show the video in
- // only a subrect of *prcTarget (see IMixerPinConfig for details).
- HRESULT SetDrawParameters([in] const RECT * prcSource,
- [in] const RECT * prcTarget);
- // gets the current video size and picture aspect ratio of the primary stream of the overlay mixer
- // The app should look for the evene EC_VIDEO_SIZE_AR_CHANGED and on its receipt
- // call this function again
- HRESULT GetNativeVideoProps([out] DWORD *pdwVideoWidth,
- [out] DWORD *pdwVideoHeight,
- [out] DWORD *pdwPictAspectRatioX,
- [out] DWORD *pdwPictAspectRatioY);
- // Set the callback interface - the callback interface will be defined in a later release
- // Currently returns E_NOTIMPL
- HRESULT SetCallbackInterface([in] IDDrawExclModeVideoCallback *pCallback,
- [in] DWORD dwFlags);
- }
- //
- // DDraw Exclusive Mode Video callbacks
- //
- // enum for flags
- enum _AM_OVERLAY_NOTIFY_FLAGS {
- AM_OVERLAY_NOTIFY_VISIBLE_CHANGE = 0x00000001,
- AM_OVERLAY_NOTIFY_SOURCE_CHANGE = 0x00000002,
- AM_OVERLAY_NOTIFY_DEST_CHANGE = 0x00000004
- };
- [
- object,
- local,
- uuid(913c24a0-20ab-11d2-9038-00a0c9697298),
- pointer_default(unique)
- ]
- interface IDDrawExclModeVideoCallback : IUnknown {
- // Called once before UpdateOverlay is called with bBefore == TRUE
- // and once after it is called with bBefore == FALSE and otherwise
- // identical parameters
- HRESULT OnUpdateOverlay(
- [in] BOOL bBefore, // After UpdateOverlayCalled?
- [in] DWORD dwFlags,// _AM_OVERLAY_NOTIFY enum
- [in] BOOL bOldVisible,
- [in] const RECT *prcOldSrc,
- [in] const RECT *prcOldDest,
- [in] BOOL bNewVisible,
- [in] const RECT *prcNewSrc,
- [in] const RECT *prcNewDest);
- // Called when the surface color key is changed
- HRESULT OnUpdateColorKey(
- [in] const COLORKEY *pKey,
- [in] DWORD dwColor);
- // Called when the video size or aspect ratio changes
- HRESULT OnUpdateSize( [in] DWORD dwWidth, // Movie pixel width
- [in] DWORD dwHeight, // Movie pixel height
- [in] DWORD dwARWidth, // Aspect ratio horizontal
- [in] DWORD dwARHeight); // Aspect ratio vertical
- }