QuickTime in24 and in32 PCM audio support
[mplayer/glamo.git] / libmpdvdkit2 / nav_types.h
blob4abbbd02f4bc5fe0247a9db0b69e7508e2f2aa0a
1 #ifndef NAV_TYPES_H_INCLUDED
2 #define NAV_TYPES_H_INCLUDED
4 /*
5 * Copyright (C) 2000, 2001, 2002 HÃ¥kan Hjort <d95hjort@dtek.chalmers.se>
7 * Modified for use with MPlayer, changes contained in libdvdread_changes.diff.
8 * detailed CVS changelog at http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/
9 * $Id$
11 * The data structures in this file should represent the layout of the
12 * pci and dsi packets as they are stored in the stream. Information
13 * found by reading the source to VOBDUMP is the base for the structure
14 * and names of these data types.
16 * VOBDUMP: a program for examining DVD .VOB files.
17 * Copyright 1998, 1999 Eric Smith <eric@brouhaha.com>
19 * VOBDUMP is free software; you can redistribute it and/or modify it
20 * under the terms of the GNU General Public License version 2 as
21 * published by the Free Software Foundation. Note that I am not
22 * granting permission to redistribute or modify VOBDUMP under the terms
23 * of any later version of the General Public License.
25 * This program is distributed in the hope that it will be useful (or at
26 * least amusing), but WITHOUT ANY WARRANTY; without even the implied
27 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
28 * the GNU General Public License for more details.
30 * You should have received a copy of the GNU General Public License
31 * along with this program; if not, write to the Free Software
32 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
33 * USA
36 #include <inttypes.h>
37 #include "ifo_types.h" /* only dvd_time_t, vm_cmd_t and user_ops_t */
40 #undef ATTRIBUTE_PACKED
41 #undef PRAGMA_PACK_BEGIN
42 #undef PRAGMA_PACK_END
44 #if defined(__GNUC__)
45 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
46 #define ATTRIBUTE_PACKED __attribute__ ((packed))
47 #define PRAGMA_PACK 0
48 #endif
49 #endif
51 #if !defined(ATTRIBUTE_PACKED)
52 #define ATTRIBUTE_PACKED
53 #define PRAGMA_PACK 1
54 #endif
57 /* The length including the substream id byte. */
58 #define PCI_BYTES 0x3d4
59 #define DSI_BYTES 0x3fa
61 #define PS2_PCI_SUBSTREAM_ID 0x00
62 #define PS2_DSI_SUBSTREAM_ID 0x01
64 /* Remove this */
65 #define DSI_START_BYTE 1031
68 #if PRAGMA_PACK
69 #pragma pack(1)
70 #endif
73 /**
74 * PCI General Information
76 typedef struct {
77 uint32_t nv_pck_lbn; /**< sector address of this nav pack */
78 uint16_t vobu_cat; /**< 'category' of vobu */
79 uint16_t zero1; /**< reserved */
80 user_ops_t vobu_uop_ctl; /**< UOP of vobu */
81 uint32_t vobu_s_ptm; /**< start presentation time of vobu */
82 uint32_t vobu_e_ptm; /**< end presentation time of vobu */
83 uint32_t vobu_se_e_ptm; /**< end ptm of sequence end in vobu */
84 dvd_time_t e_eltm; /**< Cell elapsed time */
85 char vobu_isrc[32];
86 } ATTRIBUTE_PACKED pci_gi_t;
88 /**
89 * Non Seamless Angle Information
91 typedef struct {
92 uint32_t nsml_agl_dsta[9]; /**< address of destination vobu in AGL_C#n */
93 } ATTRIBUTE_PACKED nsml_agli_t;
95 /**
96 * Highlight General Information
98 * For btngrX_dsp_ty the bits have the following meaning:
99 * 000b: normal 4/3 only buttons
100 * XX1b: wide (16/9) buttons
101 * X1Xb: letterbox buttons
102 * 1XXb: pan&scan buttons
104 typedef struct {
105 uint16_t hli_ss; /**< status, only low 2 bits 0: no buttons, 1: different 2: equal 3: eual except for button cmds */
106 uint32_t hli_s_ptm; /**< start ptm of hli */
107 uint32_t hli_e_ptm; /**< end ptm of hli */
108 uint32_t btn_se_e_ptm; /**< end ptm of button select */
109 #ifdef WORDS_BIGENDIAN
110 unsigned int zero1 : 2; /**< reserved */
111 unsigned int btngr_ns : 2; /**< number of button groups 1, 2 or 3 with 36/18/12 buttons */
112 unsigned int zero2 : 1; /**< reserved */
113 unsigned int btngr1_dsp_ty : 3; /**< display type of subpic stream for button group 1 */
114 unsigned int zero3 : 1; /**< reserved */
115 unsigned int btngr2_dsp_ty : 3; /**< display type of subpic stream for button group 2 */
116 unsigned int zero4 : 1; /**< reserved */
117 unsigned int btngr3_dsp_ty : 3; /**< display type of subpic stream for button group 3 */
118 #else
119 unsigned int btngr1_dsp_ty : 3;
120 unsigned int zero2 : 1;
121 unsigned int btngr_ns : 2;
122 unsigned int zero1 : 2;
123 unsigned int btngr3_dsp_ty : 3;
124 unsigned int zero4 : 1;
125 unsigned int btngr2_dsp_ty : 3;
126 unsigned int zero3 : 1;
127 #endif
128 uint8_t btn_ofn; /**< button offset number range 0-255 */
129 uint8_t btn_ns; /**< number of valid buttons <= 36/18/12 (low 6 bits) */
130 uint8_t nsl_btn_ns; /**< number of buttons selectable by U_BTNNi (low 6 bits) nsl_btn_ns <= btn_ns */
131 uint8_t zero5; /**< reserved */
132 uint8_t fosl_btnn; /**< forcedly selected button (low 6 bits) */
133 uint8_t foac_btnn; /**< forcedly activated button (low 6 bits) */
134 } ATTRIBUTE_PACKED hl_gi_t;
137 /**
138 * Button Color Information Table
139 * Each entry beeing a 32bit word that contains the color indexs and alpha
140 * values to use. They are all represented by 4 bit number and stored
141 * like this [Ci3, Ci2, Ci1, Ci0, A3, A2, A1, A0]. The actual palette
142 * that the indexes reference is in the PGC.
143 * @TODO split the uint32_t into a struct
145 typedef struct {
146 uint32_t btn_coli[3][2]; /**< [button color number-1][select:0/action:1] */
147 } ATTRIBUTE_PACKED btn_colit_t;
149 /**
150 * Button Information
152 * NOTE: I've had to change the structure from the disk layout to get
153 * the packing to work with Sun's Forte C compiler.
154 * The 4 and 7 bytes are 'rotated' was: ABC DEF GHIJ is: ABCG DEFH IJ
156 typedef struct {
157 #ifdef WORDS_BIGENDIAN
158 unsigned int btn_coln : 2; /**< button color number */
159 unsigned int x_start : 10; /**< x start offset within the overlay */
160 unsigned int zero1 : 2; /**< reserved */
161 unsigned int x_end : 10; /**< x end offset within the overlay */
163 unsigned int zero3 : 2; /**< reserved */
164 unsigned int up : 6; /**< button index when pressing up */
166 unsigned int auto_action_mode : 2; /**< 0: no, 1: activated if selected */
167 unsigned int y_start : 10; /**< y start offset within the overlay */
168 unsigned int zero2 : 2; /**< reserved */
169 unsigned int y_end : 10; /**< y end offset within the overlay */
171 unsigned int zero4 : 2; /**< reserved */
172 unsigned int down : 6; /**< button index when pressing down */
173 unsigned int zero5 : 2; /**< reserved */
174 unsigned int left : 6; /**< button index when pressing left */
175 unsigned int zero6 : 2; /**< reserved */
176 unsigned int right : 6; /**< button index when pressing right */
177 #else
178 unsigned int x_end : 10;
179 unsigned int zero1 : 2;
180 unsigned int x_start : 10;
181 unsigned int btn_coln : 2;
183 unsigned int up : 6;
184 unsigned int zero3 : 2;
186 unsigned int y_end : 10;
187 unsigned int zero2 : 2;
188 unsigned int y_start : 10;
189 unsigned int auto_action_mode : 2;
191 unsigned int down : 6;
192 unsigned int zero4 : 2;
193 unsigned int left : 6;
194 unsigned int zero5 : 2;
195 unsigned int right : 6;
196 unsigned int zero6 : 2;
197 #endif
198 vm_cmd_t cmd;
199 } ATTRIBUTE_PACKED btni_t;
202 * Highlight Information
204 typedef struct {
205 hl_gi_t hl_gi;
206 btn_colit_t btn_colit;
207 btni_t btnit[36];
208 } ATTRIBUTE_PACKED hli_t;
211 * PCI packet
213 typedef struct {
214 pci_gi_t pci_gi;
215 nsml_agli_t nsml_agli;
216 hli_t hli;
217 uint8_t zero1[189];
218 } ATTRIBUTE_PACKED pci_t;
224 * DSI General Information
226 typedef struct {
227 uint32_t nv_pck_scr;
228 uint32_t nv_pck_lbn; /**< sector address of this nav pack */
229 uint32_t vobu_ea; /**< end address of this VOBU */
230 uint32_t vobu_1stref_ea; /**< end address of the 1st reference image */
231 uint32_t vobu_2ndref_ea; /**< end address of the 2nd reference image */
232 uint32_t vobu_3rdref_ea; /**< end address of the 3rd reference image */
233 uint16_t vobu_vob_idn; /**< VOB Id number that this VOBU is part of */
234 uint8_t zero1; /**< reserved */
235 uint8_t vobu_c_idn; /**< Cell Id number that this VOBU is part of */
236 dvd_time_t c_eltm; /**< Cell elapsed time */
237 } ATTRIBUTE_PACKED dsi_gi_t;
240 * Seamless Playback Information
242 typedef struct {
243 uint16_t category; /**< 'category' of seamless VOBU */
244 uint32_t ilvu_ea; /**< end address of interleaved Unit */
245 uint32_t ilvu_sa; /**< start address of next interleaved unit */
246 uint16_t size; /**< size of next interleaved unit */
247 uint32_t vob_v_s_s_ptm; /**< video start ptm in vob */
248 uint32_t vob_v_e_e_ptm; /**< video end ptm in vob */
249 struct {
250 uint32_t stp_ptm1;
251 uint32_t stp_ptm2;
252 uint32_t gap_len1;
253 uint32_t gap_len2;
254 } vob_a[8];
255 } ATTRIBUTE_PACKED sml_pbi_t;
258 * Seamless Angle Infromation for one angle
260 typedef struct {
261 uint32_t address; /**< offset to next ILVU, high bit is before/after */
262 uint16_t size; /**< byte size of the ILVU pointed to by address */
263 } ATTRIBUTE_PACKED sml_agl_data_t;
266 * Seamless Angle Infromation
268 typedef struct {
269 sml_agl_data_t data[9];
270 } ATTRIBUTE_PACKED sml_agli_t;
273 * VOBU Search Information
275 typedef struct {
276 uint32_t next_video; /**< Next vobu that contains video */
277 uint32_t fwda[19]; /**< Forwards, time */
278 uint32_t next_vobu;
279 uint32_t prev_vobu;
280 uint32_t bwda[19]; /**< Backwards, time */
281 uint32_t prev_video;
282 } ATTRIBUTE_PACKED vobu_sri_t;
284 #define SRI_END_OF_CELL 0x3fffffff
287 * Synchronous Information
289 typedef struct {
290 uint16_t a_synca[8]; /**< offset to first audio packet for this VOBU */
291 uint32_t sp_synca[32]; /**< offset to first subpicture packet */
292 } ATTRIBUTE_PACKED synci_t;
295 * DSI packet
297 typedef struct {
298 dsi_gi_t dsi_gi;
299 sml_pbi_t sml_pbi;
300 sml_agli_t sml_agli;
301 vobu_sri_t vobu_sri;
302 synci_t synci;
303 uint8_t zero1[471];
304 } ATTRIBUTE_PACKED dsi_t;
307 #if PRAGMA_PACK
308 #pragma pack()
309 #endif
311 #endif /* NAV_TYPES_H_INCLUDED */