1 /* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
2 #ifndef NAV_TYPES_H_INCLUDED
3 #define NAV_TYPES_H_INCLUDED
6 * Copyright (C) 2000, 2001, 2002 HÃ¥kan Hjort <d95hjort@dtek.chalmers.se>
8 * The data structures in this file should represent the layout of the
9 * pci and dsi packets as they are stored in the stream. Information
10 * found by reading the source to VOBDUMP is the base for the structure
11 * and names of these data types.
13 * VOBDUMP: a program for examining DVD .VOB files.
14 * Copyright 1998, 1999 Eric Smith <eric@brouhaha.com>
16 * VOBDUMP is free software; you can redistribute it and/or modify it
17 * under the terms of the GNU General Public License version 2 as
18 * published by the Free Software Foundation. Note that I am not
19 * granting permission to redistribute or modify VOBDUMP under the terms
20 * of any later version of the General Public License.
22 * This program is distributed in the hope that it will be useful (or at
23 * least amusing), but WITHOUT ANY WARRANTY; without even the implied
24 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
25 * the GNU General Public License for more details.
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
33 #include <libdvdread/ifo_types.h> /* only dvd_time_t, vm_cmd_t and user_ops_t */
34 /* If it's ever removed add a uintX_t test. */
36 #undef ATTRIBUTE_PACKED
37 #undef PRAGMA_PACK_BEGIN
38 #undef PRAGMA_PACK_END
41 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
42 #define ATTRIBUTE_PACKED __attribute__ ((packed))
47 #if !defined(ATTRIBUTE_PACKED)
48 #define ATTRIBUTE_PACKED
53 /* The length including the substream id byte. */
54 #define PCI_BYTES 0x3d4
55 #define DSI_BYTES 0x3fa
57 #define PS2_PCI_SUBSTREAM_ID 0x00
58 #define PS2_DSI_SUBSTREAM_ID 0x01
61 #define DSI_START_BYTE 1031
70 * PCI General Information
73 uint32_t nv_pck_lbn
; /**< sector address of this nav pack */
74 uint16_t vobu_cat
; /**< 'category' of vobu */
75 uint16_t zero1
; /**< reserved */
76 user_ops_t vobu_uop_ctl
; /**< UOP of vobu */
77 uint32_t vobu_s_ptm
; /**< start presentation time of vobu */
78 uint32_t vobu_e_ptm
; /**< end presentation time of vobu */
79 uint32_t vobu_se_e_ptm
; /**< end ptm of sequence end in vobu */
80 dvd_time_t e_eltm
; /**< Cell elapsed time */
82 } ATTRIBUTE_PACKED pci_gi_t
;
85 * Non Seamless Angle Information
88 uint32_t nsml_agl_dsta
[9]; /**< address of destination vobu in AGL_C#n */
89 } ATTRIBUTE_PACKED nsml_agli_t
;
92 * Highlight General Information
94 * For btngrX_dsp_ty the bits have the following meaning:
95 * 000b: normal 4/3 only buttons
96 * XX1b: wide (16/9) buttons
97 * X1Xb: letterbox buttons
98 * 1XXb: pan&scan buttons
101 uint16_t hli_ss
; /**< status, only low 2 bits 0: no buttons, 1: different 2: equal 3: eual except for button cmds */
102 uint32_t hli_s_ptm
; /**< start ptm of hli */
103 uint32_t hli_e_ptm
; /**< end ptm of hli */
104 uint32_t btn_se_e_ptm
; /**< end ptm of button select */
105 unsigned int zero1
: 2; /**< reserved */
106 unsigned int btngr_ns
: 2; /**< number of button groups 1, 2 or 3 with 36/18/12 buttons */
107 unsigned int zero2
: 1; /**< reserved */
108 unsigned int btngr1_dsp_ty
: 3; /**< display type of subpic stream for button group 1 */
109 unsigned int zero3
: 1; /**< reserved */
110 unsigned int btngr2_dsp_ty
: 3; /**< display type of subpic stream for button group 2 */
111 unsigned int zero4
: 1; /**< reserved */
112 unsigned int btngr3_dsp_ty
: 3; /**< display type of subpic stream for button group 3 */
113 uint8_t btn_ofn
; /**< button offset number range 0-255 */
114 uint8_t btn_ns
; /**< number of valid buttons <= 36/18/12 (low 6 bits) */
115 uint8_t nsl_btn_ns
; /**< number of buttons selectable by U_BTNNi (low 6 bits) nsl_btn_ns <= btn_ns */
116 uint8_t zero5
; /**< reserved */
117 uint8_t fosl_btnn
; /**< forcedly selected button (low 6 bits) */
118 uint8_t foac_btnn
; /**< forcedly activated button (low 6 bits) */
119 } ATTRIBUTE_PACKED hl_gi_t
;
123 * Button Color Information Table
124 * Each entry beeing a 32bit word that contains the color indexs and alpha
125 * values to use. They are all represented by 4 bit number and stored
126 * like this [Ci3, Ci2, Ci1, Ci0, A3, A2, A1, A0]. The actual palette
127 * that the indexes reference is in the PGC.
128 * @TODO split the uint32_t into a struct
131 uint32_t btn_coli
[3][2]; /**< [button color number-1][select:0/action:1] */
132 } ATTRIBUTE_PACKED btn_colit_t
;
137 * NOTE: I've had to change the structure from the disk layout to get
138 * the packing to work with Sun's Forte C compiler.
139 * The 4 and 7 bytes are 'rotated' was: ABC DEF GHIJ is: ABCG DEFH IJ
142 unsigned int btn_coln
: 2; /**< button color number */
143 unsigned int x_start
: 10; /**< x start offset within the overlay */
144 unsigned int zero1
: 2; /**< reserved */
145 unsigned int x_end
: 10; /**< x end offset within the overlay */
147 unsigned int auto_action_mode
: 2; /**< 0: no, 1: activated if selected */
148 unsigned int y_start
: 10; /**< y start offset within the overlay */
149 unsigned int zero2
: 2; /**< reserved */
150 unsigned int y_end
: 10; /**< y end offset within the overlay */
152 unsigned int zero3
: 2; /**< reserved */
153 unsigned int up
: 6; /**< button index when pressing up */
154 unsigned int zero4
: 2; /**< reserved */
155 unsigned int down
: 6; /**< button index when pressing down */
156 unsigned int zero5
: 2; /**< reserved */
157 unsigned int left
: 6; /**< button index when pressing left */
158 unsigned int zero6
: 2; /**< reserved */
159 unsigned int right
: 6; /**< button index when pressing right */
161 } ATTRIBUTE_PACKED btni_t
;
164 * Highlight Information
168 btn_colit_t btn_colit
;
170 } ATTRIBUTE_PACKED hli_t
;
177 nsml_agli_t nsml_agli
;
180 } ATTRIBUTE_PACKED pci_t
;
186 * DSI General Information
190 uint32_t nv_pck_lbn
; /**< sector address of this nav pack */
191 uint32_t vobu_ea
; /**< end address of this VOBU */
192 uint32_t vobu_1stref_ea
; /**< end address of the 1st reference image */
193 uint32_t vobu_2ndref_ea
; /**< end address of the 2nd reference image */
194 uint32_t vobu_3rdref_ea
; /**< end address of the 3rd reference image */
195 uint16_t vobu_vob_idn
; /**< VOB Id number that this VOBU is part of */
196 uint8_t zero1
; /**< reserved */
197 uint8_t vobu_c_idn
; /**< Cell Id number that this VOBU is part of */
198 dvd_time_t c_eltm
; /**< Cell elapsed time */
199 } ATTRIBUTE_PACKED dsi_gi_t
;
202 * Seamless Playback Information
205 uint16_t category
; /**< 'category' of seamless VOBU */
206 uint32_t ilvu_ea
; /**< end address of interleaved Unit */
207 uint32_t ilvu_sa
; /**< start address of next interleaved unit */
208 uint16_t size
; /**< size of next interleaved unit */
209 uint32_t vob_v_s_s_ptm
; /**< video start ptm in vob */
210 uint32_t vob_v_e_e_ptm
; /**< video end ptm in vob */
217 } ATTRIBUTE_PACKED sml_pbi_t
;
220 * Seamless Angle Infromation for one angle
223 uint32_t address
; /**< offset to next ILVU, high bit is before/after */
224 uint16_t size
; /**< byte size of the ILVU pointed to by address */
225 } ATTRIBUTE_PACKED sml_agl_data_t
;
228 * Seamless Angle Infromation
231 sml_agl_data_t data
[9];
232 } ATTRIBUTE_PACKED sml_agli_t
;
235 * VOBU Search Information
238 uint32_t next_video
; /**< Next vobu that contains video */
239 uint32_t fwda
[19]; /**< Forwards, time */
242 uint32_t bwda
[19]; /**< Backwards, time */
244 } ATTRIBUTE_PACKED vobu_sri_t
;
246 #define SRI_END_OF_CELL 0x3fffffff
249 * Synchronous Information
252 uint16_t a_synca
[8]; /**< offset to first audio packet for this VOBU */
253 uint32_t sp_synca
[32]; /**< offset to first subpicture packet */
254 } ATTRIBUTE_PACKED synci_t
;
266 } ATTRIBUTE_PACKED dsi_t
;
273 #endif /* NAV_TYPES_H_INCLUDED */