summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRodeo <[email protected]>2012-05-14 15:36:17 +0000
committerRodeo <[email protected]>2012-05-14 15:36:17 +0000
commitd0adb5b72b26ae5dfa2d553e0162c3b53c6a905a (patch)
treeb6c4f9f12f0ba6389d76536b73a76c8e2bf62e26
parented6b38f56041302de83b6d94d8002336d58af1d3 (diff)
libhb: include subtitles in all passes. When doing 2-pass, we want to send the same input to the video encoder in both passes, which requires including subtitles in case one has to be burned-in.
Update Foreign Audio Search to work with the new behavior. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@4677 b64f7644-9d1e-0410-96f1-a4d463321fa5
-rw-r--r--libhb/hb.c39
-rw-r--r--libhb/work.c37
2 files changed, 25 insertions, 51 deletions
diff --git a/libhb/hb.c b/libhb/hb.c
index d79939d86..a80d8ffd7 100644
--- a/libhb/hb.c
+++ b/libhb/hb.c
@@ -1531,19 +1531,11 @@ void hb_add( hb_handle_t * h, hb_job_t * job )
}
title_copy->video_codec_name = strdup( title->video_codec_name );
- /*
- * The following code is confusing, there are two ways in which
- * we select subtitles and it depends on whether this is single or
- * two pass mode.
- *
- * subtitle_scan may be enabled, in which case the first pass
- * scans all subtitles of that language. The second pass does not
- * select any because they are set at the end of the first pass.
+ /* If we're doing Foreign Audio Search, copy all subtitles matching the first
+ * audio track language we find in the audio list.
*
- * We may have manually selected a subtitle, in which case that is
- * selected in the first pass of a single pass, or the second of a
- * two pass.
- */
+ * Otherwise, copy all subtitles found in the input job (which can be manually
+ * selected by the user, or added after the Foreign Audio Search pass). */
memset( audio_lang, 0, sizeof( audio_lang ) );
if( job->indepth_scan )
@@ -1565,30 +1557,23 @@ void hb_add( hb_handle_t * h, hb_job_t * job )
if( strcmp( subtitle->iso639_2, audio_lang ) == 0 &&
hb_subtitle_can_force( subtitle->source ) )
{
- /* Matched subtitle language with audio language, so
- * add this to our list to scan.
+ /* Matched subtitle language with audio language, so add this to
+ * our list to scan.
*
- * We will update the subtitle list on the second pass
- * later after the first pass has completed. */
+ * We will update the subtitle list on the next pass later, after
+ * the subtitle scan pass has completed. */
hb_list_add( title_copy->list_subtitle, hb_subtitle_copy( subtitle ) );
}
}
}
else
{
- /*
- * Not doing a subtitle scan in this pass, but maybe we are in the
- * first pass?
- */
- if( job->pass != 1 )
+ /* Copy all subtitles from the input job to title_copy/job_copy. */
+ for( i = 0; i < hb_list_count( job->list_subtitle ); i++ )
{
- /* Copy all subtitles from the input job to title_copy/job_copy. */
- for( i = 0; i < hb_list_count( job->list_subtitle ); i++ )
+ if( ( subtitle = hb_list_item( job->list_subtitle, i ) ) )
{
- if( ( subtitle = hb_list_item( job->list_subtitle, i ) ) )
- {
- hb_list_add( title_copy->list_subtitle, hb_subtitle_copy( subtitle ) );
- }
+ hb_list_add( title_copy->list_subtitle, hb_subtitle_copy( subtitle ) );
}
}
}
diff --git a/libhb/work.c b/libhb/work.c
index 415e250c5..ae836288e 100644
--- a/libhb/work.c
+++ b/libhb/work.c
@@ -545,17 +545,12 @@ static void do_job( hb_job_t * job )
hb_log( "starting job" );
- /*
- * Look for the scanned subtitle in the existing subtitle list
- * select_subtitle implies that we did a scan.
- */
- if ( !job->indepth_scan && interjob->select_subtitle &&
- ( job->pass == 0 || job->pass == 2 ) )
+ /* Look for the scanned subtitle in the existing subtitle list
+ * select_subtitle implies that we did a scan. */
+ if( !job->indepth_scan && interjob->select_subtitle )
{
- /*
- * Disable forced subtitles if we didn't find any in the scan
- * so that we display normal subtitles instead.
- */
+ /* Disable forced subtitles if we didn't find any in the scan, so that
+ * we display normal subtitles instead. */
if( interjob->select_subtitle->config.force &&
interjob->select_subtitle->forced_hits == 0 )
{
@@ -565,11 +560,9 @@ static void do_job( hb_job_t * job )
{
if( ( subtitle = hb_list_item( title->list_subtitle, i ) ) )
{
- /*
- * Remove the scanned subtitle from the subtitle list if
- * it would result in an identical duplicate subtitle track
- * or an emty track (forced and no forced hits).
- */
+ /* Remove the scanned subtitle from the subtitle list if
+ * it would result in an identical duplicate subtitle track
+ * or an emty track (forced and no forced hits). */
if( ( interjob->select_subtitle->id == subtitle->id ) &&
( ( subtitle->config.force && interjob->select_subtitle->forced_hits == 0 ) ||
( subtitle->config.force == interjob->select_subtitle->config.force ) ) )
@@ -591,17 +584,13 @@ static void do_job( hb_job_t * job )
}
}
- /*
- * Add the subtitle that we found on the first pass for use in this
- * pass.
+ /* Add the subtitle that we found on the subtitle scan pass.
*
- * Make sure it's the first subtitle in the list so that is is the
- * first burned subtitle (explicitly or after sanitizing) - which
- * should ensures that it doesn't get dropped.
- */
+ * Make sure it's the first subtitle in the list so that it becomes the
+ * first burned subtitle (explicitly or after sanitizing) - which should
+ * ensure that it doesn't get dropped. */
interjob->select_subtitle->out_track = 1;
- hb_list_insert( title->list_subtitle, 0, interjob->select_subtitle );
- interjob->select_subtitle = NULL;
+ hb_list_insert( title->list_subtitle, 0, hb_subtitle_copy( interjob->select_subtitle ) );
}
if ( !job->indepth_scan )