# HG changeset patch # User nicodvb # Date 1210498062 0 # Node ID 4cc7655e7b30244cffa0d01fcf3165d7eea341ad # Parent b6fa98f690eea42adab981a1048756e94e6b7193 added read_user_ops() and removed conditional bitfield diff -r b6fa98f690ee -r 4cc7655e7b30 dvdread/ifo_read.c --- a/dvdread/ifo_read.c Sat May 10 20:53:00 2008 +0000 +++ b/dvdread/ifo_read.c Sun May 11 09:27:42 2008 +0000 @@ -180,6 +180,40 @@ sa->code_extension = dvdread_getbits(&state, 8); } +static void read_user_ops(user_ops_t *uo) { + getbits_state_t state; + uint8_t buf[sizeof(user_ops_t)]; + + memcpy(buf, uo, sizeof(user_ops_t)); + if (!dvdread_getbits_init(&state, buf)) abort(); + uo->zero = dvdread_getbits(&state, 7); + uo->video_pres_mode_change = dvdread_getbits(&state, 1); + uo->karaoke_audio_pres_mode_change = dvdread_getbits(&state, 1); + uo->angle_change = dvdread_getbits(&state, 1); + uo->subpic_stream_change = dvdread_getbits(&state, 1); + uo->audio_stream_change = dvdread_getbits(&state, 1); + uo->pause_on = dvdread_getbits(&state, 1); + uo->still_off = dvdread_getbits(&state, 1); + uo->button_select_or_activate = dvdread_getbits(&state, 1); + uo->resume = dvdread_getbits(&state, 1); + uo->chapter_menu_call = dvdread_getbits(&state, 1); + uo->angle_menu_call = dvdread_getbits(&state, 1); + uo->audio_menu_call = dvdread_getbits(&state, 1); + uo->subpic_menu_call = dvdread_getbits(&state, 1); + uo->root_menu_call = dvdread_getbits(&state, 1); + uo->title_menu_call = dvdread_getbits(&state, 1); + uo->backward_scan = dvdread_getbits(&state, 1); + uo->forward_scan = dvdread_getbits(&state, 1); + uo->next_pg_search = dvdread_getbits(&state, 1); + uo->prev_or_top_pg_search = dvdread_getbits(&state, 1); + uo->time_or_chapter_search = dvdread_getbits(&state, 1); + uo->go_up = dvdread_getbits(&state, 1); + uo->stop = dvdread_getbits(&state, 1); + uo->title_play = dvdread_getbits(&state, 1); + uo->chapter_search_or_play = dvdread_getbits(&state, 1); + uo->title_or_time_play = dvdread_getbits(&state, 1); +} + ifo_handle_t *ifoOpen(dvd_reader_t *dvd, int title) { ifo_handle_t *ifofile; @@ -721,6 +755,7 @@ if(!(DVDReadBytes(ifofile->file, pgc, PGC_SIZE))) return 0; + read_user_ops(&pgc->prohibited_ops); B2N_16(pgc->next_pgc_nr); B2N_16(pgc->prev_pgc_nr); B2N_16(pgc->goup_pgc_nr); diff -r b6fa98f690ee -r 4cc7655e7b30 dvdread/ifo_types.h --- a/dvdread/ifo_types.h Sat May 10 20:53:00 2008 +0000 +++ b/dvdread/ifo_types.h Sun May 11 09:27:42 2008 +0000 @@ -256,7 +256,6 @@ * User Operations. */ typedef struct { -#ifdef WORDS_BIGENDIAN unsigned int zero : 7; /* 25-31 */ unsigned int video_pres_mode_change : 1; /* 24 */ @@ -286,37 +285,6 @@ unsigned int title_play : 1; unsigned int chapter_search_or_play : 1; unsigned int title_or_time_play : 1; /* 0 */ -#else - unsigned int video_pres_mode_change : 1; /* 24 */ - unsigned int zero : 7; /* 25-31 */ - - unsigned int resume : 1; /* 16 */ - unsigned int button_select_or_activate : 1; - unsigned int still_off : 1; - unsigned int pause_on : 1; - unsigned int audio_stream_change : 1; - unsigned int subpic_stream_change : 1; - unsigned int angle_change : 1; - unsigned int karaoke_audio_pres_mode_change : 1; /* 23 */ - - unsigned int forward_scan : 1; /* 8 */ - unsigned int backward_scan : 1; - unsigned int title_menu_call : 1; - unsigned int root_menu_call : 1; - unsigned int subpic_menu_call : 1; - unsigned int audio_menu_call : 1; - unsigned int angle_menu_call : 1; - unsigned int chapter_menu_call : 1; /* 15 */ - - unsigned int title_or_time_play : 1; /* 0 */ - unsigned int chapter_search_or_play : 1; - unsigned int title_play : 1; - unsigned int stop : 1; - unsigned int go_up : 1; - unsigned int time_or_chapter_search : 1; - unsigned int prev_or_top_pg_search : 1; - unsigned int next_pg_search : 1; /* 7 */ -#endif } ATTRIBUTE_PACKED user_ops_t; /**