diff options
Diffstat (limited to 'libhb')
-rw-r--r-- | libhb/common.h | 2 | ||||
-rw-r--r-- | libhb/decvobsub.c | 2 | ||||
-rw-r--r-- | libhb/hb.c | 1 | ||||
-rw-r--r-- | libhb/hb.h | 2 | ||||
-rw-r--r-- | libhb/internal.h | 1 | ||||
-rw-r--r-- | libhb/sync.c | 6 | ||||
-rw-r--r-- | libhb/work.c | 22 |
7 files changed, 30 insertions, 6 deletions
diff --git a/libhb/common.h b/libhb/common.h index 81877d6d2..dfa1dcabd 100644 --- a/libhb/common.h +++ b/libhb/common.h @@ -456,6 +456,7 @@ struct hb_subtitle_s /* Internal data */ hb_fifo_t * fifo_in; /* SPU ES */ hb_fifo_t * fifo_raw; /* Decoded SPU */ + hb_fifo_t * fifo_sync;/* Synced */ hb_fifo_t * fifo_out; /* Correct Timestamps, ready to be muxed */ #endif }; @@ -653,6 +654,7 @@ struct hb_work_object_s extern hb_work_object_t hb_sync; extern hb_work_object_t hb_decmpeg2; extern hb_work_object_t hb_decsub; +extern hb_work_object_t hb_encsub; extern hb_work_object_t hb_render; extern hb_work_object_t hb_encavcodec; extern hb_work_object_t hb_encxvid; diff --git a/libhb/decvobsub.c b/libhb/decvobsub.c index 98ffa1a0d..102d18fe7 100644 --- a/libhb/decvobsub.c +++ b/libhb/decvobsub.c @@ -125,7 +125,7 @@ void decsubClose( hb_work_object_t * w ) hb_work_object_t hb_decsub = { WORK_DECSUB, - "Subtitle decoder", + "VOBSUB decoder", decsubInit, decsubWork, decsubClose diff --git a/libhb/hb.c b/libhb/hb.c index 2ffa16976..cdde54f4f 100644 --- a/libhb/hb.c +++ b/libhb/hb.c @@ -230,6 +230,7 @@ hb_handle_t * hb_init_dl( int verbose, int update_check ) hb_register( &hb_sync ); hb_register( &hb_decmpeg2 ); hb_register( &hb_decsub ); + hb_register( &hb_encsub ); hb_register( &hb_render ); hb_register( &hb_encavcodec ); hb_register( &hb_encxvid ); diff --git a/libhb/hb.h b/libhb/hb.h index 0c96656d6..860f441e0 100644 --- a/libhb/hb.h +++ b/libhb/hb.h @@ -22,6 +22,7 @@ hb_init_real( v, u ); \ hb_register( &hb_sync ); \ hb_register( &hb_decmpeg2 ); \ hb_register( &hb_decsub ); \ +hb_register( &hb_encsub ); \ hb_register( &hb_render ); \ hb_register( &hb_encavcodec ); \ hb_register( &hb_encxvid ); \ @@ -43,6 +44,7 @@ hb_init_real( v, u ); \ hb_register( &hb_sync ); \ hb_register( &hb_decmpeg2 ); \ hb_register( &hb_decsub ); \ +hb_register( &hb_encsub ); \ hb_register( &hb_render ); \ hb_register( &hb_encavcodec ); \ hb_register( &hb_encx264 ); \ diff --git a/libhb/internal.h b/libhb/internal.h index 7d7594802..f5df6cec9 100644 --- a/libhb/internal.h +++ b/libhb/internal.h @@ -255,6 +255,7 @@ enum WORK_SYNC = 1, WORK_DECMPEG2, WORK_DECSUB, + WORK_ENCSUB, WORK_RENDER, WORK_ENCAVCODEC, WORK_ENCXVID, diff --git a/libhb/sync.c b/libhb/sync.c index 39be41310..fb02b1387 100644 --- a/libhb/sync.c +++ b/libhb/sync.c @@ -413,6 +413,8 @@ static void SyncVideo( hb_work_object_t * w ) * * What about discontinuity boundaries - not delt * with here - Van? + * + * Bypass the sync fifo altogether. */ if( sub->size == 0 || sub->start < cur->start ) { @@ -638,14 +640,14 @@ static void SyncVideo( hb_work_object_t * w ) } else { /* * Pass-Through, pop it off of the raw queue, rewrite times and - * make it available to be muxed. + * make it available to be reencoded. */ uint64_t sub_duration; sub = hb_fifo_get( subtitle->fifo_raw ); sub_duration = sub->stop - sub->start; sub->start = buf_tmp->start; sub->stop = sub->start + duration; - hb_fifo_push( subtitle->fifo_out, sub ); + hb_fifo_push( subtitle->fifo_sync, sub ); } } else { /* diff --git a/libhb/work.c b/libhb/work.c index 0f7c13154..323f4cf4a 100644 --- a/libhb/work.c +++ b/libhb/work.c @@ -488,9 +488,10 @@ static void do_job( hb_job_t * job, int cpu_count ) if( subtitle ) { - subtitle->fifo_in = hb_fifo_init( FIFO_CPU_MULT * cpu_count ); - subtitle->fifo_raw = hb_fifo_init( FIFO_CPU_MULT * cpu_count ); - subtitle->fifo_out = hb_fifo_init( FIFO_CPU_MULT * cpu_count ); + subtitle->fifo_in = hb_fifo_init( FIFO_CPU_MULT * cpu_count ); + subtitle->fifo_raw = hb_fifo_init( FIFO_CPU_MULT * cpu_count ); + subtitle->fifo_sync = hb_fifo_init( FIFO_CPU_MULT * cpu_count ); + subtitle->fifo_out = hb_fifo_init( FIFO_CPU_MULT * cpu_count ); /* * Disable forced subtitles if we didn't find any in the scan @@ -517,6 +518,20 @@ static void do_job( hb_job_t * job, int cpu_count ) w->fifo_out = subtitle->fifo_raw; hb_list_add( job->list_work, w ); } + + if( !job->indepth_scan && + subtitle->format == PICTURESUB + && subtitle->dest == PASSTHRUSUB ) + { + /* + * Passing through a subtitle picture, this will have to + * be rle encoded before muxing. + */ + w = hb_get_work( WORK_ENCSUB ); + w->fifo_in = subtitle->fifo_sync; + w->fifo_out = subtitle->fifo_out; + hb_list_add( job->list_work, w ); + } } } @@ -861,6 +876,7 @@ cleanup: { hb_fifo_close( &subtitle->fifo_in ); hb_fifo_close( &subtitle->fifo_raw ); + hb_fifo_close( &subtitle->fifo_sync ); hb_fifo_close( &subtitle->fifo_out ); } } |