diff options
Diffstat (limited to 'gtk/src')
-rw-r--r-- | gtk/src/callbacks.c | 36 | ||||
-rw-r--r-- | gtk/src/hb-backend.c | 128 |
2 files changed, 75 insertions, 89 deletions
diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c index d73913921..4a0afea64 100644 --- a/gtk/src/callbacks.c +++ b/gtk/src/callbacks.c @@ -964,7 +964,7 @@ update_title_duration(signal_user_data_t *ud) start = ghb_settings_get_int(ud->settings, "start_point"); end = ghb_settings_get_int(ud->settings, "end_point"); frames = end - start + 1; - duration = frames * title->rate_base / title->rate; + duration = frames * title->vrate.den / title->vrate.num; break_duration(duration, &hh, &mm, &ss); } else @@ -1068,8 +1068,8 @@ ghb_set_widget_ranges(signal_user_data_t *ud, GValue *settings) // Set the limits of cropping. hb_set_anamorphic_size crashes if // you pass it a cropped width or height == 0. gint vbound, hbound; - vbound = title->height; - hbound = title->width; + vbound = title->geometry.height; + hbound = title->geometry.width; val = ghb_settings_get_int(ud->settings, "PictureTopCrop"); spin_configure(ud, "PictureTopCrop", val, 0, vbound); @@ -1101,7 +1101,8 @@ ghb_set_widget_ranges(signal_user_data_t *ud, GValue *settings) else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 2) { gdouble max_frames; - max_frames = (gdouble)duration * title->rate / title->rate_base; + max_frames = (gdouble)duration * + title->vrate.num / title->vrate.den; val = ghb_settings_get_int(ud->settings, "start_point"); spin_configure(ud, "start_point", val, 1, max_frames); @@ -1658,9 +1659,9 @@ get_aspect_string(gint aspect_n, gint aspect_d) } static gchar* -get_rate_string(gint rate_base, gint rate) +get_rate_string(gint rate_num, gint rate_den) { - gdouble rate_f = (gdouble)rate / rate_base; + gdouble rate_f = (gdouble)rate_num / rate_den; gchar *rate_s; rate_s = g_strdup_printf("%.6g", rate_f); @@ -1718,8 +1719,8 @@ update_crop_info(signal_user_data_t *ud) crop[1] = ghb_settings_get_int(ud->settings, "PictureBottomCrop"); crop[2] = ghb_settings_get_int(ud->settings, "PictureLeftCrop"); crop[3] = ghb_settings_get_int(ud->settings, "PictureRightCrop"); - width = title->width - crop[2] - crop[3]; - height = title->height - crop[0] - crop[1]; + width = title->geometry.width - crop[2] - crop[3]; + height = title->geometry.height - crop[0] - crop[1]; widget = GHB_WIDGET(ud->builder, "crop_dimensions"); text = g_strdup_printf ("%d x %d", width, height); gtk_label_set_text(GTK_LABEL(widget), text); @@ -1770,21 +1771,21 @@ ghb_update_title_info(signal_user_data_t *ud) gtk_label_set_text (GTK_LABEL(widget), _("Unknown")); widget = GHB_WIDGET (ud->builder, "source_dimensions"); - text = g_strdup_printf ("%d x %d", title->width, title->height); + text = g_strdup_printf ("%d x %d", title->geometry.width, title->geometry.height); gtk_label_set_text (GTK_LABEL(widget), text); g_free(text); widget = GHB_WIDGET (ud->builder, "source_aspect"); gint aspect_n, aspect_d; hb_reduce(&aspect_n, &aspect_d, - title->width * title->pixel_aspect_width, - title->height * title->pixel_aspect_height); + title->geometry.width * title->geometry.par.num, + title->geometry.height * title->geometry.par.den); text = get_aspect_string(aspect_n, aspect_d); gtk_label_set_text (GTK_LABEL(widget), text); g_free(text); widget = GHB_WIDGET (ud->builder, "source_frame_rate"); - text = (gchar*)get_rate_string(title->rate_base, title->rate); + text = (gchar*)get_rate_string(title->vrate.num, title->vrate.den); gtk_label_set_text (GTK_LABEL(widget), text); g_free(text); @@ -1816,8 +1817,8 @@ set_title_settings(signal_user_data_t *ud, GValue *settings) ghb_settings_set_int(settings, "PtoPType", 0); ghb_settings_set_int(settings, "start_point", 1); ghb_settings_set_int(settings, "end_point", num_chapters); - ghb_settings_set_int(settings, "source_width", title->width); - ghb_settings_set_int(settings, "source_height", title->height); + ghb_settings_set_int(settings, "source_width", title->geometry.width); + ghb_settings_set_int(settings, "source_height", title->geometry.height); ghb_settings_set_string(settings, "source", title->path); if (title->type == HB_STREAM_TYPE || title->type == HB_FF_STREAM_TYPE) { @@ -1837,7 +1838,7 @@ set_title_settings(signal_user_data_t *ud, GValue *settings) ghb_settings_get_value(ud->settings, "volume_label")); } ghb_settings_set_int(settings, "scale_width", - title->width - title->crop[2] - title->crop[3]); + title->geometry.width - title->crop[2] - title->crop[3]); // If anamorphic or keep_aspect, the hight will // be automatically calculated @@ -1848,7 +1849,7 @@ set_title_settings(signal_user_data_t *ud, GValue *settings) if (!(keep_aspect || pic_par) || pic_par == 3) { ghb_settings_set_int(settings, "scale_height", - title->width - title->crop[0] - title->crop[1]); + title->geometry.width - title->crop[0] - title->crop[1]); } ghb_set_scale_settings(settings, GHB_PIC_KEEP_PAR|GHB_PIC_USE_MAX); @@ -2039,7 +2040,8 @@ ptop_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud) } else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 2) { - gdouble max_frames = (gdouble)duration * title->rate / title->rate_base; + gdouble max_frames = (gdouble)duration * + title->vrate.num / title->vrate.den; spin_configure(ud, "start_point", 1, 1, max_frames); spin_configure(ud, "end_point", max_frames, 1, max_frames); } diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c index 3d2ca35f0..d7a56155e 100644 --- a/gtk/src/hb-backend.c +++ b/gtk/src/hb-backend.c @@ -3538,12 +3538,11 @@ ghb_set_scale_settings(GValue *settings, gint mode) if (title == NULL) return; hb_geometry_t srcGeo, resultGeo; - hb_ui_geometry_t uiGeo; + hb_geometry_settings_t uiGeo; - srcGeo.width = title->width; - srcGeo.height = title->height; - srcGeo.par.num = title->pixel_aspect_width; - srcGeo.par.den = title->pixel_aspect_height; + srcGeo.width = title->geometry.width; + srcGeo.height = title->geometry.height; + srcGeo.par = title->geometry.par; // First configure widgets mod = ghb_settings_combo_int(settings, "PictureModulus"); @@ -3552,8 +3551,8 @@ ghb_set_scale_settings(GValue *settings, gint mode) keep_aspect = ghb_settings_get_boolean(settings, "PictureKeepRatio"); autocrop = ghb_settings_get_boolean(settings, "PictureAutoCrop"); autoscale = ghb_settings_get_boolean(settings, "autoscale"); - // "Noscale" is a flag that says we prefer to crop extra to satisfy - // alignment constraints rather than scaling to satisfy them. + // "PictureLooseCrop" is a flag that says we prefer to crop extra to + // satisfy alignment constraints rather than scaling to satisfy them. loosecrop = ghb_settings_get_boolean(settings, "PictureLooseCrop"); // Align dimensions to either 16 or 2 pixels // The scaler crashes if the dimensions are not divisible by 2 @@ -3582,13 +3581,13 @@ ghb_set_scale_settings(GValue *settings, gint mode) crop[2] = ghb_settings_get_int(settings, "PictureLeftCrop"); crop[3] = ghb_settings_get_int(settings, "PictureRightCrop"); // Prevent manual crop from creating too small an image - if (title->height - crop[0] < crop[1] + 16) + if (title->geometry.height - crop[0] < crop[1] + 16) { - crop[0] = title->height - crop[1] - 16; + crop[0] = title->geometry.height - crop[1] - 16; } - if (title->width - crop[2] < crop[3] + 16) + if (title->geometry.width - crop[2] < crop[3] + 16) { - crop[2] = title->width - crop[3] - 16; + crop[2] = title->geometry.width - crop[3] - 16; } } if (loosecrop) @@ -3596,8 +3595,8 @@ ghb_set_scale_settings(GValue *settings, gint mode) gint need1, need2; // Adjust the cropping to accomplish the desired width and height - crop_width = title->width - crop[2] - crop[3]; - crop_height = title->height - crop[0] - crop[1]; + crop_width = title->geometry.width - crop[2] - crop[3]; + crop_height = title->geometry.height - crop[0] - crop[1]; width = MOD_DOWN(crop_width, mod); height = MOD_DOWN(crop_height, mod); @@ -3619,8 +3618,8 @@ ghb_set_scale_settings(GValue *settings, gint mode) uiGeo.crop[2] = crop[2]; uiGeo.crop[3] = crop[3]; - crop_width = title->width - crop[2] - crop[3]; - crop_height = title->height - crop[0] - crop[1]; + crop_width = title->geometry.width - crop[2] - crop[3]; + crop_height = title->geometry.height - crop[0] - crop[1]; if (autoscale) { width = crop_width; @@ -3658,31 +3657,28 @@ ghb_set_scale_settings(GValue *settings, gint mode) uiGeo.keep |= HB_KEEP_DISPLAY_ASPECT; uiGeo.itu_par = 0; uiGeo.modulus = mod; - uiGeo.width = width; - uiGeo.height = height; + uiGeo.geometry.width = width; + uiGeo.geometry.height = height; + uiGeo.geometry.par = title->geometry.par; uiGeo.maxWidth = max_width; uiGeo.maxHeight = max_height; - uiGeo.par.num = title->pixel_aspect_width; - uiGeo.par.den = title->pixel_aspect_height; - uiGeo.dar.num = 0; - uiGeo.dar.den = 0; if (pic_par != HB_ANAMORPHIC_NONE) { if (pic_par == HB_ANAMORPHIC_CUSTOM && !keep_aspect) { if (mode & GHB_PIC_KEEP_PAR) { - uiGeo.par.num = + uiGeo.geometry.par.num = ghb_settings_get_int(settings, "PicturePARWidth"); - uiGeo.par.den = + uiGeo.geometry.par.den = ghb_settings_get_int(settings, "PicturePARHeight"); } else if (mode & (GHB_PIC_KEEP_DISPLAY_HEIGHT | GHB_PIC_KEEP_DISPLAY_WIDTH)) { - uiGeo.dar.num = - ghb_settings_get_int(settings, "PictureDisplayWidth"); - uiGeo.dar.den = height; + uiGeo.geometry.par.num = + ghb_settings_get_int(settings, "PictureDisplayWidth"); + uiGeo.geometry.par.den = width; } } else @@ -3757,8 +3753,8 @@ ghb_set_scale(signal_user_data_t *ud, gint mode) widget = GHB_WIDGET (ud->builder, "scale_height"); gtk_spin_button_set_increments (GTK_SPIN_BUTTON(widget), mod, 16); - // "Noscale" is a flag that says we prefer to crop extra to satisfy - // alignment constraints rather than scaling to satisfy them. + // "PictureLooseCrop" is a flag that says we prefer to crop extra to + // satisfy alignment constraints rather than scaling to satisfy them. gboolean loosecrop = ghb_settings_get_boolean(ud->settings, "PictureLooseCrop"); if (loosecrop) { @@ -3806,12 +3802,11 @@ ghb_set_scale(signal_user_data_t *ud, gint mode) static void get_preview_geometry(signal_user_data_t *ud, const hb_title_t *title, - hb_geometry_t *srcGeo, hb_ui_geometry_t *uiGeo) + hb_geometry_t *srcGeo, hb_geometry_settings_t *uiGeo) { - srcGeo->width = title->width; - srcGeo->height = title->height; - srcGeo->par.num = title->pixel_aspect_width; - srcGeo->par.den = title->pixel_aspect_height; + srcGeo->width = title->geometry.width; + srcGeo->height = title->geometry.height; + srcGeo->par = title->geometry.par; uiGeo->mode = ghb_settings_combo_int(ud->settings, "PicturePAR"); uiGeo->keep = ghb_settings_get_boolean(ud->settings, "PictureKeepRatio") || @@ -3823,23 +3818,21 @@ get_preview_geometry(signal_user_data_t *ud, const hb_title_t *title, uiGeo->crop[1] = ghb_settings_get_int(ud->settings, "PictureBottomCrop"); uiGeo->crop[2] = ghb_settings_get_int(ud->settings, "PictureLeftCrop"); uiGeo->crop[3] = ghb_settings_get_int(ud->settings, "PictureRightCrop"); - uiGeo->width = ghb_settings_get_int(ud->settings, "scale_width"); - uiGeo->height = ghb_settings_get_int(ud->settings, "scale_height"); + uiGeo->geometry.width = ghb_settings_get_int(ud->settings, "scale_width"); + uiGeo->geometry.height = ghb_settings_get_int(ud->settings, "scale_height"); + uiGeo->geometry.par.num = ghb_settings_get_int(ud->settings, "PicturePARWidth"); + uiGeo->geometry.par.den = ghb_settings_get_int(ud->settings, "PicturePARHeight"); uiGeo->maxWidth = 0; uiGeo->maxHeight = 0; - uiGeo->par.num = ghb_settings_get_int(ud->settings, "PicturePARWidth"); - uiGeo->par.den = ghb_settings_get_int(ud->settings, "PicturePARHeight"); - uiGeo->dar.num = 0; - uiGeo->dar.den = 0; if (ghb_settings_get_boolean(ud->prefs, "preview_show_crop")) { - gdouble xscale = (gdouble)uiGeo->width / - (title->width - uiGeo->crop[2] - uiGeo->crop[3]); - gdouble yscale = (gdouble)uiGeo->height / - (title->height - uiGeo->crop[0] - uiGeo->crop[1]); + gdouble xscale = (gdouble)uiGeo->geometry.width / + (title->geometry.width - uiGeo->crop[2] - uiGeo->crop[3]); + gdouble yscale = (gdouble)uiGeo->geometry.height / + (title->geometry.height - uiGeo->crop[0] - uiGeo->crop[1]); - uiGeo->width += xscale * (uiGeo->crop[2] + uiGeo->crop[3]); - uiGeo->height += yscale * (uiGeo->crop[0] + uiGeo->crop[1]); + uiGeo->geometry.width += xscale * (uiGeo->crop[2] + uiGeo->crop[3]); + uiGeo->geometry.height += yscale * (uiGeo->crop[0] + uiGeo->crop[1]); uiGeo->crop[0] = 0; uiGeo->crop[1] = 0; uiGeo->crop[2] = 0; @@ -4257,7 +4250,7 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, int titleindex) start = ghb_settings_get_int(js, "start_point"); end = ghb_settings_get_int(js, "end_point"); gint64 max_frames; - max_frames = (gint64)(duration * title->rate / title->rate_base); + max_frames = (gint64)duration * title->vrate.num / title->vrate.den; job->frame_to_start = (int64_t)MIN(max_frames-1, start-1); job->frame_to_stop = (int64_t)MAX(start, end-1) - job->frame_to_start; @@ -4299,19 +4292,10 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, int titleindex) gboolean decomb_deint = ghb_settings_get_boolean(js, "PictureDecombDeinterlace"); gint decomb = ghb_settings_combo_int(js, "PictureDecomb"); gint deint = ghb_settings_combo_int(js, "PictureDeinterlace"); - if (!decomb_deint) - job->deinterlace = (deint != 0) ? 1 : 0; - else - job->deinterlace = 0; job->grayscale = ghb_settings_get_boolean(js, "VideoGrayScale"); - job->anamorphic.mode = ghb_settings_combo_int(js, "PicturePAR"); - job->modulus = ghb_settings_combo_int(js, "PictureModulus"); - job->anamorphic.par_width = ghb_settings_get_int(js, "PicturePARWidth"); - job->anamorphic.par_height = ghb_settings_get_int(js, "PicturePARHeight"); - job->anamorphic.dar_width = job->anamorphic.dar_height = 0; - job->anamorphic.keep_display_aspect = - ghb_settings_get_boolean(js, "PictureKeepRatio"); + job->par.num = ghb_settings_get_int(js, "PicturePARWidth"); + job->par.den = ghb_settings_get_int(js, "PicturePARHeight"); int width, height, crop[4]; width = ghb_settings_get_int(js, "scale_width"); @@ -4358,7 +4342,7 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, int titleindex) hb_add_filter( job, filter, filter_str ); g_free(filter_str); } - if( job->deinterlace ) + if ( !decomb_deint && deint ) { filter_str = NULL; if (deint != 1) @@ -4429,8 +4413,8 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, int titleindex) job->vbitrate = ghb_settings_get_int(js, "VideoAvgBitrate"); } - gint vrate; - gint vrate_base = ghb_settings_video_framerate_rate(js, "VideoFramerate"); + gint vrate_num; + gint vrate_den = ghb_settings_video_framerate_rate(js, "VideoFramerate"); gint cfr; if (ghb_settings_get_boolean(js, "VideoFrameratePFR")) cfr = 2; @@ -4446,16 +4430,16 @@ add_job(hb_handle_t *h, GValue *js, gint unique_id, int titleindex) ghb_log("zerolatency x264 tune selected, forcing constant framerate"); } - if( vrate_base == 0 ) + if( vrate_den == 0 ) { - vrate = title->rate; - vrate_base = title->rate_base; + vrate_num = title->vrate.num; + vrate_den = title->vrate.den; } else { - vrate = 27000000; + vrate_num = 27000000; } - filter_str = g_strdup_printf("%d:%d:%d", cfr, vrate, vrate_base); + filter_str = g_strdup_printf("%d:%d:%d", cfr, vrate_num, vrate_den); filter = hb_filter_init(HB_FILTER_VFR); hb_add_filter( job, filter, filter_str ); g_free(filter_str); @@ -4971,7 +4955,7 @@ ghb_get_preview_image( gint *out_height) { hb_geometry_t srcGeo, resultGeo; - hb_ui_geometry_t uiGeo; + hb_geometry_settings_t uiGeo; if( title == NULL ) return NULL; @@ -4995,10 +4979,10 @@ ghb_get_preview_image( hb_set_anamorphic_size2(&srcGeo, &uiGeo, &resultGeo); // Rescale preview dimensions to adjust for screen PAR and settings PAR - ghb_par_scale(ud, &uiGeo.width, &uiGeo.height, + ghb_par_scale(ud, &uiGeo.geometry.width, &uiGeo.geometry.height, resultGeo.par.num, resultGeo.par.den); - uiGeo.par.num = 1; - uiGeo.par.den = 1; + uiGeo.geometry.par.num = 1; + uiGeo.geometry.par.den = 1; GdkPixbuf *preview; hb_image_t *image; @@ -5007,7 +4991,7 @@ ghb_get_preview_image( if (image == NULL) { preview = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, - title->width, title->height); + title->geometry.width, title->geometry.height); return preview; } @@ -5052,8 +5036,8 @@ ghb_get_preview_image( c2 = ghb_settings_get_int(ud->settings, "PictureLeftCrop"); c3 = ghb_settings_get_int(ud->settings, "PictureRightCrop"); - gdouble xscale = (gdouble)w / (gdouble)(title->width - c2 - c3); - gdouble yscale = (gdouble)h / (gdouble)(title->height - c0 - c1); + gdouble xscale = (gdouble)w / (gdouble)(title->geometry.width - c2 - c3); + gdouble yscale = (gdouble)h / (gdouble)(title->geometry.height - c0 - c1); *out_width = w; *out_height = h; |