diff options
-rw-r--r-- | libhb/hb.c | 82 | ||||
-rw-r--r-- | libhb/work.c | 5 | ||||
-rw-r--r-- | test/test.c | 2 |
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 */ |