25 #include "dvd_reader.h" 28 #undef ATTRIBUTE_PACKED 31 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) 32 #if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) && !defined(__clang__) 33 #define ATTRIBUTE_PACKED __attribute__((packed, gcc_struct)) 35 #define ATTRIBUTE_PACKED __attribute__((packed)) 41 #if !defined(ATTRIBUTE_PACKED) 42 #define ATTRIBUTE_PACKED 74 #define COMMAND_DATA_SIZE 8U 81 unsigned char mpeg_version : 2;
82 unsigned char video_format : 2;
83 unsigned char display_aspect_ratio : 2;
84 unsigned char permitted_df : 2;
86 unsigned char line21_cc_1 : 1;
87 unsigned char line21_cc_2 : 1;
88 unsigned char unknown1 : 1;
89 unsigned char bit_rate : 1;
91 unsigned char picture_size : 2;
92 unsigned char letterboxed : 1;
93 unsigned char film_mode : 1;
100 unsigned char audio_format : 3;
101 unsigned char multichannel_extension : 1;
102 unsigned char lang_type : 2;
103 unsigned char application_mode : 2;
105 unsigned char quantization : 2;
106 unsigned char sample_frequency : 2;
107 unsigned char unknown1 : 1;
108 unsigned char channels : 3;
110 uint8_t lang_extension;
111 uint8_t code_extension;
115 unsigned char unknown4 : 1;
116 unsigned char channel_assignment : 3;
117 unsigned char version : 2;
118 unsigned char mc_intro : 1;
119 unsigned char mode : 1;
122 unsigned char unknown5 : 4;
123 unsigned char dolby_encoded : 1;
124 unsigned char unknown6 : 3;
135 unsigned char ach0_gme : 1;
138 unsigned char ach1_gme : 1;
141 unsigned char ach2_gv1e : 1;
142 unsigned char ach2_gv2e : 1;
143 unsigned char ach2_gm1e : 1;
144 unsigned char ach2_gm2e : 1;
147 unsigned char ach3_gv1e : 1;
148 unsigned char ach3_gv2e : 1;
149 unsigned char ach3_gmAe : 1;
150 unsigned char ach3_se2e : 1;
152 unsigned char zero5 : 4;
153 unsigned char ach4_gv1e : 1;
154 unsigned char ach4_gv2e : 1;
155 unsigned char ach4_gmBe : 1;
156 unsigned char ach4_seBe : 1;
175 unsigned char code_mode : 3;
176 unsigned char zero1 : 3;
177 unsigned char type : 2;
180 uint8_t lang_extension;
181 uint8_t code_extension;
198 #define PGC_COMMAND_TBL_SIZE 8U 203 typedef uint8_t pgc_program_map_t;
209 unsigned char block_mode : 2;
210 unsigned char block_type : 2;
211 unsigned char seamless_play : 1;
212 unsigned char interleaved : 1;
213 unsigned char stc_discontinuity : 1;
214 unsigned char seamless_angle : 1;
215 unsigned char zero_1 : 1;
218 unsigned char cell_type : 5;
221 dvd_time_t playback_time;
222 uint32_t first_sector;
223 uint32_t first_ilvu_end_sector;
224 uint32_t last_vobu_start_sector;
225 uint32_t last_sector;
228 #define BLOCK_TYPE_NONE 0x0 229 #define BLOCK_TYPE_ANGLE_BLOCK 0x1 231 #define BLOCK_MODE_NOT_IN_BLOCK 0x0 232 #define BLOCK_MODE_FIRST_CELL 0x1 233 #define BLOCK_MODE_IN_BLOCK 0x2 234 #define BLOCK_MODE_LAST_CELL 0x3 249 unsigned char zero : 7;
250 unsigned char video_pres_mode_change : 1;
252 unsigned char karaoke_audio_pres_mode_change : 1;
253 unsigned char angle_change : 1;
254 unsigned char subpic_stream_change : 1;
255 unsigned char audio_stream_change : 1;
256 unsigned char pause_on : 1;
257 unsigned char still_off : 1;
258 unsigned char button_select_or_activate : 1;
259 unsigned char resume : 1;
261 unsigned char chapter_menu_call : 1;
262 unsigned char angle_menu_call : 1;
263 unsigned char audio_menu_call : 1;
264 unsigned char subpic_menu_call : 1;
265 unsigned char root_menu_call : 1;
266 unsigned char title_menu_call : 1;
267 unsigned char backward_scan : 1;
268 unsigned char forward_scan : 1;
270 unsigned char next_pg_search : 1;
271 unsigned char prev_or_top_pg_search : 1;
272 unsigned char time_or_chapter_search : 1;
273 unsigned char go_up : 1;
274 unsigned char stop : 1;
275 unsigned char title_play : 1;
276 unsigned char chapter_search_or_play : 1;
277 unsigned char title_or_time_play : 1;
285 uint8_t nr_of_programs;
287 dvd_time_t playback_time;
288 user_ops_t prohibited_ops;
289 uint16_t audio_control[8];
290 uint32_t subp_control[32];
291 uint16_t next_pgc_nr;
292 uint16_t prev_pgc_nr;
293 uint16_t goup_pgc_nr;
294 uint8_t pg_playback_mode;
296 uint32_t palette[16];
297 uint16_t command_tbl_offset;
298 uint16_t program_map_offset;
299 uint16_t cell_playback_offset;
300 uint16_t cell_position_offset;
301 pgc_command_tbl_t *command_tbl;
302 pgc_program_map_t *program_map;
303 cell_playback_t *cell_playback;
304 cell_position_t *cell_position;
307 #define PGC_SIZE 236U 314 unsigned char block_mode : 2;
315 unsigned char block_type : 2;
316 unsigned char zero_1 : 4;
317 uint16_t ptl_id_mask;
318 uint32_t pgc_start_byte;
321 #define PGCI_SRP_SIZE 8U 327 uint16_t nr_of_pgci_srp;
330 pgci_srp_t *pgci_srp;
333 #define PGCIT_SIZE 8U 340 uint8_t lang_extension;
342 uint32_t lang_start_byte;
345 #define PGCI_LU_SIZE 8U 356 #define PGCI_UT_SIZE 8U 365 uint32_t start_sector;
366 uint32_t last_sector;
376 cell_adr_t *cell_adr_table;
378 #define C_ADT_SIZE 8U 385 uint32_t *vobu_start_sectors;
387 #define VOBU_ADMAP_SIZE 4U 402 char vmg_identifier[12];
403 uint32_t vmg_last_sector;
405 uint32_t vmgi_last_sector;
407 uint8_t specification_version;
408 uint32_t vmg_category;
409 uint16_t vmg_nr_of_volumes;
410 uint16_t vmg_this_volume_nr;
413 uint16_t vmg_nr_of_title_sets;
414 char provider_identifier[32];
415 uint64_t vmg_pos_code;
417 uint32_t vmgi_last_byte;
418 uint32_t first_play_pgc;
422 uint32_t vmgm_pgci_ut;
427 uint32_t vmgm_vobu_admap;
430 video_attr_t vmgm_video_attr;
432 uint8_t nr_of_vmgm_audio_streams;
433 audio_attr_t vmgm_audio_attr;
434 audio_attr_t zero_8[7];
436 uint8_t nr_of_vmgm_subp_streams;
437 subp_attr_t vmgm_subp_attr;
438 subp_attr_t zero_10[27];
442 unsigned char zero_1 : 1;
443 unsigned char multi_or_random_pgc_title : 1;
444 unsigned char jlc_exists_in_cell_cmd : 1;
445 unsigned char jlc_exists_in_prepost_cmd : 1;
446 unsigned char jlc_exists_in_button_cmd : 1;
447 unsigned char jlc_exists_in_tt_dom : 1;
448 unsigned char chapter_search_or_play : 1;
449 unsigned char title_or_time_play : 1;
456 playback_type_t pb_ty;
457 uint8_t nr_of_angles;
459 uint16_t parental_id;
460 uint8_t title_set_nr;
462 uint32_t title_set_sector;
469 uint16_t nr_of_srpts;
474 #define TT_SRPT_SIZE 8U 481 #define PTL_MAIT_NUM_LEVEL 8 482 typedef uint16_t pf_level_t[PTL_MAIT_NUM_LEVEL];
488 uint16_t country_code;
490 uint16_t pf_ptl_mai_start_byte;
492 pf_level_t *pf_ptl_mai;
494 #define PTL_MAIT_COUNTRY_SIZE 8U 500 uint16_t nr_of_countries;
503 ptl_mait_country_t *countries;
505 #define PTL_MAIT_SIZE 8U 514 video_attr_t vtsm_vobs_attr;
516 uint8_t nr_of_vtsm_audio_streams;
517 audio_attr_t vtsm_audio_attr;
518 audio_attr_t zero_2[7];
521 uint8_t nr_of_vtsm_subp_streams;
522 subp_attr_t vtsm_subp_attr;
523 subp_attr_t zero_5[27];
527 video_attr_t vtstt_vobs_video_attr;
529 uint8_t nr_of_vtstt_audio_streams;
530 audio_attr_t vtstt_audio_attr[8];
533 uint8_t nr_of_vtstt_subp_streams;
534 subp_attr_t vtstt_subp_attr[32];
536 #define VTS_ATTRIBUTES_SIZE 542U 537 #define VTS_ATTRIBUTES_MIN_SIZE 356U 546 vts_attributes_t *vts;
547 uint32_t *vts_atrt_offsets;
549 #define VTS_ATRT_SIZE 8U 556 uint16_t offsets[100];
561 uint8_t type_of_info;
581 uint32_t txtdt_start_byte;
584 #define TXTDT_LU_SIZE 8U 592 uint16_t nr_of_language_units;
596 #define TXTDT_MGI_SIZE 20U 609 char vts_identifier[12];
610 uint32_t vts_last_sector;
612 uint32_t vtsi_last_sector;
614 uint8_t specification_version;
615 uint32_t vts_category;
624 uint32_t vtsi_last_byte;
629 uint32_t vts_ptt_srpt;
631 uint32_t vtsm_pgci_ut;
634 uint32_t vtsm_vobu_admap;
636 uint32_t vts_vobu_admap;
639 video_attr_t vtsm_video_attr;
641 uint8_t nr_of_vtsm_audio_streams;
642 audio_attr_t vtsm_audio_attr;
643 audio_attr_t zero_15[7];
645 uint8_t nr_of_vtsm_subp_streams;
646 subp_attr_t vtsm_subp_attr;
647 subp_attr_t zero_17[27];
650 video_attr_t vts_video_attr;
652 uint8_t nr_of_vts_audio_streams;
653 audio_attr_t vts_audio_attr[8];
655 uint8_t nr_of_vts_subp_streams;
656 subp_attr_t vts_subp_attr[32];
658 multichannel_ext_t vts_mu_audio_attr[8];
682 uint16_t nr_of_srpts;
686 uint32_t *ttu_offset;
688 #define VTS_PTT_SRPT_SIZE 8U 695 typedef uint32_t map_ent_t;
703 uint16_t nr_of_entries;
706 #define VTS_TMAP_SIZE 4U 712 uint16_t nr_of_tmaps;
716 uint32_t *tmap_offset;
718 #define VTS_TMAPT_SIZE 8U 734 vmgi_mat_t *vmgi_mat;
736 pgc_t *first_play_pgc;
737 ptl_mait_t *ptl_mait;
738 vts_atrt_t *vts_atrt;
739 txtdt_mgi_t *txtdt_mgi;
744 vobu_admap_t *menu_vobu_admap;
747 vtsi_mat_t *vtsi_mat;
748 vts_ptt_srpt_t *vts_ptt_srpt;
750 vts_tmapt_t *vts_tmapt;
752 vobu_admap_t *vts_vobu_admap;
unsigned char zero4
reserved
Definition: ifo_types.h:146
unsigned char zero2
reserved
Definition: ifo_types.h:137
unsigned char playback_mode
When set, enter StillMode after each VOBU.
Definition: ifo_types.h:216
unsigned char zero3
reserved
Definition: ifo_types.h:140
Common.
Definition: ifo_types.h:61
unsigned char zero1
reserved
Definition: ifo_types.h:134
uint8_t still_time
for karaoke, reserved otherwise
Definition: ifo_types.h:219
The following structure defines an IFO file.
Definition: ifo_types.h:732
unsigned char restricted
?? drop out of fastforward?
Definition: ifo_types.h:217