annotate ifo_read.c @ 43:6177a05fa534 src

Use parens to make the 'is present' mask explicit W/o parens the check for the 'is present' mask will not work right because the ! operator will evaluate first. But by wrapping the & operation in parens, we make it explicit that this goes first. And so the is present flag will be properly evaluated in the conditional
author erik
date Wed, 02 Sep 2009 01:43:18 +0000
parents c743d79f187b
children 562a4f76fb53
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;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
292
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
293 ifofile = (ifo_handle_t *)malloc(sizeof(ifo_handle_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
294 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
295 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
296
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
297 memset(ifofile, 0, sizeof(ifo_handle_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
298
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
299 ifofile->file = DVDOpenFile(dvd, title, DVD_READ_INFO_FILE);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
300 if(!ifofile->file) /* Should really catch any error and try to fallback */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
301 ifofile->file = DVDOpenFile(dvd, title, DVD_READ_INFO_BACKUP_FILE);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
302 if(!ifofile->file) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
303 if(title) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
304 fprintf(stderr, "libdvdread: Can't open file VTS_%02d_0.IFO.\n", title);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
305 } else {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
306 fprintf(stderr, "libdvdread: Can't open file VIDEO_TS.IFO.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
307 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
308 free(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
309 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
310 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
311
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
312 /* First check if this is a VMGI file. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
313 if(ifoRead_VMG(ifofile)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
314
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
315 /* These are both mandatory. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
316 if(!ifoRead_FP_PGC(ifofile) || !ifoRead_TT_SRPT(ifofile)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
317 fprintf(stderr, "libdvdread: Invalid main menu IFO (VIDEO_TS.IFO), ifoRead_FP_PGC() failed.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
318 ifoClose(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
319 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
320 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
321
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
322 ifoRead_PGCI_UT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
323 ifoRead_PTL_MAIT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
324
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
325 /* This is also mandatory. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
326 if(!ifoRead_VTS_ATRT(ifofile)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
327 fprintf(stderr, "libdvdread: Invalid main menu IFO (VIDEO_TS.IFO), ifoRead_VTS_ATRT() failed.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
328 ifoClose(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
329 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
330 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
331
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
332 ifoRead_TXTDT_MGI(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
333 ifoRead_C_ADT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
334 ifoRead_VOBU_ADMAP(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
335
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
336 return 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
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
339 if(ifoRead_VTS(ifofile)) {
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_PTT_SRPT(ifofile) || !ifoRead_PGCIT(ifofile)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
342 fprintf(stderr, "libdvdread: Invalid title IFO (VTS_%02d_0.IFO).\n",
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
343 title);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
344 ifoClose(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
345 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
346 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
347
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
348 ifoRead_PGCI_UT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
349 ifoRead_VTS_TMAPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
350 ifoRead_C_ADT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
351 ifoRead_VOBU_ADMAP(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
352
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
353 if(!ifoRead_TITLE_C_ADT(ifofile) || !ifoRead_TITLE_VOBU_ADMAP(ifofile)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
354 fprintf(stderr, "libdvdread: Invalid title IFO (VTS_%02d_0.IFO).\n",
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
355 title);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
356 ifoClose(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
357 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
358 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
359
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
360 return ifofile;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
361 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
362
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
363 if(title) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
364 fprintf(stderr, "libdvdread: Invalid IFO for title %d (VTS_%02d_0.IFO).\n",
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
365 title, title);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
366 } else {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
367 fprintf(stderr, "libdvdread: Invalid IFO for VMGM (VIDEO_TS.IFO).\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
368 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
369 ifoClose(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
370 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
371 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
372
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
373
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
374 ifo_handle_t *ifoOpenVMGI(dvd_reader_t *dvd) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
375 ifo_handle_t *ifofile;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
376
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
377 ifofile = (ifo_handle_t *)malloc(sizeof(ifo_handle_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
378 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
379 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
380
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
381 memset(ifofile, 0, sizeof(ifo_handle_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
382
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
383 ifofile->file = DVDOpenFile(dvd, 0, DVD_READ_INFO_FILE);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
384 if(!ifofile->file) /* Should really catch any error and try to fallback */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
385 ifofile->file = DVDOpenFile(dvd, 0, DVD_READ_INFO_BACKUP_FILE);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
386 if(!ifofile->file) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
387 fprintf(stderr, "libdvdread: Can't open file VIDEO_TS.IFO.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
388 free(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
389 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
390 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
391
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
392 if(ifoRead_VMG(ifofile))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
393 return ifofile;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
394
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
395 fprintf(stderr, "libdvdread,ifoOpenVMGI(): Invalid main menu IFO (VIDEO_TS.IFO).\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
396 ifoClose(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
397 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
398 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
399
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
400
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
401 ifo_handle_t *ifoOpenVTSI(dvd_reader_t *dvd, int title) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
402 ifo_handle_t *ifofile;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
403
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
404 ifofile = (ifo_handle_t *)malloc(sizeof(ifo_handle_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
405 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
406 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
407
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
408 memset(ifofile, 0, sizeof(ifo_handle_t));
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
409
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
410 if(title <= 0 || title > 99) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
411 fprintf(stderr, "libdvdread: ifoOpenVTSI invalid title (%d).\n", title);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
412 free(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
413 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
414 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
415
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
416 ifofile->file = DVDOpenFile(dvd, title, DVD_READ_INFO_FILE);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
417 if(!ifofile->file) /* Should really catch any error and try to fallback */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
418 ifofile->file = DVDOpenFile(dvd, title, DVD_READ_INFO_BACKUP_FILE);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
419 if(!ifofile->file) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
420 fprintf(stderr, "libdvdread: Can't open file VTS_%02d_0.IFO.\n", title);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
421 free(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
422 return NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
423 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
424
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
425 ifoRead_VTS(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
426 if(ifofile->vtsi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
427 return ifofile;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
428
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
429 fprintf(stderr, "libdvdread: Invalid IFO for title %d (VTS_%02d_0.IFO).\n",
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
430 title, title);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
431 ifoClose(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
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
435
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
436 void ifoClose(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
437 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
438 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
439
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
440 ifoFree_VOBU_ADMAP(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
441 ifoFree_TITLE_VOBU_ADMAP(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
442 ifoFree_C_ADT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
443 ifoFree_TITLE_C_ADT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
444 ifoFree_TXTDT_MGI(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
445 ifoFree_VTS_ATRT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
446 ifoFree_PTL_MAIT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
447 ifoFree_PGCI_UT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
448 ifoFree_TT_SRPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
449 ifoFree_FP_PGC(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
450 ifoFree_PGCIT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
451 ifoFree_VTS_PTT_SRPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
452 ifoFree_VTS_TMAPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
453
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
454 if(ifofile->vmgi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
455 free(ifofile->vmgi_mat);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
456
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
457 if(ifofile->vtsi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
458 free(ifofile->vtsi_mat);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
459
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
460 DVDCloseFile(ifofile->file);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
461 ifofile->file = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
462 free(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
463 ifofile = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
464 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
465
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
466
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
467 static int ifoRead_VMG(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
468 vmgi_mat_t *vmgi_mat;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
469
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
470 vmgi_mat = (vmgi_mat_t *)malloc(sizeof(vmgi_mat_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
471 if(!vmgi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
472 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
473
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
474 ifofile->vmgi_mat = vmgi_mat;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
475
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
476 if(!DVDFileSeek_(ifofile->file, 0)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
477 free(ifofile->vmgi_mat);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
478 ifofile->vmgi_mat = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
479 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
480 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
481
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
482 if(!DVDReadBytes(ifofile->file, vmgi_mat, sizeof(vmgi_mat_t))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
483 free(ifofile->vmgi_mat);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
484 ifofile->vmgi_mat = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
485 return 0;
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 if(strncmp("DVDVIDEO-VMG", vmgi_mat->vmg_identifier, 12) != 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
489 free(ifofile->vmgi_mat);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
490 ifofile->vmgi_mat = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
491 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
492 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
493
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
494 B2N_32(vmgi_mat->vmg_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
495 B2N_32(vmgi_mat->vmgi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
496 B2N_32(vmgi_mat->vmg_category);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
497 B2N_16(vmgi_mat->vmg_nr_of_volumes);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
498 B2N_16(vmgi_mat->vmg_this_volume_nr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
499 B2N_16(vmgi_mat->vmg_nr_of_title_sets);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
500 B2N_64(vmgi_mat->vmg_pos_code);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
501 B2N_32(vmgi_mat->vmgi_last_byte);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
502 B2N_32(vmgi_mat->first_play_pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
503 B2N_32(vmgi_mat->vmgm_vobs);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
504 B2N_32(vmgi_mat->tt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
505 B2N_32(vmgi_mat->vmgm_pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
506 B2N_32(vmgi_mat->ptl_mait);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
507 B2N_32(vmgi_mat->vts_atrt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
508 B2N_32(vmgi_mat->txtdt_mgi);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
509 B2N_32(vmgi_mat->vmgm_c_adt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
510 B2N_32(vmgi_mat->vmgm_vobu_admap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
511 read_video_attr(&vmgi_mat->vmgm_video_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
512 read_audio_attr(&vmgi_mat->vmgm_audio_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
513 read_subp_attr(&vmgi_mat->vmgm_subp_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
514
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
515
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
516 CHECK_ZERO(vmgi_mat->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
517 CHECK_ZERO(vmgi_mat->zero_2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
518 CHECK_ZERO(vmgi_mat->zero_3);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
519 CHECK_ZERO(vmgi_mat->zero_4);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
520 CHECK_ZERO(vmgi_mat->zero_5);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
521 CHECK_ZERO(vmgi_mat->zero_6);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
522 CHECK_ZERO(vmgi_mat->zero_7);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
523 CHECK_ZERO(vmgi_mat->zero_8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
524 CHECK_ZERO(vmgi_mat->zero_9);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
525 CHECK_ZERO(vmgi_mat->zero_10);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
526 CHECK_VALUE(vmgi_mat->vmg_last_sector != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
527 CHECK_VALUE(vmgi_mat->vmgi_last_sector != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
528 CHECK_VALUE(vmgi_mat->vmgi_last_sector * 2 <= vmgi_mat->vmg_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
529 CHECK_VALUE(vmgi_mat->vmgi_last_sector * 2 <= vmgi_mat->vmg_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
530 CHECK_VALUE(vmgi_mat->vmg_nr_of_volumes != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
531 CHECK_VALUE(vmgi_mat->vmg_this_volume_nr != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
532 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
533 CHECK_VALUE(vmgi_mat->disc_side == 1 || vmgi_mat->disc_side == 2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
534 CHECK_VALUE(vmgi_mat->vmg_nr_of_title_sets != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
535 CHECK_VALUE(vmgi_mat->vmgi_last_byte >= 341);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
536 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
537 vmgi_mat->vmgi_last_sector);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
538 /* It seems that first_play_pgc is optional. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
539 CHECK_VALUE(vmgi_mat->first_play_pgc < vmgi_mat->vmgi_last_byte);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
540 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
541 (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
542 vmgi_mat->vmgm_vobs < vmgi_mat->vmg_last_sector));
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
543 CHECK_VALUE(vmgi_mat->tt_srpt <= vmgi_mat->vmgi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
544 CHECK_VALUE(vmgi_mat->vmgm_pgci_ut <= vmgi_mat->vmgi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
545 CHECK_VALUE(vmgi_mat->ptl_mait <= vmgi_mat->vmgi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
546 CHECK_VALUE(vmgi_mat->vts_atrt <= vmgi_mat->vmgi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
547 CHECK_VALUE(vmgi_mat->txtdt_mgi <= vmgi_mat->vmgi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
548 CHECK_VALUE(vmgi_mat->vmgm_c_adt <= vmgi_mat->vmgi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
549 CHECK_VALUE(vmgi_mat->vmgm_vobu_admap <= vmgi_mat->vmgi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
550
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
551 CHECK_VALUE(vmgi_mat->nr_of_vmgm_audio_streams <= 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
552 CHECK_VALUE(vmgi_mat->nr_of_vmgm_subp_streams <= 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
553
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
554 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
555 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
556
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
557
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
558 static int ifoRead_VTS(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
559 vtsi_mat_t *vtsi_mat;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
560 int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
561
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
562 vtsi_mat = (vtsi_mat_t *)malloc(sizeof(vtsi_mat_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
563 if(!vtsi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
564 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
565
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
566 ifofile->vtsi_mat = vtsi_mat;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
567
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
568 if(!DVDFileSeek_(ifofile->file, 0)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
569 free(ifofile->vtsi_mat);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
570 ifofile->vtsi_mat = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
571 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
572 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
573
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
574 if(!(DVDReadBytes(ifofile->file, vtsi_mat, sizeof(vtsi_mat_t)))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
575 free(ifofile->vtsi_mat);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
576 ifofile->vtsi_mat = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
577 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
578 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
579
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
580 if(strncmp("DVDVIDEO-VTS", vtsi_mat->vts_identifier, 12) != 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
581 free(ifofile->vtsi_mat);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
582 ifofile->vtsi_mat = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
583 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
584 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
585
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
586 read_video_attr(&vtsi_mat->vtsm_video_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
587 read_video_attr(&vtsi_mat->vts_video_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
588 read_audio_attr(&vtsi_mat->vtsm_audio_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
589 for(i=0; i<8; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
590 read_audio_attr(&vtsi_mat->vts_audio_attr[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
591 read_subp_attr(&vtsi_mat->vtsm_subp_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
592 for(i=0; i<32; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
593 read_subp_attr(&vtsi_mat->vts_subp_attr[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
594 B2N_32(vtsi_mat->vts_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
595 B2N_32(vtsi_mat->vtsi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
596 B2N_32(vtsi_mat->vts_category);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
597 B2N_32(vtsi_mat->vtsi_last_byte);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
598 B2N_32(vtsi_mat->vtsm_vobs);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
599 B2N_32(vtsi_mat->vtstt_vobs);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
600 B2N_32(vtsi_mat->vts_ptt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
601 B2N_32(vtsi_mat->vts_pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
602 B2N_32(vtsi_mat->vtsm_pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
603 B2N_32(vtsi_mat->vts_tmapt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
604 B2N_32(vtsi_mat->vtsm_c_adt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
605 B2N_32(vtsi_mat->vtsm_vobu_admap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
606 B2N_32(vtsi_mat->vts_c_adt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
607 B2N_32(vtsi_mat->vts_vobu_admap);
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 CHECK_ZERO(vtsi_mat->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
611 CHECK_ZERO(vtsi_mat->zero_2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
612 CHECK_ZERO(vtsi_mat->zero_3);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
613 CHECK_ZERO(vtsi_mat->zero_4);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
614 CHECK_ZERO(vtsi_mat->zero_5);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
615 CHECK_ZERO(vtsi_mat->zero_6);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
616 CHECK_ZERO(vtsi_mat->zero_7);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
617 CHECK_ZERO(vtsi_mat->zero_8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
618 CHECK_ZERO(vtsi_mat->zero_9);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
619 CHECK_ZERO(vtsi_mat->zero_10);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
620 CHECK_ZERO(vtsi_mat->zero_11);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
621 CHECK_ZERO(vtsi_mat->zero_12);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
622 CHECK_ZERO(vtsi_mat->zero_13);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
623 CHECK_ZERO(vtsi_mat->zero_14);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
624 CHECK_ZERO(vtsi_mat->zero_15);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
625 CHECK_ZERO(vtsi_mat->zero_16);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
626 CHECK_ZERO(vtsi_mat->zero_17);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
627 CHECK_ZERO(vtsi_mat->zero_18);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
628 CHECK_ZERO(vtsi_mat->zero_19);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
629 CHECK_ZERO(vtsi_mat->zero_20);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
630 CHECK_ZERO(vtsi_mat->zero_21);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
631 CHECK_VALUE(vtsi_mat->vtsi_last_sector*2 <= vtsi_mat->vts_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
632 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
633 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
634 (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
635 vtsi_mat->vtsm_vobs < vtsi_mat->vts_last_sector));
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
636 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
637 (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
638 vtsi_mat->vtstt_vobs < vtsi_mat->vts_last_sector));
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
639 CHECK_VALUE(vtsi_mat->vts_ptt_srpt <= vtsi_mat->vtsi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
640 CHECK_VALUE(vtsi_mat->vts_pgcit <= vtsi_mat->vtsi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
641 CHECK_VALUE(vtsi_mat->vtsm_pgci_ut <= vtsi_mat->vtsi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
642 CHECK_VALUE(vtsi_mat->vts_tmapt <= vtsi_mat->vtsi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
643 CHECK_VALUE(vtsi_mat->vtsm_c_adt <= vtsi_mat->vtsi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
644 CHECK_VALUE(vtsi_mat->vtsm_vobu_admap <= vtsi_mat->vtsi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
645 CHECK_VALUE(vtsi_mat->vts_c_adt <= vtsi_mat->vtsi_last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
646 CHECK_VALUE(vtsi_mat->vts_vobu_admap <= vtsi_mat->vtsi_last_sector);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
647
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
648 CHECK_VALUE(vtsi_mat->nr_of_vtsm_audio_streams <= 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
649 CHECK_VALUE(vtsi_mat->nr_of_vtsm_subp_streams <= 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
650
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
651 CHECK_VALUE(vtsi_mat->nr_of_vts_audio_streams <= 8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
652 for(i = vtsi_mat->nr_of_vts_audio_streams; i < 8; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
653 CHECK_ZERO(vtsi_mat->vts_audio_attr[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
654
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
655 CHECK_VALUE(vtsi_mat->nr_of_vts_subp_streams <= 32);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
656 for(i = vtsi_mat->nr_of_vts_subp_streams; i < 32; i++)
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
657 CHECK_ZERO(vtsi_mat->vts_subp_attr[i]);
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
658
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
659 for(i = 0; i < 8; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
660 read_multichannel_ext(&vtsi_mat->vts_mu_audio_attr[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
661 CHECK_ZERO0(vtsi_mat->vts_mu_audio_attr[i].zero1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
662 CHECK_ZERO0(vtsi_mat->vts_mu_audio_attr[i].zero2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
663 CHECK_ZERO0(vtsi_mat->vts_mu_audio_attr[i].zero3);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
664 CHECK_ZERO0(vtsi_mat->vts_mu_audio_attr[i].zero4);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
665 CHECK_ZERO0(vtsi_mat->vts_mu_audio_attr[i].zero5);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
666 CHECK_ZERO(vtsi_mat->vts_mu_audio_attr[i].zero6);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
667 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
668
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
669 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
670 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
671
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
672
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
673 static int ifoRead_PGC_COMMAND_TBL(ifo_handle_t *ifofile,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
674 pgc_command_tbl_t *cmd_tbl,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
675 unsigned int offset) {
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
676
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
677 memset(cmd_tbl, 0, sizeof(pgc_command_tbl_t));
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
678
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
679 if(!DVDFileSeek_(ifofile->file, offset))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
680 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
681
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
682 if(!(DVDReadBytes(ifofile->file, cmd_tbl, PGC_COMMAND_TBL_SIZE)))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
683 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
684
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
685 B2N_16(cmd_tbl->nr_of_pre);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
686 B2N_16(cmd_tbl->nr_of_post);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
687 B2N_16(cmd_tbl->nr_of_cell);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
688
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
689 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
690
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
691 if(cmd_tbl->nr_of_pre != 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
692 unsigned int pre_cmds_size = cmd_tbl->nr_of_pre * COMMAND_DATA_SIZE;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
693 cmd_tbl->pre_cmds = (vm_cmd_t *)malloc(pre_cmds_size);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
694 if(!cmd_tbl->pre_cmds)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
695 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
696
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
697 if(!(DVDReadBytes(ifofile->file, cmd_tbl->pre_cmds, pre_cmds_size))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
698 free(cmd_tbl->pre_cmds);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
699 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
700 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
701 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
702
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
703 if(cmd_tbl->nr_of_post != 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
704 unsigned int post_cmds_size = cmd_tbl->nr_of_post * COMMAND_DATA_SIZE;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
705 cmd_tbl->post_cmds = (vm_cmd_t *)malloc(post_cmds_size);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
706 if(!cmd_tbl->post_cmds) {
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
707 if(cmd_tbl->pre_cmds)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
708 free(cmd_tbl->pre_cmds);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
709 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
710 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
711 if(!(DVDReadBytes(ifofile->file, cmd_tbl->post_cmds, post_cmds_size))) {
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
712 if(cmd_tbl->pre_cmds)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
713 free(cmd_tbl->pre_cmds);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
714 free(cmd_tbl->post_cmds);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
715 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
716 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
717 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
718
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
719 if(cmd_tbl->nr_of_cell != 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
720 unsigned int cell_cmds_size = cmd_tbl->nr_of_cell * COMMAND_DATA_SIZE;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
721 cmd_tbl->cell_cmds = (vm_cmd_t *)malloc(cell_cmds_size);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
722 if(!cmd_tbl->cell_cmds) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
723 if(cmd_tbl->pre_cmds)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
724 free(cmd_tbl->pre_cmds);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
725 if(cmd_tbl->post_cmds)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
726 free(cmd_tbl->post_cmds);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
727 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
728 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
729 if(!(DVDReadBytes(ifofile->file, cmd_tbl->cell_cmds, cell_cmds_size))) {
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
730 if(cmd_tbl->pre_cmds)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
731 free(cmd_tbl->pre_cmds);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
732 if(cmd_tbl->post_cmds)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
733 free(cmd_tbl->post_cmds);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
734 free(cmd_tbl->cell_cmds);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
735 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
736 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
737 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
738
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
739 /*
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
740 * 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
741 */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
742 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
743 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
744
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
745
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
746 static void ifoFree_PGC_COMMAND_TBL(pgc_command_tbl_t *cmd_tbl) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
747 if(cmd_tbl) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
748 if(cmd_tbl->nr_of_pre && cmd_tbl->pre_cmds)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
749 free(cmd_tbl->pre_cmds);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
750 if(cmd_tbl->nr_of_post && cmd_tbl->post_cmds)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
751 free(cmd_tbl->post_cmds);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
752 if(cmd_tbl->nr_of_cell && cmd_tbl->cell_cmds)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
753 free(cmd_tbl->cell_cmds);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
754 free(cmd_tbl);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
755 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
756 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
757
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
758 static int ifoRead_PGC_PROGRAM_MAP(ifo_handle_t *ifofile,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
759 pgc_program_map_t *program_map,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
760 unsigned int nr, unsigned int offset) {
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
761 unsigned int size = nr * sizeof(pgc_program_map_t);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
762
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
763 if(!DVDFileSeek_(ifofile->file, offset))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
764 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
765
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
766 if(!(DVDReadBytes(ifofile->file, program_map, size)))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
767 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
768
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
769 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
770 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
771
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
772 static int ifoRead_CELL_PLAYBACK_TBL(ifo_handle_t *ifofile,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
773 cell_playback_t *cell_playback,
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
774 unsigned int nr, unsigned int offset) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
775 unsigned int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
776 unsigned int size = nr * sizeof(cell_playback_t);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
777
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
778 if(!DVDFileSeek_(ifofile->file, offset))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
779 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
780
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
781 if(!(DVDReadBytes(ifofile->file, cell_playback, size)))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
782 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
783
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
784 for(i = 0; i < nr; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
785 read_cell_playback(&cell_playback[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
786 /* Changed < to <= because this was false in the movie 'Pi'. */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
787 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
788 cell_playback[i].last_sector);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
789 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
790 cell_playback[i].last_vobu_start_sector);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
791 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
792
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
793 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
794 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
795
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
796
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
797 static int ifoRead_CELL_POSITION_TBL(ifo_handle_t *ifofile,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
798 cell_position_t *cell_position,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
799 unsigned int nr, unsigned int offset) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
800 unsigned int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
801 unsigned int size = nr * sizeof(cell_position_t);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
802
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
803 if(!DVDFileSeek_(ifofile->file, offset))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
804 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
805
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
806 if(!(DVDReadBytes(ifofile->file, cell_position, size)))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
807 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
808
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
809 for(i = 0; i < nr; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
810 B2N_16(cell_position[i].vob_id_nr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
811 CHECK_ZERO(cell_position[i].zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
812 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
813
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
814 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
815 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
816
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
817 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
818 unsigned int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
819
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
820 if(!DVDFileSeek_(ifofile->file, offset))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
821 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
822
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
823 if(!(DVDReadBytes(ifofile->file, pgc, PGC_SIZE)))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
824 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
825
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
826 read_user_ops(&pgc->prohibited_ops);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
827 B2N_16(pgc->next_pgc_nr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
828 B2N_16(pgc->prev_pgc_nr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
829 B2N_16(pgc->goup_pgc_nr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
830 B2N_16(pgc->command_tbl_offset);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
831 B2N_16(pgc->program_map_offset);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
832 B2N_16(pgc->cell_playback_offset);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
833 B2N_16(pgc->cell_position_offset);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
834
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
835 for(i = 0; i < 8; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
836 B2N_16(pgc->audio_control[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
837 for(i = 0; i < 32; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
838 B2N_32(pgc->subp_control[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
839 for(i = 0; i < 16; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
840 B2N_32(pgc->palette[i]);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
841
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
842 CHECK_ZERO(pgc->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
843 CHECK_VALUE(pgc->nr_of_programs <= pgc->nr_of_cells);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
844
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
845 /* verify time (look at print_time) */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
846 for(i = 0; i < 8; i++)
43
6177a05fa534 Use parens to make the 'is present' mask explicit
erik
parents: 33
diff changeset
847 if(!(pgc->audio_control[i] & 0x8000)) /* The 'is present' bit */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
848 CHECK_ZERO(pgc->audio_control[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
849 for(i = 0; i < 32; i++)
43
6177a05fa534 Use parens to make the 'is present' mask explicit
erik
parents: 33
diff changeset
850 if(!(pgc->subp_control[i] & 0x80000000)) /* The 'is present' bit */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
851 CHECK_ZERO(pgc->subp_control[i]);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
852
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
853 /* 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
854 if(pgc->nr_of_programs == 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
855 CHECK_ZERO(pgc->still_time);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
856 CHECK_ZERO(pgc->pg_playback_mode); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
857 CHECK_VALUE(pgc->program_map_offset == 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
858 CHECK_VALUE(pgc->cell_playback_offset == 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
859 CHECK_VALUE(pgc->cell_position_offset == 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
860 } else {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
861 CHECK_VALUE(pgc->program_map_offset != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
862 CHECK_VALUE(pgc->cell_playback_offset != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
863 CHECK_VALUE(pgc->cell_position_offset != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
864 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
865
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
866 if(pgc->command_tbl_offset != 0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
867 pgc->command_tbl = malloc(sizeof(pgc_command_tbl_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
868 if(!pgc->command_tbl)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
869 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
870
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
871 if(!ifoRead_PGC_COMMAND_TBL(ifofile, pgc->command_tbl,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
872 offset + pgc->command_tbl_offset)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
873 free(pgc->command_tbl);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
874 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
875 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
876 } else {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
877 pgc->command_tbl = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
878 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
879
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
880 if(pgc->program_map_offset != 0 && pgc->nr_of_programs>0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
881 pgc->program_map = malloc(pgc->nr_of_programs * sizeof(pgc_program_map_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
882 if(!pgc->program_map) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
883 ifoFree_PGC_COMMAND_TBL(pgc->command_tbl);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
884 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
885 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
886 if(!ifoRead_PGC_PROGRAM_MAP(ifofile, pgc->program_map,pgc->nr_of_programs,
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
887 offset + pgc->program_map_offset)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
888 ifoFree_PGC_COMMAND_TBL(pgc->command_tbl);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
889 free(pgc->program_map);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
890 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
891 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
892 } else {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
893 pgc->program_map = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
894 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
895
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
896 if(pgc->cell_playback_offset != 0 && pgc->nr_of_cells>0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
897 pgc->cell_playback = malloc(pgc->nr_of_cells * sizeof(cell_playback_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
898 if(!pgc->cell_playback) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
899 ifoFree_PGC_COMMAND_TBL(pgc->command_tbl);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
900 if(pgc->program_map)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
901 free(pgc->program_map);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
902 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
903 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
904 if(!ifoRead_CELL_PLAYBACK_TBL(ifofile, pgc->cell_playback,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
905 pgc->nr_of_cells,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
906 offset + pgc->cell_playback_offset)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
907 ifoFree_PGC_COMMAND_TBL(pgc->command_tbl);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
908 if(pgc->program_map)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
909 free(pgc->program_map);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
910 free(pgc->cell_playback);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
911 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
912 }
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 pgc->cell_playback = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
915 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
916
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
917 if(pgc->cell_position_offset != 0 && pgc->nr_of_cells>0) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
918 pgc->cell_position = malloc(pgc->nr_of_cells * sizeof(cell_position_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
919 if(!pgc->cell_position) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
920 ifoFree_PGC(pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
921 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
922 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
923 if(!ifoRead_CELL_POSITION_TBL(ifofile, pgc->cell_position,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
924 pgc->nr_of_cells,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
925 offset + pgc->cell_position_offset)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
926 ifoFree_PGC(pgc);
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->cell_position = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
931 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
932
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
933 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
934 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
935
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
936 int ifoRead_FP_PGC(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
937
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
938 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
939 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
940
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
941 if(!ifofile->vmgi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
942 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
943
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
944 /* It seems that first_play_pgc is optional after all. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
945 ifofile->first_play_pgc = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
946 if(ifofile->vmgi_mat->first_play_pgc == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
947 return 1;
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 ifofile->first_play_pgc = (pgc_t *)malloc(sizeof(pgc_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
950 if(!ifofile->first_play_pgc)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
951 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
952
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
953 if(!ifoRead_PGC(ifofile, ifofile->first_play_pgc,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
954 ifofile->vmgi_mat->first_play_pgc)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
955 free(ifofile->first_play_pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
956 ifofile->first_play_pgc = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
957 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
958 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
959
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
960 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
961 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
962
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
963 static void ifoFree_PGC(pgc_t *pgc) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
964 if(pgc) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
965 ifoFree_PGC_COMMAND_TBL(pgc->command_tbl);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
966 if(pgc->program_map)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
967 free(pgc->program_map);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
968 if(pgc->cell_playback)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
969 free(pgc->cell_playback);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
970 if(pgc->cell_position)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
971 free(pgc->cell_position);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
972 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
973 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
974
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
975 void ifoFree_FP_PGC(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
976 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
977 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
978
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
979 if(ifofile->first_play_pgc) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
980 ifoFree_PGC(ifofile->first_play_pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
981 free(ifofile->first_play_pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
982 ifofile->first_play_pgc = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
983 }
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
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
987 int ifoRead_TT_SRPT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
988 tt_srpt_t *tt_srpt;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
989 int i, info_length;
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;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
996
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
997 if(ifofile->vmgi_mat->tt_srpt == 0) /* mandatory */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
998 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
999
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1000 if(!DVDFileSeek_(ifofile->file, ifofile->vmgi_mat->tt_srpt * DVD_BLOCK_LEN))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1001 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1002
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1003 tt_srpt = (tt_srpt_t *)malloc(sizeof(tt_srpt_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1004 if(!tt_srpt)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1005 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1006
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1007 ifofile->tt_srpt = tt_srpt;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1008
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1009 if(!(DVDReadBytes(ifofile->file, tt_srpt, TT_SRPT_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1010 fprintf(stderr, "libdvdread: Unable to read read TT_SRPT.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1011 free(tt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1012 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1013 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1014
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1015 B2N_16(tt_srpt->nr_of_srpts);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1016 B2N_32(tt_srpt->last_byte);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1017
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1018 info_length = tt_srpt->last_byte + 1 - TT_SRPT_SIZE;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1019
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1020 tt_srpt->title = (title_info_t *)malloc(info_length);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1021 if(!tt_srpt->title) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1022 free(tt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1023 ifofile->tt_srpt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1024 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1025 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1026 if(!(DVDReadBytes(ifofile->file, tt_srpt->title, info_length))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1027 fprintf(stderr, "libdvdread: Unable to read read TT_SRPT.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1028 ifoFree_TT_SRPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1029 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1030 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1031
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1032 for(i = 0; i < tt_srpt->nr_of_srpts; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1033 B2N_16(tt_srpt->title[i].nr_of_ptts);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1034 B2N_16(tt_srpt->title[i].parental_id);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1035 B2N_32(tt_srpt->title[i].title_set_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1036 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1037
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1038
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1039 CHECK_ZERO(tt_srpt->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1040 CHECK_VALUE(tt_srpt->nr_of_srpts != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1041 CHECK_VALUE(tt_srpt->nr_of_srpts < 100); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1042 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
1043
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1044 for(i = 0; i < tt_srpt->nr_of_srpts; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1045 read_playback_type(&tt_srpt->title[i].pb_ty);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1046 CHECK_VALUE(tt_srpt->title[i].pb_ty.zero_1 == 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1047 CHECK_VALUE(tt_srpt->title[i].nr_of_angles != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1048 CHECK_VALUE(tt_srpt->title[i].nr_of_angles < 10);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1049 /* CHECK_VALUE(tt_srpt->title[i].nr_of_ptts != 0); */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1050 /* XXX: this assertion breaks Ghostbusters: */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1051 CHECK_VALUE(tt_srpt->title[i].nr_of_ptts < 1000); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1052 CHECK_VALUE(tt_srpt->title[i].title_set_nr != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1053 CHECK_VALUE(tt_srpt->title[i].title_set_nr < 100); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1054 CHECK_VALUE(tt_srpt->title[i].vts_ttn != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1055 CHECK_VALUE(tt_srpt->title[i].vts_ttn < 100); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1056 /* CHECK_VALUE(tt_srpt->title[i].title_set_sector != 0); */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1057 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1058
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1059 /* Make this a function */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1060 #if 0
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1061 if(memcmp((uint8_t *)tt_srpt->title +
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1062 tt_srpt->nr_of_srpts * sizeof(title_info_t),
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1063 my_friendly_zeros,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1064 info_length - tt_srpt->nr_of_srpts * sizeof(title_info_t))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1065 fprintf(stderr, "VMG_PTT_SRPT slack is != 0, ");
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1066 hexdump((uint8_t *)tt_srpt->title +
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1067 tt_srpt->nr_of_srpts * sizeof(title_info_t),
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1068 info_length - tt_srpt->nr_of_srpts * sizeof(title_info_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1069 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1070 #endif
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1071
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1072 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1073 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1074
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1075
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1076 void ifoFree_TT_SRPT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1077 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1078 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1079
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1080 if(ifofile->tt_srpt) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1081 free(ifofile->tt_srpt->title);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1082 free(ifofile->tt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1083 ifofile->tt_srpt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1084 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1085 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1086
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1087
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1088 int ifoRead_VTS_PTT_SRPT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1089 vts_ptt_srpt_t *vts_ptt_srpt;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1090 int info_length, i, j;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1091 uint32_t *data;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1092
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1093 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1094 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1095
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1096 if(!ifofile->vtsi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1097 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1098
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1099 if(ifofile->vtsi_mat->vts_ptt_srpt == 0) /* mandatory */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1100 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1101
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1102 if(!DVDFileSeek_(ifofile->file,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1103 ifofile->vtsi_mat->vts_ptt_srpt * DVD_BLOCK_LEN))
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1104 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1105
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1106 vts_ptt_srpt = (vts_ptt_srpt_t *)malloc(sizeof(vts_ptt_srpt_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1107 if(!vts_ptt_srpt)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1108 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1109
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1110 ifofile->vts_ptt_srpt = vts_ptt_srpt;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1111
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1112 if(!(DVDReadBytes(ifofile->file, vts_ptt_srpt, VTS_PTT_SRPT_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1113 fprintf(stderr, "libdvdread: Unable to read PTT search table.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1114 free(vts_ptt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1115 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1116 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1117
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1118 B2N_16(vts_ptt_srpt->nr_of_srpts);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1119 B2N_32(vts_ptt_srpt->last_byte);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1120
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1121 CHECK_ZERO(vts_ptt_srpt->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1122 CHECK_VALUE(vts_ptt_srpt->nr_of_srpts != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1123 CHECK_VALUE(vts_ptt_srpt->nr_of_srpts < 100); /* ?? */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1124
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1125 info_length = vts_ptt_srpt->last_byte + 1 - VTS_PTT_SRPT_SIZE;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1126
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1127 data = (uint32_t *)malloc(info_length);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1128 if(!data) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1129 free(vts_ptt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1130 ifofile->vts_ptt_srpt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1131 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1132 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1133 if(!(DVDReadBytes(ifofile->file, data, info_length))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1134 fprintf(stderr, "libdvdread: Unable to read PTT search table.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1135 free(vts_ptt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1136 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1137 ifofile->vts_ptt_srpt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1138 return 0;
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 for(i = 0; i < vts_ptt_srpt->nr_of_srpts; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1142 B2N_32(data[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1143 /* assert(data[i] + sizeof(ptt_info_t) <= vts_ptt_srpt->last_byte + 1);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1144 Magic Knight Rayearth Daybreak is mastered very strange and has
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1145 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
1146 of the vts_ptt_srpt structure. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1147 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
1148 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1149
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1150 vts_ptt_srpt->ttu_offset = data;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1151
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1152 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
1153 if(!vts_ptt_srpt->title) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1154 free(vts_ptt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1155 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1156 ifofile->vts_ptt_srpt = 0;
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 for(i = 0; i < vts_ptt_srpt->nr_of_srpts; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1160 int n;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1161 if(i < vts_ptt_srpt->nr_of_srpts - 1)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1162 n = (data[i+1] - data[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1163 else
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1164 n = (vts_ptt_srpt->last_byte + 1 - data[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1165 /* assert(n > 0 && (n % 4) == 0);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1166 Magic Knight Rayearth Daybreak is mastered very strange and has
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1167 Titles with 0 PTTs. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1168 if(n < 0) n = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1169 CHECK_VALUE(n % 4 == 0);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1170
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1171 vts_ptt_srpt->title[i].nr_of_ptts = n / 4;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1172 vts_ptt_srpt->title[i].ptt = malloc(n * sizeof(ptt_info_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1173 if(!vts_ptt_srpt->title[i].ptt) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1174 for(n = 0; n < i; n++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1175 free(vts_ptt_srpt->title[n].ptt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1176 free(vts_ptt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1177 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1178 ifofile->vts_ptt_srpt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1179 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1180 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1181 for(j = 0; j < vts_ptt_srpt->title[i].nr_of_ptts; j++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1182 /* The assert placed here because of Magic Knight Rayearth Daybreak */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1183 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
1184 vts_ptt_srpt->title[i].ptt[j].pgcn
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1185 = *(uint16_t*)(((char *)data) + data[i] + 4*j - VTS_PTT_SRPT_SIZE);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1186 vts_ptt_srpt->title[i].ptt[j].pgn
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1187 = *(uint16_t*)(((char *)data) + data[i] + 4*j + 2 - VTS_PTT_SRPT_SIZE);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1188 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1189 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1190
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1191 for(i = 0; i < vts_ptt_srpt->nr_of_srpts; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1192 for(j = 0; j < vts_ptt_srpt->title[i].nr_of_ptts; j++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1193 B2N_16(vts_ptt_srpt->title[i].ptt[j].pgcn);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1194 B2N_16(vts_ptt_srpt->title[i].ptt[j].pgn);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1195 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1196 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1197
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1198 for(i = 0; i < vts_ptt_srpt->nr_of_srpts; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1199 CHECK_VALUE(vts_ptt_srpt->title[i].nr_of_ptts < 1000); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1200 for(j = 0; j < vts_ptt_srpt->title[i].nr_of_ptts; j++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1201 CHECK_VALUE(vts_ptt_srpt->title[i].ptt[j].pgcn != 0 );
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1202 CHECK_VALUE(vts_ptt_srpt->title[i].ptt[j].pgcn < 1000); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1203 CHECK_VALUE(vts_ptt_srpt->title[i].ptt[j].pgn != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1204 CHECK_VALUE(vts_ptt_srpt->title[i].ptt[j].pgn < 100); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1205 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1206 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1207
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1208 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1209 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1210
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1211
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1212 void ifoFree_VTS_PTT_SRPT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1213 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1214 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1215
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1216 if(ifofile->vts_ptt_srpt) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1217 int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1218 for(i = 0; i < ifofile->vts_ptt_srpt->nr_of_srpts; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1219 free(ifofile->vts_ptt_srpt->title[i].ptt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1220 free(ifofile->vts_ptt_srpt->ttu_offset);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1221 free(ifofile->vts_ptt_srpt->title);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1222 free(ifofile->vts_ptt_srpt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1223 ifofile->vts_ptt_srpt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1224 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1225 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1226
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1227
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1228 int ifoRead_PTL_MAIT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1229 ptl_mait_t *ptl_mait;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1230 int info_length;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1231 unsigned int i, j;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1232
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1233 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1234 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1235
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1236 if(!ifofile->vmgi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1237 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1238
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1239 if(ifofile->vmgi_mat->ptl_mait == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1240 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1241
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1242 if(!DVDFileSeek_(ifofile->file, ifofile->vmgi_mat->ptl_mait * DVD_BLOCK_LEN))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1243 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1244
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1245 ptl_mait = (ptl_mait_t *)malloc(sizeof(ptl_mait_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1246 if(!ptl_mait)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1247 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1248
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1249 ifofile->ptl_mait = ptl_mait;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1250
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1251 if(!(DVDReadBytes(ifofile->file, ptl_mait, PTL_MAIT_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1252 free(ptl_mait);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1253 ifofile->ptl_mait = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1254 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1255 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1256
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1257 B2N_16(ptl_mait->nr_of_countries);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1258 B2N_16(ptl_mait->nr_of_vtss);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1259 B2N_32(ptl_mait->last_byte);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1260
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1261 CHECK_VALUE(ptl_mait->nr_of_countries != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1262 CHECK_VALUE(ptl_mait->nr_of_countries < 100); /* ?? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1263 CHECK_VALUE(ptl_mait->nr_of_vtss != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1264 CHECK_VALUE(ptl_mait->nr_of_vtss < 100); /* ?? */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1265 CHECK_VALUE(ptl_mait->nr_of_countries * PTL_MAIT_COUNTRY_SIZE
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1266 <= ptl_mait->last_byte + 1 - PTL_MAIT_SIZE);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1267
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1268 info_length = ptl_mait->nr_of_countries * sizeof(ptl_mait_country_t);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1269 ptl_mait->countries = (ptl_mait_country_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1270 if(!ptl_mait->countries) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1271 free(ptl_mait);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1272 ifofile->ptl_mait = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1273 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1274 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1275
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1276 for(i = 0; i < ptl_mait->nr_of_countries; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1277 if(!(DVDReadBytes(ifofile->file, &ptl_mait->countries[i], PTL_MAIT_COUNTRY_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1278 fprintf(stderr, "libdvdread: Unable to read PTL_MAIT.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1279 free(ptl_mait->countries);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1280 free(ptl_mait);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1281 ifofile->ptl_mait = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1282 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1283 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1284 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1285
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1286 for(i = 0; i < ptl_mait->nr_of_countries; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1287 B2N_16(ptl_mait->countries[i].country_code);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1288 B2N_16(ptl_mait->countries[i].pf_ptl_mai_start_byte);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1289 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1290
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1291 for(i = 0; i < ptl_mait->nr_of_countries; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1292 CHECK_ZERO(ptl_mait->countries[i].zero_1);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1293 CHECK_ZERO(ptl_mait->countries[i].zero_2);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1294 CHECK_VALUE(ptl_mait->countries[i].pf_ptl_mai_start_byte
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1295 + 8*2 * (ptl_mait->nr_of_vtss + 1) <= ptl_mait->last_byte + 1);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1296 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1297
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1298 for(i = 0; i < ptl_mait->nr_of_countries; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1299 uint16_t *pf_temp;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1300
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1301 if(!DVDFileSeek_(ifofile->file,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1302 ifofile->vmgi_mat->ptl_mait * DVD_BLOCK_LEN
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1303 + ptl_mait->countries[i].pf_ptl_mai_start_byte)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1304 fprintf(stderr, "libdvdread: Unable to seak PTL_MAIT table.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1305 free(ptl_mait->countries);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1306 free(ptl_mait);
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 info_length = (ptl_mait->nr_of_vtss + 1) * sizeof(pf_level_t);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1310 pf_temp = (uint16_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1311 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
1312 free_ptl_mait(ptl_mait, i);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1313 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1314 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1315 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
1316 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
1317 free(pf_temp);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1318 free_ptl_mait(ptl_mait, i);
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1319 return 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1320 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1321 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
1322 B2N_16(pf_temp[j]);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1323 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1324 ptl_mait->countries[i].pf_ptl_mai = (pf_level_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1325 if(!ptl_mait->countries[i].pf_ptl_mai) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1326 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
1327 free_ptl_mait(ptl_mait, i);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1328 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1329 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1330 { /* Transpose the array so we can use C indexing. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1331 int level, vts;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1332 for(level = 0; level < 8; level++) {
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1333 for(vts = 0; vts <= ptl_mait->nr_of_vtss; vts++) {
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1334 ptl_mait->countries[i].pf_ptl_mai[vts][level] =
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1335 pf_temp[(7-level)*(ptl_mait->nr_of_vtss+1) + vts];
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1336 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1337 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1338 free(pf_temp);
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 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1342 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1343
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1344 void ifoFree_PTL_MAIT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1345 unsigned int i;
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 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1348 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1349
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1350 if(ifofile->ptl_mait) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1351 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
1352 free(ifofile->ptl_mait->countries[i].pf_ptl_mai);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1353 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1354 free(ifofile->ptl_mait->countries);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1355 free(ifofile->ptl_mait);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1356 ifofile->ptl_mait = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1357 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1358 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1359
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1360 int ifoRead_VTS_TMAPT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1361 vts_tmapt_t *vts_tmapt;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1362 uint32_t *vts_tmap_srp;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1363 unsigned int offset;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1364 int info_length;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1365 unsigned int i, j;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1366
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1367 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1368 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1369
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1370 if(!ifofile->vtsi_mat)
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(ifofile->vtsi_mat->vts_tmapt == 0) { /* optional(?) */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1374 ifofile->vts_tmapt = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1375 fprintf(stderr,"Please send bug report - no VTS_TMAPT ?? \n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1376 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1377 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1378
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1379 offset = ifofile->vtsi_mat->vts_tmapt * DVD_BLOCK_LEN;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1380
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1381 if(!DVDFileSeek_(ifofile->file, offset))
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1382 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1383
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1384 vts_tmapt = (vts_tmapt_t *)malloc(sizeof(vts_tmapt_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1385 if(!vts_tmapt)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1386 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1387
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1388 ifofile->vts_tmapt = vts_tmapt;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1389
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1390 if(!(DVDReadBytes(ifofile->file, vts_tmapt, VTS_TMAPT_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1391 fprintf(stderr, "libdvdread: Unable to read VTS_TMAPT.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1392 free(vts_tmapt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1393 ifofile->vts_tmapt = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1394 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1395 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1396
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1397 B2N_16(vts_tmapt->nr_of_tmaps);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1398 B2N_32(vts_tmapt->last_byte);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1399
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1400 CHECK_ZERO(vts_tmapt->zero_1);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1401
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1402 info_length = vts_tmapt->nr_of_tmaps * 4;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1403
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1404 vts_tmap_srp = (uint32_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1405 if(!vts_tmap_srp) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1406 free(vts_tmapt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1407 ifofile->vts_tmapt = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1408 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1409 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1410
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1411 vts_tmapt->tmap_offset = vts_tmap_srp;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1412
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1413 if(!(DVDReadBytes(ifofile->file, vts_tmap_srp, info_length))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1414 fprintf(stderr, "libdvdread: Unable to read VTS_TMAPT.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1415 free(vts_tmap_srp);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1416 free(vts_tmapt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1417 ifofile->vts_tmapt = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1418 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1419 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1420
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1421 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
1422 B2N_32(vts_tmap_srp[i]);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1423 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1424
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1425
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1426 info_length = vts_tmapt->nr_of_tmaps * sizeof(vts_tmap_t);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1427
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1428 vts_tmapt->tmap = (vts_tmap_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1429 if(!vts_tmapt->tmap) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1430 free(vts_tmap_srp);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1431 free(vts_tmapt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1432 ifofile->vts_tmapt = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1433 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1434 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1435
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1436 memset(vts_tmapt->tmap, 0, info_length); /* So ifoFree_VTS_TMAPT works. */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1437
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1438 for(i = 0; i < vts_tmapt->nr_of_tmaps; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1439 if(!DVDFileSeek_(ifofile->file, offset + vts_tmap_srp[i])) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1440 ifoFree_VTS_TMAPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1441 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1442 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1443
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1444 if(!(DVDReadBytes(ifofile->file, &vts_tmapt->tmap[i], VTS_TMAP_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1445 fprintf(stderr, "libdvdread: Unable to read VTS_TMAP.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1446 ifoFree_VTS_TMAPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1447 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1448 }
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 B2N_16(vts_tmapt->tmap[i].nr_of_entries);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1451 CHECK_ZERO(vts_tmapt->tmap[i].zero_1);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1452
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1453 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
1454 vts_tmapt->tmap[i].map_ent = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1455 continue;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1456 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1457
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1458 info_length = vts_tmapt->tmap[i].nr_of_entries * sizeof(map_ent_t);
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 vts_tmapt->tmap[i].map_ent = (map_ent_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1461 if(!vts_tmapt->tmap[i].map_ent) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1462 ifoFree_VTS_TMAPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1463 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1464 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1465
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1466 if(!(DVDReadBytes(ifofile->file, vts_tmapt->tmap[i].map_ent, info_length))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1467 fprintf(stderr, "libdvdread: Unable to read VTS_TMAP_ENT.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1468 ifoFree_VTS_TMAPT(ifofile);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1469 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1470 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1471
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1472 for(j = 0; j < vts_tmapt->tmap[i].nr_of_entries; j++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1473 B2N_32(vts_tmapt->tmap[i].map_ent[j]);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1474 }
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1475
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1476 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1477 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1478
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1479 void ifoFree_VTS_TMAPT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1480 unsigned int i;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1481
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1482 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1483 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1484
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1485 if(ifofile->vts_tmapt) {
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1486 for(i = 0; i < ifofile->vts_tmapt->nr_of_tmaps; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1487 if(ifofile->vts_tmapt->tmap[i].map_ent)
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1488 free(ifofile->vts_tmapt->tmap[i].map_ent);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1489 free(ifofile->vts_tmapt->tmap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1490 free(ifofile->vts_tmapt->tmap_offset);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1491 free(ifofile->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 }
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
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1497 int ifoRead_TITLE_C_ADT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1498
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1499 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1500 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1501
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1502 if(!ifofile->vtsi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1503 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1504
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1505 if(ifofile->vtsi_mat->vts_c_adt == 0) /* mandatory */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1506 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1507
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1508 ifofile->vts_c_adt = (c_adt_t *)malloc(sizeof(c_adt_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1509 if(!ifofile->vts_c_adt)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1510 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1511
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1512 if(!ifoRead_C_ADT_internal(ifofile, ifofile->vts_c_adt,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1513 ifofile->vtsi_mat->vts_c_adt)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1514 free(ifofile->vts_c_adt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1515 ifofile->vts_c_adt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1516 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1517 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1518
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1519 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1520 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1521
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1522 int ifoRead_C_ADT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1523 unsigned int sector;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1524
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1525 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1526 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1527
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1528 if(ifofile->vmgi_mat) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1529 if(ifofile->vmgi_mat->vmgm_c_adt == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1530 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1531 sector = ifofile->vmgi_mat->vmgm_c_adt;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1532 } else if(ifofile->vtsi_mat) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1533 if(ifofile->vtsi_mat->vtsm_c_adt == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1534 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1535 sector = ifofile->vtsi_mat->vtsm_c_adt;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1536 } else {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1537 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1538 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1539
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1540 ifofile->menu_c_adt = (c_adt_t *)malloc(sizeof(c_adt_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1541 if(!ifofile->menu_c_adt)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1542 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1543
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1544 if(!ifoRead_C_ADT_internal(ifofile, ifofile->menu_c_adt, sector)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1545 free(ifofile->menu_c_adt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1546 ifofile->menu_c_adt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1547 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1548 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1549
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1550 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1551 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1552
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1553 static int ifoRead_C_ADT_internal(ifo_handle_t *ifofile,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1554 c_adt_t *c_adt, unsigned int sector) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1555 int i, info_length;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1556
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1557 if(!DVDFileSeek_(ifofile->file, sector * DVD_BLOCK_LEN))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1558 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1559
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1560 if(!(DVDReadBytes(ifofile->file, c_adt, C_ADT_SIZE)))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1561 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1562
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1563 B2N_16(c_adt->nr_of_vobs);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1564 B2N_32(c_adt->last_byte);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1565
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1566 info_length = c_adt->last_byte + 1 - C_ADT_SIZE;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1567
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1568 CHECK_ZERO(c_adt->zero_1);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1569 /* assert(c_adt->nr_of_vobs > 0);
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1570 Magic Knight Rayearth Daybreak is mastered very strange and has
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1571 Titles with a VOBS that has no cells. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1572 CHECK_VALUE(info_length % sizeof(cell_adr_t) == 0);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1573
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1574 /* assert(info_length / sizeof(cell_adr_t) >= c_adt->nr_of_vobs);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1575 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
1576 is to high, they high ones are never referenced though. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1577 if(info_length / sizeof(cell_adr_t) < c_adt->nr_of_vobs) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1578 fprintf(stderr, "libdvdread: *C_ADT nr_of_vobs > avaiable info entries\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1579 c_adt->nr_of_vobs = info_length / sizeof(cell_adr_t);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1580 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1581
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1582 c_adt->cell_adr_table = (cell_adr_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1583 if(!c_adt->cell_adr_table)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1584 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1585
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1586 if(info_length &&
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1587 !(DVDReadBytes(ifofile->file, c_adt->cell_adr_table, info_length))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1588 free(c_adt->cell_adr_table);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1589 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1590 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1591
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1592 for(i = 0; i < info_length/sizeof(cell_adr_t); i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1593 B2N_16(c_adt->cell_adr_table[i].vob_id);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1594 B2N_32(c_adt->cell_adr_table[i].start_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1595 B2N_32(c_adt->cell_adr_table[i].last_sector);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1596
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1597 CHECK_ZERO(c_adt->cell_adr_table[i].zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1598 CHECK_VALUE(c_adt->cell_adr_table[i].vob_id > 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1599 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
1600 CHECK_VALUE(c_adt->cell_adr_table[i].cell_id > 0);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1601 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
1602 c_adt->cell_adr_table[i].last_sector);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1603 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1604
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1605 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1606 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1607
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1608
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1609 static void ifoFree_C_ADT_internal(c_adt_t *c_adt) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1610 if(c_adt) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1611 free(c_adt->cell_adr_table);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1612 free(c_adt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1613 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1614 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1615
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1616 void ifoFree_C_ADT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1617 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1618 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1619
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1620 ifoFree_C_ADT_internal(ifofile->menu_c_adt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1621 ifofile->menu_c_adt = 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
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1624 void ifoFree_TITLE_C_ADT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1625 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1626 return;
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 ifoFree_C_ADT_internal(ifofile->vts_c_adt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1629 ifofile->vts_c_adt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1630 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1631
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1632 int ifoRead_TITLE_VOBU_ADMAP(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1633 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1634 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1635
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1636 if(!ifofile->vtsi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1637 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1638
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1639 if(ifofile->vtsi_mat->vts_vobu_admap == 0) /* mandatory */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1640 return 0;
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 ifofile->vts_vobu_admap = (vobu_admap_t *)malloc(sizeof(vobu_admap_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1643 if(!ifofile->vts_vobu_admap)
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
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1646 if(!ifoRead_VOBU_ADMAP_internal(ifofile, ifofile->vts_vobu_admap,
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1647 ifofile->vtsi_mat->vts_vobu_admap)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1648 free(ifofile->vts_vobu_admap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1649 ifofile->vts_vobu_admap = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1650 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1651 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1652
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1653 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1654 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1655
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1656 int ifoRead_VOBU_ADMAP(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1657 unsigned int sector;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1658
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1659 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1660 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1661
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1662 if(ifofile->vmgi_mat) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1663 if(ifofile->vmgi_mat->vmgm_vobu_admap == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1664 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1665 sector = ifofile->vmgi_mat->vmgm_vobu_admap;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1666 } else if(ifofile->vtsi_mat) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1667 if(ifofile->vtsi_mat->vtsm_vobu_admap == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1668 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1669 sector = ifofile->vtsi_mat->vtsm_vobu_admap;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1670 } else {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1671 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1672 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1673
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1674 ifofile->menu_vobu_admap = (vobu_admap_t *)malloc(sizeof(vobu_admap_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1675 if(!ifofile->menu_vobu_admap)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1676 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1677
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1678 if(!ifoRead_VOBU_ADMAP_internal(ifofile, ifofile->menu_vobu_admap, sector)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1679 free(ifofile->menu_vobu_admap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1680 ifofile->menu_vobu_admap = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1681 return 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 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1685 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1686
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1687 static int ifoRead_VOBU_ADMAP_internal(ifo_handle_t *ifofile,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1688 vobu_admap_t *vobu_admap,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1689 unsigned int sector) {
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1690 unsigned int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1691 int info_length;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1692
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1693 if(!DVDFileSeekForce_(ifofile->file, sector * DVD_BLOCK_LEN, sector))
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(!(DVDReadBytes(ifofile->file, vobu_admap, VOBU_ADMAP_SIZE)))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1697 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1698
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1699 B2N_32(vobu_admap->last_byte);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1700
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1701 info_length = vobu_admap->last_byte + 1 - VOBU_ADMAP_SIZE;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1702 /* assert(info_length > 0);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1703 Magic Knight Rayearth Daybreak is mastered very strange and has
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1704 Titles with a VOBS that has no VOBUs. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1705 CHECK_VALUE(info_length % sizeof(uint32_t) == 0);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1706
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1707 vobu_admap->vobu_start_sectors = (uint32_t *)malloc(info_length);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1708 if(!vobu_admap->vobu_start_sectors) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1709 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1710 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1711 if(info_length &&
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1712 !(DVDReadBytes(ifofile->file,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
1713 vobu_admap->vobu_start_sectors, info_length))) {
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1714 free(vobu_admap->vobu_start_sectors);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1715 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1716 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1717
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1718 for(i = 0; i < info_length/sizeof(uint32_t); i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1719 B2N_32(vobu_admap->vobu_start_sectors[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1720
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1721 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1722 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1723
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1724
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1725 static void ifoFree_VOBU_ADMAP_internal(vobu_admap_t *vobu_admap) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1726 if(vobu_admap) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1727 free(vobu_admap->vobu_start_sectors);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1728 free(vobu_admap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1729 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1730 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1731
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1732 void ifoFree_VOBU_ADMAP(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1733 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1734 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1735
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1736 ifoFree_VOBU_ADMAP_internal(ifofile->menu_vobu_admap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1737 ifofile->menu_vobu_admap = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1738 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1739
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1740 void ifoFree_TITLE_VOBU_ADMAP(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1741 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1742 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1743
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1744 ifoFree_VOBU_ADMAP_internal(ifofile->vts_vobu_admap);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1745 ifofile->vts_vobu_admap = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1746 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1747
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1748 int ifoRead_PGCIT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1749
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1750 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1751 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1752
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1753 if(!ifofile->vtsi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1754 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1755
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1756 if(ifofile->vtsi_mat->vts_pgcit == 0) /* mandatory */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1757 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1758
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1759 ifofile->vts_pgcit = (pgcit_t *)malloc(sizeof(pgcit_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1760 if(!ifofile->vts_pgcit)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1761 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1762
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1763 if(!ifoRead_PGCIT_internal(ifofile, ifofile->vts_pgcit,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1764 ifofile->vtsi_mat->vts_pgcit * DVD_BLOCK_LEN)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1765 free(ifofile->vts_pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1766 ifofile->vts_pgcit = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1767 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1768 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1769
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1770 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1771 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1772
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1773 static int ifoRead_PGCIT_internal(ifo_handle_t *ifofile, pgcit_t *pgcit,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1774 unsigned int offset) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1775 int i, info_length;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1776 uint8_t *data, *ptr;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1777
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1778 if(!DVDFileSeek_(ifofile->file, offset))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1779 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1780
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1781 if(!(DVDReadBytes(ifofile->file, pgcit, PGCIT_SIZE)))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1782 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1783
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1784 B2N_16(pgcit->nr_of_pgci_srp);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1785 B2N_32(pgcit->last_byte);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1786
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1787 CHECK_ZERO(pgcit->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1788 /* assert(pgcit->nr_of_pgci_srp != 0);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1789 Magic Knight Rayearth Daybreak is mastered very strange and has
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1790 Titles with 0 PTTs. */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1791 CHECK_VALUE(pgcit->nr_of_pgci_srp < 10000); /* ?? seen max of 1338 */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1792
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1793 info_length = pgcit->nr_of_pgci_srp * PGCI_SRP_SIZE;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1794 data = malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1795 if(!data)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1796 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1797
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1798 if(info_length && !(DVDReadBytes(ifofile->file, data, info_length))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1799 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1800 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1801 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1802
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1803 pgcit->pgci_srp = malloc(pgcit->nr_of_pgci_srp * sizeof(pgci_srp_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1804 if(!pgcit->pgci_srp) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1805 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1806 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1807 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1808 ptr = data;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1809 for(i = 0; i < pgcit->nr_of_pgci_srp; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1810 memcpy(&pgcit->pgci_srp[i], ptr, PGCI_SRP_SIZE);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1811 ptr += PGCI_SRP_SIZE;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1812 read_pgci_srp(&pgcit->pgci_srp[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1813 CHECK_VALUE(pgcit->pgci_srp[i].unknown1 == 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1814 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1815 free(data);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1816
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1817 for(i = 0; i < pgcit->nr_of_pgci_srp; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1818 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
1819
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1820 for(i = 0; i < pgcit->nr_of_pgci_srp; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1821 pgcit->pgci_srp[i].pgc = malloc(sizeof(pgc_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1822 if(!pgcit->pgci_srp[i].pgc) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1823 int j;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1824 for(j = 0; j < i; j++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1825 ifoFree_PGC(pgcit->pgci_srp[j].pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1826 free(pgcit->pgci_srp[j].pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1827 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1828 goto fail;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1829 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1830 if(!ifoRead_PGC(ifofile, pgcit->pgci_srp[i].pgc,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1831 offset + pgcit->pgci_srp[i].pgc_start_byte)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1832 int j;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1833 for(j = 0; j < i; j++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1834 ifoFree_PGC(pgcit->pgci_srp[j].pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1835 free(pgcit->pgci_srp[j].pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1836 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1837 goto fail;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1838 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1839 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1840
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1841 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1842 fail:
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1843 free(pgcit->pgci_srp);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1844 pgcit->pgci_srp = NULL;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1845 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1846 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1847
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1848 static void ifoFree_PGCIT_internal(pgcit_t *pgcit) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1849 if(pgcit) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1850 int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1851 for(i = 0; i < pgcit->nr_of_pgci_srp; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1852 ifoFree_PGC(pgcit->pgci_srp[i].pgc);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1853 free(pgcit->pgci_srp);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1854 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1855 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1856
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1857 void ifoFree_PGCIT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1858 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1859 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1860
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1861 if(ifofile->vts_pgcit) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1862 ifoFree_PGCIT_internal(ifofile->vts_pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1863 free(ifofile->vts_pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1864 ifofile->vts_pgcit = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1865 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1866 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1867
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1868
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1869 int ifoRead_PGCI_UT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1870 pgci_ut_t *pgci_ut;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1871 unsigned int sector;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1872 unsigned int i;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1873 int info_length;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1874 uint8_t *data, *ptr;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1875
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1876 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1877 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1878
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1879 if(ifofile->vmgi_mat) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1880 if(ifofile->vmgi_mat->vmgm_pgci_ut == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1881 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1882 sector = ifofile->vmgi_mat->vmgm_pgci_ut;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1883 } else if(ifofile->vtsi_mat) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1884 if(ifofile->vtsi_mat->vtsm_pgci_ut == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1885 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1886 sector = ifofile->vtsi_mat->vtsm_pgci_ut;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1887 } else {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1888 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1889 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1890
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1891 ifofile->pgci_ut = (pgci_ut_t *)malloc(sizeof(pgci_ut_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1892 if(!ifofile->pgci_ut)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1893 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1894
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1895 if(!DVDFileSeek_(ifofile->file, sector * DVD_BLOCK_LEN)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1896 free(ifofile->pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1897 ifofile->pgci_ut = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1898 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1899 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1900
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1901 if(!(DVDReadBytes(ifofile->file, ifofile->pgci_ut, PGCI_UT_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1902 free(ifofile->pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1903 ifofile->pgci_ut = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1904 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1905 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1906
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1907 pgci_ut = ifofile->pgci_ut;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1908
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1909 B2N_16(pgci_ut->nr_of_lus);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1910 B2N_32(pgci_ut->last_byte);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1911
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1912 CHECK_ZERO(pgci_ut->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1913 CHECK_VALUE(pgci_ut->nr_of_lus != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1914 CHECK_VALUE(pgci_ut->nr_of_lus < 100); /* ?? 3-4 ? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1915 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
1916
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1917 info_length = pgci_ut->nr_of_lus * PGCI_LU_SIZE;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1918 data = malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1919 if(!data) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1920 free(pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1921 ifofile->pgci_ut = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1922 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1923 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1924 if(!(DVDReadBytes(ifofile->file, data, info_length))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1925 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1926 free(pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1927 ifofile->pgci_ut = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1928 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1929 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1930
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1931 pgci_ut->lu = malloc(pgci_ut->nr_of_lus * sizeof(pgci_lu_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1932 if(!pgci_ut->lu) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1933 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1934 free(pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1935 ifofile->pgci_ut = 0;
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1936 return 0;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1937 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1938 ptr = data;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1939 for(i = 0; i < pgci_ut->nr_of_lus; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1940 memcpy(&pgci_ut->lu[i], ptr, PGCI_LU_SIZE);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1941 ptr += PGCI_LU_SIZE;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1942 B2N_16(pgci_ut->lu[i].lang_code);
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1943 B2N_32(pgci_ut->lu[i].lang_start_byte);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1944 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1945 free(data);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1946
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1947 for(i = 0; i < pgci_ut->nr_of_lus; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1948 /* Maybe this is only defined for v1.1 and later titles? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1949 /* 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
1950 VTS_x_yy.IFO VIDEO_TS.IFO
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1951 a == 0x83 "Root" 0x82 "Title"
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1952 b == 0x84 "Subpicture"
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1953 c == 0x85 "Audio"
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1954 d == 0x86 "Angle"
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1955 e == 0x87 "PTT"
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1956 */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1957 CHECK_VALUE((pgci_ut->lu[i].exists & 0x07) == 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1958 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1959
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1960 for(i = 0; i < pgci_ut->nr_of_lus; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1961 pgci_ut->lu[i].pgcit = malloc(sizeof(pgcit_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1962 if(!pgci_ut->lu[i].pgcit) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1963 unsigned int j;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1964 for(j = 0; j < i; j++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1965 ifoFree_PGCIT_internal(pgci_ut->lu[j].pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1966 free(pgci_ut->lu[j].pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1967 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1968 free(pgci_ut->lu);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1969 free(pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1970 ifofile->pgci_ut = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1971 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1972 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1973 if(!ifoRead_PGCIT_internal(ifofile, pgci_ut->lu[i].pgcit,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
1974 sector * DVD_BLOCK_LEN
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1975 + pgci_ut->lu[i].lang_start_byte)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1976 unsigned int j;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1977 for(j = 0; j < i; j++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1978 ifoFree_PGCIT_internal(pgci_ut->lu[j].pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1979 free(pgci_ut->lu[j].pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1980 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1981 free(pgci_ut->lu[i].pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1982 free(pgci_ut->lu);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1983 free(pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1984 ifofile->pgci_ut = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1985 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1986 }
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 26
diff changeset
1987 /* 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
1988 * to pgci_ut->lu[i].exists really do? */
3
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 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1992 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1993
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1994
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1995 void ifoFree_PGCI_UT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1996 unsigned int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1997
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1998 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
1999 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2000
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2001 if(ifofile->pgci_ut) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2002 for(i = 0; i < ifofile->pgci_ut->nr_of_lus; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2003 ifoFree_PGCIT_internal(ifofile->pgci_ut->lu[i].pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2004 free(ifofile->pgci_ut->lu[i].pgcit);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2005 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2006 free(ifofile->pgci_ut->lu);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2007 free(ifofile->pgci_ut);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2008 ifofile->pgci_ut = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2009 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2010 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2011
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2012 static int ifoRead_VTS_ATTRIBUTES(ifo_handle_t *ifofile,
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2013 vts_attributes_t *vts_attributes,
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2014 unsigned int offset) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2015 unsigned int i;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2016
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2017 if(!DVDFileSeek_(ifofile->file, offset))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2018 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2019
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2020 if(!(DVDReadBytes(ifofile->file, vts_attributes, sizeof(vts_attributes_t))))
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2021 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2022
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2023 read_video_attr(&vts_attributes->vtsm_vobs_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2024 read_video_attr(&vts_attributes->vtstt_vobs_video_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2025 read_audio_attr(&vts_attributes->vtsm_audio_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2026 for(i=0; i<8; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2027 read_audio_attr(&vts_attributes->vtstt_audio_attr[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2028 read_subp_attr(&vts_attributes->vtsm_subp_attr);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2029 for(i=0; i<32; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2030 read_subp_attr(&vts_attributes->vtstt_subp_attr[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2031 B2N_32(vts_attributes->last_byte);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2032 B2N_32(vts_attributes->vts_cat);
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2033
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2034 CHECK_ZERO(vts_attributes->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2035 CHECK_ZERO(vts_attributes->zero_2);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2036 CHECK_ZERO(vts_attributes->zero_3);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2037 CHECK_ZERO(vts_attributes->zero_4);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2038 CHECK_ZERO(vts_attributes->zero_5);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2039 CHECK_ZERO(vts_attributes->zero_6);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2040 CHECK_ZERO(vts_attributes->zero_7);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2041 CHECK_VALUE(vts_attributes->nr_of_vtsm_audio_streams <= 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2042 CHECK_VALUE(vts_attributes->nr_of_vtsm_subp_streams <= 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2043 CHECK_VALUE(vts_attributes->nr_of_vtstt_audio_streams <= 8);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2044 for(i = vts_attributes->nr_of_vtstt_audio_streams; i < 8; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2045 CHECK_ZERO(vts_attributes->vtstt_audio_attr[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2046 CHECK_VALUE(vts_attributes->nr_of_vtstt_subp_streams <= 32);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2047 {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2048 unsigned int nr_coded;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2049 CHECK_VALUE(vts_attributes->last_byte + 1 >= VTS_ATTRIBUTES_MIN_SIZE);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2050 nr_coded = (vts_attributes->last_byte + 1 - VTS_ATTRIBUTES_MIN_SIZE)/6;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2051 /* 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
2052 if(nr_coded > 32) { /* We haven't read more from disk/file anyway */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2053 nr_coded = 32;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2054 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2055 CHECK_VALUE(vts_attributes->nr_of_vtstt_subp_streams <= nr_coded);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2056 for(i = vts_attributes->nr_of_vtstt_subp_streams; i < nr_coded; i++)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2057 CHECK_ZERO(vts_attributes->vtstt_subp_attr[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2058 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2059
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2060 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2061 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2062
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2063
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2064
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2065 int ifoRead_VTS_ATRT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2066 vts_atrt_t *vts_atrt;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2067 unsigned int i, info_length, sector;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2068 uint32_t *data;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2069
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2070 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2071 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2072
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2073 if(!ifofile->vmgi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2074 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2075
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2076 if(ifofile->vmgi_mat->vts_atrt == 0) /* mandatory */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2077 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2078
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2079 sector = ifofile->vmgi_mat->vts_atrt;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2080 if(!DVDFileSeek_(ifofile->file, sector * DVD_BLOCK_LEN))
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 vts_atrt = (vts_atrt_t *)malloc(sizeof(vts_atrt_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2084 if(!vts_atrt)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2085 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2086
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2087 ifofile->vts_atrt = vts_atrt;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2088
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2089 if(!(DVDReadBytes(ifofile->file, vts_atrt, VTS_ATRT_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2090 free(vts_atrt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2091 ifofile->vts_atrt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2092 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2093 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2094
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2095 B2N_16(vts_atrt->nr_of_vtss);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2096 B2N_32(vts_atrt->last_byte);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2097
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2098 CHECK_ZERO(vts_atrt->zero_1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2099 CHECK_VALUE(vts_atrt->nr_of_vtss != 0);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2100 CHECK_VALUE(vts_atrt->nr_of_vtss < 100); /* ?? */
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2101 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
2102 VTS_ATRT_SIZE < vts_atrt->last_byte + 1);
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2103
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2104 info_length = vts_atrt->nr_of_vtss * sizeof(uint32_t);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2105 data = (uint32_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2106 if(!data) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2107 free(vts_atrt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2108 ifofile->vts_atrt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2109 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2110 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2111
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2112 vts_atrt->vts_atrt_offsets = data;
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2113
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2114 if(!(DVDReadBytes(ifofile->file, data, info_length))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2115 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2116 free(vts_atrt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2117 ifofile->vts_atrt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2118 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2119 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2120
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2121 for(i = 0; i < vts_atrt->nr_of_vtss; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2122 B2N_32(data[i]);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2123 CHECK_VALUE(data[i] + VTS_ATTRIBUTES_MIN_SIZE < vts_atrt->last_byte + 1);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2124 }
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2125
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2126 info_length = vts_atrt->nr_of_vtss * sizeof(vts_attributes_t);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2127 vts_atrt->vts = (vts_attributes_t *)malloc(info_length);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2128 if(!vts_atrt->vts) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2129 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2130 free(vts_atrt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2131 ifofile->vts_atrt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2132 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2133 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2134 for(i = 0; i < vts_atrt->nr_of_vtss; i++) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2135 unsigned int offset = data[i];
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2136 if(!ifoRead_VTS_ATTRIBUTES(ifofile, &(vts_atrt->vts[i]),
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2137 (sector * DVD_BLOCK_LEN) + offset)) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2138 free(data);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2139 free(vts_atrt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2140 ifofile->vts_atrt = 0;
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
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2144 /* This assert cant be in ifoRead_VTS_ATTRIBUTES */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2145 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
2146 /* Is this check correct? */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2147 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2148
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2149 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2150 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2151
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2152
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2153 void ifoFree_VTS_ATRT(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2154 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2155 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2156
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2157 if(ifofile->vts_atrt) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2158 free(ifofile->vts_atrt->vts);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2159 free(ifofile->vts_atrt->vts_atrt_offsets);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2160 free(ifofile->vts_atrt);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2161 ifofile->vts_atrt = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2162 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2163 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2164
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2165
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2166 int ifoRead_TXTDT_MGI(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2167 txtdt_mgi_t *txtdt_mgi;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2168
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2169 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2170 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2171
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2172 if(!ifofile->vmgi_mat)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2173 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2174
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2175 /* Return successfully if there is nothing to read. */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2176 if(ifofile->vmgi_mat->txtdt_mgi == 0)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2177 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2178
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2179 if(!DVDFileSeek_(ifofile->file,
26
0d82d0f30c98 cosmetics: Convert all tabs to spaces.
diego
parents: 22
diff changeset
2180 ifofile->vmgi_mat->txtdt_mgi * DVD_BLOCK_LEN))
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2181 return 0;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2182
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2183 txtdt_mgi = (txtdt_mgi_t *)malloc(sizeof(txtdt_mgi_t));
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2184 if(!txtdt_mgi) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2185 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2186 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2187 ifofile->txtdt_mgi = txtdt_mgi;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2188
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2189 if(!(DVDReadBytes(ifofile->file, txtdt_mgi, TXTDT_MGI_SIZE))) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2190 fprintf(stderr, "libdvdread: Unable to read TXTDT_MGI.\n");
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2191 free(txtdt_mgi);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2192 ifofile->txtdt_mgi = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2193 return 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2194 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2195
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2196 /* fprintf(stderr, "-- Not done yet --\n"); */
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2197 return 1;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2198 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2199
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2200 void ifoFree_TXTDT_MGI(ifo_handle_t *ifofile) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2201 if(!ifofile)
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2202 return;
20
fce16251755c Remove all trailing whitespace,
rathann
parents: 12
diff changeset
2203
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2204 if(ifofile->txtdt_mgi) {
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2205 free(ifofile->txtdt_mgi);
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2206 ifofile->txtdt_mgi = 0;
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2207 }
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
2208 }