X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=gtk%2Fsrc%2Fhb-backend.c;h=8f1ac95fb76b06a0c77e8ec3f621b61b1ac854ec;hb=9155051f96ff6f923fe2137e0730a300e8ce1404;hp=2a60fecc39637dbf42923d87a0b6630060440e6d;hpb=f78e4458ad5918c9c65bf658982b9997d966f113;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c index 2a60fecc..8f1ac95f 100644 --- a/gtk/src/hb-backend.c +++ b/gtk/src/hb-backend.c @@ -70,6 +70,18 @@ index_str_init(gint max_index) } } +static options_map_t d_point_to_point_opts[] = +{ + {"Chapters:", "chapter", 0, "0"}, + {"Seconds:", "time", 1, "1"}, + {"Frames:", "frame", 2, "2"}, +}; +combo_opts_t point_to_point_opts = +{ + sizeof(d_point_to_point_opts)/sizeof(options_map_t), + d_point_to_point_opts +}; + static options_map_t d_when_complete_opts[] = { {"Do Nothing", "nothing", 0, "0"}, @@ -359,6 +371,7 @@ typedef struct combo_name_map_t combo_name_map[] = { + {"PtoPType", &point_to_point_opts}, {"WhenComplete", &when_complete_opts}, {"PicturePAR", &par_opts}, {"PictureModulus", &alignment_opts}, @@ -935,7 +948,7 @@ ghb_find_closest_audio_bitrate(gint codec, gint rate) gint result; if (codec == HB_ACODEC_FAAC) - high = 160; + high = 320; result = high; for (ii = 0; ii < hb_audio_bitrates_count; ii++) @@ -1082,14 +1095,14 @@ get_amix_value(gint val) static hb_handle_t * h_scan = NULL; static hb_handle_t * h_queue = NULL; -extern void hb_get_tempory_directory(hb_handle_t *h, char path[512]); +extern void hb_get_temporary_directory(char path[512]); gchar* ghb_get_tmp_dir() { char dir[512]; - hb_get_tempory_directory(h_scan, dir); + hb_get_temporary_directory(dir); return g_strdup(dir); } @@ -1098,7 +1111,7 @@ ghb_hb_cleanup(gboolean partial) { char dir[512]; - hb_get_tempory_directory(h_scan, dir); + hb_get_temporary_directory(dir); del_tree(dir, !partial); } @@ -1136,6 +1149,37 @@ ghb_subtitle_track_source(signal_user_data_t *ud, gint track) } const char* +ghb_subtitle_source_name(gint source) +{ + const gchar * name = "Unknown"; + switch (source) + { + case VOBSUB: + name = "VOBSUB"; + break; + case TX3GSUB: + name = "TX3G"; + break; + case UTF8SUB: + name = "UTF8"; + break; + case CC708SUB: + case CC608SUB: + name = "CC"; + break; + case SRTSUB: + name = "SRT"; + break; + case SSASUB: + name = "SSA"; + break; + default: + break; + } + return name; +} + +const char* ghb_subtitle_track_source_name(signal_user_data_t *ud, gint track) { gint titleindex; @@ -1173,21 +1217,7 @@ ghb_subtitle_track_source_name(signal_user_data_t *ud, gint track) sub = hb_list_item( title->list_subtitle, track); if (sub != NULL) { - switch (sub->source) - { - case VOBSUB: - name = "Bitmap"; - break; - case CC708SUB: - case CC608SUB: - name = "Text"; - break; - case SRTSUB: - name = "SRT"; - break; - default: - break; - } + name = ghb_subtitle_source_name(sub->source); } done: @@ -1371,7 +1401,6 @@ ghb_grey_combo_options(GtkBuilder *builder) } if (container == HB_MUX_MP4) { - grey_combo_box_item(builder, "AudioEncoder", HB_ACODEC_LAME, TRUE); grey_combo_box_item(builder, "AudioEncoder", HB_ACODEC_VORBIS, TRUE); grey_combo_box_item(builder, "VideoEncoder", HB_VCODEC_THEORA, TRUE); } @@ -1381,12 +1410,10 @@ ghb_grey_combo_options(GtkBuilder *builder) gboolean allow_dolby = TRUE; gboolean allow_dpl2 = TRUE; gboolean allow_6ch = TRUE; - allow_mono = acodec & ~HB_ACODEC_LAME; + allow_mono = TRUE; allow_6ch = acodec & ~HB_ACODEC_LAME; if (audio) { - allow_mono = allow_mono && - (audio->in.codec & (HB_ACODEC_AC3|HB_ACODEC_DCA)); gint layout = audio->in.channel_layout & HB_INPUT_CH_LAYOUT_DISCRETE_NO_LFE_MASK; allow_stereo = ((layout == HB_INPUT_CH_LAYOUT_MONO && !allow_mono) || layout >= HB_INPUT_CH_LAYOUT_STEREO); @@ -1396,7 +1423,6 @@ ghb_grey_combo_options(GtkBuilder *builder) (layout == HB_INPUT_CH_LAYOUT_DOLBY); allow_dpl2 = (layout == HB_INPUT_CH_LAYOUT_3F2R); allow_6ch = allow_6ch && - (audio->in.codec & (HB_ACODEC_AC3|HB_ACODEC_DCA)) && (layout == HB_INPUT_CH_LAYOUT_3F2R) && (audio->in.channel_layout & HB_INPUT_CH_LAYOUT_HAS_LFE); } @@ -1412,7 +1438,12 @@ ghb_get_best_audio_bitrate(gint acodec, gint br, gint channels) { if (acodec & HB_ACODEC_FAAC) { - int maxbr = channels * 80; + int maxbr; + + if (channels == 2) + maxbr = 320; + else + maxbr = 768; if (br > maxbr) br = maxbr; } @@ -1437,9 +1468,7 @@ ghb_get_best_mix(gint titleindex, gint track, gint acodec, gint mix) audio = get_hb_audio(titleindex, track); if (audio) { - allow_mono = - (audio->in.codec & (HB_ACODEC_AC3|HB_ACODEC_DCA)) && - (acodec & ~HB_ACODEC_LAME); + allow_mono = TRUE; gint layout = audio->in.channel_layout & HB_INPUT_CH_LAYOUT_DISCRETE_NO_LFE_MASK; allow_stereo = ((layout == HB_INPUT_CH_LAYOUT_MONO && !allow_mono) || layout >= HB_INPUT_CH_LAYOUT_STEREO); @@ -1449,7 +1478,6 @@ ghb_get_best_mix(gint titleindex, gint track, gint acodec, gint mix) (layout == HB_INPUT_CH_LAYOUT_DOLBY); allow_dpl2 = (layout == HB_INPUT_CH_LAYOUT_3F2R); allow_6ch = - (audio->in.codec & (HB_ACODEC_AC3|HB_ACODEC_DCA)) && (acodec & ~HB_ACODEC_LAME) && (layout == HB_INPUT_CH_LAYOUT_3F2R) && (audio->in.channel_layout & HB_INPUT_CH_LAYOUT_HAS_LFE); @@ -1955,7 +1983,18 @@ subtitle_track_opts_set(GtkBuilder *builder, const gchar *name, gint titleindex) subtitle = (hb_subtitle_t *)hb_list_item(title->list_subtitle, ii); // Skip subtitles that must be burned if there is already // a burned subtitle in the list - options[ii] = g_strdup_printf("%d - %s", ii+1, subtitle->lang); +#if 0 + if (subtitle->source == VOBSUB) + { + options[ii] = g_strdup_printf("%d - %s", ii+1, subtitle->lang); + } + else +#endif + { + options[ii] = g_strdup_printf("%d - %s (%s)", ii+1, + subtitle->lang, + ghb_subtitle_source_name(subtitle->source)); + } subtitle_opts.map[ii+1].option = options[ii]; subtitle_opts.map[ii+1].shortOpt = index_str[ii]; subtitle_opts.map[ii+1].ivalue = ii; @@ -2006,21 +2045,23 @@ ghb_longest_title() hb_title_t * title; gint ii; gint count = 0; - guint64 longest = 0; gint titleindex = 0; + gint feature; g_debug("ghb_longest_title ()\n"); if (h_scan == NULL) return 0; list = hb_get_titles( h_scan ); count = hb_list_count( list ); if (count > 100) count = 100; + if (count < 1) return 0; + title = (hb_title_t*)hb_list_item(list, 0); + feature = title->job->feature; for (ii = 0; ii < count; ii++) { title = (hb_title_t*)hb_list_item(list, ii); - if (title->duration > longest) + if (title->index == feature) { - titleindex = ii; - longest = title->duration; + return ii; } } return titleindex; @@ -2085,8 +2126,11 @@ ghb_find_audio_track( gint count = 0; gint track = -1; gint max_chan = 0; - gboolean *used; + gboolean *used = NULL; + gboolean *passthru_used; gint try_acodec; + gint passthru_acodec; + gboolean passthru; g_debug("find_audio_track ()\n"); if (h_scan == NULL) return -1; @@ -2099,7 +2143,8 @@ ghb_find_audio_track( if (count > 10) count = 10; // Try to find an item that matches the preferred language and // the passthru codec type - if (acodec & (HB_ACODEC_AC3 | HB_ACODEC_DCA)) + passthru = (acodec & (HB_ACODEC_AC3 | HB_ACODEC_DCA)) != 0; + if (passthru) { for (ii = 0; ii < count; ii++) { @@ -2107,11 +2152,11 @@ ghb_find_audio_track( audio = (hb_audio_config_t*)hb_list_audio_config_item( title->list_audio, ii ); - try_acodec = (HB_ACODEC_AC3 | HB_ACODEC_DCA) & audio->in.codec; + passthru_acodec = (HB_ACODEC_AC3 | HB_ACODEC_DCA) & audio->in.codec; // Is the source track use a passthru capable codec? - if (try_acodec == 0) + if (passthru_acodec == 0) continue; - used = get_track_used(try_acodec, track_indices, count); + used = get_track_used(passthru_acodec, track_indices, count); // Has the track already been used with this codec? if (used[ii]) continue; @@ -2150,7 +2195,15 @@ ghb_find_audio_track( if (used[ii]) continue; audio = (hb_audio_config_t*)hb_list_audio_config_item( - title->list_audio, ii ); + title->list_audio, ii ); + passthru_acodec = (HB_ACODEC_AC3 | HB_ACODEC_DCA) & audio->in.codec; + if (passthru_acodec && passthru) + { + passthru_used = get_track_used(passthru_acodec, track_indices, count); + // Has the track already been used with this codec for passthru? + if (passthru_used[ii]) + continue; + } // Find a track that is not visually impaired or dirctor's commentary if ((audio->lang.type < 2) && ((strcmp(lang, audio->lang.iso639_2) == 0) || @@ -2167,7 +2220,7 @@ ghb_find_audio_track( } // Try to fine an item that does not match the preferred language and // matches the passthru codec type - if (acodec & (HB_ACODEC_AC3 | HB_ACODEC_DCA)) + if (passthru) { for (ii = 0; ii < count; ii++) { @@ -2175,11 +2228,11 @@ ghb_find_audio_track( audio = (hb_audio_config_t*)hb_list_audio_config_item( title->list_audio, ii ); - try_acodec = (HB_ACODEC_AC3 | HB_ACODEC_DCA) & audio->in.codec; + passthru_acodec = (HB_ACODEC_AC3 | HB_ACODEC_DCA) & audio->in.codec; // Is the source track use a passthru capable codec? - if (try_acodec == 0) + if (passthru_acodec == 0) continue; - used = get_track_used(try_acodec, track_indices, count); + used = get_track_used(passthru_acodec, track_indices, count); // Has the track already been used with this codec? if (used[ii]) continue; @@ -2217,6 +2270,14 @@ ghb_find_audio_track( continue; audio = (hb_audio_config_t*)hb_list_audio_config_item( title->list_audio, ii ); + passthru_acodec = (HB_ACODEC_AC3 | HB_ACODEC_DCA) & audio->in.codec; + if (passthru_acodec && passthru) + { + passthru_used = get_track_used(passthru_acodec, track_indices, count); + // Has the track already been used with this codec for passthru? + if (passthru_used[ii]) + continue; + } // Find a track that is not visually impaired or dirctor's commentary if (audio->lang.type < 2) { @@ -2233,7 +2294,15 @@ ghb_find_audio_track( for (ii = 0; ii < count; ii++) { audio = (hb_audio_config_t*)hb_list_audio_config_item( - title->list_audio, ii ); + title->list_audio, ii ); + passthru_acodec = (HB_ACODEC_AC3 | HB_ACODEC_DCA) & audio->in.codec; + if (passthru_acodec && passthru) + { + passthru_used = get_track_used(passthru_acodec, track_indices, count); + // Has the track already been used with this codec for passthru? + if (passthru_used[ii]) + continue; + } // Has the track already been used with this codec? if (!used[ii]) { @@ -2341,7 +2410,7 @@ ghb_find_subtitle_track( continue; subtitle = (hb_subtitle_t*)hb_list_item( title->list_subtitle, ii ); - if (((burn || force) && (subtitle->source == VOBSUB)) && + if ((!(burn || force) || (subtitle->source == VOBSUB)) && ((strcmp(lang, subtitle->iso639_2) == 0) || (strcmp(lang, "und") == 0))) { @@ -2385,7 +2454,7 @@ small_opts_set(GtkBuilder *builder, const gchar *name, combo_opts_t *opts) gint ii; gchar *str; - g_debug("generic_opts_set ()\n"); + g_debug("small_opts_set ()\n"); if (name == NULL || opts == NULL) return; store = get_combo_box_store(builder, name); gtk_list_store_clear(store); @@ -2563,6 +2632,7 @@ ghb_update_ui_combo_box( audio_track_opts_set(ud->builder, "AudioTrack", user_data); subtitle_track_opts_set(ud->builder, "SubtitleTrack", user_data); generic_opts_set(ud->builder, "VideoQualityGranularity", &vqual_granularity_opts); + generic_opts_set(ud->builder, "PtoPType", &point_to_point_opts); generic_opts_set(ud->builder, "WhenComplete", &when_complete_opts); generic_opts_set(ud->builder, "PicturePAR", &par_opts); generic_opts_set(ud->builder, "PictureModulus", &alignment_opts); @@ -2907,6 +2977,7 @@ ghb_backend_close() { hb_close(&h_queue); hb_close(&h_scan); + hb_global_close(); } void ghb_backend_scan_stop() @@ -3078,6 +3149,22 @@ ghb_track_status() case HB_STATE_WORKING: hb_status.queue.state |= GHB_STATE_WORKING; hb_status.queue.state &= ~GHB_STATE_PAUSED; + hb_status.queue.state &= ~GHB_STATE_SEARCHING; + hb_status.queue.job_cur = p.job_cur; + hb_status.queue.job_count = p.job_count; + hb_status.queue.progress = p.progress; + hb_status.queue.rate_cur = p.rate_cur; + hb_status.queue.rate_avg = p.rate_avg; + hb_status.queue.hours = p.hours; + hb_status.queue.minutes = p.minutes; + hb_status.queue.seconds = p.seconds; + hb_status.queue.unique_id = p.sequence_id & 0xFFFFFF; + break; + + case HB_STATE_SEARCHING: + hb_status.queue.state |= GHB_STATE_SEARCHING; + hb_status.queue.state &= ~GHB_STATE_WORKING; + hb_status.queue.state &= ~GHB_STATE_PAUSED; hb_status.queue.job_cur = p.job_cur; hb_status.queue.job_count = p.job_count; hb_status.queue.progress = p.progress; @@ -3108,6 +3195,7 @@ ghb_track_status() hb_status.queue.state &= ~GHB_STATE_MUXING; hb_status.queue.state &= ~GHB_STATE_PAUSED; hb_status.queue.state &= ~GHB_STATE_WORKING; + hb_status.queue.state &= ~GHB_STATE_SEARCHING; switch (p.error) { case HB_ERROR_NONE: @@ -3428,7 +3516,7 @@ ghb_set_scale(signal_user_data_t *ud, gint mode) job->anamorphic.mode = pic_par; // The scaler crashes if the dimensions are not divisible by 2 // Align mod 2. And so does something in x264_encoder_headers() - job->anamorphic.modulus = mod; + job->modulus = mod; job->anamorphic.par_width = title->pixel_aspect_width; job->anamorphic.par_height = title->pixel_aspect_height; job->anamorphic.dar_width = 0; @@ -3571,7 +3659,7 @@ set_preview_job_settings(hb_job_t *job, GValue *settings) job->crop[3] = ghb_settings_get_int(settings, "PictureRightCrop"); job->anamorphic.mode = ghb_settings_combo_int(settings, "PicturePAR"); - job->anamorphic.modulus = + job->modulus = ghb_settings_combo_int(settings, "PictureModulus"); job->width = ghb_settings_get_int(settings, "scale_width"); job->height = ghb_settings_get_int(settings, "scale_height"); @@ -3588,7 +3676,7 @@ set_preview_job_settings(hb_job_t *job, GValue *settings) job->crop[1] = 0; job->crop[2] = 0; job->crop[3] = 0; - job->anamorphic.modulus = 2; + job->modulus = 2; } gboolean decomb_deint = ghb_settings_get_boolean(settings, "PictureDecombDeinterlace"); @@ -3800,7 +3888,6 @@ ghb_validate_subtitles(signal_user_data_t *ud) titleindex = ghb_settings_combo_int(ud->settings, "title"); title = hb_list_item( list, titleindex ); if (title == NULL) return FALSE; - gint mux = ghb_settings_combo_int(ud->settings, "FileFormat"); const GValue *slist, *settings; gint count, ii, source; @@ -3833,23 +3920,6 @@ ghb_validate_subtitles(signal_user_data_t *ud) { one_burned = TRUE; } - if (!burned && mux == HB_MUX_MP4 && source == VOBSUB) - { - // MP4 can only handle burned vobsubs. make sure there isn't - // already something burned in the list - message = g_strdup_printf( - "Your chosen container does not support soft bitmap subtitles.\n\n" - "You should change your subtitle selections.\n" - "If you continue, some subtitles will be lost."); - if (!ghb_message_dialog(GTK_MESSAGE_WARNING, message, - "Cancel", "Continue")) - { - g_free(message); - return FALSE; - } - g_free(message); - break; - } if (source == SRTSUB) { gchar *filename; @@ -4004,12 +4074,7 @@ ghb_validate_audio(signal_user_data_t *ud) if (mux == HB_MUX_MP4) { mux_s = "MP4"; - // mp4/mp3|vorbis combination is not supported. - if (codec == HB_ACODEC_LAME) - { - a_unsup = "MP3"; - codec = HB_ACODEC_FAAC; - } + // mp4/vorbis|DTS combination is not supported. if (codec == HB_ACODEC_VORBIS) { a_unsup = "Vorbis"; @@ -4042,9 +4107,7 @@ ghb_validate_audio(signal_user_data_t *ud) gboolean allow_dolby = TRUE; gboolean allow_dpl2 = TRUE; gboolean allow_6ch = TRUE; - allow_mono = - (taudio->in.codec & (HB_ACODEC_AC3|HB_ACODEC_DCA)) && - (codec & ~HB_ACODEC_LAME); + allow_mono = TRUE; gint layout = taudio->in.channel_layout & HB_INPUT_CH_LAYOUT_DISCRETE_NO_LFE_MASK; allow_stereo = ((layout == HB_INPUT_CH_LAYOUT_MONO && !allow_mono) || layout >= HB_INPUT_CH_LAYOUT_STEREO); @@ -4054,7 +4117,6 @@ ghb_validate_audio(signal_user_data_t *ud) (layout == HB_INPUT_CH_LAYOUT_DOLBY); allow_dpl2 = (layout == HB_INPUT_CH_LAYOUT_3F2R); allow_6ch = - (taudio->in.codec & (HB_ACODEC_AC3|HB_ACODEC_DCA)) && (codec & ~HB_ACODEC_LAME) && (layout == HB_INPUT_CH_LAYOUT_3F2R) && (taudio->in.channel_layout & HB_INPUT_CH_LAYOUT_HAS_LFE); @@ -4212,13 +4274,42 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex) } if (!job->start_at_preview) { - gint chapter_start, chapter_end; - chapter_start = ghb_settings_get_int(js, "start_chapter"); - chapter_end = ghb_settings_get_int(js, "end_chapter"); + gint start, end; gint num_chapters = hb_list_count(title->list_chapter); - job->chapter_start = MIN( num_chapters, chapter_start ); - job->chapter_end = MAX( job->chapter_start, chapter_end ); + gint duration = title->duration / 90000; + job->chapter_start = 1; + job->chapter_end = num_chapters; + if (ghb_settings_combo_int(js, "PtoPType") == 0) + { + start = ghb_settings_get_int(js, "start_point"); + end = ghb_settings_get_int(js, "end_point"); + job->chapter_start = MIN( num_chapters, start ); + job->chapter_end = MAX( job->chapter_start, end ); + + } + if (ghb_settings_combo_int(js, "PtoPType") == 1) + { + job->chapter_start = 1; + job->chapter_end = num_chapters; + start = ghb_settings_get_int(js, "start_point"); + end = ghb_settings_get_int(js, "end_point"); + job->pts_to_start = (int64_t)MIN(duration-1, start) * 90000; + job->pts_to_stop = (int64_t)MAX(start+1, end) * 90000 - + job->pts_to_start; + } + if (ghb_settings_combo_int(js, "PtoPType") == 2) + { + job->chapter_start = 1; + job->chapter_end = num_chapters; + start = ghb_settings_get_int(js, "start_point"); + end = ghb_settings_get_int(js, "end_point"); + gint64 max_frames; + max_frames = (gint64)duration * title->rate / title->rate_base; + job->frame_to_start = (int64_t)MIN(max_frames-1, start-1); + job->frame_to_stop = (int64_t)MAX(start, end-1) - + job->frame_to_start; + } job->chapter_markers = ghb_settings_get_boolean(js, "ChapterMarkers"); if (job->chapter_start == job->chapter_end) job->chapter_markers = 0; @@ -4228,25 +4319,22 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex) GValue *chapter; gint chap; gint count; - + chapters = ghb_settings_get_value(js, "chapter_list"); count = ghb_array_len(chapters); - for(chap = chapter_start; chap <= chapter_end; chap++) + for(chap = 0; chap < count; chap++) { hb_chapter_t * chapter_s; gchar *name; - + name = NULL; - if (chap-1 < count) - { - chapter = ghb_array_get_nth(chapters, chap-1); - name = ghb_value_string(chapter); - } + chapter = ghb_array_get_nth(chapters, chap); + name = ghb_value_string(chapter); if (name == NULL) { - name = g_strdup_printf ("Chapter %2d", chap); + name = g_strdup_printf ("Chapter %2d", chap+1); } - chapter_s = hb_list_item( job->title->list_chapter, chap - 1); + chapter_s = hb_list_item( job->title->list_chapter, chap); strncpy(chapter_s->title, name, 1023); chapter_s->title[1023] = '\0'; g_free(name); @@ -4271,7 +4359,7 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex) gboolean keep_aspect; keep_aspect = ghb_settings_get_boolean(js, "PictureKeepRatio"); job->anamorphic.mode = ghb_settings_combo_int(js, "PicturePAR"); - job->anamorphic.modulus = ghb_settings_combo_int(js, "PictureModulus"); + job->modulus = ghb_settings_combo_int(js, "PictureModulus"); if (job->anamorphic.mode) { job->anamorphic.par_width = title->pixel_aspect_width; @@ -4432,8 +4520,7 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex) } } if ((job->mux == HB_MUX_MP4) && - ((audio.out.codec & HB_ACODEC_LAME) || - (audio.out.codec & HB_ACODEC_DCA) || + ((audio.out.codec & HB_ACODEC_DCA) || (audio.out.codec & HB_ACODEC_VORBIS))) { // mp4/mp3|dts|vorbis combination is not supported. @@ -4544,15 +4631,10 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex) subtitle = ghb_settings_get_int(ssettings, "SubtitleTrack"); if (subtitle == -1) { - if (!burned && job->mux == HB_MUX_MKV) + if (!burned) { job->select_subtitle_config.dest = PASSTHRUSUB; } - else if (!burned && job->mux == HB_MUX_MP4) - { - // Skip any non-burned vobsubs when output is mp4 - continue; - } else if (burned) { // Only allow one subtitle to be burned into the video @@ -4572,20 +4654,13 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex) hb_subtitle_config_t sub_config; subt = (hb_subtitle_t *)hb_list_item(title->list_subtitle, subtitle); - sub_config = subt->config; if (subt != NULL) { - if (!burned && job->mux == HB_MUX_MKV && - subt->format == PICTURESUB) + sub_config = subt->config; + if (!burned && subt->format == PICTURESUB) { sub_config.dest = PASSTHRUSUB; } - else if (!burned && job->mux == HB_MUX_MP4 && - subt->format == PICTURESUB) - { - // Skip any non-burned vobsubs when output is mp4 - continue; - } else if ( burned && subt->format == PICTURESUB ) { // Only allow one subtitle to be burned into the video