📄 dvdif.idl
字号:
// 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -