From: eddyg Date: Tue, 1 Jul 2008 05:51:27 +0000 (+0000) Subject: Enable subtitle-scan to work when using Xvid as the encoder. Also checks return value... X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=bdd1d373beac57d5e00d2974808edeff63462bfd;p=handbrake-jp%2Fhandbrake-jp-git.git 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://localhost/HandBrake/trunk@1547 b64f7644-9d1e-0410-96f1-a4d463321fa5 --- diff --git a/libhb/work.c b/libhb/work.c index 043a7c19..a6071de4 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 ); }