00001 /* 00002 * Copyright (C) 2001 Rich Wareham <richwareham@users.sourceforge.net> 00003 * 00004 * This file is part of libdvdnav, a DVD navigation library. 00005 * 00006 * libdvdnav is free software; you can redistribute it and/or modify 00007 * it under the terms of the GNU General Public License as published by 00008 * the Free Software Foundation; either version 2 of the License, or 00009 * (at your option) any later version. 00010 * 00011 * libdvdnav is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License 00017 * along with this program; if not, write to the Free Software 00018 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 00019 * 00020 * $Id: dvdnav.h,v 1.15 2005/10/14 21:02:16 miguelfreitas Exp $ 00021 * 00022 */ 00023 00024 /* 00025 * This is the main header file applications should include if they want 00026 * to access dvdnav functionality. 00027 */ 00028 00029 #ifndef DVDNAV_H_INCLUDED 00030 #define DVDNAV_H_INCLUDED 00031 00032 #ifdef __cplusplus 00033 extern "C" { 00034 #endif 00035 00036 #ifdef DVDNAV_COMPILE 00037 # include "dvdnav_events.h" 00038 # include "dvd_types.h" 00039 # include "dvd_reader.h" 00040 # include "ifo_types.h" /* For vm_cmd_t */ 00041 #else 00042 # include <dvdnav/dvdnav_events.h> 00043 # include <dvdnav/dvd_types.h> 00044 # include <dvdnav/dvd_reader.h> 00045 # include <dvdnav/ifo_types.h> /* For vm_cmd_t */ 00046 #endif 00047 00048 #include "compat.h" 00049 00050 /********************************************************************* 00051 * dvdnav data types * 00052 *********************************************************************/ 00053 00054 /* 00055 * Opaque data-type can be viewed as a 'DVD handle'. You should get 00056 * a pointer to a dvdnav_t from the dvdnav_open() function. 00057 * Never call free() on the pointer, you have to give it back with 00058 * dvdnav_close(). 00059 */ 00060 typedef struct dvdnav_s dvdnav_t; 00061 00062 /* Status as reported by most of libdvdnav's functions */ 00063 typedef int32_t dvdnav_status_t; 00064 00065 /* 00066 * Unless otherwise stated, all functions return DVDNAV_STATUS_OK if 00067 * they succeeded, otherwise DVDNAV_STATUS_ERR is returned and the error may 00068 * be obtained by calling dvdnav_err_to_string(). 00069 */ 00070 #define DVDNAV_STATUS_ERR 0 00071 #define DVDNAV_STATUS_OK 1 00072 00073 00074 /********************************************************************* 00075 * initialisation & housekeeping functions * 00076 *********************************************************************/ 00077 00078 /* 00079 * These functions allow you to open a DVD device and associate it 00080 * with a dvdnav_t. 00081 */ 00082 00083 /* 00084 * Attempts to open the DVD drive at the specified path and pre-cache 00085 * the CSS-keys. libdvdread is used to access the DVD, so any source 00086 * supported by libdvdread can be given with "path". Currently, 00087 * libdvdread can access: DVD drives, DVD image files, DVD file-by-file 00088 * copies. 00089 * 00090 * The resulting dvdnav_t handle will be written to *dest. 00091 */ 00092 dvdnav_status_t dvdnav_open(dvdnav_t **dest, const char *path); 00093 00094 /* 00095 * Closes a dvdnav_t previously opened with dvdnav_open(), freeing any 00096 * memory associated with it. 00097 */ 00098 dvdnav_status_t dvdnav_close(dvdnav_t *self); 00099 00100 /* 00101 * Resets the DVD virtual machine and cache buffers. 00102 */ 00103 dvdnav_status_t dvdnav_reset(dvdnav_t *self); 00104 00105 /* 00106 * Fills a pointer with a value pointing to a string describing 00107 * the path associated with an open dvdnav_t. It assigns *path to NULL 00108 * on error. 00109 */ 00110 dvdnav_status_t dvdnav_path(dvdnav_t *self, const char **path); 00111 00112 /* 00113 * Returns a human-readable string describing the last error. 00114 */ 00115 const char* dvdnav_err_to_string(dvdnav_t *self); 00116 00117 /* converts a dvd_time_t to PTS ticks */ 00118 int64_t dvdnav_convert_time(dvd_time_t *time); 00119 00120 /********************************************************************* 00121 * changing and reading DVD player characteristics * 00122 *********************************************************************/ 00123 00124 /* 00125 * These functions allow you to manipulate the various global characteristics 00126 * of the DVD playback engine. 00127 */ 00128 00129 /* 00130 * Sets the region mask (bit 0 set implies region 1, bit 1 set implies 00131 * region 2, etc) of the virtual machine. Generally you will only need to set 00132 * this if you are playing RCE discs which query the virtual machine as to its 00133 * region setting. 00134 * 00135 * This has _nothing_ to do with the region setting of the DVD drive. 00136 */ 00137 dvdnav_status_t dvdnav_set_region_mask(dvdnav_t *self, int32_t region_mask); 00138 00139 /* 00140 * Returns the region mask (bit 0 set implies region 1, bit 1 set implies 00141 * region 2, etc) of the virtual machine. 00142 * 00143 * This has _nothing_ to do with the region setting of the DVD drive. 00144 */ 00145 dvdnav_status_t dvdnav_get_region_mask(dvdnav_t *self, int32_t *region_mask); 00146 00147 /* 00148 * Specify whether read-ahead caching should be used. You may not want this if your 00149 * decoding engine does its own buffering. 00150 * 00151 * The default read-ahead cache does not use an additional thread for the reading 00152 * (see read_cache.c for a threaded cache, but note that this code is currently 00153 * unmaintained). It prebuffers on VOBU level by reading ahead several buffers 00154 * on every read request. The speed of this prebuffering has been optimized to 00155 * also work on slow DVD drives. 00156 * 00157 * If in addition you want to prevent memcpy's to improve performance, have a look 00158 * at dvdnav_get_next_cache_block(). 00159 */ 00160 dvdnav_status_t dvdnav_set_readahead_flag(dvdnav_t *self, int32_t read_ahead_flag); 00161 00162 /* 00163 * Query whether read-ahead caching/buffering will be used. 00164 */ 00165 dvdnav_status_t dvdnav_get_readahead_flag(dvdnav_t *self, int32_t *read_ahead_flag); 00166 00167 /* 00168 * Specify whether the positioning works PGC or PG based. 00169 * Programs (PGs) on DVDs are similar to Chapters and a program chain (PGC) 00170 * usually covers a whole feature. This affects the behaviour of the 00171 * functions dvdnav_get_position() and dvdnav_sector_search(). See there. 00172 * Default is PG based positioning. 00173 */ 00174 dvdnav_status_t dvdnav_set_PGC_positioning_flag(dvdnav_t *self, int32_t pgc_based_flag); 00175 00176 /* 00177 * Query whether positioning is PG or PGC based. 00178 */ 00179 dvdnav_status_t dvdnav_get_PGC_positioning_flag(dvdnav_t *self, int32_t *pgc_based_flag); 00180 00181 00182 /********************************************************************* 00183 * reading data * 00184 *********************************************************************/ 00185 00186 /* 00187 * These functions are used to poll the playback enginge and actually get data 00188 * off the DVD. 00189 */ 00190 00191 /* 00192 * Attempts to get the next block off the DVD and copies it into the buffer 'buf'. 00193 * If there is any special actions that may need to be performed, the value 00194 * pointed to by 'event' gets set accordingly. 00195 * 00196 * If 'event' is DVDNAV_BLOCK_OK then 'buf' is filled with the next block 00197 * (note that means it has to be at /least/ 2048 bytes big). 'len' is 00198 * then set to 2048. 00199 * 00200 * Otherwise, buf is filled with an appropriate event structure and 00201 * len is set to the length of that structure. 00202 * 00203 * See the dvdnav_events.h header for information on the various events. 00204 */ 00205 dvdnav_status_t dvdnav_get_next_block(dvdnav_t *self, uint8_t *buf, 00206 int32_t *event, int32_t *len); 00207 00208 /* 00209 * This basically does the same as dvdnav_get_next_block. The only difference is 00210 * that it avoids a memcopy, when the requested block was found in the cache. 00211 * I such a case (cache hit) this function will return a different pointer than 00212 * the one handed in, pointing directly into the relevant block in the cache. 00213 * Those pointers must _never_ be freed but instead returned to the library via 00214 * dvdnav_free_cache_block(). 00215 */ 00216 dvdnav_status_t dvdnav_get_next_cache_block(dvdnav_t *self, uint8_t **buf, 00217 int32_t *event, int32_t *len); 00218 00219 /* 00220 * All buffers which came from the internal cache (when dvdnav_get_next_cache_block() 00221 * returned a buffer different from the one handed in) have to be freed with this 00222 * function. Although handing in other buffers not from the cache doesn't cause any harm. 00223 */ 00224 dvdnav_status_t dvdnav_free_cache_block(dvdnav_t *self, unsigned char *buf); 00225 00226 /* 00227 * If we are currently in a still-frame this function skips it. 00228 * 00229 * See also the DVDNAV_STILL_FRAME event. 00230 */ 00231 dvdnav_status_t dvdnav_still_skip(dvdnav_t *self); 00232 00233 /* 00234 * If we are currently in WAIT state, that is: the application is required to 00235 * wait for its fifos to become empty, calling this signals libdvdnav that this 00236 * is achieved and that it can continue. 00237 * 00238 * See also the DVDNAV_WAIT event. 00239 */ 00240 dvdnav_status_t dvdnav_wait_skip(dvdnav_t *self); 00241 00242 /* 00243 * Returns the still time from the currently playing cell. 00244 * The still time is given in seconds with 0xff meaning an indefinite still. 00245 * 00246 * This function can be used to detect still frames before they are reached. 00247 * Some players might need this to prepare for a frame to be shown for a 00248 * longer time than usual. 00249 */ 00250 uint32_t dvdnav_get_next_still_flag(dvdnav_t *self); 00251 00252 /* 00253 * Stops playback. The next event obtained with one of the get_next_block 00254 * functions will be a DVDNAV_STOP event. 00255 * 00256 * It is not required to call this before dvdnav_close(). 00257 */ 00258 dvdnav_status_t dvdnav_stop(dvdnav_t *self); 00259 00260 00261 /********************************************************************* 00262 * title/part navigation * 00263 *********************************************************************/ 00264 00265 /* 00266 * Returns the number of titles on the disk. 00267 */ 00268 dvdnav_status_t dvdnav_get_number_of_titles(dvdnav_t *self, int32_t *titles); 00269 00270 /* 00271 * Returns the number of parts within the given title. 00272 */ 00273 dvdnav_status_t dvdnav_get_number_of_parts(dvdnav_t *self, int32_t title, int32_t *parts); 00274 00275 /* 00276 * Plays the specified title of the DVD from its beginning (that is: part 1). 00277 */ 00278 dvdnav_status_t dvdnav_title_play(dvdnav_t *self, int32_t title); 00279 00280 /* 00281 * Plays the specified title, starting from the specified part. 00282 */ 00283 dvdnav_status_t dvdnav_part_play(dvdnav_t *self, int32_t title, int32_t part); 00284 00285 /* 00286 * Play the specified amount of parts of the specified title of 00287 * the DVD then STOP. 00288 * 00289 * Currently unimplemented! 00290 */ 00291 dvdnav_status_t dvdnav_part_play_auto_stop(dvdnav_t *self, int32_t title, 00292 int32_t part, int32_t parts_to_play); 00293 00294 /* 00295 * Play the specified title starting from the specified time. 00296 * 00297 * Currently unimplemented! 00298 */ 00299 dvdnav_status_t dvdnav_time_play(dvdnav_t *self, int32_t title, 00300 uint64_t time); 00301 00302 /* Check if the given menu is supported */ 00303 dvdnav_status_t dvdnav_menu_supported(dvdnav_t *self, DVDMenuID_t menu); 00304 00305 /* 00306 * Stop playing the current position and jump to the specified menu. 00307 * 00308 * See also DVDMenuID_t from libdvdread 00309 */ 00310 dvdnav_status_t dvdnav_menu_call(dvdnav_t *self, DVDMenuID_t menu); 00311 00312 /* 00313 * Return the title number and part currently being played. 00314 * A title of 0 indicates, we are in a menu. In this case, part 00315 * is set to the current menu's ID. 00316 */ 00317 dvdnav_status_t dvdnav_current_title_info(dvdnav_t *self, int32_t *title, 00318 int32_t *part); 00319 00320 /* 00321 * Return the current position (in blocks) within the current 00322 * title and the length (in blocks) of said title. 00323 * 00324 * Current implementation is wrong and likely to behave unpredictably! 00325 * Use is discouraged! 00326 */ 00327 dvdnav_status_t dvdnav_get_position_in_title(dvdnav_t *self, 00328 uint32_t *pos, 00329 uint32_t *len); 00330 00331 /* 00332 * This function is only available for compatibility reasons. 00333 * 00334 * Stop playing the current position and start playback of the current title 00335 * from the specified part. 00336 */ 00337 dvdnav_status_t dvdnav_part_search(dvdnav_t *self, int32_t part); 00338 00339 00340 /********************************************************************* 00341 * program chain/program navigation * 00342 *********************************************************************/ 00343 00344 /* 00345 * Stop playing the current position and start playback from the last 00346 * VOBU boundary before the given sector. The sector number is not 00347 * meant to be an absolute physical DVD sector, but a relative sector 00348 * in the current program. This function cannot leave the current 00349 * program and will fail, if asked to do so. 00350 * 00351 * If program chain based positioning is enabled 00352 * (see dvdnav_set_PGC_positioning_flag()), this will seek to the relative 00353 * sector inside the current program chain. 00354 * 00355 * 'origin' can be one of SEEK_SET, SEEK_CUR, SEEK_END as defined in 00356 * fcntl.h. 00357 */ 00358 dvdnav_status_t dvdnav_sector_search(dvdnav_t *self, 00359 uint64_t offset, int32_t origin); 00360 00361 /* 00362 * Stop playing the current position and start playback of the title 00363 * from the specified timecode. 00364 * 00365 * if search_to_nearest_cell is set then search to the nearest Cell. 00366 * and then use dvdnav_time_search_within_cell for further seeking 00367 * Otherwise tries to guess the nearest VOBU by calculating an offset. 00368 */ 00369 dvdnav_status_t dvdnav_time_search(dvdnav_t *self, 00370 uint64_t time, uint search_to_nearest_cell); 00371 00372 int dvdnav_time_search_within_cell(dvdnav_t *self, 00373 int relative_time); 00374 /* 00375 * Stop playing current position and play the "GoUp"-program chain. 00376 * (which generally leads to the title menu or a higer-level menu). 00377 */ 00378 dvdnav_status_t dvdnav_go_up(dvdnav_t *self); 00379 /* 00380 * Stop playing the current position and start playback at the 00381 * previous program (if it exists). 00382 */ 00383 dvdnav_status_t dvdnav_prev_pg_search(dvdnav_t *self); 00384 00385 /* 00386 * Stop playing the current position and start playback at the 00387 * first program. 00388 */ 00389 dvdnav_status_t dvdnav_top_pg_search(dvdnav_t *self); 00390 00391 /* 00392 * Stop playing the current position and start playback at the 00393 * next program (if it exists). 00394 */ 00395 dvdnav_status_t dvdnav_next_pg_search(dvdnav_t *self); 00396 00397 /* 00398 * Return the current position (in blocks) within the current 00399 * program and the length (in blocks) of current program. 00400 * 00401 * If program chain based positioning is enabled 00402 * (see dvdnav_set_PGC_positioning_flag()), this will return the 00403 * relative position in and the length of the current program chain. 00404 */ 00405 dvdnav_status_t dvdnav_get_position(dvdnav_t *self, uint32_t *pos, 00406 uint32_t *len); 00407 00408 00409 /********************************************************************* 00410 * menu highlights * 00411 *********************************************************************/ 00412 00413 /* 00414 * Most functions related to highlights take a NAV PCI packet as a parameter. 00415 * While you can get the such a packet from libdvdnav, for players with internal 00416 * FIFOs, this will result in errors, because due to the FIFO length, libdvdnav will 00417 * be ahead in the stream compared to what the user is seeing on screen. 00418 * Therefore, player applications who have a NAV packet available, which is 00419 * better in sync with the actual playback should always pass this one to these 00420 * functions. 00421 */ 00422 00423 /* 00424 * Get the currently highlighted button 00425 * number (1..36) or 0 if no button is highlighted. 00426 */ 00427 dvdnav_status_t dvdnav_get_current_highlight(dvdnav_t *self, int32_t *button); 00428 00429 /* 00430 * Returns the Presentation Control Information (PCI) structure associated 00431 * with the current position. 00432 * 00433 * Read the general notes above. 00434 * See also libdvdreads nav_types.h for definition of pci_t. 00435 */ 00436 pci_t* dvdnav_get_current_nav_pci(dvdnav_t *self); 00437 00438 /* 00439 * Returns the DSI (data search information) structure associated 00440 * with the current position. 00441 * 00442 * Read the general notes above. 00443 * See also libdvdreads nav_types.h for definition of dsi_t. 00444 */ 00445 dsi_t* dvdnav_get_current_nav_dsi(dvdnav_t *self); 00446 00447 /* 00448 * Get the area associated with a certain button. 00449 */ 00450 dvdnav_status_t dvdnav_get_highlight_area(pci_t *nav_pci , int32_t button, int32_t mode, 00451 dvdnav_highlight_area_t *highlight); 00452 00453 /* 00454 * Move button highlight around as suggested by function name (e.g. with arrow keys). 00455 */ 00456 dvdnav_status_t dvdnav_upper_button_select(dvdnav_t *self, pci_t *pci); 00457 dvdnav_status_t dvdnav_lower_button_select(dvdnav_t *self, pci_t *pci); 00458 dvdnav_status_t dvdnav_right_button_select(dvdnav_t *self, pci_t *pci); 00459 dvdnav_status_t dvdnav_left_button_select(dvdnav_t *self, pci_t *pci); 00460 00461 /* 00462 * Activate ("press") the currently highlighted button. 00463 */ 00464 dvdnav_status_t dvdnav_button_activate(dvdnav_t *self, pci_t *pci); 00465 00466 /* 00467 * Highlight a specific button. 00468 */ 00469 dvdnav_status_t dvdnav_button_select(dvdnav_t *self, pci_t *pci, int32_t button); 00470 00471 /* 00472 * Activate ("press") specified button. 00473 */ 00474 dvdnav_status_t dvdnav_button_select_and_activate(dvdnav_t *self, pci_t *pci, int32_t button); 00475 00476 /* 00477 * Activate (press) a button and execute specified command. 00478 */ 00479 dvdnav_status_t dvdnav_button_activate_cmd(dvdnav_t *self, int32_t button, vm_cmd_t *cmd); 00480 00481 /* 00482 * Select button at specified video frame coordinates. 00483 */ 00484 dvdnav_status_t dvdnav_mouse_select(dvdnav_t *self, pci_t *pci, int32_t x, int32_t y); 00485 00486 /* 00487 * Activate ("press") button at specified video frame coordinates. 00488 */ 00489 dvdnav_status_t dvdnav_mouse_activate(dvdnav_t *self, pci_t *pci, int32_t x, int32_t y); 00490 00491 00492 /********************************************************************* 00493 * languages * 00494 *********************************************************************/ 00495 00496 /* 00497 * The language codes expected by these functions are two character 00498 * codes as defined in ISO639. 00499 */ 00500 00501 /* 00502 * Set which menu language we should use per default. 00503 */ 00504 dvdnav_status_t dvdnav_menu_language_select(dvdnav_t *self, 00505 char *code); 00506 00507 /* 00508 * Set which audio language we should use per default. 00509 */ 00510 dvdnav_status_t dvdnav_audio_language_select(dvdnav_t *self, 00511 char *code); 00512 00513 /* 00514 * Set which spu language we should use per default. 00515 */ 00516 dvdnav_status_t dvdnav_spu_language_select(dvdnav_t *self, 00517 char *code); 00518 00519 00520 /********************************************************************* 00521 * obtaining stream attributes * 00522 *********************************************************************/ 00523 00524 /* 00525 * Return a string describing the title of the DVD. 00526 * This is an ID string encoded on the disc by the author. In many cases 00527 * this is a descriptive string such as `THE_MATRIX' but sometimes is sigularly 00528 * uninformative such as `PDVD-011421'. Some DVD authors even forget to set this, 00529 * so you may also read the default of the authoring software they used, like 00530 * `DVDVolume'. 00531 */ 00532 dvdnav_status_t dvdnav_get_title_string(dvdnav_t *self, const char **title_str); 00533 00534 /* 00535 * Return a string describing the serial number of the DVD 00536 */ 00537 dvdnav_status_t dvdnav_get_serial_number(dvdnav_t *self, const char **serial_str); 00538 00539 /* 00540 * Get video aspect code. 00541 * The aspect code does only change on VTS boundaries. 00542 * See the DVDNAV_VTS_CHANGE event. 00543 * 00544 * 0 -- 4:3, 3 -- 16:9 00545 */ 00546 uint8_t dvdnav_get_video_aspect(dvdnav_t *self); 00547 00548 /* 00549 * Get video scaling permissions. 00550 * The scaling permission does only change on VTS boundaries. 00551 * See the DVDNAV_VTS_CHANGE event. 00552 * 00553 * bit0 set = deny letterboxing, bit1 set = deny pan&scan 00554 */ 00555 uint8_t dvdnav_get_video_scale_permission(dvdnav_t *self); 00556 00557 /* 00558 * Get video format 00559 * 0 - NTSC , 1 - PAL 00560 */ 00561 uint8_t dvdnav_get_video_format(dvdnav_t *self); 00562 00563 /* 00564 * Converts a *logical* audio stream id into language code 00565 * (returns 0xffff if no such stream). 00566 */ 00567 uint16_t dvdnav_audio_stream_to_lang(dvdnav_t *self, uint8_t stream); 00568 00569 /* 00570 * Get number of audio channels. 00571 * (1 -> 2 channels , 5 -> 6 channels) 00572 * (returns 0xff if no such stream). 00573 */ 00574 unsigned char dvdnav_audio_get_channels(dvdnav_t *self, uint8_t stream); 00575 00576 unsigned char dvdnav_audio_get_format(dvdnav_t *self, uint8_t stream); 00577 00578 int dvdnav_audio_get_stream_count(dvdnav_t *self); 00579 00580 int dvdnav_subp_get_stream_count(dvdnav_t *self); 00581 /* 00582 * Converts a *logical* subpicture stream id into country code 00583 * (returns 0xffff if no such stream). 00584 */ 00585 uint16_t dvdnav_spu_stream_to_lang(dvdnav_t *self, uint8_t stream); 00586 00587 /* 00588 * Converts a *physical* (MPEG) audio stream id into a logical stream number. 00589 */ 00590 int8_t dvdnav_get_audio_logical_stream(dvdnav_t *self, uint8_t audio_num); 00591 00592 /* 00593 * Converts a *physical* (MPEG) subpicture stream id into a logical stream number. 00594 */ 00595 int8_t dvdnav_get_spu_logical_stream(dvdnav_t *self, uint8_t subp_num); 00596 00597 /* 00598 * Get active audio stream. 00599 */ 00600 int8_t dvdnav_get_active_audio_stream(dvdnav_t *self); 00601 00602 /* 00603 * Get active spu stream. 00604 */ 00605 int8_t dvdnav_get_active_spu_stream(dvdnav_t *self); 00606 00607 00608 /********************************************************************* 00609 * multiple angles * 00610 *********************************************************************/ 00611 00612 /* 00613 * The libdvdnav library abstracts away the difference between seamless and 00614 * non-seamless angles. From the point of view of the programmer you just set the 00615 * angle number and all is well in the world. You will always see only the 00616 * selected angle coming from the get_next_block functions. 00617 * 00618 * Note: 00619 * It is quite possible that some tremendously strange DVD feature might change the 00620 * angle number from under you. Generally you should always view the results from 00621 * dvdnav_get_angle_info() as definitive only up to the next time you call 00622 * dvdnav_get_next_block(). 00623 */ 00624 00625 /* 00626 * Sets the current angle. If you try to follow a non existant angle 00627 * the call fails. 00628 */ 00629 dvdnav_status_t dvdnav_angle_change(dvdnav_t *self, int32_t angle); 00630 00631 /* 00632 * Returns the current angle and number of angles present. 00633 */ 00634 dvdnav_status_t dvdnav_get_angle_info(dvdnav_t *self, int32_t *current_angle, 00635 int32_t *number_of_angles); 00636 00637 /********************************************************************* 00638 * domain queries * 00639 *********************************************************************/ 00640 00641 /* 00642 * Are we in the First Play domain? 00643 */ 00644 int8_t dvdnav_is_domain_fp(dvdnav_t *self); 00645 00646 /* 00647 * Are we in the Video management Menu domain? 00648 */ 00649 int8_t dvdnav_is_domain_vmgm(dvdnav_t *self); 00650 00651 /* 00652 * Are we in the Video Title Menu domain? 00653 */ 00654 int8_t dvdnav_is_domain_vtsm(dvdnav_t *self); 00655 00656 /* 00657 * Are we in the Video Title Set domain? 00658 */ 00659 int8_t dvdnav_is_domain_vts(dvdnav_t *self); 00660 00661 00662 #ifdef __cplusplus 00663 } 00664 #endif 00665 00666 #endif /* DVDNAV_H_INCLUDED */
1.5.5