22#ifndef LIBDVDREAD_IFO_TYPES_H
23#define LIBDVDREAD_IFO_TYPES_H
27#include <dvdread/dvd_reader.h>
29#undef ATTRIBUTE_PACKED
32# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
33# if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) && !defined(__clang__)
34# define ATTRIBUTE_PACKED __attribute__ ((packed,gcc_struct))
36# define ATTRIBUTE_PACKED __attribute__ ((packed))
42#if !defined(ATTRIBUTE_PACKED)
43#define ATTRIBUTE_PACKED
67} ATTRIBUTE_PACKED dvd_time_t;
68#define DVD_TIME_SIZE 4U
75} ATTRIBUTE_PACKED vm_cmd_t;
76#define COMMAND_DATA_SIZE 8U
83 unsigned char mpeg_version : 2;
84 unsigned char video_format : 2;
85 unsigned char display_aspect_ratio : 2;
86 unsigned char permitted_df : 2;
88 unsigned char line21_cc_1 : 1;
89 unsigned char line21_cc_2 : 1;
90 unsigned char unknown1 : 1;
91 unsigned char bit_rate : 1;
93 unsigned char picture_size : 2;
94 unsigned char letterboxed : 1;
95 unsigned char film_mode : 1;
96} ATTRIBUTE_PACKED video_attr_t;
97#define VIDEO_ATTR_SIZE 2U
103 unsigned char audio_format : 3;
104 unsigned char multichannel_extension : 1;
105 unsigned char lang_type : 2;
106 unsigned char application_mode : 2;
108 unsigned char quantization : 2;
109 unsigned char sample_frequency : 2;
110 unsigned char unknown1 : 1;
111 unsigned char channels : 3;
113 uint8_t lang_extension;
114 uint8_t code_extension;
117 struct ATTRIBUTE_PACKED {
118 unsigned char unknown4 : 1;
119 unsigned char channel_assignment : 3;
120 unsigned char version : 2;
121 unsigned char mc_intro : 1;
122 unsigned char mode : 1;
124 struct ATTRIBUTE_PACKED {
125 unsigned char unknown5 : 4;
126 unsigned char dolby_encoded : 1;
127 unsigned char unknown6 : 3;
129 } ATTRIBUTE_PACKED app_info;
130} ATTRIBUTE_PACKED audio_attr_t;
131#define AUDIO_ATTR_SIZE 8U
139 unsigned char ach0_gme : 1;
142 unsigned char ach1_gme : 1;
145 unsigned char ach2_gv1e : 1;
146 unsigned char ach2_gv2e : 1;
147 unsigned char ach2_gm1e : 1;
148 unsigned char ach2_gm2e : 1;
151 unsigned char ach3_gv1e : 1;
152 unsigned char ach3_gv2e : 1;
153 unsigned char ach3_gmAe : 1;
154 unsigned char ach3_se2e : 1;
156 unsigned char zero5 : 4;
157 unsigned char ach4_gv1e : 1;
158 unsigned char ach4_gv2e : 1;
159 unsigned char ach4_gmBe : 1;
160 unsigned char ach4_seBe : 1;
162} ATTRIBUTE_PACKED multichannel_ext_t;
163#define MULTICHANNEL_EXT_SIZE 24U
180 unsigned char code_mode : 3;
181 unsigned char zero1 : 3;
182 unsigned char type : 2;
185 uint8_t lang_extension;
186 uint8_t code_extension;
187} ATTRIBUTE_PACKED subp_attr_t;
188#define SUBP_ATTR_SIZE 6U
203} ATTRIBUTE_PACKED pgc_command_tbl_t;
204#define PGC_COMMAND_TBL_SIZE 8U
209typedef uint8_t pgc_program_map_t;
215 unsigned char block_mode : 2;
216 unsigned char block_type : 2;
217 unsigned char seamless_play : 1;
218 unsigned char interleaved : 1;
219 unsigned char stc_discontinuity: 1;
220 unsigned char seamless_angle : 1;
221 unsigned char zero_1 : 1;
224 unsigned char cell_type : 5;
227 dvd_time_t playback_time;
228 uint32_t first_sector;
229 uint32_t first_ilvu_end_sector;
230 uint32_t last_vobu_start_sector;
231 uint32_t last_sector;
232} ATTRIBUTE_PACKED cell_playback_t;
233#define CELL_PLAYBACK_SIZE 24U
235#define BLOCK_TYPE_NONE 0x0
236#define BLOCK_TYPE_ANGLE_BLOCK 0x1
238#define BLOCK_MODE_NOT_IN_BLOCK 0x0
239#define BLOCK_MODE_FIRST_CELL 0x1
240#define BLOCK_MODE_IN_BLOCK 0x2
241#define BLOCK_MODE_LAST_CELL 0x3
250} ATTRIBUTE_PACKED cell_position_t;
251#define CELL_POSITION_SIZE 4U
257 unsigned char zero : 7;
258 unsigned char video_pres_mode_change : 1;
260 unsigned char karaoke_audio_pres_mode_change : 1;
261 unsigned char angle_change : 1;
262 unsigned char subpic_stream_change : 1;
263 unsigned char audio_stream_change : 1;
264 unsigned char pause_on : 1;
265 unsigned char still_off : 1;
266 unsigned char button_select_or_activate : 1;
267 unsigned char resume : 1;
269 unsigned char chapter_menu_call : 1;
270 unsigned char angle_menu_call : 1;
271 unsigned char audio_menu_call : 1;
272 unsigned char subpic_menu_call : 1;
273 unsigned char root_menu_call : 1;
274 unsigned char title_menu_call : 1;
275 unsigned char backward_scan : 1;
276 unsigned char forward_scan : 1;
278 unsigned char next_pg_search : 1;
279 unsigned char prev_or_top_pg_search : 1;
280 unsigned char time_or_chapter_search : 1;
281 unsigned char go_up : 1;
282 unsigned char stop : 1;
283 unsigned char title_play : 1;
284 unsigned char chapter_search_or_play : 1;
285 unsigned char title_or_time_play : 1;
286} ATTRIBUTE_PACKED user_ops_t;
287#define USER_OPS_SIZE 4U
294 uint8_t nr_of_programs;
296 dvd_time_t playback_time;
297 user_ops_t prohibited_ops;
298 uint16_t audio_control[8];
299 uint32_t subp_control[32];
300 uint16_t next_pgc_nr;
301 uint16_t prev_pgc_nr;
302 uint16_t goup_pgc_nr;
303 uint8_t pg_playback_mode;
305 uint32_t palette[16];
306 uint16_t command_tbl_offset;
307 uint16_t program_map_offset;
308 uint16_t cell_playback_offset;
309 uint16_t cell_position_offset;
310 pgc_command_tbl_t *command_tbl;
311 pgc_program_map_t *program_map;
312 cell_playback_t *cell_playback;
313 cell_position_t *cell_position;
315} ATTRIBUTE_PACKED pgc_t;
323 unsigned char block_mode : 2;
324 unsigned char block_type : 2;
325 unsigned char zero_1 : 4;
326 uint16_t ptl_id_mask;
327 uint32_t pgc_start_byte;
329} ATTRIBUTE_PACKED pgci_srp_t;
330#define PGCI_SRP_SIZE 8U
336 uint16_t nr_of_pgci_srp;
339 pgci_srp_t *pgci_srp;
341} ATTRIBUTE_PACKED pgcit_t;
349 uint8_t lang_extension;
351 uint32_t lang_start_byte;
353} ATTRIBUTE_PACKED pgci_lu_t;
354#define PGCI_LU_SIZE 8U
364} ATTRIBUTE_PACKED pgci_ut_t;
365#define PGCI_UT_SIZE 8U
374 uint32_t start_sector;
375 uint32_t last_sector;
376} ATTRIBUTE_PACKED cell_adr_t;
377#define CELL_ADDR_SIZE 12U
386 cell_adr_t *cell_adr_table;
387} ATTRIBUTE_PACKED c_adt_t;
395 uint32_t *vobu_start_sectors;
396} ATTRIBUTE_PACKED vobu_admap_t;
397#define VOBU_ADMAP_SIZE 4U
412 char vmg_identifier[12];
413 uint32_t vmg_last_sector;
415 uint32_t vmgi_last_sector;
417 uint8_t specification_version;
418 uint32_t vmg_category;
419 uint16_t vmg_nr_of_volumes;
420 uint16_t vmg_this_volume_nr;
423 uint16_t vmg_nr_of_title_sets;
424 char provider_identifier[32];
425 uint64_t vmg_pos_code;
427 uint32_t vmgi_last_byte;
428 uint32_t first_play_pgc;
432 uint32_t vmgm_pgci_ut;
437 uint32_t vmgm_vobu_admap;
440 video_attr_t vmgm_video_attr;
442 uint8_t nr_of_vmgm_audio_streams;
443 audio_attr_t vmgm_audio_attr;
444 audio_attr_t zero_8[7];
446 uint8_t nr_of_vmgm_subp_streams;
447 subp_attr_t vmgm_subp_attr;
448 subp_attr_t zero_10[27];
449} ATTRIBUTE_PACKED vmgi_mat_t;
450#define VMGI_MAT_SIZE 510U
492} ATTRIBUTE_PACKED downmix_coeff_t;
493#define DOWNMIX_COEFF_SIZE 16U
510 uint32_t timestamp_pts;
511 uint32_t chapter_len;
515 uint8_t sampling_rate;
520 uint32_t start_sector_1;
521 uint32_t start_sector_2;
523} ATTRIBUTE_PACKED samg_chapter_t;
524#define SAMG_CHAPTER_SIZE 52U
527 char samg_identifier[12];
528 uint16_t nr_chapters;
529 uint16_t specification_version;
530 samg_chapter_t *samg_chapters;
531} ATTRIBUTE_PACKED samg_mat_t;
532#define SAMG_MAT_SIZE 16U
544 char amg_identifier[12];
545 uint32_t amg_start_sector;
547 uint32_t amgi_last_sector;
548 uint16_t specification_version;
550 uint16_t amg_nr_of_volumes;
551 uint16_t amg_this_volume_nr;
555 uint32_t audio_sv_ifo_relative_p;
558 uint8_t vmg_nr_of_title_sets;
559 uint8_t amg_nr_of_title_sets;
560 uint8_t unknown_2[32];
561 uint8_t unknown_3[8];
563 uint32_t amg_end_byte_address;
564 uint8_t unknown_4[4];
566 uint16_t menu_prescence_1;
567 uint8_t unknown_5[4];
570 uint16_t amg_nr_of_zones;
572 uint16_t menu_prescence_2;
574 uint8_t last_sector_audio_sys_space;
576 uint8_t menu_prescence_3;
578} ATTRIBUTE_PACKED amgi_mat_t;
579#define AMGI_MAT_SIZE 337U
585 uint8_t type_and_rank;
586 uint8_t nr_chapters_in_title;
587 uint8_t nr_visible_chapters_in_vts_title;
589 uint32_t len_audio_zone_pts;
591 uint8_t group_property;
592 uint8_t title_property;
593 uint32_t ts_pointer_relative_sector;
594} ATTRIBUTE_PACKED track_info_t;
595#define TRACK_INFO_SIZE 14U
598 uint16_t nr_of_titles;
599 uint16_t last_byte_in_table;
600 track_info_t *tracks_info;
601} ATTRIBUTE_PACKED tracks_info_table_t;
602#define TRACKS_INFO_TABLE_SIZE 4U
606 unsigned char zero_1 : 1;
607 unsigned char multi_or_random_pgc_title : 1;
608 unsigned char jlc_exists_in_cell_cmd : 1;
609 unsigned char jlc_exists_in_prepost_cmd : 1;
610 unsigned char jlc_exists_in_button_cmd : 1;
611 unsigned char jlc_exists_in_tt_dom : 1;
612 unsigned char chapter_search_or_play : 1;
613 unsigned char title_or_time_play : 1;
614} ATTRIBUTE_PACKED playback_type_t;
615#define PLAYBACK_TYPE_SIZE 1U
621 playback_type_t pb_ty;
622 uint8_t nr_of_angles;
624 uint16_t parental_id;
625 uint8_t title_set_nr;
627 uint32_t title_set_sector;
628} ATTRIBUTE_PACKED title_info_t;
629#define TITLE_INFO_SIZE 12U
635 uint16_t nr_of_srpts;
639} ATTRIBUTE_PACKED tt_srpt_t;
640#define TT_SRPT_SIZE 8U
647#define PTL_MAIT_NUM_LEVEL 8
648typedef uint16_t pf_level_t[PTL_MAIT_NUM_LEVEL];
654 uint16_t country_code;
656 uint16_t pf_ptl_mai_start_byte;
658 pf_level_t *pf_ptl_mai;
659} ATTRIBUTE_PACKED ptl_mait_country_t;
660#define PTL_MAIT_COUNTRY_SIZE 8U
666 uint16_t nr_of_countries;
669 ptl_mait_country_t *countries;
670} ATTRIBUTE_PACKED ptl_mait_t;
671#define PTL_MAIT_SIZE 8U
680 video_attr_t vtsm_vobs_attr;
682 uint8_t nr_of_vtsm_audio_streams;
683 audio_attr_t vtsm_audio_attr;
684 audio_attr_t zero_2[7];
687 uint8_t nr_of_vtsm_subp_streams;
688 subp_attr_t vtsm_subp_attr;
689 subp_attr_t zero_5[27];
693 video_attr_t vtstt_vobs_video_attr;
695 uint8_t nr_of_vtstt_audio_streams;
696 audio_attr_t vtstt_audio_attr[8];
699 uint8_t nr_of_vtstt_subp_streams;
700 subp_attr_t vtstt_subp_attr[32];
701} ATTRIBUTE_PACKED vts_attributes_t;
702#define VTS_ATTRIBUTES_SIZE 542U
703#define VTS_ATTRIBUTES_MIN_SIZE 356U
712 vts_attributes_t *vts;
713 uint32_t *vts_atrt_offsets;
714} ATTRIBUTE_PACKED vts_atrt_t;
715#define VTS_ATRT_SIZE 8U
722 uint16_t offsets[100];
727 uint8_t type_of_info;
737} ATTRIBUTE_PACKED txtdt_t;
738#define TXTDT_SIZE 204U
747 uint32_t txtdt_start_byte;
749} ATTRIBUTE_PACKED txtdt_lu_t;
750#define TXTDT_LU_SIZE 8U
758 uint16_t nr_of_language_units;
761} ATTRIBUTE_PACKED txtdt_mgi_t;
762#define TXTDT_MGI_SIZE 20U
775 char vts_identifier[12];
776 uint32_t vts_last_sector;
778 uint32_t vtsi_last_sector;
780 uint8_t specification_version;
781 uint32_t vts_category;
790 uint32_t vtsi_last_byte;
795 uint32_t vts_ptt_srpt;
797 uint32_t vtsm_pgci_ut;
800 uint32_t vtsm_vobu_admap;
802 uint32_t vts_vobu_admap;
805 video_attr_t vtsm_video_attr;
807 uint8_t nr_of_vtsm_audio_streams;
808 audio_attr_t vtsm_audio_attr;
809 audio_attr_t zero_15[7];
811 uint8_t nr_of_vtsm_subp_streams;
812 subp_attr_t vtsm_subp_attr;
813 subp_attr_t zero_17[27];
816 video_attr_t vts_video_attr;
818 uint8_t nr_of_vts_audio_streams;
819 audio_attr_t vts_audio_attr[8];
821 uint8_t nr_of_vts_subp_streams;
822 subp_attr_t vts_subp_attr[32];
824 multichannel_ext_t vts_mu_audio_attr[8];
826} ATTRIBUTE_PACKED vtsi_mat_t;
827#define VTSI_MAT_SIZE 984U
840 uint8_t sampling_frequency;
845} ATTRIBUTE_PACKED atsi_record_t;
846#define ATSI_RECORD_SIZE 16U
857#define ATSI_RECORD_MAX_SIZE 8
858#define DOWNMIX_COEFF_MAX_SIZE 16
861 char ats_identifier[12];
862 uint32_t ats_last_sector;
864 uint32_t atsi_last_sector;
865 uint16_t specification_version;
868 uint32_t atsi_last_byte;
872 uint32_t vts_ptt_srpt;
873 uint32_t ats_pgci_ut;
874 uint32_t vtsm_pgci_ut;
877 uint32_t vtsm_vobu_admap;
879 uint32_t vts_vobu_admap;
882 atsi_record_t atsi_record[ATSI_RECORD_MAX_SIZE];
883 downmix_coeff_t downmix_coefficients[DOWNMIX_COEFF_MAX_SIZE];
884} ATTRIBUTE_PACKED atsi_mat_t;
885#define ATSI_MAT_SIZE 640U
890 uint32_t offset_record_table;
891} ATTRIBUTE_PACKED atsi_title_index_t;
892#define ATSI_TITLE_INDEX_SIZE 8U
898 uint8_t track_number_in_title;
900 uint32_t first_pts_of_track;
902 uint32_t length_pts_of_track;
905} ATTRIBUTE_PACKED atsi_track_timestamp_t;
906#define ATSI_TRACK_TIMESTAMP_SIZE 20U
911 uint32_t start_sector;
913} ATTRIBUTE_PACKED atsi_track_pointer_t;
914#define ATSI_TRACK_POINTER_SIZE 12U
919 uint8_t nr_pointer_records;
924 uint16_t start_sector_pointers_table;
926 atsi_track_timestamp_t *atsi_track_timestamp_rows;
927 atsi_track_pointer_t *atsi_track_pointer_rows;
928} ATTRIBUTE_PACKED atsi_title_record_t;
929#define ATSI_TITLE_ROW_TABLE_SIZE 16U
934 uint32_t last_byte_address;
935 atsi_title_index_t *atsi_index_rows;
936 atsi_title_record_t *atsi_title_row_tables;
937} ATTRIBUTE_PACKED atsi_title_table_t;
938#define ATSI_TITLE_TABLE_SIZE 8U
946} ATTRIBUTE_PACKED ptt_info_t;
947#define PTT_INFO_SIZE 4U
955} ATTRIBUTE_PACKED ttu_t;
962 uint16_t nr_of_srpts;
966 uint32_t *ttu_offset;
967} ATTRIBUTE_PACKED vts_ptt_srpt_t;
968#define VTS_PTT_SRPT_SIZE 8U
975typedef uint32_t map_ent_t;
983 uint16_t nr_of_entries;
985} ATTRIBUTE_PACKED vts_tmap_t;
986#define VTS_TMAP_SIZE 4U
992 uint16_t nr_of_tmaps;
996 uint32_t *tmap_offset;
997} ATTRIBUTE_PACKED vts_tmapt_t;
998#define VTS_TMAPT_SIZE 8U
1028 vmgi_mat_t *vmgi_mat;
1030 pgc_t *first_play_pgc;
1031 ptl_mait_t *ptl_mait;
1032 vts_atrt_t *vts_atrt;
1033 txtdt_mgi_t *txtdt_mgi;
1037 c_adt_t *menu_c_adt;
1038 vobu_admap_t *menu_vobu_admap;
1041 vtsi_mat_t *vtsi_mat;
1042 vts_ptt_srpt_t *vts_ptt_srpt;
1044 vts_tmapt_t *vts_tmapt;
1046 vobu_admap_t *vts_vobu_admap;
1051 samg_mat_t *samg_mat;
1054 amgi_mat_t *amgi_mat;
1055 tracks_info_table_t *info_table_first_sector;
1056 tracks_info_table_t *info_table_second_sector;
1059 atsi_mat_t *atsi_mat;
1060 atsi_title_table_t *atsi_title_table;
1065 ifo_format_t ifo_format;
unsigned char zero1
Definition ifo_types.h:138
uint8_t still_time
Definition ifo_types.h:225
unsigned char zero3
Definition ifo_types.h:144
unsigned char zero4
Definition ifo_types.h:150
unsigned char zero2
Definition ifo_types.h:141
unsigned char restricted
Definition ifo_types.h:223
unsigned char playback_mode
Definition ifo_types.h:222
Definition ifo_types.h:1022