Mercurial > mplayer.hg
annotate dvdread/nav_types.h @ 27319:09cf111f68b8
Revert to previous dependency checking behavior.
Take included header files into account when generating dependency files.
This has problems when header files are removed or renamed, but does not
silently miscompile files.
author | diego |
---|---|
date | Sat, 26 Jul 2008 18:36:48 +0000 |
parents | fc9f44db5fcd |
children |
rev | line source |
---|---|
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
1 /* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */ |
7029 | 2 #ifndef NAV_TYPES_H_INCLUDED |
3 #define NAV_TYPES_H_INCLUDED | |
4 | |
5 /* | |
15874 | 6 * Copyright (C) 2000, 2001, 2002 Håkan Hjort <d95hjort@dtek.chalmers.se> |
7029 | 7 * |
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. | |
12 * | |
13 * VOBDUMP: a program for examining DVD .VOB files. | |
14 * Copyright 1998, 1999 Eric Smith <eric@brouhaha.com> | |
15 * | |
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. | |
21 * | |
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. | |
26 * | |
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 | |
30 * USA | |
31 */ | |
32 | |
20983 | 33 #include <dvdread/ifo_types.h> /* only dvd_time_t, vm_cmd_t and user_ops_t */ |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
34 /* If it's ever removed add a uintX_t test. */ |
7029 | 35 |
36 #undef ATTRIBUTE_PACKED | |
37 #undef PRAGMA_PACK_BEGIN | |
38 #undef PRAGMA_PACK_END | |
39 | |
40 #if defined(__GNUC__) | |
41 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) | |
42 #define ATTRIBUTE_PACKED __attribute__ ((packed)) | |
43 #define PRAGMA_PACK 0 | |
44 #endif | |
45 #endif | |
46 | |
47 #if !defined(ATTRIBUTE_PACKED) | |
48 #define ATTRIBUTE_PACKED | |
49 #define PRAGMA_PACK 1 | |
50 #endif | |
51 | |
52 | |
53 /* The length including the substream id byte. */ | |
54 #define PCI_BYTES 0x3d4 | |
55 #define DSI_BYTES 0x3fa | |
56 | |
57 #define PS2_PCI_SUBSTREAM_ID 0x00 | |
58 #define PS2_DSI_SUBSTREAM_ID 0x01 | |
59 | |
60 /* Remove this */ | |
61 #define DSI_START_BYTE 1031 | |
62 | |
63 | |
64 #if PRAGMA_PACK | |
65 #pragma pack(1) | |
66 #endif | |
67 | |
68 | |
69 /** | |
70 * PCI General Information | |
71 */ | |
72 typedef struct { | |
15874 | 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 */ | |
7029 | 81 char vobu_isrc[32]; |
82 } ATTRIBUTE_PACKED pci_gi_t; | |
83 | |
84 /** | |
85 * Non Seamless Angle Information | |
86 */ | |
87 typedef struct { | |
15874 | 88 uint32_t nsml_agl_dsta[9]; /**< address of destination vobu in AGL_C#n */ |
7029 | 89 } ATTRIBUTE_PACKED nsml_agli_t; |
90 | |
91 /** | |
92 * Highlight General Information | |
15874 | 93 * |
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 | |
7029 | 99 */ |
100 typedef struct { | |
15874 | 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) */ | |
7029 | 119 } ATTRIBUTE_PACKED hl_gi_t; |
120 | |
121 | |
122 /** | |
123 * Button Color Information Table | |
15874 | 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 | |
7029 | 129 */ |
130 typedef struct { | |
15874 | 131 uint32_t btn_coli[3][2]; /**< [button color number-1][select:0/action:1] */ |
7029 | 132 } ATTRIBUTE_PACKED btn_colit_t; |
133 | |
134 /** | |
135 * Button Information | |
15874 | 136 * |
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 | |
7029 | 140 */ |
141 typedef struct { | |
15874 | 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 */ | |
146 | |
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 */ | |
151 | |
24088
fc9f44db5fcd
reimplemented nav_read_PCI() and nav_read_DSI() using getbits() rather than relying on bitfields layout in memory
nicodvb
parents:
24050
diff
changeset
|
152 unsigned int zero3 : 2; /**< reserved */ |
fc9f44db5fcd
reimplemented nav_read_PCI() and nav_read_DSI() using getbits() rather than relying on bitfields layout in memory
nicodvb
parents:
24050
diff
changeset
|
153 unsigned int up : 6; /**< button index when pressing up */ |
15874 | 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 */ | |
7029 | 160 vm_cmd_t cmd; |
161 } ATTRIBUTE_PACKED btni_t; | |
162 | |
163 /** | |
164 * Highlight Information | |
165 */ | |
166 typedef struct { | |
167 hl_gi_t hl_gi; | |
168 btn_colit_t btn_colit; | |
169 btni_t btnit[36]; | |
170 } ATTRIBUTE_PACKED hli_t; | |
171 | |
172 /** | |
173 * PCI packet | |
174 */ | |
175 typedef struct { | |
176 pci_gi_t pci_gi; | |
177 nsml_agli_t nsml_agli; | |
178 hli_t hli; | |
179 uint8_t zero1[189]; | |
180 } ATTRIBUTE_PACKED pci_t; | |
181 | |
182 | |
183 | |
184 | |
185 /** | |
186 * DSI General Information | |
187 */ | |
188 typedef struct { | |
189 uint32_t nv_pck_scr; | |
15874 | 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 */ | |
7029 | 199 } ATTRIBUTE_PACKED dsi_gi_t; |
200 | |
201 /** | |
202 * Seamless Playback Information | |
203 */ | |
204 typedef struct { | |
15874 | 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 */ | |
7029 | 211 struct { |
212 uint32_t stp_ptm1; | |
213 uint32_t stp_ptm2; | |
214 uint32_t gap_len1; | |
215 uint32_t gap_len2; | |
216 } vob_a[8]; | |
217 } ATTRIBUTE_PACKED sml_pbi_t; | |
218 | |
219 /** | |
220 * Seamless Angle Infromation for one angle | |
221 */ | |
222 typedef struct { | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
223 uint32_t address; /**< offset to next ILVU, high bit is before/after */ |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
224 uint16_t size; /**< byte size of the ILVU pointed to by address */ |
7029 | 225 } ATTRIBUTE_PACKED sml_agl_data_t; |
226 | |
227 /** | |
228 * Seamless Angle Infromation | |
229 */ | |
230 typedef struct { | |
231 sml_agl_data_t data[9]; | |
232 } ATTRIBUTE_PACKED sml_agli_t; | |
233 | |
234 /** | |
235 * VOBU Search Information | |
236 */ | |
237 typedef struct { | |
15874 | 238 uint32_t next_video; /**< Next vobu that contains video */ |
239 uint32_t fwda[19]; /**< Forwards, time */ | |
7029 | 240 uint32_t next_vobu; |
241 uint32_t prev_vobu; | |
15874 | 242 uint32_t bwda[19]; /**< Backwards, time */ |
7029 | 243 uint32_t prev_video; |
244 } ATTRIBUTE_PACKED vobu_sri_t; | |
245 | |
246 #define SRI_END_OF_CELL 0x3fffffff | |
247 | |
248 /** | |
249 * Synchronous Information | |
250 */ | |
251 typedef struct { | |
15874 | 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 */ | |
7029 | 254 } ATTRIBUTE_PACKED synci_t; |
255 | |
256 /** | |
257 * DSI packet | |
258 */ | |
259 typedef struct { | |
260 dsi_gi_t dsi_gi; | |
261 sml_pbi_t sml_pbi; | |
262 sml_agli_t sml_agli; | |
263 vobu_sri_t vobu_sri; | |
264 synci_t synci; | |
265 uint8_t zero1[471]; | |
266 } ATTRIBUTE_PACKED dsi_t; | |
267 | |
268 | |
269 #if PRAGMA_PACK | |
270 #pragma pack() | |
271 #endif | |
272 | |
273 #endif /* NAV_TYPES_H_INCLUDED */ |