return hb_thread_init( "work", work_func, work, HB_LOW_PRIORITY );
}
+static void InitWorkState( hb_handle_t * h )
+{
+ hb_state_t state;
+
+ state.state = HB_STATE_WORKING;
+#define p state.param.working
+ p.progress = 0.0;
+ p.rate_cur = 0.0;
+ p.rate_avg = 0.0;
+ p.hours = -1;
+ p.minutes = -1;
+ p.seconds = -1;
+#undef p
+
+ hb_set_state( h, &state );
+
+}
+
/**
* Iterates through job list and calls do_job for each job.
* @param _work Handle work object.
hb_list_rem( work->jobs, job );
job->die = work->die;
*(work->current_job) = job;
+ InitWorkState( job->h );
do_job( job, work->cpu_count );
*(work->current_job) = NULL;
}
if( subtitle )
{
- hb_log( " * subtitle track %i, %s (id %x) %s [%s] -> %s ", subtitle->track, subtitle->lang, subtitle->id,
- subtitle->format == PICTURESUB ? "Picture" : "Text",
- subtitle->source == VOBSUB ? "VOBSUB" :
- ((subtitle->source == CC608SUB ||
- subtitle->source == CC708SUB) ? "CC" : "SRT"),
- subtitle->config.dest == RENDERSUB ? "Render/Burn in" : "Pass-Through");
+ if( subtitle->source == SRTSUB )
+ {
+ /* For SRT, print offset and charset too */
+ hb_log( " * subtitle track %i, %s (id %x) %s [%s] -> %s%s, offset: %"PRId64", charset: %s",
+ subtitle->track, subtitle->lang, subtitle->id, "Text", "SRT", "Pass-Through",
+ subtitle->config.default_track ? ", Default" : "",
+ subtitle->config.offset, subtitle->config.src_codeset );
+ }
+ else
+ {
+ hb_log( " * subtitle track %i, %s (id %x) %s [%s] -> %s%s%s", subtitle->track, subtitle->lang, subtitle->id,
+ subtitle->format == PICTURESUB ? "Picture" : "Text",
+ subtitle->source == VOBSUB ? "VOBSUB" :
+ subtitle->source == CC608SUB || subtitle->source == CC708SUB ? "CC" :
+ subtitle->source == UTF8SUB ? "UTF-8" :
+ subtitle->source == TX3GSUB ? "TX3G" :
+ subtitle->source == SSASUB ? "SSA" : "Unknown",
+ subtitle->config.dest == RENDERSUB ? "Render/Burn in" : "Pass-Through",
+ subtitle->config.force ? ", Forced Only" : "",
+ subtitle->config.default_track ? ", Default" : "" );
+ }
}
}
// So if the encoder is lame we need the output to be stereo (or multichannel
// matrixed into stereo like dpl). If the decoder is not AC3 or DCA the
// encoder has to handle the input format since we can't do a mixdown.
-#define STEREO_ONLY(a) ( a->config.out.codec & HB_ACODEC_LAME )
-
switch (audio->config.in.channel_layout & HB_INPUT_CH_LAYOUT_DISCRETE_NO_LFE_MASK)
{
// stereo input or something not handled below
default:
case HB_INPUT_CH_LAYOUT_STEREO:
// mono gets mixed up to stereo & more than stereo gets mixed down
- if ( STEREO_ONLY( audio ) ||
- audio->config.out.mixdown > HB_AMIXDOWN_STEREO)
+ if ( audio->config.out.mixdown > HB_AMIXDOWN_STEREO )
{
audio->config.out.mixdown = HB_AMIXDOWN_STEREO;
}
// mono input
case HB_INPUT_CH_LAYOUT_MONO:
- if ( STEREO_ONLY( audio ) )
- {
- audio->config.out.mixdown = HB_AMIXDOWN_STEREO;
- }
- else
- {
- // everything else passes through
- audio->config.out.mixdown = HB_AMIXDOWN_MONO;
- }
+ // everything else passes through
+ audio->config.out.mixdown = HB_AMIXDOWN_MONO;
break;
// dolby (DPL1 aka Dolby Surround = 4.0 matrix-encoded) input
// the A52 flags don't allow for a way to distinguish between DPL1 and
// DPL2 on a DVD so we always assume a DPL1 source for A52_DOLBY.
case HB_INPUT_CH_LAYOUT_DOLBY:
- if ( STEREO_ONLY( audio ) ||
- audio->config.out.mixdown > HB_AMIXDOWN_DOLBY )
+ if ( audio->config.out.mixdown > HB_AMIXDOWN_DOLBY )
{
audio->config.out.mixdown = HB_AMIXDOWN_DOLBY;
}
// 4 channel discrete
case HB_INPUT_CH_LAYOUT_2F2R:
case HB_INPUT_CH_LAYOUT_3F1R:
- if ( STEREO_ONLY( audio ) ||
- audio->config.out.mixdown > HB_AMIXDOWN_DOLBY )
+ if ( audio->config.out.mixdown > HB_AMIXDOWN_DOLBY )
{
audio->config.out.mixdown = HB_AMIXDOWN_DOLBY;
}
// 5 or 6 channel discrete
case HB_INPUT_CH_LAYOUT_3F2R:
- if ( STEREO_ONLY( audio ) )
- {
- if ( audio->config.out.mixdown < HB_AMIXDOWN_STEREO )
- {
- audio->config.out.mixdown = HB_AMIXDOWN_STEREO;
- }
- else if ( audio->config.out.mixdown > HB_AMIXDOWN_DOLBYPLII )
- {
- audio->config.out.mixdown = HB_AMIXDOWN_DOLBYPLII;
- }
- }
- else if ( ! ( audio->config.in.channel_layout &
+ if ( ! ( audio->config.in.channel_layout &
HB_INPUT_CH_LAYOUT_HAS_LFE ) )
{
// we don't do 5 channel discrete so mixdown to DPLII
w->subtitle = subtitle;
hb_list_add( job->list_work, w );
}
+
+ if( !job->indepth_scan && subtitle->source == UTF8SUB )
+ {
+ w = hb_get_work( WORK_DECUTF8SUB );
+ w->fifo_in = subtitle->fifo_in;
+ w->fifo_out = subtitle->fifo_raw;
+ hb_list_add( job->list_work, w );
+ }
+
+ if( !job->indepth_scan && subtitle->source == TX3GSUB )
+ {
+ w = hb_get_work( WORK_DECTX3GSUB );
+ w->fifo_in = subtitle->fifo_in;
+ w->fifo_out = subtitle->fifo_raw;
+ hb_list_add( job->list_work, w );
+ }
+
+ if( !job->indepth_scan && subtitle->source == SSASUB )
+ {
+ w = hb_get_work( WORK_DECSSASUB );
+ w->fifo_in = subtitle->fifo_in;
+ w->fifo_out = subtitle->fifo_raw;
+ hb_list_add( job->list_work, w );
+ }
if( !job->indepth_scan &&
subtitle->format == PICTURESUB
}
}
+ hb_handle_t * h = job->h;
+ hb_state_t state;
+ hb_get_state( h, &state );
+
+ hb_log("work: average encoding speed for job is %f fps", state.param.working.rate_avg);
+
job->done = 1;
if( muxer != NULL )
{
free( sync );
}
- hb_handle_t * h = job->h;
- hb_state_t state;
- hb_get_state( h, &state );
-
- hb_log("work: average encoding speed for job is %f fps", state.param.working.rate_avg);
-
cleanup:
/* Stop the write thread (thread_close will block until the muxer finishes) */
job->done = 1;