📄 dvdif.idl
字号:
//==========================================================================;
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
// PURPOSE.
//
// Copyright (c) 1992 - 1997 Microsoft Corporation. All Rights Reserved.
//
//--------------------------------------------------------------------------;
//
// DirectShow interfaces to control playback of a DVD filter graph.
//
// forward declarations - these are the interfaces declared in this file
import "unknwn.idl";
import "objidl.idl";
interface IDvdControl;
interface IDvdInfo;
interface IDvdGraphBuilder ;
//==========================================================================
//==========================================================================
//
// 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
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. See DVD-Video spec.
typedef BYTE DVD_AudioATR[8]; // audio stream attributes. See DVD-Video spec.
typedef BYTE DVD_SubpictureATR[6]; // subpicture stream attributes. See DVD-Video spec.
// DVD 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;")
typedef struct tagDVD_PLAYBACK_LOCATION
{
//
// TitleNum & ChapterNum or TitleNum & TimeCode are sufficient to save
// playback location for Once_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;
// Parental Level Information
cpp_quote ("#define DVD_PARENTAL_LEVEL_8 0x8000")
cpp_quote ("#define DVD_PARENTAL_LEVEL_7 0x4000")
cpp_quote ("#define DVD_PARENTAL_LEVEL_6 0x2000")
cpp_quote ("#define DVD_PARENTAL_LEVEL_5 0x1000")
cpp_quote ("#define DVD_PARENTAL_LEVEL_4 0x0800")
cpp_quote ("#define DVD_PARENTAL_LEVEL_3 0x0400")
cpp_quote ("#define DVD_PARENTAL_LEVEL_2 0x0200")
cpp_quote ("#define DVD_PARENTAL_LEVEL_1 0x0100")
//==========================================================================
//==========================================================================
// 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 uiTitle
);
// 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 uiTitle,
[in] ULONG uiChapter
);
// 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 uiTitle,
[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 Chapter
);
// 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.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -