summaryrefslogtreecommitdiffstats
path: root/libhb/reader.c
diff options
context:
space:
mode:
Diffstat (limited to 'libhb/reader.c')
-rw-r--r--libhb/reader.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/libhb/reader.c b/libhb/reader.c
index 911a33bd6..be7a9aecc 100644
--- a/libhb/reader.c
+++ b/libhb/reader.c
@@ -215,10 +215,32 @@ static void ReaderFunc( void * _r )
}
else if ( r->stream && r->job->start_at_preview )
{
+
// XXX code from DecodePreviews - should go into its own routine
hb_stream_seek( r->stream, (float)( r->job->start_at_preview - 1 ) /
( r->job->seek_points ? ( r->job->seek_points + 1.0 ) : 11.0 ) );
+ }
+ else if( r->stream )
+ {
+ /*
+ * Standard stream, seek to the starting chapter, if set, and track the
+ * end chapter so that we end at the right time.
+ */
+ int start = r->job->chapter_start;
+ hb_chapter_t *chap = hb_list_item( r->title->list_chapter, chapter_end - 1 );
+
+ chapter_end = chap->index;
+ if (start > 1)
+ {
+ chap = hb_list_item( r->title->list_chapter, start - 1 );
+ start = chap->index;
+ }
+
+ /*
+ * Seek to the start chapter.
+ */
+ hb_stream_seek_chapter( r->stream, start );
}
list = hb_list_init();
@@ -228,9 +250,9 @@ static void ReaderFunc( void * _r )
while( !*r->die && !r->job->done )
{
if (r->dvd)
- chapter = hb_dvd_chapter( r->dvd );
+ chapter = hb_dvd_chapter( r->dvd );
else if (r->stream)
- chapter = 1;
+ chapter = hb_stream_chapter( r->stream );
if( chapter < 0 )
{