Mercurial > libdvdnav.hg
comparison dvdread/ifo_read.c @ 349:8a711d89e294 src
read_audio_attr() uses getbits() instead of relying on endianness-specific bitfields
author | nicodvb |
---|---|
date | Sat, 03 May 2008 07:50:09 +0000 |
parents | 5300b5982b85 |
children | 950749fdce4a |
comparison
equal
deleted
inserted
replaced
348:5300b5982b85 | 349:8a711d89e294 |
---|---|
111 va->picture_size = dvdread_getbits(&state, 2); | 111 va->picture_size = dvdread_getbits(&state, 2); |
112 va->letterboxed = dvdread_getbits(&state, 1); | 112 va->letterboxed = dvdread_getbits(&state, 1); |
113 va->film_mode = dvdread_getbits(&state, 1); | 113 va->film_mode = dvdread_getbits(&state, 1); |
114 } | 114 } |
115 | 115 |
116 static void read_audio_attr(audio_attr_t *aa) { | |
117 getbits_state_t state; | |
118 uint8_t buf[sizeof(audio_attr_t)]; | |
119 | |
120 memcpy(buf, aa, sizeof(audio_attr_t)); | |
121 if (!dvdread_getbits_init(&state, buf)) abort(); | |
122 aa->audio_format = dvdread_getbits(&state, 3); | |
123 aa->multichannel_extension = dvdread_getbits(&state, 1); | |
124 aa->lang_type = dvdread_getbits(&state, 2); | |
125 aa->application_mode = dvdread_getbits(&state, 2); | |
126 aa->quantization = dvdread_getbits(&state, 2); | |
127 aa->sample_frequency = dvdread_getbits(&state, 2); | |
128 aa->unknown1 = dvdread_getbits(&state, 1); | |
129 aa->channels = dvdread_getbits(&state, 3); | |
130 aa->lang_code = dvdread_getbits(&state, 16); | |
131 aa->lang_extension = dvdread_getbits(&state, 8); | |
132 aa->code_extension = dvdread_getbits(&state, 8); | |
133 aa->unknown3 = dvdread_getbits(&state, 8); | |
134 aa->app_info.karaoke.unknown4 = dvdread_getbits(&state, 1); | |
135 aa->app_info.karaoke.channel_assignment = dvdread_getbits(&state, 3); | |
136 aa->app_info.karaoke.version = dvdread_getbits(&state, 2); | |
137 aa->app_info.karaoke.mc_intro = dvdread_getbits(&state, 1); | |
138 aa->app_info.karaoke.mode = dvdread_getbits(&state, 1); | |
139 fprintf(stderr, "\r\nLANG: %c%c, x: %x\r\n", aa->lang_code>>8, aa->lang_code&0xFF, aa->lang_code); | |
140 } | |
141 | |
116 ifo_handle_t *ifoOpen(dvd_reader_t *dvd, int title) { | 142 ifo_handle_t *ifoOpen(dvd_reader_t *dvd, int title) { |
117 ifo_handle_t *ifofile; | 143 ifo_handle_t *ifofile; |
118 | 144 |
119 ifofile = (ifo_handle_t *)malloc(sizeof(ifo_handle_t)); | 145 ifofile = (ifo_handle_t *)malloc(sizeof(ifo_handle_t)); |
120 if(!ifofile) | 146 if(!ifofile) |
333 B2N_32(vmgi_mat->ptl_mait); | 359 B2N_32(vmgi_mat->ptl_mait); |
334 B2N_32(vmgi_mat->vts_atrt); | 360 B2N_32(vmgi_mat->vts_atrt); |
335 B2N_32(vmgi_mat->txtdt_mgi); | 361 B2N_32(vmgi_mat->txtdt_mgi); |
336 B2N_32(vmgi_mat->vmgm_c_adt); | 362 B2N_32(vmgi_mat->vmgm_c_adt); |
337 B2N_32(vmgi_mat->vmgm_vobu_admap); | 363 B2N_32(vmgi_mat->vmgm_vobu_admap); |
338 B2N_16(vmgi_mat->vmgm_audio_attr.lang_code); | |
339 B2N_16(vmgi_mat->vmgm_subp_attr.lang_code); | 364 B2N_16(vmgi_mat->vmgm_subp_attr.lang_code); |
340 read_video_attr(&vmgi_mat->vmgm_video_attr); | 365 read_video_attr(&vmgi_mat->vmgm_video_attr); |
366 read_audio_attr(&vmgi_mat->vmgm_audio_attr); | |
341 | 367 |
342 | 368 |
343 CHECK_ZERO(vmgi_mat->zero_1); | 369 CHECK_ZERO(vmgi_mat->zero_1); |
344 CHECK_ZERO(vmgi_mat->zero_2); | 370 CHECK_ZERO(vmgi_mat->zero_2); |
345 CHECK_ZERO(vmgi_mat->zero_3); | 371 CHECK_ZERO(vmgi_mat->zero_3); |
410 return 0; | 436 return 0; |
411 } | 437 } |
412 | 438 |
413 read_video_attr(&vtsi_mat->vtsm_video_attr); | 439 read_video_attr(&vtsi_mat->vtsm_video_attr); |
414 read_video_attr(&vtsi_mat->vts_video_attr); | 440 read_video_attr(&vtsi_mat->vts_video_attr); |
441 read_audio_attr(&vtsi_mat->vtsm_audio_attr); | |
442 for(i=0; i<8; i++) | |
443 read_audio_attr(&vtsi_mat->vts_audio_attr[i]); | |
415 B2N_32(vtsi_mat->vts_last_sector); | 444 B2N_32(vtsi_mat->vts_last_sector); |
416 B2N_32(vtsi_mat->vtsi_last_sector); | 445 B2N_32(vtsi_mat->vtsi_last_sector); |
417 B2N_32(vtsi_mat->vts_category); | 446 B2N_32(vtsi_mat->vts_category); |
418 B2N_32(vtsi_mat->vtsi_last_byte); | 447 B2N_32(vtsi_mat->vtsi_last_byte); |
419 B2N_32(vtsi_mat->vtsm_vobs); | 448 B2N_32(vtsi_mat->vtsm_vobs); |
424 B2N_32(vtsi_mat->vts_tmapt); | 453 B2N_32(vtsi_mat->vts_tmapt); |
425 B2N_32(vtsi_mat->vtsm_c_adt); | 454 B2N_32(vtsi_mat->vtsm_c_adt); |
426 B2N_32(vtsi_mat->vtsm_vobu_admap); | 455 B2N_32(vtsi_mat->vtsm_vobu_admap); |
427 B2N_32(vtsi_mat->vts_c_adt); | 456 B2N_32(vtsi_mat->vts_c_adt); |
428 B2N_32(vtsi_mat->vts_vobu_admap); | 457 B2N_32(vtsi_mat->vts_vobu_admap); |
429 B2N_16(vtsi_mat->vtsm_audio_attr.lang_code); | |
430 B2N_16(vtsi_mat->vtsm_subp_attr.lang_code); | 458 B2N_16(vtsi_mat->vtsm_subp_attr.lang_code); |
431 for(i = 0; i < 8; i++) | |
432 B2N_16(vtsi_mat->vts_audio_attr[i].lang_code); | |
433 for(i = 0; i < 32; i++) | 459 for(i = 0; i < 32; i++) |
434 B2N_16(vtsi_mat->vts_subp_attr[i].lang_code); | 460 B2N_16(vtsi_mat->vts_subp_attr[i].lang_code); |
435 | 461 |
436 | 462 |
437 CHECK_ZERO(vtsi_mat->zero_1); | 463 CHECK_ZERO(vtsi_mat->zero_1); |
1863 if(!(DVDReadBytes(ifofile->file, vts_attributes, sizeof(vts_attributes_t)))) | 1889 if(!(DVDReadBytes(ifofile->file, vts_attributes, sizeof(vts_attributes_t)))) |
1864 return 0; | 1890 return 0; |
1865 | 1891 |
1866 read_video_attr(&vts_attributes->vtsm_vobs_attr); | 1892 read_video_attr(&vts_attributes->vtsm_vobs_attr); |
1867 read_video_attr(&vts_attributes->vtstt_vobs_video_attr); | 1893 read_video_attr(&vts_attributes->vtstt_vobs_video_attr); |
1894 read_audio_attr(&vts_attributes->vtsm_audio_attr); | |
1895 for(i=0; i<8; i++) | |
1896 read_audio_attr(&vts_attributes->vtstt_audio_attr[i]); | |
1868 B2N_32(vts_attributes->last_byte); | 1897 B2N_32(vts_attributes->last_byte); |
1869 B2N_32(vts_attributes->vts_cat); | 1898 B2N_32(vts_attributes->vts_cat); |
1870 B2N_16(vts_attributes->vtsm_audio_attr.lang_code); | |
1871 B2N_16(vts_attributes->vtsm_subp_attr.lang_code); | 1899 B2N_16(vts_attributes->vtsm_subp_attr.lang_code); |
1872 for(i = 0; i < 8; i++) | |
1873 B2N_16(vts_attributes->vtstt_audio_attr[i].lang_code); | |
1874 for(i = 0; i < 32; i++) | 1900 for(i = 0; i < 32; i++) |
1875 B2N_16(vts_attributes->vtstt_subp_attr[i].lang_code); | 1901 B2N_16(vts_attributes->vtstt_subp_attr[i].lang_code); |
1876 | 1902 |
1877 CHECK_ZERO(vts_attributes->zero_1); | 1903 CHECK_ZERO(vts_attributes->zero_1); |
1878 CHECK_ZERO(vts_attributes->zero_2); | 1904 CHECK_ZERO(vts_attributes->zero_2); |