X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=gtk%2Fsrc%2Fhb-backend.c;h=83877da676f2304fb77ca9f623a00c94313083fc;hb=b46d27700507369ab125f043f8e0a5ed3f7c77e7;hp=ccc91c8ecdb4fd89ba39612faaf608f0f4108586;hpb=c11d1669585e0bf6268446bb1f5a1b74578c45d3;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c index ccc91c8e..83877da6 100644 --- a/gtk/src/hb-backend.c +++ b/gtk/src/hb-backend.c @@ -107,6 +107,19 @@ combo_opts_t logging_opts = d_logging_opts }; +static options_map_t d_appcast_update_opts[] = +{ + {"Never", "never", 0, "never"}, + {"Daily", "daily", 1, "daily"}, + {"Weekly", "weekly", 2, "weekly"}, + {"Monthly", "monthly", 3, "monthly"}, +}; +combo_opts_t appcast_update_opts = +{ + sizeof(d_appcast_update_opts)/sizeof(options_map_t), + d_appcast_update_opts +}; + static options_map_t d_vqual_granularity_opts[] = { {"0.2", "0.2", 0.2, "0.2"}, @@ -322,6 +335,7 @@ combo_name_map_t combo_name_map[] = {"PicturePAR", &par_opts}, {"PictureModulus", &alignment_opts}, {"LoggingLevel", &logging_opts}, + {"check_updates", &appcast_update_opts}, {"VideoQualityGranularity", &vqual_granularity_opts}, {"FileFormat", &container_opts}, {"PictureDeinterlace", &deint_opts}, @@ -1803,6 +1817,32 @@ ghb_longest_title() return titleindex; } +gchar* +ghb_get_source_audio_lang(gint titleindex, gint track) +{ + hb_list_t * list; + hb_title_t * title; + hb_audio_config_t * audio; + gchar *lang = NULL; + + g_debug("ghb_lookup_1st_audio_lang ()\n"); + if (h_scan == NULL) + return NULL; + list = hb_get_titles( h_scan ); + title = (hb_title_t*)hb_list_item( list, titleindex ); + if (title == NULL) + return NULL; + if (hb_list_count( title->list_audio ) <= track) + return NULL; + + audio = hb_list_audio_config_item(title->list_audio, track); + if (audio == NULL) + return NULL; + + lang = g_strdup(audio->lang.iso639_2); + return lang; +} + gint ghb_find_audio_track( gint titleindex, @@ -2072,7 +2112,7 @@ 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, "SourceAudioLang") == 0) + else if (strcmp(name, "PreferredLanguage") == 0) return lookup_audio_lang_int(gval); else { @@ -2095,7 +2135,7 @@ 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, "SourceAudioLang") == 0) + else if (strcmp(name, "PreferredLanguage") == 0) return lookup_audio_lang_int(gval); else { @@ -2118,7 +2158,7 @@ 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, "SourceAudioLang") == 0) + else if (strcmp(name, "PreferredLanguage") == 0) return lookup_audio_lang_option(gval); else { @@ -2141,7 +2181,7 @@ 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, "SourceAudioLang") == 0) + else if (strcmp(name, "PreferredLanguage") == 0) return lookup_audio_lang_option(gval); else { @@ -2188,7 +2228,7 @@ 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, "SourceAudioLang"); + language_opts_set(ud->builder, "PreferredLanguage"); title_opts_set(ud->builder, "title"); audio_track_opts_set(ud->builder, "AudioTrack", user_data); subtitle_track_opts_set(ud->builder, "SubtitleTrack", user_data); @@ -2196,6 +2236,7 @@ ghb_update_ui_combo_box( 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, "check_updates", &appcast_update_opts); generic_opts_set(ud->builder, "FileFormat", &container_opts); generic_opts_set(ud->builder, "PictureDeinterlace", &deint_opts); generic_opts_set(ud->builder, "PictureDetelecine", &detel_opts); @@ -2220,8 +2261,8 @@ 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, "SourceAudioLang") == 0) - language_opts_set(ud->builder, "SourceAudioLang"); + else if (strcmp(name, "PreferredLanguage") == 0) + language_opts_set(ud->builder, "PreferredLanguage"); else if (strcmp(name, "title") == 0) title_opts_set(ud->builder, "title"); else if (strcmp(name, "SubtitleTrack") == 0) @@ -2246,7 +2287,7 @@ 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, "SourceAudioLang"); + init_combo_box(builder, "PreferredLanguage"); init_combo_box(builder, "title"); init_combo_box(builder, "AudioTrack"); for (ii = 0; combo_name_map[ii].name != NULL; ii++) @@ -2348,7 +2389,7 @@ ghb_ac3_in_audio_list(const GValue *audio_list) asettings = ghb_array_get_nth(audio_list, ii); acodec = ghb_settings_combo_int(asettings, "AudioEncoder"); - if (acodec == HB_ACODEC_AC3) + if (acodec & HB_ACODEC_AC3) return TRUE; } return FALSE; @@ -2765,7 +2806,7 @@ picture_settings_deps(signal_user_data_t *ud) { gboolean autoscale, keep_aspect, enable_keep_aspect; gboolean enable_scale_width, enable_scale_height; - gboolean enable_disp_width, enable_disp_height; + gboolean enable_disp_width, enable_disp_height, enable_par; gint pic_par; GtkWidget *widget; @@ -2787,6 +2828,7 @@ picture_settings_deps(signal_user_data_t *ud) enable_scale_width = !autoscale && (pic_par != 1); enable_scale_height = !autoscale && (pic_par != 1); enable_disp_width = (pic_par == 3) && !keep_aspect; + enable_par = (pic_par == 3) && !keep_aspect; enable_disp_height = FALSE; widget = GHB_WIDGET(ud->builder, "PictureModulus"); @@ -2801,6 +2843,10 @@ picture_settings_deps(signal_user_data_t *ud) gtk_widget_set_sensitive(widget, enable_disp_width); widget = GHB_WIDGET(ud->builder, "PictureDisplayHeight"); gtk_widget_set_sensitive(widget, enable_disp_height); + widget = GHB_WIDGET(ud->builder, "PicturePARWidth"); + gtk_widget_set_sensitive(widget, enable_par); + widget = GHB_WIDGET(ud->builder, "PicturePARHeight"); + gtk_widget_set_sensitive(widget, enable_par); widget = GHB_WIDGET(ud->builder, "PictureKeepRatio"); gtk_widget_set_sensitive(widget, enable_keep_aspect); widget = GHB_WIDGET(ud->builder, "autoscale"); @@ -2978,6 +3024,11 @@ ghb_set_scale(signal_user_data_t *ud, gint mode) // 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->anamorphic.par_width = title->pixel_aspect_width; + job->anamorphic.par_height = title->pixel_aspect_height; + job->anamorphic.dar_width = 0; + job->anamorphic.dar_height = 0; + if (keep_height && pic_par == 2) width = ((double)height * crop_width / crop_height) + 0.5; job->width = width; @@ -2990,35 +3041,41 @@ ghb_set_scale(signal_user_data_t *ud, gint mode) job->crop[2] = crop[2]; job->crop[3] = crop[3]; if (job->anamorphic.mode == 3 && !keep_aspect) { - gint dar_width, dar_height; + job->anamorphic.keep_display_aspect = 0; if (mode & GHB_PIC_KEEP_PAR) { - par_width = ghb_settings_get_int(ud->settings, - "PicturePARWidth"); - par_height = ghb_settings_get_int(ud->settings, - "PicturePARHeight"); - dar_width = ((gdouble)width * par_width / par_height) + 0.5; - dar_height = height; + job->anamorphic.par_width = + ghb_settings_get_int(ud->settings, "PicturePARWidth"); + job->anamorphic.par_height = + ghb_settings_get_int(ud->settings, "PicturePARHeight"); } else { - dar_width = ghb_settings_get_int(ud->settings, - "PictureDisplayWidth"); - dar_height = ghb_settings_get_int(ud->settings, - "PictureDisplayHeight"); + 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_width = dar_width; - job->anamorphic.dar_height = dar_height; - job->anamorphic.keep_display_aspect = 0; } else { - job->anamorphic.dar_width = 0; - job->anamorphic.dar_height = 0; job->anamorphic.keep_display_aspect = 1; } hb_set_anamorphic_size( job, &width, &height, &par_width, &par_height ); + if (job->anamorphic.mode == 3 && !keep_aspect && + mode & GHB_PIC_KEEP_PAR) + { + // hb_set_anamorphic_size reduces the par, which we + // don't want in this case because the user is + // explicitely specifying it. + par_width = ghb_settings_get_int(ud->settings, + "PicturePARWidth"); + par_height = ghb_settings_get_int(ud->settings, + "PicturePARHeight"); + } } else { @@ -3097,8 +3154,8 @@ ghb_set_scale(signal_user_data_t *ud, gint mode) } ghb_ui_update(ud, "display_aspect", ghb_string_value(str)); g_free(str); - ghb_ui_update(ud, "par_width", ghb_int64_value(par_width)); - ghb_ui_update(ud, "par_height", ghb_int64_value(par_height)); + ghb_ui_update(ud, "PicturePARWidth", ghb_int64_value(par_width)); + ghb_ui_update(ud, "PicturePARHeight", ghb_int64_value(par_height)); ghb_ui_update(ud, "PictureDisplayWidth", ghb_int64_value(disp_width)); ghb_ui_update(ud, "PictureDisplayHeight", ghb_int64_value(height)); busy = FALSE; @@ -3139,20 +3196,25 @@ set_preview_job_settings(hb_job_t *job, GValue *settings) gboolean keep_aspect; keep_aspect = ghb_settings_get_boolean(settings, "PictureKeepRatio"); - if (job->anamorphic.mode == 3 && !keep_aspect) - { - gint disp_width, disp_height; - disp_width = ghb_settings_get_int(settings, "PictureDisplayWidth"); - disp_height = ghb_settings_get_int(settings, "PictureDisplayHeight"); - job->anamorphic.dar_width = disp_width; - job->anamorphic.dar_height = disp_height; - job->anamorphic.keep_display_aspect = 0; - } - else + if (job->anamorphic.mode) { - job->anamorphic.keep_display_aspect = 1; + job->anamorphic.par_width = job->title->pixel_aspect_width; + job->anamorphic.par_height = job->title->pixel_aspect_height; job->anamorphic.dar_width = 0; job->anamorphic.dar_height = 0; + + if (job->anamorphic.mode == 3 && !keep_aspect) + { + job->anamorphic.keep_display_aspect = 0; + job->anamorphic.par_width = + ghb_settings_get_int(settings, "PicturePARWidth"); + job->anamorphic.par_height = + ghb_settings_get_int(settings, "PicturePARHeight"); + } + else + { + job->anamorphic.keep_display_aspect = 1; + } } } @@ -3749,8 +3811,30 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex) job->deinterlace = 0; job->grayscale = ghb_settings_get_boolean(js, "VideoGrayScale"); + 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"); + if (job->anamorphic.mode) + { + job->anamorphic.par_width = title->pixel_aspect_width; + job->anamorphic.par_height = title->pixel_aspect_height; + job->anamorphic.dar_width = 0; + job->anamorphic.dar_height = 0; + + if (job->anamorphic.mode == 3 && !keep_aspect) + { + job->anamorphic.keep_display_aspect = 0; + job->anamorphic.par_width = + ghb_settings_get_int(js, "PicturePARWidth"); + job->anamorphic.par_height = + ghb_settings_get_int(js, "PicturePARHeight"); + } + else + { + job->anamorphic.keep_display_aspect = 1; + } + } /* Add selected filters */ job->filters = hb_list_init(); @@ -4000,6 +4084,7 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex) // Only allow one subtitle to be burned into the video if (one_burned) continue; + job->select_subtitle_config.dest = RENDERSUB; one_burned = TRUE; } job->select_subtitle_config.force = force; @@ -4119,6 +4204,10 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex) job->x264opts = tmp_x264opts; } + else + { + job->x264opts = x264opts; + } job->sequence_id = (unique_id & 0xFFFFFF) | (sub_id++ << 24); hb_add( h, job ); //if (job->x264opts != NULL)