summaryrefslogtreecommitdiffstats
path: root/libhb
diff options
context:
space:
mode:
authoreddyg <[email protected]>2008-07-01 05:51:27 +0000
committereddyg <[email protected]>2008-07-01 05:51:27 +0000
commit3f393b8d34568fd9b2d6294107fa2b3adad2e7b4 (patch)
treec32b4ba542953054a1861540423596f2410679d9 /libhb
parent1b44faba8af642f4892958b464309a94e52c8760 (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')
-rw-r--r--libhb/work.c31
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 );
}