Mercurial > mplayer.hg
annotate dvdread/nav_types.h @ 26540:362f8c285877
Restore line mistakenly commented out in the last commit.
author | diego |
---|---|
date | Mon, 28 Apr 2008 13:31:00 +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 */ |