/[cvs]/api/include/DShowIDL/dvdif.idl
ViewVC logotype

Contents of /api/include/DShowIDL/dvdif.idl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (show annotations) (vendor branch)
Sun Jul 1 20:47:59 2001 UTC (22 years, 10 months ago) by bearsoft
Branch: lazy, MAIN
CVS Tags: start, HEAD
Changes since 1.1: +0 -0 lines
First import

1 //------------------------------------------------------------------------------
2 // File: DVDIf.idl
3 //
4 // Desc: DirectShow interfaces to control playback of a DVD filter graph.
5 //
6 // Copyright (c) 1992-2000, Microsoft Corporation. All rights reserved.
7 //------------------------------------------------------------------------------
8
9
10 // forward declarations - these are the interfaces declared in this file
11
12 import "unknwn.idl";
13 import "objidl.idl";
14
15 cpp_quote("#include <ddraw.h>")
16
17 interface IDvdControl;
18 interface IDvdInfo;
19 interface IDirectDraw;
20 interface IDirectDrawSurface;
21 interface IDvdGraphBuilder ;
22 interface IDDrawExclModeVideo;
23 interface IDDrawExclModeVideoCallback;
24 interface IDvdCmd;
25 interface IDvdState;
26
27
28 //==========================================================================
29 //==========================================================================
30 //
31 // typedefs used by IDvdControl and IDvdInfo interfaces.
32 //
33 //==========================================================================
34 //==========================================================================
35
36 typedef enum tagDVD_DOMAIN {
37 // The DVD_DOMAIN is used to indicate the stat of a DVD player.
38 DVD_DOMAIN_FirstPlay=1, // doing default initialization of a dvd disc
39 DVD_DOMAIN_VideoManagerMenu, // displaying menus for whole disc
40 DVD_DOMAIN_VideoTitleSetMenu, // displaying menus for current title set
41 DVD_DOMAIN_Title, // displaying current title
42 DVD_DOMAIN_Stop // player is in stopped state
43 } DVD_DOMAIN;
44
45 typedef enum tagDVD_MENU_ID {
46 DVD_MENU_Title = 2, // to choose a title from any VTS in a DVD-Video volume
47 DVD_MENU_Root = 3, // main menu for a specific VTS
48 DVD_MENU_Subpicture =4, // to choose subpicture stream in a VTS
49 DVD_MENU_Audio = 5, // to choose audio stream in a VTS
50 DVD_MENU_Angle = 6, // to choose angle num in a VTS
51 DVD_MENU_Chapter = 7 // to choose a chapter in a VTS
52 // the Root menu always provides a means of getting to to Subpicture, Audio,
53 // Angle and Chapter menus if they exist.
54 } DVD_MENU_ID;
55
56 typedef enum tagDVD_DISC_SIDE {
57 DVD_SIDE_A = 1,
58 DVD_SIDE_B = 2
59 } DVD_DISC_SIDE;
60
61
62 typedef enum tagDVD_PREFERRED_DISPLAY_MODE
63 {
64 // DVD_PREFERRED_DISPLAY_MODE is used to indicate the user's
65 // preferred window aspect ratio and preferred method of converion of
66 // 16*9 content to a 4*3 window aspect ratio. Pan-scan and letterboxing are
67 // the two conversion methods. This enum is used to indicate only a preference of
68 // conversion mechinism since some content can only be converted using one
69 // of these methods. 4*3 content is converted to a 16*9 window always by using
70 // "reverse" letterboxing where black bars are added to the right and left
71 // sides of the display instead of the top and bottom of the display as in the 16*9
72 // to 4*3 conversion useing letterboxing.
73 DISPLAY_CONTENT_DEFAULT = 0, // default to content
74 DISPLAY_16x9 = 1, // 16x9 display
75 DISPLAY_4x3_PANSCAN_PREFERRED = 2, // 4x3 display with pan-scan preferrence
76 DISPLAY_4x3_LETTERBOX_PREFERRED = 3 // 4x3 display with letterbox preferrence
77
78 } DVD_PREFERRED_DISPLAY_MODE;
79
80 typedef WORD DVD_REGISTER;
81 typedef DVD_REGISTER GPRMARRAY[16]; // DVD-Video 1.0 has 16 16-bit General Parameter Registers
82 typedef DVD_REGISTER SPRMARRAY[24]; // DVD-Video 1.0 has 24 16-bit System Parameter Registers
83
84
85
86 // these are only for IDVDInfo1 compatibility and require the DVD-Video 1.0 specification
87 // Please use the IDVDInfo2's DVD_Title/MenuAttributes, DVD_VideoAttributes, DVD_AudioAttributes, and DVD_SubpictureAttributes
88 typedef struct tagDVD_ATR
89 {
90 //
91 // Refer to the DVD-Video 1.0 spec to parse these structures.
92 //
93 ULONG ulCAT; // VMG_CAT if this is for a volume; or VTS_CAT
94 // if this is for a Video Title Set (VTS)
95 BYTE pbATRI[768];// All stream attributes for menu and title from bytes
96 // 256 to 1023 of VMGI or VTSI.
97 } DVD_ATR;
98 typedef BYTE DVD_VideoATR[2]; // video stream attributes.
99 typedef BYTE DVD_AudioATR[8]; // audio stream attributes.
100 typedef BYTE DVD_SubpictureATR[6]; // subpicture stream attributes.
101
102 // DVD1.0 Timecode is BCD encoded in this format: 0xHhMmSsFf, where
103 // H is tens of hours
104 // h is hours
105 // M is tens of minutes
106 // m is minutes
107 // S is tens of seconds
108 // s is seconds
109 // F is tens of frames
110 // f is frames
111 // Note that you must know the frame rate to interperate the frame count as time.
112 typedef enum tagDVD_FRAMERATE
113 {
114 DVD_FPS_25 =1, // 25 frames per second
115 DVD_FPS_30NonDrop = 3 // exactly 30 frames per second
116 } DVD_FRAMERATE;
117
118 cpp_quote("typedef struct tagDVD_TIMECODE")
119 cpp_quote("{")
120 cpp_quote(" ULONG Hours1 :4; // Hours")
121 cpp_quote(" ULONG Hours10 :4; // Tens of Hours ")
122 cpp_quote("")
123 cpp_quote(" ULONG Minutes1 :4; // Minutes ")
124 cpp_quote(" ULONG Minutes10:4; // Tens of Minutes ")
125 cpp_quote("")
126 cpp_quote(" ULONG Seconds1 :4; // Seconds ")
127 cpp_quote(" ULONG Seconds10:4; // Tens of Seconds ")
128 cpp_quote("")
129 cpp_quote(" ULONG Frames1 :4; // Frames ")
130 cpp_quote(" ULONG Frames10 :2; // Tens of Frames ")
131 cpp_quote("")
132 cpp_quote(" ULONG FrameRateCode: 2; // use DVD_FRAMERATE to indicate frames/sec and drop/non-drop")
133 cpp_quote("} DVD_TIMECODE;")
134
135 //
136 // Newer IDVD2 methods can use the HMSF format instead
137 // Call SetOption( DVD_HMSF_TimeCodeEvents, TRUE) to return EC_DVD_CURRENT_HMSF_TIME
138 // instead of EC_DVD_CURRENT_TIME events
139 //
140 typedef enum tagDVD_TIMECODE_FLAGS
141 {
142 DVD_TC_FLAG_25fps = 0x00000001, // 25 frames per second
143 DVD_TC_FLAG_30fps = 0x00000002, // 30 frames per second
144 DVD_TC_FLAG_DropFrame = 0x00000004, // 29.97 instead of 30 fps
145 DVD_TC_FLAG_Interpolated = 0x00000008, // timecode may be inaccurate
146 // remainder of bits are reserved and should not be read
147 } DVD_TIMECODE_FLAGS;
148
149 // this can be cast to/from a ULONG
150 typedef struct tagDVD_HMSF_TIMECODE
151 {
152 BYTE bHours;
153 BYTE bMinutes;
154 BYTE bSeconds;
155 BYTE bFrames;
156 } DVD_HMSF_TIMECODE;
157
158 typedef struct tagDVD_PLAYBACK_LOCATION2
159 {
160 //
161 // TitleNum & ChapterNum or TitleNum & TimeCode are sufficient to save
162 // playback location for One_Sequential_PGC_Titles.
163 //
164 ULONG TitleNum; // title number for whole disc (TTN not VTS_TTN)
165 ULONG ChapterNum; // part-of-title number with title. 0xffffffff if not Once_Sequential_PGC_Title
166 DVD_HMSF_TIMECODE TimeCode; // use DVD_TIMECODE for current playback time.
167 ULONG TimeCodeFlags; // union of DVD_TIMECODE_EVENT_FLAGS
168
169 } DVD_PLAYBACK_LOCATION2;
170
171 typedef struct tagDVD_PLAYBACK_LOCATION
172 {
173 //
174 // TitleNum & ChapterNum or TitleNum & TimeCode are sufficient to save
175 // playback location for One_Sequential_PGC_Titles.
176 //
177 ULONG TitleNum; // title number for whole disc (TTN not VTS_TTN)
178 ULONG ChapterNum; // part-of-title number with title. 0xffffffff if not Once_Sequential_PGC_Title
179 ULONG TimeCode; // use DVD_TIMECODE for current playback time. 0xffffffff if not Once_Sequential_PGC_Title
180
181 } DVD_PLAYBACK_LOCATION;
182
183 typedef DWORD VALID_UOP_SOMTHING_OR_OTHER;
184
185 typedef enum {
186 //
187 // Annex J User Functions ---
188 //
189 UOP_FLAG_Play_Title_Or_AtTime = 0x00000001, // Title_Or_Time_Play
190 UOP_FLAG_Play_Chapter = 0x00000002, // Chapter_Search_Or_Play
191 UOP_FLAG_Play_Title = 0x00000004, // Title_Play
192 UOP_FLAG_Stop = 0x00000008, // Stop
193 UOP_FLAG_ReturnFromSubMenu = 0x00000010, // GoUp
194 UOP_FLAG_Play_Chapter_Or_AtTime = 0x00000020, // Time_Or_Chapter_Search
195 UOP_FLAG_PlayPrev_Or_Replay_Chapter = 0x00000040, // Prev_Or_Top_PG_Search
196 UOP_FLAG_PlayNext_Chapter = 0x00000080, // Next_PG_Search
197 UOP_FLAG_Play_Forwards = 0x00000100, // Forward_Scan
198 UOP_FLAG_Play_Backwards = 0x00000200, // Backward_Scan
199 UOP_FLAG_ShowMenu_Title = 0x00000400, // Title_Menu_Call
200 UOP_FLAG_ShowMenu_Root = 0x00000800, // Root_Menu_Call
201 UOP_FLAG_ShowMenu_SubPic = 0x00001000, // SubPic_Menu_Call
202 UOP_FLAG_ShowMenu_Audio = 0x00002000, // Audio_Menu_Call
203 UOP_FLAG_ShowMenu_Angle = 0x00004000, // Angle_Menu_Call
204 UOP_FLAG_ShowMenu_Chapter = 0x00008000, // Chapter_Menu_Call
205 UOP_FLAG_Resume = 0x00010000, // Resume
206 UOP_FLAG_Select_Or_Activate_Button = 0x00020000, // Button_Select_Or_Activate
207 UOP_FLAG_Still_Off = 0x00040000, // Still_Off
208 UOP_FLAG_Pause_On = 0x00080000, // Pause_On
209 UOP_FLAG_Select_Audio_Stream = 0x00100000, // Audio_Stream_Change
210 UOP_FLAG_Select_SubPic_Stream = 0x00200000, // SubPic_Stream_Change
211 UOP_FLAG_Select_Angle = 0x00400000, // Angle_Change
212 UOP_FLAG_Select_Karaoke_Audio_Presentation_Mode = 0x00800000, // Karaoke_Audio_Pres_Mode_Change
213 UOP_FLAG_Select_Video_Mode_Preference = 0x01000000 // Video_Pres_Mode_Change
214 } VALID_UOP_FLAG ;
215
216 typedef enum {
217 DVD_CMD_FLAG_None = 0x00000000,
218 DVD_CMD_FLAG_Flush = 0x00000001,
219 DVD_CMD_FLAG_SendEvents = 0x00000002,
220 DVD_CMD_FLAG_Block = 0x00000004, // block end
221 DVD_CMD_FLAG_StartWhenRendered = 0x00000008, // command "start" when the first frame is rendered
222 DVD_CMD_FLAG_EndAfterRendered = 0x00000010, // command "ends" after the last frame is rendered
223 } DVD_CMD_FLAGS;
224
225 // For IDVDControl2::SetOption flags
226 typedef enum {
227 DVD_ResetOnStop = 1, // default TRUE
228 DVD_NotifyParentalLevelChange = 2, // default FALSE
229 DVD_HMSF_TimeCodeEvents = 3, // default FALSE (send DVD_CURRENT_TIME events)
230 } DVD_OPTION_FLAG;
231
232 typedef enum {
233 DVD_Relative_Upper = 1,
234 DVD_Relative_Lower = 2,
235 DVD_Relative_Left = 3,
236 DVD_Relative_Right = 4
237 } DVD_RELATIVE_BUTTON;
238
239 // Parental Level Information
240 typedef enum tagDVD_PARENTAL_LEVEL
241 {
242 DVD_PARENTAL_LEVEL_8 = 0x8000,
243 DVD_PARENTAL_LEVEL_7 = 0x4000,
244 DVD_PARENTAL_LEVEL_6 = 0x2000,
245 DVD_PARENTAL_LEVEL_5 = 0x1000,
246 DVD_PARENTAL_LEVEL_4 = 0x0800,
247 DVD_PARENTAL_LEVEL_3 = 0x0400,
248 DVD_PARENTAL_LEVEL_2 = 0x0200,
249 DVD_PARENTAL_LEVEL_1 = 0x0100
250 } DVD_PARENTAL_LEVEL;
251
252
253 typedef enum tagDVD_AUDIO_LANG_EXT
254 {
255 DVD_AUD_EXT_NotSpecified =0,
256 DVD_AUD_EXT_Captions =1,
257 DVD_AUD_EXT_VisuallyImpaired =2,
258 DVD_AUD_EXT_DirectorComments1 =3,
259 DVD_AUD_EXT_DirectorComments2 =4,
260 } DVD_AUDIO_LANG_EXT;
261
262 typedef enum tagDVD_SUBPICTURE_LANG_EXT
263 {
264 DVD_SP_EXT_NotSpecified =0,
265 DVD_SP_EXT_Caption_Normal =1,
266 DVD_SP_EXT_Caption_Big =2,
267 DVD_SP_EXT_Caption_Children =3,
268 DVD_SP_EXT_CC_Normal =5,
269 DVD_SP_EXT_CC_Big =6,
270 DVD_SP_EXT_CC_Children =7,
271 DVD_SP_EXT_Forced =9,
272 DVD_SP_EXT_DirectorComments_Normal =13,
273 DVD_SP_EXT_DirectorComments_Big =14,
274 DVD_SP_EXT_DirectorComments_Children =15,
275 } DVD_SUBPICTURE_LANG_EXT;
276
277 typedef enum tagDVD_AUDIO_APPMODE
278 {
279 DVD_AudioMode_None = 0, // no special mode
280 DVD_AudioMode_Karaoke = 1,
281 DVD_AudioMode_Surround = 2,
282 DVD_AudioMode_Other = 3,
283 } DVD_AUDIO_APPMODE;
284
285 typedef enum tagDVD_AUDIO_FORMAT
286 {
287 DVD_AudioFormat_AC3 = 0,
288 DVD_AudioFormat_MPEG1 = 1,
289 DVD_AudioFormat_MPEG1_DRC = 2, // MPEG1 with dynamic range control
290 DVD_AudioFormat_MPEG2 = 3,
291 DVD_AudioFormat_MPEG2_DRC = 4, // MPEG2 with dynamic range control
292 DVD_AudioFormat_LPCM = 5,
293 DVD_AudioFormat_DTS = 6,
294 DVD_AudioFormat_SDDS = 7,
295 DVD_AudioFormat_Other = 8
296 } DVD_AUDIO_FORMAT;
297
298 // flags for SelectKaraokeAudioPresentationMode
299 typedef enum tagDVD_KARAOKE_DOWNMIX
300 {
301 DVD_Mix_0to0 = 0x0001, // unused - reserved for future use
302 DVD_Mix_1to0 = 0x0002, // unused - reserved for future use
303 DVD_Mix_2to0 = 0x0004,
304 DVD_Mix_3to0 = 0x0008,
305 DVD_Mix_4to0 = 0x0010,
306 DVD_Mix_Lto0 = 0x0020, // mix auxillary L to channel 0 (left speaker)
307 DVD_Mix_Rto0 = 0x0040, // mix auxillary R to channel 0 (left speaker)
308
309 DVD_Mix_0to1 = 0x0100, // unused - reserved for future use
310 DVD_Mix_1to1 = 0x0200, // unused - reserved for future use
311 DVD_Mix_2to1 = 0x0400,
312 DVD_Mix_3to1 = 0x0800,
313 DVD_Mix_4to1 = 0x1000,
314 DVD_Mix_Lto1 = 0x2000, // mix auxillary L to channel 1 (right speaker)
315 DVD_Mix_Rto1 = 0x4000, // mix auxillary R to channel 1 (right speaker)
316 } DVD_KARAOKE_DOWNMIX;
317
318
319 typedef struct tagDVD_AudioAttributes
320 {
321 DVD_AUDIO_APPMODE AppMode;
322 BYTE AppModeData;
323 DVD_AUDIO_FORMAT AudioFormat; // Use GetKaraokeAttributes()
324 LCID Language; // 0 if no language is present
325 DVD_AUDIO_LANG_EXT LanguageExtension; // (captions, if for children etc)
326 BOOL fHasMultichannelInfo; // multichannel attributes are present (Use GetMultiChannelAudioAttributes())
327 DWORD dwFrequency; // in hertz (48k, 96k)
328 BYTE bQuantization; // resolution (16, 20, 24 bits etc), 0 is unknown
329 BYTE bNumberOfChannels; // 5.1 AC3 has 6 channels
330 DWORD dwReserved[2];
331 } DVD_AudioAttributes;
332
333 typedef struct tagDVD_MUA_MixingInfo
334 {
335 // surround sound mixing information applied when:
336 // AppMode = DVD_AudioMode_Surround
337 // AudioFormat = DVD_AudioFormat_LPCM,
338 // fHasMultichannelInfo=1 modes are all on
339 //
340 BOOL fMixTo0;
341 BOOL fMixTo1;
342
343 //
344 BOOL fMix0InPhase;
345 BOOL fMix1InPhase;
346
347 DWORD dwSpeakerPosition; // see ksmedia.h: SPEAKER_FRONT_LEFT, SPEAKER_FRONT_RIGHT, etc
348 } DVD_MUA_MixingInfo;
349
350 // The alpha coeff is used to mix to ACH0 and beta is used to mix to ACH1
351 //
352 // In general:
353 // ACH0 = coeff[0].alpha * value[0] + coeff[1].alpha * value[1] + ...
354 // ACH1 = coeff[0].beta * value[0] + coeff[1].beta * value[1] + ...
355 typedef struct tagDVD_MUA_Coeff
356 {
357 double log2_alpha; // actual coeff = 2^alpha
358 double log2_beta; // actual coeff = 2^beta
359 } DVD_MUA_Coeff;
360
361 typedef struct tagDVD_MultichannelAudioAttributes
362 {
363 // actual Data for each data stream
364 DVD_MUA_MixingInfo Info[8];
365 DVD_MUA_Coeff Coeff[8];
366 } DVD_MultichannelAudioAttributes;
367
368 // bitwise OR of these flags descript the contents of each channel
369 typedef enum tagDVD_KARAOKE_CONTENTS
370 {
371 DVD_Karaoke_GuideVocal1 = 0x0001,
372 DVD_Karaoke_GuideVocal2 = 0x0002,
373 DVD_Karaoke_GuideMelody1 = 0x0004,
374 DVD_Karaoke_GuideMelody2 = 0x0008,
375 DVD_Karaoke_GuideMelodyA = 0x0010,
376 DVD_Karaoke_GuideMelodyB = 0x0020,
377 DVD_Karaoke_SoundEffectA = 0x0040,
378 DVD_Karaoke_SoundEffectB = 0x0080
379 } DVD_KARAOKE_CONTENTS;
380
381 typedef enum tagDVD_KARAOKE_ASSIGNMENT
382 {
383 DVD_Assignment_reserved0 = 0,
384 DVD_Assignment_reserved1 = 1,
385 DVD_Assignment_LR = 2, // left right
386 DVD_Assignment_LRM = 3, // left right middle
387 DVD_Assignment_LR1 = 4, // left right audio1
388 DVD_Assignment_LRM1 = 5, // left right middle audio1
389 DVD_Assignment_LR12 = 6, // left right audio1 audio2
390 DVD_Assignment_LRM12 = 7 // left right middle audio1 audio2
391 } DVD_KARAOKE_ASSIGNMENT;
392
393 typedef struct tagDVD_KaraokeAttributes
394 {
395 BYTE bVersion;
396 BOOL fMasterOfCeremoniesInGuideVocal1;
397 BOOL fDuet; // false = solo
398 DVD_KARAOKE_ASSIGNMENT ChannelAssignment;
399 WORD wChannelContents[8]; // logical OR of DVD_KARAOKE_CONTENTS
400 } DVD_KaraokeAttributes;
401
402 typedef enum tagDVD_VIDEO_COMPRESSION
403 {
404 DVD_VideoCompression_Other = 0,
405 DVD_VideoCompression_MPEG1 = 1,
406 DVD_VideoCompression_MPEG2 = 2,
407 } DVD_VIDEO_COMPRESSION;
408
409 typedef struct tagDVD_VideoAttributes
410 {
411 BOOL fPanscanPermitted; // if a 4x3 display, can be shown as PanScan
412 BOOL fLetterboxPermitted; // if a 4x3 display, can be shown as Letterbox
413 ULONG ulAspectX; // 4x3 or 16x9
414 ULONG ulAspectY;
415 ULONG ulFrameRate; // 50hz or 60hz
416 ULONG ulFrameHeight; // 525 (60hz) or 625 (50hz)
417 DVD_VIDEO_COMPRESSION Compression;// MPEG1 or MPEG2
418
419 BOOL fLine21Field1InGOP; // true if there is user data in field 1 of GOP of video stream
420 BOOL fLine21Field2InGOP; // true if there is user data in field 1 of GOP of video stream
421
422 ULONG ulSourceResolutionX; // X source resolution (352,704, or 720)
423 ULONG ulSourceResolutionY; // Y source resolution (240,480, 288 or 576)
424
425 BOOL fIsSourceLetterboxed; // subpictures and highlights (e.g. subtitles or menu buttons) are only
426 // displayed in the active video area and cannot be displayed in the top/bottom 'black' bars
427 BOOL fIsFilmMode; // for 625/50hz systems, is film mode (true) or camera mode (false)
428 } DVD_VideoAttributes;
429
430 typedef enum tagDVD_SUBPICTURE_TYPE
431 {
432 DVD_SPType_NotSpecified = 0,
433 DVD_SPType_Language = 1,
434 DVD_SPType_Other = 2,
435 } DVD_SUBPICTURE_TYPE;
436
437 typedef enum tagDVD_SUBPICTURE_CODING
438 {
439 DVD_SPCoding_RunLength = 0,
440 DVD_SPCoding_Extended = 1,
441 DVD_SPCoding_Other = 2,
442 } DVD_SUBPICTURE_CODING;
443
444 typedef struct tagDVD_SubpictureAttributes
445 {
446 DVD_SUBPICTURE_TYPE Type;
447 DVD_SUBPICTURE_CODING CodingMode;
448 LCID Language;
449 DVD_SUBPICTURE_LANG_EXT LanguageExtension;
450 } DVD_SubpictureAttributes;
451
452 typedef enum tagDVD_TITLE_APPMODE
453 {
454 DVD_AppMode_Not_Specified = 0, // no special mode
455 DVD_AppMode_Karaoke = 1,
456 DVD_AppMode_Other = 3,
457 } DVD_TITLE_APPMODE;
458
459 typedef struct tagDVD_TitleMainAttributes
460 {
461 // for Titles
462 DVD_TITLE_APPMODE AppMode;
463
464 // Attributes about the 'main' video of the menu or title
465 DVD_VideoAttributes VideoAttributes;
466
467 ULONG ulNumberOfAudioStreams;
468 DVD_AudioAttributes AudioAttributes[8];
469 // present if the multichannel bit is set in the corresponding stream's audio attributes
470 DVD_MultichannelAudioAttributes MultichannelAudioAttributes[8];
471
472 ULONG ulNumberOfSubpictureStreams;
473 DVD_SubpictureAttributes SubpictureAttributes[32];
474 } DVD_TitleAttributes;
475
476 typedef struct tagDVD_MenuAttributes
477 {
478 // for VMG only
479 BOOL fCompatibleRegion[8]; // indeces 0..7 correspond to regions 1..8
480
481 // Attributes about the main menu (VMGM or VTSM)
482 DVD_VideoAttributes VideoAttributes;
483
484 BOOL fAudioPresent;
485 DVD_AudioAttributes AudioAttributes;
486
487 BOOL fSubpicturePresent;
488 DVD_SubpictureAttributes SubpictureAttributes;
489 } DVD_MenuAttributes;
490
491 //==========================================================================
492 //==========================================================================
493 // IDvdControl interface -- Basic DVD-Video playback control.
494 // This modeled after the app control of a player specified in Annex J
495 // of the DVD Video spec. IDvdInfo can be used to get information useful
496 // in using IDvdControl
497 //==========================================================================
498 //==========================================================================
499
500 [
501 object,
502 uuid(A70EFE61-E2A3-11d0-A9BE-00AA0061BE93),
503 pointer_default(unique)
504 ]
505
506 interface IDvdControl : IUnknown {
507 import "unknwn.idl";
508
509 // TitlePlay
510 // Start playing the specified title number.
511 // Title numbers range between 1 and 99.
512 HRESULT TitlePlay
513 ( [in] ULONG ulTitle
514 );
515
516 // ChapterPlay
517 // Start playing at the specified chapter (or part-of-title)
518 // within the specified title. Chapters range from 1 to 999.
519 HRESULT ChapterPlay
520 ( [in] ULONG ulTitle,
521 [in] ULONG ulChapter
522 );
523
524 // TimePlay
525 // Start playing at the specified time within the specified title.
526 // NOTE: the actual start time will be the closest sync point before
527 // or equal to the specified frame number.
528 HRESULT TimePlay
529 ( [in] ULONG ulTitle,
530 [in] ULONG bcdTime // use DVD_TIMECODE. Framerate code is ignored.
531 );
532
533 // StopForResume
534 // Stop playback after saving resume information. DVD Navigator transfers to the DVD "Stop State" and
535 // (same as DVD_DOMAIN_Stop), but filter graph remains in DirectShow's Run state.
536 HRESULT StopForResume();
537
538 // GoUp
539 // Start playback of the program chain currently authored as the "GoUp_PGCN".
540 HRESULT GoUp();
541
542 // TimeSearch
543 // Start playing at the specified time within the current title.
544 // NOTE: the actual start time will be the closest sync point before
545 // or equal to the specified frame number.
546 HRESULT TimeSearch
547 ( [in] ULONG bcdTime // use DVD_TIMECODE. Framerate code is ignored.
548 );
549
550 // ChapterSearch
551 // Start playing at the specified chapter (or part-of-title) within
552 // the current title.
553 HRESULT ChapterSearch
554 ( [in] ULONG ulChapter
555 );
556
557 // PrevPGSearch
558 // Start playing at the beginning of the previous DVD "program".
559 // For One-Sequential_PGC_Titles (which includes most titles) a program
560 // is equivalent to a chapter, otherwise a program is part of a chapter.
561 HRESULT PrevPGSearch();
562
563 // TopPGSearch
564 // Start playing from the beginning of they current program.
565 HRESULT TopPGSearch();
566
567 // NextPGSearch
568 // Start playing from the beginning of the next program.
569 HRESULT NextPGSearch();
570
571 // ForwardScan
572 // Set forward play at the specified speed.
573 // dwSpeed == 1 is normal play
574 // dwSpeed < 1 is slow play
575 // dwSpeed > 1 is fast play
576 // For dwSpeed != 1, audio and subpicture is muted.
577 HRESULT ForwardScan
578 ( [in] double dwSpeed
579 );
580
581 // BackwardScan
582 // Set reverse play at the specified speed.
583 // dwSpeed == 1 is normal play speed in reverse
584 // dwSpeed < 1 is slow play in reverse
585 // dwSpeed > 1 is fast play in reverse
586 // For reverse play, audio and subpicture are always muted.
587 HRESULT BackwardScan
588 ( [in] double dwSpeed
589 );
590
591 // MenuCall
592 // Start playback of the Menu specified by an enum DVD_MENU_ID.
593 HRESULT MenuCall
594 ( [in] DVD_MENU_ID MenuID
595 );
596
597 // Resume
598 // Returns to title playback in DVD_DOMAIN_Title. This is typically
599 // done after MenuCall which puts the DVD Navigator in
600 // DVD_DOMAIN_VideoTitleSetMenu or DVD_DOMAIN_VideoManagerMenu.
601 HRESULT Resume();
602
603 // UpperButtonSelect
604 // Selects the button above the current button.
605 // "Selecting" a DVD button simply highlights the button but does
606 // not "Activate" the button. Selecting is the Windows equivalent
607 // to tabbing to a button but not pressing the space bar or enter key.
608 // Activating is the Windows equivalent of pressing the space bar or
609 // enter key after tabbing to a button.
610 HRESULT UpperButtonSelect();
611
612 // LowerButtonSelect
613 // Selects the button below the current button.
614 HRESULT LowerButtonSelect();
615
616 // LeftButtonSelect
617 // Selects the button to the left of the current button.
618 HRESULT LeftButtonSelect();
619
620 // RightButtonSelect
621 // Selects the button to the right of the current button.
622 HRESULT RightButtonSelect();
623
624 // ButtonActivate
625 // Activates current button.
626 HRESULT ButtonActivate();
627
628 // ButtonSelectAndActivate
629 // Selects and then activates the button specified by the user.
630 // ulButton is intended to be a number entered by a user corresponding
631 // to button numbers currently displayed on screen.
632 // Button numbers range from 1 to 36.
633 HRESULT ButtonSelectAndActivate
634 ( [in] ULONG ulButton
635 );
636
637 // StillOff
638 // Releases any current still if there are no available buttons.
639 // This includes VOBU stills, Cell stills, and PGC stills, whether the
640 // still is infinite. When buttons are available, stills are released by
641 // activating a button. Note this does not release a Pause.
642 HRESULT StillOff();
643
644 // PauseOn
645 // Freezes playback and any internal timers. This is similar to
646 // IMediaControl::Pause()
647 HRESULT PauseOn();
648
649 // PauseOff
650 // Releases a Pause.
651 HRESULT PauseOff();
652
653 // MenuLanguageSelect
654 // Selects the default language for menus. Languages are specified with
655 // Windows standard LCIDs. LCIDs can be created from ISO-639 codes with
656 // MAKELCID( MAKELANGID(wISO639LangID ,SUBLANG_DEFAULT ), SORT_DEFAULT )
657 // NOTE: MAKELANGID seems to have a bug so 'jp' may have to be used
658 // instead of 'ja' for the ISO639 code for Japanese.
659 // MenuLanguageSelect may only called from the DVD Stop state (DVD_DOMAIN_Stop).
660 HRESULT MenuLanguageSelect
661 ( [in] LCID Language
662 );
663
664 // AudioStreamChange
665 // Changes the current audio stream.
666 HRESULT AudioStreamChange
667 ( [in] ULONG ulAudio
668 );
669
670 // SubpictureStreamChange
671 // Changes the current subpicture stream number to nSubpic, and toggles
672 // its display.
673 HRESULT SubpictureStreamChange
674 ( [in] ULONG ulSubPicture,
675 [in] BOOL bDisplay
676 );
677
678 // AngleChange
679 // Changes the current angle number.
680 HRESULT AngleChange
681 ( [in] ULONG ulAngle
682 );
683
684 // ParentalLevelSelect
685 // Selects the current player parental level between 1 and 8. The
686 // defined parental levels are listed below :
687 //
688 // Level Rating
689 // ----- ------
690 //
691 // 1 G
692 // 3 PG
693 // 4 PG13
694 // 6 R
695 // 7 NC17
696 // Higher levels can play lower level content; lower levels cannot play
697 // higher level content. The DVD Navigator provides no restriction on
698 // setting the parental level. DVD player application may enforce
699 // restriction on parental level setting, such as password protection for
700 // raising the current parental level. Parental Management is disabled in
701 // the Navigator by default.
702 //
703 // Note : To disable parental management, pass 0xffffffff for ulParentalLevel
704 // If parental management is disabled, then the player will play the
705 // first PGC in a parental block regardless of parental IDs.
706 //
707 HRESULT ParentalLevelSelect
708 ( [in] ULONG ulParentalLevel
709 );
710
711 // ParentalCountrySelect
712 // Sets the country in which to interpret the the Parental Level.
713 // The country specified using the Alpha-2 code of the ISO-3166 standard,
714 // with the addition of 'ZZ'
715 HRESULT ParentalCountrySelect
716 ( [in] WORD wCountry
717 );
718
719 // KaraokeAudioPresentationModeChange
720 // Sets the Karaoke audio mode.
721 // NOTE: This and all other Karoke support is currently not implemented.
722 HRESULT KaraokeAudioPresentationModeChange
723 ( [in] ULONG ulMode
724 );
725
726 // VideoModePreferrence
727 // The user can specify the preferred display mode that should
728 // be used to display content. The parameter is a ULONG that has
729 // one of the values defined in DVD_PREFERRED_DISPLAY_MODE
730 HRESULT VideoModePreferrence
731 ( [in] ULONG ulPreferredDisplayMode
732 );
733
734 // SetRoot
735 // Sets the root directory containing the DVD-Video volume.
736 // Can only be called from the DVD Stop State (DVD_DOMAIN_Stop).
737 // If the root directory is not successfully set before
738 // IMediaControl::Play is called, the first drive starting from c:
739 // containing a VIDEO_TS directory in the top level directory
740 // will be used as the root.
741 HRESULT SetRoot
742 ( [in] LPCWSTR pszPath
743 );
744
745 // MouseActivate
746 // This is typically called in response to a mouse click.
747 // The specified point within the display window is to see if it is
748 // within a current DVD button's highlight rect. If it is, that
749 // button is first selected, then activated.
750 // NOTE: DVD Buttons do not all necessarily have highlight rects,
751 // button rects can overlap, and button rects do not always
752 // correspond to the visual representation of DVD buttons.
753 HRESULT MouseActivate // typically called after a mouse click
754 ( [in] POINT point
755 );
756
757 // MouseSelect
758 // This is typically called in response to a mouse move within the
759 // display window.
760 // The specified point within the display window is to see if it is
761 // within a current DVD button's highlight rect. If it is, that
762 // button is selected.
763 // NOTE: DVD Buttons do not all necessarily have highlight rects,
764 // button rects can overlap, and button rects do not always
765 // correspond to the visual representation of DVD buttons.
766 HRESULT MouseSelect // typically called after a mouse move
767 ( [in] POINT point
768 );
769
770 // ChapterPlayAutoStop
771 // Start playing at the specified chapter within the specified title
772 // and play the number of chapters specified by the third parameter.
773 // Chapters range from 1 to 999.
774 HRESULT ChapterPlayAutoStop
775 ( [in] ULONG ulTitle, // title number
776 [in] ULONG ulChapter, // chapter number to start playback
777 [in] ULONG ulChaptersToPlay // number of chapters to play from the start chapter
778 );
779 }
780
781
782
783 //==========================================================================
784 //==========================================================================
785 // IDvdInfo interface -- allow an app to query for attributes of available
786 // DVD titles and DVD player status. Also allow for control of a DVD
787 // player beyond Annex J in the DVD spec.
788 //==========================================================================
789 //==========================================================================
790
791 [
792 object,
793 uuid(A70EFE60-E2A3-11d0-A9BE-00AA0061BE93),
794 pointer_default(unique)
795 ]
796
797 interface IDvdInfo : IUnknown {
798 import "unknwn.idl";
799
800 // GetCurrentDomain
801 // Returns the current DVD Domain of the DVD player.
802 HRESULT GetCurrentDomain
803 ( [out] DVD_DOMAIN *pDomain
804 );
805
806 // GetCurrentLocation
807 // Returns information sufficient to restart playback of a video
808 // from the current playback location in titles that don't explicitly
809 // disable seeking to the current location.
810 HRESULT GetCurrentLocation
811 ( [out] DVD_PLAYBACK_LOCATION *pLocation
812 );
813
814 // GetTotalTitleTime
815 // Return the total playback time for the current title. Only works
816 // for One_Sequential_PGC_Titles.
817 HRESULT GetTotalTitleTime
818 ( [out] ULONG * pulTotalTime // use DVD_TIMECODE.
819 );
820
821 // GetCurrentButton
822 // Indicates the number of currently available buttons and the current
823 // selected button number. If buttons are not present it returns 0 for
824 // both pulButtonsAvailable and pulCurrentButton
825 HRESULT GetCurrentButton
826 ( [out] ULONG * pulButtonsAvailable,
827 [out] ULONG * pulCurrentButton
828 );
829
830 // GetCurrentAngle
831 // Indicates the number of currently available angles and the current
832 // selected angle number. If *pnAnglesAvailable==1, then the current
833 // video is not multiangle.
834 HRESULT GetCurrentAngle
835 ( [out] ULONG * pulAnglesAvailable,
836 [out] ULONG * pulCurrentAngle
837 );
838
839 // GetCurrentAudio
840 // Indicates the number of currently available audio streams and
841 // the current selected audio stream number.
842 // This only work when in DVD_DOMAIN_Title.
843 HRESULT GetCurrentAudio
844 ( [out] ULONG * pulStreamsAvailable,
845 [out] ULONG * pulCurrentStream
846 );
847
848 // GetCurrentSubpicture
849 // Indicates the number of currently available subpicture streams,
850 // the current selected subpicture stream number, and if the
851 // subpicture display is currently disabled. Subpicture streams
852 // authored as Forcedly Activated stream will be displayed even if
853 // subpicture display has been disabled by the app with
854 // IDVDControl::SubpictureChangeStream.
855 // This only work when in DVD_DOMAIN_Title.
856 HRESULT GetCurrentSubpicture
857 ( [out] ULONG * pulStreamsAvailable,
858 [out] ULONG * pulCurrentStream,
859 [out] BOOL * pIsDisabled
860 );
861
862 // GetCurrentUOPS
863 // Indicates which IDVDControl methods are currently valid. DVD titles
864 // can enable or disable individual user operations at almost any point
865 // during playback.
866 HRESULT GetCurrentUOPS
867 ( [out] VALID_UOP_SOMTHING_OR_OTHER * pUOP
868 );
869
870 // GetAllSPRMs
871 // Returns the current contents of all System Parameter Registers.
872 // See DVD-Video spec for use of individual registers.
873 HRESULT GetAllSPRMs
874 ( [out] SPRMARRAY * pRegisterArray
875 );
876
877 // GetAllGPRMs
878 // Returns the current contents of all General Parameter Registers.
879 // Use of GPRMs is title specific.
880 HRESULT GetAllGPRMs
881 ( [out] GPRMARRAY * pRegisterArray
882 );
883
884 // GetAudioLanguage
885 // Returns the language of the specified stream within the current
886 // title. Does not return languages for menus. Sets *pLanguage=0 if
887 // if the stream does not include language.
888 // Use GetLocaleInfo(*pLanguage, LOCALE_SENGLANGUAGE, pszString, cbSize)
889 // to create a human readable string name from the result LCID.
890 HRESULT GetAudioLanguage
891 ( [in] ULONG ulStream,
892 [out] LCID * pLanguage
893 );
894
895 // GetSubpictureLanguage
896 // Returns the language of the specified stream within the current
897 // title. Does not return languages for menus. Sets *pLanguage=0 if
898 // if the stream does not include language.
899 // Use GetLocaleInfo(*pLanguage, LOCALE_SENGLANGUAGE, pszString, cbSize)
900 // to create a human readable string name from the result LCID.
901 HRESULT GetSubpictureLanguage
902 ( [in] ULONG ulStream,
903 [out] LCID * pLanguage
904 );
905
906 // GetTitleAttributes
907 // Returns attributes of all video, audio, and subpicture
908 // streams for the specified title including menus.
909 // If nTitle == 0xffffffff, attributes for the current title are returned.
910 HRESULT GetTitleAttributes
911 ( [in] ULONG ulTitle, // requested title number
912 [out] DVD_ATR * pATR
913 );
914
915 // GetVMGAttributes
916 // Returns attributes of all video, audio, and subpicture
917 // streams for Video Manager Menus. Some menus, such as the DVD_MENU_Title
918 // are in a separate group of streams called the VMG (Video Manager) and
919 // are not associated with any particular title number.
920 HRESULT GetVMGAttributes
921 ( [out] DVD_ATR * pATR
922 );
923
924 // GetCurrentVideoAttributes
925 // Returns the video attributes for the current title or menu.
926 HRESULT GetCurrentVideoAttributes
927 ( [out] DVD_VideoATR *pATR
928 );
929
930 // GetCurrentAudioAttributes
931 // Returns the video attributes for the stream in the current
932 // title or menu.
933 HRESULT GetCurrentAudioAttributes
934 ( [out] DVD_AudioATR *pATR
935 );
936
937 // GetCurrentSubpictureAttributes
938 // Returns the video attributes for the stream in the current
939 // title or menu.
940 HRESULT GetCurrentSubpictureAttributes
941 ( [out] DVD_SubpictureATR *pATR
942 );
943
944
945 // GetCurrentVolumeInfo
946 // Returns current DVD volume info.
947 HRESULT GetCurrentVolumeInfo
948 ( [out] ULONG *pulNumOfVol, // number of volumes (disc sides?) in a volume set
949 [out] ULONG *pulThisVolNum, // volume number for this root directory
950 [out] DVD_DISC_SIDE *pSide, // current disc side
951 [out] ULONG *pulNumOfTitles // number of titles available in this volume
952 );
953
954
955 // GetDVDTextInfo
956 // Returns the TXTDT_MG structure, which can contain text descriptions for title
957 // name, volume name, producer name, vocalist name, etc. in various languages.
958 // refer to Section 4.1.6 and Annex A of the DVD-Video spec.
959 // If the buffer size passed in is insufficient (for example if cbBufSize==0),
960 // then E_OUTOFMEMORY is returned, and *pcbActualSize is set to the required size.
961 HRESULT GetDVDTextInfo
962 ( [out, size_is(ulBufSize)] BYTE *pTextManager,
963 [in] ULONG ulBufSize, // buffer size passed in
964 [out] ULONG *pulActualSize // amount of actual data return
965 );
966
967 // GetPlayerParentalLevel
968 // Returns the current parental level and the current country code
969 // that has been set in the system registers in player.
970 // See Table 3.3.4-1 of the DVD-Video spec for the defined parental levels.
971 // Valid Parental Levels = 1..8 if parental management is enabled
972 // 0xffffffff if parental management is disabled
973 // See ISO3166 : Alpha-2 Code for the country codes.
974 HRESULT GetPlayerParentalLevel
975 ( [out] ULONG *pulParentalLevel, // current parental level
976 [out] ULONG *pulCountryCode // current country code
977 );
978
979 // GetNumberOfChapters
980 // Returns the number of chapters that are defined for a
981 // given title.
982 HRESULT GetNumberOfChapters
983 ( [in] ULONG ulTitle, // Title for which number of chapters is requested
984 [out] ULONG *pulNumberOfChapters // Number of chapters for the specified title
985 );
986
987 // GetTitleParentalLevels
988 // Returns the parental levels that are defined for a
989 // particular title. pParentalLevels will be combination
990 // of DVD_PARENTAL_LEVEL_8, DVD_PARENTAL_LEVEL_6, or
991 // DVD_PARENTAL_LEVEL_1 "OR"ed together
992 HRESULT GetTitleParentalLevels
993 ( [in] ULONG ulTitle, // Title for which parental levels are requested
994 [out] ULONG *pulParentalLevels // Parental levels defined for the title "OR"ed together
995 );
996
997 // GetRoot
998 // Returns the root directory that is set in the player. If a valid root
999 // has been found, it returns the root string. Otherwise, it returns 0 for
1000 // pcbActualSize indicating that a valid root directory has not been found
1001 // or initialized.
1002 //
1003 // !!! used to return LPTSTR. interface was changed to return
1004 // LPSTR (ansi) for compatibility. COM APIs should pass with
1005 // UNICODE strings only.
1006 //
1007 HRESULT GetRoot
1008 ( [out, size_is(ulBufSize)] LPSTR pRoot, // pointer to buffer to get root string
1009 [in] ULONG ulBufSize, // size of buffer passed in
1010 [out] ULONG *pulActualSize // size of actual data returned
1011 );
1012 }
1013
1014 //==========================================================================
1015 //==========================================================================
1016 // IDvdCmd interface -- the IDVDControl2 command sequencing object.
1017 //
1018 // For the IDVDControl2 interface, the application can track the status of
1019 // commands that have been issued to the navigator. Each command is identified
1020 // by an IDvdCmd object. The IDvdCmd object stores the results of the command
1021 // at both the start (when the command has begun processing) and the end after
1022 // it has completed. It also allows the app to synchronize with the processing
1023 // of the command.
1024 //
1025 // The command object also allows the app to uniquely identify and correlate
1026 // completion events (if it prefers to process events in a message loop instead
1027 // of creating another process).
1028 //
1029 // Allows the app to track the status of an issued command to the nav.
1030 //==========================================================================
1031 //==========================================================================
1032
1033 [
1034 object,
1035 uuid(5a4a97e4-94ee-4a55-9751-74b5643aa27d),
1036 pointer_default(unique)
1037 ]
1038
1039 interface IDvdCmd : IUnknown {
1040 import "unknwn.idl";
1041
1042 //
1043 // WaitForStart
1044 //
1045 // Blocks the application until the command has begun.
1046 //
1047 HRESULT WaitForStart();
1048
1049 //
1050 // WaitForEnd
1051 //
1052 // Blocks until the command has completed or has been cancelled.
1053 HRESULT WaitForEnd();
1054 }
1055
1056 //==========================================================================
1057 //==========================================================================
1058 // IDvdState interface -- the State state object.
1059 //
1060 // Whenever the application wishes to save or restore a location on the disc,
1061 // it needs to store the DVD state into an object.
1062 // The State object supports the IPersistStream
1063 //
1064 //==========================================================================
1065 //==========================================================================
1066
1067 [
1068 object,
1069 uuid(86303d6d-1c4a-4087-ab42-f711167048ef),
1070 pointer_default(unique)
1071 ]
1072
1073 interface IDvdState : IUnknown
1074 {
1075 //
1076 // GetDiscID
1077 //
1078 // Returns the disc ID from which the bookmark was made.
1079 //
1080 HRESULT GetDiscID
1081 ( [out] ULONGLONG* pullUniqueID ); // 64-bit unique id for the disc
1082
1083 //
1084 // GetParentalLevel
1085 //
1086 // Returns the state's parental level
1087 //
1088 HRESULT GetParentalLevel
1089 ( [out] ULONG* pulParentalLevel );
1090 }
1091
1092 //==========================================================================
1093 //==========================================================================
1094 // IDvdControl2 interface -- Basic DVD-Video playback control.
1095 // This is modeled after the app control of a player specified in Annex J
1096 // of the DVD Video spec. IDvdInfo2 can be used to get information useful
1097 // in using IDvdControl2
1098 //==========================================================================
1099 //==========================================================================
1100
1101 [
1102 object,
1103 uuid(33BC7430-EEC0-11D2-8201-00A0C9D74842),
1104 pointer_default(unique)
1105 ]
1106
1107 interface IDvdControl2 : IUnknown {
1108 import "unknwn.idl";
1109
1110 // PlayTitle
1111 //
1112 // Start playing from the beginning of the specified title number.
1113 // Annex J: Title_Play
1114 // Title numbers range between 1 and 99.
1115 HRESULT PlayTitle
1116 ( [in] ULONG ulTitle,
1117 [in] DWORD dwFlags,
1118 [out] IDvdCmd** ppCmd
1119 );
1120
1121 // PlayChapterInTitle
1122 //
1123 // Start playing from the beginning of the given chapter (or part-of-title) number
1124 // within the specified title number.
1125 // Annex J: PTT_Play
1126 // Title numbers range between 1 and 99.
1127 // Chapters range from 1 to 999.
1128 HRESULT PlayChapterInTitle
1129 ( [in] ULONG ulTitle,
1130 [in] ULONG ulChapter,
1131 [in] DWORD dwFlags,
1132 [out] IDvdCmd** ppCmd
1133 );
1134
1135 // PlayAtTimeInTitle
1136 //
1137 // Start playing from the specified time within the specified title number.
1138 // NOTE: the actual start time will be the closest sync point before
1139 // or equal to the specified frame number.
1140 // Annex J: Time_Play
1141 // Title numbers range between 1 and 99.
1142 HRESULT PlayAtTimeInTitle
1143 ( [in] ULONG ulTitle,
1144 [in] DVD_HMSF_TIMECODE* pStartTime,
1145 [in] DWORD dwFlags,
1146 [out] IDvdCmd** ppCmd
1147 );
1148
1149 // Stop
1150 // Stop playback by transferring DVD Navigator to the DVD "Stop State" (same
1151 // as DVD_DOMAIN_Stop), but filter graph remains in DirectShow's Run state.
1152 // Annex J: Stop
1153 HRESULT Stop();
1154
1155 // ReturnFromSubmenu
1156 //
1157 // Stop playback of current program chain (PGC) and start playing the PGC
1158 // specified by "GoUp_PGCN".in the PGCI.
1159 // If the GoUp_PGCN value is 0xFFFF the Resume() operation is carried out.
1160 // Annex J: GoUp
1161 HRESULT ReturnFromSubmenu(
1162 [in] DWORD dwFlags,
1163 [out] IDvdCmd** ppCmd );
1164
1165 // PlayAtTime
1166 // Start playing at the specified time within the current title.
1167 // NOTE: the actual start time will be the closest sync point before
1168 // or equal to the specified frame number.
1169 // Annex J: Time_Search
1170 // The time is in BCD format, passed in as a ULONG.
1171 HRESULT PlayAtTime
1172 ( [in] DVD_HMSF_TIMECODE* pTime,
1173 [in] DWORD dwFlags,
1174 [out] IDvdCmd** ppCmd
1175 );
1176
1177 // PlayChapter
1178 // Start playing at the specified chapter (or part-of-title) within
1179 // the current title.
1180 // Annex J: PTT_Search
1181 // Chapters range from 1 to 999.
1182 HRESULT PlayChapter
1183 ( [in] ULONG ulChapter,
1184 [in] DWORD dwFlags,
1185 [out] IDvdCmd** ppCmd
1186 );
1187
1188 // PlayPrevChapter
1189 // Start playing at the beginning of the previous DVD "program".
1190 // For One-Sequential_PGC_Titles (which includes most titles) a program
1191 // is equivalent to a chapter, otherwise a program is part of a chapter.
1192 // Annex J: PrevPG_Search
1193 HRESULT PlayPrevChapter(
1194 [in] DWORD dwFlags,
1195 [out] IDvdCmd** ppCmd );
1196
1197 // ReplayChapter
1198 // Start playing from the beginning of they current program.
1199 // Annex J: TopPG_Search
1200 HRESULT ReplayChapter(
1201 [in] DWORD dwFlags,
1202 [out] IDvdCmd** ppCmd );
1203
1204 // PlayNextChapter
1205 // Start playing from the beginning of the next program.
1206 // Annex J: NextPG_Search
1207 HRESULT PlayNextChapter(
1208 [in] DWORD dwFlags,
1209 [out] IDvdCmd** ppCmd );
1210
1211 // PlayForwards
1212 // Set forward play at the specified speed.
1213 // Annex J: Forward_Scan
1214 // dSpeed == 1 is normal play
1215 // dSpeed < 1 is slow play
1216 // dSpeed > 1 is fast play
1217 // For dSpeed != 1, audio and subpicture is muted.
1218 HRESULT PlayForwards
1219 ( [in] double dSpeed,
1220 [in] DWORD dwFlags,
1221 [out] IDvdCmd** ppCmd
1222 );
1223
1224 // PlayBackwards
1225 // Set reverse play at the specified speed.
1226 // Annex J: Backward_Scan
1227 // dSpeed == 1 is normal play speed in reverse
1228 // dSpeed < 1 is slow play in reverse
1229 // dSpeed > 1 is fast play in reverse
1230 // For reverse play, audio and subpicture are always muted.
1231 HRESULT PlayBackwards
1232 ( [in] double dSpeed,
1233 [in] DWORD dwFlags,
1234 [out] IDvdCmd** ppCmd
1235 );
1236
1237 // ShowMenu
1238 // Start playback of the Menu specified by an enum DVD_MENU_ID.
1239 // Annex J: Menu_Call
1240 HRESULT ShowMenu
1241 ( [in] DVD_MENU_ID MenuID,
1242 [in] DWORD dwFlags,
1243 [out] IDvdCmd** ppCmd
1244 );
1245
1246 // Resume
1247 // Returns to title playback in DVD_DOMAIN_Title. This is typically
1248 // done after MenuCall which puts the DVD Navigator in
1249 // DVD_DOMAIN_VideoTitleSetMenu or DVD_DOMAIN_VideoManagerMenu.
1250 // Annex J: Resume
1251 HRESULT Resume(
1252 [in] DWORD dwFlags,
1253 [out] IDvdCmd** ppCmd );
1254
1255 // SelectRelativeButton
1256 // Moves the selection highlight above, below, to the left of, or to the right of the
1257 // currently selected.
1258 // "Selecting" a DVD button simply highlights the button but does
1259 // not "Activate" the button. Selecting is the Windows equivalent
1260 // to tabbing to a button but not pressing the space bar or enter key.
1261 // Activating is the Windows equivalent of pressing the space bar or
1262 // enter key after tabbing to a button.
1263 // Annex J: Upper_button_Select, Lower_button_Select, Left_button_Select, Right_button_Select
1264 HRESULT SelectRelativeButton( DVD_RELATIVE_BUTTON buttonDir );
1265
1266 // ActivateButton
1267 // Activates current button.
1268 // Annex J: Button_Activate
1269 HRESULT ActivateButton();
1270
1271 // SelectButton
1272 // Selects a specific button (with the index from 1 to 36).
1273 // ulButton is intended to be a number entered by a user corresponding
1274 // to button numbers currently displayed on screen.
1275 // Button numbers range from 1 to 36.
1276 HRESULT SelectButton
1277 ( [in] ULONG ulButton
1278 );
1279
1280 // SelectAndActivateButton
1281 // Selects and then activates the button specified by the user.
1282 // ulButton is intended to be a number entered by a user corresponding
1283 // to button numbers currently displayed on screen.
1284 // Annex J: Button_Select_And_Activate
1285 // Button numbers range from 1 to 36.
1286 HRESULT SelectAndActivateButton
1287 ( [in] ULONG ulButton
1288 );
1289
1290 // StillOff
1291 // Releases any current still if there are no available buttons.
1292 // This includes VOBU stills, Cell stills, and PGC stills, whether the
1293 // still is infinite. When buttons are available, stills are released by
1294 // activating a button. Note this does not release a Pause.
1295 // Annex J: Still_Off
1296 HRESULT StillOff();
1297
1298 // Pause
1299 // Freezes / unfreezes playback and any internal timers. This is similar to
1300 // IMediaControl::Pause(), but not the same in effect as IMediaControl::Pause
1301 // puts the filter (all filters, if done to the graph) in paused state.
1302 // Annex J: Pause_On and Pause_Off
1303 // bState is TRUE or FALSE to indicate whether to do Puase_on/Pause_Off according
1304 // to Annex J terminology.
1305 HRESULT Pause
1306 ( [in] BOOL bState
1307 );
1308
1309 // SelectAudioStream
1310 // Changes the current audio stream to ulAudio.
1311 // Annex J: Audio_Stream_Change
1312 // Audio stream number ranges between 0 and 7 or DEFAULT_AUDIO_STREAM (15 - default based on default language & language extension)
1313 HRESULT SelectAudioStream
1314 ( [in] ULONG ulAudio,
1315 [in] DWORD dwFlags,
1316 [out] IDvdCmd** ppCmd
1317
1318 );
1319
1320 // SelectSubpictureStream
1321 // Changes the current subpicture stream number to ulSubPicture
1322 // Annex J: Sub-picture_Stream_Change (first param)
1323 // Subpicture stream number should be between 0 and 31 or 63.
1324 HRESULT SelectSubpictureStream
1325 ( [in] ULONG ulSubPicture,
1326 [in] DWORD dwFlags,
1327 [out] IDvdCmd** ppCmd
1328
1329 );
1330
1331 // SetSubpictureState
1332 // Turns on/off current subpicture stream display.
1333 // Annex J: Sub-picture_Stream_Change (second param)
1334 // Subpicture state is On or Off (TRUE or FALSE)
1335 HRESULT SetSubpictureState
1336 ( [in] BOOL bState,
1337 [in] DWORD dwFlags,
1338 [out] IDvdCmd** ppCmd
1339 );
1340
1341 // SelectAngle
1342 // Changes the current angle number.
1343 // Annex J: Angle_Change
1344 // Angle number is between 1 and 9.
1345 HRESULT SelectAngle
1346 ( [in] ULONG ulAngle,
1347 [in] DWORD dwFlags,
1348 [out] IDvdCmd** ppCmd
1349 );
1350
1351 // SelectParentalLevel
1352 // Selects the current player parental level.
1353 // Annex J: Parental_Level_Select
1354 // Parental level ranges between 1 and 8.
1355 // The defined parental levels are listed below :
1356 //
1357 // Level Rating
1358 // ----- ------
1359 // 1 G
1360 // 3 PG
1361 // 4 PG13
1362 // 6 R
1363 // 7 NC17
1364 // Higher levels can play lower level content; lower levels cannot play
1365 // higher level content. The DVD Navigator provides no restriction on
1366 // setting the parental level. DVD player application may enforce
1367 // restriction on parental level setting, such as password protection for
1368 // raising the current parental level. Parental Management is disabled in
1369 // the Navigator by default.
1370 //
1371 // Note : To disable parental management, pass 0xffffffff for ulParentalLevel
1372 // If parental management is disabled, then the player will play the
1373 // first PGC in a parental block regardless of parental IDs.
1374 //
1375 HRESULT SelectParentalLevel
1376 ( [in] ULONG ulParentalLevel
1377 );
1378
1379 // SelectParentalCountry
1380 // Sets the country in which to interpret the Parental Level.
1381 // Annex J: Parental_Country_Select
1382 // The country specified using the Alpha-2 code of the ISO-3166 standard,
1383 HRESULT SelectParentalCountry
1384 ( [in] BYTE bCountry[2]
1385 );
1386
1387 // SelectKaraokeAudioPresentationMode
1388 // Sets the Karaoke audio mode.
1389 // Annex J: Karaoke_Audio_Presentation_Mode_Change
1390 // NOTE: This and all other Karoke support is currently not implemented.
1391 // Mode represents the audio mixing mode for Karaoke (same info as SPRM11).
1392 // Use a bitwise OR of the bits in DVD_KARAOKE_DOWNMIX
1393 HRESULT SelectKaraokeAudioPresentationMode
1394 ( [in] ULONG ulMode
1395 );
1396
1397 // SelectVideoModePreference
1398 // The user can specify the (initial) preferred display mode (aspect ratio)
1399 // (wide / letterbox / pan-scan) that should be used to display content
1400 // (16 : 9).
1401 // Annex J: Video_Presentation_Mode_Change
1402 // The parameter is a ULONG that has one of the values defined in
1403 // DVD_PREFERRED_DISPLAY_MODE
1404 HRESULT SelectVideoModePreference
1405 ( [in] ULONG ulPreferredDisplayMode
1406 );
1407
1408 // SetDVDDirectory
1409 // Sets the root directory containing the DVD-Video volume.
1410 // Can only be called from the DVD Stop State (DVD_DOMAIN_Stop).
1411 // If the root directory is not successfully set before
1412 // IMediaControl::Play is called, the first drive starting from c:
1413 // containing a VIDEO_TS directory in the top level directory
1414 // will be used as the root.
1415 HRESULT SetDVDDirectory
1416 ( [in] LPCWSTR pszwPath
1417 );
1418
1419 // ActivateAtPosition
1420 // This is typically called in response to a mouse click.
1421 // The specified point within the display window is to see if it is
1422 // within a current DVD button's highlight rect. If it is, that
1423 // button is first selected, then activated.
1424 // NOTE: DVD Buttons do not all necessarily have highlight rects,
1425 // button rects can overlap, and button rects do not always
1426 // correspond to the visual representation of DVD buttons.
1427 HRESULT ActivateAtPosition // typically called after a mouse click
1428 ( [in] POINT point
1429 );
1430
1431 // SelectAtPosition
1432 // This is typically called in response to a mouse move within the
1433 // display window.
1434 // The specified point within the display window is to see if it is
1435 // within a current DVD button's highlight rect. If it is, that
1436 // button is selected.
1437 // NOTE: DVD Buttons do not all necessarily have highlight rects,
1438 // button rects can overlap, and button rects do not always
1439 // correspond to the visual representation of DVD buttons.
1440 HRESULT SelectAtPosition // typically called after a mouse move
1441 ( [in] POINT point
1442 );
1443
1444 // PlayChaptersAutoStop
1445 // Start playing at the specified chapter within the specified title
1446 // and play the number of chapters specified by the third parameter.
1447 // Then the playback stops by sending an event EC_DVD_CHAPTER_AUTOSTOP.
1448 // Title ranges from 1 to 99.
1449 // Chapter (and number of chapters to play) ranges from 1 to 999.
1450 HRESULT PlayChaptersAutoStop
1451 ( [in] ULONG ulTitle, // title number
1452 [in] ULONG ulChapter, // chapter number to start playback
1453 [in] ULONG ulChaptersToPlay, // number of chapters to play from the start chapter
1454 [in] DWORD dwFlags,
1455 [out] IDvdCmd** ppCmd
1456 );
1457
1458 // AcceptParentalLevelChange
1459 //
1460 // Application's way of informing the Navigator that the required parental
1461 // level change indicated through a previous event was accepted or rejected
1462 // by the app (and unblock the Navigator).
1463 //
1464 // FALSE - reject the disc's request to change the current parental level.
1465 // TRUE - change the parental level as required by the disc.
1466 HRESULT AcceptParentalLevelChange
1467 ( [in] BOOL bAccept
1468 );
1469
1470 // SetOption(flag, true/false )
1471 // Flags:
1472 //
1473 // DVD_ResetOnStop
1474 // Disable reset of the Navigator's internal state on the
1475 // subsequent IMediaControl::Stop() call(s).
1476 //
1477 // FALSE - Navigator does not reset its state on the subsequent Stop calls
1478 // (play from the current location on next Run call).
1479 // TRUE - (default) Navigator resets its state on the subsequent Stop call
1480 // (play from the first play PGC on the Run call after the Stop).
1481 //
1482 // DVD_NotifyParentalLevelChange
1483 //
1484 // Allows the application to indicate to the Navigator that it wants to control
1485 // parent level change (e.g., through a dialog box) and indicate the acceptance
1486 // or rejection of the new parental level to the Navigator through
1487 // AcceptParentalLevelChange().
1488 //
1489 // FALSE - disable (default). Always reject request by the disc to change parental level.
1490 // TRUE - enable. Navigator will send the app a 'EC_DVD_PARENTAL_LEVEL_CHANGE' event
1491 // and block until AcceptParentalLevelChange() is called by the app.
1492 //
1493 // DVD_HMSF_TimeCodeEvents
1494 //
1495 // Lets the application specify to the Navigator if it wants to get the new time
1496 // event EC_DVD_CURRENT_HMSF_TIME with the HMSF format rather than the older
1497 // EC_DVD_CURRENT_TIME events.
1498 //
1499 // FALSE - disable (default). Older EC_DVD_CURRENT_TIME events are returned.
1500 // TRUE - enable. Navigator will send the app EC_DVD_CURRENT_HMSF_TIME events.
1501
1502 HRESULT SetOption
1503 ( [in] DVD_OPTION_FLAG flag,
1504 [in] BOOL fState
1505 );
1506
1507 // SetState
1508 //
1509 // The navigator will use the location information in the given state object to restore
1510 // the navigator's position to a specific location on the disc.
1511 // A valid state object is returned by either calling GetState(), or by using
1512 // "CoCreateInstance( CLSID_DVDState, NULL, CLSCTX_INPROC_SERVER, IID_IDvdState, (void **) ppState )"
1513 // to create a state object, followed by pState->IPersist::Load() to read it from memory or disk.
1514 //
1515 HRESULT SetState
1516 ( [in] IDvdState* pState,
1517 [in] DWORD dwFlags,
1518 [out] IDvdCmd** ppCmd
1519
1520 );
1521
1522 // PlayPeriodInTitleAutoStop
1523 //
1524 // Start playing from the specified time within the specified title number until the specified end time.
1525 // NOTE: the actual start and end times will be the closest sync points before
1526 // or equal to the specified frame number.
1527 // Annex J: Time_Play for a limited range
1528 // Title numbers range between 1 and 99.
1529 HRESULT PlayPeriodInTitleAutoStop
1530 ( [in] ULONG ulTitle,
1531 [in] DVD_HMSF_TIMECODE* pStartTime,
1532 [in] DVD_HMSF_TIMECODE* pEndTime,
1533 [in] DWORD dwFlags,
1534 [out] IDvdCmd** ppCmd
1535 );
1536
1537 // SetGPRM
1538 // Sets the current contents of a DVD General Parameter Register.
1539 // Use of GPRMs is title specific.
1540
1541 HRESULT SetGPRM
1542 ( [in] ULONG ulIndex,
1543 [in] WORD wValue,
1544 [in] DWORD dwFlags,
1545 [out] IDvdCmd** ppCmd
1546 );
1547
1548 // SelectDefaultMenuLanguage
1549 // Selects the default language for menus.
1550 // Languages are specified with Windows standard LCIDs. LCIDs can be created
1551 // from ISO-639 codes with
1552 // MAKELCID( MAKELANGID(wISO639LangID ,SUBLANG_DEFAULT ), SORT_DEFAULT ).
1553 // SelectMenuLanguage may only called from the DVD Stop state (DVD_DOMAIN_Stop).
1554 // Annex J: Menu_Language_Select
1555 //
1556 // NOT TRUE ANYMORE:
1557 // NOTE: MAKELANGID seems to have a bug so 'jp' may have to be used
1558 // instead of 'ja' for the ISO639 code for Japanese.
1559 HRESULT SelectDefaultMenuLanguage
1560 ( [in] LCID Language
1561 );
1562
1563 // SelectDefaultAudioLanguage
1564 // Selects the default audio language.
1565 // Languages are specified with Windows standard LCIDs.
1566 HRESULT SelectDefaultAudioLanguage
1567 ( [in] LCID Language,
1568 [in] DVD_AUDIO_LANG_EXT audioExtension
1569 );
1570
1571 // SelectDefaultSubpictureLanguage
1572 // Selects the default subpicture language.
1573 // Languages are specified with Windows standard LCIDs.
1574 HRESULT SelectDefaultSubpictureLanguage
1575 ( [in] LCID Language,
1576 [in] DVD_SUBPICTURE_LANG_EXT subpictureExtension
1577 );
1578 }
1579
1580
1581 //==========================================================================
1582 //==========================================================================
1583 // IDvdInfo2 interface -- allows an app to query for attributes of available
1584 // DVD titles and DVD player status. Also allows for control of a DVD
1585 // player beyond Annex J in the DVD spec.
1586 //==========================================================================
1587 //==========================================================================
1588
1589 enum DVD_TextStringType {
1590 // disc structure (0x00..0x0f)
1591 DVD_Struct_Volume = 0x01,
1592 DVD_Struct_Title = 0x02,
1593 DVD_Struct_ParentalID = 0x03,
1594 DVD_Struct_PartOfTitle = 0x04,
1595 DVD_Struct_Cell = 0x05,
1596 // stream (0x10..0x1f)
1597 DVD_Stream_Audio = 0x10,
1598 DVD_Stream_Subpicture = 0x11,
1599 DVD_Stream_Angle = 0x12,
1600 // channel in stream (0x20..0x2f)
1601 DVD_Channel_Audio = 0x20,
1602
1603 // Application information
1604 // General (0x30..0x37)
1605 DVD_General_Name = 0x30,
1606 DVD_General_Comments = 0x31,
1607
1608 // Title (0x38..0x3f)
1609 DVD_Title_Series = 0x38,
1610 DVD_Title_Movie = 0x39,
1611 DVD_Title_Video = 0x3a,
1612 DVD_Title_Album = 0x3b,
1613 DVD_Title_Song = 0x3c,
1614 DVD_Title_Other = 0x3f,
1615
1616 // Title (sub) (0x40..0x47)
1617 DVD_Title_Sub_Series = 0x40,
1618 DVD_Title_Sub_Movie = 0x41,
1619 DVD_Title_Sub_Video = 0x42,
1620 DVD_Title_Sub_Album = 0x43,
1621 DVD_Title_Sub_Song = 0x44,
1622 DVD_Title_Sub_Other = 0x47,
1623
1624 // Title (original) (0x48..0x4f)
1625 DVD_Title_Orig_Series = 0x48,
1626 DVD_Title_Orig_Movie = 0x49,
1627 DVD_Title_Orig_Video = 0x4a,
1628 DVD_Title_Orig_Album = 0x4b,
1629 DVD_Title_Orig_Song = 0x4c,
1630 DVD_Title_Orig_Other = 0x4f,
1631
1632 // Other info (0x50..0x57)
1633 DVD_Other_Scene = 0x50,
1634 DVD_Other_Cut = 0x51,
1635 DVD_Other_Take = 0x52,
1636
1637 // Language 0x58..0x5b
1638 // Work 0x5c..0x6b
1639 // Character 0x6c..0x8f
1640 // Data 0x90..0x93
1641 // Karaoke 0x94..0x9b
1642 // Category 0x9c..0x9f
1643 // Lyrics 0xa0..0xa3
1644 // Document 0xa4..0xa7
1645 // Others 0xa8..0xab
1646 // Reserved 0xac..0xaf
1647 // Admin 0xb0..0xb7
1648 // more admin 0xb8..0xc0
1649 // Reserved 0xd0..0xdf
1650 // vendor 0xe0..0xef
1651 // extension 0xf0..0xf7
1652 // reserved 0xf8..0xff
1653 };
1654
1655 enum DVD_TextCharSet {
1656 DVD_CharSet_Unicode = 0,
1657 DVD_CharSet_ISO646 = 1,
1658 DVD_CharSet_JIS_Roman_Kanji = 2,
1659 DVD_CharSet_ISO8859_1 = 3,
1660 DVD_CharSet_ShiftJIS_Kanji_Roman_Katakana = 4
1661 };
1662
1663 cpp_quote ("#define DVD_TITLE_MENU 0x000")
1664 cpp_quote ("#define DVD_STREAM_DATA_CURRENT 0x800")
1665 cpp_quote ("#define DVD_STREAM_DATA_VMGM 0x400")
1666 cpp_quote ("#define DVD_STREAM_DATA_VTSM 0x401")
1667 cpp_quote ("#define DVD_DEFAULT_AUDIO_STREAM 0x0f")
1668
1669 // DVD Decoder Caps data
1670 typedef struct tagDVD_DECODER_CAPS
1671 {
1672 DWORD dwSize ; // size of this struct
1673 DWORD dwAudioCaps ; // bits indicating audio support (AC3, DTS, SDDS, LPCM etc.) of decoder
1674 double dFwdMaxRateVideo ; // max data rate for video going forward
1675 double dFwdMaxRateAudio ; // ... .. .. ... audio ... ...
1676 double dFwdMaxRateSP ; // ... .. .. ... SP ... ...
1677 double dBwdMaxRateVideo ; // if smooth reverse is not available, this will be set to 0
1678 double dBwdMaxRateAudio ; // -- ditto --
1679 double dBwdMaxRateSP ; // -- ditto --
1680 DWORD dwRes1 ; // reserved for future expansion
1681 DWORD dwRes2 ; // -- ditto --
1682 DWORD dwRes3 ; // -- ditto --
1683 DWORD dwRes4 ; // -- ditto --
1684 } DVD_DECODER_CAPS ;
1685
1686 // Bits for decoder's audio format support
1687 cpp_quote ("#define DVD_AUDIO_CAPS_AC3 0x00000001")
1688 cpp_quote ("#define DVD_AUDIO_CAPS_MPEG2 0x00000002")
1689 cpp_quote ("#define DVD_AUDIO_CAPS_LPCM 0x00000004")
1690 cpp_quote ("#define DVD_AUDIO_CAPS_DTS 0x00000008")
1691 cpp_quote ("#define DVD_AUDIO_CAPS_SDDS 0x00000010")
1692
1693
1694 [
1695 object,
1696 uuid(34151510-EEC0-11D2-8201-00A0C9D74842),
1697 pointer_default(unique)
1698 ]
1699
1700 interface IDvdInfo2 : IUnknown {
1701 import "unknwn.idl";
1702
1703 // GetCurrentDomain
1704 // Returns the current DVD Domain of the DVD player.
1705 HRESULT GetCurrentDomain
1706 ( [out] DVD_DOMAIN *pDomain
1707 );
1708
1709 // GetCurrentLocation
1710 // Returns information sufficient to restart playback of a video
1711 // from the current playback location in titles that don't explicitly
1712 // disable seeking to the current location.
1713 HRESULT GetCurrentLocation
1714 ( [out] DVD_PLAYBACK_LOCATION2 *pLocation
1715 );
1716
1717 // GetTotalTitleTime
1718 // Returns the total playback time for the current title. Only works
1719 // for One_Sequential_PGC_Titles.
1720 // THIS SHOULD CHANGE, RIGHT?
1721 HRESULT GetTotalTitleTime
1722 ( [out] DVD_HMSF_TIMECODE* pTotalTime,
1723 [out] ULONG* ulTimeCodeFlags // union of DVD_TIMECODE_FLAGS
1724 );
1725
1726 // GetCurrentButton
1727 // Indicates the number of currently available buttons and the current
1728 // selected button number. If buttons are not present it returns 0 for
1729 // both pulButtonsAvailable and pulCurrentButton
1730 HRESULT GetCurrentButton
1731 ( [out] ULONG * pulButtonsAvailable,
1732 [out] ULONG * pulCurrentButton
1733 );
1734
1735 // GetCurrentAngle
1736 // Indicates the number of currently available angles and the current
1737 // selected angle number. If *pulAnglesAvailable is returned as 1 then
1738 // the current content is not multiangle.
1739 HRESULT GetCurrentAngle
1740 ( [out] ULONG * pulAnglesAvailable,
1741 [out] ULONG * pulCurrentAngle
1742 );
1743
1744 // GetCurrentAudio
1745 // Indicates the number of currently available audio streams and
1746 // the currently selected audio stream number.
1747 // This only works inside the Title domain.
1748 HRESULT GetCurrentAudio
1749 ( [out] ULONG * pulStreamsAvailable,
1750 [out] ULONG * pulCurrentStream
1751 );
1752
1753 // GetCurrentSubpicture
1754 // Indicates the number of currently available subpicture streams,
1755 // the currently selected subpicture stream number, and if the
1756 // subpicture display is currently disabled. Subpicture streams
1757 // authored as "Forcedly Activated" stream will be displayed even if
1758 // subpicture display has been disabled by the app with
1759 // IDVDControl::SetSubpictureState.
1760 // This only works inside the Title domain.
1761 HRESULT GetCurrentSubpicture
1762 ( [out] ULONG * pulStreamsAvailable,
1763 [out] ULONG * pulCurrentStream,
1764 [out] BOOL * pbIsDisabled
1765 );
1766
1767 // GetCurrentUOPS
1768 // Indicates which IDVDControl methods (Annex J user operations) are
1769 // currently valid. DVD titles can enable or disable individual user
1770 // operations at almost any point during playback.
1771 HRESULT GetCurrentUOPS
1772 ( [out] ULONG * pulUOPs
1773 );
1774
1775 // GetAllSPRMs
1776 // Returns the current contents of all DVD System Parameter Registers.
1777 // See DVD-Video spec for use of individual registers.
1778 // WE SHOULD DOC THE SPRMs RATHER THAN ASKING TO REFER TO DVD SPEC.
1779 HRESULT GetAllSPRMs
1780 ( [out] SPRMARRAY * pRegisterArray
1781 );
1782
1783 // GetAllGPRMs
1784 // Returns the current contents of all DVD General Parameter Registers.
1785 // Use of GPRMs is title specific.
1786 // WE SHOULD DOC THE GPRMs RATHER THAN ASKING TO REFER TO DVD SPEC.
1787 HRESULT GetAllGPRMs
1788 ( [out] GPRMARRAY * pRegisterArray
1789 );
1790
1791 // GetAudioLanguage
1792 // Returns the language of the specified stream within the current title.
1793 // Does not return languages for menus. Returns *pLanguage as 0 if the
1794 // stream does not include language.
1795 // Use Win32 API GetLocaleInfo(*pLanguage, LOCALE_SENGLANGUAGE, pszString, cbSize)
1796 // to create a human readable string name from the returned LCID.
1797 HRESULT GetAudioLanguage
1798 ( [in] ULONG ulStream,
1799 [out] LCID * pLanguage
1800 );
1801
1802 // GetSubpictureLanguage
1803 // Returns the language of the specified stream within the current title.
1804 // Does not return languages for menus. Returns *pLanguage=0 as 0 if the
1805 // stream does not include language.
1806 // Use Win32 API GetLocaleInfo(*pLanguage, LOCALE_SENGLANGUAGE, pszString, cbSize)
1807 // to create a human readable string name from the returned LCID.
1808 HRESULT GetSubpictureLanguage
1809 ( [in] ULONG ulStream,
1810 [out] LCID * pLanguage
1811 );
1812
1813 // GetTitleAttributes
1814 // Returns attributes of all video, audio, and subpicture streams for the
1815 // specified title including menus.
1816 // If 0xffffffff is specified as ulTitle, attributes for the current title
1817 // are returned.
1818 HRESULT GetTitleAttributes
1819 ( [in] ULONG ulTitle, // requested title number
1820 [out] DVD_MenuAttributes * pMenu,
1821 [out] DVD_TitleAttributes * pTitle
1822 );
1823
1824 // GetVMGAttributes
1825 // Returns attributes of all video, audio, and subpicture
1826 // streams for Video Manager Menus. This method suppliments GetTitleAttributes()
1827 // for some menus, such as the Title menu, which are in a separate group of
1828 // streams called the VMG (Video Manager) and are not associated with any
1829 // particular title number.
1830 HRESULT GetVMGAttributes
1831 ( [out] DVD_MenuAttributes* pATR
1832 );
1833
1834 // GetCurrentVideoAttributes
1835 // Returns the video attributes for the current title or menu.
1836 //
1837 HRESULT GetCurrentVideoAttributes
1838 ( [out] DVD_VideoAttributes * pATR
1839 );
1840
1841 // GetAudioAttributes
1842 // Returns the audio attributes for the specified stream in the current title
1843 // or menu.
1844 HRESULT GetAudioAttributes
1845 ( [in] ULONG ulStream,
1846 [out] DVD_AudioAttributes *pATR
1847 );
1848
1849 // GetKaraokeChannelContents
1850 // Returns the karaoke contents of each channel of the specified stream in the current title
1851 // or menu.
1852 HRESULT GetKaraokeAttributes
1853 ( [in] ULONG ulStream,
1854 [out] DVD_KaraokeAttributes* pAttributes
1855 );
1856
1857 // GetSubpictureAttributes
1858 // Returns the subpicture attributes for the specified stream in the current
1859 // title or menu.
1860 HRESULT GetSubpictureAttributes
1861 ( [in] ULONG ulStream,
1862 [out] DVD_SubpictureAttributes *pATR
1863 );
1864
1865 // GetDVDVolumeInfo
1866 // Returns current DVD volume information.
1867 HRESULT GetDVDVolumeInfo
1868 ( [out] ULONG *pulNumOfVolumes, // number of volumes (disc sides?) in a volume set
1869 [out] ULONG *pulVolume, // volume number for current DVD directory
1870 [out] DVD_DISC_SIDE *pSide, // current disc side
1871 [out] ULONG *pulNumOfTitles // number of titles available in this volume
1872 );
1873
1874 // GetDVDTextNumberOfLanguages
1875 // Returns the number of text languages for the current DVD directory.
1876 // Should return some error code if no root directory is found.
1877 HRESULT GetDVDTextNumberOfLanguages
1878 ( [out] ULONG * pulNumOfLangs
1879 );
1880
1881 // GetDVDTextLanguageInfo
1882 // Returns the text languages information (number of strings, language code,
1883 // char set) for the specified language index.
1884 // Should return some error code if an invalid text index is specified.
1885 HRESULT GetDVDTextLanguageInfo
1886 ( [in] ULONG ulLangIndex,
1887 [out] ULONG* pulNumOfStrings,
1888 [out] LCID* pLangCode,
1889 [out] enum DVD_TextCharSet * pbCharacterSet
1890 );
1891
1892 // GetDVDTextStringAsNative
1893 // Returns the text string as an array of bytes for the specified language
1894 // index.and string index.
1895 // Should return some error code if an invalid text or string index is specified.
1896 // It also just returns the length of the string if pchBuffer is specified as NULL.
1897 HRESULT GetDVDTextStringAsNative
1898 ( [in] ULONG ulLangIndex,
1899 [in] ULONG ulStringIndex,
1900 [out] BYTE* pbBuffer,
1901 [in] ULONG ulMaxBufferSize,
1902 [out] ULONG* pulActualSize,
1903 [out] enum DVD_TextStringType* pType
1904 );
1905
1906 // GetDVDTextStringAsUnicode
1907 // Returns the text string in Unicode for the specified language index.and string index.
1908 // Should return some error code if an invalid text or string index is specified.
1909 // It also just returns the length of the string if pchBuffer is specified as NULL.
1910 HRESULT GetDVDTextStringAsUnicode
1911 ( [in] ULONG ulLangIndex,
1912 [in] ULONG ulStringIndex,
1913 [out] WCHAR* pchwBuffer,
1914 [in] ULONG ulMaxBufferSize,
1915 [out] ULONG* pulActualSize,
1916 [out] enum DVD_TextStringType* pType
1917 );
1918
1919 // GetPlayerParentalLevel
1920 // Returns the current parental level and the current country code that has
1921 // been set in the system registers in player.
1922 // See Table 3.3.4-1 of the DVD-Video spec for the defined parental levels.
1923 // Valid Parental Levels range from 1 to 8 if parental management is enabled.
1924 // Returns 0xffffffff if parental management is disabled
1925 // See ISO3166 : Alpha-2 Code for the country codes.
1926 HRESULT GetPlayerParentalLevel
1927 ( [out] ULONG *pulParentalLevel, // current parental level
1928 [out] BYTE pbCountryCode[2] // current country code
1929 );
1930
1931 // GetNumberOfChapters
1932 // Returns the number of chapters that are defined for a
1933 // given title.
1934 HRESULT GetNumberOfChapters
1935 ( [in] ULONG ulTitle, // Title for which number of chapters is requested
1936 [out] ULONG *pulNumOfChapters // Number of chapters for the specified title
1937 );
1938
1939 // GetTitleParentalLevels
1940 // Returns the parental levels that are defined for a particular title.
1941 // pulParentalLevels will be combination of DVD_PARENTAL_LEVEL_8,
1942 // DVD_PARENTAL_LEVEL_6, or DVD_PARENTAL_LEVEL_1 OR-ed together
1943 HRESULT GetTitleParentalLevels
1944 ( [in] ULONG ulTitle, // Title for which parental levels are requested
1945 [out] ULONG *pulParentalLevels // Parental levels defined for the title "OR"ed together
1946 );
1947
1948 // GetDVDDirectory
1949 // Returns the root directory that is set in the player. If a valid root
1950 // has been found, it returns the root string. Otherwise, it returns 0 for
1951 // pcbActualSize indicating that a valid root directory has not been found
1952 // or initialized.
1953 //
1954 // !!! used to return LPTSTR. interface was changed to return
1955 // LPSTR (ansi) for compatibility. COM APIs should pass with
1956 // UNICODE strings only.
1957 //
1958 HRESULT GetDVDDirectory
1959 ( [out, size_is(ulMaxSize)] LPWSTR pszwPath, // pointer to buffer to get root string
1960 [in] ULONG ulMaxSize, // size of buffer in WCHARs passed in
1961 [out] ULONG *pulActualSize // size of actual data returned (in WCHARs)
1962 );
1963
1964
1965 // IsAudioStreamEnabled
1966 //
1967 // Determines if the specified audio stream is enabled/disabled in the current PGC.
1968 //
1969 // ulStreamNum - audio stream number to test
1970 // pbEnabled - where to place the result
1971 HRESULT IsAudioStreamEnabled
1972 ( [in] ULONG ulStreamNum, // stream number to test
1973 [out] BOOL *pbEnabled // returned state
1974 );
1975
1976 // GetDiscID
1977 //
1978 // If pszwPath is specified as NULL, DVD Navigator will use the current path
1979 // that would be returned by GetDVDDirectory() at this point.
1980 //
1981 // Returns a 64-bit identification number for the specified DVD disc.
1982 HRESULT GetDiscID
1983 ( [in] LPCWSTR pszwPath, // root path (should we rather use const WCHAR*?)
1984 [out] ULONGLONG* pullDiscID // 64-bit unique id for the disc
1985 ) ;
1986
1987 // GetState
1988 //
1989 // The navigator will create a new state object and save the current location into it.
1990 // The state object can be used to restore the navigator the saved location at a later time.
1991 // A new IDvdState object is created (with a single AddRef) and returned in *pStateData.
1992 // The object must be Released() when the application is finished with it.
1993 //
1994 HRESULT GetState
1995 ( [out] IDvdState **pStateData // returned object
1996 );
1997
1998 //
1999 // GetMenuLanguages
2000 //
2001 // Navigator gets all of the menu languages for the VMGM and VTSM domains.
2002 //
2003 HRESULT GetMenuLanguages
2004 ( [out] LCID *pLanguages, // data buffer (NULL returns #languages)
2005 [in] ULONG ulMaxLanguages, // maxiumum number of languages to retrieve
2006 [out] ULONG *pulActualLanguages // actual number of languages retrieved
2007 );
2008
2009 //
2010 // GetButtonAtPosition
2011 //
2012 // This is typically called in response to a mouse move within the
2013 // display window.
2014 // It returns the button located at the specified point within the display window.
2015 // If no button is present at that position, then VFW_E_DVD_NO_BUTTON is returned.
2016 // Button indices start at 1.
2017 //
2018 // NOTE: DVD Buttons do not all necessarily have highlight rects,
2019 // button rects can overlap, and button rects do not always
2020 // correspond to the visual representation of DVD buttons.
2021 HRESULT GetButtonAtPosition // typically called after a mouse move
2022 ( [in] POINT point,
2023 [out] ULONG *pulButtonIndex
2024 );
2025
2026 //
2027 // GetCmdFromEvent
2028 //
2029 // This method maps an EC_DVD_CMD_BEGIN/COMPLETE/CANCEL event's lParam1 into an AddRef'd
2030 // IDvdCmd pointer. You must Release the returned pointer. NULL is returned if the function
2031 // fails.
2032 //
2033 HRESULT GetCmdFromEvent
2034 ( [in] LONG_PTR lParam1,
2035 [out] IDvdCmd **pCmdObj
2036 );
2037
2038 // GetDefaultMenuLanguage
2039 // Returns the default language for menus.
2040 HRESULT GetDefaultMenuLanguage
2041 ( [out] LCID * pLanguage
2042 );
2043
2044 // GetDefaultAudioLanguage
2045 // Gets the default audio language.
2046 // Languages are specified with Windows standard LCIDs.
2047 HRESULT GetDefaultAudioLanguage
2048 ( [out] LCID* pLanguage,
2049 [out] DVD_AUDIO_LANG_EXT* pAudioExtension
2050 );
2051
2052 // GetDefaultSubpictureLanguage
2053 // Gets the default subpicture language.
2054 // Languages are specified with Windows standard LCIDs.
2055 HRESULT GetDefaultSubpictureLanguage
2056 ( [out] LCID* pLanguage,
2057 [out] DVD_SUBPICTURE_LANG_EXT* pSubpictureExtension
2058 );
2059
2060 //
2061 // GetDecoderCaps:
2062 // Retrieves the DVD decoder's details about max data rate for video, audio
2063 // and subpicture (going backward and forward) as well as support for various
2064 // types of audio (AC3, MPEG2, DTS, SDDS, LPCM).
2065 //
2066 HRESULT GetDecoderCaps
2067 ( [out] DVD_DECODER_CAPS *pCaps
2068 ) ;
2069
2070 //
2071 // GetButtonRect:
2072 // Retrieves the coordinates for a given button number
2073 //
2074 HRESULT GetButtonRect
2075 ( [in] ULONG ulButton,
2076 [out] RECT *pRect
2077 ) ;
2078
2079 // IsSubpictureStreamEnabled
2080 //
2081 // Determines if the specified subpicture stream is enabled/disabled in the current PGC.
2082 //
2083 // ulStreamNum - Subpicture stream number to test
2084 // pbEnabled - where to place the result
2085 HRESULT IsSubpictureStreamEnabled
2086 ( [in] ULONG ulStreamNum, // stream number to test
2087 [out] BOOL *pbEnabled // returned state
2088 );
2089 }
2090
2091
2092
2093 //==========================================================================
2094 //==========================================================================
2095 //
2096 // typedefs used by IDvdGraphBuilder interface.
2097 //
2098 //==========================================================================
2099 //==========================================================================
2100
2101 typedef enum _AM_DVD_GRAPH_FLAGS {
2102 AM_DVD_HWDEC_PREFER = 0x01, // default
2103 AM_DVD_HWDEC_ONLY = 0x02,
2104 AM_DVD_SWDEC_PREFER = 0x04,
2105 AM_DVD_SWDEC_ONLY = 0x08,
2106 AM_DVD_NOVPE = 0x100
2107 } AM_DVD_GRAPH_FLAGS ;
2108
2109 typedef enum _AM_DVD_STREAM_FLAGS {
2110 AM_DVD_STREAM_VIDEO = 0x01,
2111 AM_DVD_STREAM_AUDIO = 0x02,
2112 AM_DVD_STREAM_SUBPIC = 0x04
2113 } AM_DVD_STREAM_FLAGS ;
2114
2115 typedef struct {
2116 HRESULT hrVPEStatus ; // VPE mixing error code (0 => success)
2117 BOOL bDvdVolInvalid ; // Is specified DVD volume invalid?
2118 BOOL bDvdVolUnknown ; // Is DVD volume to be played not specified/not found?
2119 BOOL bNoLine21In ; // video decoder doesn't produce line21 (CC) data
2120 BOOL bNoLine21Out ; // can't show decoded line21 data as CC on video
2121 int iNumStreams ; // number of DVD streams to render
2122 int iNumStreamsFailed ; // number of streams failed to render
2123 DWORD dwFailedStreamsFlag ; // combination of flags to indicate failed streams
2124 } AM_DVD_RENDERSTATUS ;
2125
2126
2127 //
2128 // IDvdGraphBuilder interface to build a filter graph for DVD-Video playback.
2129 //
2130
2131 [
2132 object,
2133 local,
2134 uuid(FCC152B6-F372-11d0-8E00-00C04FD7C08B),
2135 pointer_default(unique)
2136 ]
2137 interface IDvdGraphBuilder : IUnknown {
2138
2139 // Returns the IGraphBuilder interface for the filtergraph used by the
2140 // CDvdGraphBuilder object.
2141 // Remember to *ppGB->Release() when you're done with it
2142 HRESULT GetFiltergraph
2143 ( [out] IGraphBuilder **ppGB
2144 ) ;
2145
2146 // Gets specific interface pointers in the DVD-Video playback graph to
2147 // make DVD-Video playback development easier.
2148 // It helps get the following interfaces to control playback/show CC/
2149 // position window/control volume etc:
2150 // - IDvdControl, IDvdInfo
2151 // - IAMLine21Decoder
2152 // - IVideoWindow, IBasicVideo
2153 // - IBasicAudio
2154 // This method will return
2155 // a) E_INVALIDARG if ppvIF is invalid
2156 // b) E_NOINTERFACE if riid is an IID we don't know about
2157 // c) VFW_E_DVD_GRAPHNOTREADY if the graph has not been built through
2158 // RenderDvdVideoVolume() yet.
2159 // Remember to *ppvIF->Release() when you're done with it
2160 HRESULT GetDvdInterface
2161 ( [in] REFIID riid, // IID of the interface required
2162 [out] void **ppvIF // returns pointer to the required interface
2163 ) ;
2164
2165 // Builds a filter graph according to user specs for playing back a
2166 // DVD-Video volume.
2167 // This method returns S_FALSE if
2168 // 1. the graph has been either built, but either
2169 // a) VPE mixing doesn't work (app didn't use AM_DVD_NOVPE flag)
2170 // b) video decoder doesn't produce line21 data
2171 // c) line21 data couldn't be rendered (decoding/mixing problem)
2172 // d) the call specified an invalid volume path or DVD Nav couldn't
2173 // locate any DVD-Video volume to be played.
2174 // 2. some streams didn't render (completely), but the others have
2175 // been rendered so that the volume can be partially played back.
2176 // The status is indicated through the fields of the pStatus (out)
2177 // parameter.
2178 // About 1(a), the app will have enough info to tell the user that the
2179 // video won't be visible unless a TV is connected to the NTSC out
2180 // port of the DVD decoder (presumably HW in this case).
2181 // For case 1(b) & (c), the app "can" put up a warning/informative message
2182 // that closed captioning is not available because of the decoder.
2183 // 1(d) helps an app to ask the user to insert a DVD-Video disc if none
2184 // is specified/available in the drive when playback is started.
2185 // This method builds the graph even if
2186 // - an invalid DVD-Video volume is specified
2187 // - the caller uses lpwszPathName = NULL to make the DVD Nav to locate
2188 // the default volume to be played back, but DVD Nav doesn't find a
2189 // default DVD-Video volume to be played back.
2190 // An app can later specify the volume using IDvdControl::SetRoot()
2191 // method.
2192 // #2 will help the app indicate to the user that some of the streams
2193 // can't be played.
2194 //
2195 // The graph is built using filters based on the dwFlags value (to use
2196 // HW decoders or SW decoders or a mix of them).
2197 // The dwFlags value is one of the values in AM_DVD_GRAPH_FLAGS enum
2198 // type. The default value is AM_DVD_HWDEC_PREFER. None of the
2199 // AM_DVD_HWDEC_xxx or AM_DVD_SWDEC_xxx flags can be mixed. However
2200 // AM_DVD_NOVPE can be OR-ed with any of the AM_DVD_HWDEC_xxx flags.
2201 //
2202 // The method returns S_OK if the playback graph is built successfully
2203 // with all the streams completely rendered and a valid DVD-Video volume
2204 // is specified or a default one has been located.
2205 //
2206 // If the dwFlags specify conflicting options, E_INVALIDARG is returned.
2207 // If the graph building fails, the method returns one of the following
2208 // error codes:
2209 // VFW_E_DVD_RENDERFAIL, VFW_E_DVD_DECNOTENOUGH
2210 //
2211 HRESULT RenderDvdVideoVolume
2212 ( [in] LPCWSTR lpcwszPathName, // Can be NULL too
2213 [in] DWORD dwFlags, // 0 is the default (use max HW)
2214 [out] AM_DVD_RENDERSTATUS *pStatus // returns indications of ANY failure
2215 ) ;
2216 }
2217
2218
2219 //
2220 // DDraw Exclusive Mode Video standard COM interface for Overlay Mixer
2221 //
2222 [
2223 object,
2224 local,
2225 uuid(153ACC21-D83B-11d1-82BF-00A0C9696C8F),
2226 pointer_default(unique)
2227 ]
2228 interface IDDrawExclModeVideo : IUnknown {
2229 // set a ddraw object to be used by the overlay mixer. If even one of the pins
2230 // of the ovmixer is connected, then it won't start using the new ddraw obect
2231 // immediately but just cache it. It will start using it the next time, all its
2232 // pins are disconnected.
2233 HRESULT SetDDrawObject([in] IDirectDraw *pDDrawObject);
2234
2235 // gets the ddraw object currently being used by the overlay mixer. If the app has not
2236 // set any ddraw object and the ovmixer has not yet allocated one, then *ppDDrawObject
2237 // will be set to NULL and *pbUsingExternal will be set TO FALSE. Otherwise *pbUsingExternal
2238 // will be set to TRUE if the ovmixer is currently USING an app given ddraw object and FALSE
2239 // othewise
2240 HRESULT GetDDrawObject([out] IDirectDraw **ppDDrawObject,
2241 [out] BOOL *pbUsingExternal);
2242
2243 // set a primary surface to be used by the overlay mixer. If even one of the pins
2244 // of the ovmixer is connected, then it won't start using the new primary surface
2245 // immediately but just cache it. It will start using it the next time, all its
2246 // pins are disconnected.
2247 // Also when the ovmixer does start using an app given primary surface, it will delete
2248 // its output pin (and not draw its own colorkey) since the app is expected to do the
2249 // window management and drawing colorkey etc on the primary surface
2250 // This function makes sure that the surface provided exposes IDirectDrawSurface3, and
2251 // is consistent with the ddraw object provided.
2252 HRESULT SetDDrawSurface([in] IDirectDrawSurface *pDDrawSurface);
2253
2254 // gets the ddraw surface currently being used by the overlay mixer. If the app has not
2255 // set any ddraw surface and the ovmixer has not yet allocated one, then *ppDDrawSurface
2256 // will be set to NULL and *pbUsingExternal will be set to FALSE. Otherwise *pbUsingExternal
2257 // will be set to TRUE if the ovmixer is curretnly USING an app given ddraw surface and FALSE
2258 // otherwise
2259 HRESULT GetDDrawSurface([out] IDirectDrawSurface **ppDDrawSurface,
2260 [out] BOOL *pbUsingExternal);
2261
2262 // set draw paramters on the ovmixer (src and dest rect). Note that if the mode
2263 // of the ovmixer is set to LETTER_BOX, then the ovmixer might show the video in
2264 // only a subrect of *prcTarget (see IMixerPinConfig for details).
2265 HRESULT SetDrawParameters([in] const RECT * prcSource,
2266 [in] const RECT * prcTarget);
2267
2268 // gets the current video size and picture aspect ratio of the primary stream of the overlay mixer
2269 // The app should look for the evene EC_VIDEO_SIZE_AR_CHANGED and on its receipt
2270 // call this function again
2271 HRESULT GetNativeVideoProps([out] DWORD *pdwVideoWidth,
2272 [out] DWORD *pdwVideoHeight,
2273 [out] DWORD *pdwPictAspectRatioX,
2274 [out] DWORD *pdwPictAspectRatioY);
2275
2276 // Set the callback interface - the callback interface will be defined in a later release
2277 // Currently returns E_NOTIMPL
2278 HRESULT SetCallbackInterface([in] IDDrawExclModeVideoCallback *pCallback,
2279 [in] DWORD dwFlags);
2280 }
2281
2282
2283 //
2284 // DDraw Exclusive Mode Video callbacks
2285 //
2286
2287 // enum for flags
2288 enum _AM_OVERLAY_NOTIFY_FLAGS {
2289 AM_OVERLAY_NOTIFY_VISIBLE_CHANGE = 0x00000001,
2290 AM_OVERLAY_NOTIFY_SOURCE_CHANGE = 0x00000002,
2291 AM_OVERLAY_NOTIFY_DEST_CHANGE = 0x00000004
2292 };
2293 [
2294 object,
2295 local,
2296 uuid(913c24a0-20ab-11d2-9038-00a0c9697298),
2297 pointer_default(unique)
2298 ]
2299 interface IDDrawExclModeVideoCallback : IUnknown {
2300
2301 // Called once before UpdateOverlay is called with bBefore == TRUE
2302 // and once after it is called with bBefore == FALSE and otherwise
2303 // identical parameters
2304 HRESULT OnUpdateOverlay(
2305 [in] BOOL bBefore, // After UpdateOverlayCalled?
2306 [in] DWORD dwFlags,// _AM_OVERLAY_NOTIFY enum
2307 [in] BOOL bOldVisible,
2308 [in] const RECT *prcOldSrc,
2309 [in] const RECT *prcOldDest,
2310 [in] BOOL bNewVisible,
2311 [in] const RECT *prcNewSrc,
2312 [in] const RECT *prcNewDest);
2313
2314 // Called when the surface color key is changed
2315 HRESULT OnUpdateColorKey(
2316 [in] const COLORKEY *pKey,
2317 [in] DWORD dwColor);
2318
2319 // Called when the video size or aspect ratio changes
2320 HRESULT OnUpdateSize( [in] DWORD dwWidth, // Movie pixel width
2321 [in] DWORD dwHeight, // Movie pixel height
2322 [in] DWORD dwARWidth, // Aspect ratio horizontal
2323 [in] DWORD dwARHeight); // Aspect ratio vertical
2324 }

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26