dvd_types.h | dvd_types.h | |||
---|---|---|---|---|
skipping to change at line 29 | skipping to change at line 29 | |||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |||
*/ | */ | |||
/* | /* | |||
* Various useful structs and enums for DVDs. | * Various useful structs and enums for DVDs. | |||
*/ | */ | |||
#ifndef LIBDVDNAV_DVD_TYPES_H | #ifndef LIBDVDNAV_DVD_TYPES_H | |||
#define LIBDVDNAV_DVD_TYPES_H | #define LIBDVDNAV_DVD_TYPES_H | |||
#include <stdint.h> | ||||
/* | /* | |||
* DVD Menu ID | * DVD Menu ID | |||
* (see dvdnav_menu_call()) | * (see dvdnav_menu_call()) | |||
*/ | */ | |||
typedef enum { | typedef enum { | |||
/* When used in VTS domain, DVD_MENU_Escape behaves like DVD_MENU_Root, | /* When used in VTS domain, DVD_MENU_Escape behaves like DVD_MENU_Root, | |||
* but from within a menu domain, DVD_MENU_Escape resumes playback. */ | * but from within a menu domain, DVD_MENU_Escape resumes playback. */ | |||
DVD_MENU_Escape = 0, | DVD_MENU_Escape = 0, | |||
DVD_MENU_Title = 2, | DVD_MENU_Title = 2, | |||
DVD_MENU_Root = 3, | DVD_MENU_Root = 3, | |||
DVD_MENU_Subpicture = 4, | DVD_MENU_Subpicture = 4, | |||
DVD_MENU_Audio = 5, | DVD_MENU_Audio = 5, | |||
DVD_MENU_Angle = 6, | DVD_MENU_Angle = 6, | |||
DVD_MENU_Part = 7 | DVD_MENU_Part = 7 | |||
} DVDMenuID_t; | } DVDMenuID_t; | |||
/* Domain */ | ||||
typedef enum { | ||||
DVD_DOMAIN_FirstPlay = 1, /* First Play Domain */ | ||||
DVD_DOMAIN_VTSTitle = 2, /* Video Title Set Domain */ | ||||
DVD_DOMAIN_VMGM = 4, /* Video Manager Domain */ | ||||
DVD_DOMAIN_VTSMenu = 8 /* Video Title Set Menu Domain */ | ||||
} DVDDomain_t; | ||||
/* | /* | |||
* Structure containing info on highlight areas | * Structure containing info on highlight areas | |||
* (see dvdnav_get_highlight_area()) | * (see dvdnav_get_highlight_area()) | |||
*/ | */ | |||
typedef struct { | typedef struct { | |||
uint32_t palette; /* The CLUT entries for the highlight palette | uint32_t palette; /* The CLUT entries for the highlight palette | |||
(4-bits per entry -> 4 entries) */ | (4-bits per entry -> 4 entries) */ | |||
uint16_t sx,sy,ex,ey; /* The start/end x,y positions */ | uint16_t sx,sy,ex,ey; /* The start/end x,y positions */ | |||
uint32_t pts; /* Highlight PTS to match with SPU */ | uint32_t pts; /* Highlight PTS to match with SPU */ | |||
/* button number for the SPU decoder/overlaying engine */ | /* button number for the SPU decoder/overlaying engine */ | |||
uint32_t buttonN; | uint32_t buttonN; | |||
} dvdnav_highlight_area_t; | } dvdnav_highlight_area_t; | |||
/* The audio format */ | ||||
typedef enum { | ||||
DVD_AUDIO_FORMAT_AC3 = 0, | ||||
DVD_AUDIO_FORMAT_UNKNOWN_1 = 1, | ||||
DVD_AUDIO_FORMAT_MPEG = 2, | ||||
DVD_AUDIO_FORMAT_MPEG2_EXT = 3, | ||||
DVD_AUDIO_FORMAT_LPCM = 4, | ||||
DVD_AUDIO_FORMAT_UNKNOWN_5 = 5, | ||||
DVD_AUDIO_FORMAT_DTS = 6, | ||||
DVD_AUDIO_FORMAT_SDDS = 7 | ||||
} DVDAudioFormat_t; | ||||
/* the following types are currently unused */ | /* the following types are currently unused */ | |||
#if 0 | #if 0 | |||
/* Domain */ | ||||
typedef enum { | ||||
DVD_DOMAIN_FirstPlay, /* First Play Domain */ | ||||
DVD_DOMAIN_VMG, /* Video Manager Domain */ | ||||
DVD_DOMAIN_VTSMenu, /* Video Title Set Menu Domain */ | ||||
DVD_DOMAIN_VTSTitle, /* Video Title Set Domain */ | ||||
DVD_DOMAIN_Stop /* Stop Domain */ | ||||
} DVDDomain_t; | ||||
/* User operation permissions */ | /* User operation permissions */ | |||
typedef enum { | typedef enum { | |||
UOP_FLAG_TitleOrTimePlay = 0x00000001, | UOP_FLAG_TitleOrTimePlay = 0x00000001, | |||
UOP_FLAG_ChapterSearchOrPlay = 0x00000002, | UOP_FLAG_ChapterSearchOrPlay = 0x00000002, | |||
UOP_FLAG_TitlePlay = 0x00000004, | UOP_FLAG_TitlePlay = 0x00000004, | |||
UOP_FLAG_Stop = 0x00000008, | UOP_FLAG_Stop = 0x00000008, | |||
UOP_FLAG_GoUp = 0x00000010, | UOP_FLAG_GoUp = 0x00000010, | |||
UOP_FLAG_TimeOrChapterSearch = 0x00000020, | UOP_FLAG_TimeOrChapterSearch = 0x00000020, | |||
UOP_FLAG_PrevOrTopPGSearch = 0x00000040, | UOP_FLAG_PrevOrTopPGSearch = 0x00000040, | |||
UOP_FLAG_NextPGSearch = 0x00000080, | UOP_FLAG_NextPGSearch = 0x00000080, | |||
skipping to change at line 159 | skipping to change at line 172 | |||
typedef int DVDAudioStream_t; | typedef int DVDAudioStream_t; | |||
/* The audio application mode */ | /* The audio application mode */ | |||
typedef enum { | typedef enum { | |||
DVD_AUDIO_APP_MODE_None = 0, | DVD_AUDIO_APP_MODE_None = 0, | |||
DVD_AUDIO_APP_MODE_Karaoke = 1, | DVD_AUDIO_APP_MODE_Karaoke = 1, | |||
DVD_AUDIO_APP_MODE_Surround = 2, | DVD_AUDIO_APP_MODE_Surround = 2, | |||
DVD_AUDIO_APP_MODE_Other = 3 | DVD_AUDIO_APP_MODE_Other = 3 | |||
} DVDAudioAppMode_t; | } DVDAudioAppMode_t; | |||
/* The audio format */ | ||||
typedef enum { | ||||
DVD_AUDIO_FORMAT_AC3 = 0, | ||||
DVD_AUDIO_FORMAT_MPEG1 = 1, | ||||
DVD_AUDIO_FORMAT_MPEG1_DRC = 2, | ||||
DVD_AUDIO_FORMAT_MPEG2 = 3, | ||||
DVD_AUDIO_FORMAT_MPEG2_DRC = 4, | ||||
DVD_AUDIO_FORMAT_LPCM = 5, | ||||
DVD_AUDIO_FORMAT_DTS = 6, | ||||
DVD_AUDIO_FORMAT_SDDS = 7, | ||||
DVD_AUDIO_FORMAT_Other = 8 | ||||
} DVDAudioFormat_t; | ||||
/* Audio language extension */ | /* Audio language extension */ | |||
typedef enum { | typedef enum { | |||
DVD_AUDIO_LANG_EXT_NotSpecified = 0, | DVD_AUDIO_LANG_EXT_NotSpecified = 0, | |||
DVD_AUDIO_LANG_EXT_NormalCaptions = 1, | DVD_AUDIO_LANG_EXT_NormalCaptions = 1, | |||
DVD_AUDIO_LANG_EXT_VisuallyImpaired = 2, | DVD_AUDIO_LANG_EXT_VisuallyImpaired = 2, | |||
DVD_AUDIO_LANG_EXT_DirectorsComments1 = 3, | DVD_AUDIO_LANG_EXT_DirectorsComments1 = 3, | |||
DVD_AUDIO_LANG_EXT_DirectorsComments2 = 4 | DVD_AUDIO_LANG_EXT_DirectorsComments2 = 4 | |||
} DVDAudioLangExt_t; | } DVDAudioLangExt_t; | |||
/* Subpicture language extension */ | /* Subpicture language extension */ | |||
End of changes. 6 change blocks. | ||||
23 lines changed or deleted | 23 lines changed or added | |||
dvdnav.h | dvdnav.h | |||
---|---|---|---|---|
skipping to change at line 64 | skipping to change at line 64 | |||
typedef int32_t dvdnav_status_t; | typedef int32_t dvdnav_status_t; | |||
/* | /* | |||
* Unless otherwise stated, all functions return DVDNAV_STATUS_OK if | * Unless otherwise stated, all functions return DVDNAV_STATUS_OK if | |||
* they succeeded, otherwise DVDNAV_STATUS_ERR is returned and the error ma y | * they succeeded, otherwise DVDNAV_STATUS_ERR is returned and the error ma y | |||
* be obtained by calling dvdnav_err_to_string(). | * be obtained by calling dvdnav_err_to_string(). | |||
*/ | */ | |||
#define DVDNAV_STATUS_ERR 0 | #define DVDNAV_STATUS_ERR 0 | |||
#define DVDNAV_STATUS_OK 1 | #define DVDNAV_STATUS_OK 1 | |||
#define DVDNAV_FORMAT_AC3 0 | ||||
#define DVDNAV_FORMAT_MPEGAUDIO 3 | ||||
#define DVDNAV_FORMAT_LPCM 4 | ||||
#define DVDNAV_FORMAT_DTS 5 | ||||
#define DVDNAV_FORMAT_SDDS 6 | ||||
/********************************************************************* | /********************************************************************* | |||
* initialisation & housekeeping functions * | * initialisation & housekeeping functions * | |||
*********************************************************************/ | *********************************************************************/ | |||
/* | /* | |||
* These functions allow you to open a DVD device and associate it | * These functions allow you to open a DVD device and associate it | |||
* with a dvdnav_t. | * with a dvdnav_t. | |||
*/ | */ | |||
/* | /* | |||
* Attempts to open the DVD drive at the specified path and pre-cache | * Attempts to open the DVD drive at the specified path and pre-cache | |||
* the CSS-keys. libdvdread is used to access the DVD, so any source | * the CSS-keys. libdvdread is used to access the DVD, so any source | |||
* supported by libdvdread can be given with "path". Currently, | * supported by libdvdread can be given with "path". Currently, | |||
* libdvdread can access: DVD drives, DVD image files, DVD file-by-file | * libdvdread can access: DVD drives, DVD image files, DVD file-by-file | |||
* copies. | * copies. | |||
* | * | |||
* The resulting dvdnav_t handle will be written to *dest. | * The resulting dvdnav_t handle will be written to *dest. | |||
*/ | */ | |||
dvdnav_status_t dvdnav_open(dvdnav_t **dest, const char *path); | dvdnav_status_t dvdnav_open(dvdnav_t **dest, const char *path); | |||
dvdnav_status_t dvdnav_dup(dvdnav_t **dest, dvdnav_t *src); | ||||
dvdnav_status_t dvdnav_free_dup(dvdnav_t * _this); | ||||
/* | /* | |||
* Closes a dvdnav_t previously opened with dvdnav_open(), freeing any | * Closes a dvdnav_t previously opened with dvdnav_open(), freeing any | |||
* memory associated with it. | * memory associated with it. | |||
*/ | */ | |||
dvdnav_status_t dvdnav_close(dvdnav_t *self); | dvdnav_status_t dvdnav_close(dvdnav_t *self); | |||
/* | /* | |||
* Resets the DVD virtual machine and cache buffers. | * Resets the DVD virtual machine and cache buffers. | |||
*/ | */ | |||
dvdnav_status_t dvdnav_reset(dvdnav_t *self); | dvdnav_status_t dvdnav_reset(dvdnav_t *self); | |||
skipping to change at line 198 | skipping to change at line 195 | |||
* If 'event' is DVDNAV_BLOCK_OK then 'buf' is filled with the next block | * If 'event' is DVDNAV_BLOCK_OK then 'buf' is filled with the next block | |||
* (note that means it has to be at /least/ 2048 bytes big). 'len' is | * (note that means it has to be at /least/ 2048 bytes big). 'len' is | |||
* then set to 2048. | * then set to 2048. | |||
* | * | |||
* Otherwise, buf is filled with an appropriate event structure and | * Otherwise, buf is filled with an appropriate event structure and | |||
* len is set to the length of that structure. | * len is set to the length of that structure. | |||
* | * | |||
* See the dvdnav_events.h header for information on the various events. | * See the dvdnav_events.h header for information on the various events. | |||
*/ | */ | |||
dvdnav_status_t dvdnav_get_next_block(dvdnav_t *self, uint8_t *buf, | dvdnav_status_t dvdnav_get_next_block(dvdnav_t *self, uint8_t *buf, | |||
int32_t *event, int32_t *len); | int32_t *event, int32_t *len); | |||
/* | /* | |||
* This basically does the same as dvdnav_get_next_block. The only differen ce is | * This basically does the same as dvdnav_get_next_block. The only differen ce is | |||
* that it avoids a memcopy, when the requested block was found in the cach e. | * that it avoids a memcopy, when the requested block was found in the cach e. | |||
* In such a case (cache hit) this function will return a different pointer than | * In such a case (cache hit) this function will return a different pointer than | |||
* the one handed in, pointing directly into the relevant block in the cach e. | * the one handed in, pointing directly into the relevant block in the cach e. | |||
* Those pointers must _never_ be freed but instead returned to the library via | * Those pointers must _never_ be freed but instead returned to the library via | |||
* dvdnav_free_cache_block(). | * dvdnav_free_cache_block(). | |||
*/ | */ | |||
dvdnav_status_t dvdnav_get_next_cache_block(dvdnav_t *self, uint8_t **buf, | dvdnav_status_t dvdnav_get_next_cache_block(dvdnav_t *self, uint8_t **buf, | |||
int32_t *event, int32_t *len); | int32_t *event, int32_t *len); | |||
/* | /* | |||
* All buffers which came from the internal cache (when dvdnav_get_next_cac he_block() | * All buffers which came from the internal cache (when dvdnav_get_next_cac he_block() | |||
* returned a buffer different from the one handed in) have to be freed wit h this | * returned a buffer different from the one handed in) have to be freed wit h this | |||
* function. Although handing in other buffers not from the cache doesn't c ause any harm. | * function. Although handing in other buffers not from the cache doesn't c ause any harm. | |||
*/ | */ | |||
dvdnav_status_t dvdnav_free_cache_block(dvdnav_t *self, unsigned char *buf) ; | dvdnav_status_t dvdnav_free_cache_block(dvdnav_t *self, unsigned char *buf) ; | |||
/* | /* | |||
* If we are currently in a still-frame this function skips it. | * If we are currently in a still-frame this function skips it. | |||
skipping to change at line 297 | skipping to change at line 294 | |||
*/ | */ | |||
uint32_t dvdnav_describe_title_chapters(dvdnav_t *self, int32_t title, uint 64_t **times, uint64_t *duration); | uint32_t dvdnav_describe_title_chapters(dvdnav_t *self, int32_t title, uint 64_t **times, uint64_t *duration); | |||
/* | /* | |||
* Play the specified amount of parts of the specified title of | * Play the specified amount of parts of the specified title of | |||
* the DVD then STOP. | * the DVD then STOP. | |||
* | * | |||
* Currently unimplemented! | * Currently unimplemented! | |||
*/ | */ | |||
dvdnav_status_t dvdnav_part_play_auto_stop(dvdnav_t *self, int32_t title, | dvdnav_status_t dvdnav_part_play_auto_stop(dvdnav_t *self, int32_t title, | |||
int32_t part, int32_t parts_to_pl ay); | int32_t part, int32_t parts_to_p lay); | |||
/* | /* | |||
* Play the specified title starting from the specified time. | * Play the specified title starting from the specified time. | |||
* | * | |||
* Currently unimplemented! | * Currently unimplemented! | |||
*/ | */ | |||
dvdnav_status_t dvdnav_time_play(dvdnav_t *self, int32_t title, | dvdnav_status_t dvdnav_time_play(dvdnav_t *self, int32_t title, | |||
uint64_t time); | uint64_t time); | |||
/* | /* | |||
* Stop playing the current position and jump to the specified menu. | * Stop playing the current position and jump to the specified menu. | |||
* | * | |||
* See also DVDMenuID_t from libdvdread | * See also DVDMenuID_t from libdvdread | |||
*/ | */ | |||
dvdnav_status_t dvdnav_menu_call(dvdnav_t *self, DVDMenuID_t menu); | dvdnav_status_t dvdnav_menu_call(dvdnav_t *self, DVDMenuID_t menu); | |||
/* | /* | |||
* Return the title number and part currently being played. | * Return the title number and part currently being played. | |||
* A title of 0 indicates we are in a menu. In this case, part | * A title of 0 indicates we are in a menu. In this case, part | |||
* is set to the current menu's ID. | * is set to the current menu's ID. | |||
*/ | */ | |||
dvdnav_status_t dvdnav_current_title_info(dvdnav_t *self, int32_t *title, | dvdnav_status_t dvdnav_current_title_info(dvdnav_t *self, int32_t *title, | |||
int32_t *part); | int32_t *part); | |||
/* | /* | |||
* Return the title number, pgcn and pgn currently being played. | * Return the title number, pgcn and pgn currently being played. | |||
* A title of 0 indicates, we are in a menu. | * A title of 0 indicates, we are in a menu. | |||
*/ | */ | |||
dvdnav_status_t dvdnav_current_title_program(dvdnav_t *self, int32_t *title , | dvdnav_status_t dvdnav_current_title_program(dvdnav_t *self, int32_t *title , | |||
int32_t *pgcn, int32_t *pgn); | int32_t *pgcn, int32_t *pgn); | |||
/* | /* | |||
* Return the current position (in blocks) within the current | * Return the current position (in blocks) within the current | |||
* title and the length (in blocks) of said title. | * title and the length (in blocks) of said title. | |||
* | * | |||
* Current implementation is wrong and likely to behave unpredictably! | * Current implementation is wrong and likely to behave unpredictably! | |||
* Use is discouraged! | * Use is discouraged! | |||
*/ | */ | |||
dvdnav_status_t dvdnav_get_position_in_title(dvdnav_t *self, | dvdnav_status_t dvdnav_get_position_in_title(dvdnav_t *self, | |||
uint32_t *pos, | uint32_t *pos, | |||
uint32_t *len); | uint32_t *len); | |||
/* | /* | |||
* This function is only available for compatibility reasons. | * This function is only available for compatibility reasons. | |||
* | * | |||
* Stop playing the current position and start playback of the current titl e | * Stop playing the current position and start playback of the current titl e | |||
* from the specified part. | * from the specified part. | |||
*/ | */ | |||
dvdnav_status_t dvdnav_part_search(dvdnav_t *self, int32_t part); | dvdnav_status_t dvdnav_part_search(dvdnav_t *self, int32_t part); | |||
/********************************************************************* | /********************************************************************* | |||
skipping to change at line 367 | skipping to change at line 364 | |||
* program and will fail if asked to do so. | * program and will fail if asked to do so. | |||
* | * | |||
* If program chain based positioning is enabled | * If program chain based positioning is enabled | |||
* (see dvdnav_set_PGC_positioning_flag()), this will seek to the relative | * (see dvdnav_set_PGC_positioning_flag()), this will seek to the relative | |||
* sector inside the current program chain. | * sector inside the current program chain. | |||
* | * | |||
* 'origin' can be one of SEEK_SET, SEEK_CUR, SEEK_END as defined in | * 'origin' can be one of SEEK_SET, SEEK_CUR, SEEK_END as defined in | |||
* fcntl.h. | * fcntl.h. | |||
*/ | */ | |||
dvdnav_status_t dvdnav_sector_search(dvdnav_t *self, | dvdnav_status_t dvdnav_sector_search(dvdnav_t *self, | |||
uint64_t offset, int32_t origin); | int64_t offset, int32_t origin); | |||
/* | /* | |||
returns the current stream time in PTS ticks as reported by the IFO struct ures | returns the current stream time in PTS ticks as reported by the IFO struct ures | |||
divide it by 90000 to get the current play time in seconds | divide it by 90000 to get the current play time in seconds | |||
*/ | */ | |||
int64_t dvdnav_get_current_time(dvdnav_t *self); | int64_t dvdnav_get_current_time(dvdnav_t *self); | |||
/* | /* | |||
* Stop playing the current position and start playback of the title | * Stop playing the current position and start playback of the title | |||
* from the specified timecode. | * from the specified timecode. | |||
* | * | |||
* Currently implemented using interpolation, which is slightly inaccurate. | * Currently implemented using interpolation. That interpolation is slightl | |||
y | ||||
* inaccurate. | ||||
*/ | */ | |||
dvdnav_status_t dvdnav_time_search(dvdnav_t *self, | dvdnav_status_t dvdnav_time_search(dvdnav_t *self, | |||
uint64_t time); | uint64_t time); | |||
/* | /* | |||
* Stop playing current position and play the "GoUp"-program chain. | * Stop playing current position and play the "GoUp"-program chain. | |||
* (which generally leads to the title menu or a higher-level menu). | * (which generally leads to the title menu or a higher-level menu). | |||
*/ | */ | |||
dvdnav_status_t dvdnav_go_up(dvdnav_t *self); | dvdnav_status_t dvdnav_go_up(dvdnav_t *self); | |||
/* | /* | |||
* Stop playing the current position and start playback at the | * Stop playing the current position and start playback at the | |||
* previous program (if it exists). | * previous program (if it exists). | |||
skipping to change at line 417 | skipping to change at line 415 | |||
/* | /* | |||
* Return the current position (in blocks) within the current | * Return the current position (in blocks) within the current | |||
* program and the length (in blocks) of current program. | * program and the length (in blocks) of current program. | |||
* | * | |||
* If program chain based positioning is enabled | * If program chain based positioning is enabled | |||
* (see dvdnav_set_PGC_positioning_flag()), this will return the | * (see dvdnav_set_PGC_positioning_flag()), this will return the | |||
* relative position in and the length of the current program chain. | * relative position in and the length of the current program chain. | |||
*/ | */ | |||
dvdnav_status_t dvdnav_get_position(dvdnav_t *self, uint32_t *pos, | dvdnav_status_t dvdnav_get_position(dvdnav_t *self, uint32_t *pos, | |||
uint32_t *len); | uint32_t *len); | |||
/********************************************************************* | /********************************************************************* | |||
* menu highlights * | * menu highlights * | |||
*********************************************************************/ | *********************************************************************/ | |||
/* | /* | |||
* Most functions related to highlights take a NAV PCI packet as a paramete r. | * Most functions related to highlights take a NAV PCI packet as a paramete r. | |||
* While you can get such a packet from libdvdnav, this will result in | * While you can get such a packet from libdvdnav, this will result in | |||
* errors for players with internal FIFOs because due to the FIFO length, | * errors for players with internal FIFOs because due to the FIFO length, | |||
* libdvdnav will be ahead in the stream compared to what the user is | * libdvdnav will be ahead in the stream compared to what the user is | |||
skipping to change at line 461 | skipping to change at line 459 | |||
* | * | |||
* Read the general notes above. | * Read the general notes above. | |||
* See also libdvdreads nav_types.h for definition of dsi_t. | * See also libdvdreads nav_types.h for definition of dsi_t. | |||
*/ | */ | |||
dsi_t* dvdnav_get_current_nav_dsi(dvdnav_t *self); | dsi_t* dvdnav_get_current_nav_dsi(dvdnav_t *self); | |||
/* | /* | |||
* Get the area associated with a certain button. | * Get the area associated with a certain button. | |||
*/ | */ | |||
dvdnav_status_t dvdnav_get_highlight_area(pci_t *nav_pci , int32_t button, int32_t mode, | dvdnav_status_t dvdnav_get_highlight_area(pci_t *nav_pci , int32_t button, int32_t mode, | |||
dvdnav_highlight_area_t *highlight ); | dvdnav_highlight_area_t *highligh t); | |||
/* | /* | |||
* Move button highlight around as suggested by function name (e.g. with ar row keys). | * Move button highlight around as suggested by function name (e.g. with ar row keys). | |||
*/ | */ | |||
dvdnav_status_t dvdnav_upper_button_select(dvdnav_t *self, pci_t *pci); | dvdnav_status_t dvdnav_upper_button_select(dvdnav_t *self, pci_t *pci); | |||
dvdnav_status_t dvdnav_lower_button_select(dvdnav_t *self, pci_t *pci); | dvdnav_status_t dvdnav_lower_button_select(dvdnav_t *self, pci_t *pci); | |||
dvdnav_status_t dvdnav_right_button_select(dvdnav_t *self, pci_t *pci); | dvdnav_status_t dvdnav_right_button_select(dvdnav_t *self, pci_t *pci); | |||
dvdnav_status_t dvdnav_left_button_select(dvdnav_t *self, pci_t *pci); | dvdnav_status_t dvdnav_left_button_select(dvdnav_t *self, pci_t *pci); | |||
/* | /* | |||
skipping to change at line 514 | skipping to change at line 512 | |||
/* | /* | |||
* The language codes expected by these functions are two character | * The language codes expected by these functions are two character | |||
* codes as defined in ISO639. | * codes as defined in ISO639. | |||
*/ | */ | |||
/* | /* | |||
* Set which menu language we should use per default. | * Set which menu language we should use per default. | |||
*/ | */ | |||
dvdnav_status_t dvdnav_menu_language_select(dvdnav_t *self, | dvdnav_status_t dvdnav_menu_language_select(dvdnav_t *self, | |||
char *code); | char *code); | |||
/* | /* | |||
* Set which audio language we should use per default. | * Set which audio language we should use per default. | |||
*/ | */ | |||
dvdnav_status_t dvdnav_audio_language_select(dvdnav_t *self, | dvdnav_status_t dvdnav_audio_language_select(dvdnav_t *self, | |||
char *code); | char *code); | |||
/* | /* | |||
* Set which spu language we should use per default. | * Set which spu language we should use per default. | |||
*/ | */ | |||
dvdnav_status_t dvdnav_spu_language_select(dvdnav_t *self, | dvdnav_status_t dvdnav_spu_language_select(dvdnav_t *self, | |||
char *code); | char *code); | |||
/********************************************************************* | /********************************************************************* | |||
* obtaining stream attributes * | * obtaining stream attributes * | |||
*********************************************************************/ | *********************************************************************/ | |||
/* | /* | |||
* Return a string describing the title of the DVD. | * Return a string describing the title of the DVD. | |||
* This is an ID string encoded on the disc by the author. In many cases | * This is an ID string encoded on the disc by the author. In many cases | |||
* this is a descriptive string such as `THE_MATRIX' but sometimes is singu larly | * this is a descriptive string such as `THE_MATRIX' but sometimes is singu larly | |||
* uninformative such as `PDVD-011421'. Some DVD authors even forget to set this, | * uninformative such as `PDVD-011421'. Some DVD authors even forget to set this, | |||
skipping to change at line 662 | skipping to change at line 660 | |||
/* | /* | |||
* Sets the current angle. If you try to follow a non existent angle | * Sets the current angle. If you try to follow a non existent angle | |||
* the call fails. | * the call fails. | |||
*/ | */ | |||
dvdnav_status_t dvdnav_angle_change(dvdnav_t *self, int32_t angle); | dvdnav_status_t dvdnav_angle_change(dvdnav_t *self, int32_t angle); | |||
/* | /* | |||
* Returns the current angle and number of angles present. | * Returns the current angle and number of angles present. | |||
*/ | */ | |||
dvdnav_status_t dvdnav_get_angle_info(dvdnav_t *self, int32_t *current_angl e, | dvdnav_status_t dvdnav_get_angle_info(dvdnav_t *self, int32_t *current_angl e, | |||
int32_t *number_of_angles); | int32_t *number_of_angles); | |||
/********************************************************************* | /********************************************************************* | |||
* domain queries * | * domain queries * | |||
*********************************************************************/ | *********************************************************************/ | |||
/* | /* | |||
* Are we in the First Play domain? | * Are we in the First Play domain? | |||
*/ | */ | |||
int8_t dvdnav_is_domain_fp(dvdnav_t *self); | int8_t dvdnav_is_domain_fp(dvdnav_t *self); | |||
End of changes. 18 change blocks. | ||||
23 lines changed or deleted | 22 lines changed or added | |||
dvdnav_events.h | dvdnav_events.h | |||
---|---|---|---|---|
skipping to change at line 34 | skipping to change at line 34 | |||
#ifndef LIBDVDNAV_DVDNAV_EVENTS_H | #ifndef LIBDVDNAV_DVDNAV_EVENTS_H | |||
#define LIBDVDNAV_DVDNAV_EVENTS_H | #define LIBDVDNAV_DVDNAV_EVENTS_H | |||
/* | /* | |||
* DVDNAV_BLOCK_OK | * DVDNAV_BLOCK_OK | |||
* | * | |||
* A regular data block from the DVD has been returned. | * A regular data block from the DVD has been returned. | |||
* This one should be demuxed and decoded for playback. | * This one should be demuxed and decoded for playback. | |||
*/ | */ | |||
#define DVDNAV_BLOCK_OK 0 | #define DVDNAV_BLOCK_OK 0 | |||
/* | /* | |||
* DVDNAV_NOP | * DVDNAV_NOP | |||
* | * | |||
* Just ignore this. | * Just ignore this. | |||
*/ | */ | |||
#define DVDNAV_NOP 1 | #define DVDNAV_NOP 1 | |||
/* | /* | |||
* DVDNAV_STILL_FRAME | * DVDNAV_STILL_FRAME | |||
* | * | |||
* We have reached a still frame. The player application should wait | * We have reached a still frame. The player application should wait | |||
* the amount of time specified by the still's length while still handling | * the amount of time specified by the still's length while still handling | |||
* user input to make menus and other interactive stills work. | * user input to make menus and other interactive stills work. | |||
* The last delivered frame should be kept showing. | * The last delivered frame should be kept showing. | |||
* Once the still has timed out, call dvdnav_skip_still(). | * Once the still has timed out, call dvdnav_skip_still(). | |||
* A length of 0xff means an infinite still which has to be skipped | * A length of 0xff means an infinite still which has to be skipped | |||
* indirectly by some user interaction. | * indirectly by some user interaction. | |||
*/ | */ | |||
#define DVDNAV_STILL_FRAME 2 | #define DVDNAV_STILL_FRAME 2 | |||
typedef struct { | typedef struct { | |||
/* The length (in seconds) the still frame should be displayed for, | /* The length (in seconds) the still frame should be displayed for, | |||
* or 0xff if infinite. */ | * or 0xff if infinite. */ | |||
int length; | int length; | |||
} dvdnav_still_event_t; | } dvdnav_still_event_t; | |||
/* | /* | |||
* DVDNAV_SPU_STREAM_CHANGE | * DVDNAV_SPU_STREAM_CHANGE | |||
* | * | |||
* Inform the SPU decoding/overlaying engine to switch SPU channels. | * Inform the SPU decoding/overlaying engine to switch SPU channels. | |||
*/ | */ | |||
#define DVDNAV_SPU_STREAM_CHANGE 3 | #define DVDNAV_SPU_STREAM_CHANGE 3 | |||
typedef struct { | typedef struct { | |||
/* The physical (MPEG) stream number for widescreen SPU display. | /* The physical (MPEG) stream number for widescreen SPU display. | |||
* Use this, if you blend the SPU on an anamorphic image before | * Use this, if you blend the SPU on an anamorphic image before | |||
* unsqueezing it. */ | * unsqueezing it. */ | |||
int physical_wide; | int physical_wide; | |||
/* The physical (MPEG) stream number for letterboxed display. | /* The physical (MPEG) stream number for letterboxed display. | |||
* Use this, if you blend the SPU on an anamorphic image after | * Use this, if you blend the SPU on an anamorphic image after | |||
* unsqueezing it. */ | * unsqueezing it. */ | |||
skipping to change at line 94 | skipping to change at line 94 | |||
/* The logical (DVD) stream number. */ | /* The logical (DVD) stream number. */ | |||
int logical; | int logical; | |||
} dvdnav_spu_stream_change_event_t; | } dvdnav_spu_stream_change_event_t; | |||
/* | /* | |||
* DVDNAV_AUDIO_STREAM_CHANGE | * DVDNAV_AUDIO_STREAM_CHANGE | |||
* | * | |||
* Inform the audio decoder to switch channels. | * Inform the audio decoder to switch channels. | |||
*/ | */ | |||
#define DVDNAV_AUDIO_STREAM_CHANGE 4 | #define DVDNAV_AUDIO_STREAM_CHANGE 4 | |||
typedef struct { | typedef struct { | |||
/* The physical (MPEG) stream number. */ | /* The physical (MPEG) stream number. */ | |||
int physical; | int physical; | |||
/* The logical (DVD) stream number. */ | /* The logical (DVD) stream number. */ | |||
int logical; | int logical; | |||
} dvdnav_audio_stream_change_event_t; | } dvdnav_audio_stream_change_event_t; | |||
/* | /* | |||
* DVDNAV_VTS_CHANGE | * DVDNAV_VTS_CHANGE | |||
* | * | |||
* Some status information like video aspect and video scale permissions do | * Some status information like video aspect and video scale permissions do | |||
* not change inside a VTS. Therefore this event can be used to query such | * not change inside a VTS. Therefore this event can be used to query such | |||
* information only when necessary and update the decoding/displaying | * information only when necessary and update the decoding/displaying | |||
* accordingly. | * accordingly. | |||
*/ | */ | |||
#define DVDNAV_VTS_CHANGE 5 | #define DVDNAV_VTS_CHANGE 5 | |||
typedef struct { | typedef struct { | |||
int old_vtsN; /* the old VTS number */ | int old_vtsN; /* the old VTS number */ | |||
dvd_read_domain_t old_domain; /* the old domain */ | DVDDomain_t old_domain; /* the old domain */ | |||
int new_vtsN; /* the new VTS number */ | int new_vtsN; /* the new VTS number */ | |||
dvd_read_domain_t new_domain; /* the new domain */ | DVDDomain_t new_domain; /* the new domain */ | |||
} dvdnav_vts_change_event_t; | } dvdnav_vts_change_event_t; | |||
/* | /* | |||
* DVDNAV_CELL_CHANGE | * DVDNAV_CELL_CHANGE | |||
* | * | |||
* Some status information like the current Title and Part numbers do not | * Some status information like the current Title and Part numbers do not | |||
* change inside a cell. Therefore this event can be used to query such | * change inside a cell. Therefore this event can be used to query such | |||
* information only when necessary and update the decoding/displaying | * information only when necessary and update the decoding/displaying | |||
* accordingly. | * accordingly. | |||
* Some useful information for accurate time display is also reported | * Some useful information for accurate time display is also reported | |||
* together with this event. | * together with this event. | |||
*/ | */ | |||
#define DVDNAV_CELL_CHANGE 6 | #define DVDNAV_CELL_CHANGE 6 | |||
typedef struct { | typedef struct { | |||
int cellN; /* the new cell number */ | int cellN; /* the new cell number */ | |||
int pgN; /* the current program number */ | int pgN; /* the current program number */ | |||
int64_t cell_length; /* the length of the current cell in PTS ticks */ | int64_t cell_length; /* the length of the current cell in PTS ticks */ | |||
int64_t pg_length; /* the length of the current program in PTS ticks */ | int64_t pg_length; /* the length of the current program in PTS ticks */ | |||
int64_t pgc_length; /* the length of the current program chain in PTS ti cks */ | int64_t pgc_length; /* the length of the current program chain in PTS ti cks */ | |||
int64_t cell_start; /* the start time of the current cell relatively to the PGC in PTS ticks */ | int64_t cell_start; /* the start time of the current cell relatively to the PGC in PTS ticks */ | |||
int64_t pg_start; /* the start time of the current PG relatively to th e PGC in PTS ticks */ | int64_t pg_start; /* the start time of the current PG relatively to th e PGC in PTS ticks */ | |||
} dvdnav_cell_change_event_t; | } dvdnav_cell_change_event_t; | |||
skipping to change at line 157 | skipping to change at line 157 | |||
* highlight areas and VM commands of DVD menus, so they should in any | * highlight areas and VM commands of DVD menus, so they should in any | |||
* case be sent to the SPU decoder/overlaying engine for the menus to work. | * case be sent to the SPU decoder/overlaying engine for the menus to work. | |||
* NAV packets also provide a way to detect PTS discontinuities, because | * NAV packets also provide a way to detect PTS discontinuities, because | |||
* they carry the start and end PTS values for the current VOBU. | * they carry the start and end PTS values for the current VOBU. | |||
* (pci.vobu_s_ptm and pci.vobu_e_ptm) Whenever the start PTS of the | * (pci.vobu_s_ptm and pci.vobu_e_ptm) Whenever the start PTS of the | |||
* current NAV does not match the end PTS of the previous NAV, a PTS | * current NAV does not match the end PTS of the previous NAV, a PTS | |||
* discontinuity has occured. | * discontinuity has occured. | |||
* NAV packets can also be used for time display, because they are | * NAV packets can also be used for time display, because they are | |||
* timestamped relatively to the current Cell. | * timestamped relatively to the current Cell. | |||
*/ | */ | |||
#define DVDNAV_NAV_PACKET 7 | #define DVDNAV_NAV_PACKET 7 | |||
/* | /* | |||
* DVDNAV_STOP | * DVDNAV_STOP | |||
* | * | |||
* Applications should end playback here. A subsequent dvdnav_get_next_bloc k() | * Applications should end playback here. A subsequent dvdnav_get_next_bloc k() | |||
* call will restart the VM from the beginning of the DVD. | * call will restart the VM from the beginning of the DVD. | |||
*/ | */ | |||
#define DVDNAV_STOP 8 | #define DVDNAV_STOP 8 | |||
/* | /* | |||
* DVDNAV_HIGHLIGHT | * DVDNAV_HIGHLIGHT | |||
* | * | |||
* The current button highlight changed. Inform the overlaying engine to | * The current button highlight changed. Inform the overlaying engine to | |||
* highlight a different button. Please note, that at the moment only mode 1 | * highlight a different button. Please note, that at the moment only mode 1 | |||
* highlights are reported this way. That means, when the button highlight | * highlights are reported this way. That means, when the button highlight | |||
* has been moved around by some function call, you will receive an event | * has been moved around by some function call, you will receive an event | |||
* telling you the new button. But when a button gets activated, you have | * telling you the new button. But when a button gets activated, you have | |||
* to handle the mode 2 highlighting (that is some different colour the | * to handle the mode 2 highlighting (that is some different colour the | |||
* button turns to on activation) in your application. | * button turns to on activation) in your application. | |||
*/ | */ | |||
#define DVDNAV_HIGHLIGHT 9 | #define DVDNAV_HIGHLIGHT 9 | |||
typedef struct { | typedef struct { | |||
/* highlight mode: 0 - hide, 1 - show, 2 - activate, currently always 1 * / | /* highlight mode: 0 - hide, 1 - show, 2 - activate, currently always 1 * / | |||
int display; | int display; | |||
/* FIXME: these fields are currently not set */ | /* FIXME: these fields are currently not set */ | |||
uint32_t palette; /* The CLUT entries for the highlight palette | uint32_t palette; /* The CLUT entries for the highlight palette | |||
(4-bits per entry -> 4 entries) */ | (4-bits per entry -> 4 entries) */ | |||
uint16_t sx,sy,ex,ey; /* The start/end x,y positions */ | uint16_t sx,sy,ex,ey; /* The start/end x,y positions */ | |||
uint32_t pts; /* Highlight PTS to match with SPU */ | uint32_t pts; /* Highlight PTS to match with SPU */ | |||
/* button number for the SPU decoder/overlaying engine */ | /* button number for the SPU decoder/overlaying engine */ | |||
uint32_t buttonN; | uint32_t buttonN; | |||
} dvdnav_highlight_event_t; | } dvdnav_highlight_event_t; | |||
/* | /* | |||
* DVDNAV_SPU_CLUT_CHANGE | * DVDNAV_SPU_CLUT_CHANGE | |||
* | * | |||
* Inform the SPU decoder/overlaying engine to update its colour lookup tab le. | * Inform the SPU decoder/overlaying engine to update its colour lookup tab le. | |||
* The CLUT is given as 16 uint32_t's in the buffer. | * The CLUT is given as 16 uint32_t's in the buffer. | |||
*/ | */ | |||
#define DVDNAV_SPU_CLUT_CHANGE 10 | #define DVDNAV_SPU_CLUT_CHANGE 10 | |||
/* | /* | |||
* DVDNAV_HOP_CHANNEL | * DVDNAV_HOP_CHANNEL | |||
* | * | |||
* A non-seamless operation has been performed. Applications can drop all | * A non-seamless operation has been performed. Applications can drop all | |||
* their internal fifo's content, which will speed up the response. | * their internal fifo's content, which will speed up the response. | |||
*/ | */ | |||
#define DVDNAV_HOP_CHANNEL 12 | #define DVDNAV_HOP_CHANNEL 12 | |||
/* | /* | |||
* DVDNAV_WAIT | * DVDNAV_WAIT | |||
* | * | |||
* We have reached a point in DVD playback, where timing is critical. | * We have reached a point in DVD playback, where timing is critical. | |||
* Player application with internal fifos can introduce state | * Player application with internal fifos can introduce state | |||
* inconsistencies, because libdvdnav is always the fifo's length | * inconsistencies, because libdvdnav is always the fifo's length | |||
* ahead in the stream compared to what the application sees. | * ahead in the stream compared to what the application sees. | |||
* Such applications should wait until their fifos are empty | * Such applications should wait until their fifos are empty | |||
* when they receive this type of event. | * when they receive this type of event. | |||
* Once this is achieved, call dvdnav_skip_wait(). | * Once this is achieved, call dvdnav_skip_wait(). | |||
*/ | */ | |||
#define DVDNAV_WAIT 13 | #define DVDNAV_WAIT 13 | |||
#endif /* LIBDVDNAV_DVDNAV_EVENTS_H */ | #endif /* LIBDVDNAV_DVDNAV_EVENTS_H */ | |||
End of changes. 16 change blocks. | ||||
16 lines changed or deleted | 16 lines changed or added | |||