Mercurial > mplayer.hg
annotate dvdread/ifo_print.c @ 25210:92204ff32b27
When IFO file is opened (detected by extension), set dvd-device to IFO file's
directory and start dvd:// stream instead of file://.
If VTS_<N>_*.IFO is opened, open stream as dvd://<N>
As Nico Sabbi said:
There is no no guarantie that title N is in titleset N,
but there are at least good chances.
The main purpose of this patch is ability to load DVDs, stored on HDD,
using OSD menu.
Modified patch from Benjamin Zores ben at geexbox dot org
author | voroshil |
---|---|
date | Sun, 02 Dec 2007 13:13:02 +0000 |
parents | 870e5564d0f7 |
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 /* |
15874 | 3 * Copyright (C) 2000, 2001, 2002, 2003 |
4 * Björn Englund <d4bjorn@dtek.chalmers.se>, | |
5 * Håkan Hjort <d95hjort@dtek.chalmers.se> | |
14938
25df9508f9a8
Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents:
7033
diff
changeset
|
6 * |
20785 | 7 * Modified for use with MPlayer, changes contained in libdvdread_changes.diff. |
8 * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ | |
9 * $Id$ | |
10 * | |
7029 | 11 * This program is free software; you can redistribute it and/or modify |
12 * it under the terms of the GNU General Public License as published by | |
13 * the Free Software Foundation; either version 2 of the License, or | |
14 * (at your option) any later version. | |
15 * | |
16 * This program is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 * GNU General Public License for more details. | |
20 * | |
21 * You should have received a copy of the GNU General Public License | |
22 * along with this program; if not, write to the Free Software | |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
24 */ | |
25 | |
15874 | 26 #include "config.h" |
27 | |
7029 | 28 #include <stdio.h> |
29 #include <stdlib.h> | |
30 #include <unistd.h> | |
31 #include <string.h> | |
32 #include <ctype.h> | |
33 | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
34 #if defined(HAVE_INTTYPES_H) |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
35 #include <inttypes.h> |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
36 #elif defined(HAVE_STDINT_H) |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
37 #include <stdint.h> |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
38 #endif |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
39 |
7029 | 40 #include "ifo_types.h" |
41 #include "ifo_read.h" | |
42 #include "ifo_print.h" | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
43 #include "cmd_print.h" |
15874 | 44 #include "dvdread_internal.h" |
7029 | 45 |
46 /* Put this in some other file / package? It's used in nav_print too. */ | |
15874 | 47 static void ifoPrint_time(dvd_time_t *dtime) { |
7029 | 48 const char *rate; |
15874 | 49 CHECK_VALUE((dtime->hour>>4) < 0xa && (dtime->hour&0xf) < 0xa); |
50 CHECK_VALUE((dtime->minute>>4) < 0x7 && (dtime->minute&0xf) < 0xa); | |
51 CHECK_VALUE((dtime->second>>4) < 0x7 && (dtime->second&0xf) < 0xa); | |
52 CHECK_VALUE((dtime->frame_u&0xf) < 0xa); | |
7029 | 53 |
54 printf("%02x:%02x:%02x.%02x", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
55 dtime->hour, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
56 dtime->minute, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
57 dtime->second, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
58 dtime->frame_u & 0x3f); |
7029 | 59 switch((dtime->frame_u & 0xc0) >> 6) { |
60 case 1: | |
61 rate = "25.00"; | |
62 break; | |
63 case 3: | |
64 rate = "29.97"; | |
65 break; | |
66 default: | |
67 if(dtime->hour == 0 && dtime->minute == 0 | |
68 && dtime->second == 0 && dtime->frame_u == 0) | |
69 rate = "no"; | |
70 else | |
71 rate = "(please send a bug report)"; | |
72 break; | |
73 } | |
74 printf(" @ %s fps", rate); | |
75 } | |
76 | |
15874 | 77 static void ifoPrint_video_attributes(video_attr_t *attr) { |
7029 | 78 |
79 /* The following test is shorter but not correct ISO C, | |
80 memcmp(attr,my_friendly_zeros, sizeof(video_attr_t)) */ | |
81 if(attr->mpeg_version == 0 | |
82 && attr->video_format == 0 | |
83 && attr->display_aspect_ratio == 0 | |
84 && attr->permitted_df == 0 | |
85 && attr->unknown1 == 0 | |
86 && attr->line21_cc_1 == 0 | |
87 && attr->line21_cc_2 == 0 | |
15874 | 88 && attr->bit_rate == 0 |
7029 | 89 && attr->video_format == 0 |
90 && attr->letterboxed == 0 | |
91 && attr->film_mode == 0) { | |
92 printf("-- Unspecified --"); | |
93 return; | |
94 } | |
95 | |
96 switch(attr->mpeg_version) { | |
97 case 0: | |
98 printf("mpeg1 "); | |
99 break; | |
100 case 1: | |
101 printf("mpeg2 "); | |
102 break; | |
103 default: | |
104 printf("(please send a bug report) "); | |
105 } | |
106 | |
107 switch(attr->video_format) { | |
108 case 0: | |
109 printf("ntsc "); | |
110 break; | |
111 case 1: | |
112 printf("pal "); | |
113 break; | |
114 default: | |
115 printf("(please send a bug report) "); | |
116 } | |
117 | |
118 switch(attr->display_aspect_ratio) { | |
119 case 0: | |
120 printf("4:3 "); | |
121 break; | |
122 case 3: | |
123 printf("16:9 "); | |
124 break; | |
125 default: | |
126 printf("(please send a bug report) "); | |
127 } | |
128 | |
129 // Wide is allways allowed..!!! | |
130 switch(attr->permitted_df) { | |
131 case 0: | |
132 printf("pan&scan+letterboxed "); | |
133 break; | |
134 case 1: | |
135 printf("only pan&scan "); //?? | |
136 break; | |
137 case 2: | |
138 printf("only letterboxed "); | |
139 break; | |
140 case 3: | |
141 // not specified | |
142 break; | |
143 default: | |
144 printf("(please send a bug report)"); | |
145 } | |
146 | |
147 printf("U%x ", attr->unknown1); | |
15874 | 148 CHECK_VALUE(!attr->unknown1); |
7029 | 149 |
150 if(attr->line21_cc_1 || attr->line21_cc_2) { | |
151 printf("NTSC CC "); | |
152 if(attr->line21_cc_1) | |
153 printf("1 "); | |
154 if(attr->line21_cc_2) | |
155 printf("2 "); | |
156 } | |
15874 | 157 |
158 switch(attr->bit_rate) { | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
159 case 0: |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
160 printf("Variable Bit Rate "); |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
161 break; |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
162 case 1: |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
163 printf("Constant Bit Rate "); |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
164 break; |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
165 default: |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
166 printf("(please send a bug report)"); |
15874 | 167 } |
7029 | 168 |
169 { | |
170 int height = 480; | |
171 if(attr->video_format != 0) | |
172 height = 576; | |
173 switch(attr->picture_size) { | |
174 case 0: | |
175 printf("720x%d ", height); | |
176 break; | |
177 case 1: | |
178 printf("704x%d ", height); | |
179 break; | |
180 case 2: | |
181 printf("352x%d ", height); | |
182 break; | |
183 case 3: | |
184 printf("352x%d ", height/2); | |
185 break; | |
186 default: | |
187 printf("(please send a bug report) "); | |
188 } | |
189 } | |
190 | |
191 if(attr->letterboxed) { | |
192 printf("source letterboxed "); | |
193 } | |
194 | |
195 if(attr->film_mode) { | |
196 printf("film"); | |
197 } else { | |
198 printf("video"); //camera | |
199 } | |
200 } | |
201 | |
15874 | 202 static void ifoPrint_audio_attributes(audio_attr_t *attr) { |
7029 | 203 |
204 if(attr->audio_format == 0 | |
205 && attr->multichannel_extension == 0 | |
206 && attr->lang_type == 0 | |
207 && attr->application_mode == 0 | |
208 && attr->quantization == 0 | |
209 && attr->sample_frequency == 0 | |
210 && attr->channels == 0 | |
15874 | 211 && attr->lang_code == 0 |
7029 | 212 && attr->lang_extension == 0 |
15874 | 213 && attr->code_extension == 0 |
214 && attr->unknown3 == 0 | |
7029 | 215 && attr->unknown1 == 0) { |
216 printf("-- Unspecified --"); | |
217 return; | |
218 } | |
219 | |
220 switch(attr->audio_format) { | |
221 case 0: | |
222 printf("ac3 "); | |
223 break; | |
224 case 1: | |
225 printf("(please send a bug report) "); | |
226 break; | |
227 case 2: | |
228 printf("mpeg1 "); | |
229 break; | |
230 case 3: | |
231 printf("mpeg2ext "); | |
232 break; | |
233 case 4: | |
234 printf("lpcm "); | |
235 break; | |
236 case 5: | |
237 printf("(please send a bug report) "); | |
238 break; | |
239 case 6: | |
240 printf("dts "); | |
241 break; | |
242 default: | |
243 printf("(please send a bug report) "); | |
244 } | |
245 | |
246 if(attr->multichannel_extension) | |
247 printf("multichannel_extension "); | |
248 | |
249 switch(attr->lang_type) { | |
250 case 0: | |
251 // not specified | |
15874 | 252 CHECK_VALUE(attr->lang_code == 0 || attr->lang_code == 0xffff); |
7029 | 253 break; |
254 case 1: | |
15874 | 255 printf("%c%c (%c) ", attr->lang_code>>8, attr->lang_code & 0xff, |
256 attr->lang_extension ? attr->lang_extension : ' '); | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
257 if(attr->lang_extension) { |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
258 printf("(please send a bug report) lang_extension != 0"); |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
259 } |
7029 | 260 break; |
261 default: | |
262 printf("(please send a bug report) "); | |
263 } | |
264 | |
265 switch(attr->application_mode) { | |
266 case 0: | |
267 // not specified | |
268 break; | |
269 case 1: | |
270 printf("karaoke mode "); | |
271 break; | |
272 case 2: | |
273 printf("surround sound mode "); | |
274 break; | |
275 default: | |
276 printf("(please send a bug report) "); | |
277 } | |
278 | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
279 switch(attr->audio_format) { |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
280 case 0: //ac3 |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
281 if(attr->quantization != 3) { |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
282 printf("(please send a bug report) ac3 quant/drc not 3 (%d)", |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
283 attr->quantization); |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
284 } |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
285 break; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
286 case 2: //mpeg 1 or mpeg 2 without extension stream |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
287 case 3: //mpeg 2 with extension stream |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
288 switch(attr->quantization) { |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
289 case 0: //no drc |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
290 printf("no drc "); |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
291 break; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
292 case 1: |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
293 printf("drc "); |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
294 break; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
295 default: |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
296 printf("(please send a bug report) mpeg reserved quant/drc (%d)", |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
297 attr->quantization); |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
298 break; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
299 } |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
300 break; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
301 case 4: |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
302 switch(attr->quantization) { |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
303 case 0: |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
304 printf("16bit "); |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
305 break; |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
306 case 1: |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
307 printf("20bit "); |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
308 break; |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
309 case 2: |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
310 printf("24bit "); |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
311 break; |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
312 case 3: |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
313 printf("(please send a bug report) lpcm reserved quant/drc (%d)", |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
314 attr->quantization); |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
315 break; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
316 } |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
317 break; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
318 case 6: //dts |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
319 if(attr->quantization != 3) { |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
320 printf("(please send a bug report) dts quant/drc not 3 (%d)", |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
321 attr->quantization); |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
322 } |
7029 | 323 break; |
324 default: | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
325 break; |
7029 | 326 } |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
327 |
7029 | 328 switch(attr->sample_frequency) { |
329 case 0: | |
330 printf("48kHz "); | |
331 break; | |
332 case 1: | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
333 printf("96kHz "); |
7029 | 334 break; |
335 default: | |
336 printf("sample_frequency %i (please send a bug report) ", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
337 attr->sample_frequency); |
7029 | 338 } |
339 | |
340 printf("%dCh ", attr->channels + 1); | |
341 | |
15874 | 342 switch(attr->code_extension) { |
7029 | 343 case 0: |
344 printf("Not specified "); | |
345 break; | |
346 case 1: // Normal audio | |
347 printf("Normal Caption "); | |
348 break; | |
349 case 2: // visually imparied | |
350 printf("Audio for visually impaired "); | |
351 break; | |
352 case 3: // Directors 1 | |
353 printf("Director's comments 1 "); | |
354 break; | |
355 case 4: // Directors 2 | |
356 printf("Director's comments 2 "); | |
357 break; | |
358 //case 4: // Music score ? | |
359 default: | |
360 printf("(please send a bug report) "); | |
361 } | |
362 | |
15874 | 363 printf("%d ", attr->unknown3); |
364 if(attr->application_mode == 1) { | |
365 printf("ca=%d ", attr->app_info.karaoke.channel_assignment); | |
366 printf("%d ", attr->app_info.karaoke.version); | |
367 if(attr->app_info.karaoke.mc_intro) | |
368 printf("mc intro "); | |
369 printf("%s ", attr->app_info.karaoke.mode ? "duet" : "solo"); | |
370 printf("%d ", attr->app_info.karaoke.unknown4); | |
371 } | |
372 if(attr->application_mode == 2) { | |
373 if(attr->app_info.surround.dolby_encoded) { | |
374 printf("dolby surround "); | |
375 } | |
376 printf("%d ", attr->app_info.surround.unknown5); | |
377 printf("%d ", attr->app_info.surround.unknown6); | |
378 } | |
7029 | 379 } |
380 | |
15874 | 381 static void ifoPrint_subp_attributes(subp_attr_t *attr) { |
7029 | 382 |
383 if(attr->type == 0 | |
15874 | 384 && attr->code_mode == 0 |
7029 | 385 && attr->lang_code == 0 |
15874 | 386 && attr->lang_extension == 0 |
7029 | 387 && attr->zero1 == 0 |
388 && attr->zero2 == 0 | |
15874 | 389 && attr->code_extension == 0) { |
7029 | 390 printf("-- Unspecified --"); |
391 return; | |
392 } | |
393 | |
15874 | 394 switch(attr->code_mode) { |
395 case 0: | |
396 printf("Coding Mode RLE "); | |
397 break; | |
398 case 1: | |
399 printf("Coding Mode Extended "); | |
400 break; | |
401 default: | |
402 printf("(please send a bug report) "); | |
403 } | |
404 | |
405 if(attr->type == 1) { | |
406 if(isalpha((int)(attr->lang_code >> 8)) | |
407 && isalpha((int)(attr->lang_code & 0xff))) { | |
408 printf("%c%c ", attr->lang_code >> 8, attr->lang_code & 0xff); | |
409 } else { | |
410 printf("%02x%02x ", attr->lang_code >> 8, attr->lang_code & 0xff); | |
411 } | |
7029 | 412 } else { |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
413 printf("lang not specified "); |
7029 | 414 } |
415 | |
416 printf("%d ", attr->zero1); | |
417 printf("%d ", attr->zero2); | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
418 printf("%d ", attr->lang_extension); |
15874 | 419 |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
420 switch(attr->code_extension) { |
7029 | 421 case 0: |
422 printf("Not specified "); | |
423 break; | |
424 case 1: | |
425 printf("Caption with normal size character "); | |
426 break; | |
427 case 2: | |
428 printf("Caption with bigger size character "); | |
429 break; | |
430 case 3: | |
431 printf("Caption for children "); | |
432 break; | |
433 case 4: | |
434 printf("reserved "); | |
435 break; | |
436 case 5: | |
437 printf("Closed Caption with normal size character "); | |
438 break; | |
439 case 6: | |
440 printf("Closed Caption with bigger size character "); | |
441 break; | |
442 case 7: | |
443 printf("Closed Caption for children "); | |
444 break; | |
445 case 8: | |
446 printf("reserved "); | |
447 break; | |
448 case 9: | |
449 printf("Forced Caption"); | |
450 break; | |
451 case 10: | |
452 printf("reserved "); | |
453 break; | |
454 case 11: | |
455 printf("reserved "); | |
456 break; | |
457 case 12: | |
458 printf("reserved "); | |
459 break; | |
460 case 13: | |
461 printf("Director's comments with normal size character "); | |
462 break; | |
463 case 14: | |
464 printf("Director's comments with bigger size character "); | |
465 break; | |
466 case 15: | |
467 printf("Director's comments for children "); | |
468 break; | |
469 default: | |
470 printf("(please send a bug report) "); | |
471 } | |
472 | |
473 } | |
474 | |
475 | |
476 static void ifoPrint_USER_OPS(user_ops_t *user_ops) { | |
477 uint32_t uops; | |
478 unsigned char *ptr = (unsigned char *)user_ops; | |
479 | |
480 uops = (*ptr++ << 24); | |
481 uops |= (*ptr++ << 16); | |
482 uops |= (*ptr++ << 8); | |
483 uops |= (*ptr++); | |
484 | |
485 if(uops == 0) { | |
486 printf("None\n"); | |
487 } else if(uops == 0x01ffffff) { | |
488 printf("All\n"); | |
489 } else { | |
490 if(user_ops->title_or_time_play) | |
491 printf("Title or Time Play, "); | |
492 if(user_ops->chapter_search_or_play) | |
493 printf("Chapter Search or Play, "); | |
494 if(user_ops->title_play) | |
495 printf("Title Play, "); | |
496 if(user_ops->stop) | |
497 printf("Stop, "); | |
498 if(user_ops->go_up) | |
499 printf("Go Up, "); | |
500 if(user_ops->time_or_chapter_search) | |
501 printf("Time or Chapter Search, "); | |
502 if(user_ops->prev_or_top_pg_search) | |
503 printf("Prev or Top PG Search, "); | |
504 if(user_ops->next_pg_search) | |
505 printf("Next PG Search, "); | |
506 if(user_ops->forward_scan) | |
507 printf("Forward Scan, "); | |
508 if(user_ops->backward_scan) | |
509 printf("Backward Scan, "); | |
510 if(user_ops->title_menu_call) | |
511 printf("Title Menu Call, "); | |
512 if(user_ops->root_menu_call) | |
513 printf("Root Menu Call, "); | |
514 if(user_ops->subpic_menu_call) | |
515 printf("SubPic Menu Call, "); | |
516 if(user_ops->audio_menu_call) | |
517 printf("Audio Menu Call, "); | |
518 if(user_ops->angle_menu_call) | |
519 printf("Angle Menu Call, "); | |
520 if(user_ops->chapter_menu_call) | |
521 printf("Chapter Menu Call, "); | |
522 if(user_ops->resume) | |
523 printf("Resume, "); | |
524 if(user_ops->button_select_or_activate) | |
525 printf("Button Select or Activate, "); | |
526 if(user_ops->still_off) | |
527 printf("Still Off, "); | |
528 if(user_ops->pause_on) | |
529 printf("Pause On, "); | |
530 if(user_ops->audio_stream_change) | |
531 printf("Audio Stream Change, "); | |
532 if(user_ops->subpic_stream_change) | |
533 printf("SubPic Stream Change, "); | |
534 if(user_ops->angle_change) | |
535 printf("Angle Change, "); | |
536 if(user_ops->karaoke_audio_pres_mode_change) | |
537 printf("Karaoke Audio Pres Mode Change, "); | |
538 if(user_ops->video_pres_mode_change) | |
539 printf("Video Pres Mode Change, "); | |
540 printf("\n"); | |
541 } | |
542 } | |
543 | |
544 | |
545 void ifoPrint_VMGI_MAT(vmgi_mat_t *vmgi_mat) { | |
546 | |
547 printf("VMG Identifier: %.12s\n", vmgi_mat->vmg_identifier); | |
548 printf("Last Sector of VMG: %08x\n", vmgi_mat->vmg_last_sector); | |
549 printf("Last Sector of VMGI: %08x\n", vmgi_mat->vmgi_last_sector); | |
550 printf("Specification version number: %01x.%01x\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
551 vmgi_mat->specification_version >> 4, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
552 vmgi_mat->specification_version & 0xf); |
7029 | 553 /* Byte 2 of 'VMG Category' (00xx0000) is the Region Code */ |
554 printf("VMG Category: %08x\n", vmgi_mat->vmg_category); | |
555 printf("VMG Number of Volumes: %i\n", vmgi_mat->vmg_nr_of_volumes); | |
556 printf("VMG This Volume: %i\n", vmgi_mat->vmg_this_volume_nr); | |
557 printf("Disc side %i\n", vmgi_mat->disc_side); | |
558 printf("VMG Number of Title Sets %i\n", vmgi_mat->vmg_nr_of_title_sets); | |
559 printf("Provider ID: %.32s\n", vmgi_mat->provider_identifier); | |
560 printf("VMG POS Code: %08x", (uint32_t)(vmgi_mat->vmg_pos_code >> 32)); | |
561 printf("%08x\n", (uint32_t)vmgi_mat->vmg_pos_code); | |
562 printf("End byte of VMGI_MAT: %08x\n", vmgi_mat->vmgi_last_byte); | |
563 printf("Start byte of First Play PGC FP PGC: %08x\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
564 vmgi_mat->first_play_pgc); |
7029 | 565 printf("Start sector of VMGM_VOBS: %08x\n", vmgi_mat->vmgm_vobs); |
566 printf("Start sector of TT_SRPT: %08x\n", vmgi_mat->tt_srpt); | |
567 printf("Start sector of VMGM_PGCI_UT: %08x\n", vmgi_mat->vmgm_pgci_ut); | |
568 printf("Start sector of PTL_MAIT: %08x\n", vmgi_mat->ptl_mait); | |
569 printf("Start sector of VTS_ATRT: %08x\n", vmgi_mat->vts_atrt); | |
570 printf("Start sector of TXTDT_MG: %08x\n", vmgi_mat->txtdt_mgi); | |
571 printf("Start sector of VMGM_C_ADT: %08x\n", vmgi_mat->vmgm_c_adt); | |
572 printf("Start sector of VMGM_VOBU_ADMAP: %08x\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
573 vmgi_mat->vmgm_vobu_admap); |
7029 | 574 printf("Video attributes of VMGM_VOBS: "); |
15874 | 575 ifoPrint_video_attributes(&vmgi_mat->vmgm_video_attr); |
7029 | 576 printf("\n"); |
577 printf("VMGM Number of Audio attributes: %i\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
578 vmgi_mat->nr_of_vmgm_audio_streams); |
7029 | 579 if(vmgi_mat->nr_of_vmgm_audio_streams > 0) { |
580 printf("\tstream %i status: ", 1); | |
15874 | 581 ifoPrint_audio_attributes(&vmgi_mat->vmgm_audio_attr); |
7029 | 582 printf("\n"); |
583 } | |
584 printf("VMGM Number of Sub-picture attributes: %i\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
585 vmgi_mat->nr_of_vmgm_subp_streams); |
7029 | 586 if(vmgi_mat->nr_of_vmgm_subp_streams > 0) { |
587 printf("\tstream %2i status: ", 1); | |
15874 | 588 ifoPrint_subp_attributes(&vmgi_mat->vmgm_subp_attr); |
7029 | 589 printf("\n"); |
590 } | |
591 } | |
592 | |
593 | |
594 void ifoPrint_VTSI_MAT(vtsi_mat_t *vtsi_mat) { | |
595 int i; | |
596 | |
597 printf("VTS Identifier: %.12s\n", vtsi_mat->vts_identifier); | |
598 printf("Last Sector of VTS: %08x\n", vtsi_mat->vts_last_sector); | |
599 printf("Last Sector of VTSI: %08x\n", vtsi_mat->vtsi_last_sector); | |
600 printf("Specification version number: %01x.%01x\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
601 vtsi_mat->specification_version>>4, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
602 vtsi_mat->specification_version&0xf); |
7029 | 603 printf("VTS Category: %08x\n", vtsi_mat->vts_category); |
604 printf("End byte of VTSI_MAT: %08x\n", vtsi_mat->vtsi_last_byte); | |
605 printf("Start sector of VTSM_VOBS: %08x\n", vtsi_mat->vtsm_vobs); | |
606 printf("Start sector of VTSTT_VOBS: %08x\n", vtsi_mat->vtstt_vobs); | |
607 printf("Start sector of VTS_PTT_SRPT: %08x\n", vtsi_mat->vts_ptt_srpt); | |
608 printf("Start sector of VTS_PGCIT: %08x\n", vtsi_mat->vts_pgcit); | |
609 printf("Start sector of VTSM_PGCI_UT: %08x\n", vtsi_mat->vtsm_pgci_ut); | |
610 printf("Start sector of VTS_TMAPT: %08x\n", vtsi_mat->vts_tmapt); | |
611 printf("Start sector of VTSM_C_ADT: %08x\n", vtsi_mat->vtsm_c_adt); | |
612 printf("Start sector of VTSM_VOBU_ADMAP: %08x\n",vtsi_mat->vtsm_vobu_admap); | |
613 printf("Start sector of VTS_C_ADT: %08x\n", vtsi_mat->vts_c_adt); | |
614 printf("Start sector of VTS_VOBU_ADMAP: %08x\n", vtsi_mat->vts_vobu_admap); | |
615 | |
616 printf("Video attributes of VTSM_VOBS: "); | |
15874 | 617 ifoPrint_video_attributes(&vtsi_mat->vtsm_video_attr); |
7029 | 618 printf("\n"); |
619 | |
620 printf("VTSM Number of Audio attributes: %i\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
621 vtsi_mat->nr_of_vtsm_audio_streams); |
7029 | 622 if(vtsi_mat->nr_of_vtsm_audio_streams > 0) { |
623 printf("\tstream %i status: ", 1); | |
15874 | 624 ifoPrint_audio_attributes(&vtsi_mat->vtsm_audio_attr); |
7029 | 625 printf("\n"); |
626 } | |
627 | |
628 printf("VTSM Number of Sub-picture attributes: %i\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
629 vtsi_mat->nr_of_vtsm_subp_streams); |
7029 | 630 if(vtsi_mat->nr_of_vtsm_subp_streams > 0) { |
631 printf("\tstream %2i status: ", 1); | |
15874 | 632 ifoPrint_subp_attributes(&vtsi_mat->vtsm_subp_attr); |
7029 | 633 printf("\n"); |
634 } | |
635 | |
636 printf("Video attributes of VTS_VOBS: "); | |
15874 | 637 ifoPrint_video_attributes(&vtsi_mat->vts_video_attr); |
7029 | 638 printf("\n"); |
639 | |
640 printf("VTS Number of Audio attributes: %i\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
641 vtsi_mat->nr_of_vts_audio_streams); |
7029 | 642 for(i = 0; i < vtsi_mat->nr_of_vts_audio_streams; i++) { |
643 printf("\tstream %i status: ", i); | |
15874 | 644 ifoPrint_audio_attributes(&vtsi_mat->vts_audio_attr[i]); |
7029 | 645 printf("\n"); |
646 } | |
647 | |
648 printf("VTS Number of Subpicture attributes: %i\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
649 vtsi_mat->nr_of_vts_subp_streams); |
7029 | 650 for(i = 0; i < vtsi_mat->nr_of_vts_subp_streams; i++) { |
651 printf("\tstream %2i status: ", i); | |
15874 | 652 ifoPrint_subp_attributes(&vtsi_mat->vts_subp_attr[i]); |
7029 | 653 printf("\n"); |
654 } | |
15874 | 655 |
656 /* FIXME: Add printing of MultiChannel Extension */ | |
7029 | 657 } |
658 | |
659 | |
660 static void ifoPrint_PGC_COMMAND_TBL(pgc_command_tbl_t *cmd_tbl) { | |
661 int i; | |
662 | |
663 if(cmd_tbl == NULL) { | |
664 printf("No Command table present\n"); | |
665 return; | |
666 } | |
667 | |
668 printf("Number of Pre commands: %i\n", cmd_tbl->nr_of_pre); | |
669 for(i = 0; i < cmd_tbl->nr_of_pre; i++) { | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
670 cmdPrint_CMD(i, &cmd_tbl->pre_cmds[i]); |
7029 | 671 } |
672 | |
673 printf("Number of Post commands: %i\n", cmd_tbl->nr_of_post); | |
674 for(i = 0; i < cmd_tbl->nr_of_post; i++) { | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
675 cmdPrint_CMD(i, &cmd_tbl->post_cmds[i]); |
7029 | 676 } |
677 | |
678 printf("Number of Cell commands: %i\n", cmd_tbl->nr_of_cell); | |
679 for(i = 0; i < cmd_tbl->nr_of_cell; i++) { | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
680 cmdPrint_CMD(i, &cmd_tbl->cell_cmds[i]); |
7029 | 681 } |
682 } | |
683 | |
684 | |
685 static void ifoPrint_PGC_PROGRAM_MAP(pgc_program_map_t *program_map, int nr) { | |
686 int i; | |
687 | |
688 if(program_map == NULL) { | |
689 printf("No Program map present\n"); | |
690 return; | |
691 } | |
692 | |
693 for(i = 0; i < nr; i++) { | |
694 printf("Program %3i Entry Cell: %3i\n", i + 1, program_map[i]); | |
695 } | |
696 } | |
697 | |
698 | |
699 static void ifoPrint_CELL_PLAYBACK(cell_playback_t *cell_playback, int nr) { | |
700 int i; | |
701 | |
702 if(cell_playback == NULL) { | |
703 printf("No Cell Playback info present\n"); | |
704 return; | |
705 } | |
706 | |
707 for(i=0;i<nr;i++) { | |
708 printf("Cell: %3i ", i + 1); | |
709 | |
15874 | 710 ifoPrint_time(&cell_playback[i].playback_time); |
7029 | 711 printf("\t"); |
712 | |
713 if(cell_playback[i].block_mode || cell_playback[i].block_type) { | |
714 const char *s; | |
715 switch(cell_playback[i].block_mode) { | |
716 case 0: | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
717 s = "not a"; break; |
7029 | 718 case 1: |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
719 s = "the first"; break; |
7029 | 720 case 2: |
721 default: | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
722 s = ""; break; |
7029 | 723 case 3: |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
724 s = "last"; break; |
7029 | 725 } |
726 printf("%s cell in the block ", s); | |
727 | |
728 switch(cell_playback[i].block_type) { | |
729 case 0: | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
730 printf("not part of the block "); |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
731 break; |
7029 | 732 case 1: |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
733 printf("angle block "); |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
734 break; |
7029 | 735 case 2: |
736 case 3: | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
737 printf("(send bug repport) "); |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
738 break; |
7029 | 739 } |
740 } | |
741 if(cell_playback[i].seamless_play) | |
742 printf("presented seamlessly "); | |
743 if(cell_playback[i].interleaved) | |
744 printf("cell is interleaved "); | |
745 if(cell_playback[i].stc_discontinuity) | |
746 printf("STC_discontinuty "); | |
747 if(cell_playback[i].seamless_angle) | |
748 printf("only seamless angle "); | |
749 if(cell_playback[i].restricted) | |
750 printf("restricted cell "); | |
751 | |
752 if(cell_playback[i].still_time) | |
753 printf("still time %d ", cell_playback[i].still_time); | |
754 if(cell_playback[i].cell_cmd_nr) | |
755 printf("cell command %d", cell_playback[i].cell_cmd_nr); | |
756 | |
757 printf("\n\tStart sector: %08x\tFirst ILVU end sector: %08x\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
758 cell_playback[i].first_sector, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
759 cell_playback[i].first_ilvu_end_sector); |
7029 | 760 printf("\tEnd sector: %08x\tLast VOBU start sector: %08x\n", |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
761 cell_playback[i].last_sector, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
762 cell_playback[i].last_vobu_start_sector); |
7029 | 763 } |
764 } | |
765 | |
766 static void ifoPrint_CELL_POSITION(cell_position_t *cell_position, int nr) { | |
767 int i; | |
768 | |
769 if(cell_position == NULL) { | |
770 printf("No Cell Position info present\n"); | |
771 return; | |
772 } | |
773 | |
774 for(i=0;i<nr;i++) { | |
775 printf("Cell: %3i has VOB ID: %3i, Cell ID: %3i\n", i + 1, | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
776 cell_position[i].vob_id_nr, cell_position[i].cell_nr); |
7029 | 777 } |
778 } | |
779 | |
780 | |
781 void ifoPrint_PGC(pgc_t *pgc) { | |
782 int i; | |
783 | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
784 if(pgc == NULL) { |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
785 printf("Error: No PGC present\n"); |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
786 return; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
787 } |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
788 |
7029 | 789 printf("Number of Programs: %i\n", pgc->nr_of_programs); |
790 printf("Number of Cells: %i\n", pgc->nr_of_cells); | |
791 /* Check that time is 0:0:0:0 also if nr_of_programs==0 */ | |
792 printf("Playback time: "); | |
15874 | 793 ifoPrint_time(&pgc->playback_time); printf("\n"); |
7029 | 794 |
795 /* If no programs/no time then does this mean anything? */ | |
796 printf("Prohibited user operations: "); | |
797 ifoPrint_USER_OPS(&pgc->prohibited_ops); | |
798 | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
799 for(i = 0; i < 8; i++) { |
25122
870e5564d0f7
replaced audio_mapping_t and sub_mapping_t with uint16_t and uint32_t
nicodvb
parents:
24050
diff
changeset
|
800 if(pgc->audio_control[i] & 0x8000) { /* The 'is present' bit */ |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
801 printf("Audio stream %i control: %04x\n", |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
802 i, pgc->audio_control[i]); |
7029 | 803 } |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
804 } |
7029 | 805 |
806 for(i = 0; i < 32; i++) { | |
25122
870e5564d0f7
replaced audio_mapping_t and sub_mapping_t with uint16_t and uint32_t
nicodvb
parents:
24050
diff
changeset
|
807 if(pgc->subp_control[i] & 0x80000000) { /* The 'is present' bit */ |
7029 | 808 printf("Subpicture stream %2i control: %08x\n", |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
809 i, pgc->subp_control[i]); |
7029 | 810 } |
811 } | |
812 | |
813 printf("Next PGC number: %i\n", pgc->next_pgc_nr); | |
814 printf("Prev PGC number: %i\n", pgc->prev_pgc_nr); | |
815 printf("GoUp PGC number: %i\n", pgc->goup_pgc_nr); | |
816 if(pgc->nr_of_programs != 0) { | |
817 printf("Still time: %i seconds (255=inf)\n", pgc->still_time); | |
15874 | 818 if(pgc->pg_playback_mode == 0) |
819 printf("PG Playback mode: Sequential\n"); | |
820 else if(!(pgc->pg_playback_mode & 0x80)) | |
821 printf("PG Playback mode: Random %i\n", pgc->pg_playback_mode); | |
822 else | |
823 printf("PG Playback mode: Shuffle %i\n", pgc->pg_playback_mode & 0x7f ); | |
7029 | 824 } |
825 | |
826 if(pgc->nr_of_programs != 0) { | |
827 for(i = 0; i < 16; i++) { | |
828 printf("Color %2i: %08x\n", i, pgc->palette[i]); | |
829 } | |
830 } | |
831 | |
832 /* Memmory offsets to div. tables. */ | |
833 ifoPrint_PGC_COMMAND_TBL(pgc->command_tbl); | |
834 ifoPrint_PGC_PROGRAM_MAP(pgc->program_map, pgc->nr_of_programs); | |
835 ifoPrint_CELL_PLAYBACK(pgc->cell_playback, pgc->nr_of_cells); | |
836 ifoPrint_CELL_POSITION(pgc->cell_position, pgc->nr_of_cells); | |
837 } | |
838 | |
839 | |
840 void ifoPrint_TT_SRPT(tt_srpt_t *tt_srpt) { | |
841 int i; | |
842 | |
843 printf("Number of TitleTrack search pointers: %i\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
844 tt_srpt->nr_of_srpts); |
7029 | 845 for(i=0;i<tt_srpt->nr_of_srpts;i++) { |
846 printf("Title Track index %i\n", i + 1); | |
847 printf("\tTitle set number (VTS): %i", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
848 tt_srpt->title[i].title_set_nr); |
7029 | 849 printf("\tVTS_TTN: %i\n", tt_srpt->title[i].vts_ttn); |
850 printf("\tNumber of PTTs: %i\n", tt_srpt->title[i].nr_of_ptts); | |
851 printf("\tNumber of angles: %i\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
852 tt_srpt->title[i].nr_of_angles); |
15874 | 853 printf("\tTitle playback type: %s%s%s%s%s%s%s\n", |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
854 tt_srpt->title[i].pb_ty.multi_or_random_pgc_title ? |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
855 " One Random PGC Title or Multi PGC Title" : |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
856 " One Sequential PGC Title", |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
857 tt_srpt->title[i].pb_ty.jlc_exists_in_cell_cmd ? |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
858 "" : ", No Link/Jump/Call exists in Cell command", |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
859 tt_srpt->title[i].pb_ty.jlc_exists_in_prepost_cmd ? |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
860 "" : ", No Link/Jump/Call exists in Pre- and/or Post-command", |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
861 tt_srpt->title[i].pb_ty.jlc_exists_in_button_cmd ? |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
862 "" : ", No Link/Jump/Call exists in Button command", |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
863 tt_srpt->title[i].pb_ty.jlc_exists_in_tt_dom ? |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
864 "" : ", No Link/Jump/Call exists in TT_DOM", |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
865 tt_srpt->title[i].pb_ty.chapter_search_or_play ? |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
866 ", UOP1 (TT_Play and PTT_Search) prohibited" : "", |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
867 tt_srpt->title[i].pb_ty.title_or_time_play ? |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
868 ", UOP0 (Time_Play and Time_Search) prohibited" : "" |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
869 ); |
7029 | 870 printf("\tParental ID field: %04x\n", |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
871 tt_srpt->title[i].parental_id); |
7029 | 872 printf("\tTitle set starting sector %08x\n", |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
873 tt_srpt->title[i].title_set_sector); |
7029 | 874 } |
875 } | |
876 | |
877 | |
878 void ifoPrint_VTS_PTT_SRPT(vts_ptt_srpt_t *vts_ptt_srpt) { | |
879 int i, j; | |
880 printf(" nr_of_srpts %i last byte %i\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
881 vts_ptt_srpt->nr_of_srpts, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
882 vts_ptt_srpt->last_byte); |
7029 | 883 for(i=0;i<vts_ptt_srpt->nr_of_srpts;i++) { |
15874 | 884 printf("\nVTS_PTT number %d has a offset %d relative to VTS_PTT_SRPT\n", |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
885 i + 1, vts_ptt_srpt->ttu_offset[i]); |
7029 | 886 for(j=0;j<vts_ptt_srpt->title[i].nr_of_ptts;j++) { |
887 printf("VTS_PTT_SRPT - Title %3i part %3i: PGC: %3i PG: %3i\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
888 i + 1, j + 1, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
889 vts_ptt_srpt->title[i].ptt[j].pgcn, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
890 vts_ptt_srpt->title[i].ptt[j].pgn ); |
7029 | 891 } |
892 } | |
893 } | |
894 | |
895 | |
896 void ifoPrint_PTL_MAIT(ptl_mait_t *ptl_mait) { | |
15874 | 897 int i, level, vts; |
7029 | 898 |
899 printf("Number of Countries: %i\n", ptl_mait->nr_of_countries); | |
900 printf("Number of VTSs: %i\n", ptl_mait->nr_of_vtss); | |
15874 | 901 printf("Last byte: %i\n", ptl_mait->last_byte); |
7029 | 902 |
903 for(i = 0; i < ptl_mait->nr_of_countries; i++) { | |
15874 | 904 |
905 printf("Start byte: %i\n", ptl_mait->countries[i].pf_ptl_mai_start_byte); | |
906 printf("Parental Masks for country: %c%c\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
907 ptl_mait->countries[i].country_code >> 8, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
908 ptl_mait->countries[i].country_code & 0xff); |
15874 | 909 |
910 for(vts = 0; vts <= ptl_mait->nr_of_vtss; vts++) { | |
911 if( vts == 0 ) { | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
912 printf("VMG "); |
15874 | 913 } else { |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
914 printf("VTS %2d ", vts); |
15874 | 915 } |
916 for(level = 0; level < 8; level++) { | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
917 printf("%d: %04x ", level, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
918 ptl_mait->countries[i].pf_ptl_mai[vts][level] ); |
15874 | 919 } |
7029 | 920 printf("\n"); |
921 } | |
922 } | |
923 } | |
924 | |
15874 | 925 void ifoPrint_VTS_TMAPT(vts_tmapt_t *vts_tmapt) { |
926 unsigned int timeunit; | |
927 int i, j; | |
928 | |
929 printf("Number of VTS_TMAPS: %i\n", vts_tmapt->nr_of_tmaps); | |
930 printf("Last byte: %i\n", vts_tmapt->last_byte); | |
931 | |
932 for(i = 0; i < vts_tmapt->nr_of_tmaps; i++) { | |
933 printf("TMAP %i\n", i + 1); | |
934 printf(" offset %d relative to VTS_TMAPTI\n", vts_tmapt->tmap_offset[i]); | |
935 printf(" Time unit (seconds): %i\n", vts_tmapt->tmap[i].tmu); | |
936 printf(" Number of entries: %i\n", vts_tmapt->tmap[i].nr_of_entries); | |
937 timeunit = vts_tmapt->tmap[i].tmu; | |
938 for(j = 0; j < vts_tmapt->tmap[i].nr_of_entries; j++) { | |
939 unsigned int ac_time = timeunit * (j + 1); | |
940 printf("Time: %2i:%02i:%02i VOBU Sector: 0x%08x %s\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
941 ac_time / (60 * 60), (ac_time / 60) % 60, ac_time % 60, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
942 vts_tmapt->tmap[i].map_ent[j] & 0x7fffffff, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
943 (vts_tmapt->tmap[i].map_ent[j] >> 31) ? "discontinuity" : ""); |
15874 | 944 } |
945 } | |
946 } | |
7029 | 947 |
948 void ifoPrint_C_ADT(c_adt_t *c_adt) { | |
949 int i, entries; | |
950 | |
951 printf("Number of VOBs in this VOBS: %i\n", c_adt->nr_of_vobs); | |
952 //entries = c_adt->nr_of_vobs; | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
953 entries = (c_adt->last_byte + 1 - C_ADT_SIZE)/sizeof(cell_adr_t); |
7029 | 954 |
955 for(i = 0; i < entries; i++) { | |
956 printf("VOB ID: %3i, Cell ID: %3i ", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
957 c_adt->cell_adr_table[i].vob_id, c_adt->cell_adr_table[i].cell_id); |
7029 | 958 printf("Sector (first): 0x%08x (last): 0x%08x\n", |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
959 c_adt->cell_adr_table[i].start_sector, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
960 c_adt->cell_adr_table[i].last_sector); |
7029 | 961 } |
962 } | |
963 | |
964 | |
965 void ifoPrint_VOBU_ADMAP(vobu_admap_t *vobu_admap) { | |
966 int i, entries; | |
967 | |
968 entries = (vobu_admap->last_byte + 1 - VOBU_ADMAP_SIZE)/4; | |
969 for(i = 0; i < entries; i++) { | |
970 printf("VOBU %5i First sector: 0x%08x\n", i + 1, | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
971 vobu_admap->vobu_start_sectors[i]); |
7029 | 972 } |
973 } | |
974 | |
975 | |
976 void ifoPrint_PGCIT(pgcit_t *pgcit) { | |
977 int i; | |
978 | |
979 for(i = 0; i < pgcit->nr_of_pgci_srp; i++) { | |
980 printf("\nProgram (PGC): %3i\t", i + 1); | |
981 printf("PGC Category: Entry id 0x%02x, ", pgcit->pgci_srp[i].entry_id); | |
982 printf("Parental ID mask 0x%04x\n", pgcit->pgci_srp[i].ptl_id_mask); | |
983 ifoPrint_PGC(pgcit->pgci_srp[i].pgc); | |
984 } | |
985 } | |
986 | |
987 | |
988 void ifoPrint_PGCI_UT(pgci_ut_t *pgci_ut) { | |
989 int i; | |
990 | |
991 printf("Number of Menu Language Units (PGCI_LU): %3i\n", pgci_ut->nr_of_lus); | |
992 for(i = 0; i < pgci_ut->nr_of_lus; i++) { | |
15874 | 993 printf("\nMenu Language Code: %c%c (%c)\n", |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
994 pgci_ut->lu[i].lang_code >> 8, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
995 pgci_ut->lu[i].lang_code & 0xff, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
996 pgci_ut->lu[i].lang_extension ? pgci_ut->lu[i].lang_extension :' '); |
7029 | 997 printf("Menu Existence: %02x\n", pgci_ut->lu[i].exists); |
998 ifoPrint_PGCIT(pgci_ut->lu[i].pgcit); | |
999 } | |
1000 } | |
1001 | |
1002 | |
1003 static void ifoPrint_VTS_ATTRIBUTES(vts_attributes_t *vts_attributes) { | |
1004 int i; | |
1005 | |
1006 printf("VTS_CAT Application type: %08x\n", vts_attributes->vts_cat); | |
1007 | |
1008 printf("Video attributes of VTSM_VOBS: "); | |
15874 | 1009 ifoPrint_video_attributes(&vts_attributes->vtsm_vobs_attr); |
7029 | 1010 printf("\n"); |
1011 printf("Number of Audio streams: %i\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
1012 vts_attributes->nr_of_vtsm_audio_streams); |
7029 | 1013 if(vts_attributes->nr_of_vtsm_audio_streams > 0) { |
1014 printf("\tstream %i attributes: ", 1); | |
15874 | 1015 ifoPrint_audio_attributes(&vts_attributes->vtsm_audio_attr); |
7029 | 1016 printf("\n"); |
1017 } | |
1018 printf("Number of Subpicture streams: %i\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
1019 vts_attributes->nr_of_vtsm_subp_streams); |
7029 | 1020 if(vts_attributes->nr_of_vtsm_subp_streams > 0) { |
1021 printf("\tstream %2i attributes: ", 1); | |
15874 | 1022 ifoPrint_subp_attributes(&vts_attributes->vtsm_subp_attr); |
7029 | 1023 printf("\n"); |
1024 } | |
1025 | |
1026 printf("Video attributes of VTSTT_VOBS: "); | |
15874 | 1027 ifoPrint_video_attributes(&vts_attributes->vtstt_vobs_video_attr); |
7029 | 1028 printf("\n"); |
1029 printf("Number of Audio streams: %i\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
1030 vts_attributes->nr_of_vtstt_audio_streams); |
7029 | 1031 for(i = 0; i < vts_attributes->nr_of_vtstt_audio_streams; i++) { |
1032 printf("\tstream %i attributes: ", i); | |
15874 | 1033 ifoPrint_audio_attributes(&vts_attributes->vtstt_audio_attr[i]); |
7029 | 1034 printf("\n"); |
1035 } | |
1036 | |
1037 printf("Number of Subpicture streams: %i\n", | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
1038 vts_attributes->nr_of_vtstt_subp_streams); |
7029 | 1039 for(i = 0; i < vts_attributes->nr_of_vtstt_subp_streams; i++) { |
1040 printf("\tstream %2i attributes: ", i); | |
15874 | 1041 ifoPrint_subp_attributes(&vts_attributes->vtstt_subp_attr[i]); |
7029 | 1042 printf("\n"); |
1043 } | |
1044 } | |
1045 | |
1046 | |
1047 void ifoPrint_VTS_ATRT(vts_atrt_t *vts_atrt) { | |
1048 int i; | |
1049 | |
1050 printf("Number of Video Title Sets: %3i\n", vts_atrt->nr_of_vtss); | |
1051 for(i = 0; i < vts_atrt->nr_of_vtss; i++) { | |
1052 printf("\nVideo Title Set %i\n", i + 1); | |
15874 | 1053 printf(" offset %d relative to VMG_VTS_ATRT\n", |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
1054 vts_atrt->vts_atrt_offsets[i]); |
7029 | 1055 ifoPrint_VTS_ATTRIBUTES(&vts_atrt->vts[i]); |
1056 } | |
1057 } | |
1058 | |
1059 | |
1060 void ifoPrint(dvd_reader_t *dvd, int title) { | |
1061 ifo_handle_t *ifohandle; | |
1062 | |
1063 ifohandle = ifoOpen(dvd, title); | |
1064 if(!ifohandle) { | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
1065 if(dvdread_verbose(dvd) >= 0) { |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
1066 fprintf(stderr, "Can't open info file for title %d\n", title); |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
1067 } |
7029 | 1068 return; |
1069 } | |
1070 | |
1071 | |
1072 if(ifohandle->vmgi_mat) { | |
1073 | |
1074 printf("VMG top level\n-------------\n"); | |
1075 ifoPrint_VMGI_MAT(ifohandle->vmgi_mat); | |
1076 | |
1077 printf("\nFirst Play PGC\n--------------\n"); | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
1078 if(ifohandle->first_play_pgc) { |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
1079 ifoPrint_PGC(ifohandle->first_play_pgc); |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
1080 } else { |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
1081 printf("No First Play PGC present\n"); |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20981
diff
changeset
|
1082 } |
7029 | 1083 |
1084 printf("\nTitle Track search pointer table\n"); | |
1085 printf( "------------------------------------------------\n"); | |
1086 ifoPrint_TT_SRPT(ifohandle->tt_srpt); | |
1087 | |
1088 printf("\nMenu PGCI Unit table\n"); | |
1089 printf( "--------------------\n"); | |
1090 if(ifohandle->pgci_ut) { | |
1091 ifoPrint_PGCI_UT(ifohandle->pgci_ut); | |
1092 } else { | |
1093 printf("No PGCI Unit table present\n"); | |
1094 } | |
1095 | |
1096 printf("\nParental Manegment Information table\n"); | |
1097 printf( "------------------------------------\n"); | |
1098 if(ifohandle->ptl_mait) { | |
1099 ifoPrint_PTL_MAIT(ifohandle->ptl_mait); | |
1100 } else { | |
1101 printf("No Parental Management Information present\n"); | |
1102 } | |
1103 | |
1104 printf("\nVideo Title Set Attribute Table\n"); | |
1105 printf( "-------------------------------\n"); | |
1106 ifoPrint_VTS_ATRT(ifohandle->vts_atrt); | |
1107 | |
1108 printf("\nText Data Manager Information\n"); | |
1109 printf( "-----------------------------\n"); | |
1110 if(ifohandle->txtdt_mgi) { | |
1111 //ifoPrint_TXTDT_MGI(&(vmgi->txtdt_mgi)); | |
1112 } else { | |
1113 printf("No Text Data Manager Information present\n"); | |
1114 } | |
1115 | |
1116 printf("\nMenu Cell Adress table\n"); | |
1117 printf( "-----------------\n"); | |
1118 if(ifohandle->menu_c_adt) { | |
1119 ifoPrint_C_ADT(ifohandle->menu_c_adt); | |
1120 } else { | |
1121 printf("No Menu Cell Adress table present\n"); | |
1122 } | |
1123 | |
1124 printf("\nVideo Manager Menu VOBU address map\n"); | |
1125 printf( "-----------------\n"); | |
1126 if(ifohandle->menu_vobu_admap) { | |
1127 ifoPrint_VOBU_ADMAP(ifohandle->menu_vobu_admap); | |
1128 } else { | |
1129 printf("No Menu VOBU address map present\n"); | |
1130 } | |
1131 } | |
1132 | |
1133 | |
1134 if(ifohandle->vtsi_mat) { | |
1135 | |
1136 printf("VTS top level\n-------------\n"); | |
1137 ifoPrint_VTSI_MAT(ifohandle->vtsi_mat); | |
1138 | |
1139 printf("\nPart of Title Track search pointer table\n"); | |
1140 printf( "----------------------------------------------\n"); | |
1141 ifoPrint_VTS_PTT_SRPT(ifohandle->vts_ptt_srpt); | |
1142 | |
1143 printf("\nPGCI Unit table\n"); | |
1144 printf( "--------------------\n"); | |
1145 ifoPrint_PGCIT(ifohandle->vts_pgcit); | |
1146 | |
1147 printf("\nMenu PGCI Unit table\n"); | |
1148 printf( "--------------------\n"); | |
1149 if(ifohandle->pgci_ut) { | |
1150 ifoPrint_PGCI_UT(ifohandle->pgci_ut); | |
1151 } else { | |
1152 printf("No Menu PGCI Unit table present\n"); | |
1153 } | |
15874 | 1154 |
1155 printf("\nTime Search table\n"); | |
1156 printf( "-----------------\n"); | |
1157 if(ifohandle->vts_tmapt) { | |
1158 ifoPrint_VTS_TMAPT(ifohandle->vts_tmapt); | |
1159 } else { | |
1160 printf("No Time Search table present\n"); | |
1161 } | |
7029 | 1162 |
1163 printf("\nMenu Cell Adress table\n"); | |
1164 printf( "-----------------\n"); | |
1165 if(ifohandle->menu_c_adt) { | |
1166 ifoPrint_C_ADT(ifohandle->menu_c_adt); | |
1167 } else { | |
1168 printf("No Cell Adress table present\n"); | |
1169 } | |
1170 | |
1171 printf("\nVideo Title Set Menu VOBU address map\n"); | |
1172 printf( "-----------------\n"); | |
1173 if(ifohandle->menu_vobu_admap) { | |
1174 ifoPrint_VOBU_ADMAP(ifohandle->menu_vobu_admap); | |
1175 } else { | |
1176 printf("No Menu VOBU address map present\n"); | |
1177 } | |
1178 | |
1179 printf("\nCell Adress table\n"); | |
1180 printf( "-----------------\n"); | |
1181 ifoPrint_C_ADT(ifohandle->vts_c_adt); | |
1182 | |
1183 printf("\nVideo Title Set VOBU address map\n"); | |
1184 printf( "-----------------\n"); | |
1185 ifoPrint_VOBU_ADMAP(ifohandle->vts_vobu_admap); | |
1186 } | |
1187 | |
1188 ifoClose(ifohandle); | |
1189 } | |
1190 |