diff options
Diffstat (limited to 'libmpdvdkit2/nav_types.h')
-rw-r--r-- | libmpdvdkit2/nav_types.h | 161 |
1 files changed, 90 insertions, 71 deletions
diff --git a/libmpdvdkit2/nav_types.h b/libmpdvdkit2/nav_types.h index af81f36f2d..4abbbd02f4 100644 --- a/libmpdvdkit2/nav_types.h +++ b/libmpdvdkit2/nav_types.h @@ -2,7 +2,7 @@ #define NAV_TYPES_H_INCLUDED /* - * Copyright (C) 2000, 2001 Håkan Hjort <d95hjort@dtek.chalmers.se> + * Copyright (C) 2000, 2001, 2002 Håkan Hjort <d95hjort@dtek.chalmers.se> * * Modified for use with MPlayer, changes contained in libdvdread_changes.diff. * detailed CVS changelog at http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/ @@ -34,7 +34,7 @@ */ #include <inttypes.h> -#include "ifo_types.h" // only dvd_time_t, vm_cmd_t and user_ops_t +#include "ifo_types.h" /* only dvd_time_t, vm_cmd_t and user_ops_t */ #undef ATTRIBUTE_PACKED @@ -74,14 +74,14 @@ * PCI General Information */ typedef struct { - uint32_t nv_pck_lbn; - uint16_t vobu_cat; - uint16_t zero1; - user_ops_t vobu_uop_ctl; - uint32_t vobu_s_ptm; - uint32_t vobu_e_ptm; - uint32_t vobu_se_e_ptm; - dvd_time_t e_eltm; + uint32_t nv_pck_lbn; /**< sector address of this nav pack */ + uint16_t vobu_cat; /**< 'category' of vobu */ + uint16_t zero1; /**< reserved */ + user_ops_t vobu_uop_ctl; /**< UOP of vobu */ + uint32_t vobu_s_ptm; /**< start presentation time of vobu */ + uint32_t vobu_e_ptm; /**< end presentation time of vobu */ + uint32_t vobu_se_e_ptm; /**< end ptm of sequence end in vobu */ + dvd_time_t e_eltm; /**< Cell elapsed time */ char vobu_isrc[32]; } ATTRIBUTE_PACKED pci_gi_t; @@ -89,26 +89,32 @@ typedef struct { * Non Seamless Angle Information */ typedef struct { - uint32_t nsml_agl_dsta[9]; + uint32_t nsml_agl_dsta[9]; /**< address of destination vobu in AGL_C#n */ } ATTRIBUTE_PACKED nsml_agli_t; /** * Highlight General Information + * + * For btngrX_dsp_ty the bits have the following meaning: + * 000b: normal 4/3 only buttons + * XX1b: wide (16/9) buttons + * X1Xb: letterbox buttons + * 1XXb: pan&scan buttons */ typedef struct { - uint16_t hli_ss; ///< only low 2 bits - uint32_t hli_s_ptm; - uint32_t hli_e_ptm; - uint32_t btn_se_e_ptm; + uint16_t hli_ss; /**< status, only low 2 bits 0: no buttons, 1: different 2: equal 3: eual except for button cmds */ + uint32_t hli_s_ptm; /**< start ptm of hli */ + uint32_t hli_e_ptm; /**< end ptm of hli */ + uint32_t btn_se_e_ptm; /**< end ptm of button select */ #ifdef WORDS_BIGENDIAN - unsigned int zero1 : 2; - unsigned int btngr_ns : 2; - unsigned int zero2 : 1; - unsigned int btngr1_dsp_ty : 3; - unsigned int zero3 : 1; - unsigned int btngr2_dsp_ty : 3; - unsigned int zero4 : 1; - unsigned int btngr3_dsp_ty : 3; + unsigned int zero1 : 2; /**< reserved */ + unsigned int btngr_ns : 2; /**< number of button groups 1, 2 or 3 with 36/18/12 buttons */ + unsigned int zero2 : 1; /**< reserved */ + unsigned int btngr1_dsp_ty : 3; /**< display type of subpic stream for button group 1 */ + unsigned int zero3 : 1; /**< reserved */ + unsigned int btngr2_dsp_ty : 3; /**< display type of subpic stream for button group 2 */ + unsigned int zero4 : 1; /**< reserved */ + unsigned int btngr3_dsp_ty : 3; /**< display type of subpic stream for button group 3 */ #else unsigned int btngr1_dsp_ty : 3; unsigned int zero2 : 1; @@ -119,56 +125,69 @@ typedef struct { unsigned int btngr2_dsp_ty : 3; unsigned int zero3 : 1; #endif - uint8_t btn_ofn; - uint8_t btn_ns; ///< only low 6 bits - uint8_t nsl_btn_ns; ///< only low 6 bits - uint8_t zero5; - uint8_t fosl_btnn; ///< only low 6 bits - uint8_t foac_btnn; ///< only low 6 bits + uint8_t btn_ofn; /**< button offset number range 0-255 */ + uint8_t btn_ns; /**< number of valid buttons <= 36/18/12 (low 6 bits) */ + uint8_t nsl_btn_ns; /**< number of buttons selectable by U_BTNNi (low 6 bits) nsl_btn_ns <= btn_ns */ + uint8_t zero5; /**< reserved */ + uint8_t fosl_btnn; /**< forcedly selected button (low 6 bits) */ + uint8_t foac_btnn; /**< forcedly activated button (low 6 bits) */ } ATTRIBUTE_PACKED hl_gi_t; /** * Button Color Information Table + * Each entry beeing a 32bit word that contains the color indexs and alpha + * values to use. They are all represented by 4 bit number and stored + * like this [Ci3, Ci2, Ci1, Ci0, A3, A2, A1, A0]. The actual palette + * that the indexes reference is in the PGC. + * @TODO split the uint32_t into a struct */ typedef struct { - uint32_t btn_coli[3][2]; + uint32_t btn_coli[3][2]; /**< [button color number-1][select:0/action:1] */ } ATTRIBUTE_PACKED btn_colit_t; /** * Button Information + * + * NOTE: I've had to change the structure from the disk layout to get + * the packing to work with Sun's Forte C compiler. + * The 4 and 7 bytes are 'rotated' was: ABC DEF GHIJ is: ABCG DEFH IJ */ typedef struct { #ifdef WORDS_BIGENDIAN - unsigned int btn_coln : 2; - unsigned int x_start : 10; - unsigned int zero1 : 2; - unsigned int x_end : 10; - unsigned int auto_action_mode : 2; - unsigned int y_start : 10; - unsigned int zero2 : 2; - unsigned int y_end : 10; - - unsigned int zero3 : 2; - unsigned int up : 6; - unsigned int zero4 : 2; - unsigned int down : 6; - unsigned int zero5 : 2; - unsigned int left : 6; - unsigned int zero6 : 2; - unsigned int right : 6; + unsigned int btn_coln : 2; /**< button color number */ + unsigned int x_start : 10; /**< x start offset within the overlay */ + unsigned int zero1 : 2; /**< reserved */ + unsigned int x_end : 10; /**< x end offset within the overlay */ + + unsigned int zero3 : 2; /**< reserved */ + unsigned int up : 6; /**< button index when pressing up */ + + unsigned int auto_action_mode : 2; /**< 0: no, 1: activated if selected */ + unsigned int y_start : 10; /**< y start offset within the overlay */ + unsigned int zero2 : 2; /**< reserved */ + unsigned int y_end : 10; /**< y end offset within the overlay */ + + unsigned int zero4 : 2; /**< reserved */ + unsigned int down : 6; /**< button index when pressing down */ + unsigned int zero5 : 2; /**< reserved */ + unsigned int left : 6; /**< button index when pressing left */ + unsigned int zero6 : 2; /**< reserved */ + unsigned int right : 6; /**< button index when pressing right */ #else unsigned int x_end : 10; unsigned int zero1 : 2; unsigned int x_start : 10; unsigned int btn_coln : 2; + + unsigned int up : 6; + unsigned int zero3 : 2; + unsigned int y_end : 10; unsigned int zero2 : 2; unsigned int y_start : 10; unsigned int auto_action_mode : 2; - unsigned int up : 6; - unsigned int zero3 : 2; unsigned int down : 6; unsigned int zero4 : 2; unsigned int left : 6; @@ -206,27 +225,27 @@ typedef struct { */ typedef struct { uint32_t nv_pck_scr; - uint32_t nv_pck_lbn; - uint32_t vobu_ea; - uint32_t vobu_1stref_ea; - uint32_t vobu_2ndref_ea; - uint32_t vobu_3rdref_ea; - uint16_t vobu_vob_idn; - uint8_t zero1; - uint8_t vobu_c_idn; - dvd_time_t c_eltm; + uint32_t nv_pck_lbn; /**< sector address of this nav pack */ + uint32_t vobu_ea; /**< end address of this VOBU */ + uint32_t vobu_1stref_ea; /**< end address of the 1st reference image */ + uint32_t vobu_2ndref_ea; /**< end address of the 2nd reference image */ + uint32_t vobu_3rdref_ea; /**< end address of the 3rd reference image */ + uint16_t vobu_vob_idn; /**< VOB Id number that this VOBU is part of */ + uint8_t zero1; /**< reserved */ + uint8_t vobu_c_idn; /**< Cell Id number that this VOBU is part of */ + dvd_time_t c_eltm; /**< Cell elapsed time */ } ATTRIBUTE_PACKED dsi_gi_t; /** * Seamless Playback Information */ typedef struct { - uint16_t category; ///< category of seamless VOBU - uint32_t ilvu_ea; ///< end address of interleaved Unit (sectors) - uint32_t ilvu_sa; ///< start address of next interleaved unit (sectors) - uint16_t size; ///< size of next interleaved unit (sectors) - uint32_t vob_v_s_s_ptm; ///< video start ptm in vob - uint32_t vob_v_e_e_ptm; ///< video end ptm in vob + uint16_t category; /**< 'category' of seamless VOBU */ + uint32_t ilvu_ea; /**< end address of interleaved Unit */ + uint32_t ilvu_sa; /**< start address of next interleaved unit */ + uint16_t size; /**< size of next interleaved unit */ + uint32_t vob_v_s_s_ptm; /**< video start ptm in vob */ + uint32_t vob_v_e_e_ptm; /**< video end ptm in vob */ struct { uint32_t stp_ptm1; uint32_t stp_ptm2; @@ -239,8 +258,8 @@ typedef struct { * Seamless Angle Infromation for one angle */ typedef struct { - uint32_t address; ///< Sector offset to next ILVU, high bit is before/after - uint16_t size; ///< Byte size of the ILVU poited to by address. + uint32_t address; /**< offset to next ILVU, high bit is before/after */ + uint16_t size; /**< byte size of the ILVU pointed to by address */ } ATTRIBUTE_PACKED sml_agl_data_t; /** @@ -254,11 +273,11 @@ typedef struct { * VOBU Search Information */ typedef struct { - uint32_t next_video; ///< Next vobu that contains video - uint32_t fwda[19]; ///< Forwards, time + uint32_t next_video; /**< Next vobu that contains video */ + uint32_t fwda[19]; /**< Forwards, time */ uint32_t next_vobu; uint32_t prev_vobu; - uint32_t bwda[19]; ///< Backwards, time + uint32_t bwda[19]; /**< Backwards, time */ uint32_t prev_video; } ATTRIBUTE_PACKED vobu_sri_t; @@ -268,8 +287,8 @@ typedef struct { * Synchronous Information */ typedef struct { - uint16_t a_synca[8]; ///< Sector offset to first audio packet for this VOBU - uint32_t sp_synca[32]; ///< Sector offset to first subpicture packet + uint16_t a_synca[8]; /**< offset to first audio packet for this VOBU */ + uint32_t sp_synca[32]; /**< offset to first subpicture packet */ } ATTRIBUTE_PACKED synci_t; /** |