+ for( i=0; i < hb_list_count(title->list_subtitle); i++ )
+ {
+ subtitle = hb_list_item( title->list_subtitle, i );
+
+ if( subtitle )
+ {
+ subtitle->fifo_in = hb_fifo_init( FIFO_SMALL, FIFO_SMALL_WAKE );
+ subtitle->fifo_raw = hb_fifo_init( FIFO_SMALL, FIFO_SMALL_WAKE );
+ subtitle->fifo_sync = hb_fifo_init( FIFO_SMALL, FIFO_SMALL_WAKE );
+ subtitle->fifo_out = hb_fifo_init( FIFO_SMALL, FIFO_SMALL_WAKE );
+
+ if( (!job->indepth_scan || job->select_subtitle_config.force) &&
+ subtitle->source == VOBSUB ) {
+ /*
+ * Don't add threads for subtitles when we are scanning, unless
+ * looking for forced subtitles.
+ */
+ w = hb_get_work( WORK_DECVOBSUB );
+ w->fifo_in = subtitle->fifo_in;
+ w->fifo_out = subtitle->fifo_raw;
+ w->subtitle = subtitle;
+ hb_list_add( job->list_work, w );
+ }
+
+ if( !job->indepth_scan && subtitle->source == CC608SUB )
+ {
+ w = hb_get_work( WORK_DECCC608 );
+ 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 == SRTSUB )
+ {
+ w = hb_get_work( WORK_DECSRTSUB );
+ w->fifo_in = subtitle->fifo_in;
+ w->fifo_out = subtitle->fifo_raw;
+ w->subtitle = subtitle;
+ hb_list_add( job->list_work, w );
+ }
+
+ if( !job->indepth_scan &&
+ subtitle->format == PICTURESUB
+ && subtitle->config.dest == PASSTHRUSUB )
+ {
+ /*
+ * Passing through a subtitle picture, this will have to
+ * be rle encoded before muxing.
+ */
+ w = hb_get_work( WORK_ENCVOBSUB );
+ w->fifo_in = subtitle->fifo_sync;
+ w->fifo_out = subtitle->fifo_out;
+ w->subtitle = subtitle;
+ hb_list_add( job->list_work, w );
+ }
+ }
+ }
+
+ if( !job->indepth_scan )
+ {
+ for( i = 0; i < hb_list_count( title->list_audio ); i++ )
+ {
+ audio = hb_list_item( title->list_audio, i );
+
+ /*
+ * Audio Decoder Thread
+ */
+ if ( ( w = hb_codec_decoder( audio->config.in.codec ) ) == NULL )
+ {
+ hb_error("Invalid input codec: %d", audio->config.in.codec);
+ *job->die = 1;
+ goto cleanup;
+ }
+ w->fifo_in = audio->priv.fifo_in;
+ w->fifo_out = audio->priv.fifo_raw;
+ w->config = &audio->priv.config;
+ w->audio = audio;
+ w->codec_param = audio->config.in.codec_param;
+
+ hb_list_add( job->list_work, w );
+
+ /*
+ * Audio Encoder Thread
+ */
+ if( audio->config.out.codec != HB_ACODEC_AC3 &&
+ audio->config.out.codec != HB_ACODEC_DCA )
+ {
+ /*
+ * Add the encoder thread if not doing AC-3 pass through
+ */
+ if ( ( w = hb_codec_encoder( audio->config.out.codec ) ) == NULL )
+ {
+ hb_error("Invalid audio codec: %#x", audio->config.out.codec);
+ w = NULL;
+ *job->die = 1;
+ goto cleanup;
+ }
+ w->fifo_in = audio->priv.fifo_sync;
+ w->fifo_out = audio->priv.fifo_out;
+ w->config = &audio->priv.config;
+ w->audio = audio;
+
+ hb_list_add( job->list_work, w );
+ }
+ }
+ }
+
+ if( job->chapter_markers && job->chapter_start == job->chapter_end )
+ {
+ job->chapter_markers = 0;
+ hb_log("work: only 1 chapter, disabling chapter markers");