From 3f393b8d34568fd9b2d6294107fa2b3adad2e7b4 Mon Sep 17 00:00:00 2001 From: eddyg Date: Tue, 1 Jul 2008 05:51:27 +0000 Subject: Enable subtitle-scan to work when using Xvid as the encoder. Also checks return values from the work Init functions to enable Work threads to abort the encode should they not initialise properly. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1547 b64f7644-9d1e-0410-96f1-a4d463321fa5 --- libhb/work.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'libhb/work.c') diff --git a/libhb/work.c b/libhb/work.c index 043a7c196..a6071de4b 100644 --- a/libhb/work.c +++ b/libhb/work.c @@ -297,9 +297,12 @@ static void do_job( hb_job_t * job, int cpu_count ) final_w = w; } - /* Video encoder */ - switch( job->vcodec ) + if( !job->indepth_scan ) { + + /* Video encoder */ + switch( job->vcodec ) + { case HB_VCODEC_FFMPEG: hb_log( " + encoder FFmpeg" ); w = hb_get_work( WORK_ENCAVCODEC ); @@ -318,14 +321,13 @@ static void do_job( hb_job_t * job, int cpu_count ) hb_log( " + encoder Theora" ); w = hb_get_work( WORK_ENCTHEORA ); break; - } - w->fifo_in = job->fifo_render; - w->fifo_out = job->fifo_mpeg4; - w->config = &job->config; + } + w->fifo_in = job->fifo_render; + w->fifo_out = job->fifo_mpeg4; + w->config = &job->config; + + hb_list_add( job->list_work, w ); - hb_list_add( job->list_work, w ); - if ( !job->indepth_scan ) - { /* * if we're not doing a subtitle scan the last thread in the * processing pipeline is the encoder - remember it so we can @@ -386,6 +388,8 @@ static void do_job( hb_job_t * job, int cpu_count ) } } + if( !job->indepth_scan ) + { /* if we are doing passthru, and the input codec is not the same as the output * codec, then remove this audio from the job */ /* otherwise, Bad Things will happen */ @@ -628,6 +632,8 @@ static void do_job( hb_job_t * job, int cpu_count ) } } + } + /* Init read & write threads */ job->reader = hb_reader_init( job ); @@ -642,7 +648,12 @@ static void do_job( hb_job_t * job, int cpu_count ) w = hb_list_item( job->list_work, i ); w->done = &job->done; w->thread_sleep_interval = 10; - w->init( w, job ); + if( w->init( w, job ) ) + { + hb_error( "Failure to initialise thread '%s'", w->name ); + *job->die = 1; + goto cleanup; + } w->thread = hb_thread_init( w->name, work_loop, w, HB_LOW_PRIORITY ); } -- cgit v1.2.3