X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=gtk%2Fsrc%2Fhb-backend.c;h=53188820fc0756867c1d69584e51e896ed2b0ead;hb=2cea0d49ba2d6aa6ba96d575b47d2d313515be11;hp=5c874141144d680425c4a14dd7b7a95d16382239;hpb=a3c20e5877bebd9f8a3297be92b333228874e5f3;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c index 5c874141..53188820 100644 --- a/gtk/src/hb-backend.c +++ b/gtk/src/hb-backend.c @@ -31,6 +31,7 @@ #include "hb-backend.h" #include "settings.h" #include "callbacks.h" +#include "preview.h" #include "values.h" #include "lang.h" @@ -63,6 +64,18 @@ static const gchar *index_str[] = "10", }; +static options_map_t d_logging_opts[] = +{ + {"0", "0", 0, "0"}, + {"1", "1", 1, "1"}, + {"2", "2", 2, "2"}, +}; +combo_opts_t logging_opts = +{ + sizeof(d_logging_opts)/sizeof(options_map_t), + d_logging_opts +}; + static options_map_t d_container_opts[] = { {"MKV", "mkv", HB_MUX_MKV, "mkv"}, @@ -144,10 +157,11 @@ combo_opts_t direct_opts = static options_map_t d_me_opts[] = { - {"Diamond", "dia", 0, "dia"}, - {"Hexagon", "hex", 1, "hex"}, - {"Uneven Multi-Hexagon", "umh", 2, "umh"}, - {"Exhaustive", "esa", 3, "esa"}, + {"Diamond", "dia", 0, "dia"}, + {"Hexagon", "hex", 1, "hex"}, + {"Uneven Multi-Hexagon", "umh", 2, "umh"}, + {"Exhaustive", "esa", 3, "esa"}, + {"Hadamard Exhaustive", "tesa", 4, "tesa"}, }; combo_opts_t me_opts = { @@ -224,6 +238,7 @@ typedef struct combo_name_map_t combo_name_map[] = { + {"LoggingLevel", &logging_opts}, {"FileFormat", &container_opts}, {"PictureDeinterlace", &deint_opts}, {"tweak_PictureDeinterlace", &deint_opts}, @@ -1742,6 +1757,7 @@ ghb_update_ui_combo_box(GtkBuilder *builder, const gchar *name, gint user_data, subtitle_opts_set(builder, "Subtitles", user_data); title_opts_set(builder, "title"); audio_track_opts_set(builder, "AudioTrack", user_data); + generic_opts_set(builder, "LoggingLevel", &logging_opts); generic_opts_set(builder, "FileFormat", &container_opts); generic_opts_set(builder, "PictureDeinterlace", &deint_opts); generic_opts_set(builder, "tweak_PictureDeinterlace", &deint_opts); @@ -1977,11 +1993,8 @@ ghb_set_default_bitrate_opts(GtkBuilder *builder, gint last_rate) static ghb_status_t hb_status; void -ghb_backend_init(GtkBuilder *builder, gint debug, gint update) +ghb_combo_init(GtkBuilder *builder) { - /* Init libhb */ - h_scan = hb_init( debug, update ); - h_queue = hb_init( debug, 0 ); // Set up the list model for the combos init_ui_combo_boxes(builder); // Populate all the combos @@ -1989,6 +2002,14 @@ ghb_backend_init(GtkBuilder *builder, gint debug, gint update) } void +ghb_backend_init(gint debug) +{ + /* Init libhb */ + h_scan = hb_init( debug, 0 ); + h_queue = hb_init( debug, 0 ); +} + +void ghb_backend_close() { hb_close(&h_queue); @@ -1996,9 +2017,9 @@ ghb_backend_close() } void -ghb_backend_scan(const gchar *path, gint titleindex) +ghb_backend_scan(const gchar *path, gint titleindex, gint preview_count) { - hb_scan( h_scan, path, titleindex ); + hb_scan( h_scan, path, titleindex, preview_count, 1 ); hb_status.scan.state |= GHB_STATE_SCANNING; // initialize count and cur to something that won't cause FPE // when computing progress @@ -2010,7 +2031,7 @@ void ghb_backend_queue_scan(const gchar *path, gint titlenum) { g_debug("ghb_backend_queue_scan()"); - hb_scan( h_queue, path, titlenum ); + hb_scan( h_queue, path, titlenum, 10, 0 ); hb_status.queue.state |= GHB_STATE_SCANNING; } @@ -2969,6 +2990,8 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex) job->start_at_preview = ghb_settings_get_int(js, "start_frame") + 1; if (job->start_at_preview) { +g_message("duration %d", ghb_settings_get_int(js, "live_duration")); + job->seek_points = ghb_settings_get_int(js, "preview_count"); job->pts_to_stop = ghb_settings_get_int(js, "live_duration") * 90000LL; } @@ -2984,42 +3007,45 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, gint titleindex) job->largeFileSize = FALSE; job->mp4_optimize = FALSE; } - gint chapter_start, chapter_end; - chapter_start = ghb_settings_get_int(js, "start_chapter"); - chapter_end = ghb_settings_get_int(js, "end_chapter"); - 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 ); - - job->chapter_markers = ghb_settings_get_boolean(js, "ChapterMarkers"); - if ( job->chapter_markers ) + if (!job->start_at_preview) { - GValue *chapters; - 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++) + gint chapter_start, chapter_end; + chapter_start = ghb_settings_get_int(js, "start_chapter"); + chapter_end = ghb_settings_get_int(js, "end_chapter"); + 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 ); + + job->chapter_markers = ghb_settings_get_boolean(js, "ChapterMarkers"); + if ( job->chapter_markers ) { - 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); - } - if (name == NULL) + GValue *chapters; + 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++) { - name = g_strdup_printf ("Chapter %2d", 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); + } + if (name == NULL) + { + name = g_strdup_printf ("Chapter %2d", chap); + } + chapter_s = hb_list_item( job->title->list_chapter, chap - 1); + strncpy(chapter_s->title, name, 1023); + chapter_s->title[1023] = '\0'; + g_free(name); } - chapter_s = hb_list_item( job->title->list_chapter, chap - 1); - strncpy(chapter_s->title, name, 1023); - chapter_s->title[1023] = '\0'; - g_free(name); } } job->crop[0] = ghb_settings_get_int(js, "PictureTopCrop"); @@ -3512,12 +3538,16 @@ GdkPixbuf* ghb_get_preview_image( gint titleindex, gint index, - GValue *settings, - gboolean borders) + signal_user_data_t *ud, + gboolean borders, + gint *out_width, + gint *out_height) { + GValue *settings; hb_title_t *title; hb_list_t *list; + settings = ud->settings; list = hb_get_titles( h_scan ); if( !hb_list_count( list ) ) { @@ -3639,27 +3669,37 @@ ghb_get_preview_image( if (anamorphic) { hb_set_anamorphic_size( title->job, &width, &height, &par_width, &par_height ); - if (par_width > par_height) - dstWidth = dstWidth * par_width / par_height; - else - dstHeight = dstHeight * par_height / par_width; + ghb_par_scale(ud, &dstWidth, &dstHeight, par_width, par_height); } + else + { + ghb_par_scale(ud, &dstWidth, &dstHeight, 1, 1); + } + *out_width = dstWidth; + *out_height = dstHeight; if (ghb_settings_get_boolean(settings, "reduce_hd_preview")) { - gdouble factor = 1.0; + GdkScreen *ss; + gint s_w, s_h; + gint num, den; + + ss = gdk_screen_get_default(); + s_w = gdk_screen_get_width(ss); + s_h = gdk_screen_get_height(ss); + num = dstWidth * par_width; + den = dstHeight * par_height; - if (dstHeight > RED_HEIGHT) + if (dstWidth > s_w * 80 / 100) { - factor = RED_HEIGHT / (gdouble)dstHeight; + dstWidth = s_w * 80 / 100; + dstHeight = dstWidth * den / num; } - if (dstWidth * factor > RED_WIDTH) + if (dstHeight > s_h * 80 / 100) { - factor = RED_WIDTH / (gdouble)dstWidth; + dstHeight = s_h * 80 / 100; + dstWidth = dstHeight * num / den; } - dstHeight = dstHeight * factor + 0.5; - dstWidth = dstWidth * factor + 0.5; } - g_debug("scaled %d x %d\n", dstWidth, dstHeight); GdkPixbuf *scaled_preview; scaled_preview = gdk_pixbuf_scale_simple(preview, dstWidth, dstHeight, GDK_INTERP_HYPER);