1 #ifndef IFO_TYPES_H_INCLUDED
2 #define IFO_TYPES_H_INCLUDED
5 * Copyright (C) 2000, 2001 Björn Englund <d4bjorn@dtek.chalmers.se>,
6 * Håkan Hjort <d95hjort@dtek.chalmers.se>
8 * Modified for use with MPlayer, changes contained in libdvdread_changes.diff.
9 * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 #include <dvdread/dvd_reader.h>
31 #undef ATTRIBUTE_PACKED
32 #undef PRAGMA_PACK_BEGIN
33 #undef PRAGMA_PACK_END
36 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
37 #define ATTRIBUTE_PACKED __attribute__ ((packed))
42 #if !defined(ATTRIBUTE_PACKED)
43 #define ATTRIBUTE_PACKED
55 * The following structures are used in both the VMGI and VTSI.
60 * DVD Time Information.
66 uint8_t frame_u
; /* The two high bits are the frame rate. */
67 } ATTRIBUTE_PACKED dvd_time_t
;
70 * Type to store per-command data.
74 } ATTRIBUTE_PACKED vm_cmd_t
;
75 #define COMMAND_DATA_SIZE 8
82 #ifdef WORDS_BIGENDIAN
83 unsigned int mpeg_version
: 2;
84 unsigned int video_format
: 2;
85 unsigned int display_aspect_ratio
: 2;
86 unsigned int permitted_df
: 2;
88 unsigned int line21_cc_1
: 1;
89 unsigned int line21_cc_2
: 1;
90 unsigned int unknown1
: 1;
91 unsigned int bit_rate
: 1;
93 unsigned int picture_size
: 2;
94 unsigned int letterboxed
: 1;
95 unsigned int film_mode
: 1;
97 unsigned int permitted_df
: 2;
98 unsigned int display_aspect_ratio
: 2;
99 unsigned int video_format
: 2;
100 unsigned int mpeg_version
: 2;
102 unsigned int film_mode
: 1;
103 unsigned int letterboxed
: 1;
104 unsigned int picture_size
: 2;
106 unsigned int bit_rate
: 1;
107 unsigned int unknown1
: 1;
108 unsigned int line21_cc_2
: 1;
109 unsigned int line21_cc_1
: 1;
111 } ATTRIBUTE_PACKED video_attr_t
;
117 #ifdef WORDS_BIGENDIAN
118 unsigned int audio_format
: 3;
119 unsigned int multichannel_extension
: 1;
120 unsigned int lang_type
: 2;
121 unsigned int application_mode
: 2;
123 unsigned int quantization
: 2;
124 unsigned int sample_frequency
: 2;
125 unsigned int unknown1
: 1;
126 unsigned int channels
: 3;
128 unsigned int application_mode
: 2;
129 unsigned int lang_type
: 2;
130 unsigned int multichannel_extension
: 1;
131 unsigned int audio_format
: 3;
133 unsigned int channels
: 3;
134 unsigned int unknown1
: 1;
135 unsigned int sample_frequency
: 2;
136 unsigned int quantization
: 2;
139 uint8_t lang_extension
;
140 uint8_t code_extension
;
143 struct ATTRIBUTE_PACKED
{
144 #ifdef WORDS_BIGENDIAN
145 unsigned int unknown4
: 1;
146 unsigned int channel_assignment
: 3;
147 unsigned int version
: 2;
148 unsigned int mc_intro
: 1; /* probably 0: true, 1:false */
149 unsigned int mode
: 1; /* Karaoke mode 0: solo 1: duet */
151 unsigned int mode
: 1;
152 unsigned int mc_intro
: 1;
153 unsigned int version
: 2;
154 unsigned int channel_assignment
: 3;
155 unsigned int unknown4
: 1;
158 struct ATTRIBUTE_PACKED
{
159 #ifdef WORDS_BIGENDIAN
160 unsigned int unknown5
: 4;
161 unsigned int dolby_encoded
: 1; /* suitable for surround decoding */
162 unsigned int unknown6
: 3;
164 unsigned int unknown6
: 3;
165 unsigned int dolby_encoded
: 1;
166 unsigned int unknown5
: 4;
170 } ATTRIBUTE_PACKED audio_attr_t
;
174 * MultiChannel Extension
177 #ifdef WORDS_BIGENDIAN
178 unsigned int zero1
: 7;
179 unsigned int ach0_gme
: 1;
181 unsigned int zero2
: 7;
182 unsigned int ach1_gme
: 1;
184 unsigned int zero3
: 4;
185 unsigned int ach2_gv1e
: 1;
186 unsigned int ach2_gv2e
: 1;
187 unsigned int ach2_gm1e
: 1;
188 unsigned int ach2_gm2e
: 1;
190 unsigned int zero4
: 4;
191 unsigned int ach3_gv1e
: 1;
192 unsigned int ach3_gv2e
: 1;
193 unsigned int ach3_gmAe
: 1;
194 unsigned int ach3_se2e
: 1;
196 unsigned int zero5
: 4;
197 unsigned int ach4_gv1e
: 1;
198 unsigned int ach4_gv2e
: 1;
199 unsigned int ach4_gmBe
: 1;
200 unsigned int ach4_seBe
: 1;
202 unsigned int ach0_gme
: 1;
203 unsigned int zero1
: 7;
205 unsigned int ach1_gme
: 1;
206 unsigned int zero2
: 7;
208 unsigned int ach2_gm2e
: 1;
209 unsigned int ach2_gm1e
: 1;
210 unsigned int ach2_gv2e
: 1;
211 unsigned int ach2_gv1e
: 1;
212 unsigned int zero3
: 4;
214 unsigned int ach3_se2e
: 1;
215 unsigned int ach3_gmAe
: 1;
216 unsigned int ach3_gv2e
: 1;
217 unsigned int ach3_gv1e
: 1;
218 unsigned int zero4
: 4;
220 unsigned int ach4_seBe
: 1;
221 unsigned int ach4_gmBe
: 1;
222 unsigned int ach4_gv2e
: 1;
223 unsigned int ach4_gv1e
: 1;
224 unsigned int zero5
: 4;
227 } ATTRIBUTE_PACKED multichannel_ext_t
;
231 * Subpicture Attributes.
235 * type: 0 not specified
238 * coding mode: 0 run length
241 * language: indicates language if type == 1
242 * lang extension: if type == 1 contains the lang extension
244 #ifdef WORDS_BIGENDIAN
245 unsigned int code_mode
: 3;
246 unsigned int zero1
: 3;
247 unsigned int type
: 2;
249 unsigned int type
: 2;
250 unsigned int zero1
: 3;
251 unsigned int code_mode
: 3;
255 uint8_t lang_extension
;
256 uint8_t code_extension
;
257 } ATTRIBUTE_PACKED subp_attr_t
;
272 } ATTRIBUTE_PACKED pgc_command_tbl_t
;
273 #define PGC_COMMAND_TBL_SIZE 8
278 typedef uint8_t pgc_program_map_t
;
281 * Cell Playback Information.
284 #ifdef WORDS_BIGENDIAN
285 unsigned int block_mode
: 2;
286 unsigned int block_type
: 2;
287 unsigned int seamless_play
: 1;
288 unsigned int interleaved
: 1;
289 unsigned int stc_discontinuity
: 1;
290 unsigned int seamless_angle
: 1;
292 unsigned int playback_mode
: 1; /**< When set, enter StillMode after each VOBU */
293 unsigned int restricted
: 1; /**< ?? drop out of fastforward? */
294 unsigned int unknown2
: 6;
296 unsigned int seamless_angle
: 1;
297 unsigned int stc_discontinuity
: 1;
298 unsigned int interleaved
: 1;
299 unsigned int seamless_play
: 1;
300 unsigned int block_type
: 2;
301 unsigned int block_mode
: 2;
303 unsigned int unknown2
: 6;
304 unsigned int restricted
: 1;
305 unsigned int playback_mode
: 1;
309 dvd_time_t playback_time
;
310 uint32_t first_sector
;
311 uint32_t first_ilvu_end_sector
;
312 uint32_t last_vobu_start_sector
;
313 uint32_t last_sector
;
314 } ATTRIBUTE_PACKED cell_playback_t
;
316 #define BLOCK_TYPE_NONE 0x0
317 #define BLOCK_TYPE_ANGLE_BLOCK 0x1
319 #define BLOCK_MODE_NOT_IN_BLOCK 0x0
320 #define BLOCK_MODE_FIRST_CELL 0x1
321 #define BLOCK_MODE_IN_BLOCK 0x2
322 #define BLOCK_MODE_LAST_CELL 0x3
325 * Cell Position Information.
331 } ATTRIBUTE_PACKED cell_position_t
;
337 #ifdef WORDS_BIGENDIAN
338 unsigned int zero
: 7; /* 25-31 */
339 unsigned int video_pres_mode_change
: 1; /* 24 */
341 unsigned int karaoke_audio_pres_mode_change
: 1; /* 23 */
342 unsigned int angle_change
: 1;
343 unsigned int subpic_stream_change
: 1;
344 unsigned int audio_stream_change
: 1;
345 unsigned int pause_on
: 1;
346 unsigned int still_off
: 1;
347 unsigned int button_select_or_activate
: 1;
348 unsigned int resume
: 1; /* 16 */
350 unsigned int chapter_menu_call
: 1; /* 15 */
351 unsigned int angle_menu_call
: 1;
352 unsigned int audio_menu_call
: 1;
353 unsigned int subpic_menu_call
: 1;
354 unsigned int root_menu_call
: 1;
355 unsigned int title_menu_call
: 1;
356 unsigned int backward_scan
: 1;
357 unsigned int forward_scan
: 1; /* 8 */
359 unsigned int next_pg_search
: 1; /* 7 */
360 unsigned int prev_or_top_pg_search
: 1;
361 unsigned int time_or_chapter_search
: 1;
362 unsigned int go_up
: 1;
363 unsigned int stop
: 1;
364 unsigned int title_play
: 1;
365 unsigned int chapter_search_or_play
: 1;
366 unsigned int title_or_time_play
: 1; /* 0 */
368 unsigned int video_pres_mode_change
: 1; /* 24 */
369 unsigned int zero
: 7; /* 25-31 */
371 unsigned int resume
: 1; /* 16 */
372 unsigned int button_select_or_activate
: 1;
373 unsigned int still_off
: 1;
374 unsigned int pause_on
: 1;
375 unsigned int audio_stream_change
: 1;
376 unsigned int subpic_stream_change
: 1;
377 unsigned int angle_change
: 1;
378 unsigned int karaoke_audio_pres_mode_change
: 1; /* 23 */
380 unsigned int forward_scan
: 1; /* 8 */
381 unsigned int backward_scan
: 1;
382 unsigned int title_menu_call
: 1;
383 unsigned int root_menu_call
: 1;
384 unsigned int subpic_menu_call
: 1;
385 unsigned int audio_menu_call
: 1;
386 unsigned int angle_menu_call
: 1;
387 unsigned int chapter_menu_call
: 1; /* 15 */
389 unsigned int title_or_time_play
: 1; /* 0 */
390 unsigned int chapter_search_or_play
: 1;
391 unsigned int title_play
: 1;
392 unsigned int stop
: 1;
393 unsigned int go_up
: 1;
394 unsigned int time_or_chapter_search
: 1;
395 unsigned int prev_or_top_pg_search
: 1;
396 unsigned int next_pg_search
: 1; /* 7 */
398 } ATTRIBUTE_PACKED user_ops_t
;
401 * Subpicture stream mapping for a subtitle
404 #ifdef WORDS_BIGENDIAN
405 unsigned int present
: 1;
406 unsigned int zero1
: 2;
407 unsigned int s_4p3
: 5; /* stream for 4:3 on any display */
409 unsigned int zero2
: 3;
410 unsigned int s_wide
: 5; /* stream for 16:9 on widescreen display */
412 unsigned int zero3
: 3;
413 unsigned int s_lbox
: 5; /* stream for 16:9 on letterboxed 4:3 display */
415 unsigned int zero4
: 3;
416 unsigned int s_panscan
: 5; /* stream for 16:9 with pan&scan data on 4:3 display */
418 unsigned int s_4p3
: 5; /* stream for 4:3 on any display */
419 unsigned int zero1
: 2;
420 unsigned int present
: 1;
422 unsigned int s_wide
: 5; /* stream for 16:9 on widescreen display */
423 unsigned int zero2
: 3;
425 unsigned int s_lbox
: 5; /* stream for 16:9 on letterboxed 4:3 display */
426 unsigned int zero3
: 3;
428 unsigned int s_panscan
: 5; /* stream for 16:9 with pan&scan data on 4:3 display */
429 unsigned int zero4
: 3;
431 } ATTRIBUTE_PACKED subp_mapping_t
;
434 * Audio stream mapping for a soundtrack
437 #ifdef WORDS_BIGENDIAN
438 unsigned int present
: 1;
439 unsigned int zero1
: 4;
440 unsigned int s_audio
: 3;
442 unsigned int s_audio
: 3;
443 unsigned int zero1
: 4;
444 unsigned int present
: 1;
447 } ATTRIBUTE_PACKED audio_mapping_t
;
450 * Program Chain Information.
454 uint8_t nr_of_programs
;
456 dvd_time_t playback_time
;
457 user_ops_t prohibited_ops
;
458 audio_mapping_t audio_control
[8];
459 subp_mapping_t subp_control
[32];
460 uint16_t next_pgc_nr
;
461 uint16_t prev_pgc_nr
;
462 uint16_t goup_pgc_nr
;
464 uint8_t pg_playback_mode
;
465 uint32_t palette
[16]; /* New type struct {zero_1, Y, Cr, Cb} ? */
466 uint16_t command_tbl_offset
;
467 uint16_t program_map_offset
;
468 uint16_t cell_playback_offset
;
469 uint16_t cell_position_offset
;
470 pgc_command_tbl_t
*command_tbl
;
471 pgc_program_map_t
*program_map
;
472 cell_playback_t
*cell_playback
;
473 cell_position_t
*cell_position
;
474 } ATTRIBUTE_PACKED pgc_t
;
478 * Program Chain Information Search Pointer.
482 #ifdef WORDS_BIGENDIAN
483 unsigned int block_mode
: 2;
484 unsigned int block_type
: 2;
485 unsigned int unknown1
: 4;
487 unsigned int unknown1
: 4;
488 unsigned int block_type
: 2;
489 unsigned int block_mode
: 2;
491 uint16_t ptl_id_mask
;
492 uint32_t pgc_start_byte
;
494 } ATTRIBUTE_PACKED pgci_srp_t
;
495 #define PGCI_SRP_SIZE 8
498 * Program Chain Information Table.
501 uint16_t nr_of_pgci_srp
;
504 pgci_srp_t
*pgci_srp
;
505 } ATTRIBUTE_PACKED pgcit_t
;
509 * Menu PGCI Language Unit.
513 uint8_t lang_extension
;
515 uint32_t lang_start_byte
;
517 } ATTRIBUTE_PACKED pgci_lu_t
;
518 #define PGCI_LU_SIZE 8
521 * Menu PGCI Unit Table.
528 } ATTRIBUTE_PACKED pgci_ut_t
;
529 #define PGCI_UT_SIZE 8
532 * Cell Address Information.
538 uint32_t start_sector
;
539 uint32_t last_sector
;
540 } ATTRIBUTE_PACKED cell_adr_t
;
543 * Cell Address Table.
546 uint16_t nr_of_vobs
; /* VOBs */
549 cell_adr_t
*cell_adr_table
; /* No explicit size given. */
550 } ATTRIBUTE_PACKED c_adt_t
;
558 uint32_t *vobu_start_sectors
;
559 } ATTRIBUTE_PACKED vobu_admap_t
;
560 #define VOBU_ADMAP_SIZE 4
568 * The following structures relate to the Video Manager.
572 * Video Manager Information Management Table.
575 char vmg_identifier
[12];
576 uint32_t vmg_last_sector
;
578 uint32_t vmgi_last_sector
;
580 uint8_t specification_version
;
581 uint32_t vmg_category
;
582 uint16_t vmg_nr_of_volumes
;
583 uint16_t vmg_this_volume_nr
;
586 uint16_t vmg_nr_of_title_sets
; /* Number of VTSs. */
587 char provider_identifier
[32];
588 uint64_t vmg_pos_code
;
590 uint32_t vmgi_last_byte
;
591 uint32_t first_play_pgc
;
593 uint32_t vmgm_vobs
; /* sector */
594 uint32_t tt_srpt
; /* sector */
595 uint32_t vmgm_pgci_ut
; /* sector */
596 uint32_t ptl_mait
; /* sector */
597 uint32_t vts_atrt
; /* sector */
598 uint32_t txtdt_mgi
; /* sector */
599 uint32_t vmgm_c_adt
; /* sector */
600 uint32_t vmgm_vobu_admap
; /* sector */
603 video_attr_t vmgm_video_attr
;
605 uint8_t nr_of_vmgm_audio_streams
; /* should be 0 or 1 */
606 audio_attr_t vmgm_audio_attr
;
607 audio_attr_t zero_8
[7];
609 uint8_t nr_of_vmgm_subp_streams
; /* should be 0 or 1 */
610 subp_attr_t vmgm_subp_attr
;
611 subp_attr_t zero_10
[27]; /* XXX: how much 'padding' here? */
612 } ATTRIBUTE_PACKED vmgi_mat_t
;
615 #ifdef WORDS_BIGENDIAN
616 unsigned int zero_1
: 1;
617 unsigned int multi_or_random_pgc_title
: 1; /* 0: one sequential pgc title */
618 unsigned int jlc_exists_in_cell_cmd
: 1;
619 unsigned int jlc_exists_in_prepost_cmd
: 1;
620 unsigned int jlc_exists_in_button_cmd
: 1;
621 unsigned int jlc_exists_in_tt_dom
: 1;
622 unsigned int chapter_search_or_play
: 1; /* UOP 1 */
623 unsigned int title_or_time_play
: 1; /* UOP 0 */
625 unsigned int title_or_time_play
: 1;
626 unsigned int chapter_search_or_play
: 1;
627 unsigned int jlc_exists_in_tt_dom
: 1;
628 unsigned int jlc_exists_in_button_cmd
: 1;
629 unsigned int jlc_exists_in_prepost_cmd
: 1;
630 unsigned int jlc_exists_in_cell_cmd
: 1;
631 unsigned int multi_or_random_pgc_title
: 1;
632 unsigned int zero_1
: 1;
634 } ATTRIBUTE_PACKED playback_type_t
;
640 playback_type_t pb_ty
;
641 uint8_t nr_of_angles
;
643 uint16_t parental_id
;
644 uint8_t title_set_nr
;
646 uint32_t title_set_sector
;
647 } ATTRIBUTE_PACKED title_info_t
;
650 * PartOfTitle Search Pointer Table.
653 uint16_t nr_of_srpts
;
657 } ATTRIBUTE_PACKED tt_srpt_t
;
658 #define TT_SRPT_SIZE 8
662 * Parental Management Information Unit Table.
663 * Level 1 (US: G), ..., 7 (US: NC-17), 8
665 typedef uint16_t pf_level_t
[8];
668 * Parental Management Information Unit Table.
671 uint16_t country_code
;
673 uint16_t pf_ptl_mai_start_byte
;
675 pf_level_t
*pf_ptl_mai
; /* table of (nr_of_vtss + 1), video_ts is first */
676 } ATTRIBUTE_PACKED ptl_mait_country_t
;
677 #define PTL_MAIT_COUNTRY_SIZE 8
680 * Parental Management Information Table.
683 uint16_t nr_of_countries
;
686 ptl_mait_country_t
*countries
;
687 } ATTRIBUTE_PACKED ptl_mait_t
;
688 #define PTL_MAIT_SIZE 8
691 * Video Title Set Attributes.
697 video_attr_t vtsm_vobs_attr
;
699 uint8_t nr_of_vtsm_audio_streams
; /* should be 0 or 1 */
700 audio_attr_t vtsm_audio_attr
;
701 audio_attr_t zero_2
[7];
704 uint8_t nr_of_vtsm_subp_streams
; /* should be 0 or 1 */
705 subp_attr_t vtsm_subp_attr
;
706 subp_attr_t zero_5
[27];
710 video_attr_t vtstt_vobs_video_attr
;
712 uint8_t nr_of_vtstt_audio_streams
;
713 audio_attr_t vtstt_audio_attr
[8];
716 uint8_t nr_of_vtstt_subp_streams
;
717 subp_attr_t vtstt_subp_attr
[32];
718 } ATTRIBUTE_PACKED vts_attributes_t
;
719 #define VTS_ATTRIBUTES_SIZE 542
720 #define VTS_ATTRIBUTES_MIN_SIZE 356
723 * Video Title Set Attribute Table.
729 vts_attributes_t
*vts
;
730 uint32_t *vts_atrt_offsets
; /* offsets table for each vts_attributes */
731 } ATTRIBUTE_PACKED vts_atrt_t
;
732 #define VTS_ATRT_SIZE 8
735 * Text Data. (Incomplete)
738 uint32_t last_byte
; /* offsets are relative here */
739 uint16_t offsets
[100]; /* == nr_of_srpts + 1 (first is disc title) */
741 uint16_t unknown
; /* 0x48 ?? 0x48 words (16bit) info following */
744 uint8_t type_of_info
; /* ?? 01 == disc, 02 == Title, 04 == Title part */
748 uint8_t unknown4
; /* ?? allways 0x30 language?, text format? */
750 uint16_t offset
; /* from first */
752 char text
[12]; /* ended by 0x09 */
754 } ATTRIBUTE_PACKED txtdt_t
;
757 * Text Data Language Unit. (Incomplete)
761 uint16_t unknown
; /* 0x0001, title 1? disc 1? side 1? */
762 uint32_t txtdt_start_byte
; /* prt, rel start of vmg_txtdt_mgi */
764 } ATTRIBUTE_PACKED txtdt_lu_t
;
765 #define TXTDT_LU_SIZE 8
768 * Text Data Manager Information. (Incomplete)
771 char disc_name
[14]; /* how many bytes?? */
772 uint16_t nr_of_language_units
; /* 32bit?? */
775 } ATTRIBUTE_PACKED txtdt_mgi_t
;
776 #define TXTDT_MGI_SIZE 20
782 * Structures relating to the Video Title Set (VTS).
786 * Video Title Set Information Management Table.
789 char vts_identifier
[12];
790 uint32_t vts_last_sector
;
792 uint32_t vtsi_last_sector
;
794 uint8_t specification_version
;
795 uint32_t vts_category
;
804 uint32_t vtsi_last_byte
;
807 uint32_t vtsm_vobs
; /* sector */
808 uint32_t vtstt_vobs
; /* sector */
809 uint32_t vts_ptt_srpt
; /* sector */
810 uint32_t vts_pgcit
; /* sector */
811 uint32_t vtsm_pgci_ut
; /* sector */
812 uint32_t vts_tmapt
; /* sector */
813 uint32_t vtsm_c_adt
; /* sector */
814 uint32_t vtsm_vobu_admap
; /* sector */
815 uint32_t vts_c_adt
; /* sector */
816 uint32_t vts_vobu_admap
; /* sector */
819 video_attr_t vtsm_video_attr
;
821 uint8_t nr_of_vtsm_audio_streams
; /* should be 0 or 1 */
822 audio_attr_t vtsm_audio_attr
;
823 audio_attr_t zero_15
[7];
825 uint8_t nr_of_vtsm_subp_streams
; /* should be 0 or 1 */
826 subp_attr_t vtsm_subp_attr
;
827 subp_attr_t zero_17
[27];
830 video_attr_t vts_video_attr
;
832 uint8_t nr_of_vts_audio_streams
;
833 audio_attr_t vts_audio_attr
[8];
835 uint8_t nr_of_vts_subp_streams
;
836 subp_attr_t vts_subp_attr
[32];
838 multichannel_ext_t vts_mu_audio_attr
[8];
839 /* XXX: how much 'padding' here, if any? */
840 } ATTRIBUTE_PACKED vtsi_mat_t
;
843 * PartOfTitle Unit Information.
848 } ATTRIBUTE_PACKED ptt_info_t
;
851 * PartOfTitle Information.
856 } ATTRIBUTE_PACKED ttu_t
;
859 * PartOfTitle Search Pointer Table.
862 uint16_t nr_of_srpts
;
866 uint32_t *ttu_offset
; /* offset table for each ttu */
867 } ATTRIBUTE_PACKED vts_ptt_srpt_t
;
868 #define VTS_PTT_SRPT_SIZE 8
874 /* Should this be bit field at all or just the uint32_t? */
875 typedef uint32_t map_ent_t
;
881 uint8_t tmu
; /* Time unit, in seconds */
883 uint16_t nr_of_entries
;
885 } ATTRIBUTE_PACKED vts_tmap_t
;
886 #define VTS_TMAP_SIZE 4
892 uint16_t nr_of_tmaps
;
896 uint32_t *tmap_offset
; /* offset table for each tmap */
897 } ATTRIBUTE_PACKED vts_tmapt_t
;
898 #define VTS_TMAPT_SIZE 8
907 * The following structure defines an IFO file. The structure is divided into
908 * two parts, the VMGI, or Video Manager Information, which is read from the
909 * VIDEO_TS.[IFO,BUP] file, and the VTSI, or Video Title Set Information, which
910 * is read in from the VTS_XX_0.[IFO,BUP] files.
916 vmgi_mat_t
*vmgi_mat
;
918 pgc_t
*first_play_pgc
;
919 ptl_mait_t
*ptl_mait
;
920 vts_atrt_t
*vts_atrt
;
921 txtdt_mgi_t
*txtdt_mgi
;
926 vobu_admap_t
*menu_vobu_admap
;
929 vtsi_mat_t
*vtsi_mat
;
930 vts_ptt_srpt_t
*vts_ptt_srpt
;
932 vts_tmapt_t
*vts_tmapt
;
934 vobu_admap_t
*vts_vobu_admap
;
937 #endif /* IFO_TYPES_H_INCLUDED */