OSDN Git Service

forgot to checkin the new icon for picutre settings
[handbrake-jp/handbrake-jp-git.git] / gtk / src / hb-backend.c
index 5c87414..5318882 100644 (file)
@@ -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);