summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libhb/hb.c82
-rw-r--r--libhb/work.c5
-rw-r--r--test/test.c2
3 files changed, 49 insertions, 40 deletions
diff --git a/libhb/hb.c b/libhb/hb.c
index 0550c3cac..0b0c515af 100644
--- a/libhb/hb.c
+++ b/libhb/hb.c
@@ -510,6 +510,7 @@ void hb_add( hb_handle_t * h, hb_job_t * job )
hb_audio_t * audio, * audio_copy;
hb_subtitle_t * subtitle, * subtitle_copy;
int i;
+ char audio_lang[4];
/* Copy the title */
title = job->title;
@@ -548,60 +549,39 @@ void hb_add( hb_handle_t * h, hb_job_t * job )
title_copy->list_subtitle = hb_list_init();
- if( job->pass != 1 )
- {
- /* Copy the subtitle we want (or not)
- */
- if( ( subtitle = hb_list_item( title->list_subtitle, job->subtitle ) ) )
- {
- subtitle_copy = malloc( sizeof( hb_subtitle_t ) );
- memcpy( subtitle_copy, subtitle, sizeof( hb_subtitle_t ) );
- hb_list_add( title_copy->list_subtitle, subtitle_copy );
- }
- } else {
- char audio_lang[4];
- memset( audio_lang, 0, sizeof( audio_lang ) );
+ memset( audio_lang, 0, sizeof( audio_lang ) );
+ if ( job->subtitle_scan || job->native_language ) {
+
/*
- * Pass 1, do we want to do a subtitle scan?
+ * Find the first audio language that is being encoded
*/
- if( job->subtitle_scan )
+ for( i = 0; i < 8; i++ )
{
- /*
- * Search for all occurances of the audio language in the
- * subtitles and add them all to the
- * title_copy->list_subtitle. First of all find the
- * language for the audio.
- */
- for( i = 0; i < 8; i++ )
+ if( job->audios[i] < 0 )
{
- if( job->audios[i] < 0 )
- {
- break;
- }
- if( ( audio = hb_list_item( title->list_audio, job->audios[i] ) ) )
- {
- strncpy(audio_lang, audio->iso639_2, sizeof(audio_lang));
- }
+ break;
+ }
+ if( ( audio = hb_list_item( title->list_audio, job->audios[i] ) ) )
+ {
+ strncpy(audio_lang, audio->iso639_2, sizeof(audio_lang));
+ break;
}
}
- /*
- * If we have a native language now is the time to see whether we want
- * to enable subtitles for it if it differs from the audio language.
- */
+
if( job->native_language )
{
if( strncasecmp( job->native_language, audio_lang,
sizeof( audio_lang ) ) != 0 )
{
-
+
hb_log( "Enabled subtitles in native language '%s', audio is in '%s'",
job->native_language, audio_lang);
/*
* The main audio track is not in our native language, so switch
- * the subtitle scan to use our native language instead.
+ * the subtitles to use our native language instead.
*/
strncpy( audio_lang, job->native_language, sizeof( audio_lang ) );
} else {
@@ -612,7 +592,13 @@ void hb_add( hb_handle_t * h, hb_job_t * job )
job->native_language = NULL;
}
}
-
+ }
+
+ if ( job->subtitle_scan || job->native_language )
+ {
+ /*
+ * Select subtitles that match the language we want
+ */
for( i=0; i < hb_list_count( title->list_subtitle ); i++ )
{
subtitle = hb_list_item( title->list_subtitle, i );
@@ -625,6 +611,28 @@ void hb_add( hb_handle_t * h, hb_job_t * job )
subtitle_copy = malloc( sizeof( hb_subtitle_t ) );
memcpy( subtitle_copy, subtitle, sizeof( hb_subtitle_t ) );
hb_list_add( title_copy->list_subtitle, subtitle_copy );
+ if ( !job->subtitle_scan ) {
+ /*
+ * With native language just select the
+ * first match in our langiage, not all of
+ * them.
+ */
+ break;
+ }
+ }
+ }
+ } else {
+ /*
+ * Manually selected subtitle, in which case only bother adding them
+ * for pass 0 or pass 2 of a two pass.
+ */
+ if( job->pass != 1 )
+ {
+ if( ( subtitle = hb_list_item( title->list_subtitle, job->subtitle ) ) )
+ {
+ subtitle_copy = malloc( sizeof( hb_subtitle_t ) );
+ memcpy( subtitle_copy, subtitle, sizeof( hb_subtitle_t ) );
+ hb_list_add( title_copy->list_subtitle, subtitle_copy );
}
}
}
diff --git a/libhb/work.c b/libhb/work.c
index b7d02cd5c..92707cc42 100644
--- a/libhb/work.c
+++ b/libhb/work.c
@@ -194,6 +194,7 @@ static void do_job( hb_job_t * job, int cpu_count )
w->fifo_in = job->fifo_render;
w->fifo_out = job->fifo_mpeg4;
w->config = &job->config;
+
hb_list_add( job->list_work, w );
if( job->select_subtitle && !job->subtitle_scan )
@@ -573,9 +574,9 @@ static void do_job( hb_job_t * job, int cpu_count )
* OK we have more than one, and the lowest is lower, but how much
* lower to qualify for turning it on by default?
*
- * Let's say 20% as a default.
+ * Let's say 10% as a default.
*/
- if( subtitle_lowest < ( subtitle_highest * 0.2 ) )
+ if( subtitle_lowest < ( subtitle_highest * 0.1 ) )
{
subtitle_hit = subtitle_lowest_id;
hb_log( "Found a subtitle candidate id 0x%x",
diff --git a/test/test.c b/test/test.c
index 25939b64e..105050ecc 100644
--- a/test/test.c
+++ b/test/test.c
@@ -55,7 +55,7 @@ static char *x264opts2 = NULL;
static int maxHeight = 0;
static int maxWidth = 0;
static int turbo_opts_enabled = 0;
-static char * turbo_opts = "no-fast-pskip=0:subme=1:me=dia:trellis=0:analyse=none";
+static char * turbo_opts = "ref=1:subme=1:me=dia:analyse=none:weightb=0:trellis=0:no-fast-pskip=0:8x8dct=0";
static int largeFileSize = 0;
/* Exit cleanly on Ctrl-C */