X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=gtk%2Fsrc%2Fhb-backend.c;h=65f553f472eef6f01d6fd5e9462b7d90c9c5b187;hb=44946a6f8be82a70e65ca534541183a26fdb804b;hp=94c5d5e8c59ff11b7059da29eb0e85dc369b7525;hpb=f781852508c24065b6f03f417fa15087ac9ab643;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c index 94c5d5e8..65f553f4 100644 --- a/gtk/src/hb-backend.c +++ b/gtk/src/hb-backend.c @@ -31,6 +31,7 @@ #include "settings.h" #include "callbacks.h" #include "subtitlehandler.h" +#include "audiohandler.h" #include "x264handler.h" #include "preview.h" #include "values.h" @@ -69,6 +70,19 @@ index_str_init(gint max_index) } } +static options_map_t d_when_complete_opts[] = +{ + {"Do Nothing", "nothing", 0, "0"}, + {"Show Notification", "notify", 1, "1"}, + {"Put Computer To Sleep", "sleep", 2, "2"}, + {"Shutdown Computer", "shutdown", 3, "3"}, +}; +combo_opts_t when_complete_opts = +{ + sizeof(d_when_complete_opts)/sizeof(options_map_t), + d_when_complete_opts +}; + static options_map_t d_par_opts[] = { {"Off", "0", 0, "0"}, @@ -107,6 +121,19 @@ combo_opts_t logging_opts = d_logging_opts }; +static options_map_t d_log_longevity_opts[] = +{ + {"Week", "week", 7, "7"}, + {"Month", "month", 30, "30"}, + {"Year", "year", 365, "365"}, + {"Immortal", "immortal", 366, "366"}, +}; +combo_opts_t log_longevity_opts = +{ + sizeof(d_log_longevity_opts)/sizeof(options_map_t), + d_log_longevity_opts +}; + static options_map_t d_appcast_update_opts[] = { {"Never", "never", 0, "never"}, @@ -273,6 +300,7 @@ static options_map_t d_subme_opts[] = {"7", "7", 7, "7"}, {"8", "8", 8, "8"}, {"9", "9", 9, "9"}, + {"10", "10", 10, "10"}, }; combo_opts_t subme_opts = { @@ -331,9 +359,11 @@ typedef struct combo_name_map_t combo_name_map[] = { + {"WhenComplete", &when_complete_opts}, {"PicturePAR", &par_opts}, {"PictureModulus", &alignment_opts}, {"LoggingLevel", &logging_opts}, + {"LogLongevity", &log_longevity_opts}, {"check_updates", &appcast_update_opts}, {"VideoQualityGranularity", &vqual_granularity_opts}, {"FileFormat", &container_opts}, @@ -355,6 +385,47 @@ combo_name_map_t combo_name_map[] = {NULL, NULL} }; +const gchar *srt_codeset_table[] = +{ + "ANSI_X3.4-1968", + "ANSI_X3.4-1986", + "ANSI_X3.4", + "ANSI_X3.110-1983", + "ANSI_X3.110", + "ASCII", + "ECMA-114", + "ECMA-118", + "ECMA-128", + "ECMA-CYRILLIC", + "IEC_P27-1", + "ISO-8859-1", + "ISO-8859-2", + "ISO-8859-3", + "ISO-8859-4", + "ISO-8859-5", + "ISO-8859-6", + "ISO-8859-7", + "ISO-8859-8", + "ISO-8859-9", + "ISO-8859-9E", + "ISO-8859-10", + "ISO-8859-11", + "ISO-8859-13", + "ISO-8859-14", + "ISO-8859-15", + "ISO-8859-16", + "UTF-7", + "UTF-8", + "UTF-16", + "UTF-16LE", + "UTF-16BE", + "UTF-32", + "UTF-32LE", + "UTF-32BE", + NULL +}; +#define SRT_TABLE_SIZE (sizeof(srt_codeset_table)/ sizeof(char*)-1) + #if 0 typedef struct iso639_lang_t { @@ -405,21 +476,20 @@ const iso639_lang_t ghb_language_table[] = { "Cree", "", "cr", "cre" }, { "Czech", "", "cs", "ces", "cze" }, { "Danish", "Dansk", "da", "dan" }, + { "German", "Deutsch", "de", "deu", "ger" }, { "Divehi", "", "dv", "div" }, - { "Dutch", "Nederlands", "nl", "nld", "dut" }, { "Dzongkha", "", "dz", "dzo" }, { "English", "English", "en", "eng" }, + { "Spanish", "Espanol", "es", "spa" }, { "Esperanto", "", "eo", "epo" }, { "Estonian", "", "et", "est" }, { "Ewe", "", "ee", "ewe" }, { "Faroese", "", "fo", "fao" }, { "Fijian", "", "fj", "fij" }, - { "Finnish", "Suomi", "fi", "fin" }, { "French", "Francais", "fr", "fra", "fre" }, { "Western Frisian", "", "fy", "fry" }, { "Fulah", "", "ff", "ful" }, { "Georgian", "", "ka", "kat", "geo" }, - { "German", "Deutsch", "de", "deu", "ger" }, { "Gaelic (Scots)", "", "gd", "gla" }, { "Irish", "", "ga", "gle" }, { "Galician", "", "gl", "glg" }, @@ -433,10 +503,10 @@ const iso639_lang_t ghb_language_table[] = { "Herero", "", "hz", "her" }, { "Hindi", "", "hi", "hin" }, { "Hiri Motu", "", "ho", "hmo" }, - { "Hungarian", "Magyar", "hu", "hun" }, + { "Croatian", "Hrvatski", "hr", "hrv", "scr" }, { "Igbo", "", "ig", "ibo" }, - { "Icelandic", "Islenska", "is", "isl", "ice" }, { "Ido", "", "io", "ido" }, + { "Icelandic", "Islenska", "is", "isl", "ice" }, { "Sichuan Yi", "", "ii", "iii" }, { "Inuktitut", "", "iu", "iku" }, { "Interlingue", "", "ie", "ile" }, @@ -470,6 +540,7 @@ const iso639_lang_t ghb_language_table[] = { "Luba-Katanga", "", "lu", "lub" }, { "Ganda", "", "lg", "lug" }, { "Macedonian", "", "mk", "mkd", "mac" }, + { "Hungarian", "Magyar", "hu", "hun" }, { "Marshallese", "", "mh", "mah" }, { "Malayalam", "", "ml", "mal" }, { "Maori", "", "mi", "mri", "mao" }, @@ -481,13 +552,14 @@ const iso639_lang_t ghb_language_table[] = { "Mongolian", "", "mn", "mon" }, { "Nauru", "", "na", "nau" }, { "Navajo", "", "nv", "nav" }, + { "Dutch", "Nederlands", "nl", "nld", "dut" }, { "Ndebele, South", "", "nr", "nbl" }, { "Ndebele, North", "", "nd", "nde" }, { "Ndonga", "", "ng", "ndo" }, { "Nepali", "", "ne", "nep" }, + { "Norwegian", "Norsk", "no", "nor" }, { "Norwegian Nynorsk", "", "nn", "nno" }, { "Norwegian Bokmål", "", "nb", "nob" }, - { "Norwegian", "Norsk", "no", "nor" }, { "Chichewa; Nyanja", "", "ny", "nya" }, { "Occitan", "", "oc", "oci" }, { "Ojibwa", "", "oj", "oji" }, @@ -508,7 +580,6 @@ const iso639_lang_t ghb_language_table[] = { "Sango", "", "sg", "sag" }, { "Sanskrit", "", "sa", "san" }, { "Serbian", "", "sr", "srp", "scc" }, - { "Croatian", "Hrvatski", "hr", "hrv", "scr" }, { "Sinhala", "", "si", "sin" }, { "Slovak", "", "sk", "slk", "slo" }, { "Slovenian", "", "sl", "slv" }, @@ -518,10 +589,10 @@ const iso639_lang_t ghb_language_table[] = { "Sindhi", "", "sd", "snd" }, { "Somali", "", "so", "som" }, { "Sotho, Southern", "", "st", "sot" }, - { "Spanish", "Espanol", "es", "spa" }, { "Sardinian", "", "sc", "srd" }, { "Swati", "", "ss", "ssw" }, { "Sundanese", "", "su", "sun" }, + { "Finnish", "Suomi", "fi", "fin" }, { "Swahili", "", "sw", "swa" }, { "Swedish", "Svenska", "sv", "swe" }, { "Tahitian", "", "ty", "tah" }, @@ -935,7 +1006,10 @@ lookup_audio_lang_option(const GValue *rate) { if (strcmp(ghb_language_table[ii].iso639_2, str) == 0) { - result = ghb_language_table[ii].eng_name; + if (ghb_language_table[ii].native_name[0] != 0) + result = ghb_language_table[ii].native_name; + else + result = ghb_language_table[ii].eng_name; break; } } @@ -1007,7 +1081,7 @@ ghb_subtitle_track_source(signal_user_data_t *ud, gint track) gint titleindex; if (track == -2) - return CC608SUB; + return SRTSUB; if (track < 0) return VOBSUB; titleindex = ghb_settings_combo_int(ud->settings, "title"); @@ -1042,7 +1116,7 @@ ghb_subtitle_track_source_name(signal_user_data_t *ud, gint track) if (track == -2) { - name = "Text"; + name = "SRT"; goto done; } if (track == -1) @@ -1079,9 +1153,11 @@ ghb_subtitle_track_source_name(signal_user_data_t *ud, gint track) break; case CC708SUB: case CC608SUB: - case SRTSUB: name = "Text"; break; + case SRTSUB: + name = "SRT"; + break; default: break; } @@ -1091,6 +1167,42 @@ done: return name; } +gchar* +ghb_subtitle_track_lang(signal_user_data_t *ud, gint track) +{ + gint titleindex; + + titleindex = ghb_settings_combo_int(ud->settings, "title"); + if (titleindex < 0) + goto fail; + if (track == -1) + return ghb_get_user_audio_lang(ud, titleindex, 0); + if (track < 0) + goto fail; + + hb_list_t * list; + hb_title_t * title; + hb_subtitle_t * sub; + + if (h_scan == NULL) + goto fail; + + list = hb_get_titles( h_scan ); + if( !hb_list_count( list ) ) + { + /* No valid title, stop right there */ + goto fail; + } + title = hb_list_item( list, titleindex ); + if (title == NULL) // Bad titleindex + goto fail; + sub = hb_list_item( title->list_subtitle, track); + if (sub != NULL) + return g_strdup(sub->iso639_2); + +fail: + return g_strdup("und"); +} gint ghb_get_title_number(gint titleindex) @@ -1500,6 +1612,33 @@ mix_opts_set(GtkBuilder *builder, const gchar *name) } static void +srt_codeset_opts_set(GtkBuilder *builder, const gchar *name) +{ + GtkTreeIter iter; + GtkListStore *store; + gint ii; + + g_debug("srt_codeset_opts_set ()\n"); + store = get_combo_box_store(builder, name); + gtk_list_store_clear(store); + for (ii = 0; ii < SRT_TABLE_SIZE; ii++) + { + gtk_list_store_append(store, &iter); + gtk_list_store_set(store, &iter, + 0, srt_codeset_table[ii], + 1, TRUE, + 2, srt_codeset_table[ii], + 3, (gdouble)ii, + 4, srt_codeset_table[ii], + -1); + } + GtkComboBoxEntry *cbe; + + cbe = GTK_COMBO_BOX_ENTRY(GHB_WIDGET(builder, name)); + //gtk_combo_box_entry_set_text_column(cbe, 0); +} + +static void language_opts_set(GtkBuilder *builder, const gchar *name) { GtkTreeIter iter; @@ -1511,9 +1650,16 @@ language_opts_set(GtkBuilder *builder, const gchar *name) gtk_list_store_clear(store); for (ii = 0; ii < LANG_TABLE_SIZE; ii++) { + const gchar *lang; + + if (ghb_language_table[ii].native_name[0] != 0) + lang = ghb_language_table[ii].native_name; + else + lang = ghb_language_table[ii].eng_name; + gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, - 0, ghb_language_table[ii].eng_name, + 0, lang, 1, TRUE, 2, ghb_language_table[ii].iso639_2, 3, (gdouble)ii, @@ -1773,13 +1919,20 @@ subtitle_track_opts_set(GtkBuilder *builder, const gchar *name, gint titleindex) index_str_init(LANG_TABLE_SIZE-1); for (ii = 0; ii < LANG_TABLE_SIZE; ii++) { - subtitle_opts.map[ii+1].option = ghb_language_table[ii].eng_name; + const gchar *lang; + + if (ghb_language_table[ii].native_name[0] != 0) + lang = ghb_language_table[ii].native_name; + else + lang = ghb_language_table[ii].eng_name; + + subtitle_opts.map[ii+1].option = lang; subtitle_opts.map[ii+1].shortOpt = index_str[ii]; subtitle_opts.map[ii+1].ivalue = ii; subtitle_opts.map[ii+1].svalue = ghb_language_table[ii].iso639_2; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, - 0, ghb_language_table[ii].eng_name, + 0, lang, 1, TRUE, 2, index_str[ii], 3, (gdouble)ii, @@ -2015,6 +2168,32 @@ ghb_find_pref_subtitle_track(const gchar *lang) } gint +ghb_find_cc_track(gint titleindex) +{ + hb_list_t * list; + hb_title_t * title; + hb_subtitle_t * subtitle; + gint count, ii; + + g_debug("ghb_find_cc_track ()\n"); + if (h_scan == NULL) return -2; + list = hb_get_titles( h_scan ); + title = (hb_title_t*)hb_list_item( list, titleindex ); + if (title != NULL) + { + count = hb_list_count( title->list_subtitle ); + // Try to find an item that matches the preferred language + for (ii = 0; ii < count; ii++) + { + subtitle = (hb_subtitle_t*)hb_list_item( title->list_subtitle, ii ); + if (subtitle->source == CC608SUB || subtitle->source == CC708SUB) + return ii; + } + } + return -2; +} + +gint ghb_find_subtitle_track( gint titleindex, const gchar *lang, @@ -2111,6 +2290,8 @@ ghb_lookup_combo_int(const gchar *name, const GValue *gval) return lookup_video_rate_int(gval); else if (strcmp(name, "AudioMixdown") == 0) return lookup_mix_int(gval); + else if (strcmp(name, "SrtLanguage") == 0) + return lookup_audio_lang_int(gval); else if (strcmp(name, "PreferredLanguage") == 0) return lookup_audio_lang_int(gval); else @@ -2134,6 +2315,8 @@ ghb_lookup_combo_double(const gchar *name, const GValue *gval) return lookup_video_rate_int(gval); else if (strcmp(name, "AudioMixdown") == 0) return lookup_mix_int(gval); + else if (strcmp(name, "SrtLanguage") == 0) + return lookup_audio_lang_int(gval); else if (strcmp(name, "PreferredLanguage") == 0) return lookup_audio_lang_int(gval); else @@ -2157,6 +2340,8 @@ ghb_lookup_combo_option(const gchar *name, const GValue *gval) return lookup_video_rate_option(gval); else if (strcmp(name, "AudioMixdown") == 0) return lookup_mix_option(gval); + else if (strcmp(name, "SrtLanguage") == 0) + return lookup_audio_lang_option(gval); else if (strcmp(name, "PreferredLanguage") == 0) return lookup_audio_lang_option(gval); else @@ -2180,6 +2365,8 @@ ghb_lookup_combo_string(const gchar *name, const GValue *gval) return lookup_video_rate_option(gval); else if (strcmp(name, "AudioMixdown") == 0) return lookup_mix_option(gval); + else if (strcmp(name, "SrtLanguage") == 0) + return lookup_audio_lang_option(gval); else if (strcmp(name, "PreferredLanguage") == 0) return lookup_audio_lang_option(gval); else @@ -2227,14 +2414,18 @@ ghb_update_ui_combo_box( audio_samplerate_opts_set(ud->builder, "AudioSamplerate", hb_audio_rates, hb_audio_rates_count); video_rate_opts_set(ud->builder, "VideoFramerate", hb_video_rates, hb_video_rates_count); mix_opts_set(ud->builder, "AudioMixdown"); + language_opts_set(ud->builder, "SrtLanguage"); language_opts_set(ud->builder, "PreferredLanguage"); + srt_codeset_opts_set(ud->builder, "SrtCodeset"); title_opts_set(ud->builder, "title"); 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, "WhenComplete", &when_complete_opts); generic_opts_set(ud->builder, "PicturePAR", &par_opts); generic_opts_set(ud->builder, "PictureModulus", &alignment_opts); generic_opts_set(ud->builder, "LoggingLevel", &logging_opts); + generic_opts_set(ud->builder, "LogLongevity", &log_longevity_opts); generic_opts_set(ud->builder, "check_updates", &appcast_update_opts); generic_opts_set(ud->builder, "FileFormat", &container_opts); generic_opts_set(ud->builder, "PictureDeinterlace", &deint_opts); @@ -2260,8 +2451,12 @@ ghb_update_ui_combo_box( video_rate_opts_set(ud->builder, "VideoFramerate", hb_video_rates, hb_video_rates_count); else if (strcmp(name, "AudioMixdown") == 0) mix_opts_set(ud->builder, "AudioMixdown"); + else if (strcmp(name, "SrtLanguage") == 0) + language_opts_set(ud->builder, "SrtLanguage"); else if (strcmp(name, "PreferredLanguage") == 0) language_opts_set(ud->builder, "PreferredLanguage"); + else if (strcmp(name, "SrtCodeset") == 0) + srt_codeset_opts_set(ud->builder, "SrtCodeset"); else if (strcmp(name, "title") == 0) title_opts_set(ud->builder, "title"); else if (strcmp(name, "SubtitleTrack") == 0) @@ -2286,7 +2481,9 @@ init_ui_combo_boxes(GtkBuilder *builder) init_combo_box(builder, "AudioSamplerate"); init_combo_box(builder, "VideoFramerate"); init_combo_box(builder, "AudioMixdown"); + init_combo_box(builder, "SrtLanguage"); init_combo_box(builder, "PreferredLanguage"); + init_combo_box(builder, "SrtCodeset"); init_combo_box(builder, "title"); init_combo_box(builder, "AudioTrack"); for (ii = 0; combo_name_map[ii].name != NULL; ii++) @@ -3032,10 +3229,8 @@ ghb_set_scale(signal_user_data_t *ud, gint mode) width = ((double)height * crop_width / crop_height) + 0.5; job->width = width; job->height = height; - if (max_width) - job->maxWidth = max_width; - if (max_height) - job->maxHeight = max_height; + job->maxWidth = max_width; + job->maxHeight = max_height; job->crop[0] = crop[0]; job->crop[1] = crop[1]; job->crop[2] = crop[2]; job->crop[3] = crop[3]; if (job->anamorphic.mode == 3 && !keep_aspect) @@ -3053,9 +3248,7 @@ ghb_set_scale(signal_user_data_t *ud, gint mode) job->anamorphic.dar_width = ghb_settings_get_int(ud->settings, "PictureDisplayWidth"); - job->anamorphic.dar_height = - ghb_settings_get_int(ud->settings, - "PictureDisplayHeight"); + job->anamorphic.dar_height = height; } } else @@ -3270,7 +3463,7 @@ ghb_validate_filters(signal_user_data_t *ud) gint index; gchar *message; - // deinte 4 + // deinte index = ghb_settings_combo_int(ud->settings, "PictureDeinterlace"); if (index == 1) { @@ -3304,12 +3497,12 @@ ghb_validate_filters(signal_user_data_t *ud) } g_free(str); } - // decomb 4 + // decomb index = ghb_settings_combo_int(ud->settings, "PictureDecomb"); if (index == 1) { str = ghb_settings_get_string(ud->settings, "PictureDecombCustom"); - if (!ghb_validate_filter_string(str, 7)) + if (!ghb_validate_filter_string(str, 15)) { message = g_strdup_printf( "Invalid Decomb Settings:\n\n%s\n", @@ -3321,7 +3514,7 @@ ghb_validate_filters(signal_user_data_t *ud) } g_free(str); } - // denois 4 + // denois index = ghb_settings_combo_int(ud->settings, "PictureDenoise"); if (index == 1) { @@ -3393,7 +3586,7 @@ ghb_validate_subtitles(signal_user_data_t *ud) gint mux = ghb_settings_combo_int(ud->settings, "FileFormat"); const GValue *slist, *settings; - gint count, ii, track, source; + gint count, ii, source; gboolean burned, one_burned = FALSE; slist = ghb_settings_get_value(ud->settings, "subtitle_list"); @@ -3401,9 +3594,8 @@ ghb_validate_subtitles(signal_user_data_t *ud) for (ii = 0; ii < count; ii++) { settings = ghb_array_get_nth(slist, ii); - track = ghb_settings_combo_int(settings, "SubtitleTrack"); + source = ghb_settings_get_int(settings, "SubtitleSource"); burned = ghb_settings_get_boolean(settings, "SubtitleBurned"); - source = ghb_subtitle_track_source(ud, track); if (burned && one_burned) { // MP4 can only handle burned vobsubs. make sure there isn't @@ -3432,7 +3624,8 @@ ghb_validate_subtitles(signal_user_data_t *ud) "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")) + if (!ghb_message_dialog(GTK_MESSAGE_WARNING, message, + "Cancel", "Continue")) { g_free(message); return FALSE; @@ -3440,6 +3633,27 @@ ghb_validate_subtitles(signal_user_data_t *ud) g_free(message); break; } + if (source == SRTSUB) + { + gchar *filename; + + filename = ghb_settings_get_string(settings, "SrtFile"); + if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR)) + { + message = g_strdup_printf( + "Srt file does not exist or not a regular file.\n\n" + "You should choose a valid file.\n" + "If you continue, this subtitle will be ignored."); + if (!ghb_message_dialog(GTK_MESSAGE_WARNING, message, + "Cancel", "Continue")) + { + g_free(message); + return FALSE; + } + g_free(message); + break; + } + } } return TRUE; } @@ -4054,19 +4268,49 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex) gint subtitle; gboolean force, burned, def, one_burned = FALSE; + ghb_settings_set_boolean(js, "subtitle_scan", FALSE); subtitle_list = ghb_settings_get_value(js, "subtitle_list"); count = ghb_array_len(subtitle_list); for (ii = 0; ii < count; ii++) { GValue *ssettings; + gint source; ssettings = ghb_array_get_nth(subtitle_list, ii); - subtitle = ghb_settings_get_int(ssettings, "SubtitleTrack"); force = ghb_settings_get_boolean(ssettings, "SubtitleForced"); burned = ghb_settings_get_boolean(ssettings, "SubtitleBurned"); def = ghb_settings_get_boolean(ssettings, "SubtitleDefaultTrack"); + source = ghb_settings_get_int(ssettings, "SubtitleSource"); + + if (source == SRTSUB) + { + hb_subtitle_config_t sub_config; + gchar *filename, *lang, *code; + + filename = ghb_settings_get_string(ssettings, "SrtFile"); + if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR)) + { + continue; + } + sub_config.offset = ghb_settings_get_int(ssettings, "SrtOffset"); + lang = ghb_settings_get_string(ssettings, "SrtLanguage"); + code = ghb_settings_get_string(ssettings, "SrtCodeset"); + strncpy(sub_config.src_filename, filename, 128); + strncpy(sub_config.src_codeset, code, 40); + sub_config.force = 0; + sub_config.dest = PASSTHRUSUB; + sub_config.default_track = def; + + hb_srt_add( job, &sub_config, lang); + + g_free(filename); + g_free(lang); + g_free(code); + continue; + } + subtitle = ghb_settings_get_int(ssettings, "SubtitleTrack"); if (subtitle == -1) { if (!burned && job->mux == HB_MUX_MKV) @@ -4089,6 +4333,7 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex) job->select_subtitle_config.force = force; job->select_subtitle_config.default_track = def; job->indepth_scan = 1; + ghb_settings_set_boolean(js, "subtitle_scan", TRUE); } else if (subtitle >= 0) { @@ -4329,11 +4574,13 @@ ghb_pause_queue() if( s.state == HB_STATE_PAUSED ) { - hb_resume( h_queue ); + hb_status.queue.state &= ~GHB_STATE_PAUSED; + hb_resume( h_queue ); } else { - hb_pause( h_queue ); + hb_status.queue.state |= GHB_STATE_PAUSED; + hb_pause( h_queue ); } }