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);