comparison dvdread/ifo_read.c @ 364:23607807ff65 src

read_playback_type() finally removes the last conditional bitfield struct
author nicodvb
date Sun, 11 May 2008 20:35:22 +0000
parents abca84921371
children 5b8539cacebf
comparison
equal deleted inserted replaced
363:abca84921371 364:23607807ff65
253 253
254 cp->first_sector = dvdread_getbits(&state, 32); 254 cp->first_sector = dvdread_getbits(&state, 32);
255 cp->first_ilvu_end_sector = dvdread_getbits(&state, 32); 255 cp->first_ilvu_end_sector = dvdread_getbits(&state, 32);
256 cp->last_vobu_start_sector = dvdread_getbits(&state, 32); 256 cp->last_vobu_start_sector = dvdread_getbits(&state, 32);
257 cp->last_sector = dvdread_getbits(&state, 32); 257 cp->last_sector = dvdread_getbits(&state, 32);
258 }
259
260 static void read_playback_type(playback_type_t *pt) {
261 getbits_state_t state;
262 uint8_t buf[sizeof(playback_type_t)];
263
264 memcpy(buf, pt, sizeof(playback_type_t));
265 if (!dvdread_getbits_init(&state, buf)) abort();
266 pt->zero_1 = dvdread_getbits(&state, 1);
267 pt->multi_or_random_pgc_title = dvdread_getbits(&state, 1);
268 pt->jlc_exists_in_cell_cmd = dvdread_getbits(&state, 1);
269 pt->jlc_exists_in_prepost_cmd = dvdread_getbits(&state, 1);
270 pt->jlc_exists_in_button_cmd = dvdread_getbits(&state, 1);
271 pt->jlc_exists_in_tt_dom = dvdread_getbits(&state, 1);
272 pt->chapter_search_or_play = dvdread_getbits(&state, 1);
273 pt->title_or_time_play = dvdread_getbits(&state, 1);
258 } 274 }
259 275
260 ifo_handle_t *ifoOpen(dvd_reader_t *dvd, int title) { 276 ifo_handle_t *ifoOpen(dvd_reader_t *dvd, int title) {
261 ifo_handle_t *ifofile; 277 ifo_handle_t *ifofile;
262 278
1011 CHECK_VALUE(tt_srpt->nr_of_srpts != 0); 1027 CHECK_VALUE(tt_srpt->nr_of_srpts != 0);
1012 CHECK_VALUE(tt_srpt->nr_of_srpts < 100); /* ?? */ 1028 CHECK_VALUE(tt_srpt->nr_of_srpts < 100); /* ?? */
1013 CHECK_VALUE((int)tt_srpt->nr_of_srpts * sizeof(title_info_t) <= info_length); 1029 CHECK_VALUE((int)tt_srpt->nr_of_srpts * sizeof(title_info_t) <= info_length);
1014 1030
1015 for(i = 0; i < tt_srpt->nr_of_srpts; i++) { 1031 for(i = 0; i < tt_srpt->nr_of_srpts; i++) {
1032 read_playback_type(&tt_srpt->title[i].pb_ty);
1016 CHECK_VALUE(tt_srpt->title[i].pb_ty.zero_1 == 0); 1033 CHECK_VALUE(tt_srpt->title[i].pb_ty.zero_1 == 0);
1017 CHECK_VALUE(tt_srpt->title[i].nr_of_angles != 0); 1034 CHECK_VALUE(tt_srpt->title[i].nr_of_angles != 0);
1018 CHECK_VALUE(tt_srpt->title[i].nr_of_angles < 10); 1035 CHECK_VALUE(tt_srpt->title[i].nr_of_angles < 10);
1019 /* CHECK_VALUE(tt_srpt->title[i].nr_of_ptts != 0); */ 1036 /* CHECK_VALUE(tt_srpt->title[i].nr_of_ptts != 0); */
1020 /* XXX: this assertion breaks Ghostbusters: */ 1037 /* XXX: this assertion breaks Ghostbusters: */