diff options
author | eddyg <[email protected]> | 2008-07-01 05:51:27 +0000 |
---|---|---|
committer | eddyg <[email protected]> | 2008-07-01 05:51:27 +0000 |
commit | 3f393b8d34568fd9b2d6294107fa2b3adad2e7b4 (patch) | |
tree | c32b4ba542953054a1861540423596f2410679d9 /libhb/work.c | |
parent | 1b44faba8af642f4892958b464309a94e52c8760 (diff) |
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
Diffstat (limited to 'libhb/work.c')
-rw-r--r-- | libhb/work.c | 31 |
1 files changed, 21 insertions, 10 deletions
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 ); } |