annotate ifo_read.c @ 64:70c34d162e6e src

Replaces the hard-coded values The parental management structure has ratings levels. The size of the bit mask is constant but magic values were being used instead of named constants. This commit changes them to named constants. This is based on a patch submitted by Frederic Marchal, fmarchal at perso dot be. Thanks for this tidy cleanup.
author erik
date Sun, 30 Jan 2011 23:44:13 +0000
parents 46c05a214511
children fb0ccb03eb7d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1 /*
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2 * Copyright (C) 2000, 2001, 2002, 2003
22
447c5319a522 Convert all ISO8859-1 sequences to proper UTF-8.
diego
parents: 21
diff changeset
3 * Björn Englund <d4bjorn@dtek.chalmers.se>,
447c5319a522 Convert all ISO8859-1 sequences to proper UTF-8.
diego
parents: 21
diff changeset
4 * Håkan Hjort <d95hjort@dtek.chalmers.se>
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
5 *
21
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
6 * This file is part of libdvdread.
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
7 *
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
8 * libdvdread is free software; you can redistribute it and/or modify
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
11 * (at your option) any later version.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
12 *
21
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
13 * libdvdread is distributed in the hope that it will be useful,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
16 * GNU General Public License for more details.
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
17 *
21
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
18 * You should have received a copy of the GNU General Public License along
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
19 * with libdvdread; if not, write to the Free Software Foundation, Inc.,
4aa618ae094f Use consistent license headers everywhere: Fix FSF address and boilerplate.
diego
parents: 20
diff changeset
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
21 */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
22
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
23 #include "config.h"
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
24
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
25 #include <stdio.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
26 #include <stdlib.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
27 #include <inttypes.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
28 #include <string.h>
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
29
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
30 #include "bswap.h"
33
c743d79f187b Move installed headers into dvdread directory to make them easier to
reimar
parents: 27
diff changeset
31 #include "dvdread/ifo_types.h"
c743d79f187b Move installed headers into dvdread directory to make them easier to
reimar
parents: 27
diff changeset
32 #include "dvdread/ifo_read.h"
c743d79f187b Move installed headers into dvdread directory to make them easier to
reimar
parents: 27
diff changeset
33 #include "dvdread/dvd_reader.h"
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
34 #include "dvdread_internal.h"
33
c743d79f187b Move installed headers into dvdread directory to make them easier to
reimar
parents: 27
diff changeset
35 #include "dvdread/bitreader.h"
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
36
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
37 #ifndef DVD_BLOCK_LEN
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
38 #define DVD_BLOCK_LEN 2048
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
39 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
40
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
41 #ifndef NDEBUG
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
42 #define CHECK_ZERO0(arg) \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
43 if(arg != 0) { \
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
44 fprintf(stderr, "*** Zero check failed in %s:%i\n for %s = 0x%x\n", \
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
45 __FILE__, __LINE__, # arg, arg); \
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
46 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
47 #define CHECK_ZERO(arg) \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
48 if(memcmp(my_friendly_zeros, &arg, sizeof(arg))) { \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
49 unsigned int i_CZ; \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
50 fprintf(stderr, "*** Zero check failed in %s:%i\n for %s = 0x", \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
51 __FILE__, __LINE__, # arg ); \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
52 for(i_CZ = 0; i_CZ < sizeof(arg); i_CZ++) \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
53 fprintf(stderr, "%02x", *((uint8_t *)&arg + i_CZ)); \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
54 fprintf(stderr, "\n"); \
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
55 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
56 static const uint8_t my_friendly_zeros[2048];
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
57 #else
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
58 #define CHECK_ZERO0(arg) (void)(arg)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
59 #define CHECK_ZERO(arg) (void)(arg)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
60 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
61
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
62
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
63 /* Prototypes for internal functions */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
64 static int ifoRead_VMG(ifo_handle_t *ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
65 static int ifoRead_VTS(ifo_handle_t *ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
66 static int ifoRead_PGC(ifo_handle_t *ifofile, pgc_t *pgc, unsigned int offset);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
67 static int ifoRead_PGC_COMMAND_TBL(ifo_handle_t *ifofile,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
68 pgc_command_tbl_t *cmd_tbl,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
69 unsigned int offset);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
70 static int ifoRead_PGC_PROGRAM_MAP(ifo_handle_t *ifofile,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
71 pgc_program_map_t *program_map,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
72 unsigned int nr, unsigned int offset);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
73 static int ifoRead_CELL_PLAYBACK_TBL(ifo_handle_t *ifofile,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
74 cell_playback_t *cell_playback,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
75 unsigned int nr, unsigned int offset);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
76 static int ifoRead_CELL_POSITION_TBL(ifo_handle_t *ifofile,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
77 cell_position_t *cell_position,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
78 unsigned int nr, unsigned int offset);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
79 static int ifoRead_VTS_ATTRIBUTES(ifo_handle_t *ifofile,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
80 vts_attributes_t *vts_attributes,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
81 unsigned int offset);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
82 static int ifoRead_C_ADT_internal(ifo_handle_t *ifofile, c_adt_t *c_adt,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
83 unsigned int sector);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
84 static int ifoRead_VOBU_ADMAP_internal(ifo_handle_t *ifofile,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
85 vobu_admap_t *vobu_admap,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
86 unsigned int sector);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
87 static int ifoRead_PGCIT_internal(ifo_handle_t *ifofile, pgcit_t *pgcit,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
88 unsigned int offset);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
89
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
90 static void ifoFree_PGC(pgc_t *pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
91 static void ifoFree_PGC_COMMAND_TBL(pgc_command_tbl_t *cmd_tbl);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
92 static void ifoFree_PGCIT_internal(pgcit_t *pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
93
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
94 static inline int DVDFileSeekForce_( dvd_file_t *dvd_file, uint32_t offset, int force_size ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
95 return (DVDFileSeekForce(dvd_file, (int)offset, force_size) == (int)offset);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
96 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
97
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
98 static inline int DVDFileSeek_( dvd_file_t *dvd_file, uint32_t offset ) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
99 return (DVDFileSeek(dvd_file, (int)offset) == (int)offset);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
100 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
101
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
102 static void read_video_attr(video_attr_t *va) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
103 getbits_state_t state;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
104 uint8_t buf[sizeof(video_attr_t)];
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
105
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
106 memcpy(buf, va, sizeof(video_attr_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
107 if (!dvdread_getbits_init(&state, buf)) abort();
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
108 va->mpeg_version = dvdread_getbits(&state, 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
109 va->video_format = dvdread_getbits(&state, 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
110 va->display_aspect_ratio = dvdread_getbits(&state, 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
111 va->permitted_df = dvdread_getbits(&state, 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
112 va->line21_cc_1 = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
113 va->line21_cc_2 = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
114 va->unknown1 = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
115 va->bit_rate = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
116 va->picture_size = dvdread_getbits(&state, 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
117 va->letterboxed = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
118 va->film_mode = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
119 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
120
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
121 static void read_audio_attr(audio_attr_t *aa) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
122 getbits_state_t state;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
123 uint8_t buf[sizeof(audio_attr_t)];
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
124
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
125 memcpy(buf, aa, sizeof(audio_attr_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
126 if (!dvdread_getbits_init(&state, buf)) abort();
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
127 aa->audio_format = dvdread_getbits(&state, 3);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
128 aa->multichannel_extension = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
129 aa->lang_type = dvdread_getbits(&state, 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
130 aa->application_mode = dvdread_getbits(&state, 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
131 aa->quantization = dvdread_getbits(&state, 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
132 aa->sample_frequency = dvdread_getbits(&state, 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
133 aa->unknown1 = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
134 aa->channels = dvdread_getbits(&state, 3);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
135 aa->lang_code = dvdread_getbits(&state, 16);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
136 aa->lang_extension = dvdread_getbits(&state, 8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
137 aa->code_extension = dvdread_getbits(&state, 8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
138 aa->unknown3 = dvdread_getbits(&state, 8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
139 aa->app_info.karaoke.unknown4 = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
140 aa->app_info.karaoke.channel_assignment = dvdread_getbits(&state, 3);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
141 aa->app_info.karaoke.version = dvdread_getbits(&state, 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
142 aa->app_info.karaoke.mc_intro = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
143 aa->app_info.karaoke.mode = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
144 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
145
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
146 static void read_multichannel_ext(multichannel_ext_t *me) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
147 getbits_state_t state;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
148 uint8_t buf[sizeof(multichannel_ext_t)];
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
149
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
150 memcpy(buf, me, sizeof(multichannel_ext_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
151 if (!dvdread_getbits_init(&state, buf)) abort();
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
152 me->zero1 = dvdread_getbits(&state, 7);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
153 me->ach0_gme = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
154 me->zero2 = dvdread_getbits(&state, 7);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
155 me->ach1_gme = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
156 me->zero3 = dvdread_getbits(&state, 4);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
157 me->ach2_gv1e = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
158 me->ach2_gv2e = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
159 me->ach2_gm1e = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
160 me->ach2_gm2e = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
161 me->zero4 = dvdread_getbits(&state, 4);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
162 me->ach3_gv1e = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
163 me->ach3_gv2e = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
164 me->ach3_gmAe = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
165 me->ach3_se2e = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
166 me->zero5 = dvdread_getbits(&state, 4);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
167 me->ach4_gv1e = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
168 me->ach4_gv2e = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
169 me->ach4_gmBe = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
170 me->ach4_seBe = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
171 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
172
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
173 static void read_subp_attr(subp_attr_t *sa) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
174 getbits_state_t state;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
175 uint8_t buf[sizeof(subp_attr_t)];
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
176
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
177 memcpy(buf, sa, sizeof(subp_attr_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
178 if (!dvdread_getbits_init(&state, buf)) abort();
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
179 sa->code_mode = dvdread_getbits(&state, 3);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
180 sa->zero1 = dvdread_getbits(&state, 3);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
181 sa->type = dvdread_getbits(&state, 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
182 sa->zero2 = dvdread_getbits(&state, 8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
183 sa->lang_code = dvdread_getbits(&state, 16);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
184 sa->lang_extension = dvdread_getbits(&state, 8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
185 sa->code_extension = dvdread_getbits(&state, 8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
186 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
187
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
188 static void read_user_ops(user_ops_t *uo) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
189 getbits_state_t state;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
190 uint8_t buf[sizeof(user_ops_t)];
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
191
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
192 memcpy(buf, uo, sizeof(user_ops_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
193 if (!dvdread_getbits_init(&state, buf)) abort();
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
194 uo->zero = dvdread_getbits(&state, 7);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
195 uo->video_pres_mode_change = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
196 uo->karaoke_audio_pres_mode_change = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
197 uo->angle_change = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
198 uo->subpic_stream_change = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
199 uo->audio_stream_change = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
200 uo->pause_on = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
201 uo->still_off = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
202 uo->button_select_or_activate = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
203 uo->resume = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
204 uo->chapter_menu_call = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
205 uo->angle_menu_call = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
206 uo->audio_menu_call = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
207 uo->subpic_menu_call = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
208 uo->root_menu_call = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
209 uo->title_menu_call = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
210 uo->backward_scan = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
211 uo->forward_scan = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
212 uo->next_pg_search = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
213 uo->prev_or_top_pg_search = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
214 uo->time_or_chapter_search = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
215 uo->go_up = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
216 uo->stop = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
217 uo->title_play = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
218 uo->chapter_search_or_play = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
219 uo->title_or_time_play = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
220 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
221
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
222 static void read_pgci_srp(pgci_srp_t *ps) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
223 getbits_state_t state;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
224 uint8_t buf[sizeof(pgci_srp_t)];
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
225
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
226 memcpy(buf, ps, sizeof(pgci_srp_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
227 if (!dvdread_getbits_init(&state, buf)) abort();
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
228 ps->entry_id = dvdread_getbits(&state, 8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
229 ps->block_mode = dvdread_getbits(&state, 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
230 ps->block_type = dvdread_getbits(&state, 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
231 ps->unknown1 = dvdread_getbits(&state, 4);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
232 ps->ptl_id_mask = dvdread_getbits(&state, 16);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
233 ps->pgc_start_byte = dvdread_getbits(&state, 32);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
234 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
235
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
236 static void read_cell_playback(cell_playback_t *cp) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
237 getbits_state_t state;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
238 uint8_t buf[sizeof(cell_playback_t)];
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
239
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
240 memcpy(buf, cp, sizeof(cell_playback_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
241 if (!dvdread_getbits_init(&state, buf)) abort();
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
242 cp->block_mode = dvdread_getbits(&state, 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
243 cp->block_type = dvdread_getbits(&state, 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
244 cp->seamless_play = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
245 cp->interleaved = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
246 cp->stc_discontinuity = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
247 cp->seamless_angle = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
248 cp->playback_mode = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
249 cp->restricted = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
250 cp->unknown2 = dvdread_getbits(&state, 6);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
251 cp->still_time = dvdread_getbits(&state, 8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
252 cp->cell_cmd_nr = dvdread_getbits(&state, 8);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
253
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
254 cp->playback_time.hour = dvdread_getbits(&state, 8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
255 cp->playback_time.minute = dvdread_getbits(&state, 8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
256 cp->playback_time.second = dvdread_getbits(&state, 8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
257 cp->playback_time.frame_u = dvdread_getbits(&state, 8);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
258
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
259 cp->first_sector = dvdread_getbits(&state, 32);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
260 cp->first_ilvu_end_sector = dvdread_getbits(&state, 32);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
261 cp->last_vobu_start_sector = dvdread_getbits(&state, 32);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
262 cp->last_sector = dvdread_getbits(&state, 32);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
263 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
264
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
265 static void read_playback_type(playback_type_t *pt) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
266 getbits_state_t state;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
267 uint8_t buf[sizeof(playback_type_t)];
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
268
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
269 memcpy(buf, pt, sizeof(playback_type_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
270 if (!dvdread_getbits_init(&state, buf)) abort();
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
271 pt->zero_1 = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
272 pt->multi_or_random_pgc_title = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
273 pt->jlc_exists_in_cell_cmd = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
274 pt->jlc_exists_in_prepost_cmd = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
275 pt->jlc_exists_in_button_cmd = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
276 pt->jlc_exists_in_tt_dom = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
277 pt->chapter_search_or_play = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
278 pt->title_or_time_play = dvdread_getbits(&state, 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
279 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
280
12
056f5573a7dc moved various pieces of duplicated code to free_ptl_mait(); patch by Erik Hovland org
nicodvb
parents: 3
diff changeset
281 static void free_ptl_mait(ptl_mait_t* ptl_mait, int num_entries) {
056f5573a7dc moved various pieces of duplicated code to free_ptl_mait(); patch by Erik Hovland org
nicodvb
parents: 3
diff changeset
282 int i;
056f5573a7dc moved various pieces of duplicated code to free_ptl_mait(); patch by Erik Hovland org
nicodvb
parents: 3
diff changeset
283 for (i = 0; i < num_entries; i++)
056f5573a7dc moved various pieces of duplicated code to free_ptl_mait(); patch by Erik Hovland org
nicodvb
parents: 3
diff changeset
284 free(ptl_mait->countries[i].pf_ptl_mai);
056f5573a7dc moved various pieces of duplicated code to free_ptl_mait(); patch by Erik Hovland org
nicodvb
parents: 3
diff changeset
285
056f5573a7dc moved various pieces of duplicated code to free_ptl_mait(); patch by Erik Hovland org
nicodvb
parents: 3
diff changeset
286 free(ptl_mait->countries);
056f5573a7dc moved various pieces of duplicated code to free_ptl_mait(); patch by Erik Hovland org
nicodvb
parents: 3
diff changeset
287 free(ptl_mait);
056f5573a7dc moved various pieces of duplicated code to free_ptl_mait(); patch by Erik Hovland org
nicodvb
parents: 3
diff changeset
288 }
056f5573a7dc moved various pieces of duplicated code to free_ptl_mait(); patch by Erik Hovland org
nicodvb
parents: 3
diff changeset
289
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
290 ifo_handle_t *ifoOpen(dvd_reader_t *dvd, int title) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
291 ifo_handle_t *ifofile;
59
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
292 int bup_file_opened = 0;
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
293 char ifo_filename[13];
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
294
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
295 ifofile = (ifo_handle_t *)malloc(sizeof(ifo_handle_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
296 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
297 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
298
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
299 memset(ifofile, 0, sizeof(ifo_handle_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
300
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
301 ifofile->file = DVDOpenFile(dvd, title, DVD_READ_INFO_FILE);
59
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
302 if(!ifofile->file) { /* Failed to open IFO, try to open BUP */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
303 ifofile->file = DVDOpenFile(dvd, title, DVD_READ_INFO_BACKUP_FILE);
59
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
304 bup_file_opened = 1;
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
305 }
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
306
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
307 if (title)
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
308 snprintf(ifo_filename, 12, "VTS_%02d_0.%s", title, bup_file_opened ? "BUP" : "IFO");
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
309 else
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
310 snprintf(ifo_filename, 12, "VIDEO_TS.%s", bup_file_opened ? "BUP" : "IFO");
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
311
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
312 ifo_filename[12] = '\0';
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
313
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
314 if(!ifofile->file) {
59
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
315 fprintf(stderr, "libdvdread: Can't open file %s.\n", ifo_filename);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
316 free(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
317 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
318 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
319
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
320 /* First check if this is a VMGI file. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
321 if(ifoRead_VMG(ifofile)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
322
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
323 /* These are both mandatory. */
59
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
324 if(!ifoRead_FP_PGC(ifofile) || !ifoRead_TT_SRPT(ifofile))
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
325 goto ifoOpen_try_bup;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
326
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
327 ifoRead_PGCI_UT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
328 ifoRead_PTL_MAIT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
329
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
330 /* This is also mandatory. */
59
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
331 if(!ifoRead_VTS_ATRT(ifofile))
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
332 goto ifoOpen_try_bup;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
333
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
334 ifoRead_TXTDT_MGI(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
335 ifoRead_C_ADT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
336 ifoRead_VOBU_ADMAP(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
337
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
338 return ifofile;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
339 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
340
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
341 if(ifoRead_VTS(ifofile)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
342
59
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
343 if(!ifoRead_VTS_PTT_SRPT(ifofile) || !ifoRead_PGCIT(ifofile))
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
344 goto ifoOpen_try_bup;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
345
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
346 ifoRead_PGCI_UT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
347 ifoRead_VTS_TMAPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
348 ifoRead_C_ADT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
349 ifoRead_VOBU_ADMAP(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
350
59
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
351 if(!ifoRead_TITLE_C_ADT(ifofile) || !ifoRead_TITLE_VOBU_ADMAP(ifofile))
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
352 goto ifoOpen_try_bup;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
353
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
354 return ifofile;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
355 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
356
59
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
357 ifoOpen_try_bup:
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
358 if (bup_file_opened)
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
359 goto ifoOpen_fail;
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
360
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
361 /* Try BUP instead */
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
362 ifoClose(ifofile);
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
363
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
364 ifofile = (ifo_handle_t *)malloc(sizeof(ifo_handle_t));
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
365 if(!ifofile)
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
366 return NULL;
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
367
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
368 memset(ifofile, 0, sizeof(ifo_handle_t));
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
369 ifofile->file = DVDOpenFile(dvd, title, DVD_READ_INFO_BACKUP_FILE);
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
370
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
371 if (title)
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
372 snprintf(ifo_filename, 12, "VTS_%02d_0.BUP", title);
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
373 else
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
374 strncpy(ifo_filename, "VIDEO_TS.BUP", 12);
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
375
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
376 if (!ifofile->file) {
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
377 fprintf(stderr, "libdvdread: Can't open file %s.\n", ifo_filename);
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
378 free(ifofile);
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
379 return NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
380 }
59
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
381 bup_file_opened = 1;
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
382
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
383 /* First check if this is a VMGI file. */
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
384 if(ifoRead_VMG(ifofile)) {
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
385
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
386 /* These are both mandatory. */
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
387 if(!ifoRead_FP_PGC(ifofile) || !ifoRead_TT_SRPT(ifofile))
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
388 goto ifoOpen_fail;
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
389
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
390 ifoRead_PGCI_UT(ifofile);
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
391 ifoRead_PTL_MAIT(ifofile);
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
392
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
393 /* This is also mandatory. */
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
394 if(!ifoRead_VTS_ATRT(ifofile))
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
395 goto ifoOpen_fail;
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
396
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
397 ifoRead_TXTDT_MGI(ifofile);
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
398 ifoRead_C_ADT(ifofile);
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
399 ifoRead_VOBU_ADMAP(ifofile);
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
400
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
401 return ifofile;
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
402 }
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
403
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
404 if(ifoRead_VTS(ifofile)) {
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
405
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
406 if(!ifoRead_VTS_PTT_SRPT(ifofile) || !ifoRead_PGCIT(ifofile))
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
407 goto ifoOpen_fail;
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
408
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
409 ifoRead_PGCI_UT(ifofile);
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
410 ifoRead_VTS_TMAPT(ifofile);
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
411 ifoRead_C_ADT(ifofile);
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
412 ifoRead_VOBU_ADMAP(ifofile);
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
413
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
414 if(!ifoRead_TITLE_C_ADT(ifofile) || !ifoRead_TITLE_VOBU_ADMAP(ifofile))
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
415 goto ifoOpen_fail;
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
416
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
417 return ifofile;
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
418 }
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
419
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
420 ifoOpen_fail:
bfefcc426154 Provide BUP file support for more issues.
erik
parents: 58
diff changeset
421 fprintf(stderr, "libdvdread: Invalid IFO for title %d (%s).\n", title, ifo_filename);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
422 ifoClose(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
423 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
424 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
425
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
426
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
427 ifo_handle_t *ifoOpenVMGI(dvd_reader_t *dvd) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
428 ifo_handle_t *ifofile;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
429
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
430 ifofile = (ifo_handle_t *)malloc(sizeof(ifo_handle_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
431 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
432 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
433
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
434 memset(ifofile, 0, sizeof(ifo_handle_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
435
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
436 ifofile->file = DVDOpenFile(dvd, 0, DVD_READ_INFO_FILE);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
437 if(!ifofile->file) /* Should really catch any error and try to fallback */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
438 ifofile->file = DVDOpenFile(dvd, 0, DVD_READ_INFO_BACKUP_FILE);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
439 if(!ifofile->file) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
440 fprintf(stderr, "libdvdread: Can't open file VIDEO_TS.IFO.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
441 free(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
442 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
443 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
444
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
445 if(ifoRead_VMG(ifofile))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
446 return ifofile;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
447
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
448 fprintf(stderr, "libdvdread,ifoOpenVMGI(): Invalid main menu IFO (VIDEO_TS.IFO).\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
449 ifoClose(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
450 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
451 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
452
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
453
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
454 ifo_handle_t *ifoOpenVTSI(dvd_reader_t *dvd, int title) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
455 ifo_handle_t *ifofile;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
456
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
457 ifofile = (ifo_handle_t *)malloc(sizeof(ifo_handle_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
458 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
459 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
460
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
461 memset(ifofile, 0, sizeof(ifo_handle_t));
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
462
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
463 if(title <= 0 || title > 99) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
464 fprintf(stderr, "libdvdread: ifoOpenVTSI invalid title (%d).\n", title);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
465 free(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
466 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
467 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
468
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
469 ifofile->file = DVDOpenFile(dvd, title, DVD_READ_INFO_FILE);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
470 if(!ifofile->file) /* Should really catch any error and try to fallback */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
471 ifofile->file = DVDOpenFile(dvd, title, DVD_READ_INFO_BACKUP_FILE);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
472 if(!ifofile->file) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
473 fprintf(stderr, "libdvdread: Can't open file VTS_%02d_0.IFO.\n", title);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
474 free(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
475 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
476 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
477
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
478 ifoRead_VTS(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
479 if(ifofile->vtsi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
480 return ifofile;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
481
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
482 fprintf(stderr, "libdvdread: Invalid IFO for title %d (VTS_%02d_0.IFO).\n",
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
483 title, title);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
484 ifoClose(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
485 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
486 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
487
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
488
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
489 void ifoClose(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
490 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
491 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
492
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
493 ifoFree_VOBU_ADMAP(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
494 ifoFree_TITLE_VOBU_ADMAP(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
495 ifoFree_C_ADT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
496 ifoFree_TITLE_C_ADT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
497 ifoFree_TXTDT_MGI(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
498 ifoFree_VTS_ATRT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
499 ifoFree_PTL_MAIT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
500 ifoFree_PGCI_UT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
501 ifoFree_TT_SRPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
502 ifoFree_FP_PGC(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
503 ifoFree_PGCIT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
504 ifoFree_VTS_PTT_SRPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
505 ifoFree_VTS_TMAPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
506
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
507 if(ifofile->vmgi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
508 free(ifofile->vmgi_mat);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
509
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
510 if(ifofile->vtsi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
511 free(ifofile->vtsi_mat);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
512
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
513 DVDCloseFile(ifofile->file);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
514 ifofile->file = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
515 free(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
516 ifofile = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
517 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
518
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
519
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
520 static int ifoRead_VMG(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
521 vmgi_mat_t *vmgi_mat;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
522
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
523 vmgi_mat = (vmgi_mat_t *)malloc(sizeof(vmgi_mat_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
524 if(!vmgi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
525 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
526
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
527 ifofile->vmgi_mat = vmgi_mat;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
528
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
529 if(!DVDFileSeek_(ifofile->file, 0)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
530 free(ifofile->vmgi_mat);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
531 ifofile->vmgi_mat = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
532 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
533 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
534
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
535 if(!DVDReadBytes(ifofile->file, vmgi_mat, sizeof(vmgi_mat_t))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
536 free(ifofile->vmgi_mat);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
537 ifofile->vmgi_mat = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
538 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
539 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
540
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
541 if(strncmp("DVDVIDEO-VMG", vmgi_mat->vmg_identifier, 12) != 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
542 free(ifofile->vmgi_mat);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
543 ifofile->vmgi_mat = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
544 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
545 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
546
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
547 B2N_32(vmgi_mat->vmg_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
548 B2N_32(vmgi_mat->vmgi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
549 B2N_32(vmgi_mat->vmg_category);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
550 B2N_16(vmgi_mat->vmg_nr_of_volumes);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
551 B2N_16(vmgi_mat->vmg_this_volume_nr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
552 B2N_16(vmgi_mat->vmg_nr_of_title_sets);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
553 B2N_64(vmgi_mat->vmg_pos_code);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
554 B2N_32(vmgi_mat->vmgi_last_byte);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
555 B2N_32(vmgi_mat->first_play_pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
556 B2N_32(vmgi_mat->vmgm_vobs);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
557 B2N_32(vmgi_mat->tt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
558 B2N_32(vmgi_mat->vmgm_pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
559 B2N_32(vmgi_mat->ptl_mait);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
560 B2N_32(vmgi_mat->vts_atrt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
561 B2N_32(vmgi_mat->txtdt_mgi);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
562 B2N_32(vmgi_mat->vmgm_c_adt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
563 B2N_32(vmgi_mat->vmgm_vobu_admap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
564 read_video_attr(&vmgi_mat->vmgm_video_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
565 read_audio_attr(&vmgi_mat->vmgm_audio_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
566 read_subp_attr(&vmgi_mat->vmgm_subp_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
567
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
568
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
569 CHECK_ZERO(vmgi_mat->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
570 CHECK_ZERO(vmgi_mat->zero_2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
571 CHECK_ZERO(vmgi_mat->zero_3);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
572 CHECK_ZERO(vmgi_mat->zero_4);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
573 CHECK_ZERO(vmgi_mat->zero_5);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
574 CHECK_ZERO(vmgi_mat->zero_6);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
575 CHECK_ZERO(vmgi_mat->zero_7);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
576 CHECK_ZERO(vmgi_mat->zero_8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
577 CHECK_ZERO(vmgi_mat->zero_9);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
578 CHECK_ZERO(vmgi_mat->zero_10);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
579 CHECK_VALUE(vmgi_mat->vmg_last_sector != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
580 CHECK_VALUE(vmgi_mat->vmgi_last_sector != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
581 CHECK_VALUE(vmgi_mat->vmgi_last_sector * 2 <= vmgi_mat->vmg_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
582 CHECK_VALUE(vmgi_mat->vmgi_last_sector * 2 <= vmgi_mat->vmg_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
583 CHECK_VALUE(vmgi_mat->vmg_nr_of_volumes != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
584 CHECK_VALUE(vmgi_mat->vmg_this_volume_nr != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
585 CHECK_VALUE(vmgi_mat->vmg_this_volume_nr <= vmgi_mat->vmg_nr_of_volumes);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
586 CHECK_VALUE(vmgi_mat->disc_side == 1 || vmgi_mat->disc_side == 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
587 CHECK_VALUE(vmgi_mat->vmg_nr_of_title_sets != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
588 CHECK_VALUE(vmgi_mat->vmgi_last_byte >= 341);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
589 CHECK_VALUE(vmgi_mat->vmgi_last_byte / DVD_BLOCK_LEN <=
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
590 vmgi_mat->vmgi_last_sector);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
591 /* It seems that first_play_pgc is optional. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
592 CHECK_VALUE(vmgi_mat->first_play_pgc < vmgi_mat->vmgi_last_byte);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
593 CHECK_VALUE(vmgi_mat->vmgm_vobs == 0 ||
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
594 (vmgi_mat->vmgm_vobs > vmgi_mat->vmgi_last_sector &&
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
595 vmgi_mat->vmgm_vobs < vmgi_mat->vmg_last_sector));
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
596 CHECK_VALUE(vmgi_mat->tt_srpt <= vmgi_mat->vmgi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
597 CHECK_VALUE(vmgi_mat->vmgm_pgci_ut <= vmgi_mat->vmgi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
598 CHECK_VALUE(vmgi_mat->ptl_mait <= vmgi_mat->vmgi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
599 CHECK_VALUE(vmgi_mat->vts_atrt <= vmgi_mat->vmgi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
600 CHECK_VALUE(vmgi_mat->txtdt_mgi <= vmgi_mat->vmgi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
601 CHECK_VALUE(vmgi_mat->vmgm_c_adt <= vmgi_mat->vmgi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
602 CHECK_VALUE(vmgi_mat->vmgm_vobu_admap <= vmgi_mat->vmgi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
603
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
604 CHECK_VALUE(vmgi_mat->nr_of_vmgm_audio_streams <= 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
605 CHECK_VALUE(vmgi_mat->nr_of_vmgm_subp_streams <= 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
606
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
607 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
608 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
609
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
610
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
611 static int ifoRead_VTS(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
612 vtsi_mat_t *vtsi_mat;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
613 int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
614
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
615 vtsi_mat = (vtsi_mat_t *)malloc(sizeof(vtsi_mat_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
616 if(!vtsi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
617 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
618
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
619 ifofile->vtsi_mat = vtsi_mat;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
620
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
621 if(!DVDFileSeek_(ifofile->file, 0)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
622 free(ifofile->vtsi_mat);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
623 ifofile->vtsi_mat = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
624 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
625 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
626
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
627 if(!(DVDReadBytes(ifofile->file, vtsi_mat, sizeof(vtsi_mat_t)))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
628 free(ifofile->vtsi_mat);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
629 ifofile->vtsi_mat = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
630 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
631 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
632
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
633 if(strncmp("DVDVIDEO-VTS", vtsi_mat->vts_identifier, 12) != 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
634 free(ifofile->vtsi_mat);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
635 ifofile->vtsi_mat = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
636 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
637 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
638
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
639 read_video_attr(&vtsi_mat->vtsm_video_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
640 read_video_attr(&vtsi_mat->vts_video_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
641 read_audio_attr(&vtsi_mat->vtsm_audio_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
642 for(i=0; i<8; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
643 read_audio_attr(&vtsi_mat->vts_audio_attr[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
644 read_subp_attr(&vtsi_mat->vtsm_subp_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
645 for(i=0; i<32; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
646 read_subp_attr(&vtsi_mat->vts_subp_attr[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
647 B2N_32(vtsi_mat->vts_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
648 B2N_32(vtsi_mat->vtsi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
649 B2N_32(vtsi_mat->vts_category);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
650 B2N_32(vtsi_mat->vtsi_last_byte);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
651 B2N_32(vtsi_mat->vtsm_vobs);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
652 B2N_32(vtsi_mat->vtstt_vobs);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
653 B2N_32(vtsi_mat->vts_ptt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
654 B2N_32(vtsi_mat->vts_pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
655 B2N_32(vtsi_mat->vtsm_pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
656 B2N_32(vtsi_mat->vts_tmapt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
657 B2N_32(vtsi_mat->vtsm_c_adt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
658 B2N_32(vtsi_mat->vtsm_vobu_admap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
659 B2N_32(vtsi_mat->vts_c_adt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
660 B2N_32(vtsi_mat->vts_vobu_admap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
661
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
662
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
663 CHECK_ZERO(vtsi_mat->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
664 CHECK_ZERO(vtsi_mat->zero_2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
665 CHECK_ZERO(vtsi_mat->zero_3);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
666 CHECK_ZERO(vtsi_mat->zero_4);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
667 CHECK_ZERO(vtsi_mat->zero_5);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
668 CHECK_ZERO(vtsi_mat->zero_6);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
669 CHECK_ZERO(vtsi_mat->zero_7);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
670 CHECK_ZERO(vtsi_mat->zero_8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
671 CHECK_ZERO(vtsi_mat->zero_9);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
672 CHECK_ZERO(vtsi_mat->zero_10);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
673 CHECK_ZERO(vtsi_mat->zero_11);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
674 CHECK_ZERO(vtsi_mat->zero_12);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
675 CHECK_ZERO(vtsi_mat->zero_13);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
676 CHECK_ZERO(vtsi_mat->zero_14);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
677 CHECK_ZERO(vtsi_mat->zero_15);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
678 CHECK_ZERO(vtsi_mat->zero_16);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
679 CHECK_ZERO(vtsi_mat->zero_17);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
680 CHECK_ZERO(vtsi_mat->zero_18);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
681 CHECK_ZERO(vtsi_mat->zero_19);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
682 CHECK_ZERO(vtsi_mat->zero_20);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
683 CHECK_ZERO(vtsi_mat->zero_21);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
684 CHECK_VALUE(vtsi_mat->vtsi_last_sector*2 <= vtsi_mat->vts_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
685 CHECK_VALUE(vtsi_mat->vtsi_last_byte/DVD_BLOCK_LEN <= vtsi_mat->vtsi_last_sector);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
686 CHECK_VALUE(vtsi_mat->vtsm_vobs == 0 ||
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
687 (vtsi_mat->vtsm_vobs > vtsi_mat->vtsi_last_sector &&
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
688 vtsi_mat->vtsm_vobs < vtsi_mat->vts_last_sector));
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
689 CHECK_VALUE(vtsi_mat->vtstt_vobs == 0 ||
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
690 (vtsi_mat->vtstt_vobs > vtsi_mat->vtsi_last_sector &&
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
691 vtsi_mat->vtstt_vobs < vtsi_mat->vts_last_sector));
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
692 CHECK_VALUE(vtsi_mat->vts_ptt_srpt <= vtsi_mat->vtsi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
693 CHECK_VALUE(vtsi_mat->vts_pgcit <= vtsi_mat->vtsi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
694 CHECK_VALUE(vtsi_mat->vtsm_pgci_ut <= vtsi_mat->vtsi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
695 CHECK_VALUE(vtsi_mat->vts_tmapt <= vtsi_mat->vtsi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
696 CHECK_VALUE(vtsi_mat->vtsm_c_adt <= vtsi_mat->vtsi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
697 CHECK_VALUE(vtsi_mat->vtsm_vobu_admap <= vtsi_mat->vtsi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
698 CHECK_VALUE(vtsi_mat->vts_c_adt <= vtsi_mat->vtsi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
699 CHECK_VALUE(vtsi_mat->vts_vobu_admap <= vtsi_mat->vtsi_last_sector);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
700
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
701 CHECK_VALUE(vtsi_mat->nr_of_vtsm_audio_streams <= 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
702 CHECK_VALUE(vtsi_mat->nr_of_vtsm_subp_streams <= 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
703
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
704 CHECK_VALUE(vtsi_mat->nr_of_vts_audio_streams <= 8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
705 for(i = vtsi_mat->nr_of_vts_audio_streams; i < 8; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
706 CHECK_ZERO(vtsi_mat->vts_audio_attr[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
707
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
708 CHECK_VALUE(vtsi_mat->nr_of_vts_subp_streams <= 32);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
709 for(i = vtsi_mat->nr_of_vts_subp_streams; i < 32; i++)
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
710 CHECK_ZERO(vtsi_mat->vts_subp_attr[i]);
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
711
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
712 for(i = 0; i < 8; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
713 read_multichannel_ext(&vtsi_mat->vts_mu_audio_attr[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
714 CHECK_ZERO0(vtsi_mat->vts_mu_audio_attr[i].zero1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
715 CHECK_ZERO0(vtsi_mat->vts_mu_audio_attr[i].zero2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
716 CHECK_ZERO0(vtsi_mat->vts_mu_audio_attr[i].zero3);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
717 CHECK_ZERO0(vtsi_mat->vts_mu_audio_attr[i].zero4);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
718 CHECK_ZERO0(vtsi_mat->vts_mu_audio_attr[i].zero5);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
719 CHECK_ZERO(vtsi_mat->vts_mu_audio_attr[i].zero6);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
720 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
721
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
722 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
723 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
724
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
725
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
726 static int ifoRead_PGC_COMMAND_TBL(ifo_handle_t *ifofile,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
727 pgc_command_tbl_t *cmd_tbl,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
728 unsigned int offset) {
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
729
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
730 memset(cmd_tbl, 0, sizeof(pgc_command_tbl_t));
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
731
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
732 if(!DVDFileSeek_(ifofile->file, offset))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
733 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
734
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
735 if(!(DVDReadBytes(ifofile->file, cmd_tbl, PGC_COMMAND_TBL_SIZE)))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
736 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
737
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
738 B2N_16(cmd_tbl->nr_of_pre);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
739 B2N_16(cmd_tbl->nr_of_post);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
740 B2N_16(cmd_tbl->nr_of_cell);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
741
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
742 CHECK_VALUE(cmd_tbl->nr_of_pre + cmd_tbl->nr_of_post + cmd_tbl->nr_of_cell<= 255);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
743
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
744 if(cmd_tbl->nr_of_pre != 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
745 unsigned int pre_cmds_size = cmd_tbl->nr_of_pre * COMMAND_DATA_SIZE;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
746 cmd_tbl->pre_cmds = (vm_cmd_t *)malloc(pre_cmds_size);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
747 if(!cmd_tbl->pre_cmds)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
748 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
749
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
750 if(!(DVDReadBytes(ifofile->file, cmd_tbl->pre_cmds, pre_cmds_size))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
751 free(cmd_tbl->pre_cmds);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
752 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
753 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
754 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
755
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
756 if(cmd_tbl->nr_of_post != 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
757 unsigned int post_cmds_size = cmd_tbl->nr_of_post * COMMAND_DATA_SIZE;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
758 cmd_tbl->post_cmds = (vm_cmd_t *)malloc(post_cmds_size);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
759 if(!cmd_tbl->post_cmds) {
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
760 if(cmd_tbl->pre_cmds)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
761 free(cmd_tbl->pre_cmds);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
762 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
763 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
764 if(!(DVDReadBytes(ifofile->file, cmd_tbl->post_cmds, post_cmds_size))) {
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
765 if(cmd_tbl->pre_cmds)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
766 free(cmd_tbl->pre_cmds);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
767 free(cmd_tbl->post_cmds);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
768 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
769 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
770 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
771
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
772 if(cmd_tbl->nr_of_cell != 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
773 unsigned int cell_cmds_size = cmd_tbl->nr_of_cell * COMMAND_DATA_SIZE;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
774 cmd_tbl->cell_cmds = (vm_cmd_t *)malloc(cell_cmds_size);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
775 if(!cmd_tbl->cell_cmds) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
776 if(cmd_tbl->pre_cmds)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
777 free(cmd_tbl->pre_cmds);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
778 if(cmd_tbl->post_cmds)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
779 free(cmd_tbl->post_cmds);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
780 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
781 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
782 if(!(DVDReadBytes(ifofile->file, cmd_tbl->cell_cmds, cell_cmds_size))) {
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
783 if(cmd_tbl->pre_cmds)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
784 free(cmd_tbl->pre_cmds);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
785 if(cmd_tbl->post_cmds)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
786 free(cmd_tbl->post_cmds);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
787 free(cmd_tbl->cell_cmds);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
788 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
789 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
790 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
791
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
792 /*
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
793 * Make a run over all the commands and see that we can interpret them all?
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
794 */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
795 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
796 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
797
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
798
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
799 static void ifoFree_PGC_COMMAND_TBL(pgc_command_tbl_t *cmd_tbl) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
800 if(cmd_tbl) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
801 if(cmd_tbl->nr_of_pre && cmd_tbl->pre_cmds)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
802 free(cmd_tbl->pre_cmds);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
803 if(cmd_tbl->nr_of_post && cmd_tbl->post_cmds)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
804 free(cmd_tbl->post_cmds);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
805 if(cmd_tbl->nr_of_cell && cmd_tbl->cell_cmds)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
806 free(cmd_tbl->cell_cmds);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
807 free(cmd_tbl);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
808 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
809 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
810
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
811 static int ifoRead_PGC_PROGRAM_MAP(ifo_handle_t *ifofile,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
812 pgc_program_map_t *program_map,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
813 unsigned int nr, unsigned int offset) {
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
814 unsigned int size = nr * sizeof(pgc_program_map_t);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
815
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
816 if(!DVDFileSeek_(ifofile->file, offset))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
817 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
818
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
819 if(!(DVDReadBytes(ifofile->file, program_map, size)))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
820 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
821
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
822 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
823 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
824
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
825 static int ifoRead_CELL_PLAYBACK_TBL(ifo_handle_t *ifofile,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
826 cell_playback_t *cell_playback,
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
827 unsigned int nr, unsigned int offset) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
828 unsigned int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
829 unsigned int size = nr * sizeof(cell_playback_t);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
830
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
831 if(!DVDFileSeek_(ifofile->file, offset))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
832 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
833
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
834 if(!(DVDReadBytes(ifofile->file, cell_playback, size)))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
835 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
836
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
837 for(i = 0; i < nr; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
838 read_cell_playback(&cell_playback[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
839 /* Changed < to <= because this was false in the movie 'Pi'. */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
840 CHECK_VALUE(cell_playback[i].last_vobu_start_sector <=
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
841 cell_playback[i].last_sector);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
842 CHECK_VALUE(cell_playback[i].first_sector <=
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
843 cell_playback[i].last_vobu_start_sector);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
844 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
845
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
846 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
847 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
848
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
849
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
850 static int ifoRead_CELL_POSITION_TBL(ifo_handle_t *ifofile,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
851 cell_position_t *cell_position,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
852 unsigned int nr, unsigned int offset) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
853 unsigned int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
854 unsigned int size = nr * sizeof(cell_position_t);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
855
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
856 if(!DVDFileSeek_(ifofile->file, offset))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
857 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
858
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
859 if(!(DVDReadBytes(ifofile->file, cell_position, size)))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
860 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
861
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
862 for(i = 0; i < nr; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
863 B2N_16(cell_position[i].vob_id_nr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
864 CHECK_ZERO(cell_position[i].zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
865 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
866
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
867 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
868 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
869
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
870 static int ifoRead_PGC(ifo_handle_t *ifofile, pgc_t *pgc, unsigned int offset) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
871 unsigned int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
872
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
873 if(!DVDFileSeek_(ifofile->file, offset))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
874 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
875
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
876 if(!(DVDReadBytes(ifofile->file, pgc, PGC_SIZE)))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
877 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
878
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
879 read_user_ops(&pgc->prohibited_ops);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
880 B2N_16(pgc->next_pgc_nr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
881 B2N_16(pgc->prev_pgc_nr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
882 B2N_16(pgc->goup_pgc_nr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
883 B2N_16(pgc->command_tbl_offset);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
884 B2N_16(pgc->program_map_offset);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
885 B2N_16(pgc->cell_playback_offset);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
886 B2N_16(pgc->cell_position_offset);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
887
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
888 for(i = 0; i < 8; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
889 B2N_16(pgc->audio_control[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
890 for(i = 0; i < 32; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
891 B2N_32(pgc->subp_control[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
892 for(i = 0; i < 16; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
893 B2N_32(pgc->palette[i]);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
894
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
895 CHECK_ZERO(pgc->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
896 CHECK_VALUE(pgc->nr_of_programs <= pgc->nr_of_cells);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
897
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
898 /* verify time (look at print_time) */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
899 for(i = 0; i < 8; i++)
43
6177a05fa534 Use parens to make the 'is present' mask explicit
erik
parents: 33
diff changeset
900 if(!(pgc->audio_control[i] & 0x8000)) /* The 'is present' bit */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
901 CHECK_ZERO(pgc->audio_control[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
902 for(i = 0; i < 32; i++)
43
6177a05fa534 Use parens to make the 'is present' mask explicit
erik
parents: 33
diff changeset
903 if(!(pgc->subp_control[i] & 0x80000000)) /* The 'is present' bit */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
904 CHECK_ZERO(pgc->subp_control[i]);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
905
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
906 /* Check that time is 0:0:0:0 also if nr_of_programs == 0 */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
907 if(pgc->nr_of_programs == 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
908 CHECK_ZERO(pgc->still_time);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
909 CHECK_ZERO(pgc->pg_playback_mode); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
910 CHECK_VALUE(pgc->program_map_offset == 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
911 CHECK_VALUE(pgc->cell_playback_offset == 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
912 CHECK_VALUE(pgc->cell_position_offset == 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
913 } else {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
914 CHECK_VALUE(pgc->program_map_offset != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
915 CHECK_VALUE(pgc->cell_playback_offset != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
916 CHECK_VALUE(pgc->cell_position_offset != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
917 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
918
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
919 if(pgc->command_tbl_offset != 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
920 pgc->command_tbl = malloc(sizeof(pgc_command_tbl_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
921 if(!pgc->command_tbl)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
922 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
923
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
924 if(!ifoRead_PGC_COMMAND_TBL(ifofile, pgc->command_tbl,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
925 offset + pgc->command_tbl_offset)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
926 free(pgc->command_tbl);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
927 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
928 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
929 } else {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
930 pgc->command_tbl = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
931 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
932
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
933 if(pgc->program_map_offset != 0 && pgc->nr_of_programs>0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
934 pgc->program_map = malloc(pgc->nr_of_programs * sizeof(pgc_program_map_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
935 if(!pgc->program_map) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
936 ifoFree_PGC_COMMAND_TBL(pgc->command_tbl);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
937 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
938 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
939 if(!ifoRead_PGC_PROGRAM_MAP(ifofile, pgc->program_map,pgc->nr_of_programs,
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
940 offset + pgc->program_map_offset)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
941 ifoFree_PGC_COMMAND_TBL(pgc->command_tbl);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
942 free(pgc->program_map);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
943 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
944 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
945 } else {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
946 pgc->program_map = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
947 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
948
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
949 if(pgc->cell_playback_offset != 0 && pgc->nr_of_cells>0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
950 pgc->cell_playback = malloc(pgc->nr_of_cells * sizeof(cell_playback_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
951 if(!pgc->cell_playback) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
952 ifoFree_PGC_COMMAND_TBL(pgc->command_tbl);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
953 if(pgc->program_map)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
954 free(pgc->program_map);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
955 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
956 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
957 if(!ifoRead_CELL_PLAYBACK_TBL(ifofile, pgc->cell_playback,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
958 pgc->nr_of_cells,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
959 offset + pgc->cell_playback_offset)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
960 ifoFree_PGC_COMMAND_TBL(pgc->command_tbl);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
961 if(pgc->program_map)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
962 free(pgc->program_map);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
963 free(pgc->cell_playback);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
964 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
965 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
966 } else {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
967 pgc->cell_playback = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
968 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
969
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
970 if(pgc->cell_position_offset != 0 && pgc->nr_of_cells>0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
971 pgc->cell_position = malloc(pgc->nr_of_cells * sizeof(cell_position_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
972 if(!pgc->cell_position) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
973 ifoFree_PGC(pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
974 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
975 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
976 if(!ifoRead_CELL_POSITION_TBL(ifofile, pgc->cell_position,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
977 pgc->nr_of_cells,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
978 offset + pgc->cell_position_offset)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
979 ifoFree_PGC(pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
980 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
981 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
982 } else {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
983 pgc->cell_position = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
984 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
985
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
986 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
987 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
988
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
989 int ifoRead_FP_PGC(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
990
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
991 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
992 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
993
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
994 if(!ifofile->vmgi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
995 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
996
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
997 /* It seems that first_play_pgc is optional after all. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
998 ifofile->first_play_pgc = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
999 if(ifofile->vmgi_mat->first_play_pgc == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1000 return 1;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1001
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1002 ifofile->first_play_pgc = (pgc_t *)malloc(sizeof(pgc_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1003 if(!ifofile->first_play_pgc)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1004 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1005
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1006 if(!ifoRead_PGC(ifofile, ifofile->first_play_pgc,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1007 ifofile->vmgi_mat->first_play_pgc)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1008 free(ifofile->first_play_pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1009 ifofile->first_play_pgc = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1010 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1011 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1012
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1013 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1014 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1015
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1016 static void ifoFree_PGC(pgc_t *pgc) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1017 if(pgc) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1018 ifoFree_PGC_COMMAND_TBL(pgc->command_tbl);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1019 if(pgc->program_map)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1020 free(pgc->program_map);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1021 if(pgc->cell_playback)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1022 free(pgc->cell_playback);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1023 if(pgc->cell_position)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1024 free(pgc->cell_position);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1025 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1026 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1027
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1028 void ifoFree_FP_PGC(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1029 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1030 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1031
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1032 if(ifofile->first_play_pgc) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1033 ifoFree_PGC(ifofile->first_play_pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1034 free(ifofile->first_play_pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1035 ifofile->first_play_pgc = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1036 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1037 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1038
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1039
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1040 int ifoRead_TT_SRPT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1041 tt_srpt_t *tt_srpt;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1042 int i, info_length;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1043
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1044 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1045 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1046
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1047 if(!ifofile->vmgi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1048 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1049
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1050 if(ifofile->vmgi_mat->tt_srpt == 0) /* mandatory */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1051 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1052
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1053 if(!DVDFileSeek_(ifofile->file, ifofile->vmgi_mat->tt_srpt * DVD_BLOCK_LEN))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1054 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1055
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1056 tt_srpt = (tt_srpt_t *)malloc(sizeof(tt_srpt_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1057 if(!tt_srpt)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1058 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1059
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1060 ifofile->tt_srpt = tt_srpt;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1061
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1062 if(!(DVDReadBytes(ifofile->file, tt_srpt, TT_SRPT_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1063 fprintf(stderr, "libdvdread: Unable to read read TT_SRPT.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1064 free(tt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1065 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1066 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1067
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1068 B2N_16(tt_srpt->nr_of_srpts);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1069 B2N_32(tt_srpt->last_byte);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1070
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1071 info_length = tt_srpt->last_byte + 1 - TT_SRPT_SIZE;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1072
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1073 tt_srpt->title = (title_info_t *)malloc(info_length);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1074 if(!tt_srpt->title) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1075 free(tt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1076 ifofile->tt_srpt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1077 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1078 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1079 if(!(DVDReadBytes(ifofile->file, tt_srpt->title, info_length))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1080 fprintf(stderr, "libdvdread: Unable to read read TT_SRPT.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1081 ifoFree_TT_SRPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1082 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1083 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1084
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1085 for(i = 0; i < tt_srpt->nr_of_srpts; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1086 B2N_16(tt_srpt->title[i].nr_of_ptts);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1087 B2N_16(tt_srpt->title[i].parental_id);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1088 B2N_32(tt_srpt->title[i].title_set_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1089 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1090
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1091
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1092 CHECK_ZERO(tt_srpt->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1093 CHECK_VALUE(tt_srpt->nr_of_srpts != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1094 CHECK_VALUE(tt_srpt->nr_of_srpts < 100); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1095 CHECK_VALUE((int)tt_srpt->nr_of_srpts * sizeof(title_info_t) <= info_length);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1096
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1097 for(i = 0; i < tt_srpt->nr_of_srpts; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1098 read_playback_type(&tt_srpt->title[i].pb_ty);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1099 CHECK_VALUE(tt_srpt->title[i].pb_ty.zero_1 == 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1100 CHECK_VALUE(tt_srpt->title[i].nr_of_angles != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1101 CHECK_VALUE(tt_srpt->title[i].nr_of_angles < 10);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1102 /* CHECK_VALUE(tt_srpt->title[i].nr_of_ptts != 0); */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1103 /* XXX: this assertion breaks Ghostbusters: */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1104 CHECK_VALUE(tt_srpt->title[i].nr_of_ptts < 1000); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1105 CHECK_VALUE(tt_srpt->title[i].title_set_nr != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1106 CHECK_VALUE(tt_srpt->title[i].title_set_nr < 100); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1107 CHECK_VALUE(tt_srpt->title[i].vts_ttn != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1108 CHECK_VALUE(tt_srpt->title[i].vts_ttn < 100); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1109 /* CHECK_VALUE(tt_srpt->title[i].title_set_sector != 0); */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1110 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1111
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1112 /* Make this a function */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1113 #if 0
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1114 if(memcmp((uint8_t *)tt_srpt->title +
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1115 tt_srpt->nr_of_srpts * sizeof(title_info_t),
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1116 my_friendly_zeros,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1117 info_length - tt_srpt->nr_of_srpts * sizeof(title_info_t))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1118 fprintf(stderr, "VMG_PTT_SRPT slack is != 0, ");
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1119 hexdump((uint8_t *)tt_srpt->title +
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1120 tt_srpt->nr_of_srpts * sizeof(title_info_t),
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1121 info_length - tt_srpt->nr_of_srpts * sizeof(title_info_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1122 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1123 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1124
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1125 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1126 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1127
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1128
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1129 void ifoFree_TT_SRPT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1130 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1131 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1132
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1133 if(ifofile->tt_srpt) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1134 free(ifofile->tt_srpt->title);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1135 free(ifofile->tt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1136 ifofile->tt_srpt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1137 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1138 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1139
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1140
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1141 int ifoRead_VTS_PTT_SRPT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1142 vts_ptt_srpt_t *vts_ptt_srpt;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1143 int info_length, i, j;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1144 uint32_t *data;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1145
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1146 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1147 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1148
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1149 if(!ifofile->vtsi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1150 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1151
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1152 if(ifofile->vtsi_mat->vts_ptt_srpt == 0) /* mandatory */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1153 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1154
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1155 if(!DVDFileSeek_(ifofile->file,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1156 ifofile->vtsi_mat->vts_ptt_srpt * DVD_BLOCK_LEN))
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1157 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1158
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1159 vts_ptt_srpt = (vts_ptt_srpt_t *)malloc(sizeof(vts_ptt_srpt_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1160 if(!vts_ptt_srpt)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1161 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1162
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1163 ifofile->vts_ptt_srpt = vts_ptt_srpt;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1164
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1165 if(!(DVDReadBytes(ifofile->file, vts_ptt_srpt, VTS_PTT_SRPT_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1166 fprintf(stderr, "libdvdread: Unable to read PTT search table.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1167 free(vts_ptt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1168 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1169 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1170
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1171 B2N_16(vts_ptt_srpt->nr_of_srpts);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1172 B2N_32(vts_ptt_srpt->last_byte);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1173
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1174 CHECK_ZERO(vts_ptt_srpt->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1175 CHECK_VALUE(vts_ptt_srpt->nr_of_srpts != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1176 CHECK_VALUE(vts_ptt_srpt->nr_of_srpts < 100); /* ?? */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1177
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1178 info_length = vts_ptt_srpt->last_byte + 1 - VTS_PTT_SRPT_SIZE;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1179
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1180 data = (uint32_t *)malloc(info_length);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1181 if(!data) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1182 free(vts_ptt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1183 ifofile->vts_ptt_srpt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1184 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1185 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1186 if(!(DVDReadBytes(ifofile->file, data, info_length))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1187 fprintf(stderr, "libdvdread: Unable to read PTT search table.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1188 free(vts_ptt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1189 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1190 ifofile->vts_ptt_srpt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1191 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1192 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1193
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1194 for(i = 0; i < vts_ptt_srpt->nr_of_srpts; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1195 B2N_32(data[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1196 /* assert(data[i] + sizeof(ptt_info_t) <= vts_ptt_srpt->last_byte + 1);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1197 Magic Knight Rayearth Daybreak is mastered very strange and has
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1198 Titles with 0 PTTs. They all have a data[i] offsets beyond the end of
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1199 of the vts_ptt_srpt structure. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1200 CHECK_VALUE(data[i] + sizeof(ptt_info_t) <= vts_ptt_srpt->last_byte + 1 + 4);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1201 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1202
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1203 vts_ptt_srpt->ttu_offset = data;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1204
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1205 vts_ptt_srpt->title = malloc(vts_ptt_srpt->nr_of_srpts * sizeof(ttu_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1206 if(!vts_ptt_srpt->title) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1207 free(vts_ptt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1208 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1209 ifofile->vts_ptt_srpt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1210 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1211 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1212 for(i = 0; i < vts_ptt_srpt->nr_of_srpts; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1213 int n;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1214 if(i < vts_ptt_srpt->nr_of_srpts - 1)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1215 n = (data[i+1] - data[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1216 else
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1217 n = (vts_ptt_srpt->last_byte + 1 - data[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1218 /* assert(n > 0 && (n % 4) == 0);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1219 Magic Knight Rayearth Daybreak is mastered very strange and has
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1220 Titles with 0 PTTs. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1221 if(n < 0) n = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1222 CHECK_VALUE(n % 4 == 0);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1223
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1224 vts_ptt_srpt->title[i].nr_of_ptts = n / 4;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1225 vts_ptt_srpt->title[i].ptt = malloc(n * sizeof(ptt_info_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1226 if(!vts_ptt_srpt->title[i].ptt) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1227 for(n = 0; n < i; n++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1228 free(vts_ptt_srpt->title[n].ptt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1229 free(vts_ptt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1230 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1231 ifofile->vts_ptt_srpt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1232 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1233 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1234 for(j = 0; j < vts_ptt_srpt->title[i].nr_of_ptts; j++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1235 /* The assert placed here because of Magic Knight Rayearth Daybreak */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1236 CHECK_VALUE(data[i] + sizeof(ptt_info_t) <= vts_ptt_srpt->last_byte + 1);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1237 vts_ptt_srpt->title[i].ptt[j].pgcn
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1238 = *(uint16_t*)(((char *)data) + data[i] + 4*j - VTS_PTT_SRPT_SIZE);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1239 vts_ptt_srpt->title[i].ptt[j].pgn
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1240 = *(uint16_t*)(((char *)data) + data[i] + 4*j + 2 - VTS_PTT_SRPT_SIZE);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1241 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1242 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1243
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1244 for(i = 0; i < vts_ptt_srpt->nr_of_srpts; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1245 for(j = 0; j < vts_ptt_srpt->title[i].nr_of_ptts; j++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1246 B2N_16(vts_ptt_srpt->title[i].ptt[j].pgcn);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1247 B2N_16(vts_ptt_srpt->title[i].ptt[j].pgn);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1248 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1249 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1250
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1251 for(i = 0; i < vts_ptt_srpt->nr_of_srpts; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1252 CHECK_VALUE(vts_ptt_srpt->title[i].nr_of_ptts < 1000); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1253 for(j = 0; j < vts_ptt_srpt->title[i].nr_of_ptts; j++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1254 CHECK_VALUE(vts_ptt_srpt->title[i].ptt[j].pgcn != 0 );
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1255 CHECK_VALUE(vts_ptt_srpt->title[i].ptt[j].pgcn < 1000); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1256 CHECK_VALUE(vts_ptt_srpt->title[i].ptt[j].pgn != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1257 CHECK_VALUE(vts_ptt_srpt->title[i].ptt[j].pgn < 100); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1258 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1259 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1260
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1261 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1262 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1263
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1264
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1265 void ifoFree_VTS_PTT_SRPT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1266 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1267 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1268
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1269 if(ifofile->vts_ptt_srpt) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1270 int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1271 for(i = 0; i < ifofile->vts_ptt_srpt->nr_of_srpts; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1272 free(ifofile->vts_ptt_srpt->title[i].ptt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1273 free(ifofile->vts_ptt_srpt->ttu_offset);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1274 free(ifofile->vts_ptt_srpt->title);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1275 free(ifofile->vts_ptt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1276 ifofile->vts_ptt_srpt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1277 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1278 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1279
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1280
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1281 int ifoRead_PTL_MAIT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1282 ptl_mait_t *ptl_mait;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1283 int info_length;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1284 unsigned int i, j;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1285
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1286 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1287 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1288
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1289 if(!ifofile->vmgi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1290 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1291
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1292 if(ifofile->vmgi_mat->ptl_mait == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1293 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1294
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1295 if(!DVDFileSeek_(ifofile->file, ifofile->vmgi_mat->ptl_mait * DVD_BLOCK_LEN))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1296 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1297
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1298 ptl_mait = (ptl_mait_t *)malloc(sizeof(ptl_mait_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1299 if(!ptl_mait)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1300 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1301
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1302 ifofile->ptl_mait = ptl_mait;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1303
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1304 if(!(DVDReadBytes(ifofile->file, ptl_mait, PTL_MAIT_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1305 free(ptl_mait);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1306 ifofile->ptl_mait = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1307 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1308 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1309
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1310 B2N_16(ptl_mait->nr_of_countries);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1311 B2N_16(ptl_mait->nr_of_vtss);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1312 B2N_32(ptl_mait->last_byte);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1313
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1314 CHECK_VALUE(ptl_mait->nr_of_countries != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1315 CHECK_VALUE(ptl_mait->nr_of_countries < 100); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1316 CHECK_VALUE(ptl_mait->nr_of_vtss != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1317 CHECK_VALUE(ptl_mait->nr_of_vtss < 100); /* ?? */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1318 CHECK_VALUE(ptl_mait->nr_of_countries * PTL_MAIT_COUNTRY_SIZE
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1319 <= ptl_mait->last_byte + 1 - PTL_MAIT_SIZE);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1320
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1321 info_length = ptl_mait->nr_of_countries * sizeof(ptl_mait_country_t);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1322 ptl_mait->countries = (ptl_mait_country_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1323 if(!ptl_mait->countries) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1324 free(ptl_mait);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1325 ifofile->ptl_mait = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1326 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1327 }
63
46c05a214511 Inhibit double free of parental management information
erik
parents: 61
diff changeset
1328 for(i = 0; i < ptl_mait->nr_of_countries; i++) {
46c05a214511 Inhibit double free of parental management information
erik
parents: 61
diff changeset
1329 ptl_mait->countries[i].pf_ptl_mai = NULL;
46c05a214511 Inhibit double free of parental management information
erik
parents: 61
diff changeset
1330 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1331
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1332 for(i = 0; i < ptl_mait->nr_of_countries; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1333 if(!(DVDReadBytes(ifofile->file, &ptl_mait->countries[i], PTL_MAIT_COUNTRY_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1334 fprintf(stderr, "libdvdread: Unable to read PTL_MAIT.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1335 free(ptl_mait->countries);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1336 free(ptl_mait);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1337 ifofile->ptl_mait = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1338 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1339 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1340 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1341
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1342 for(i = 0; i < ptl_mait->nr_of_countries; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1343 B2N_16(ptl_mait->countries[i].country_code);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1344 B2N_16(ptl_mait->countries[i].pf_ptl_mai_start_byte);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1345 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1346
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1347 for(i = 0; i < ptl_mait->nr_of_countries; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1348 CHECK_ZERO(ptl_mait->countries[i].zero_1);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1349 CHECK_ZERO(ptl_mait->countries[i].zero_2);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1350 CHECK_VALUE(ptl_mait->countries[i].pf_ptl_mai_start_byte
64
70c34d162e6e Replaces the hard-coded values
erik
parents: 63
diff changeset
1351 + sizeof(pf_level_t) * (ptl_mait->nr_of_vtss + 1) <= ptl_mait->last_byte + 1);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1352 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1353
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1354 for(i = 0; i < ptl_mait->nr_of_countries; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1355 uint16_t *pf_temp;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1356
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1357 if(!DVDFileSeek_(ifofile->file,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1358 ifofile->vmgi_mat->ptl_mait * DVD_BLOCK_LEN
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1359 + ptl_mait->countries[i].pf_ptl_mai_start_byte)) {
58
562a4f76fb53 Fix a spelling error in ifo_read.c
erik
parents: 43
diff changeset
1360 fprintf(stderr, "libdvdread: Unable to seek PTL_MAIT table.\n");
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1361 free(ptl_mait->countries);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1362 free(ptl_mait);
63
46c05a214511 Inhibit double free of parental management information
erik
parents: 61
diff changeset
1363 ifofile->ptl_mait = NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1364 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1365 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1366 info_length = (ptl_mait->nr_of_vtss + 1) * sizeof(pf_level_t);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1367 pf_temp = (uint16_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1368 if(!pf_temp) {
12
056f5573a7dc moved various pieces of duplicated code to free_ptl_mait(); patch by Erik Hovland org
nicodvb
parents: 3
diff changeset
1369 free_ptl_mait(ptl_mait, i);
63
46c05a214511 Inhibit double free of parental management information
erik
parents: 61
diff changeset
1370 ifofile->ptl_mait = NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1371 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1372 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1373 if(!(DVDReadBytes(ifofile->file, pf_temp, info_length))) {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1374 fprintf(stderr, "libdvdread: Unable to read PTL_MAIT table.\n");
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1375 free(pf_temp);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1376 free_ptl_mait(ptl_mait, i);
63
46c05a214511 Inhibit double free of parental management information
erik
parents: 61
diff changeset
1377 ifofile->ptl_mait = NULL;
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1378 return 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1379 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1380 for (j = 0; j < ((ptl_mait->nr_of_vtss + 1) * 8); j++) {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1381 B2N_16(pf_temp[j]);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1382 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1383 ptl_mait->countries[i].pf_ptl_mai = (pf_level_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1384 if(!ptl_mait->countries[i].pf_ptl_mai) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1385 free(pf_temp);
12
056f5573a7dc moved various pieces of duplicated code to free_ptl_mait(); patch by Erik Hovland org
nicodvb
parents: 3
diff changeset
1386 free_ptl_mait(ptl_mait, i);
63
46c05a214511 Inhibit double free of parental management information
erik
parents: 61
diff changeset
1387 ifofile->ptl_mait = NULL;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1388 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1389 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1390 { /* Transpose the array so we can use C indexing. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1391 int level, vts;
64
70c34d162e6e Replaces the hard-coded values
erik
parents: 63
diff changeset
1392 for(level = 0; level < PTL_MAIT_NUM_LEVEL; level++) {
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1393 for(vts = 0; vts <= ptl_mait->nr_of_vtss; vts++) {
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1394 ptl_mait->countries[i].pf_ptl_mai[vts][level] =
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1395 pf_temp[(7-level)*(ptl_mait->nr_of_vtss+1) + vts];
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1396 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1397 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1398 free(pf_temp);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1399 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1400 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1401 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1402 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1403
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1404 void ifoFree_PTL_MAIT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1405 unsigned int i;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1406
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1407 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1408 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1409
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1410 if(ifofile->ptl_mait) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1411 for(i = 0; i < ifofile->ptl_mait->nr_of_countries; i++) {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1412 free(ifofile->ptl_mait->countries[i].pf_ptl_mai);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1413 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1414 free(ifofile->ptl_mait->countries);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1415 free(ifofile->ptl_mait);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1416 ifofile->ptl_mait = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1417 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1418 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1419
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1420 int ifoRead_VTS_TMAPT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1421 vts_tmapt_t *vts_tmapt;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1422 uint32_t *vts_tmap_srp;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1423 unsigned int offset;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1424 int info_length;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1425 unsigned int i, j;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1426
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1427 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1428 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1429
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1430 if(!ifofile->vtsi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1431 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1432
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1433 if(ifofile->vtsi_mat->vts_tmapt == 0) { /* optional(?) */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1434 ifofile->vts_tmapt = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1435 fprintf(stderr,"Please send bug report - no VTS_TMAPT ?? \n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1436 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1437 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1438
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1439 offset = ifofile->vtsi_mat->vts_tmapt * DVD_BLOCK_LEN;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1440
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1441 if(!DVDFileSeek_(ifofile->file, offset))
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1442 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1443
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1444 vts_tmapt = (vts_tmapt_t *)malloc(sizeof(vts_tmapt_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1445 if(!vts_tmapt)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1446 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1447
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1448 ifofile->vts_tmapt = vts_tmapt;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1449
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1450 if(!(DVDReadBytes(ifofile->file, vts_tmapt, VTS_TMAPT_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1451 fprintf(stderr, "libdvdread: Unable to read VTS_TMAPT.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1452 free(vts_tmapt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1453 ifofile->vts_tmapt = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1454 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1455 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1456
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1457 B2N_16(vts_tmapt->nr_of_tmaps);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1458 B2N_32(vts_tmapt->last_byte);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1459
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1460 CHECK_ZERO(vts_tmapt->zero_1);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1461
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1462 info_length = vts_tmapt->nr_of_tmaps * 4;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1463
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1464 vts_tmap_srp = (uint32_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1465 if(!vts_tmap_srp) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1466 free(vts_tmapt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1467 ifofile->vts_tmapt = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1468 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1469 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1470
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1471 vts_tmapt->tmap_offset = vts_tmap_srp;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1472
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1473 if(!(DVDReadBytes(ifofile->file, vts_tmap_srp, info_length))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1474 fprintf(stderr, "libdvdread: Unable to read VTS_TMAPT.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1475 free(vts_tmap_srp);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1476 free(vts_tmapt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1477 ifofile->vts_tmapt = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1478 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1479 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1480
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1481 for (i = 0; i < vts_tmapt->nr_of_tmaps; i++) {
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1482 B2N_32(vts_tmap_srp[i]);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1483 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1484
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1485
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1486 info_length = vts_tmapt->nr_of_tmaps * sizeof(vts_tmap_t);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1487
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1488 vts_tmapt->tmap = (vts_tmap_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1489 if(!vts_tmapt->tmap) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1490 free(vts_tmap_srp);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1491 free(vts_tmapt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1492 ifofile->vts_tmapt = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1493 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1494 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1495
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1496 memset(vts_tmapt->tmap, 0, info_length); /* So ifoFree_VTS_TMAPT works. */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1497
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1498 for(i = 0; i < vts_tmapt->nr_of_tmaps; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1499 if(!DVDFileSeek_(ifofile->file, offset + vts_tmap_srp[i])) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1500 ifoFree_VTS_TMAPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1501 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1502 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1503
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1504 if(!(DVDReadBytes(ifofile->file, &vts_tmapt->tmap[i], VTS_TMAP_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1505 fprintf(stderr, "libdvdread: Unable to read VTS_TMAP.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1506 ifoFree_VTS_TMAPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1507 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1508 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1509
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1510 B2N_16(vts_tmapt->tmap[i].nr_of_entries);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1511 CHECK_ZERO(vts_tmapt->tmap[i].zero_1);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1512
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1513 if(vts_tmapt->tmap[i].nr_of_entries == 0) { /* Early out if zero entries */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1514 vts_tmapt->tmap[i].map_ent = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1515 continue;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1516 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1517
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1518 info_length = vts_tmapt->tmap[i].nr_of_entries * sizeof(map_ent_t);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1519
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1520 vts_tmapt->tmap[i].map_ent = (map_ent_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1521 if(!vts_tmapt->tmap[i].map_ent) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1522 ifoFree_VTS_TMAPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1523 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1524 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1525
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1526 if(!(DVDReadBytes(ifofile->file, vts_tmapt->tmap[i].map_ent, info_length))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1527 fprintf(stderr, "libdvdread: Unable to read VTS_TMAP_ENT.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1528 ifoFree_VTS_TMAPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1529 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1530 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1531
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1532 for(j = 0; j < vts_tmapt->tmap[i].nr_of_entries; j++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1533 B2N_32(vts_tmapt->tmap[i].map_ent[j]);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1534 }
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1535
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1536 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1537 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1538
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1539 void ifoFree_VTS_TMAPT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1540 unsigned int i;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1541
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1542 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1543 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1544
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1545 if(ifofile->vts_tmapt) {
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1546 for(i = 0; i < ifofile->vts_tmapt->nr_of_tmaps; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1547 if(ifofile->vts_tmapt->tmap[i].map_ent)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1548 free(ifofile->vts_tmapt->tmap[i].map_ent);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1549 free(ifofile->vts_tmapt->tmap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1550 free(ifofile->vts_tmapt->tmap_offset);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1551 free(ifofile->vts_tmapt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1552 ifofile->vts_tmapt = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1553 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1554 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1555
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1556
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1557 int ifoRead_TITLE_C_ADT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1558
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1559 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1560 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1561
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1562 if(!ifofile->vtsi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1563 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1564
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1565 if(ifofile->vtsi_mat->vts_c_adt == 0) /* mandatory */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1566 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1567
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1568 ifofile->vts_c_adt = (c_adt_t *)malloc(sizeof(c_adt_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1569 if(!ifofile->vts_c_adt)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1570 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1571
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1572 if(!ifoRead_C_ADT_internal(ifofile, ifofile->vts_c_adt,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1573 ifofile->vtsi_mat->vts_c_adt)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1574 free(ifofile->vts_c_adt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1575 ifofile->vts_c_adt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1576 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1577 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1578
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1579 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1580 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1581
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1582 int ifoRead_C_ADT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1583 unsigned int sector;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1584
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1585 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1586 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1587
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1588 if(ifofile->vmgi_mat) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1589 if(ifofile->vmgi_mat->vmgm_c_adt == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1590 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1591 sector = ifofile->vmgi_mat->vmgm_c_adt;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1592 } else if(ifofile->vtsi_mat) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1593 if(ifofile->vtsi_mat->vtsm_c_adt == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1594 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1595 sector = ifofile->vtsi_mat->vtsm_c_adt;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1596 } else {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1597 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1598 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1599
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1600 ifofile->menu_c_adt = (c_adt_t *)malloc(sizeof(c_adt_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1601 if(!ifofile->menu_c_adt)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1602 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1603
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1604 if(!ifoRead_C_ADT_internal(ifofile, ifofile->menu_c_adt, sector)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1605 free(ifofile->menu_c_adt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1606 ifofile->menu_c_adt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1607 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1608 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1609
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1610 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1611 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1612
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1613 static int ifoRead_C_ADT_internal(ifo_handle_t *ifofile,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1614 c_adt_t *c_adt, unsigned int sector) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1615 int i, info_length;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1616
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1617 if(!DVDFileSeek_(ifofile->file, sector * DVD_BLOCK_LEN))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1618 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1619
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1620 if(!(DVDReadBytes(ifofile->file, c_adt, C_ADT_SIZE)))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1621 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1622
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1623 B2N_16(c_adt->nr_of_vobs);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1624 B2N_32(c_adt->last_byte);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1625
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1626 info_length = c_adt->last_byte + 1 - C_ADT_SIZE;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1627
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1628 CHECK_ZERO(c_adt->zero_1);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1629 /* assert(c_adt->nr_of_vobs > 0);
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1630 Magic Knight Rayearth Daybreak is mastered very strange and has
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1631 Titles with a VOBS that has no cells. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1632 CHECK_VALUE(info_length % sizeof(cell_adr_t) == 0);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1633
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1634 /* assert(info_length / sizeof(cell_adr_t) >= c_adt->nr_of_vobs);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1635 Enemy of the State region 2 (de) has Titles where nr_of_vobs field
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1636 is to high, they high ones are never referenced though. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1637 if(info_length / sizeof(cell_adr_t) < c_adt->nr_of_vobs) {
61
eac01aeb7be5 Fix some spelling issues
siretart
parents: 59
diff changeset
1638 fprintf(stderr, "libdvdread: *C_ADT nr_of_vobs > available info entries\n");
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1639 c_adt->nr_of_vobs = info_length / sizeof(cell_adr_t);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1640 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1641
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1642 c_adt->cell_adr_table = (cell_adr_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1643 if(!c_adt->cell_adr_table)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1644 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1645
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1646 if(info_length &&
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1647 !(DVDReadBytes(ifofile->file, c_adt->cell_adr_table, info_length))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1648 free(c_adt->cell_adr_table);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1649 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1650 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1651
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1652 for(i = 0; i < info_length/sizeof(cell_adr_t); i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1653 B2N_16(c_adt->cell_adr_table[i].vob_id);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1654 B2N_32(c_adt->cell_adr_table[i].start_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1655 B2N_32(c_adt->cell_adr_table[i].last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1656
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1657 CHECK_ZERO(c_adt->cell_adr_table[i].zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1658 CHECK_VALUE(c_adt->cell_adr_table[i].vob_id > 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1659 CHECK_VALUE(c_adt->cell_adr_table[i].vob_id <= c_adt->nr_of_vobs);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1660 CHECK_VALUE(c_adt->cell_adr_table[i].cell_id > 0);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1661 CHECK_VALUE(c_adt->cell_adr_table[i].start_sector <
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1662 c_adt->cell_adr_table[i].last_sector);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1663 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1664
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1665 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1666 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1667
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1668
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1669 static void ifoFree_C_ADT_internal(c_adt_t *c_adt) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1670 if(c_adt) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1671 free(c_adt->cell_adr_table);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1672 free(c_adt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1673 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1674 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1675
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1676 void ifoFree_C_ADT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1677 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1678 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1679
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1680 ifoFree_C_ADT_internal(ifofile->menu_c_adt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1681 ifofile->menu_c_adt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1682 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1683
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1684 void ifoFree_TITLE_C_ADT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1685 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1686 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1687
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1688 ifoFree_C_ADT_internal(ifofile->vts_c_adt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1689 ifofile->vts_c_adt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1690 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1691
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1692 int ifoRead_TITLE_VOBU_ADMAP(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1693 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1694 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1695
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1696 if(!ifofile->vtsi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1697 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1698
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1699 if(ifofile->vtsi_mat->vts_vobu_admap == 0) /* mandatory */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1700 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1701
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1702 ifofile->vts_vobu_admap = (vobu_admap_t *)malloc(sizeof(vobu_admap_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1703 if(!ifofile->vts_vobu_admap)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1704 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1705
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1706 if(!ifoRead_VOBU_ADMAP_internal(ifofile, ifofile->vts_vobu_admap,
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1707 ifofile->vtsi_mat->vts_vobu_admap)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1708 free(ifofile->vts_vobu_admap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1709 ifofile->vts_vobu_admap = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1710 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1711 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1712
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1713 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1714 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1715
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1716 int ifoRead_VOBU_ADMAP(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1717 unsigned int sector;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1718
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1719 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1720 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1721
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1722 if(ifofile->vmgi_mat) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1723 if(ifofile->vmgi_mat->vmgm_vobu_admap == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1724 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1725 sector = ifofile->vmgi_mat->vmgm_vobu_admap;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1726 } else if(ifofile->vtsi_mat) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1727 if(ifofile->vtsi_mat->vtsm_vobu_admap == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1728 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1729 sector = ifofile->vtsi_mat->vtsm_vobu_admap;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1730 } else {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1731 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1732 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1733
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1734 ifofile->menu_vobu_admap = (vobu_admap_t *)malloc(sizeof(vobu_admap_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1735 if(!ifofile->menu_vobu_admap)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1736 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1737
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1738 if(!ifoRead_VOBU_ADMAP_internal(ifofile, ifofile->menu_vobu_admap, sector)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1739 free(ifofile->menu_vobu_admap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1740 ifofile->menu_vobu_admap = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1741 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1742 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1743
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1744 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1745 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1746
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1747 static int ifoRead_VOBU_ADMAP_internal(ifo_handle_t *ifofile,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1748 vobu_admap_t *vobu_admap,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1749 unsigned int sector) {
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1750 unsigned int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1751 int info_length;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1752
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1753 if(!DVDFileSeekForce_(ifofile->file, sector * DVD_BLOCK_LEN, sector))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1754 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1755
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1756 if(!(DVDReadBytes(ifofile->file, vobu_admap, VOBU_ADMAP_SIZE)))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1757 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1758
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1759 B2N_32(vobu_admap->last_byte);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1760
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1761 info_length = vobu_admap->last_byte + 1 - VOBU_ADMAP_SIZE;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1762 /* assert(info_length > 0);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1763 Magic Knight Rayearth Daybreak is mastered very strange and has
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1764 Titles with a VOBS that has no VOBUs. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1765 CHECK_VALUE(info_length % sizeof(uint32_t) == 0);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1766
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1767 vobu_admap->vobu_start_sectors = (uint32_t *)malloc(info_length);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1768 if(!vobu_admap->vobu_start_sectors) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1769 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1770 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1771 if(info_length &&
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1772 !(DVDReadBytes(ifofile->file,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1773 vobu_admap->vobu_start_sectors, info_length))) {
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1774 free(vobu_admap->vobu_start_sectors);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1775 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1776 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1777
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1778 for(i = 0; i < info_length/sizeof(uint32_t); i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1779 B2N_32(vobu_admap->vobu_start_sectors[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1780
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1781 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1782 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1783
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1784
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1785 static void ifoFree_VOBU_ADMAP_internal(vobu_admap_t *vobu_admap) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1786 if(vobu_admap) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1787 free(vobu_admap->vobu_start_sectors);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1788 free(vobu_admap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1789 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1790 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1791
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1792 void ifoFree_VOBU_ADMAP(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1793 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1794 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1795
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1796 ifoFree_VOBU_ADMAP_internal(ifofile->menu_vobu_admap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1797 ifofile->menu_vobu_admap = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1798 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1799
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1800 void ifoFree_TITLE_VOBU_ADMAP(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1801 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1802 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1803
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1804 ifoFree_VOBU_ADMAP_internal(ifofile->vts_vobu_admap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1805 ifofile->vts_vobu_admap = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1806 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1807
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1808 int ifoRead_PGCIT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1809
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1810 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1811 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1812
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1813 if(!ifofile->vtsi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1814 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1815
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1816 if(ifofile->vtsi_mat->vts_pgcit == 0) /* mandatory */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1817 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1818
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1819 ifofile->vts_pgcit = (pgcit_t *)malloc(sizeof(pgcit_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1820 if(!ifofile->vts_pgcit)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1821 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1822
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1823 if(!ifoRead_PGCIT_internal(ifofile, ifofile->vts_pgcit,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1824 ifofile->vtsi_mat->vts_pgcit * DVD_BLOCK_LEN)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1825 free(ifofile->vts_pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1826 ifofile->vts_pgcit = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1827 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1828 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1829
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1830 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1831 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1832
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1833 static int ifoRead_PGCIT_internal(ifo_handle_t *ifofile, pgcit_t *pgcit,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1834 unsigned int offset) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1835 int i, info_length;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1836 uint8_t *data, *ptr;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1837
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1838 if(!DVDFileSeek_(ifofile->file, offset))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1839 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1840
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1841 if(!(DVDReadBytes(ifofile->file, pgcit, PGCIT_SIZE)))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1842 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1843
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1844 B2N_16(pgcit->nr_of_pgci_srp);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1845 B2N_32(pgcit->last_byte);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1846
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1847 CHECK_ZERO(pgcit->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1848 /* assert(pgcit->nr_of_pgci_srp != 0);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1849 Magic Knight Rayearth Daybreak is mastered very strange and has
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1850 Titles with 0 PTTs. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1851 CHECK_VALUE(pgcit->nr_of_pgci_srp < 10000); /* ?? seen max of 1338 */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1852
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1853 info_length = pgcit->nr_of_pgci_srp * PGCI_SRP_SIZE;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1854 data = malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1855 if(!data)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1856 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1857
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1858 if(info_length && !(DVDReadBytes(ifofile->file, data, info_length))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1859 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1860 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1861 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1862
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1863 pgcit->pgci_srp = malloc(pgcit->nr_of_pgci_srp * sizeof(pgci_srp_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1864 if(!pgcit->pgci_srp) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1865 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1866 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1867 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1868 ptr = data;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1869 for(i = 0; i < pgcit->nr_of_pgci_srp; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1870 memcpy(&pgcit->pgci_srp[i], ptr, PGCI_SRP_SIZE);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1871 ptr += PGCI_SRP_SIZE;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1872 read_pgci_srp(&pgcit->pgci_srp[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1873 CHECK_VALUE(pgcit->pgci_srp[i].unknown1 == 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1874 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1875 free(data);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1876
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1877 for(i = 0; i < pgcit->nr_of_pgci_srp; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1878 CHECK_VALUE(pgcit->pgci_srp[i].pgc_start_byte + PGC_SIZE <= pgcit->last_byte+1);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1879
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1880 for(i = 0; i < pgcit->nr_of_pgci_srp; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1881 pgcit->pgci_srp[i].pgc = malloc(sizeof(pgc_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1882 if(!pgcit->pgci_srp[i].pgc) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1883 int j;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1884 for(j = 0; j < i; j++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1885 ifoFree_PGC(pgcit->pgci_srp[j].pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1886 free(pgcit->pgci_srp[j].pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1887 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1888 goto fail;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1889 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1890 if(!ifoRead_PGC(ifofile, pgcit->pgci_srp[i].pgc,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1891 offset + pgcit->pgci_srp[i].pgc_start_byte)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1892 int j;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1893 for(j = 0; j < i; j++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1894 ifoFree_PGC(pgcit->pgci_srp[j].pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1895 free(pgcit->pgci_srp[j].pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1896 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1897 goto fail;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1898 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1899 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1900
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1901 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1902 fail:
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1903 free(pgcit->pgci_srp);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1904 pgcit->pgci_srp = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1905 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1906 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1907
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1908 static void ifoFree_PGCIT_internal(pgcit_t *pgcit) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1909 if(pgcit) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1910 int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1911 for(i = 0; i < pgcit->nr_of_pgci_srp; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1912 ifoFree_PGC(pgcit->pgci_srp[i].pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1913 free(pgcit->pgci_srp);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1914 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1915 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1916
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1917 void ifoFree_PGCIT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1918 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1919 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1920
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1921 if(ifofile->vts_pgcit) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1922 ifoFree_PGCIT_internal(ifofile->vts_pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1923 free(ifofile->vts_pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1924 ifofile->vts_pgcit = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1925 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1926 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1927
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1928
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1929 int ifoRead_PGCI_UT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1930 pgci_ut_t *pgci_ut;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1931 unsigned int sector;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1932 unsigned int i;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1933 int info_length;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1934 uint8_t *data, *ptr;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1935
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1936 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1937 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1938
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1939 if(ifofile->vmgi_mat) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1940 if(ifofile->vmgi_mat->vmgm_pgci_ut == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1941 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1942 sector = ifofile->vmgi_mat->vmgm_pgci_ut;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1943 } else if(ifofile->vtsi_mat) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1944 if(ifofile->vtsi_mat->vtsm_pgci_ut == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1945 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1946 sector = ifofile->vtsi_mat->vtsm_pgci_ut;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1947 } else {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1948 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1949 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1950
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1951 ifofile->pgci_ut = (pgci_ut_t *)malloc(sizeof(pgci_ut_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1952 if(!ifofile->pgci_ut)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1953 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1954
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1955 if(!DVDFileSeek_(ifofile->file, sector * DVD_BLOCK_LEN)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1956 free(ifofile->pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1957 ifofile->pgci_ut = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1958 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1959 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1960
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1961 if(!(DVDReadBytes(ifofile->file, ifofile->pgci_ut, PGCI_UT_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1962 free(ifofile->pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1963 ifofile->pgci_ut = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1964 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1965 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1966
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1967 pgci_ut = ifofile->pgci_ut;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1968
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1969 B2N_16(pgci_ut->nr_of_lus);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1970 B2N_32(pgci_ut->last_byte);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1971
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1972 CHECK_ZERO(pgci_ut->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1973 CHECK_VALUE(pgci_ut->nr_of_lus != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1974 CHECK_VALUE(pgci_ut->nr_of_lus < 100); /* ?? 3-4 ? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1975 CHECK_VALUE((uint32_t)pgci_ut->nr_of_lus * PGCI_LU_SIZE < pgci_ut->last_byte);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1976
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1977 info_length = pgci_ut->nr_of_lus * PGCI_LU_SIZE;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1978 data = malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1979 if(!data) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1980 free(pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1981 ifofile->pgci_ut = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1982 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1983 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1984 if(!(DVDReadBytes(ifofile->file, data, info_length))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1985 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1986 free(pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1987 ifofile->pgci_ut = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1988 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1989 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1990
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1991 pgci_ut->lu = malloc(pgci_ut->nr_of_lus * sizeof(pgci_lu_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1992 if(!pgci_ut->lu) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1993 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1994 free(pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1995 ifofile->pgci_ut = 0;
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1996 return 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1997 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1998 ptr = data;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1999 for(i = 0; i < pgci_ut->nr_of_lus; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2000 memcpy(&pgci_ut->lu[i], ptr, PGCI_LU_SIZE);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2001 ptr += PGCI_LU_SIZE;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2002 B2N_16(pgci_ut->lu[i].lang_code);
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2003 B2N_32(pgci_ut->lu[i].lang_start_byte);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2004 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2005 free(data);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2006
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2007 for(i = 0; i < pgci_ut->nr_of_lus; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2008 /* Maybe this is only defined for v1.1 and later titles? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2009 /* If the bits in 'lu[i].exists' are enumerated abcd efgh then:
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
2010 VTS_x_yy.IFO VIDEO_TS.IFO
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2011 a == 0x83 "Root" 0x82 "Title"
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2012 b == 0x84 "Subpicture"
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2013 c == 0x85 "Audio"
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2014 d == 0x86 "Angle"
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2015 e == 0x87 "PTT"
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2016 */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2017 CHECK_VALUE((pgci_ut->lu[i].exists & 0x07) == 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2018 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2019
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2020 for(i = 0; i < pgci_ut->nr_of_lus; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2021 pgci_ut->lu[i].pgcit = malloc(sizeof(pgcit_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2022 if(!pgci_ut->lu[i].pgcit) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2023 unsigned int j;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2024 for(j = 0; j < i; j++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2025 ifoFree_PGCIT_internal(pgci_ut->lu[j].pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2026 free(pgci_ut->lu[j].pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2027 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2028 free(pgci_ut->lu);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2029 free(pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2030 ifofile->pgci_ut = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2031 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2032 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2033 if(!ifoRead_PGCIT_internal(ifofile, pgci_ut->lu[i].pgcit,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2034 sector * DVD_BLOCK_LEN
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2035 + pgci_ut->lu[i].lang_start_byte)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2036 unsigned int j;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2037 for(j = 0; j < i; j++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2038 ifoFree_PGCIT_internal(pgci_ut->lu[j].pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2039 free(pgci_ut->lu[j].pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2040 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2041 free(pgci_ut->lu[i].pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2042 free(pgci_ut->lu);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2043 free(pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2044 ifofile->pgci_ut = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2045 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2046 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
2047 /* FIXME: Iterate and verify that all menus that should exists accordingly
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
2048 * to pgci_ut->lu[i].exists really do? */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2049 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2050
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2051 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2052 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2053
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2054
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2055 void ifoFree_PGCI_UT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2056 unsigned int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2057
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2058 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2059 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2060
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2061 if(ifofile->pgci_ut) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2062 for(i = 0; i < ifofile->pgci_ut->nr_of_lus; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2063 ifoFree_PGCIT_internal(ifofile->pgci_ut->lu[i].pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2064 free(ifofile->pgci_ut->lu[i].pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2065 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2066 free(ifofile->pgci_ut->lu);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2067 free(ifofile->pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2068 ifofile->pgci_ut = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2069 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2070 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2071
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2072 static int ifoRead_VTS_ATTRIBUTES(ifo_handle_t *ifofile,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2073 vts_attributes_t *vts_attributes,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2074 unsigned int offset) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2075 unsigned int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2076
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2077 if(!DVDFileSeek_(ifofile->file, offset))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2078 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2079
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2080 if(!(DVDReadBytes(ifofile->file, vts_attributes, sizeof(vts_attributes_t))))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2081 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2082
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2083 read_video_attr(&vts_attributes->vtsm_vobs_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2084 read_video_attr(&vts_attributes->vtstt_vobs_video_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2085 read_audio_attr(&vts_attributes->vtsm_audio_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2086 for(i=0; i<8; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2087 read_audio_attr(&vts_attributes->vtstt_audio_attr[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2088 read_subp_attr(&vts_attributes->vtsm_subp_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2089 for(i=0; i<32; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2090 read_subp_attr(&vts_attributes->vtstt_subp_attr[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2091 B2N_32(vts_attributes->last_byte);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2092 B2N_32(vts_attributes->vts_cat);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2093
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2094 CHECK_ZERO(vts_attributes->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2095 CHECK_ZERO(vts_attributes->zero_2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2096 CHECK_ZERO(vts_attributes->zero_3);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2097 CHECK_ZERO(vts_attributes->zero_4);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2098 CHECK_ZERO(vts_attributes->zero_5);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2099 CHECK_ZERO(vts_attributes->zero_6);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2100 CHECK_ZERO(vts_attributes->zero_7);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2101 CHECK_VALUE(vts_attributes->nr_of_vtsm_audio_streams <= 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2102 CHECK_VALUE(vts_attributes->nr_of_vtsm_subp_streams <= 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2103 CHECK_VALUE(vts_attributes->nr_of_vtstt_audio_streams <= 8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2104 for(i = vts_attributes->nr_of_vtstt_audio_streams; i < 8; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2105 CHECK_ZERO(vts_attributes->vtstt_audio_attr[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2106 CHECK_VALUE(vts_attributes->nr_of_vtstt_subp_streams <= 32);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2107 {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2108 unsigned int nr_coded;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2109 CHECK_VALUE(vts_attributes->last_byte + 1 >= VTS_ATTRIBUTES_MIN_SIZE);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2110 nr_coded = (vts_attributes->last_byte + 1 - VTS_ATTRIBUTES_MIN_SIZE)/6;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2111 /* This is often nr_coded = 70, how do you know how many there really are? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2112 if(nr_coded > 32) { /* We haven't read more from disk/file anyway */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2113 nr_coded = 32;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2114 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2115 CHECK_VALUE(vts_attributes->nr_of_vtstt_subp_streams <= nr_coded);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2116 for(i = vts_attributes->nr_of_vtstt_subp_streams; i < nr_coded; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2117 CHECK_ZERO(vts_attributes->vtstt_subp_attr[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2118 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2119
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2120 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2121 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2122
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2123
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2124
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2125 int ifoRead_VTS_ATRT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2126 vts_atrt_t *vts_atrt;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2127 unsigned int i, info_length, sector;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2128 uint32_t *data;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2129
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2130 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2131 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2132
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2133 if(!ifofile->vmgi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2134 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2135
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2136 if(ifofile->vmgi_mat->vts_atrt == 0) /* mandatory */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2137 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2138
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2139 sector = ifofile->vmgi_mat->vts_atrt;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2140 if(!DVDFileSeek_(ifofile->file, sector * DVD_BLOCK_LEN))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2141 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2142
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2143 vts_atrt = (vts_atrt_t *)malloc(sizeof(vts_atrt_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2144 if(!vts_atrt)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2145 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2146
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2147 ifofile->vts_atrt = vts_atrt;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2148
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2149 if(!(DVDReadBytes(ifofile->file, vts_atrt, VTS_ATRT_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2150 free(vts_atrt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2151 ifofile->vts_atrt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2152 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2153 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2154
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2155 B2N_16(vts_atrt->nr_of_vtss);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2156 B2N_32(vts_atrt->last_byte);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2157
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2158 CHECK_ZERO(vts_atrt->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2159 CHECK_VALUE(vts_atrt->nr_of_vtss != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2160 CHECK_VALUE(vts_atrt->nr_of_vtss < 100); /* ?? */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2161 CHECK_VALUE((uint32_t)vts_atrt->nr_of_vtss * (4 + VTS_ATTRIBUTES_MIN_SIZE) +
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
2162 VTS_ATRT_SIZE < vts_atrt->last_byte + 1);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2163
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2164 info_length = vts_atrt->nr_of_vtss * sizeof(uint32_t);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2165 data = (uint32_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2166 if(!data) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2167 free(vts_atrt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2168 ifofile->vts_atrt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2169 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2170 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2171
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2172 vts_atrt->vts_atrt_offsets = data;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2173
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2174 if(!(DVDReadBytes(ifofile->file, data, info_length))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2175 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2176 free(vts_atrt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2177 ifofile->vts_atrt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2178 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2179 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2180
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2181 for(i = 0; i < vts_atrt->nr_of_vtss; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2182 B2N_32(data[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2183 CHECK_VALUE(data[i] + VTS_ATTRIBUTES_MIN_SIZE < vts_atrt->last_byte + 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2184 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2185
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2186 info_length = vts_atrt->nr_of_vtss * sizeof(vts_attributes_t);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2187 vts_atrt->vts = (vts_attributes_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2188 if(!vts_atrt->vts) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2189 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2190 free(vts_atrt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2191 ifofile->vts_atrt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2192 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2193 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2194 for(i = 0; i < vts_atrt->nr_of_vtss; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2195 unsigned int offset = data[i];
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2196 if(!ifoRead_VTS_ATTRIBUTES(ifofile, &(vts_atrt->vts[i]),
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2197 (sector * DVD_BLOCK_LEN) + offset)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2198 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2199 free(vts_atrt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2200 ifofile->vts_atrt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2201 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2202 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2203
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2204 /* This assert cant be in ifoRead_VTS_ATTRIBUTES */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2205 CHECK_VALUE(offset + vts_atrt->vts[i].last_byte <= vts_atrt->last_byte + 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2206 /* Is this check correct? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2207 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2208
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2209 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2210 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2211
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2212
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2213 void ifoFree_VTS_ATRT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2214 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2215 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2216
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2217 if(ifofile->vts_atrt) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2218 free(ifofile->vts_atrt->vts);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2219 free(ifofile->vts_atrt->vts_atrt_offsets);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2220 free(ifofile->vts_atrt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2221 ifofile->vts_atrt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2222 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2223 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2224
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2225
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2226 int ifoRead_TXTDT_MGI(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2227 txtdt_mgi_t *txtdt_mgi;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2228
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2229 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2230 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2231
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2232 if(!ifofile->vmgi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2233 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2234
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2235 /* Return successfully if there is nothing to read. */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2236 if(ifofile->vmgi_mat->txtdt_mgi == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2237 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2238
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2239 if(!DVDFileSeek_(ifofile->file,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
2240 ifofile->vmgi_mat->txtdt_mgi * DVD_BLOCK_LEN))
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2241 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2242
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2243 txtdt_mgi = (txtdt_mgi_t *)malloc(sizeof(txtdt_mgi_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2244 if(!txtdt_mgi) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2245 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2246 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2247 ifofile->txtdt_mgi = txtdt_mgi;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2248
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2249 if(!(DVDReadBytes(ifofile->file, txtdt_mgi, TXTDT_MGI_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2250 fprintf(stderr, "libdvdread: Unable to read TXTDT_MGI.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2251 free(txtdt_mgi);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2252 ifofile->txtdt_mgi = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2253 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2254 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2255
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2256 /* fprintf(stderr, "-- Not done yet --\n"); */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2257 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2258 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2259
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2260 void ifoFree_TXTDT_MGI(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2261 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2262 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2263
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2264 if(ifofile->txtdt_mgi) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2265 free(ifofile->txtdt_mgi);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2266 ifofile->txtdt_mgi = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2267 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2268 }