X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=libhb%2Fdvd.c;h=ee10dd5071555e20322b7ec3743b77c1ce0923a4;hb=9972486f44c586225d98967441dcd3f3fd920636;hp=fa5373e79374171dab5a71187e05e25b0ec910db;hpb=0f7cba7abcdf2d40f125f734839dfdfaa264c70d;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/libhb/dvd.c b/libhb/dvd.c index fa5373e7..ee10dd50 100644 --- a/libhb/dvd.c +++ b/libhb/dvd.c @@ -24,6 +24,7 @@ static int hb_dvdread_read( hb_dvd_t * d, hb_buffer_t * b ); static int hb_dvdread_chapter( hb_dvd_t * d ); static int hb_dvdread_angle_count( hb_dvd_t * d ); static void hb_dvdread_set_angle( hb_dvd_t * d, int angle ); +static int hb_dvdread_main_feature( hb_dvd_t * d, hb_list_t * list_title ); hb_dvd_func_t hb_dvdread_func = { @@ -38,7 +39,8 @@ hb_dvd_func_t hb_dvdread_func = hb_dvdread_read, hb_dvdread_chapter, hb_dvdread_angle_count, - hb_dvdread_set_angle + hb_dvdread_set_angle, + hb_dvdread_main_feature }; static hb_dvd_func_t *dvd_methods = &hb_dvdread_func; @@ -55,6 +57,24 @@ hb_dvd_func_t * hb_dvdread_methods( void ) return &hb_dvdread_func; } +static int hb_dvdread_main_feature( hb_dvd_t * e, hb_list_t * list_title ) +{ + int ii; + uint64_t longest_duration = 0; + int longest = -1; + + for ( ii = 0; ii < hb_list_count( list_title ); ii++ ) + { + hb_title_t * title = hb_list_item( list_title, ii ); + if ( title->duration > longest_duration ) + { + longest_duration = title->duration; + longest = title->index; + } + } + return longest; +} + static char * hb_dvdread_name( char * path ) { static char name[1024]; @@ -158,6 +178,8 @@ static hb_title_t * hb_dvdread_title_scan( hb_dvd_t * e, int t ) hb_log( "scan: scanning title %d", t ); title = hb_title_init( d->path, t ); + title->type = HB_DVD_TYPE; + if( DVDUDFVolumeInfo( d->reader, title->name, sizeof( title->name ), unused, sizeof( unused ) ) ) { @@ -421,10 +443,6 @@ static hb_title_t * hb_dvdread_title_scan( hb_dvd_t * e, int t ) hb_list_add( title->list_audio, audio ); } - memcpy( title->palette, - vts->vts_pgcit->pgci_srp[pgc_id-1].pgc->palette, - 16 * sizeof( uint32_t ) ); - /* Check for subtitles */ for( i = 0; i < vts->vtsi_mat->nr_of_vts_subp_streams; i++ ) { @@ -480,6 +498,10 @@ static hb_title_t * hb_dvdread_title_scan( hb_dvd_t * e, int t ) subtitle->config.dest = RENDERSUB; // By default render (burn-in) the VOBSUB. subtitle->type = lang_extension; + + memcpy( subtitle->palette, + vts->vts_pgcit->pgci_srp[pgc_id-1].pgc->palette, + 16 * sizeof( uint32_t ) ); switch( lang_extension ) { @@ -1291,6 +1313,11 @@ void hb_dvd_set_angle( hb_dvd_t * d, int angle ) dvd_methods->set_angle(d, angle); } +int hb_dvd_main_feature( hb_dvd_t * d, hb_list_t * list_title ) +{ + return dvd_methods->main_feature(d, list_title); +} + // hb_dvd_set_dvdnav must only be called when no dvd source is open // it rips the rug out from under things so be careful void hb_dvd_set_dvdnav( int enable )