summaryrefslogtreecommitdiffstats
path: root/libhb/work.c
diff options
context:
space:
mode:
Diffstat (limited to 'libhb/work.c')
-rw-r--r--libhb/work.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/libhb/work.c b/libhb/work.c
index 45a67b226..10f7a04d6 100644
--- a/libhb/work.c
+++ b/libhb/work.c
@@ -351,7 +351,8 @@ static void do_job( hb_job_t * job, int cpu_count )
if ( job->dynamic_range_compression )
hb_log(" + dynamic range compression: %f", job->dynamic_range_compression);
- /* if we are doing AC3 passthru, then remove any non-AC3 audios from the job */
+ /* if we are doing AC3 passthru (at the codec level, not pass-through),
+ * then remove any non-AC3 audios from the job */
/* otherwise, Bad Things will happen */
for( i = 0; i < hb_list_count( title->list_audio ); )
{
@@ -389,6 +390,8 @@ static void do_job( hb_job_t * job, int cpu_count )
int audioCodecsSupport6Ch = ((audio->codec == HB_ACODEC_AC3 ||
audio->codec == HB_ACODEC_DCA) && (job->acodec == HB_ACODEC_FAAC || job->acodec == HB_ACODEC_VORBIS));
+ if( job->audio_mixdowns[i] != HB_AMIXDOWN_AC3 )
+ {
/* find out what the format of our source audio is */
switch (audio->input_channel_layout & HB_INPUT_CH_LAYOUT_DISCRETE_NO_LFE_MASK) {
@@ -481,6 +484,7 @@ static void do_job( hb_job_t * job, int cpu_count )
}
}
+ }
/* log the output mixdown */
for (j = 0; j < hb_audio_mixdowns_count; j++) {
@@ -496,12 +500,16 @@ static void do_job( hb_job_t * job, int cpu_count )
audio->config.vorbis.language = audio->lang_simple;
- /* set up the audio work structures */
+ /* set up the audio work structures */
audio->fifo_in = hb_fifo_init( 2048 );
audio->fifo_raw = hb_fifo_init( FIFO_CPU_MULT * cpu_count );
audio->fifo_sync = hb_fifo_init( FIFO_CPU_MULT * cpu_count );
audio->fifo_out = hb_fifo_init( FIFO_CPU_MULT * cpu_count );
+
+ /*
+ * Audio Decoder Thread
+ */
switch( audio->codec )
{
case HB_ACODEC_AC3:
@@ -529,8 +537,13 @@ static void do_job( hb_job_t * job, int cpu_count )
hb_list_add( job->list_work, audio_w );
- switch( job->acodec )
+ /*
+ * Audio Encoder Thread
+ */
+ if( job->audio_mixdowns[i] != HB_AMIXDOWN_AC3 )
{
+ switch( job->acodec )
+ {
case HB_ACODEC_FAAC:
w = getWork( WORK_ENCFAAC );
break;
@@ -540,10 +553,15 @@ static void do_job( hb_job_t * job, int cpu_count )
case HB_ACODEC_VORBIS:
w = getWork( WORK_ENCVORBIS );
break;
+ }
}
- if( job->acodec != HB_ACODEC_AC3 )
+ if( job->acodec != HB_ACODEC_AC3 &&
+ job->audio_mixdowns[i] != HB_AMIXDOWN_AC3)
{
+ /*
+ * Add the encoder thread if not doing AC-3 pass through
+ */
w->fifo_in = audio->fifo_sync;
w->fifo_out = audio->fifo_out;
w->config = &audio->config;