Mercurial > libdvdnav.hg
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); |