X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=gtk%2Fsrc%2Fpreview.c;h=8748fae38d63d1ba09ec754c2e3ce7c5f6f1ce4c;hb=44946a6f8be82a70e65ca534541183a26fdb804b;hp=ef5f8c738adda56620d75cf161ad2b6157bcd4a0;hpb=546645566708444b0da1942315c42f77d07d6d7f;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/gtk/src/preview.c b/gtk/src/preview.c index ef5f8c73..8748fae3 100644 --- a/gtk/src/preview.c +++ b/gtk/src/preview.c @@ -85,7 +85,13 @@ ghb_screen_par(signal_user_data_t *ud, gint *par_n, gint *par_d) g_value_init(&disp_par, GST_TYPE_FRACTION); gst_value_set_fraction(&disp_par, 1, 1); g_object_get(ud->preview->play, "video-sink", &xover, NULL); + if (xover == NULL) + goto fail; + klass = G_OBJECT_GET_CLASS(xover); + if (klass == NULL) + goto fail; + pspec = g_object_class_find_property(klass, "pixel-aspect_ratio"); if (pspec) { @@ -104,6 +110,11 @@ ghb_screen_par(signal_user_data_t *ud, gint *par_n, gint *par_d) *par_n = gst_value_get_fraction_numerator(&disp_par); *par_d = gst_value_get_fraction_denominator(&disp_par); g_value_unset(&disp_par); + return; + +fail: + *par_n = 1; + *par_d = 1; #else *par_n = 1; *par_d = 1; @@ -122,7 +133,10 @@ ghb_par_scale(signal_user_data_t *ud, gint *width, gint *height, gint par_n, gin num = par_n * disp_par_d; den = par_d * disp_par_n; - *width = *width * num / den; + if (par_n > par_d) + *width = *width * num / den; + else + *height = *height * den / num; } void @@ -147,7 +161,18 @@ ghb_preview_init(signal_user_data_t *ud) //xover = gst_element_factory_make("xvimagesink", "xover"); //xover = gst_element_factory_make("ximagesink", "xover"); xover = gst_element_factory_make("gconfvideosink", "xover"); + if (xover == NULL) + { + GtkWidget *widget = GHB_WIDGET(ud->builder, "live_preview_box"); + gtk_widget_hide (widget); + widget = GHB_WIDGET(ud->builder, "live_preview_duration_box"); + gtk_widget_hide (widget); + return; + } + g_object_set(G_OBJECT(ud->preview->play), "video-sink", xover, NULL); + g_object_set(ud->preview->play, "subtitle-font-desc", + "sans bold 20", NULL); //g_object_set(G_OBJECT(xover), "force-aspect-ratio", TRUE, NULL); bus = gst_pipeline_get_bus(GST_PIPELINE(ud->preview->play)); @@ -667,7 +692,7 @@ ghb_set_preview_image(signal_user_data_t *ud) ud->preview->pix = ghb_get_preview_image(titleindex, ud->preview->frame, - ud, TRUE, &width, &height); + ud, &width, &height); if (ud->preview->pix == NULL) return; preview_width = gdk_pixbuf_get_width(ud->preview->pix); preview_height = gdk_pixbuf_get_height(ud->preview->pix); @@ -689,9 +714,14 @@ ghb_set_preview_image(signal_user_data_t *ud) g_free(text); g_debug("preview %d x %d", preview_width, preview_height); - target_height = MIN(ud->preview->button_height, 128); + target_height = MIN(ud->preview->button_height, 200); height = target_height; width = preview_width * height / preview_height; + if (width > 400) + { + width = 400; + height = preview_height * width / preview_width; + } if ((height >= 16) && (width >= 16)) { @@ -715,6 +745,9 @@ delayed_expose_cb(signal_user_data_t *ud) GstXOverlay *xover; g_object_get(ud->preview->play, "video-sink", &vsink, NULL); + if (vsink == NULL) + return FALSE; + if (GST_IS_BIN(vsink)) xover = GST_X_OVERLAY(gst_bin_get_by_interface( GST_BIN(vsink), GST_TYPE_X_OVERLAY)); @@ -952,7 +985,7 @@ picture_settings_alt2_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud) } } -void +G_MODULE_EXPORT void preview_frame_value_changed_cb(GtkWidget *widget, signal_user_data_t *ud) { if (ud->preview->live_id >= 0) @@ -975,7 +1008,7 @@ preview_window_delete_cb( return TRUE; } -gboolean +G_MODULE_EXPORT gboolean settings_window_delete_cb( GtkWidget *widget, GdkEvent *event,