summaryrefslogtreecommitdiffstats
path: root/libmpdvdkit2/nav_types.h
diff options
context:
space:
mode:
Diffstat (limited to 'libmpdvdkit2/nav_types.h')
-rw-r--r--libmpdvdkit2/nav_types.h161
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;
/**