comparison dvdread/ifo_read.c @ 352:0dae99f22e60 src

read_subp_attr() uses getbits() instead of relying on endianness-specific bitfields
author nicodvb
date Sat, 03 May 2008 08:22:40 +0000
parents c2218d2a9387
children 4cc7655e7b30
comparison
equal deleted inserted replaced
351:c2218d2a9387 352:0dae99f22e60
163 me->ach4_gv2e = dvdread_getbits(&state, 1); 163 me->ach4_gv2e = dvdread_getbits(&state, 1);
164 me->ach4_gmBe = dvdread_getbits(&state, 1); 164 me->ach4_gmBe = dvdread_getbits(&state, 1);
165 me->ach4_seBe = dvdread_getbits(&state, 1); 165 me->ach4_seBe = dvdread_getbits(&state, 1);
166 } 166 }
167 167
168 static void read_subp_attr(subp_attr_t *sa) {
169 getbits_state_t state;
170 uint8_t buf[sizeof(subp_attr_t)];
171
172 memcpy(buf, sa, sizeof(subp_attr_t));
173 if (!dvdread_getbits_init(&state, buf)) abort();
174 sa->code_mode = dvdread_getbits(&state, 3);
175 sa->zero1 = dvdread_getbits(&state, 3);
176 sa->type = dvdread_getbits(&state, 2);
177 sa->zero2 = dvdread_getbits(&state, 8);
178 sa->lang_code = dvdread_getbits(&state, 16);
179 sa->lang_extension = dvdread_getbits(&state, 8);
180 sa->code_extension = dvdread_getbits(&state, 8);
181 }
168 182
169 ifo_handle_t *ifoOpen(dvd_reader_t *dvd, int title) { 183 ifo_handle_t *ifoOpen(dvd_reader_t *dvd, int title) {
170 ifo_handle_t *ifofile; 184 ifo_handle_t *ifofile;
171 185
172 ifofile = (ifo_handle_t *)malloc(sizeof(ifo_handle_t)); 186 ifofile = (ifo_handle_t *)malloc(sizeof(ifo_handle_t));
386 B2N_32(vmgi_mat->ptl_mait); 400 B2N_32(vmgi_mat->ptl_mait);
387 B2N_32(vmgi_mat->vts_atrt); 401 B2N_32(vmgi_mat->vts_atrt);
388 B2N_32(vmgi_mat->txtdt_mgi); 402 B2N_32(vmgi_mat->txtdt_mgi);
389 B2N_32(vmgi_mat->vmgm_c_adt); 403 B2N_32(vmgi_mat->vmgm_c_adt);
390 B2N_32(vmgi_mat->vmgm_vobu_admap); 404 B2N_32(vmgi_mat->vmgm_vobu_admap);
391 B2N_16(vmgi_mat->vmgm_subp_attr.lang_code);
392 read_video_attr(&vmgi_mat->vmgm_video_attr); 405 read_video_attr(&vmgi_mat->vmgm_video_attr);
393 read_audio_attr(&vmgi_mat->vmgm_audio_attr); 406 read_audio_attr(&vmgi_mat->vmgm_audio_attr);
407 read_subp_attr(&vmgi_mat->vmgm_subp_attr);
394 408
395 409
396 CHECK_ZERO(vmgi_mat->zero_1); 410 CHECK_ZERO(vmgi_mat->zero_1);
397 CHECK_ZERO(vmgi_mat->zero_2); 411 CHECK_ZERO(vmgi_mat->zero_2);
398 CHECK_ZERO(vmgi_mat->zero_3); 412 CHECK_ZERO(vmgi_mat->zero_3);
466 read_video_attr(&vtsi_mat->vtsm_video_attr); 480 read_video_attr(&vtsi_mat->vtsm_video_attr);
467 read_video_attr(&vtsi_mat->vts_video_attr); 481 read_video_attr(&vtsi_mat->vts_video_attr);
468 read_audio_attr(&vtsi_mat->vtsm_audio_attr); 482 read_audio_attr(&vtsi_mat->vtsm_audio_attr);
469 for(i=0; i<8; i++) 483 for(i=0; i<8; i++)
470 read_audio_attr(&vtsi_mat->vts_audio_attr[i]); 484 read_audio_attr(&vtsi_mat->vts_audio_attr[i]);
485 read_subp_attr(&vtsi_mat->vtsm_subp_attr);
486 for(i=0; i<32; i++)
487 read_subp_attr(&vtsi_mat->vts_subp_attr[i]);
471 B2N_32(vtsi_mat->vts_last_sector); 488 B2N_32(vtsi_mat->vts_last_sector);
472 B2N_32(vtsi_mat->vtsi_last_sector); 489 B2N_32(vtsi_mat->vtsi_last_sector);
473 B2N_32(vtsi_mat->vts_category); 490 B2N_32(vtsi_mat->vts_category);
474 B2N_32(vtsi_mat->vtsi_last_byte); 491 B2N_32(vtsi_mat->vtsi_last_byte);
475 B2N_32(vtsi_mat->vtsm_vobs); 492 B2N_32(vtsi_mat->vtsm_vobs);
480 B2N_32(vtsi_mat->vts_tmapt); 497 B2N_32(vtsi_mat->vts_tmapt);
481 B2N_32(vtsi_mat->vtsm_c_adt); 498 B2N_32(vtsi_mat->vtsm_c_adt);
482 B2N_32(vtsi_mat->vtsm_vobu_admap); 499 B2N_32(vtsi_mat->vtsm_vobu_admap);
483 B2N_32(vtsi_mat->vts_c_adt); 500 B2N_32(vtsi_mat->vts_c_adt);
484 B2N_32(vtsi_mat->vts_vobu_admap); 501 B2N_32(vtsi_mat->vts_vobu_admap);
485 B2N_16(vtsi_mat->vtsm_subp_attr.lang_code);
486 for(i = 0; i < 32; i++)
487 B2N_16(vtsi_mat->vts_subp_attr[i].lang_code);
488 502
489 503
490 CHECK_ZERO(vtsi_mat->zero_1); 504 CHECK_ZERO(vtsi_mat->zero_1);
491 CHECK_ZERO(vtsi_mat->zero_2); 505 CHECK_ZERO(vtsi_mat->zero_2);
492 CHECK_ZERO(vtsi_mat->zero_3); 506 CHECK_ZERO(vtsi_mat->zero_3);
1920 read_video_attr(&vts_attributes->vtsm_vobs_attr); 1934 read_video_attr(&vts_attributes->vtsm_vobs_attr);
1921 read_video_attr(&vts_attributes->vtstt_vobs_video_attr); 1935 read_video_attr(&vts_attributes->vtstt_vobs_video_attr);
1922 read_audio_attr(&vts_attributes->vtsm_audio_attr); 1936 read_audio_attr(&vts_attributes->vtsm_audio_attr);
1923 for(i=0; i<8; i++) 1937 for(i=0; i<8; i++)
1924 read_audio_attr(&vts_attributes->vtstt_audio_attr[i]); 1938 read_audio_attr(&vts_attributes->vtstt_audio_attr[i]);
1939 read_subp_attr(&vts_attributes->vtsm_subp_attr);
1940 for(i=0; i<32; i++)
1941 read_subp_attr(&vts_attributes->vtstt_subp_attr[i]);
1925 B2N_32(vts_attributes->last_byte); 1942 B2N_32(vts_attributes->last_byte);
1926 B2N_32(vts_attributes->vts_cat); 1943 B2N_32(vts_attributes->vts_cat);
1927 B2N_16(vts_attributes->vtsm_subp_attr.lang_code);
1928 for(i = 0; i < 32; i++)
1929 B2N_16(vts_attributes->vtstt_subp_attr[i].lang_code);
1930 1944
1931 CHECK_ZERO(vts_attributes->zero_1); 1945 CHECK_ZERO(vts_attributes->zero_1);
1932 CHECK_ZERO(vts_attributes->zero_2); 1946 CHECK_ZERO(vts_attributes->zero_2);
1933 CHECK_ZERO(vts_attributes->zero_3); 1947 CHECK_ZERO(vts_attributes->zero_3);
1934 CHECK_ZERO(vts_attributes->zero_4); 1948 CHECK_ZERO(vts_attributes->zero_4);