gint encode_frame;
gint live_id;
gchar *current;
+ gint live_enabled;
};
#if defined(_ENABLE_GST)
GObjectClass *klass;
GParamSpec *pspec;
+ if (!ud->preview->live_enabled)
+ goto fail;
+
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);
void
ghb_preview_init(signal_user_data_t *ud)
{
+ GtkWidget *widget;
+
ud->preview = g_malloc0(sizeof(preview_t));
ud->preview->view = GHB_WIDGET(ud->builder, "preview_image");
gtk_widget_realize(ud->preview->view);
ud->preview->pause = TRUE;
ud->preview->encode_frame = -1;
ud->preview->live_id = -1;
-
+ widget = GHB_WIDGET (ud->builder, "preview_button_image");
+ gtk_widget_get_size_request(widget, &ud->preview->button_width, &ud->preview->button_height);
+
#if defined(_ENABLE_GST)
GstBus *bus;
GstElement *xover;
+#if !defined(_WIN32)
ud->preview->xid = GDK_DRAWABLE_XID(ud->preview->view->window);
+#else
+ ud->preview->xid = GDK_WINDOW_HWND(ud->preview->view->window);
+#endif
ud->preview->play = gst_element_factory_make("playbin", "play");
//xover = gst_element_factory_make("xvimagesink", "xover");
//xover = gst_element_factory_make("ximagesink", "xover");
xover = gst_element_factory_make("gconfvideosink", "xover");
- if (xover == NULL)
+ if (ud->preview->play == NULL || xover == NULL)
{
GtkWidget *widget = GHB_WIDGET(ud->builder, "live_preview_box");
gtk_widget_hide (widget);
gtk_widget_hide (widget);
return;
}
+ else
+ {
- 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);
+ 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);
- bus = gst_pipeline_get_bus(GST_PIPELINE(ud->preview->play));
- gst_bus_add_watch(bus, live_preview_cb, ud);
- gst_bus_set_sync_handler(bus, create_window, ud->preview);
- gst_object_unref(bus);
+ bus = gst_pipeline_get_bus(GST_PIPELINE(ud->preview->play));
+ gst_bus_add_watch(bus, live_preview_cb, ud);
+ gst_bus_set_sync_handler(bus, create_window, ud->preview);
+ gst_object_unref(bus);
+ ud->preview->live_enabled = 1;
+ }
#else
- GtkWidget *widget = GHB_WIDGET(ud->builder, "live_preview_box");
+ 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);
{
if (!gst_structure_has_name(msg->structure, "prepare-xwindow-id"))
return GST_BUS_PASS;
+#if !defined(_WIN32)
gst_x_overlay_set_xwindow_id(
GST_X_OVERLAY(GST_MESSAGE_SRC(msg)), preview->xid);
+#else
+ gst_directdraw_sink_set_window_id(
+ GST_X_OVERLAY(GST_MESSAGE_SRC(msg)), preview->xid);
+#endif
gst_message_unref(msg);
return GST_BUS_DROP;
} break;
GtkImage *img;
gchar *uri;
+ if (!ud->preview->live_enabled)
+ return;
+
img = GTK_IMAGE(GHB_WIDGET(ud->builder, "live_preview_play_image"));
if (!ud->preview->encoded[ud->preview->frame])
{
{
GtkImage *img;
+ if (!ud->preview->live_enabled)
+ return;
+
img = GTK_IMAGE(GHB_WIDGET(ud->builder, "live_preview_play_image"));
gtk_image_set_from_stock(img, "gtk-media-play", GTK_ICON_SIZE_BUTTON);
gst_element_set_state(ud->preview->play, GST_STATE_PAUSED);
GtkImage *img;
GtkRange *progress;
+ if (!ud->preview->live_enabled)
+ return;
+
img = GTK_IMAGE(GHB_WIDGET(ud->builder, "live_preview_play_image"));
gtk_image_set_from_stock(img, "gtk-media-play", GTK_ICON_SIZE_BUTTON);
#if defined(_ENABLE_GST)
ghb_set_preview_image(ud);
}
-extern void hb_get_tempory_directory(hb_handle_t *h, char path[512]);
-
G_MODULE_EXPORT void
live_preview_start_cb(GtkWidget *xwidget, signal_user_data_t *ud)
{
GstFormat fmt = GST_FORMAT_TIME;
gint64 len = -1, pos = -1;
+ if (!ud->preview->live_enabled)
+ return;
+
if (ud->preview->state != PREVIEW_STATE_LIVE || ud->preview->seek_lock)
return;
gdouble dval;
gint64 pos;
+ if (!ud->preview->live_enabled)
+ return;
+
if (ud->preview->progress_lock)
return;
GstElement *vsink;
GstXOverlay *xover;
+ if (!ud->preview->live_enabled)
+ return FALSE;
+
g_object_get(ud->preview->play, "video-sink", &vsink, NULL);
if (vsink == NULL)
return FALSE;
signal_user_data_t *ud)
{
#if defined(_ENABLE_GST)
- if (ud->preview->state == PREVIEW_STATE_LIVE)
+ if (ud->preview->live_enabled && ud->preview->state == PREVIEW_STATE_LIVE)
{
if (GST_STATE(ud->preview->play) >= GST_STATE_PAUSED)
{
}
}
-G_MODULE_EXPORT void
-preview_button_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
+void
+ghb_preview_set_visible(signal_user_data_t *ud)
{
gint titleindex;
+ GtkWidget *widget;
+ gboolean settings_active;
- g_debug("preview_button_clicked_cb()");
+ settings_active = ghb_settings_get_boolean(ud->settings, "show_picture");
+ widget = GHB_WIDGET (ud->builder, "preview_window");
titleindex = ghb_settings_combo_int(ud->settings, "title");
- if (titleindex >= 0)
+ if (settings_active && titleindex >= 0)
{
gint x, y;
- GtkWidget *widget = GHB_WIDGET (ud->builder, "preview_window");
x = ghb_settings_get_int(ud->settings, "preview_x");
y = ghb_settings_get_int(ud->settings, "preview_y");
if (x >= 0 && y >= 0)
gtk_window_move(GTK_WINDOW(widget), x, y);
- set_visible(widget, gtk_toggle_button_get_active(
- GTK_TOGGLE_BUTTON(xwidget)));
+ set_visible(widget,
+ ghb_settings_get_boolean(ud->settings, "show_preview"));
+ }
+ else
+ {
+ set_visible(widget, FALSE);
}
+}
+
+G_MODULE_EXPORT void
+preview_button_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
+{
+ g_debug("preview_button_clicked_cb()");
ghb_widget_to_setting (ud->settings, xwidget);
+ ghb_preview_set_visible(ud);
ghb_check_dependency(ud, xwidget, NULL);
- const gchar *name = gtk_widget_get_name(xwidget);
+ const gchar *name = ghb_get_setting_key(xwidget);
ghb_pref_save(ud->settings, name);
}
G_MODULE_EXPORT void
picture_settings_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
{
- GtkWidget *widget, *toggle;
+ GtkWidget *widget;
gboolean active, hide_settings;
gint x, y;
g_debug("picture_settings_clicked_cb()");
- toggle = GHB_WIDGET (ud->builder, "hide_settings");
- hide_settings = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle));
+ ghb_widget_to_setting (ud->settings, xwidget);
+ hide_settings = ghb_settings_get_boolean(ud->settings, "hide_settings");
+
+ active = ghb_settings_get_boolean(ud->settings, "show_picture");
widget = GHB_WIDGET (ud->builder, "settings_window");
- active = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(xwidget));
x = ghb_settings_get_int(ud->settings, "settings_x");
y = ghb_settings_get_int(ud->settings, "settings_y");
if (x >= 0 && y >= 0)
gtk_window_move(GTK_WINDOW(widget), x, y);
set_visible(widget, active && !hide_settings);
- if (ghb_settings_get_boolean(ud->settings, "show_preview"))
- {
- widget = GHB_WIDGET (ud->builder, "preview_window");
- x = ghb_settings_get_int(ud->settings, "preview_x");
- y = ghb_settings_get_int(ud->settings, "preview_y");
- if (x >= 0 && y >= 0)
- gtk_window_move(GTK_WINDOW(widget), x, y);
- set_visible(widget, active);
- // The window may be hidden behind the main window, raise it
- if (active)
- gtk_window_present(GTK_WINDOW(widget));
- }
+ ghb_preview_set_visible(ud);
}
G_MODULE_EXPORT void
g_debug("fullscreen_clicked_cb()");
ghb_widget_to_setting (ud->settings, toggle);
ghb_check_dependency(ud, toggle, NULL);
- const gchar *name = gtk_widget_get_name(toggle);
+ const gchar *name = ghb_get_setting_key(toggle);
ghb_pref_save(ud->settings, name);
window = GTK_WINDOW(GHB_WIDGET (ud->builder, "preview_window"));
GtkWidget *window;
g_debug("picture_settings_alt2_clicked_cb()");
+ ghb_widget_to_setting (ud->settings, xwidget);
+ active = ghb_settings_get_boolean(ud->settings, "hide_settings");
+
toggle = GHB_WIDGET (ud->builder, "hide_settings");
- active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toggle));
window = GHB_WIDGET(ud->builder, "settings_window");
if (!active)
{
ghb_live_reset(ud);
ghb_widget_to_setting (ud->settings, widget);
ghb_check_dependency(ud, widget, NULL);
- const gchar *name = gtk_widget_get_name(widget);
+ const gchar *name = ghb_get_setting_key(widget);
ghb_pref_save(ud->settings, name);
}