00001 #ifndef IFO_TYPES_H_INCLUDED
00002 #define IFO_TYPES_H_INCLUDED
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <inttypes.h>
00024 #include "dvd_reader.h"
00025
00026
00027 #undef ATTRIBUTE_PACKED
00028 #undef PRAGMA_PACK_BEGIN
00029 #undef PRAGMA_PACK_END
00030
00031 #if defined(__GNUC__)
00032 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
00033 #define ATTRIBUTE_PACKED __attribute__ ((packed))
00034 #define PRAGMA_PACK 0
00035 #endif
00036 #endif
00037
00038 #if !defined(ATTRIBUTE_PACKED)
00039 #define ATTRIBUTE_PACKED
00040 #define PRAGMA_PACK 1
00041 #endif
00042
00043 #if PRAGMA_PACK
00044 #pragma pack(1)
00045 #endif
00046
00047
00058 typedef struct {
00059 uint8_t hour;
00060 uint8_t minute;
00061 uint8_t second;
00062 uint8_t frame_u;
00063 } ATTRIBUTE_PACKED dvd_time_t;
00064
00068 typedef struct {
00069 uint8_t bytes[8];
00070 } ATTRIBUTE_PACKED vm_cmd_t;
00071 #define COMMAND_DATA_SIZE 8
00072
00073
00077 typedef struct {
00078 #ifdef WORDS_BIGENDIAN
00079 unsigned char mpeg_version : 2;
00080 unsigned char video_format : 2;
00081 unsigned char display_aspect_ratio : 2;
00082 unsigned char permitted_df : 2;
00083
00084 unsigned char line21_cc_1 : 1;
00085 unsigned char line21_cc_2 : 1;
00086 unsigned char unknown1 : 1;
00087 unsigned char bit_rate : 1;
00088
00089 unsigned char picture_size : 2;
00090 unsigned char letterboxed : 1;
00091 unsigned char film_mode : 1;
00092 #else
00093 unsigned char permitted_df : 2;
00094 unsigned char display_aspect_ratio : 2;
00095 unsigned char video_format : 2;
00096 unsigned char mpeg_version : 2;
00097
00098 unsigned char film_mode : 1;
00099 unsigned char letterboxed : 1;
00100 unsigned char picture_size : 2;
00101
00102 unsigned char bit_rate : 1;
00103 unsigned char unknown1 : 1;
00104 unsigned char line21_cc_2 : 1;
00105 unsigned char line21_cc_1 : 1;
00106 #endif
00107 } ATTRIBUTE_PACKED video_attr_t;
00108
00112 typedef struct {
00113 #ifdef WORDS_BIGENDIAN
00114 unsigned char audio_format : 3;
00115 unsigned char multichannel_extension : 1;
00116 unsigned char lang_type : 2;
00117 unsigned char application_mode : 2;
00118
00119 unsigned char quantization : 2;
00120 unsigned char sample_frequency : 2;
00121 unsigned char unknown1 : 1;
00122 unsigned char channels : 3;
00123 #else
00124 unsigned char application_mode : 2;
00125 unsigned char lang_type : 2;
00126 unsigned char multichannel_extension : 1;
00127 unsigned char audio_format : 3;
00128
00129 unsigned char channels : 3;
00130 unsigned char unknown1 : 1;
00131 unsigned char sample_frequency : 2;
00132 unsigned char quantization : 2;
00133 #endif
00134 uint16_t lang_code;
00135 uint8_t lang_extension;
00136 uint8_t code_extension;
00137 uint8_t unknown3;
00138 union {
00139 struct ATTRIBUTE_PACKED {
00140 #ifdef WORDS_BIGENDIAN
00141 unsigned char unknown4 : 1;
00142 unsigned char channel_assignment : 3;
00143 unsigned char version : 2;
00144 unsigned char mc_intro : 1;
00145 unsigned char mode : 1;
00146 #else
00147 unsigned char mode : 1;
00148 unsigned char mc_intro : 1;
00149 unsigned char version : 2;
00150 unsigned char channel_assignment : 3;
00151 unsigned char unknown4 : 1;
00152 #endif
00153 } karaoke;
00154 struct ATTRIBUTE_PACKED {
00155 #ifdef WORDS_BIGENDIAN
00156 unsigned char unknown5 : 4;
00157 unsigned char dolby_encoded : 1;
00158 unsigned char unknown6 : 3;
00159 #else
00160 unsigned char unknown6 : 3;
00161 unsigned char dolby_encoded : 1;
00162 unsigned char unknown5 : 4;
00163 #endif
00164 } surround;
00165 } app_info;
00166 } ATTRIBUTE_PACKED audio_attr_t;
00167
00168
00172 typedef struct {
00173 #ifdef WORDS_BIGENDIAN
00174 unsigned int zero1 : 7;
00175 unsigned int ach0_gme : 1;
00176
00177 unsigned int zero2 : 7;
00178 unsigned int ach1_gme : 1;
00179
00180 unsigned int zero3 : 4;
00181 unsigned int ach2_gv1e : 1;
00182 unsigned int ach2_gv2e : 1;
00183 unsigned int ach2_gm1e : 1;
00184 unsigned int ach2_gm2e : 1;
00185
00186 unsigned int zero4 : 4;
00187 unsigned int ach3_gv1e : 1;
00188 unsigned int ach3_gv2e : 1;
00189 unsigned int ach3_gmAe : 1;
00190 unsigned int ach3_se2e : 1;
00191
00192 unsigned int zero5 : 4;
00193 unsigned int ach4_gv1e : 1;
00194 unsigned int ach4_gv2e : 1;
00195 unsigned int ach4_gmBe : 1;
00196 unsigned int ach4_seBe : 1;
00197 #else
00198 unsigned char ach0_gme : 1;
00199 unsigned char zero1 : 7;
00200
00201 unsigned char ach1_gme : 1;
00202 unsigned char zero2 : 7;
00203
00204 unsigned char ach2_gm2e : 1;
00205 unsigned char ach2_gm1e : 1;
00206 unsigned char ach2_gv2e : 1;
00207 unsigned char ach2_gv1e : 1;
00208 unsigned char zero3 : 4;
00209
00210 unsigned char ach3_se2e : 1;
00211 unsigned char ach3_gmAe : 1;
00212 unsigned char ach3_gv2e : 1;
00213 unsigned char ach3_gv1e : 1;
00214 unsigned char zero4 : 4;
00215
00216 unsigned char ach4_seBe : 1;
00217 unsigned char ach4_gmBe : 1;
00218 unsigned char ach4_gv2e : 1;
00219 unsigned char ach4_gv1e : 1;
00220 unsigned char zero5 : 4;
00221 #endif
00222 uint8_t zero6[19];
00223 } ATTRIBUTE_PACKED multichannel_ext_t;
00224
00225
00229 typedef struct {
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240 #ifdef WORDS_BIGENDIAN
00241 unsigned char code_mode : 3;
00242 unsigned char zero1 : 3;
00243 unsigned char type : 2;
00244 #else
00245 unsigned char type : 2;
00246 unsigned char zero1 : 3;
00247 unsigned char code_mode : 3;
00248 #endif
00249 uint8_t zero2;
00250 uint16_t lang_code;
00251 uint8_t lang_extension;
00252 uint8_t code_extension;
00253 } ATTRIBUTE_PACKED subp_attr_t;
00254
00255
00256
00260 typedef struct {
00261 uint16_t nr_of_pre;
00262 uint16_t nr_of_post;
00263 uint16_t nr_of_cell;
00264 uint16_t zero_1;
00265 vm_cmd_t *pre_cmds;
00266 vm_cmd_t *post_cmds;
00267 vm_cmd_t *cell_cmds;
00268 } ATTRIBUTE_PACKED pgc_command_tbl_t;
00269 #define PGC_COMMAND_TBL_SIZE 8
00270
00274 typedef uint8_t pgc_program_map_t;
00275
00279 typedef struct {
00280 #ifdef WORDS_BIGENDIAN
00281 unsigned int block_mode : 2;
00282 unsigned int block_type : 2;
00283 unsigned int seamless_play : 1;
00284 unsigned int interleaved : 1;
00285 unsigned int stc_discontinuity: 1;
00286 unsigned int seamless_angle : 1;
00287
00288 unsigned int playback_mode : 1;
00289 unsigned int restricted : 1;
00290 unsigned int unknown2 : 6;
00291 #else
00292 unsigned char seamless_angle : 1;
00293 unsigned char stc_discontinuity: 1;
00294 unsigned char interleaved : 1;
00295 unsigned char seamless_play : 1;
00296 unsigned char block_type : 2;
00297 unsigned char block_mode : 2;
00298
00299 unsigned char unknown2 : 6;
00300 unsigned char restricted : 1;
00301 unsigned char playback_mode : 1;
00302 #endif
00303 uint8_t still_time;
00304 uint8_t cell_cmd_nr;
00305 dvd_time_t playback_time;
00306 uint32_t first_sector;
00307 uint32_t first_ilvu_end_sector;
00308 uint32_t last_vobu_start_sector;
00309 uint32_t last_sector;
00310 } ATTRIBUTE_PACKED cell_playback_t;
00311
00312 #define BLOCK_TYPE_NONE 0x0
00313 #define BLOCK_TYPE_ANGLE_BLOCK 0x1
00314
00315 #define BLOCK_MODE_NOT_IN_BLOCK 0x0
00316 #define BLOCK_MODE_FIRST_CELL 0x1
00317 #define BLOCK_MODE_IN_BLOCK 0x2
00318 #define BLOCK_MODE_LAST_CELL 0x3
00319
00323 typedef struct {
00324 uint16_t vob_id_nr;
00325 uint8_t zero_1;
00326 uint8_t cell_nr;
00327 } ATTRIBUTE_PACKED cell_position_t;
00328
00332 typedef struct {
00333 #ifdef WORDS_BIGENDIAN
00334 unsigned int zero : 7;
00335 unsigned int video_pres_mode_change : 1;
00336
00337 unsigned int karaoke_audio_pres_mode_change : 1;
00338 unsigned int angle_change : 1;
00339 unsigned int subpic_stream_change : 1;
00340 unsigned int audio_stream_change : 1;
00341 unsigned int pause_on : 1;
00342 unsigned int still_off : 1;
00343 unsigned int button_select_or_activate : 1;
00344 unsigned int resume : 1;
00345
00346 unsigned int chapter_menu_call : 1;
00347 unsigned int angle_menu_call : 1;
00348 unsigned int audio_menu_call : 1;
00349 unsigned int subpic_menu_call : 1;
00350 unsigned int root_menu_call : 1;
00351 unsigned int title_menu_call : 1;
00352 unsigned int backward_scan : 1;
00353 unsigned int forward_scan : 1;
00354
00355 unsigned int next_pg_search : 1;
00356 unsigned int prev_or_top_pg_search : 1;
00357 unsigned int time_or_chapter_search : 1;
00358 unsigned int go_up : 1;
00359 unsigned int stop : 1;
00360 unsigned int title_play : 1;
00361 unsigned int chapter_search_or_play : 1;
00362 unsigned int title_or_time_play : 1;
00363 #else
00364 unsigned int video_pres_mode_change : 1;
00365 unsigned int zero : 7;
00366
00367 unsigned int resume : 1;
00368 unsigned int button_select_or_activate : 1;
00369 unsigned int still_off : 1;
00370 unsigned int pause_on : 1;
00371 unsigned int audio_stream_change : 1;
00372 unsigned int subpic_stream_change : 1;
00373 unsigned int angle_change : 1;
00374 unsigned int karaoke_audio_pres_mode_change : 1;
00375
00376 unsigned int forward_scan : 1;
00377 unsigned int backward_scan : 1;
00378 unsigned int title_menu_call : 1;
00379 unsigned int root_menu_call : 1;
00380 unsigned int subpic_menu_call : 1;
00381 unsigned int audio_menu_call : 1;
00382 unsigned int angle_menu_call : 1;
00383 unsigned int chapter_menu_call : 1;
00384
00385 unsigned int title_or_time_play : 1;
00386 unsigned int chapter_search_or_play : 1;
00387 unsigned int title_play : 1;
00388 unsigned int stop : 1;
00389 unsigned int go_up : 1;
00390 unsigned int time_or_chapter_search : 1;
00391 unsigned int prev_or_top_pg_search : 1;
00392 unsigned int next_pg_search : 1;
00393 #endif
00394 } ATTRIBUTE_PACKED user_ops_t;
00395
00400 typedef struct {
00401 #ifdef WORDS_BIGENDIAN
00402 unsigned int present : 1;
00403 unsigned int zero1 : 2;
00404 unsigned int s_4p3 : 5;
00405
00406 unsigned int zero2 : 3;
00407 unsigned int s_wide : 5;
00408
00409 unsigned int zero3 : 3;
00410 unsigned int s_lbox : 5;
00411
00412 unsigned int zero4 : 3;
00413 unsigned int s_panscan : 5;
00414 #else
00415 unsigned int s_4p3 : 5;
00416 unsigned int zero1 : 2;
00417 unsigned int present : 1;
00418
00419 unsigned int s_wide : 5;
00420 unsigned int zero2 : 3;
00421
00422 unsigned int s_lbox : 5;
00423 unsigned int zero3 : 3;
00424
00425 unsigned int s_panscan : 5;
00426 unsigned int zero4 : 3;
00427 #endif
00428 } ATTRIBUTE_PACKED subp_mapping_t;
00429
00433 typedef struct {
00434 #ifdef WORDS_BIGENDIAN
00435 unsigned int present : 1;
00436 unsigned int zero1 : 4;
00437 unsigned int s_audio : 3;
00438 #else
00439 unsigned int s_audio : 3;
00440 unsigned int zero1 : 4;
00441 unsigned int present : 1;
00442 #endif
00443 uint8_t zero2;
00444 } ATTRIBUTE_PACKED audio_mapping_t;
00445
00449 typedef struct {
00450 uint16_t zero_1;
00451 uint8_t nr_of_programs;
00452 uint8_t nr_of_cells;
00453 dvd_time_t playback_time;
00454 user_ops_t prohibited_ops;
00455 audio_mapping_t audio_control[8];
00456 subp_mapping_t subp_control[32];
00457 uint16_t next_pgc_nr;
00458 uint16_t prev_pgc_nr;
00459 uint16_t goup_pgc_nr;
00460 uint8_t still_time;
00461 uint8_t pg_playback_mode;
00462 uint32_t palette[16];
00463 uint16_t command_tbl_offset;
00464 uint16_t program_map_offset;
00465 uint16_t cell_playback_offset;
00466 uint16_t cell_position_offset;
00467 pgc_command_tbl_t *command_tbl;
00468 pgc_program_map_t *program_map;
00469 cell_playback_t *cell_playback;
00470 cell_position_t *cell_position;
00471 } ATTRIBUTE_PACKED pgc_t;
00472 #define PGC_SIZE 236
00473
00477 typedef struct {
00478 uint8_t entry_id;
00479 #ifdef WORDS_BIGENDIAN
00480 unsigned int block_mode : 2;
00481 unsigned int block_type : 2;
00482 unsigned int unknown1 : 4;
00483 #else
00484 unsigned char unknown1 : 4;
00485 unsigned char block_type : 2;
00486 unsigned char block_mode : 2;
00487 #endif
00488 uint16_t ptl_id_mask;
00489 uint32_t pgc_start_byte;
00490 pgc_t *pgc;
00491 } ATTRIBUTE_PACKED pgci_srp_t;
00492 #define PGCI_SRP_SIZE 8
00493
00497 typedef struct {
00498 uint16_t nr_of_pgci_srp;
00499 uint16_t zero_1;
00500 uint32_t last_byte;
00501 pgci_srp_t *pgci_srp;
00502 } ATTRIBUTE_PACKED pgcit_t;
00503 #define PGCIT_SIZE 8
00504
00508 typedef struct {
00509 uint16_t lang_code;
00510 uint8_t lang_extension;
00511 uint8_t exists;
00512 uint32_t lang_start_byte;
00513 pgcit_t *pgcit;
00514 } ATTRIBUTE_PACKED pgci_lu_t;
00515 #define PGCI_LU_SIZE 8
00516
00520 typedef struct {
00521 uint16_t nr_of_lus;
00522 uint16_t zero_1;
00523 uint32_t last_byte;
00524 pgci_lu_t *lu;
00525 } ATTRIBUTE_PACKED pgci_ut_t;
00526 #define PGCI_UT_SIZE 8
00527
00531 typedef struct {
00532 uint16_t vob_id;
00533 uint8_t cell_id;
00534 uint8_t zero_1;
00535 uint32_t start_sector;
00536 uint32_t last_sector;
00537 } ATTRIBUTE_PACKED cell_adr_t;
00538
00542 typedef struct {
00543 uint16_t nr_of_vobs;
00544 uint16_t zero_1;
00545 uint32_t last_byte;
00546 cell_adr_t *cell_adr_table;
00547 } ATTRIBUTE_PACKED c_adt_t;
00548 #define C_ADT_SIZE 8
00549
00553 typedef struct {
00554 uint32_t last_byte;
00555 uint32_t *vobu_start_sectors;
00556 } ATTRIBUTE_PACKED vobu_admap_t;
00557 #define VOBU_ADMAP_SIZE 4
00558
00559
00560
00561
00571 typedef struct {
00572 char vmg_identifier[12];
00573 uint32_t vmg_last_sector;
00574 uint8_t zero_1[12];
00575 uint32_t vmgi_last_sector;
00576 uint8_t zero_2;
00577 uint8_t specification_version;
00578 uint32_t vmg_category;
00579 uint16_t vmg_nr_of_volumes;
00580 uint16_t vmg_this_volume_nr;
00581 uint8_t disc_side;
00582 uint8_t zero_3[19];
00583 uint16_t vmg_nr_of_title_sets;
00584 char provider_identifier[32];
00585 uint64_t vmg_pos_code;
00586 uint8_t zero_4[24];
00587 uint32_t vmgi_last_byte;
00588 uint32_t first_play_pgc;
00589 uint8_t zero_5[56];
00590 uint32_t vmgm_vobs;
00591 uint32_t tt_srpt;
00592 uint32_t vmgm_pgci_ut;
00593 uint32_t ptl_mait;
00594 uint32_t vts_atrt;
00595 uint32_t txtdt_mgi;
00596 uint32_t vmgm_c_adt;
00597 uint32_t vmgm_vobu_admap;
00598 uint8_t zero_6[32];
00599
00600 video_attr_t vmgm_video_attr;
00601 uint8_t zero_7;
00602 uint8_t nr_of_vmgm_audio_streams;
00603 audio_attr_t vmgm_audio_attr;
00604 audio_attr_t zero_8[7];
00605 uint8_t zero_9[17];
00606 uint8_t nr_of_vmgm_subp_streams;
00607 subp_attr_t vmgm_subp_attr;
00608 subp_attr_t zero_10[27];
00609 } ATTRIBUTE_PACKED vmgi_mat_t;
00610
00611 typedef struct {
00612 #ifdef WORDS_BIGENDIAN
00613 unsigned int zero_1 : 1;
00614 unsigned int multi_or_random_pgc_title : 1;
00615 unsigned int jlc_exists_in_cell_cmd : 1;
00616 unsigned int jlc_exists_in_prepost_cmd : 1;
00617 unsigned int jlc_exists_in_button_cmd : 1;
00618 unsigned int jlc_exists_in_tt_dom : 1;
00619 unsigned int chapter_search_or_play : 1;
00620 unsigned int title_or_time_play : 1;
00621 #else
00622 unsigned char title_or_time_play : 1;
00623 unsigned char chapter_search_or_play : 1;
00624 unsigned char jlc_exists_in_tt_dom : 1;
00625 unsigned char jlc_exists_in_button_cmd : 1;
00626 unsigned char jlc_exists_in_prepost_cmd : 1;
00627 unsigned char jlc_exists_in_cell_cmd : 1;
00628 unsigned char multi_or_random_pgc_title : 1;
00629 unsigned char zero_1 : 1;
00630 #endif
00631 } ATTRIBUTE_PACKED playback_type_t;
00632
00636 typedef struct {
00637 playback_type_t pb_ty;
00638 uint8_t nr_of_angles;
00639 uint16_t nr_of_ptts;
00640 uint16_t parental_id;
00641 uint8_t title_set_nr;
00642 uint8_t vts_ttn;
00643 uint32_t title_set_sector;
00644 } ATTRIBUTE_PACKED title_info_t;
00645
00649 typedef struct {
00650 uint16_t nr_of_srpts;
00651 uint16_t zero_1;
00652 uint32_t last_byte;
00653 title_info_t *title;
00654 } ATTRIBUTE_PACKED tt_srpt_t;
00655 #define TT_SRPT_SIZE 8
00656
00657
00662 typedef uint16_t pf_level_t[8];
00663
00667 typedef struct {
00668 uint16_t country_code;
00669 uint16_t zero_1;
00670 uint16_t pf_ptl_mai_start_byte;
00671 uint16_t zero_2;
00672 pf_level_t *pf_ptl_mai;
00673 } ATTRIBUTE_PACKED ptl_mait_country_t;
00674 #define PTL_MAIT_COUNTRY_SIZE 8
00675
00679 typedef struct {
00680 uint16_t nr_of_countries;
00681 uint16_t nr_of_vtss;
00682 uint32_t last_byte;
00683 ptl_mait_country_t *countries;
00684 } ATTRIBUTE_PACKED ptl_mait_t;
00685 #define PTL_MAIT_SIZE 8
00686
00690 typedef struct {
00691 uint32_t last_byte;
00692 uint32_t vts_cat;
00693
00694 video_attr_t vtsm_vobs_attr;
00695 uint8_t zero_1;
00696 uint8_t nr_of_vtsm_audio_streams;
00697 audio_attr_t vtsm_audio_attr;
00698 audio_attr_t zero_2[7];
00699 uint8_t zero_3[16];
00700 uint8_t zero_4;
00701 uint8_t nr_of_vtsm_subp_streams;
00702 subp_attr_t vtsm_subp_attr;
00703 subp_attr_t zero_5[27];
00704
00705 uint8_t zero_6[2];
00706
00707 video_attr_t vtstt_vobs_video_attr;
00708 uint8_t zero_7;
00709 uint8_t nr_of_vtstt_audio_streams;
00710 audio_attr_t vtstt_audio_attr[8];
00711 uint8_t zero_8[16];
00712 uint8_t zero_9;
00713 uint8_t nr_of_vtstt_subp_streams;
00714 subp_attr_t vtstt_subp_attr[32];
00715 } ATTRIBUTE_PACKED vts_attributes_t;
00716 #define VTS_ATTRIBUTES_SIZE 542
00717 #define VTS_ATTRIBUTES_MIN_SIZE 356
00718
00722 typedef struct {
00723 uint16_t nr_of_vtss;
00724 uint16_t zero_1;
00725 uint32_t last_byte;
00726 vts_attributes_t *vts;
00727 uint32_t *vts_atrt_offsets;
00728 } ATTRIBUTE_PACKED vts_atrt_t;
00729 #define VTS_ATRT_SIZE 8
00730
00734 typedef struct {
00735 uint32_t last_byte;
00736 uint16_t offsets[100];
00737 #if 0
00738 uint16_t unknown;
00739 uint16_t zero_1;
00740
00741 uint8_t type_of_info;
00742 uint8_t unknown1;
00743 uint8_t unknown2;
00744 uint8_t unknown3;
00745 uint8_t unknown4;
00746 uint8_t unknown5;
00747 uint16_t offset;
00748
00749 char text[12];
00750 #endif
00751 } ATTRIBUTE_PACKED txtdt_t;
00752
00756 typedef struct {
00757 uint16_t lang_code;
00758 uint16_t unknown;
00759 uint32_t txtdt_start_byte;
00760 txtdt_t *txtdt;
00761 } ATTRIBUTE_PACKED txtdt_lu_t;
00762 #define TXTDT_LU_SIZE 8
00763
00767 typedef struct {
00768 char disc_name[14];
00769 uint16_t nr_of_language_units;
00770 uint32_t last_byte;
00771 txtdt_lu_t *lu;
00772 } ATTRIBUTE_PACKED txtdt_mgi_t;
00773 #define TXTDT_MGI_SIZE 20
00774
00775
00785 typedef struct {
00786 char vts_identifier[12];
00787 uint32_t vts_last_sector;
00788 uint8_t zero_1[12];
00789 uint32_t vtsi_last_sector;
00790 uint8_t zero_2;
00791 uint8_t specification_version;
00792 uint32_t vts_category;
00793 uint16_t zero_3;
00794 uint16_t zero_4;
00795 uint8_t zero_5;
00796 uint8_t zero_6[19];
00797 uint16_t zero_7;
00798 uint8_t zero_8[32];
00799 uint64_t zero_9;
00800 uint8_t zero_10[24];
00801 uint32_t vtsi_last_byte;
00802 uint32_t zero_11;
00803 uint8_t zero_12[56];
00804 uint32_t vtsm_vobs;
00805 uint32_t vtstt_vobs;
00806 uint32_t vts_ptt_srpt;
00807 uint32_t vts_pgcit;
00808 uint32_t vtsm_pgci_ut;
00809 uint32_t vts_tmapt;
00810 uint32_t vtsm_c_adt;
00811 uint32_t vtsm_vobu_admap;
00812 uint32_t vts_c_adt;
00813 uint32_t vts_vobu_admap;
00814 uint8_t zero_13[24];
00815
00816 video_attr_t vtsm_video_attr;
00817 uint8_t zero_14;
00818 uint8_t nr_of_vtsm_audio_streams;
00819 audio_attr_t vtsm_audio_attr;
00820 audio_attr_t zero_15[7];
00821 uint8_t zero_16[17];
00822 uint8_t nr_of_vtsm_subp_streams;
00823 subp_attr_t vtsm_subp_attr;
00824 subp_attr_t zero_17[27];
00825 uint8_t zero_18[2];
00826
00827 video_attr_t vts_video_attr;
00828 uint8_t zero_19;
00829 uint8_t nr_of_vts_audio_streams;
00830 audio_attr_t vts_audio_attr[8];
00831 uint8_t zero_20[17];
00832 uint8_t nr_of_vts_subp_streams;
00833 subp_attr_t vts_subp_attr[32];
00834 uint16_t zero_21;
00835 multichannel_ext_t vts_mu_audio_attr[8];
00836
00837 } ATTRIBUTE_PACKED vtsi_mat_t;
00838
00842 typedef struct {
00843 uint16_t pgcn;
00844 uint16_t pgn;
00845 } ATTRIBUTE_PACKED ptt_info_t;
00846
00850 typedef struct {
00851 uint16_t nr_of_ptts;
00852 ptt_info_t *ptt;
00853 } ATTRIBUTE_PACKED ttu_t;
00854
00858 typedef struct {
00859 uint16_t nr_of_srpts;
00860 uint16_t zero_1;
00861 uint32_t last_byte;
00862 ttu_t *title;
00863 uint32_t *ttu_offset;
00864 } ATTRIBUTE_PACKED vts_ptt_srpt_t;
00865 #define VTS_PTT_SRPT_SIZE 8
00866
00867
00871
00872 typedef uint32_t map_ent_t;
00873
00877 typedef struct {
00878 uint8_t tmu;
00879 uint8_t zero_1;
00880 uint16_t nr_of_entries;
00881 map_ent_t *map_ent;
00882 } ATTRIBUTE_PACKED vts_tmap_t;
00883 #define VTS_TMAP_SIZE 4
00884
00888 typedef struct {
00889 uint16_t nr_of_tmaps;
00890 uint16_t zero_1;
00891 uint32_t last_byte;
00892 vts_tmap_t *tmap;
00893 uint32_t *tmap_offset;
00894 } ATTRIBUTE_PACKED vts_tmapt_t;
00895 #define VTS_TMAPT_SIZE 8
00896
00897
00898 #if PRAGMA_PACK
00899 #pragma pack()
00900 #endif
00901
00902
00909 typedef struct {
00910 dvd_file_t *file;
00911
00912
00913 vmgi_mat_t *vmgi_mat;
00914 tt_srpt_t *tt_srpt;
00915 pgc_t *first_play_pgc;
00916 ptl_mait_t *ptl_mait;
00917 vts_atrt_t *vts_atrt;
00918 txtdt_mgi_t *txtdt_mgi;
00919
00920
00921 pgci_ut_t *pgci_ut;
00922 c_adt_t *menu_c_adt;
00923 vobu_admap_t *menu_vobu_admap;
00924
00925
00926 vtsi_mat_t *vtsi_mat;
00927 vts_ptt_srpt_t *vts_ptt_srpt;
00928 pgcit_t *vts_pgcit;
00929 vts_tmapt_t *vts_tmapt;
00930 c_adt_t *vts_c_adt;
00931 vobu_admap_t *vts_vobu_admap;
00932 } ifo_handle_t;
00933
00934 #endif