X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=libhb%2Fdvd.c;h=fa5373e79374171dab5a71187e05e25b0ec910db;hb=033e32de9c380f54c7d1362a3979da205ebc3a29;hp=58ce9addeb3a08d2a7aab45d5079f449c1bea19b;hpb=5f44f6b70650fcd3beee9db7873a5c9ac6fd98f4;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/libhb/dvd.c b/libhb/dvd.c index 58ce9add..fa5373e7 100644 --- a/libhb/dvd.c +++ b/libhb/dvd.c @@ -9,6 +9,7 @@ #include "dvd.h" #include "dvdread/ifo_read.h" +#include "dvdread/ifo_print.h" #include "dvdread/nav_read.h" static hb_dvd_t * hb_dvdread_init( char * path ); @@ -86,10 +87,21 @@ hb_dvd_t * hb_dvdread_init( char * path ) { hb_dvd_t * e; hb_dvdread_t * d; + int region_mask; e = calloc( sizeof( hb_dvd_t ), 1 ); d = &(e->dvdread); + /* Log DVD drive region code */ + if ( hb_dvd_region( path, ®ion_mask ) == 0 ) + { + hb_log( "dvd: Region mask 0x%02x", region_mask ); + if ( region_mask == 0xFF ) + { + hb_log( "dvd: Warning, DVD device has no region set" ); + } + } + /* Open device */ if( !( d->reader = DVDOpen( path ) ) ) { @@ -231,7 +243,7 @@ static hb_title_t * hb_dvdread_title_scan( hb_dvd_t * e, int t ) pgn = vts->vts_ptt_srpt->title[title->ttn-1].ptt[0].pgn; d->pgc = vts->vts_pgcit->pgci_srp[pgc_id-1].pgc; - hb_log("pgc_id: %d, pgn: %d: pgc: 0x%x", pgc_id, pgn, d->pgc); + hb_log("pgc_id: %d, pgn: %d: pgc: %p", pgc_id, pgn, d->pgc); if( !d->pgc ) { @@ -275,7 +287,7 @@ static hb_title_t * hb_dvdread_title_scan( hb_dvd_t * e, int t ) title->hours = title->duration / 90000 / 3600; title->minutes = ( ( title->duration / 90000 ) % 3600 ) / 60; title->seconds = ( title->duration / 90000 ) % 60; - hb_log( "scan: duration is %02d:%02d:%02d (%lld ms)", + hb_log( "scan: duration is %02d:%02d:%02d (%"PRId64" ms)", title->hours, title->minutes, title->seconds, title->duration / 90 ); @@ -409,12 +421,6 @@ static hb_title_t * hb_dvdread_title_scan( hb_dvd_t * e, int t ) hb_list_add( title->list_audio, audio ); } - if( !hb_list_count( title->list_audio ) ) - { - hb_log( "scan: ignoring title (no audio track)" ); - goto fail; - } - memcpy( title->palette, vts->vts_pgcit->pgci_srp[pgc_id-1].pgc->palette, 16 * sizeof( uint32_t ) ); @@ -471,7 +477,7 @@ static hb_title_t * hb_dvdread_title_scan( hb_dvd_t * e, int t ) lang->iso639_2); subtitle->format = PICTURESUB; subtitle->source = VOBSUB; - subtitle->dest = RENDERSUB; // By default render (burn-in) the VOBSUB. + subtitle->config.dest = RENDERSUB; // By default render (burn-in) the VOBSUB. subtitle->type = lang_extension; @@ -533,9 +539,6 @@ static hb_title_t * hb_dvdread_title_scan( hb_dvd_t * e, int t ) for( i = 0, c = 1; i < vts->vts_ptt_srpt->title[title->ttn-1].nr_of_ptts; i++ ) { - int pgc_id_next, pgn_next; - pgc_t * pgc_next; - chapter = calloc( sizeof( hb_chapter_t ), 1 ); /* remember the on-disc chapter number */ chapter->index = i + 1; @@ -549,34 +552,20 @@ static hb_title_t * hb_dvdread_title_scan( hb_dvd_t * e, int t ) chapter->block_start = d->pgc->cell_playback[chapter->cell_start].first_sector; - /* End cell */ - if( i != vts->vts_ptt_srpt->title[title->ttn-1].nr_of_ptts - 1 ) + // if there are no more programs in this pgc, the end cell is the + // last cell. Otherwise it's the cell before the start cell of the + // next program. + if ( pgn == d->pgc->nr_of_programs ) { - /* The cell before the starting cell of the next chapter, - or... */ - pgc_id_next = vts->vts_ptt_srpt->title[title->ttn-1].ptt[i+1].pgcn; - pgn_next = vts->vts_ptt_srpt->title[title->ttn-1].ptt[i+1].pgn; - pgc_next = vts->vts_pgcit->pgci_srp[pgc_id_next-1].pgc; - chapter->cell_end = pgc_next->program_map[pgn_next-1] - 2; - if( chapter->cell_end < 0 ) - { - /* Huh? */ - free( chapter ); - continue; - } + chapter->cell_end = d->pgc->nr_of_cells - 1; } else { - /* ... the last cell of the title */ - chapter->cell_end = title->cell_end; + chapter->cell_end = d->pgc->program_map[pgn] - 2;; } - chapter->block_end = - d->pgc->cell_playback[chapter->cell_end].last_sector; + chapter->block_end = d->pgc->cell_playback[chapter->cell_end].last_sector; /* Block count, duration */ - pgc_id = vts->vts_ptt_srpt->title[title->ttn-1].ptt[0].pgcn; - pgn = vts->vts_ptt_srpt->title[title->ttn-1].ptt[0].pgn; - d->pgc = vts->vts_pgcit->pgci_srp[pgc_id-1].pgc; chapter->block_count = 0; chapter->duration = 0; @@ -613,7 +602,7 @@ static hb_title_t * hb_dvdread_title_scan( hb_dvd_t * e, int t ) chapter->minutes = ( seconds % 3600 ) / 60; chapter->seconds = seconds % 60; - hb_log( "scan: chap %d c=%d->%d, b=%d->%d (%d), %lld ms", + hb_log( "scan: chap %d c=%d->%d, b=%d->%d (%d), %"PRId64" ms", chapter->index, chapter->cell_start, chapter->cell_end, chapter->block_start, chapter->block_end, chapter->block_count, chapter->duration / 90 );