summaryrefslogtreecommitdiffstats
path: root/libhb/dvd.c
diff options
context:
space:
mode:
Diffstat (limited to 'libhb/dvd.c')
-rw-r--r--libhb/dvd.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/libhb/dvd.c b/libhb/dvd.c
index fbac84de4..e51fd95bf 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];
@@ -1293,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 )