diff options
author | jstebbins <[email protected]> | 2013-01-13 21:31:41 +0000 |
---|---|---|
committer | jstebbins <[email protected]> | 2013-01-13 21:31:41 +0000 |
commit | 3086efa56616c0e062eac6dfd4bc6b7c0031df14 (patch) | |
tree | 5382b4ac888f26619c825418192c7a123f02af71 | |
parent | f3fcc49085f080ad5f075da4a87bbaff47f92572 (diff) |
LinGui: Add GTK+-3 support
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@5170 b64f7644-9d1e-0410-96f1-a4d463321fa5
-rw-r--r-- | gtk/configure.ac | 101 | ||||
-rw-r--r-- | gtk/src/callbacks.c | 59 | ||||
-rw-r--r-- | gtk/src/ghb.ui | 6910 | ||||
-rw-r--r-- | gtk/src/ghbcellrenderertext.c | 334 | ||||
-rw-r--r-- | gtk/src/ghbcompositor.c | 207 | ||||
-rw-r--r-- | gtk/src/hb-backend.c | 16 | ||||
-rw-r--r-- | gtk/src/internal_defaults.xml | 2 | ||||
-rw-r--r-- | gtk/src/main.c | 321 | ||||
-rw-r--r-- | gtk/src/preview.c | 456 | ||||
-rw-r--r-- | gtk/src/renderer_button.c | 36 | ||||
-rw-r--r-- | gtk/src/settings.c | 88 |
11 files changed, 4674 insertions, 3856 deletions
diff --git a/gtk/configure.ac b/gtk/configure.ac index dbe15f747..d13659b4b 100644 --- a/gtk/configure.ac +++ b/gtk/configure.ac @@ -83,11 +83,7 @@ AM_PROG_LIBTOOL case $host in *-*-mingw*) - if test "x$gst_disable" = "xyes" ; then - GHB_PACKAGES="gtk+-2.0 >= 2.10 gthread-2.0 gio-2.0" - else - GHB_PACKAGES="gtk+-2.0 >= 2.10 gthread-2.0 gstreamer-0.10 gstreamer-interfaces-0.10 gstreamer-video-0.10 gstreamer-pbutils-0.10 gio-2.0" - fi + GHB_PACKAGES="gthread-2.0 gio-2.0" mingw_flag=yes ;; *) @@ -96,46 +92,93 @@ case $host in pkg_gudev="gudev-1.0" ;; esac - if test "x$gst_disable" = "xyes" ; then - GHB_PACKAGES="gtk+-2.0 >= 2.10 gthread-2.0 gio-2.0 libnotify dbus-glib-1 $pkg_gudev" - else - GHB_PACKAGES="gtk+-2.0 >= 2.10 gthread-2.0 gstreamer-0.10 gstreamer-interfaces-0.10 gstreamer-video-0.10 gstreamer-pbutils-0.10 gio-2.0 libnotify dbus-glib-1 $pkg_gudev" - fi + GHB_PACKAGES="gthread-2.0 gio-2.0 libnotify dbus-glib-1 $pkg_gudev" mingw_flag=no ;; esac +PKG_PROG_PKG_CONFIG +PKG_CHECK_MODULES(Gtk3, [gtk+-3.0], use_gtk3=yes, use_gtk3=no) +if test "x$use_gtk3" = "xyes" ; then + GHB_PACKAGES="gtk+-3.0 $GHB_PACKAGES" +else + GHB_PACKAGES="gtk+-2.0 >= 2.10 $GHB_PACKAGES" +fi + +GST1_MODULES="gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0 gstreamer-pbutils-1.0" +GST0_MODULES="gstreamer-0.10 gstreamer-interfaces-0.10 gstreamer-video-0.10 gstreamer-audio-0.10 gstreamer-pbutils-0.10" + +if test "x$gst_disable" = "xno" ; then + PKG_CHECK_MODULES(GStreamer1, [$GST1_MODULES], use_gst1=yes, use_gst1=no) + if test "x$use_gst1" = "xyes" ; then + GHB_PACKAGES="$GHB_PACKAGES $GST1_MODULES" + else + PKG_CHECK_MODULES(GStreamer0, [$GST0_MODULES], use_gst0=yes, use_gst0=no) + if test "x$use_gst0" = "xyes" ; then + GHB_PACKAGES="$GHB_PACKAGES $GST0_MODULES" + else + gst_disable="yes" + fi + fi +fi + if test "x$gst_disable" = "xno" ; then CXXFLAGS="$CXXFLAGS -D_ENABLE_GST" CFLAGS="$CFLAGS -D_ENABLE_GST" fi -PKG_PROG_PKG_CONFIG if test "x$update_checks" = "xyes" ; then - PKG_CHECK_MODULES(OldWebKitGtk, WebKitGtk, old_webkit=yes, old_webkit=no) - if test "x$old_webkit" = "xyes" ; then - if test "x$mingw_flag" = "xno" ; then - GHB_PACKAGES="$GHB_PACKAGES WebKitGtk" - CXXFLAGS="$CXXFLAGS -D_OLD_WEBKIT" - CFLAGS="$CFLAGS -D_OLD_WEBKIT" - fi - else - if test "x$mingw_flag" = "xno" ; then - GHB_PACKAGES="$GHB_PACKAGES webkit-1.0" - fi - fi + if test "x$use_gtk3" = "xyes" ; then + PKG_CHECK_MODULES(WebKitGtk3, webkitgtk-3.0, use_webkitgtk3=yes, use_webkitgtk3=no) + if test "x$use_webkitgtk3" = "xyes" ; then + GHB_PACKAGES="$GHB_PACKAGES webkitgtk-3.0" + else + update_checks="no" + CFLAGS="$CFLAGS -D_NO_UPDATE_CHECK" + fi + else + PKG_CHECK_MODULES(OldWebKitGtk1, WebKitGtk, old_webkit=yes, old_webkit=no) + if test "x$old_webkit" = "xyes" ; then + if test "x$mingw_flag" = "xno" ; then + GHB_PACKAGES="$GHB_PACKAGES WebKitGtk" + CXXFLAGS="$CXXFLAGS -D_OLD_WEBKIT" + CFLAGS="$CFLAGS -D_OLD_WEBKIT" + else + update_checks="no" + CFLAGS="$CFLAGS -D_NO_UPDATE_CHECK" + fi + else + PKG_CHECK_MODULES(WebKitGtk1, webkit-1.0, use_webkit1=yes, use_webkit1=no) + if test "x$use_webkit1" = "xyes" ; then + GHB_PACKAGES="$GHB_PACKAGES webkit-1.0" + else + update_checks="no" + CFLAGS="$CFLAGS -D_NO_UPDATE_CHECK" + fi + fi + fi else CFLAGS="$CFLAGS -D_NO_UPDATE_CHECK" fi +if test "x$use_gtk3" = "xyes" ; then + PKG_CHECK_MODULES(libappindicator3, appindicator3-0.1, have_appind=yes, have_appind=no) + if test "x$have_appind" = "xyes" ; then + GHB_PACKAGES="$GHB_PACKAGES appindicator3-0.1" + CXXFLAGS="$CXXFLAGS -D_USE_APP_IND" + CFLAGS="$CFLAGS -D_USE_APP_IND" + fi +else + PKG_CHECK_MODULES(libappindicator, appindicator-0.1, have_appind=yes, have_appind=no) + if test "x$have_appind" = "xyes" ; then + GHB_PACKAGES="$GHB_PACKAGES appindicator-0.1" + CXXFLAGS="$CXXFLAGS -D_USE_APP_IND" + CFLAGS="$CFLAGS -D_USE_APP_IND" + fi +fi + AM_CONDITIONAL([MINGW], [test "x$mingw_flag" = "xyes"]) -PKG_CHECK_MODULES(libappindicator, appindicator-0.1, have_appind=yes, have_appind=no) -if test "x$have_appind" = "xyes" ; then - GHB_PACKAGES="$GHB_PACKAGES appindicator-0.1" - CXXFLAGS="$CXXFLAGS -D_USE_APP_IND" - CFLAGS="$CFLAGS -D_USE_APP_IND" -fi PKG_CHECK_MODULES(GHB, [$GHB_PACKAGES]) GHB_CFLAGS="$HBINC $GHB_CFLAGS" diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c index 0f99948b9..65ba409ef 100644 --- a/gtk/src/callbacks.c +++ b/gtk/src/callbacks.c @@ -217,7 +217,7 @@ ghb_check_dependency( if (widget != NULL) { type = G_OBJECT_TYPE(widget); - if (type == GTK_TYPE_COMBO_BOX || type == GTK_TYPE_COMBO_BOX_ENTRY) + if (type == GTK_TYPE_COMBO_BOX) if (gtk_combo_box_get_active(GTK_COMBO_BOX(widget)) < 0) return; name = ghb_get_setting_key(widget); } @@ -410,7 +410,7 @@ get_dvd_device_name(GDrive *gd) #endif static GHashTable *volname_hash = NULL; -static GMutex *volname_mutex = NULL; +static GMutex volname_mutex; static void free_volname_key(gpointer data) @@ -458,9 +458,9 @@ get_dvd_volume_name(gpointer gd) gchar *drive; drive = get_dvd_device_name(gd); - g_mutex_lock(volname_mutex); + g_mutex_lock(&volname_mutex); label = g_strdup(g_hash_table_lookup(volname_hash, drive)); - g_mutex_unlock(volname_mutex); + g_mutex_unlock(&volname_mutex); if (label != NULL) { if (uppers_and_unders(label)) @@ -485,7 +485,7 @@ get_dvd_volume_name(gpointer gd) void ghb_volname_cache_init(void) { - volname_mutex = g_mutex_new(); + g_mutex_init(&volname_mutex); volname_hash = g_hash_table_new_full(g_str_hash, g_str_equal, free_volname_key, free_volname_value); } @@ -510,7 +510,7 @@ ghb_cache_volnames(signal_user_data_t *ud) if (drives == NULL) return NULL; - g_mutex_lock(volname_mutex); + g_mutex_lock(&volname_mutex); g_hash_table_remove_all(volname_hash); while (link != NULL) { @@ -542,7 +542,7 @@ ghb_cache_volnames(signal_user_data_t *ud) free_drive(link->data); link = link->next; } - g_mutex_unlock(volname_mutex); + g_mutex_unlock(&volname_mutex); g_list_free(drives); @@ -812,20 +812,20 @@ chooser_file_selected_cb(GtkFileChooser *dialog, signal_user_data_t *ud) } G_MODULE_EXPORT void -dvd_device_changed_cb(GtkComboBox *combo, signal_user_data_t *ud) +dvd_device_changed_cb(GtkComboBoxText *combo, signal_user_data_t *ud) { GtkWidget *dialog; gint ii; g_debug("dvd_device_changed_cb ()"); - ii = gtk_combo_box_get_active (combo); + ii = gtk_combo_box_get_active (GTK_COMBO_BOX(combo)); if (ii > 0) { const gchar *device; gchar *name; dialog = GHB_WIDGET(ud->builder, "source_dialog"); - device = gtk_combo_box_get_active_text (combo); + device = gtk_combo_box_text_get_active_text (combo); name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(dialog)); if (name == NULL || strcmp(name, device) != 0) gtk_file_chooser_select_filename (GTK_FILE_CHOOSER(dialog), device); @@ -839,25 +839,26 @@ source_dialog_extra_widgets( signal_user_data_t *ud, GtkWidget *dialog) { - GtkComboBox *combo; + GtkComboBoxText *combo; GList *drives, *link; g_debug("source_dialog_extra_widgets ()"); - combo = GTK_COMBO_BOX(GHB_WIDGET(ud->builder, "source_device")); - gtk_list_store_clear(GTK_LIST_STORE(gtk_combo_box_get_model(combo))); + combo = GTK_COMBO_BOX_TEXT(GHB_WIDGET(ud->builder, "source_device")); + gtk_list_store_clear(GTK_LIST_STORE( + gtk_combo_box_get_model(GTK_COMBO_BOX(combo)))); link = drives = dvd_device_list(); - gtk_combo_box_append_text (combo, "Not Selected"); + gtk_combo_box_text_append_text (combo, "Not Selected"); while (link != NULL) { gchar *name = get_dvd_device_name(link->data); - gtk_combo_box_append_text(combo, name); + gtk_combo_box_text_append_text(combo, name); g_free(name); free_drive(link->data); link = link->next; } g_list_free(drives); - gtk_combo_box_set_active (combo, 0); + gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0); } extern GValue *ghb_queue_edit_settings; @@ -3182,8 +3183,7 @@ ghb_timer_cb(gpointer data) ghb_settings_set_int64(ud->settings, "last_update_check", tt); ghb_pref_save(ud->settings, "last_update_check"); - g_thread_create((GThreadFunc)ghb_check_update, ud, - FALSE, NULL); + g_thread_new("Update Check", (GThreadFunc)ghb_check_update, ud); } } } @@ -3227,7 +3227,8 @@ ghb_log_cb(GIOChannel *source, GIOCondition cond, gpointer data) window = gtk_text_view_get_window(textview, GTK_TEXT_WINDOW_TEXT); if (window != NULL) { - gdk_drawable_get_size(GDK_DRAWABLE(window), &width, &height); + width = gdk_window_get_width(window); + height = gdk_window_get_height(window); gtk_text_view_window_to_buffer_coords(textview, GTK_TEXT_WINDOW_TEXT, width, height, &x, &y); gtk_text_view_get_iter_at_location(textview, &iter, x, y); @@ -3389,11 +3390,14 @@ browse_url(const gchar *url) #endif } +#if 0 + JJJ void about_web_hook(GtkAboutDialog *about, const gchar *link, gpointer data) { browse_url(link); } +#endif G_MODULE_EXPORT void about_activate_cb(GtkWidget *xwidget, signal_user_data_t *ud) @@ -3402,7 +3406,10 @@ about_activate_cb(GtkWidget *xwidget, signal_user_data_t *ud) gchar *ver; ver = g_strdup_printf("%s (%s)", HB_PROJECT_VERSION, HB_PROJECT_BUILD_ARCH); +#if 0 + JJJ gtk_about_dialog_set_url_hook(about_web_hook, NULL, NULL); +#endif gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(widget), ver); g_free(ver); gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(widget), @@ -4090,7 +4097,8 @@ handle_media_change(const gchar *device, gboolean insert, signal_user_data_t *ud ins_count++; if (ins_count == 2) { - g_thread_create((GThreadFunc)ghb_cache_volnames, ud, FALSE, NULL); + g_thread_new("Cache Volume Names", + (GThreadFunc)ghb_cache_volnames, ud); if (ghb_settings_get_boolean(ud->settings, "AutoScan") && ud->current_dvd_device != NULL && strcmp(device, ud->current_dvd_device) == 0) @@ -4110,7 +4118,8 @@ handle_media_change(const gchar *device, gboolean insert, signal_user_data_t *ud rem_count++; if (rem_count == 2) { - g_thread_create((GThreadFunc)ghb_cache_volnames, ud, FALSE, NULL); + g_thread_new("Cache Volume Names", + (GThreadFunc)ghb_cache_volnames, ud); if (ud->current_dvd_device != NULL && strcmp(device, ud->current_dvd_device) == 0) { @@ -4185,7 +4194,7 @@ drive_changed_cb(GVolumeMonitor *gvm, GDrive *gd, signal_user_data_t *ud) gint state; g_debug("drive_changed_cb()"); - g_thread_create((GThreadFunc)ghb_cache_volnames, ud, FALSE, NULL); + g_thread_new("Cache Volume Names", (GThreadFunc)ghb_cache_volnames, ud); state = ghb_get_scan_state(); device = g_drive_get_identifier(gd, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE); @@ -4871,7 +4880,7 @@ static void process_appcast(signal_user_data_t *ud) { gchar *description = NULL, *build = NULL, *version = NULL, *msg; -#if !defined(_WIN32) +#if !defined(_WIN32) && !defined(_NO_UPDATE_CHECK) GtkWidget *window; static GtkWidget *html = NULL; #endif @@ -4897,8 +4906,7 @@ process_appcast(signal_user_data_t *ud) label = GHB_WIDGET(ud->builder, "update_message"); gtk_label_set_text(GTK_LABEL(label), msg); -#if !defined(_WIN32) -#if !defined(_NO_UPDATE_CHECK) +#if !defined(_WIN32) && !defined(_NO_UPDATE_CHECK) if (html == NULL) { html = webkit_web_view_new(); @@ -4910,7 +4918,6 @@ process_appcast(signal_user_data_t *ud) } webkit_web_view_open(WEBKIT_WEB_VIEW(html), description); #endif -#endif dialog = GHB_WIDGET(ud->builder, "update_dialog"); response = gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_hide(dialog); diff --git a/gtk/src/ghb.ui b/gtk/src/ghb.ui index 09b3b2ac0..dfe7cf908 100644 --- a/gtk/src/ghb.ui +++ b/gtk/src/ghb.ui @@ -739,168 +739,270 @@ <property name="position">1</property> </packing> </child> - - <child> - <object class="GtkHBox" id="hbox1"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <child> - <object class="GtkVBox" id="vbox14"> - <property name="orientation">vertical</property> + <object class="GtkHBox" id="hbox1"> <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <child> - <object class="GtkVBox" id="vbox15"> + <object class="GtkVBox" id="vbox14"> <property name="orientation">vertical</property> <property name="visible">True</property> <child> - <object class="GtkAlignment" id="alignment1"> + <object class="GtkVBox" id="vbox15"> + <property name="orientation">vertical</property> <property name="visible">True</property> - <property name="left_padding">6</property> - <property name="right_padding">12</property> - <property name="top_padding">12</property> - <property name="bottom_padding">6</property> - <property name="xalign">0</property> - <property name="xscale">1</property> <child> - <object class="GtkVBox" id="vbox16"> - <property name="orientation">vertical</property> + <object class="GtkAlignment" id="alignment1"> <property name="visible">True</property> - <property name="spacing">2</property> + <property name="left_padding">6</property> + <property name="right_padding">12</property> + <property name="top_padding">12</property> + <property name="bottom_padding">6</property> + <property name="xalign">0</property> + <property name="xscale">1</property> <child> - <object class="GtkHBox" id="hbox54"> + <object class="GtkVBox" id="vbox16"> + <property name="orientation">vertical</property> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">6</property> - <child> - <object class="GtkLabel" id="label7"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Source:</b></property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="position">0</property> - </packing> - </child> + <property name="spacing">2</property> <child> - <object class="GtkLabel" id="source_title"> + <object class="GtkHBox" id="hbox54"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">None</property> - </object> - <packing> - <property name="expand">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="alignment68"> - <property name="visible">True</property> - <property name="xscale">1</property> - <property name="yscale">0</property> + <property name="spacing">6</property> <child> - <object class="GtkProgressBar" id="scan_prog"> - <property name="height_request">10</property> - <property name="width_request">400</property> - <property name="visible">False</property> + <object class="GtkLabel" id="label7"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b>Source:</b></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="source_title"> + <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="text" translatable="yes"/> + <property name="xalign">0</property> + <property name="label" translatable="yes">None</property> </object> + <packing> + <property name="expand">True</property> + <property name="position">1</property> + </packing> </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkTable" id="table7"> - <property name="visible">True</property> - <property name="n_rows">2</property> - <property name="n_columns">2</property> - <property name="column-spacing">5</property> - <child> - <object class="GtkAlignment" id="alignment72"> - <property name="visible">True</property> - <property name="top_padding">6</property> - <property name="left_padding">6</property> <child> - <object class="GtkLabel" id="label20"> + <object class="GtkAlignment" id="alignment68"> <property name="visible">True</property> - <property name="xalign">0.1</property> - <property name="label" translatable="yes">Title:</property> + <property name="xscale">1</property> + <property name="yscale">0</property> + <child> + <object class="GtkProgressBar" id="scan_prog"> + <property name="height_request">10</property> + <property name="width_request">400</property> + <property name="visible">False</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="text" translatable="yes"/> + </object> + </child> </object> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> </child> </object> <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="x_options">GTK_FILL</property> + <property name="expand">False</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkHBox" id="hbox42"> + <object class="GtkTable" id="table7"> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">5</property> - - <child> - <object class="GtkAlignment" id="alignment75"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="xscale">0</property> - <property name="yscale">0</property> + <property name="n_rows">2</property> + <property name="n_columns">2</property> + <property name="column-spacing">5</property> <child> - <object class="GtkComboBox" id="title"> + <object class="GtkAlignment" id="alignment72"> <property name="visible">True</property> - <property name="has_frame">False</property> - <property name="tooltip-text" translatable="yes">Set the title to encode. By default the longest title is chosen. This is often the feature title of a DVD.</property> - <signal handler="title_changed_cb" name="changed"/> + <property name="top_padding">6</property> + <property name="left_padding">6</property> + <child> + <object class="GtkLabel" id="label20"> + <property name="visible">True</property> + <property name="xalign">0.1</property> + <property name="label" translatable="yes">Title:</property> + </object> + </child> </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">GTK_FILL</property> + </packing> </child> + <child> + <object class="GtkHBox" id="hbox42"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="spacing">5</property> + <child> + <object class="GtkAlignment" id="alignment75"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + <child> + <object class="GtkComboBox" id="title"> + <property name="visible">True</property> + <property name="has_frame">False</property> + <property name="tooltip-text" translatable="yes">Set the title to encode. By default the longest title is chosen. This is often the feature title of a DVD.</property> + <signal handler="title_changed_cb" name="changed"/> + </object> + </child> + + </object> + </child> + + <child> + <object class="GtkAlignment" id="alignment73"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + <child> + <object class="GtkHBox" id="hbox44"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="spacing">7</property> + <child> + <object class="GtkLabel" id="angle_label"> + <property name="visible">True</property> + <property name="label" translatable="yes">Angle:</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="angle"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">For multi-angle DVD's, select the desired angle to encode.</property> + <property name="adjustment">adjustment27</property> + <signal name="value_changed" handler="setting_widget_changed_cb"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + </packing> </child> <child> - <object class="GtkAlignment" id="alignment73"> + <object class="GtkAlignment" id="alignment74"> <property name="visible">True</property> - <property name="xalign">1</property> + <property name="xalign">0</property> <property name="xscale">0</property> <property name="yscale">0</property> <child> - <object class="GtkHBox" id="hbox44"> + <object class="GtkHBox" id="hbox48"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">7</property> + <property name="spacing">5</property> + <child> - <object class="GtkLabel" id="angle_label"> + <object class="GtkComboBox" id="PtoPType"> <property name="visible">True</property> - <property name="label" translatable="yes">Angle:</property> + <property name="tooltip-text" translatable="yes">Range of title to encode. Can be chapters, seconds, or frames.</property> + <signal handler="ptop_widget_changed_cb" name="changed"/> </object> <packing> <property name="expand">False</property> - <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> - <object class="GtkSpinButton" id="angle"> + <object class="GtkSpinButton" id="start_point"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Set the first chapter to encode.</property> + <property name="adjustment">adjustment1</property> + <signal handler="start_point_changed_cb" name="value_changed"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label56"> + <property name="visible">True</property> + <property name="label" translatable="yes">through</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="end_point"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">For multi-angle DVD's, select the desired angle to encode.</property> - <property name="adjustment">adjustment27</property> - <signal name="value_changed" handler="setting_widget_changed_cb"/> + <property name="tooltip-text" translatable="yes">Set the last chapter to encode.</property> + <property name="adjustment">adjustment2</property> + <signal handler="end_point_changed_cb" name="value_changed"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox47"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="spacing">7</property> + <child> + <object class="GtkLabel" id="label6"> + <property name="visible">True</property> + <property name="xalign">0.1</property> + <property name="label" translatable="yes">Duration:</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="title_duration"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">hh:mm:ss</property> + <property name="width_chars">8</property> </object> <packing> <property name="expand">False</property> @@ -908,1468 +1010,1377 @@ </packing> </child> </object> + <packing> + <property name="expand">False</property> + <property name="position">4</property> + </packing> + </child> + </object> </child> </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> </child> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> + <property name="expand">False</property> + <property name="position">1</property> </packing> </child> - + </object> + </child> + </object> + </child> + <child> + <object class="GtkFrame" id="frame2"> + <property name="visible">True</property> + <property name="label_xalign">0</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> + <child> + <object class="GtkAlignment" id="alignment44"> + <property name="visible">True</property> + <property name="left_padding">12</property> + <property name="top_padding">6</property> + <property name="bottom_padding">6</property> <child> - <object class="GtkAlignment" id="alignment74"> + <object class="GtkHBox" id="hbox67"> <property name="visible">True</property> - <property name="xalign">0</property> - <property name="xscale">0</property> - <property name="yscale">0</property> + <property name="spacing">12</property> <child> - <object class="GtkHBox" id="hbox48"> + <object class="GtkTable" id="table4"> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">5</property> - + <property name="n_rows">2</property> + <property name="n_columns">2</property> + <child> + <placeholder/> + </child> <child> - <object class="GtkComboBox" id="PtoPType"> + <object class="GtkFileChooserButton" id="dest_dir"> <property name="visible">True</property> - <property name="tooltip-text" translatable="yes">Range of title to encode. Can be chapters, seconds, or frames.</property> - <signal handler="ptop_widget_changed_cb" name="changed"/> + <property name="local-only">False</property> + <property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property> + <property name="title" translatable="yes">Destination Directory</property> + <property name="tooltip-text" translatable="yes">Destination directory for your encode.</property> + <signal name="selection_changed" handler="dest_dir_set_cb"/> </object> <packing> - <property name="expand">False</property> - <property name="position">0</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkSpinButton" id="start_point"> + <object class="GtkEntry" id="dest_file"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Set the first chapter to encode.</property> - <property name="adjustment">adjustment1</property> - <signal handler="start_point_changed_cb" name="value_changed"/> + <property name="width_chars">40</property> + <property name="tooltip-text" translatable="yes">Destination filename for your encode.</property> + <signal name="changed" handler="dest_file_changed_cb"/> + <signal name="grab_focus" handler="destination_grab_cb" after="yes"/> + <accelerator key="d" signal="grab-focus" modifiers="GDK_MOD1_MASK"/> </object> <packing> - <property name="expand">False</property> - <property name="position">1</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkLabel" id="label56"> + <object class="GtkLabel" id="label18"> <property name="visible">True</property> - <property name="label" translatable="yes">through</property> + <property name="label" translatable="yes">File:</property> </object> <packing> - <property name="expand">False</property> - <property name="position">2</property> + <property name="x_options">GTK_FILL</property> </packing> </child> + </object> + <packing> + <property name="expand">False</property> + </packing> + </child> + <child> + <object class="GtkTable" id="container_box"> + <property name="visible">True</property> + <property name="n_rows">2</property> + <property name="n_columns">2</property> + <property name="column_spacing">4</property> <child> - <object class="GtkSpinButton" id="end_point"> + <object class="GtkHBox" id="hbox3"> + <property name="visible">True</property> + <property name="spacing">4</property> + <child> + <object class="GtkLabel" id="label45"> + <property name="visible">True</property> + <property name="label" translatable="yes">Format:</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="FileFormat"> + <property name="visible">True</property> + <property name="tooltip-text" translatable="yes">Format to mux encoded tracks to.</property> + <signal name="changed" handler="container_changed_cb"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="Mp4iPodCompatible"> + <property name="label" translatable="yes">iPod 5G Support</property> <property name="visible">True</property> <property name="can_focus">True</property> + <property name="receives_default">False</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Set the last chapter to encode.</property> - <property name="adjustment">adjustment2</property> - <signal handler="end_point_changed_cb" name="value_changed"/> + <property name="tooltip-text" translatable="yes">Add iPod Atom needed by some older iPods.</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="setting_widget_changed_cb"/> </object> <packing> - <property name="expand">False</property> - <property name="position">3</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> </packing> </child> - <child> - <object class="GtkHBox" id="hbox47"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">7</property> <child> - <object class="GtkLabel" id="label6"> + <object class="GtkCheckButton" id="Mp4HttpOptimize"> + <property name="label" translatable="yes">Web optimized</property> <property name="visible">True</property> - <property name="xalign">0.1</property> - <property name="label" translatable="yes">Duration:</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Optimize the layout of the MP4 file for progressive download. This allows a player to initiate playback before downloading the entire file.</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="http_opt_changed_cb"/> </object> <packing> - <property name="expand">False</property> - <property name="position">0</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkLabel" id="title_duration"> + <object class="GtkCheckButton" id="Mp4LargeFile"> + <property name="label" translatable="yes">Large file (>4GB)</property> <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-markup" translatable="yes">Allow 64 bit MP4 file which can be over 4GB. + + <b>Caution:</b> This option may break device compatibility.</property> <property name="xalign">0</property> - <property name="label" translatable="yes">hh:mm:ss</property> - <property name="width_chars">8</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="setting_widget_changed_cb"/> </object> <packing> - <property name="expand">False</property> - <property name="position">1</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> </packing> </child> </object> <packing> + <property name="position">1</property> <property name="expand">False</property> - <property name="position">4</property> </packing> </child> - </object> - </child> </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="position">1</property> - </packing> + </child> + <child type="label"> + <object class="GtkLabel" id="label11"> + <property name="visible">True</property> + <property name="label" translatable="yes"><b><u>D</u>estination</b></property> + <property name="use_markup">True</property> + </object> </child> </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> </child> </object> + <packing> + <property name="expand">False</property> + </packing> </child> <child> - <object class="GtkFrame" id="frame2"> + <object class="GtkAlignment" id="alignment67"> <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="top_padding">0</property> + <property name="left_padding">12</property> + <property name="right_padding">12</property> <child> - <object class="GtkAlignment" id="alignment44"> + <object class="GtkNotebook" id="SettingsNotebook"> <property name="visible">True</property> - <property name="left_padding">12</property> - <property name="top_padding">6</property> - <property name="bottom_padding">6</property> + <property name="can_focus">True</property> <child> - <object class="GtkHBox" id="hbox67"> + <object class="GtkHBox" id="picture_tab"> <property name="visible">True</property> - <property name="spacing">12</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="spacing">3</property> + <child> - <object class="GtkTable" id="table4"> + <object class="GtkAlignment" id="picture_summary"> <property name="visible">True</property> - <property name="n_rows">2</property> - <property name="n_columns">2</property> - <child> - <placeholder/> - </child> - <child> - <object class="GtkFileChooserButton" id="dest_dir"> - <property name="visible">True</property> - <property name="local-only">False</property> - <property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property> - <property name="title" translatable="yes">Destination Directory</property> - <property name="tooltip-text" translatable="yes">Destination directory for your encode.</property> - <signal name="selection_changed" handler="dest_dir_set_cb"/> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="dest_file"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="width_chars">40</property> - <property name="tooltip-text" translatable="yes">Destination filename for your encode.</property> - <signal name="changed" handler="dest_file_changed_cb"/> - <signal name="grab_focus" handler="destination_grab_cb" after="yes"/> - <accelerator key="d" signal="grab-focus" modifiers="GDK_MOD1_MASK"/> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> + <property name="top_padding">10</property> + <property name="left_padding">10</property> + <child> - <object class="GtkLabel" id="label18"> + <object class="GtkVBox" id="vbox43"> + <property name="orientation">vertical</property> <property name="visible">True</property> - <property name="label" translatable="yes">File:</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="spacing">14</property> + <child> + <object class="GtkFrame" id="frame5"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label_xalign">0</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> + <child> + <object class="GtkAlignment" id="alignment9"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="top_padding">6</property> + <property name="bottom_padding">2</property> + <property name="left_padding">12</property> + <child> + <object class="GtkTable" id="table11"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="n_rows">4</property> + <property name="n_columns">2</property> + <property name="homogeneous">True</property> + + <child> + <object class="GtkLabel" id="labela5"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Source Codec:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="source_codec"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">--</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label23"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Dimensions:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="source_dimensions"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">--</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label42"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Aspect: </property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="source_aspect"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">--</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label43"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Frame Rate:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="source_frame_rate"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">--</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label44"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes"><b>Source Picture Parameters</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="padding">2</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="Cropping1"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label_xalign">0</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> + <child> + <object class="GtkAlignment" id="alignment52"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="top_padding">6</property> + <property name="bottom_padding">2</property> + <property name="left_padding">12</property> + <property name="right_padding">2</property> + <child> + <object class="GtkTable" id="table12"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="n_rows">3</property> + <property name="n_columns">2</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkLabel" id="label13"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Autocrop:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="crop_auto"> + <property name="visible">True</property> + <property name="label" translatable="yes">On</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label12"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Crop:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="crop_values"> + <property name="visible">True</property> + <property name="label" translatable="yes">--</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label76"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Crop Dimensions:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="crop_dimensions"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">--</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label16"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes"><b>Cropping</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="padding">2</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frame16"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label_xalign">0</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> + <child> + <object class="GtkAlignment" id="alignment20"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="top_padding">6</property> + <property name="bottom_padding">2</property> + <property name="left_padding">12</property> + <property name="right_padding">2</property> + <child> + <object class="GtkTable" id="table13"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="n_rows">3</property> + <property name="n_columns">2</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkLabel" id="label14"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Scale Dimensions:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="scale_dimensions"> + <property name="visible">True</property> + <property name="label" translatable="yes">--</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label15"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Optimal for Source:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="scale_auto"> + <property name="visible">True</property> + <property name="label" translatable="yes">On</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label17"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Anamorphic:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="scale_anamorphic"> + <property name="visible">True</property> + <property name="label" translatable="yes">On</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_EXPAND|GTK_FILL</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label19"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes"><b>Scaling</b></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="padding">2</property> + </packing> + </child> </object> - <packing> - <property name="x_options">GTK_FILL</property> - </packing> </child> + </object> <packing> - <property name="expand">False</property> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkTable" id="container_box"> + <object class="GtkAlignment" id="alignment56"> <property name="visible">True</property> - <property name="n_rows">2</property> - <property name="n_columns">2</property> - <property name="column_spacing">4</property> + <property name="right_padding">12</property> + <property name="top_padding">12</property> + <property name="yalign">0.4</property> + <property name="yscale">0</property> <child> - <object class="GtkHBox" id="hbox3"> + <object class="GtkVBox" id="vbox9"> + <property name="orientation">vertical</property> <property name="visible">True</property> - <property name="spacing">4</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <child> - <object class="GtkLabel" id="label45"> + <object class="GtkFrame" id="frame8"> <property name="visible">True</property> - <property name="label" translatable="yes">Format:</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment" id="alignment19"> + <property name="visible">True</property> + <property name="bottom_padding">4</property> + <property name="left_padding">4</property> + <property name="right_padding">4</property> + <property name="yalign">1</property> + <child> + <object class="GtkImage" id="preview_button_image"> + <property name="width_request">448</property> + <property name="height_request">200</property> + <property name="visible">True</property> + <property name="icon_name">hb-icon</property> + <property name="pixel-size">128</property> + <signal name="size_allocate" handler="preview_button_size_allocate_cb"/> + </object> + </child> + </object> + </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> - <property name="position">0</property> + <property name="position">1</property> </packing> </child> <child> - <object class="GtkComboBox" id="FileFormat"> + <object class="GtkAlignment" id="picture_summary2"> <property name="visible">True</property> - <property name="tooltip-text" translatable="yes">Format to mux encoded tracks to.</property> - <signal name="changed" handler="container_changed_cb"/> + <property name="yalign">0</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + <child> + <object class="GtkHBox" id="hbox7"> + <property name="visible">True</property> + <property name="spacing">4</property> + <child> + <object class="GtkLabel" id="label10"> + <property name="visible">True</property> + <property name="label" translatable="yes">Presentation Dimensions:</property> + <property name="justify">right</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="preview_dims"> + <property name="width_request">85</property> + <property name="visible">True</property> + <property name="xalign">0.2</property> + <property name="yalign">0</property> + <property name="label" translatable="yes">--</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + + </object> + </child> </object> <packing> <property name="expand">False</property> - <property name="position">1</property> + <property name="fill">False</property> + <property name="position">2</property> </packing> </child> </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="Mp4iPodCompatible"> - <property name="label" translatable="yes">iPod 5G Support</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Add iPod Atom needed by some older iPods.</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="setting_widget_changed_cb"/> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="Mp4HttpOptimize"> - <property name="label" translatable="yes">Web optimized</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Optimize the layout of the MP4 file for progressive download. This allows a player to initiate playback before downloading the entire file.</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="http_opt_changed_cb"/> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="Mp4LargeFile"> - <property name="label" translatable="yes">Large file (>4GB)</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-markup" translatable="yes">Allow 64 bit MP4 file which can be over 4GB. - -<b>Caution:</b> This option may break device compatibility.</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="setting_widget_changed_cb"/> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - </packing> </child> </object> <packing> + <property name="expand">True</property> + <property name="fill">True</property> <property name="position">1</property> - <property name="expand">False</property> </packing> </child> </object> </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="label11"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b><u>D</u>estination</b></property> - <property name="use_markup">True</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="alignment67"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="top_padding">0</property> - <property name="left_padding">12</property> - <property name="right_padding">12</property> - - <child> - <object class="GtkNotebook" id="SettingsNotebook"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <child> - <object class="GtkHBox" id="picture_tab"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">3</property> - - <child> - <object class="GtkAlignment" id="picture_summary"> - <property name="visible">True</property> - <property name="top_padding">10</property> - <property name="left_padding">10</property> - + <child type="tab"> + <object class="GtkLabel" id="picture_label"> + <property name="visible">True</property> + <property name="label" translatable="yes">Summary</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> <child> - <object class="GtkVBox" id="vbox43"> - <property name="orientation">vertical</property> + <object class="GtkVBox" id="vbox22"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">14</property> + + <property name="spacing">8</property> <child> - <object class="GtkFrame" id="frame5"> + <object class="GtkHBox" id="hbox17"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label_xalign">0</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> + + <property name="spacing">48</property> <child> - <object class="GtkAlignment" id="alignment9"> + <object class="GtkAlignment" id="alignment14"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="top_padding">6</property> - <property name="bottom_padding">2</property> - <property name="left_padding">12</property> + <property name="top_padding">48</property> + <property name="left_padding">24</property> <child> - <object class="GtkTable" id="table11"> + <object class="GtkTable" id="table15"> + <property name="row_spacing">5</property> + <property name="column_spacing">5</property> + <property name="n_rows">6</property> + <property name="n_columns">2</property> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="n_rows">4</property> - <property name="n_columns">2</property> - <property name="homogeneous">True</property> - <child> - <object class="GtkLabel" id="labela5"> + <object class="GtkLabel" id="label46"> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="xalign">0</property> - <property name="label" translatable="yes">Source Codec:</property> + <property name="label" translatable="yes">Video Encoder:</property> </object> <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> </packing> </child> <child> - <object class="GtkLabel" id="source_codec"> + <object class="GtkComboBox" id="VideoEncoder"> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">--</property> + <property name="tooltip-text" translatable="yes">Available video encoders.</property> + <signal handler="vcodec_changed_cb" name="changed"/> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> </packing> </child> <child> - <object class="GtkLabel" id="label23"> + <object class="GtkLabel" id="label47"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="xalign">0</property> - <property name="label" translatable="yes">Dimensions:</property> + <property name="label" translatable="yes">Framerate:</property> </object> <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> </packing> </child> <child> - <object class="GtkLabel" id="source_dimensions"> + <object class="GtkComboBox" id="VideoFramerate"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">--</property> + <property name="tooltip-text" translatable="yes">Output framerate. 'Same as source' is recommended. If your source video has a variable framerate, 'Same as source' will preserve it.</property> + <signal handler="framerate_changed_cb" name="changed"/> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> </packing> </child> <child> - <object class="GtkLabel" id="label42"> + <object class="GtkRadioButton" id="VideoFramerateCFR"> <property name="visible">True</property> + <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Aspect: </property> + <property name="tooltip-text" translatable="yes">Enables constant framerate output.</property> + <property name="label" translatable="yes">Constant Framerate</property> + <property name="draw_indicator">True</property> + <signal handler="setting_widget_changed_cb" name="toggled"/> </object> <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> <property name="top_attach">2</property> <property name="bottom_attach">3</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="source_aspect"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">--</property> - </object> - <packing> - <property name="left_attach">1</property> + <property name="left_attach">0</property> <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> </packing> </child> <child> - <object class="GtkLabel" id="label43"> + <object class="GtkRadioButton" id="VideoFrameratePFR"> <property name="visible">True</property> + <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Frame Rate:</property> + <property name="tooltip-text" translatable="yes">Enables variable framerate output with a peak rate determined by the framerate setting. VFR is not compatible with some players.</property> + <property name="label" translatable="yes">Peak Framerate (VFR)</property> + <property name="draw_indicator">True</property> + <property name="group">VideoFramerateCFR</property> + <signal handler="setting_widget_changed_cb" name="toggled"/> </object> <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> <property name="top_attach">3</property> <property name="bottom_attach">4</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="left_attach">0</property> + <property name="right_attach">2</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> </packing> </child> <child> - <object class="GtkLabel" id="source_frame_rate"> + <object class="GtkRadioButton" id="VideoFramerateVFR"> <property name="visible">True</property> + <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">--</property> + <property name="tooltip-text" translatable="yes">Enables variable framerate output. VFR is not compatible with some players.</property> + <property name="label" translatable="yes">Variable Framerate</property> + <property name="draw_indicator">True</property> + <property name="group">VideoFramerateCFR</property> + <signal handler="setting_widget_changed_cb" name="toggled"/> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> <property name="top_attach">3</property> <property name="bottom_attach">4</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="left_attach">0</property> + <property name="right_attach">2</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> </packing> </child> </object> </child> </object> + <packing> + <property name="expand">False</property> + </packing> </child> - <child type="label"> - <object class="GtkLabel" id="label44"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes"><b>Source Picture Parameters</b></property> - <property name="use_markup">True</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="padding">2</property> - </packing> - </child> - <child> - <object class="GtkFrame" id="Cropping1"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label_xalign">0</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> <child> - <object class="GtkAlignment" id="alignment52"> + <object class="GtkAlignment" id="alignment10"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="top_padding">6</property> - <property name="bottom_padding">2</property> - <property name="left_padding">12</property> - <property name="right_padding">2</property> + <property name="top_padding">48</property> + <property name="right_padding">24</property> <child> - <object class="GtkTable" id="table12"> + <object class="GtkTable" id="table8"> + <property name="row_spacing">5</property> + <property name="column_spacing">5</property> + <property name="n_rows">6</property> + <property name="n_columns">3</property> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="n_rows">3</property> - <property name="n_columns">2</property> - <property name="homogeneous">True</property> <child> - <object class="GtkLabel" id="label13"> + <object class="GtkHScale" id="VideoQualitySlider"> <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Autocrop:</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Set the desired quality factor. The encoder targets a certain quality. The scale used by each video encoder is different. + + x264's scale is logarithmic and lower values coorespond to higher quality. So small decreases in value will result in progressively larger increases in the resulting file size. A value of 0 means lossless and will result in a file size that is larger than the original source, unless the source was also lossless. + + FFMpeg's and Theora's scale is more linear. These encoders do not have a lossless mode.</property> + <property name="adjustment">adjustment5</property> + <property name="digits">3</property> + <property name="value_pos">GTK_POS_TOP</property> + <signal handler="vquality_changed_cb" name="value_changed"/> + <signal handler="format_vquality_cb" name="format-value"/> </object> <packing> <property name="left_attach">0</property> - <property name="right_attach">1</property> + <property name="right_attach">3</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> </packing> </child> <child> - <object class="GtkLabel" id="crop_auto"> + <object class="GtkRadioButton" id="vquality_type_constant"> <property name="visible">True</property> - <property name="label" translatable="yes">On</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Set the desired quality factor. The encoder targets a certain quality. The scale used by each video encoder is different. + + x264's scale is logarithmic and lower values coorespond to higher quality. So small decreases in value will result in progressively larger increases in the resulting file size. A value of 0 means lossless and will result in a file size that is larger than the original source, unless the source was also lossless. + + FFMpeg's and Theora's scale is more linear. These encoders do not have a lossless mode.</property> + <property name="label" translatable="yes">Constant Quality:</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal handler="setting_widget_changed_cb" name="toggled"/> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options"></property> + <property name="y_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkLabel" id="label12"> + <object class="GtkRadioButton" id="vquality_type_bitrate"> <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Crop:</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Set the average bitrate. The instantaneous bitrate can be much higher or lower at any point in time. But the average over a long duration will be the value set here. If you need to limit instantaneous bitrate, look into x264's vbv-bufsize and vbv-maxrate settings.</property> + <property name="label" translatable="yes">Bitrate (kbps): </property> + <property name="group">vquality_type_constant</property> + <property name="draw_indicator">True</property> + <signal handler="setting_widget_changed_cb" name="toggled"/> </object> <packing> <property name="left_attach">0</property> <property name="right_attach">1</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkLabel" id="crop_values"> + <object class="GtkSpinButton" id="VideoAvgBitrate"> <property name="visible">True</property> - <property name="label" translatable="yes">--</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Set the average bitrate. The instantaneous bitrate can be much higher or lower at any point in time. But the average over a long duration will be the value set here. If you need to limit instantaneous bitrate, look into x264 vbv-bufsize and vbv-maxrate.</property> + <property name="adjustment">adjustment3</property> + <signal handler="setting_widget_changed_cb" name="value_changed"/> </object> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options"></property> + <property name="x_options"></property> </packing> </child> <child> - <object class="GtkLabel" id="label76"> + <object class="GtkCheckButton" id="VideoTwoPass"> <property name="visible">True</property> + <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Crop Dimensions:</property> + <property name="tooltip-text" translatable="yes">Perform 2 Pass Encoding. The 'Bitrate' option is prerequisite. During the 1st pass, statistics about the video are collected. Then in the second pass, those statistics are used to make bitrate allocation decisions.</property> + <property name="label" translatable="yes">2-Pass Encoding</property> + <property name="draw_indicator">True</property> + <signal handler="setting_widget_changed_cb" name="toggled"/> </object> <packing> <property name="left_attach">0</property> <property name="right_attach">1</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkLabel" id="crop_dimensions"> + <object class="GtkAlignment" id="alignment13"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">--</property> + <property name="left_padding">16</property> + <child> + <object class="GtkCheckButton" id="VideoTurboTwoPass"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">During the 1st pass of a 2 pass encode, use settings that speed things along.</property> + <property name="label" translatable="yes">Turbo First Pass</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal handler="setting_widget_changed_cb" name="toggled"/> + </object> + </child> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL</property> </packing> </child> </object> </child> </object> - </child> - <child type="label"> - <object class="GtkLabel" id="label16"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes"><b>Cropping</b></property> - <property name="use_markup">True</property> - </object> + <packing> + <property name="padding">2</property> + <property name="position">1</property> + <property name="expand">True</property> + </packing> </child> </object> <packing> - <property name="expand">False</property> <property name="padding">2</property> - <property name="position">1</property> + <property name="position">0</property> + <property name="expand">False</property> </packing> </child> <child> - <object class="GtkFrame" id="frame16"> + <object class="GtkAlignment" id="alignment55"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label_xalign">0</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> + <property name="left_padding">24</property> + <property name="right_padding">24</property> <child> - <object class="GtkAlignment" id="alignment20"> + <object class="GtkVBox" id="x264VideoSettings"> + <property name="orientation">vertical</property> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="top_padding">6</property> - <property name="bottom_padding">2</property> - <property name="left_padding">12</property> - <property name="right_padding">2</property> <child> - <object class="GtkTable" id="table13"> + <object class="GtkCheckButton" id="x264UseAdvancedOptions"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Use advanced options Tab for x264 settings. + + Use at your own risk!</property> + <property name="label" translatable="yes">Use Advanced Options</property> + <property name="active">False</property> + <property name="draw_indicator">True</property> + <signal handler="x264_use_advanced_options_changed_cb" name="toggled"/> + </object> + <packing> + <property name="expand">True</property> + <property name="padding">2</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkTable" id="x264VideoSettingsTable"> + <property name="row_spacing">5</property> + <property name="column_spacing">5</property> + <property name="n_rows">4</property> + <property name="n_columns">6</property> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="n_rows">3</property> - <property name="n_columns">2</property> - <property name="homogeneous">True</property> <child> - <object class="GtkLabel" id="label14"> + <object class="GtkLabel" id="x264PresetLabel"> <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="xalign">0</property> - <property name="label" translatable="yes">Scale Dimensions:</property> + <property name="label" translatable="yes">x264 Preset:</property> </object> <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkLabel" id="scale_dimensions"> + <object class="GtkHScale" id="x264PresetSlider"> <property name="visible">True</property> - <property name="label" translatable="yes">--</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Adjusts x264 settings to trade off compression efficiency against encoding speed. + + This establishes your default x264 settings. Tunes, profiles, levels and advanced option string will be applied to this. + + You should generally set this option to the slowest you can bear since slower settings will result in better quality or smaller files.</property> + <property name="adjustment">x264PresetRange</property> + <property name="digits">0</property> + <property name="value_pos">GTK_POS_RIGHT</property> + <signal handler="x264_setting_changed_cb" name="value_changed"/> + <signal handler="format_x264_preset_cb" name="format-value"/> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="left_attach">1</property> + <property name="right_attach">6</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> </packing> </child> <child> - <object class="GtkLabel" id="label15"> + <object class="GtkLabel" id="x264TuneLabel"> <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="xalign">0</property> - <property name="label" translatable="yes">Optimal for Source:</property> + <property name="label" translatable="yes">x264 Tune:</property> </object> <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkLabel" id="scale_auto"> + <object class="GtkComboBox" id="x264Tune"> <property name="visible">True</property> - <property name="label" translatable="yes">On</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Tune settings to optimize for common scenarios. + + This can improve effeciency for particular source characteristics or set characteristics of the output file. + + Changes will be applied after the preset but before all other parameters.</property> + <signal handler="x264_setting_changed_cb" name="changed"/> </object> <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> <property name="left_attach">1</property> <property name="right_attach">2</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="x264FastDecode"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Reduce decoder CPU usage. + + Set this if your device is struggling to play the output (dropped frames).</property> + <property name="label" translatable="yes">Fast Decode</property> + <property name="active">False</property> + <property name="draw_indicator">True</property> + <signal handler="x264_setting_changed_cb" name="toggled"/> + </object> + <packing> <property name="top_attach">1</property> <property name="bottom_attach">2</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL</property> + <property name="x_padding">20</property> </packing> </child> <child> - <object class="GtkLabel" id="label17"> + <object class="GtkCheckButton" id="x264ZeroLatency"> + <property name="visible">False</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Minimize latency between input to encoder and output of decoder. + + This is useful for broadcast of live streams. + Since HandBrake is not suitable for live stream broadcast purposes, this setting is of little value here.</property> + <property name="label" translatable="yes">Zero Latency</property> + <property name="active">False</property> + <property name="draw_indicator">True</property> + <signal handler="x264_setting_changed_cb" name="toggled"/> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL</property> + <property name="x_padding">20</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="h264ProfileLabel"> <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="xalign">0</property> - <property name="label" translatable="yes">Anamorphic:</property> + <property name="label" translatable="yes">H.264 Profile:</property> </object> <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> <property name="left_attach">0</property> <property name="right_attach">1</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="h264Profile"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Limit the H.264 profile of the output stream. + + Overrides all other settings.</property> + <signal handler="x264_setting_changed_cb" name="changed"/> + </object> + <packing> <property name="top_attach">2</property> <property name="bottom_attach">3</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkLabel" id="scale_anamorphic"> + <object class="GtkLabel" id="h264LevelLabel"> <property name="visible">True</property> - <property name="label" translatable="yes">On</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">H.264 Level:</property> </object> <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="h264Level"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Sets and ensures compliance with the specified H.264 level. + + Overrides all other settings.</property> + <signal handler="x264_setting_changed_cb" name="changed"/> + </object> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> <property name="left_attach">1</property> <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">GTK_EXPAND|GTK_FILL</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL</property> </packing> </child> - </object> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="label19"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes"><b>Scaling</b></property> - <property name="use_markup">True</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="padding">2</property> - </packing> - </child> - </object> - </child> - - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="alignment56"> - <property name="visible">True</property> - <property name="right_padding">12</property> - <property name="top_padding">12</property> - <child> - <object class="GtkVBox" id="vbox9"> - <property name="orientation">vertical</property> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <child> - <object class="GtkFrame" id="frame8"> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> - <child> - <object class="GtkAlignment" id="alignment19"> - <property name="visible">True</property> - <property name="bottom_padding">4</property> - <property name="left_padding">4</property> - <property name="right_padding">4</property> - <child> - <object class="GtkImage" id="preview_button_image"> - <property name="width_request">448</property> - <property name="height_request">200</property> - <property name="visible">True</property> - <property name="icon_name">hb-icon</property> - <property name="pixel-size">128</property> - <signal name="size_allocate" handler="preview_button_size_allocate_cb"/> - </object> - </child> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="picture_summary2"> - <property name="visible">True</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <child> - <object class="GtkHBox" id="hbox7"> - <property name="visible">True</property> - <property name="spacing">4</property> - <child> - <object class="GtkLabel" id="label10"> - <property name="visible">True</property> - <property name="label" translatable="yes">Presentation Dimensions:</property> - <property name="justify">right</property> - </object> - <packing> - <property name="expand">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="preview_dims"> - <property name="width_request">85</property> - <property name="visible">True</property> - <property name="xalign">0.2</property> - <property name="yalign">0</property> - <property name="label" translatable="yes">--</property> - </object> - <packing> - <property name="expand">False</property> - <property name="position">1</property> - </packing> - </child> - - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> - </packing> - </child> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - </child> - <child type="tab"> - <object class="GtkLabel" id="picture_label"> - <property name="visible">True</property> - <property name="label" translatable="yes">Summary</property> - </object> - <packing> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox22"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - - <property name="spacing">8</property> - <child> - <object class="GtkHBox" id="hbox17"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - - <property name="spacing">48</property> - <child> - <object class="GtkAlignment" id="alignment14"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="top_padding">8</property> - <property name="left_padding">24</property> - <child> - <object class="GtkTable" id="table15"> - <property name="row_spacing">5</property> - <property name="column_spacing">5</property> - <property name="n_rows">6</property> - <property name="n_columns">2</property> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <child> - <object class="GtkLabel" id="label46"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Video Encoder:</property> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL|GTK_EXPAND</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="VideoEncoder"> - <property name="visible">True</property> - <property name="tooltip-text" translatable="yes">Available video encoders.</property> - <signal handler="vcodec_changed_cb" name="changed"/> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL|GTK_EXPAND</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label47"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Framerate:</property> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL|GTK_EXPAND</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="VideoFramerate"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Output framerate. 'Same as source' is recommended. If your source video has a variable framerate, 'Same as source' will preserve it.</property> - <signal handler="framerate_changed_cb" name="changed"/> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL|GTK_EXPAND</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="VideoFramerateCFR"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Enables constant framerate output.</property> - <property name="label" translatable="yes">Constant Framerate</property> - <property name="draw_indicator">True</property> - <signal handler="setting_widget_changed_cb" name="toggled"/> - </object> - <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="left_attach">0</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL|GTK_EXPAND</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="VideoFrameratePFR"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Enables variable framerate output with a peak rate determined by the framerate setting. VFR is not compatible with some players.</property> - <property name="label" translatable="yes">Peak Framerate (VFR)</property> - <property name="draw_indicator">True</property> - <property name="group">VideoFramerateCFR</property> - <signal handler="setting_widget_changed_cb" name="toggled"/> - </object> - <packing> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="left_attach">0</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL|GTK_EXPAND</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="VideoFramerateVFR"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Enables variable framerate output. VFR is not compatible with some players.</property> - <property name="label" translatable="yes">Variable Framerate</property> - <property name="draw_indicator">True</property> - <property name="group">VideoFramerateCFR</property> - <signal handler="setting_widget_changed_cb" name="toggled"/> - </object> - <packing> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="left_attach">0</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL|GTK_EXPAND</property> - </packing> - </child> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="alignment10"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="top_padding">48</property> - <property name="right_padding">24</property> - <child> - <object class="GtkTable" id="table8"> - <property name="row_spacing">5</property> - <property name="column_spacing">5</property> - <property name="n_rows">6</property> - <property name="n_columns">3</property> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <child> - <object class="GtkHScale" id="VideoQualitySlider"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Set the desired quality factor. The encoder targets a certain quality. The scale used by each video encoder is different. - - x264's scale is logarithmic and lower values coorespond to higher quality. So small decreases in value will result in progressively larger increases in the resulting file size. A value of 0 means lossless and will result in a file size that is larger than the original source, unless the source was also lossless. - - FFMpeg's and Theora's scale is more linear. These encoders do not have a lossless mode.</property> - <property name="adjustment">adjustment5</property> - <property name="digits">3</property> - <property name="value_pos">GTK_POS_TOP</property> - <signal handler="vquality_changed_cb" name="value_changed"/> - <signal handler="format_vquality_cb" name="format-value"/> - </object> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">3</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL|GTK_EXPAND</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="vquality_type_constant"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Set the desired quality factor. The encoder targets a certain quality. The scale used by each video encoder is different. - - x264's scale is logarithmic and lower values coorespond to higher quality. So small decreases in value will result in progressively larger increases in the resulting file size. A value of 0 means lossless and will result in a file size that is larger than the original source, unless the source was also lossless. - - FFMpeg's and Theora's scale is more linear. These encoders do not have a lossless mode.</property> - <property name="label" translatable="yes">Constant Quality:</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - <signal handler="setting_widget_changed_cb" name="toggled"/> - </object> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options"></property> - <property name="y_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="vquality_type_bitrate"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Set the average bitrate. The instantaneous bitrate can be much higher or lower at any point in time. But the average over a long duration will be the value set here. If you need to limit instantaneous bitrate, look into x264's vbv-bufsize and vbv-maxrate settings.</property> - <property name="label" translatable="yes">Bitrate (kbps): </property> - <property name="group">vquality_type_constant</property> - <property name="draw_indicator">True</property> - <signal handler="setting_widget_changed_cb" name="toggled"/> - </object> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkSpinButton" id="VideoAvgBitrate"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Set the average bitrate. The instantaneous bitrate can be much higher or lower at any point in time. But the average over a long duration will be the value set here. If you need to limit instantaneous bitrate, look into x264 vbv-bufsize and vbv-maxrate.</property> - <property name="adjustment">adjustment3</property> - <signal handler="setting_widget_changed_cb" name="value_changed"/> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="y_options"></property> - <property name="x_options"></property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="VideoTwoPass"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Perform 2 Pass Encoding. The 'Bitrate' option is prerequisite. During the 1st pass, statistics about the video are collected. Then in the second pass, those statistics are used to make bitrate allocation decisions.</property> - <property name="label" translatable="yes">2-Pass Encoding</property> - <property name="draw_indicator">True</property> - <signal handler="setting_widget_changed_cb" name="toggled"/> - </object> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="alignment13"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="left_padding">16</property> - <child> - <object class="GtkCheckButton" id="VideoTurboTwoPass"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">During the 1st pass of a 2 pass encode, use settings that speed things along.</property> - <property name="label" translatable="yes">Turbo First Pass</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - <signal handler="setting_widget_changed_cb" name="toggled"/> - </object> - </child> - </object> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - </object> - </child> - </object> - <packing> - <property name="padding">2</property> - <property name="position">1</property> - <property name="expand">False</property> - </packing> - </child> - </object> - <packing> - <property name="padding">2</property> - <property name="position">0</property> - <property name="expand">False</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="alignment55"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="left_padding">24</property> - <property name="right_padding">24</property> - <child> - <object class="GtkVBox" id="x264VideoSettings"> - <property name="orientation">vertical</property> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <child> - <object class="GtkCheckButton" id="x264UseAdvancedOptions"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Use advanced options Tab for x264 settings. - -Use at your own risk!</property> - <property name="label" translatable="yes">Use Advanced Options</property> - <property name="active">False</property> - <property name="draw_indicator">True</property> - <signal handler="x264_use_advanced_options_changed_cb" name="toggled"/> - </object> - <packing> - <property name="expand">True</property> - <property name="padding">2</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkTable" id="x264VideoSettingsTable"> - <property name="row_spacing">5</property> - <property name="column_spacing">5</property> - <property name="n_rows">4</property> - <property name="n_columns">6</property> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <child> - <object class="GtkLabel" id="x264PresetLabel"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">x264 Preset:</property> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkHScale" id="x264PresetSlider"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Adjusts x264 settings to trade off compression efficiency against encoding speed. - - This establishes your default x264 settings. Tunes, profiles, levels and advanced option string will be applied to this. - - You should generally set this option to the slowest you can bear since slower settings will result in better quality or smaller files.</property> - <property name="adjustment">x264PresetRange</property> - <property name="digits">0</property> - <property name="value_pos">GTK_POS_RIGHT</property> - <signal handler="x264_setting_changed_cb" name="value_changed"/> - <signal handler="format_x264_preset_cb" name="format-value"/> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">1</property> - <property name="right_attach">6</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL|GTK_EXPAND</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="x264TuneLabel"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">x264 Tune:</property> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="x264Tune"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Tune settings to optimize for common scenarios. - - This can improve effeciency for particular source characteristics or set characteristics of the output file. - - Changes will be applied after the preset but before all other parameters.</property> - <signal handler="x264_setting_changed_cb" name="changed"/> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="x264FastDecode"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Reduce decoder CPU usage. - - Set this if your device is struggling to play the output (dropped frames).</property> - <property name="label" translatable="yes">Fast Decode</property> - <property name="active">False</property> - <property name="draw_indicator">True</property> - <signal handler="x264_setting_changed_cb" name="toggled"/> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL</property> - <property name="x_padding">20</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="x264ZeroLatency"> - <property name="visible">False</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Minimize latency between input to encoder and output of decoder. - - This is useful for broadcast of live streams. - Since HandBrake is not suitable for live stream broadcast purposes, this setting is of little value here.</property> - <property name="label" translatable="yes">Zero Latency</property> - <property name="active">False</property> - <property name="draw_indicator">True</property> - <signal handler="x264_setting_changed_cb" name="toggled"/> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">3</property> - <property name="right_attach">4</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL</property> - <property name="x_padding">20</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="h264ProfileLabel"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">H.264 Profile:</property> - </object> - <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="h264Profile"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Limit the H.264 profile of the output stream. - - Overrides all other settings.</property> - <signal handler="x264_setting_changed_cb" name="changed"/> - </object> - <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="h264LevelLabel"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">H.264 Level:</property> - </object> - <packing> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="h264Level"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Sets and ensures compliance with the specified H.264 level. - - Overrides all other settings.</property> - <signal handler="x264_setting_changed_cb" name="changed"/> - </object> - <packing> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkHBox" id="hbox43"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">5</property> - <child> - <object class="GtkLabel" id="x264OptionExtraLabel"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">More Settings:</property> - </object> - <packing> - <property name="position">0</property> - <property name="expand">False</property> - <property name="padding">5</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow8"> - <property name="height_request">60</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">etched-in</property> <child> - <object class="GtkTextView" id="x264OptionExtra"> + <object class="GtkHBox" id="hbox43"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="tooltip-text" translatable="yes">Additional x264 settings. + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="spacing">5</property> + <child> + <object class="GtkLabel" id="x264OptionExtraLabel"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">More Settings:</property> + </object> + <packing> + <property name="position">0</property> + <property name="expand">False</property> + <property name="padding">5</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow8"> + <property name="height_request">60</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="shadow_type">etched-in</property> + <child> + <object class="GtkTextView" id="x264OptionExtra"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip-text" translatable="yes">Additional x264 settings. - Colon separated list of x264 options.</property> - <property name="wrap_mode">GTK_WRAP_CHAR</property> - <property name="accepts_tab">False</property> + Colon separated list of x264 options.</property> + <property name="wrap_mode">GTK_WRAP_CHAR</property> + <property name="accepts_tab">False</property> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="position">1</property> + </packing> + </child> </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">4</property> + <property name="left_attach">2</property> + <property name="right_attach">6</property> + <property name="y_options"></property> + <property name="x_options">GTK_FILL</property> + </packing> </child> </object> <packing> <property name="expand">True</property> + <property name="padding">2</property> <property name="position">1</property> </packing> </child> </object> - <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">4</property> - <property name="left_attach">2</property> - <property name="right_attach">6</property> - <property name="y_options"></property> - <property name="x_options">GTK_FILL</property> - </packing> </child> </object> <packing> @@ -2380,1720 +2391,1965 @@ Use at your own risk!</property> </child> </object> </child> - </object> - <packing> - <property name="expand">True</property> - <property name="padding">2</property> - <property name="position">1</property> - </packing> - </child> - </object> - </child> - <child type="tab"> - <object class="GtkLabel" id="label65"> - <property name="visible">True</property> - <property name="label" translatable="yes">Video</property> - </object> - <packing> - <property name="position">1</property> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="audio_tab"> - <property name="orientation">vertical</property> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <child> - <object class="GtkAlignment" id="alignment18"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="top_padding">12</property> - <property name="bottom_padding">2</property> - <property name="left_padding">12</property> - <property name="right_padding">2</property> + <child type="tab"> + <object class="GtkLabel" id="label65"> + <property name="visible">True</property> + <property name="label" translatable="yes">Video</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> <child> - <object class="GtkVBox" id="vbox17"> + <object class="GtkVBox" id="audio_tab"> <property name="orientation">vertical</property> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">2</property> <child> - <object class="GtkTable" id="table16"> + <object class="GtkAlignment" id="alignment18"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="n_rows">2</property> - <property name="n_columns">3</property> - <property name="row_spacing">5</property> - <property name="column_spacing">5</property> + <property name="top_padding">12</property> + <property name="bottom_padding">2</property> + <property name="left_padding">12</property> + <property name="right_padding">2</property> <child> - <object class="GtkAlignment" id="alignment47"> + <object class="GtkVBox" id="vbox17"> + <property name="orientation">vertical</property> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="yalign">0</property> - <property name="yscale">0</property> + <property name="spacing">2</property> <child> - <object class="GtkButton" id="audio_add"> + <object class="GtkTable" id="table16"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Add new audio settings to the list</property> - <property name="relief">GTK_RELIEF_NONE</property> - <signal handler="audio_add_clicked_cb" name="clicked"/> + <property name="n_rows">2</property> + <property name="n_columns">3</property> + <property name="row_spacing">5</property> + <property name="column_spacing">5</property> <child> - <object class="GtkImage" id="image4"> + <object class="GtkAlignment" id="alignment47"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="stock">gtk-add</property> + <property name="yalign">0</property> + <property name="yscale">0</property> + <child> + <object class="GtkButton" id="audio_add"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Add new audio settings to the list</property> + <property name="relief">GTK_RELIEF_NONE</property> + <signal handler="audio_add_clicked_cb" name="clicked"/> + <child> + <object class="GtkImage" id="image4"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="stock">gtk-add</property> + </object> + </child> + </object> + </child> </object> + <packing> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> </child> - </object> - </child> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="alignment37"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="yalign">0</property> - <property name="yscale">0</property> - <child> - <object class="GtkButton" id="audio_remove"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Remove the selected audio settings</property> - <property name="relief">GTK_RELIEF_NONE</property> - <signal handler="audio_remove_clicked_cb" name="clicked"/> <child> - <object class="GtkImage" id="image8"> + <object class="GtkAlignment" id="alignment37"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="stock">gtk-remove</property> + <property name="yalign">0</property> + <property name="yscale">0</property> + <child> + <object class="GtkButton" id="audio_remove"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Remove the selected audio settings</property> + <property name="relief">GTK_RELIEF_NONE</property> + <signal handler="audio_remove_clicked_cb" name="clicked"/> + <child> + <object class="GtkImage" id="image8"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="stock">gtk-remove</property> + </object> + </child> + </object> + </child> </object> + <packing> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> </child> </object> + <packing> + <property name="expand">False</property> + </packing> </child> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="labela6"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="label" translatable="yes"></property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">3</property> - <property name="right_attach">3</property> - <property name="x_options">GTK_EXPAND</property> - <property name="y_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkExpander" id="AdvancedAudioExpander"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="expanded">False</property> - <property name="label">Advanced</property> <child> - <object class="GtkVBox" id="vbox44"> + <object class="GtkExpander" id="AdvancedAudioExpander"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">5</property> + <property name="expanded">False</property> + <property name="label">Advanced</property> <child> - <object class="GtkTable" id="AdvancedAudioPassTable"> - <property name="visible">False</property> + <object class="GtkVBox" id="vbox44"> + <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="n_rows">2</property> - <property name="n_columns">8</property> - <property name="row_spacing">5</property> - <property name="column_spacing">5</property> + <property name="spacing">5</property> <child> - <object class="GtkHBox" id="hbox40"> - <property name="visible">True</property> + <object class="GtkTable" id="AdvancedAudioPassTable"> + <property name="visible">False</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">5</property> + <property name="n_rows">2</property> + <property name="n_columns">8</property> + <property name="row_spacing">5</property> + <property name="column_spacing">5</property> <child> - <object class="GtkLabel" id="labela3"> + <object class="GtkHBox" id="hbox40"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">Auto Passthru:</property> + <property name="spacing">5</property> + <child> + <object class="GtkLabel" id="labela3"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Auto Passthru:</property> + </object> + <packing> + <property name="position">0</property> + <property name="expand">False</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="AudioAllowMP3Pass"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Enable this if your playback device supports AAC. This permits AAC passthru to be selected when automatic passthru selection is enabled.</property> + <property name="label" translatable="yes">MP3</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal handler="global_audio_widget_changed_cb" name="toggled"/> + </object> + <packing> + <property name="position">1</property> + <property name="expand">False</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="AudioAllowAACPass"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Enable this if your playback device supports AAC. This permits AAC passthru to be selected when automatic passthru selection is enabled.</property> + <property name="label" translatable="yes">AAC</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal handler="global_audio_widget_changed_cb" name="toggled"/> + </object> + <packing> + <property name="position">2</property> + <property name="expand">False</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="AudioAllowAC3Pass"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Enable this if your playback device supports AC-3. This permits AC-3 passthru to be selected when automatic passthru selection is enabled.</property> + <property name="label" translatable="yes">AC-3</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal handler="global_audio_widget_changed_cb" name="toggled"/> + </object> + <packing> + <property name="position">3</property> + <property name="expand">False</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="AudioAllowDTSPass"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Enable this if your playback device supports DTS. This permits DTS passthru to be selected when automatic passthru selection is enabled.</property> + <property name="label" translatable="yes">DTS</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal handler="global_audio_widget_changed_cb" name="toggled"/> + </object> + <packing> + <property name="position">4</property> + <property name="expand">False</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="AudioAllowDTSHDPass"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Enable this if your playback device supports DTS-HD. This permits DTS-HD passthru to be selected when automatic passthru selection is enabled.</property> + <property name="label" translatable="yes">DTS-HD</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal handler="global_audio_widget_changed_cb" name="toggled"/> + </object> + <packing> + <property name="position">5</property> + <property name="expand">False</property> + </packing> + </child> </object> <packing> - <property name="position">0</property> - <property name="expand">False</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">0</property> + <property name="right_attach">4</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> <child> - <object class="GtkCheckButton" id="AudioAllowMP3Pass"> + <object class="GtkLabel" id="labela4"> <property name="visible">True</property> - <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Enable this if your playback device supports AAC. This permits AAC passthru to be selected when automatic passthru selection is enabled.</property> - <property name="label" translatable="yes">MP3</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - <signal handler="global_audio_widget_changed_cb" name="toggled"/> + <property name="xalign">1</property> + <property name="label" translatable="yes">Passthru Fallback:</property> </object> <packing> - <property name="position">1</property> - <property name="expand">False</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">4</property> + <property name="right_attach">7</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> <child> - <object class="GtkCheckButton" id="AudioAllowAACPass"> + <object class="GtkComboBox" id="AudioEncoderFallback"> <property name="visible">True</property> - <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Enable this if your playback device supports AAC. This permits AAC passthru to be selected when automatic passthru selection is enabled.</property> - <property name="label" translatable="yes">AAC</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - <signal handler="global_audio_widget_changed_cb" name="toggled"/> + <property name="tooltip-text" translatable="yes">Set the audio codec to encode with when a suitable track can not be found for audio passthru.</property> + <signal handler="global_audio_widget_changed_cb" name="changed"/> </object> <packing> - <property name="position">2</property> - <property name="expand">False</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">7</property> + <property name="right_attach">8</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> <child> - <object class="GtkCheckButton" id="AudioAllowAC3Pass"> + <object class="GtkHSeparator" id="separator1"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Enable this if your playback device supports AC-3. This permits AC-3 passthru to be selected when automatic passthru selection is enabled.</property> - <property name="label" translatable="yes">AC-3</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - <signal handler="global_audio_widget_changed_cb" name="toggled"/> + <property name="orientation">horizontal</property> </object> <packing> - <property name="position">3</property> - <property name="expand">False</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">0</property> + <property name="right_attach">8</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> + </object> + <packing> + <property name="position">0</property> + <property name="expand">False</property> + </packing> + </child> + <child> + <object class="GtkTable" id="table14"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="n_rows">2</property> + <property name="n_columns">8</property> + <property name="row_spacing">5</property> + <property name="column_spacing">5</property> <child> - <object class="GtkCheckButton" id="AudioAllowDTSPass"> + <object class="GtkAlignment" id="alignment59"> <property name="visible">True</property> - <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Enable this if your playback device supports DTS. This permits DTS passthru to be selected when automatic passthru selection is enabled.</property> - <property name="label" translatable="yes">DTS</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - <signal handler="global_audio_widget_changed_cb" name="toggled"/> + <property name="xalign">0</property> + <property name="top_padding">8</property> + <child> + <object class="GtkLabel" id="audio_name_label"> + <property name="visible">True</property> + <property name="xalign">0.5</property> + <property name="label" translatable="yes">Track Name:</property> + <property name="use_markup">True</property> + </object> + </child> </object> <packing> - <property name="position">4</property> - <property name="expand">False</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> <child> - <object class="GtkCheckButton" id="AudioAllowDTSHDPass"> + <object class="GtkAlignment" id="alignment25"> <property name="visible">True</property> - <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Enable this if your playback device supports DTS-HD. This permits DTS-HD passthru to be selected when automatic passthru selection is enabled.</property> - <property name="label" translatable="yes">DTS-HD</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - <signal handler="global_audio_widget_changed_cb" name="toggled"/> + <property name="xalign">0</property> + <child> + <object class="GtkEntry" id="AudioTrackName"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="max_length">40</property> + <property name="activates_default">True</property> + <property name="width_chars">20</property> + <property name="truncate_multiline">True</property> + <property name="tooltip-text" translatable="yes">Set the audio track name. Players may use this in the audio selection list.</property> + <signal handler="audio_widget_changed_cb" name="changed"/> + </object> + </child> </object> <packing> - <property name="position">5</property> - <property name="expand">False</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">0</property> - <property name="right_attach">4</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="labela4"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">Passthru Fallback:</property> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">4</property> - <property name="right_attach">7</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="AudioEncoderFallback"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Set the audio codec to encode with when a suitable track can not be found for audio passthru.</property> - <signal handler="global_audio_widget_changed_cb" name="changed"/> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">7</property> - <property name="right_attach">8</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkHSeparator" id="separator1"> - <property name="visible">True</property> - <property name="orientation">horizontal</property> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">0</property> - <property name="right_attach">8</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - </object> - <packing> - <property name="position">0</property> - <property name="expand">False</property> - </packing> - </child> - <child> - <object class="GtkTable" id="table14"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="n_rows">2</property> - <property name="n_columns">8</property> - <property name="row_spacing">5</property> - <property name="column_spacing">5</property> - <child> - <object class="GtkAlignment" id="alignment59"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="top_padding">8</property> <child> - <object class="GtkLabel" id="audio_name_label"> + <object class="GtkLabel" id="AudioSamplerateLabel"> <property name="visible">True</property> <property name="xalign">0.5</property> - <property name="label" translatable="yes">Track Name:</property> + <property name="label" translatable="yes">Sample Rate:</property> <property name="use_markup">True</property> </object> + <packing> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> </child> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="alignment25"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> <child> - <object class="GtkEntry" id="AudioTrackName"> + <object class="GtkAlignment" id="alignment34"> <property name="visible">True</property> - <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="max_length">40</property> - <property name="activates_default">True</property> - <property name="width_chars">20</property> - <property name="truncate_multiline">True</property> - <property name="tooltip-text" translatable="yes">Set the audio track name. Players may use this in the audio selection list.</property> - <signal handler="audio_widget_changed_cb" name="changed"/> + <property name="xalign">0.5</property> + <property name="xscale">0</property> + <child> + <object class="GtkComboBox" id="AudioSamplerate"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Set the sample rate of the output audio track.</property> + <signal handler="audio_widget_changed_cb" name="changed"/> + </object> + </child> </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> </child> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="AudioSamplerateLabel"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="label" translatable="yes">Sample Rate:</property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="alignment34"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0.5</property> - <property name="xscale">0</property> <child> - <object class="GtkComboBox" id="AudioSamplerate"> + <object class="GtkLabel" id="AudioTrackGainLabel"> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Set the sample rate of the output audio track.</property> - <signal handler="audio_widget_changed_cb" name="changed"/> + <property name="xalign">0.5</property> + <property name="label" translatable="yes">Gain:</property> + <property name="use_markup">True</property> </object> + <packing> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> </child> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="AudioTrackGainLabel"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="label" translatable="yes">Gain:</property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkHBox" id="hbox34"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">0</property> <child> - <object class="GtkScaleButton" id="AudioTrackGain"> + <object class="GtkHBox" id="hbox34"> <property name="visible">True</property> - <property name="orientation">vertical</property> - <property name="icons">audio-volume-muted -audio-volume-high -audio-volume-low -audio-volume-medium</property> - <property name="adjustment">adjustment35</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-markup" translatable="yes"><b>Audio Gain:</b> Adjust the amplification or attenuation of the output audio track.</property> - <signal handler="gain_widget_changed_cb" name="value_changed"/> + <property name="spacing">0</property> + <child> + <object class="GtkScaleButton" id="AudioTrackGain"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="icons">audio-volume-muted + audio-volume-high + audio-volume-low + audio-volume-medium</property> + <property name="adjustment">adjustment35</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-markup" translatable="yes"><b>Audio Gain:</b> Adjust the amplification or attenuation of the output audio track.</property> + <signal handler="gain_widget_changed_cb" name="value_changed"/> + </object> + <packing> + <property name="position">0</property> + <property name="expand">False</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="AudioTrackGainValue"> + <property name="visible">True</property> + <property name="width_chars">6</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">0dB</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="position">1</property> + <property name="expand">False</property> + </packing> + </child> </object> <packing> - <property name="position">0</property> - <property name="expand">False</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> <child> - <object class="GtkLabel" id="AudioTrackGainValue"> + <object class="GtkLabel" id="AudioTrackDRCSliderLabel"> <property name="visible">True</property> - <property name="width_chars">6</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">0dB</property> + <property name="xalign">0.5</property> + <property name="label" translatable="yes">DRC:</property> + <property name="tooltip-markup" translatable="yes"><b>Dynamic Range Compression:</b> Adjust the dynamic range of the output audio track. + + For source audio that has a wide dynamic range (very loud and very soft sequences), DRC allows you to 'compress' the range by making loud sections softer and soft sections louder.</property> <property name="use_markup">True</property> </object> <packing> - <property name="position">1</property> - <property name="expand">False</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="AudioTrackDRCSliderLabel"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="label" translatable="yes">DRC:</property> - <property name="tooltip-markup" translatable="yes"><b>Dynamic Range Compression:</b> Adjust the dynamic range of the output audio track. - - For source audio that has a wide dynamic range (very loud and very soft sequences), DRC allows you to 'compress' the range by making loud sections softer and soft sections louder.</property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">3</property> - <property name="right_attach">4</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkHBox" id="hbox33"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">0</property> <child> - <object class="GtkScaleButton" id="AudioTrackDRCSlider"> + <object class="GtkHBox" id="hbox33"> <property name="visible">True</property> - <property name="orientation">vertical</property> - <property name="icons">audio-input-microphone</property> - <property name="adjustment">adjustment28</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-markup" translatable="yes"><b>Dynamic Range Compression:</b> Adjust the dynamic range of the output audio track. + <property name="spacing">0</property> + <child> + <object class="GtkScaleButton" id="AudioTrackDRCSlider"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="icons">audio-input-microphone</property> + <property name="adjustment">adjustment28</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-markup" translatable="yes"><b>Dynamic Range Compression:</b> Adjust the dynamic range of the output audio track. - For source audio that has a wide dynamic range (very loud and very soft sequences), DRC allows you to 'compress' the range by making loud sections softer and soft sections louder.</property> - <signal handler="drc_widget_changed_cb" name="value_changed"/> + For source audio that has a wide dynamic range (very loud and very soft sequences), DRC allows you to 'compress' the range by making loud sections softer and soft sections louder.</property> + <signal handler="drc_widget_changed_cb" name="value_changed"/> + </object> + <packing> + <property name="position">0</property> + <property name="expand">False</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="AudioTrackDRCValue"> + <property name="visible">True</property> + <property name="width_chars">4</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Off</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="position">1</property> + <property name="expand">False</property> + </packing> + </child> </object> <packing> - <property name="position">0</property> - <property name="expand">False</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> <child> - <object class="GtkLabel" id="AudioTrackDRCValue"> + <object class="GtkCheckButton" id="AudioTrackQualityEnable"> <property name="visible">True</property> - <property name="width_chars">4</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Off</property> - <property name="use_markup">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Quality:</property> + <property name="tooltip-markup" translatable="yes"><b>Quality:</b> For output codec's that support it, adjust the quality of the output.</property> + <property name="active">False</property> + <property name="draw_indicator">True</property> + <signal handler="audio_widget_changed_cb" name="toggled"/> </object> <packing> - <property name="position">1</property> - <property name="expand">False</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">4</property> + <property name="right_attach">5</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">3</property> - <property name="right_attach">4</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="AudioTrackQualityEnable"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Quality:</property> - <property name="tooltip-markup" translatable="yes"><b>Quality:</b> For output codec's that support it, adjust the quality of the output.</property> - <property name="active">False</property> - <property name="draw_indicator">True</property> - <signal handler="audio_widget_changed_cb" name="toggled"/> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">4</property> - <property name="right_attach">5</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkHBox" id="hbox32"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">0</property> <child> - <object class="GtkScaleButton" id="AudioTrackQuality"> + <object class="GtkHBox" id="hbox32"> <property name="visible">True</property> - <property name="orientation">vertical</property> - <property name="icons">weather-storm -weather-clear -weather-storm -weather-showers-scattered -weather-showers -weather-overcast -weather-few-clouds -weather-clear</property> - <property name="adjustment">audio_quality_adj</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-markup" translatable="yes"><b>Quality:</b> For output codec's that support it, adjust the quality of the output.</property> - <signal handler="quality_widget_changed_cb" name="value_changed"/> + <property name="spacing">0</property> + <child> + <object class="GtkScaleButton" id="AudioTrackQuality"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="icons">weather-storm + weather-clear + weather-storm + weather-showers-scattered + weather-showers + weather-overcast + weather-few-clouds + weather-clear</property> + <property name="adjustment">audio_quality_adj</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-markup" translatable="yes"><b>Quality:</b> For output codec's that support it, adjust the quality of the output.</property> + <signal handler="quality_widget_changed_cb" name="value_changed"/> + </object> + <packing> + <property name="position">0</property> + <property name="expand">False</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="AudioTrackQualityValue"> + <property name="visible">True</property> + <property name="width_chars">4</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">00.0</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="position">1</property> + <property name="expand">False</property> + </packing> + </child> </object> <packing> - <property name="position">0</property> - <property name="expand">False</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">4</property> + <property name="right_attach">5</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> <child> - <object class="GtkLabel" id="AudioTrackQualityValue"> + <object class="GtkLabel" id="filler_label0"> <property name="visible">True</property> - <property name="width_chars">4</property> + <property name="label" translatable="yes"></property> <property name="xalign">0</property> - <property name="label" translatable="yes">00.0</property> <property name="use_markup">True</property> </object> <packing> - <property name="position">1</property> - <property name="expand">False</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">5</property> + <property name="right_attach">8</property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="filler_label1"> + <property name="visible">True</property> + <property name="label" translatable="yes"></property> + <property name="xalign">0</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">5</property> + <property name="right_attach">8</property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> + <property name="y_options"></property> </packing> </child> </object> <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">4</property> - <property name="right_attach">5</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="filler_label0"> - <property name="visible">True</property> - <property name="label" translatable="yes"></property> - <property name="xalign">0</property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">5</property> - <property name="right_attach">8</property> - <property name="x_options">GTK_FILL|GTK_EXPAND</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="filler_label1"> - <property name="visible">True</property> - <property name="label" translatable="yes"></property> - <property name="xalign">0</property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">5</property> - <property name="right_attach">8</property> - <property name="x_options">GTK_FILL|GTK_EXPAND</property> + <property name="position">1</property> + <property name="expand">False</property> </packing> </child> </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkTable" id="table1"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="n_rows">2</property> + <property name="n_columns">4</property> + <child> + <object class="GtkLabel" id="label35"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Track</property> + </object> <packing> - <property name="position">1</property> - <property name="expand">False</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label68"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Encoder</property> + </object> + <packing> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="x_padding">12</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="AudioBitrateLabel"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Bitrate</property> + <property name="justify">GTK_JUSTIFY_CENTER</property> + </object> + <packing> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="x_padding">10</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="AudioMixdownLabel"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Mix</property> + </object> + <packing> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="AudioTrack"> + <property name="width_request">180</property> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">List of audio tracks available from your source.</property> + <signal handler="audio_track_changed_cb" name="changed"/> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="AudioEncoder"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Set the audio codec to encode this track with.</property> + <signal handler="audio_codec_changed_cb" name="changed"/> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="AudioBitrate"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Set the bitrate to encode this track with.</property> + <signal handler="audio_widget_changed_cb" name="changed"/> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="AudioMixdown"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Set the mixdown of the output audio track.</property> + <signal handler="audio_mix_changed_cb" name="changed"/> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> </object> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> </child> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">0</property> - <property name="right_attach">3</property> - <property name="x_options">GTK_FILL|GTK_EXPAND</property> - <property name="y_options"></property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - </packing> - </child> - <child> - <object class="GtkTable" id="table1"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="n_rows">2</property> - <property name="n_columns">4</property> - <child> - <object class="GtkLabel" id="label35"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Track</property> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label68"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Encoder</property> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="x_padding">12</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="AudioBitrateLabel"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Bitrate</property> - <property name="justify">GTK_JUSTIFY_CENTER</property> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="x_options">GTK_FILL</property> - <property name="x_padding">10</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="AudioMixdownLabel"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Mix</property> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">3</property> - <property name="right_attach">4</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="AudioTrack"> - <property name="width_request">180</property> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">List of audio tracks available from your source.</property> - <signal handler="audio_track_changed_cb" name="changed"/> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="AudioEncoder"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Set the audio codec to encode this track with.</property> - <signal handler="audio_codec_changed_cb" name="changed"/> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="AudioBitrate"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Set the bitrate to encode this track with.</property> - <signal handler="audio_widget_changed_cb" name="changed"/> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="AudioMixdown"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Set the mixdown of the output audio track.</property> - <signal handler="audio_mix_changed_cb" name="changed"/> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">3</property> - <property name="right_attach">4</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow5"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <child> - <object class="GtkTreeView" id="audio_list"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="headers_clickable">True</property> - </object> - </child> - </object> - <packing> - <property name="position">3</property> - </packing> - </child> - </object> - </child> - </object> - </child> - </object> - </child> - <child type="tab"> - <object class="GtkLabel" id="label48"> - <property name="visible">True</property> - <property name="label" translatable="yes">Audio</property> - </object> - <packing> - <property name="position">2</property> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="subtitle_tab"> - <property name="orientation">vertical</property> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <child> - <object class="GtkAlignment" id="alignment23"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="top_padding">12</property> - <property name="bottom_padding">2</property> - <property name="left_padding">12</property> - <property name="right_padding">2</property> - <child> - <object class="GtkVBox" id="vbox12"> - <property name="orientation">vertical</property> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">2</property> - <child> - <object class="GtkHBox" id="hbox45"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">5</property> - <child> - <object class="GtkButton" id="subtitle_add"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Add new subtitle to the list</property> - <property name="relief">GTK_RELIEF_NONE</property> - <property name="label">Subtitle</property> - <property name="image">subtitle_add_image</property> - <signal handler="subtitle_add_clicked_cb" name="clicked"/> - </object> - <packing> - <property name="expand">False</property> - </packing> - </child> - <child> - <object class="GtkButton" id="srt_add"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Add new SRT subtitle to the list</property> - <property name="relief">GTK_RELIEF_NONE</property> - <property name="label">Import SRT</property> - <property name="image">srt_add_image</property> - <signal handler="srt_add_clicked_cb" name="clicked"/> - </object> - <packing> - <property name="expand">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkButton" id="subtitle_remove"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Remove the selected subtitle settings</property> - <property name="relief">GTK_RELIEF_NONE</property> - <signal handler="subtitle_remove_clicked_cb" name="clicked"/> <child> - <object class="GtkImage" id="image2"> + <object class="GtkScrolledWindow" id="scrolledwindow5"> <property name="visible">True</property> + <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="stock">gtk-remove</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <child> + <object class="GtkTreeView" id="audio_list"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="headers_clickable">True</property> + </object> + </child> </object> + <packing> + <property name="expand">True</property> + <property name="position">3</property> + </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - </packing> - </child> - <child> - <object class="GtkTable" id="subtitle_table"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="n_rows">2</property> - <property name="n_columns">5</property> - <property name="column-spacing">4</property> - <child> - <object class="GtkLabel" id="subtitle_track_label"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Track</property> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="srt_lang_label"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Language</property> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="srt_code_label"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Character Code</property> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="srt_file_label"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">File</property> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="left_attach">3</property> - <property name="right_attach">4</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="srt_offset_label"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Offset (ms)</property> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="left_attach">4</property> - <property name="right_attach">5</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="SubtitleTrack"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">List of subtitle tracks available from your source.</property> - <signal handler="subtitle_track_changed_cb" name="changed"/> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="SrtLanguage"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Set the language of this subtitle. This value will be used by players in subtitle menus.</property> - <signal handler="srt_lang_changed_cb" name="changed"/> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - </packing> - </child> - <child> - <object class="GtkComboBoxEntry" id="SrtCodeset"> - <property name="width_request">150</property> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Set the character code used by the SRT file you are importing. SRTs come in all flavours of character sets. We translate the character set to UTF-8. The source's character code is needed in order to perform this translation.</property> - <signal handler="srt_changed_cb" name="changed"/> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - </packing> - </child> - <child> - <object class="GtkFileChooserButton" id="SrtFile"> - <property name="visible">True</property> - <property name="local-only">False</property> - <property name="action">GTK_FILE_CHOOSER_ACTION_OPEN</property> - <property name="title" translatable="yes">Srt File</property> - <property name="tooltip-text" translatable="yes">Select the SRT file to import.</property> - <signal name="selection_changed" handler="srt_file_changed_cb"/> - </object> - <packing> - <property name="x_options">GTK_FILL|GTK_EXPAND</property> - <property name="y_options"></property> - <property name="left_attach">3</property> - <property name="right_attach">4</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - </packing> - </child> - <child> - <object class="GtkSpinButton" id="SrtOffset"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Adjust the offset in milliseconds between video and SRT timestamps</property> - <property name="adjustment">adjustment31</property> - <signal handler="srt_changed_cb" name="value_changed"/> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - <property name="left_attach">4</property> - <property name="right_attach">5</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow4"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <child> - <object class="GtkTreeView" id="subtitle_list"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="headers_clickable">True</property> - </object> </child> </object> - <packing> - <property name="position">2</property> - </packing> </child> </object> </child> - </object> - </child> - </object> - </child> - <child type="tab"> - <object class="GtkLabel" id="label9"> - <property name="visible">True</property> - <property name="label" translatable="yes">Subtitles</property> - </object> - <packing> - <property name="position">3</property> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <object class="GtkHBox" id="advanced_tab"> - <property name="orientation">vertical</property> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <child> - - <object class="GtkVBox" id="x264_tab"> - <property name="orientation">vertical</property> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <child> - <object class="GtkHBox" id="hbox73"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">2</property> + <child type="tab"> + <object class="GtkLabel" id="label48"> + <property name="visible">True</property> + <property name="label" translatable="yes">Audio</property> + </object> + <packing> + <property name="position">2</property> + <property name="tab_fill">False</property> + </packing> + </child> <child> - <object class="GtkVBox" id="vbox21"> + <object class="GtkVBox" id="subtitle_tab"> <property name="orientation">vertical</property> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <child> - <object class="GtkFrame" id="frame10"> + <object class="GtkAlignment" id="alignment23"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> + <property name="top_padding">12</property> + <property name="bottom_padding">2</property> + <property name="left_padding">12</property> + <property name="right_padding">2</property> <child> - <object class="GtkAlignment" id="alignment26"> + <object class="GtkVBox" id="vbox12"> + <property name="orientation">vertical</property> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="top_padding">6</property> - <property name="bottom_padding">2</property> - <property name="left_padding">12</property> - <property name="right_padding">2</property> + <property name="spacing">2</property> <child> - <object class="GtkTable" id="table6"> + <object class="GtkHBox" id="hbox45"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="n_rows">4</property> - <property name="n_columns">2</property> - <property name="column-spacing">4</property> - <property name="row-spacing">2</property> + <property name="spacing">5</property> <child> - <object class="GtkLabel" id="label49"> + <object class="GtkButton" id="subtitle_add"> <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><small>Reference Frames:</small></property> - <property name="use_markup">True</property> + <property name="tooltip-text" translatable="yes">Add new subtitle to the list</property> + <property name="relief">GTK_RELIEF_NONE</property> + <property name="label">Subtitle</property> + <property name="image">subtitle_add_image</property> + <signal handler="subtitle_add_clicked_cb" name="clicked"/> </object> <packing> - <property name="x_options">GTK_FILL</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> + <property name="expand">False</property> </packing> </child> <child> - <object class="GtkAlignment" id="alignment41"> + <object class="GtkButton" id="srt_add"> <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> + <property name="tooltip-text" translatable="yes">Add new SRT subtitle to the list</property> + <property name="relief">GTK_RELIEF_NONE</property> + <property name="label">Import SRT</property> + <property name="image">srt_add_image</property> + <signal handler="srt_add_clicked_cb" name="clicked"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="subtitle_remove"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Remove the selected subtitle settings</property> + <property name="relief">GTK_RELIEF_NONE</property> + <signal handler="subtitle_remove_clicked_cb" name="clicked"/> <child> - <object class="GtkSpinButton" id="x264_refs"> + <object class="GtkImage" id="image2"> <property name="visible">True</property> - <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Sane values are ~1-6. The more you add, the better the compression, but the slower the encode. Cel animation tends to benefit from more reference frames a lot more than film content. Note that many hardware devices have limitations on the number of supported reference frames, so if you're encoding for a handheld or standalone player, don't touch this unless you're absolutely sure you know what you're doing!</property> - <property name="adjustment">adjustment8</property> - <signal handler="x264_widget_changed_cb" name="value_changed"/> + <property name="stock">gtk-remove</property> </object> - <packing> - </packing> </child> </object> <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> + <property name="expand">False</property> + <property name="position">2</property> </packing> </child> + </object> + <packing> + <property name="expand">False</property> + </packing> + </child> + <child> + <object class="GtkTable" id="subtitle_table"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="n_rows">2</property> + <property name="n_columns">5</property> + <property name="column-spacing">4</property> <child> - <object class="GtkLabel" id="label51"> + <object class="GtkLabel" id="subtitle_track_label"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><small>Maximum B-Frames:</small></property> - <property name="use_markup">True</property> + <property name="label" translatable="yes">Track</property> </object> <packing> <property name="x_options">GTK_FILL</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="y_options">GTK_FILL</property> <property name="left_attach">0</property> <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> </packing> </child> <child> - <object class="GtkAlignment" id="alignment38"> + <object class="GtkLabel" id="srt_lang_label"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <child> - <object class="GtkSpinButton" id="x264_bframes"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Sane values are ~2-5. This specifies the maximum number of sequential B-frames that the encoder can use. Large numbers generally won't help significantly unless Adaptive B-frames is set to Optimal. Cel-animated source material and B-pyramid also significantly increase the usefulness of larger values. Baseline profile, as required for iPods and similar devices, requires B-frames to be set to 0 (off).</property> - <property name="adjustment">adjustment9</property> - <signal handler="x264_widget_changed_cb" name="value_changed"/> - </object> - </child> + <property name="label" translatable="yes">Language</property> </object> <packing> <property name="x_options">GTK_FILL</property> <property name="y_options">GTK_FILL</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> <property name="left_attach">1</property> <property name="right_attach">2</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> </packing> </child> <child> - <object class="GtkLabel" id="label50"> + <object class="GtkLabel" id="srt_code_label"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><small>Pyramidal B-Frames:</small></property> - <property name="use_markup">True</property> + <property name="label" translatable="yes">Character Code</property> </object> <packing> <property name="x_options">GTK_FILL</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> + <property name="y_options">GTK_FILL</property> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> </packing> </child> <child> - <object class="GtkComboBox" id="x264_bpyramid"> + <object class="GtkLabel" id="srt_file_label"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">B-pyramid improves compression by creating a pyramidal structure (hence the name) of B-frames, allowing B-frames to reference each other to improve compression. Requires Max B-frames greater than 1; optimal adaptive B-frames is strongly recommended for full compression benefit.</property> - <signal handler="x264_widget_changed_cb" name="changed"/> + <property name="label" translatable="yes">File</property> </object> <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> </packing> </child> <child> - <object class="GtkLabel" id="label40"> + <object class="GtkLabel" id="srt_offset_label"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><small>Weighted P-Frames:</small></property> - <property name="use_markup">True</property> + <property name="label" translatable="yes">Offset (ms)</property> </object> <packing> <property name="x_options">GTK_FILL</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> + <property name="y_options">GTK_FILL</property> + <property name="left_attach">4</property> + <property name="right_attach">5</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="SubtitleTrack"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">List of subtitle tracks available from your source.</property> + <signal handler="subtitle_track_changed_cb" name="changed"/> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> <property name="left_attach">0</property> <property name="right_attach">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> </packing> </child> <child> - <object class="GtkComboBox" id="x264_weighted_pframes"> + <object class="GtkComboBox" id="SrtLanguage"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Performs extra analysis to decide upon weighting parameters for each frame. This improves overall compression slightly and improves the quality of fades greatly. Baseline profile, as required for iPods and similar devices, requires weighted P-frame prediction to be disabled. Note that some devices and players, even those that support Main Profile, may have problems with Weighted P-frame prediction: the Apple TV is completely incompatible with it, for example.</property> - <signal handler="x264_widget_changed_cb" name="changed"/> + <property name="tooltip-text" translatable="yes">Set the language of this subtitle. This value will be used by players in subtitle menus.</property> + <signal handler="srt_lang_changed_cb" name="changed"/> </object> <packing> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> <property name="left_attach">1</property> <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> </packing> </child> <child> - <object class="GtkCheckButton" id="x264_8x8dct"> + <object class="GtkComboBox" id="SrtCodeset"> + <property name="width_request">150</property> + <property name="has_entry">True</property> <property name="visible">True</property> - <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">The 8x8 transform is the single most useful feature of x264 in terms of compression-per-speed. It improves compression by at least 5% at a very small speed cost and may provide an unusually high visual quality benefit compared to its compression gain. However, it requires High Profile, which many devices may not support.</property> - <property name="label" translatable="yes">8x8 Transform</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - <signal handler="x264_widget_changed_cb" name="toggled"/> + <property name="tooltip-text" translatable="yes">Set the character code used by the SRT file you are importing. SRTs come in all flavours of character sets. We translate the character set to UTF-8. The source's character code is needed in order to perform this translation.</property> + <signal handler="srt_changed_cb" name="changed"/> </object> <packing> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="left_attach">0</property> - <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkFileChooserButton" id="SrtFile"> + <property name="visible">True</property> + <property name="local-only">False</property> + <property name="action">GTK_FILE_CHOOSER_ACTION_OPEN</property> + <property name="title" translatable="yes">Srt File</property> + <property name="tooltip-text" translatable="yes">Select the SRT file to import.</property> + <signal name="selection_changed" handler="srt_file_changed_cb"/> + </object> + <packing> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> + <property name="y_options"></property> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> </packing> </child> <child> - <object class="GtkCheckButton" id="x264_cabac"> + <object class="GtkSpinButton" id="SrtOffset"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">After the encoder has done its work, it has a bunch of data that needs to be compressed losslessly, similar to ZIP or RAR. H.264 provides two options for this: CAVLC and CABAC. CABAC decodes a lot slower but compresses significantly better (10-30%), especially at lower bitrates. If you're looking to minimize CPU requirements for video playback, disable this option. Baseline profile, as required for iPods and similar devices, requires CABAC to be disabled.</property> - <property name="label" translatable="yes">CABAC Entropy Encoding</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - <signal handler="x264_widget_changed_cb" name="toggled"/> + <property name="tooltip-text" translatable="yes">Adjust the offset in milliseconds between video and SRT timestamps</property> + <property name="adjustment">adjustment31</property> + <signal handler="srt_changed_cb" name="value_changed"/> </object> <packing> - <property name="top_attach">5</property> - <property name="bottom_attach">6</property> - <property name="left_attach">0</property> - <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + <property name="left_attach">4</property> + <property name="right_attach">5</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> </packing> </child> </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow4"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <child> + <object class="GtkTreeView" id="subtitle_list"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="headers_clickable">True</property> + </object> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="label53"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes"><small><b>Encoding Features</b></small></property> - <property name="use_markup">True</property> </object> </child> </object> - <packing> - <property name="expand">False</property> - <property name="position">1</property> - </packing> </child> </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="label9"> + <property name="visible">True</property> + <property name="label" translatable="yes">Subtitles</property> + </object> <packing> - <property name="expand">True</property> + <property name="position">3</property> + <property name="tab_fill">False</property> </packing> </child> <child> - <object class="GtkVBox" id="vbox25"> + <object class="GtkHBox" id="advanced_tab"> <property name="orientation">vertical</property> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <child> - <object class="GtkFrame" id="frame12"> + + <object class="GtkVBox" id="x264_tab"> + <property name="orientation">vertical</property> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <child> + <object class="GtkHBox" id="hbox73"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> + <property name="spacing">2</property> <child> - <object class="GtkHBox" id="hbox84"> + <object class="GtkVBox" id="vbox21"> + <property name="orientation">vertical</property> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <child> - <object class="GtkAlignment" id="alignment30"> + <object class="GtkFrame" id="frame10"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="top_padding">6</property> - <property name="bottom_padding">2</property> - <property name="left_padding">12</property> - <property name="right_padding">2</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> <child> - <object class="GtkTable" id="table5"> + <object class="GtkAlignment" id="alignment26"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="n_rows">4</property> - <property name="n_columns">2</property> - <property name="row-spacing">2</property> - <property name="column-spacing">4</property> + <property name="top_padding">6</property> + <property name="bottom_padding">2</property> + <property name="left_padding">12</property> + <property name="right_padding">2</property> <child> - <object class="GtkLabel" id="label55"> + <object class="GtkTable" id="table6"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><small>Motion Est. Method:</small></property> - <property name="use_markup">True</property> + <property name="n_rows">4</property> + <property name="n_columns">2</property> + <property name="column-spacing">4</property> + <property name="row-spacing">2</property> + <child> + <object class="GtkLabel" id="label49"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><small>Reference Frames:</small></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment41"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <child> + <object class="GtkSpinButton" id="x264_refs"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Sane values are ~1-6. The more you add, the better the compression, but the slower the encode. Cel animation tends to benefit from more reference frames a lot more than film content. Note that many hardware devices have limitations on the number of supported reference frames, so if you're encoding for a handheld or standalone player, don't touch this unless you're absolutely sure you know what you're doing!</property> + <property name="adjustment">adjustment8</property> + <signal handler="x264_widget_changed_cb" name="value_changed"/> + </object> + <packing> + </packing> + </child> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label51"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><small>Maximum B-Frames:</small></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="y_options"></property> + <property name="x_options">GTK_FILL</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment38"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <child> + <object class="GtkSpinButton" id="x264_bframes"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Sane values are ~2-5. This specifies the maximum number of sequential B-frames that the encoder can use. Large numbers generally won't help significantly unless Adaptive B-frames is set to Optimal. Cel-animated source material and B-pyramid also significantly increase the usefulness of larger values. Baseline profile, as required for iPods and similar devices, requires B-frames to be set to 0 (off).</property> + <property name="adjustment">adjustment9</property> + <signal handler="x264_widget_changed_cb" name="value_changed"/> + </object> + </child> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label50"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><small>Pyramidal B-Frames:</small></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="y_options"></property> + <property name="x_options">GTK_FILL</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="x264_bpyramid"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">B-pyramid improves compression by creating a pyramidal structure (hence the name) of B-frames, allowing B-frames to reference each other to improve compression. Requires Max B-frames greater than 1; optimal adaptive B-frames is strongly recommended for full compression benefit.</property> + <signal handler="x264_widget_changed_cb" name="changed"/> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label40"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><small>Weighted P-Frames:</small></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="y_options"></property> + <property name="x_options">GTK_FILL</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="x264_weighted_pframes"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Performs extra analysis to decide upon weighting parameters for each frame. This improves overall compression slightly and improves the quality of fades greatly. Baseline profile, as required for iPods and similar devices, requires weighted P-frame prediction to be disabled. Note that some devices and players, even those that support Main Profile, may have problems with Weighted P-frame prediction: the Apple TV is completely incompatible with it, for example.</property> + <signal handler="x264_widget_changed_cb" name="changed"/> + </object> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="x264_8x8dct"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">The 8x8 transform is the single most useful feature of x264 in terms of compression-per-speed. It improves compression by at least 5% at a very small speed cost and may provide an unusually high visual quality benefit compared to its compression gain. However, it requires High Profile, which many devices may not support.</property> + <property name="label" translatable="yes">8x8 Transform</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal handler="x264_widget_changed_cb" name="toggled"/> + </object> + <packing> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="left_attach">0</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="x264_cabac"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">After the encoder has done its work, it has a bunch of data that needs to be compressed losslessly, similar to ZIP or RAR. H.264 provides two options for this: CAVLC and CABAC. CABAC decodes a lot slower but compresses significantly better (10-30%), especially at lower bitrates. If you're looking to minimize CPU requirements for video playback, disable this option. Baseline profile, as required for iPods and similar devices, requires CABAC to be disabled.</property> + <property name="label" translatable="yes">CABAC Entropy Encoding</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal handler="x264_widget_changed_cb" name="toggled"/> + </object> + <packing> + <property name="top_attach">5</property> + <property name="bottom_attach">6</property> + <property name="left_attach">0</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - </packing> </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label53"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes"><small><b>Encoding Features</b></small></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox25"> + <property name="orientation">vertical</property> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <child> + <object class="GtkFrame" id="frame12"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkHBox" id="hbox84"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <child> - <object class="GtkComboBox" id="x264_me"> + <object class="GtkAlignment" id="alignment30"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Controls the motion estimation method. Motion estimation is how the encoder estimates how each block of pixels in a frame has moved. A better motion search method improves compression at the cost of speed. + <property name="top_padding">6</property> + <property name="bottom_padding">2</property> + <property name="left_padding">12</property> + <property name="right_padding">2</property> + <child> + <object class="GtkTable" id="table5"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="n_rows">4</property> + <property name="n_columns">2</property> + <property name="row-spacing">2</property> + <property name="column-spacing">4</property> + <child> + <object class="GtkLabel" id="label55"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><small>Motion Est. Method:</small></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="x264_me"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Controls the motion estimation method. Motion estimation is how the encoder estimates how each block of pixels in a frame has moved. A better motion search method improves compression at the cost of speed. -Diamond: performs an extremely fast and simple search using a diamond pattern. + Diamond: performs an extremely fast and simple search using a diamond pattern. -Hexagon: performs a somewhat more effective but slightly slower search using a hexagon pattern. + Hexagon: performs a somewhat more effective but slightly slower search using a hexagon pattern. -Uneven Multi-Hex: performs a very wide search using a variety of patterns, more accurately capturing complex motion. + Uneven Multi-Hex: performs a very wide search using a variety of patterns, more accurately capturing complex motion. -Exhaustive: performs a "dumb" search of every pixel in a wide area. Significantly slower for only a small compression gain. + Exhaustive: performs a "dumb" search of every pixel in a wide area. Significantly slower for only a small compression gain. -Transformed Exhaustive: Like exhaustive, but makes even more accurate decisions. Accordingly, somewhat slower, also for only a small improvement.</property> - <signal handler="x264_me_changed_cb" name="changed"/> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label58"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><small>Subpel ME &amp; Mode:</small></property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="x264_subme"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-markup" translatable="yes">This setting controls both subpixel-precision motion estimation and mode decision methods. + Transformed Exhaustive: Like exhaustive, but makes even more accurate decisions. Accordingly, somewhat slower, also for only a small improvement.</property> + <signal handler="x264_me_changed_cb" name="changed"/> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label58"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><small>Subpel ME &amp; Mode:</small></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="x264_subme"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-markup" translatable="yes">This setting controls both subpixel-precision motion estimation and mode decision methods. -Subpixel motion estimation is used for refining motion estimates beyond mere pixel accuracy, improving compression. + Subpixel motion estimation is used for refining motion estimates beyond mere pixel accuracy, improving compression. -Mode decision is the method used to choose how to encode each block of the frame: a very important decision. + Mode decision is the method used to choose how to encode each block of the frame: a very important decision. -SAD is the fastest method, followed by SATD, RD, RD refinement, and the slowest, QPRD. + SAD is the fastest method, followed by SATD, RD, RD refinement, and the slowest, QPRD. -6 or higher is strongly recommended: Psy-RD, a very powerful psy optimization that helps retain detail, requires RD. + 6 or higher is strongly recommended: Psy-RD, a very powerful psy optimization that helps retain detail, requires RD. -11 disables all early terminations in analysis. + 11 disables all early terminations in analysis. -10 and 11, the most powerful and slowest options, require adaptive quantization (aq-mode > 0) and trellis 2 (always).</property> - <signal handler="x264_widget_changed_cb" name="changed"/> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label57"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><small>Motion Est. Range:</small></property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - </packing> - </child> - <child> - <object class="GtkSpinButton" id="x264_merange"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">This is the distance x264 searches from its best guess at the motion of a block in order to try to find its actual motion. The default is fine for most content, but extremely high motion video, especially at HD resolutions, may benefit from higher ranges, albeit at a high speed cost.</property> - <property name="adjustment">adjustment10</property> - <signal handler="x264_widget_changed_cb" name="value_changed"/> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label52"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><small>Adaptive Direct Mode:</small></property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="alignment39"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <child> - <object class="GtkComboBox" id="x264_direct"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">H.264 allows for two different prediction modes, spatial and temporal, in B-frames. + 10 and 11, the most powerful and slowest options, require adaptive quantization (aq-mode > 0) and trellis 2 (always).</property> + <signal handler="x264_widget_changed_cb" name="changed"/> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label57"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><small>Motion Est. Range:</small></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="x264_merange"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">This is the distance x264 searches from its best guess at the motion of a block in order to try to find its actual motion. The default is fine for most content, but extremely high motion video, especially at HD resolutions, may benefit from higher ranges, albeit at a high speed cost.</property> + <property name="adjustment">adjustment10</property> + <signal handler="x264_widget_changed_cb" name="value_changed"/> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label52"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><small>Adaptive Direct Mode:</small></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment39"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <child> + <object class="GtkComboBox" id="x264_direct"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">H.264 allows for two different prediction modes, spatial and temporal, in B-frames. -Spatial, the default, is almost always better, but temporal is sometimes useful too. + Spatial, the default, is almost always better, but temporal is sometimes useful too. -x264 can, at the cost of a small amount of speed (and accordingly for a small compression gain), adaptively select which is better for each particular frame.</property> - <signal handler="x264_widget_changed_cb" name="changed"/> + x264 can, at the cost of a small amount of speed (and accordingly for a small compression gain), adaptively select which is better for each particular frame.</property> + <signal handler="x264_widget_changed_cb" name="changed"/> + </object> + </child> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label84"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><small>Adaptive B-Frames:</small></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment40"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <child> + <object class="GtkComboBox" id="x264_b_adapt"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-markup" translatable="yes">x264 has a variety of algorithms to decide when to use B-frames and how many to use. + + Fast mode takes roughly the same amount of time no matter how many B-frames you specify. However, while fast, its decisions are often suboptimal. + + Optimal mode gets slower as the maximum number of B-Frames increases, but makes much more accurate decisions, especially when used with B-pyramid.</property> + <signal handler="x264_widget_changed_cb" name="changed"/> + </object> + </child> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> </object> </child> </object> <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label84"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><small>Adaptive B-Frames:</small></property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="x_options">GTK_FILL</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkAlignment" id="alignment40"> + <object class="GtkAlignment" id="alignment31"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> + <property name="top_padding">6</property> + <property name="bottom_padding">2</property> + <property name="left_padding">12</property> + <property name="right_padding">2</property> <child> - <object class="GtkComboBox" id="x264_b_adapt"> + <object class="GtkTable" id="table3"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-markup" translatable="yes">x264 has a variety of algorithms to decide when to use B-frames and how many to use. - -Fast mode takes roughly the same amount of time no matter how many B-frames you specify. However, while fast, its decisions are often suboptimal. - -Optimal mode gets slower as the maximum number of B-Frames increases, but makes much more accurate decisions, especially when used with B-pyramid.</property> - <signal handler="x264_widget_changed_cb" name="changed"/> + <property name="n_rows">4</property> + <property name="n_columns">2</property> + <property name="row-spacing">2</property> + <property name="column-spacing">4</property> + <child> + <object class="GtkLabel" id="label59"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><small>Partitions:</small></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="x264_analyse"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Mode decision picks from a variety of options to make its decision: this option chooses what options those are. Fewer partitions to check means faster encoding, at the cost of worse decisions, since the best option might have been one that was turned off.</property> + <signal handler="x264_widget_changed_cb" name="changed"/> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label62"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><small>Trellis:</small></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="x264_trellis"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Trellis fine-tunes the rounding of transform coefficients to squeeze out 3-5% more compression at the cost of some speed. "Always" uses trellis not only during the main encoding process, but also during analysis, which improves compression even more, albeit at great speed cost. Trellis costs more speed at higher bitrates and requires CABAC.</property> + <signal handler="x264_widget_changed_cb" name="changed"/> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> </object> </child> </object> <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> + <property name="position">1</property> </packing> </child> </object> + <packing> + </packing> + </child> + <child type="label"> + <object class="GtkLabel" id="label60"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes"><small><b>Analysis</b></small></property> + <property name="use_markup">True</property> + </object> </child> </object> <packing> - <property name="position">0</property> + <property name="expand">False</property> + <property name="padding">2</property> </packing> </child> <child> - <object class="GtkAlignment" id="alignment31"> + <object class="GtkFrame" id="frame13"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="top_padding">6</property> - <property name="bottom_padding">2</property> - <property name="left_padding">12</property> - <property name="right_padding">2</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> <child> - <object class="GtkTable" id="table3"> + <object class="GtkAlignment" id="alignment35"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="n_rows">4</property> - <property name="n_columns">2</property> - <property name="row-spacing">2</property> - <property name="column-spacing">4</property> - <child> - <object class="GtkLabel" id="label59"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><small>Partitions:</small></property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - </packing> - </child> + <property name="top_padding">6</property> + <property name="bottom_padding">2</property> + <property name="left_padding">12</property> + <property name="right_padding">2</property> <child> - <object class="GtkComboBox" id="x264_analyse"> + <object class="GtkVBox" id="vbox27"> + <property name="orientation">vertical</property> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Mode decision picks from a variety of options to make its decision: this option chooses what options those are. Fewer partitions to check means faster encoding, at the cost of worse decisions, since the best option might have been one that was turned off.</property> - <signal handler="x264_widget_changed_cb" name="changed"/> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label62"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><small>Trellis:</small></property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="x264_trellis"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Trellis fine-tunes the rounding of transform coefficients to squeeze out 3-5% more compression at the cost of some speed. "Always" uses trellis not only during the main encoding process, but also during analysis, which improves compression even more, albeit at great speed cost. Trellis costs more speed at higher bitrates and requires CABAC.</property> - <signal handler="x264_widget_changed_cb" name="changed"/> + <child> + <object class="GtkTable" id="table9"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="n_rows">2</property> + <property name="n_columns">2</property> + <property name="visible">True</property> + <child> + <object class="GtkLabel" id="label73"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><small>Adaptive Quantization Strength:</small></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkHScale" id="x264_aq_strength"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Adaptive quantization controls how the encoder distributes bits across the frame. Higher values take more bits away from edges and complex areas to improve areas with finer detail.</property> + <property name="adjustment">adjustment34</property> + <property name="restrict_to_fill_level">False</property> + <property name="value_pos">GTK_POS_RIGHT</property> + <signal handler="x264_slider_changed_cb" name="value_changed"/> + <signal name="format_value" handler="x264_format_slider_cb"/> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label82"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><small>Psychovisual Rate Distortion:</small></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkHScale" id="x264_psy_rd"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Psychovisual rate-distortion optimization takes advantage of the characteristics of human vision to dramatically improve apparent detail and sharpness. The effect can be made weaker or stronger by adjusting the strength. Being an RD algorithm, it requires mode decision to be at least "6".</property> + <property name="adjustment">adjustment22</property> + <property name="restrict_to_fill_level">False</property> + <property name="value_pos">GTK_POS_RIGHT</property> + <signal handler="x264_slider_changed_cb" name="value_changed"/> + <signal name="format_value" handler="x264_format_slider_cb"/> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label83"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><small>Psychovisual Trellis:</small></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkHScale" id="x264_psy_trell"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Psychovisual trellis is an experimental algorithm to further improve sharpness and detail retention beyond what Psychovisual RD does. Recommended values are around 0.2, though higher values may help for very grainy video or lower bitrate encodes. Not recommended for cel animation and other sharp-edged graphics.</property> + <property name="adjustment">adjustment23</property> + <property name="digits">2</property> + <property name="restrict_to_fill_level">False</property> + <property name="value_pos">GTK_POS_RIGHT</property> + <signal handler="x264_slider_changed_cb" name="value_changed"/> + <signal name="format_value" handler="x264_format_slider_cb"/> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + </packing> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox39"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <child> + <object class="GtkLabel" id="label61"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Deblocking: </property> + </object> + <packing> + <property name="expand">False</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="x264_deblock_alpha"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-markup" translatable="yes">H.264 has a built-in deblocking filter that smooths out blocking artifacts after decoding each frame. This not only improves visual quality, but also helps compression significantly. The deblocking filter takes a lot of CPU power, so if you're looking to minimize CPU requirements for video playback, disable it. + + The deblocking filter has two adjustable parameters, "strength" (Alpha) and "threshold" (Beta). The former controls how strong (or weak) the deblocker is, while the latter controls how many (or few) edges it applies to. Lower values mean less deblocking, higher values mean more deblocking. The default is 0 (normal strength) for both parameters.</property> + <property name="adjustment">adjustment11</property> + <signal handler="x264_widget_changed_cb" name="value_changed"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="x264_deblock_beta"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-markup" translatable="yes">H.264 has a built-in deblocking filter that smooths out blocking artifacts after decoding each frame. This not only improves visual quality, but also helps compression significantly. The deblocking filter takes a lot of CPU power, so if you're looking to minimize CPU requirements for video playback, disable it. + + The deblocking filter has two adjustable parameters, "strength" (Alpha) and "threshold" (Beta). The former controls how strong (or weak) the deblocker is, while the latter controls how many (or few) edges it applies to. Lower values mean less deblocking, higher values mean more deblocking. The default is 0 (normal strength) for both parameters.</property> + <property name="adjustment">adjustment12</property> + <signal handler="x264_widget_changed_cb" name="value_changed"/> + </object> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="x264_no_dct_decimate"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">x264 normally zeroes out nearly-empty data blocks to save bits to be better used for some other purpose in the video. However, this can sometimes have slight negative effects on retention of subtle grain and dither. Don't touch this unless you're having banding issues or other such cases where you are having trouble keeping fine noise.</property> + <property name="label" translatable="yes">No DCT Decimate</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal handler="x264_widget_changed_cb" name="toggled"/> + </object> + <packing> + <property name="padding">20</property> + <property name="position">3</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - </packing> </child> </object> </child> + <child type="label"> + <object class="GtkLabel" id="label63"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes"><small><b>Psychovisual</b></small></property> + <property name="use_markup">True</property> + </object> + </child> </object> <packing> + <property name="expand">False</property> <property name="position">1</property> </packing> </child> </object> <packing> + <property name="expand">True</property> + <property name="position">2</property> </packing> </child> - <child type="label"> - <object class="GtkLabel" id="label60"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes"><small><b>Analysis</b></small></property> - <property name="use_markup">True</property> - </object> - </child> </object> <packing> <property name="expand">False</property> - <property name="padding">2</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox85"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="spacing">2</property> + </object> + <packing> + <property name="expand">True</property> + <property name="position">1</property> </packing> </child> <child> - <object class="GtkFrame" id="frame13"> + <object class="GtkFrame" id="frame11"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment35"> + <object class="GtkAlignment" id="alignment29"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="top_padding">6</property> @@ -4101,986 +4357,772 @@ Optimal mode gets slower as the maximum number of B-Frames increases, but makes <property name="left_padding">12</property> <property name="right_padding">2</property> <child> - <object class="GtkVBox" id="vbox27"> - <property name="orientation">vertical</property> + <object class="GtkScrolledWindow" id="scrolledwindow6"> + <property name="height_request">40</property> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="shadow_type">etched-in</property> <child> - <object class="GtkTable" id="table9"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="n_rows">2</property> - <property name="n_columns">2</property> + <object class="GtkTextView" id="x264Option"> <property name="visible">True</property> - <child> - <object class="GtkLabel" id="label73"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><small>Adaptive Quantization Strength:</small></property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkHScale" id="x264_aq_strength"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Adaptive quantization controls how the encoder distributes bits across the frame. Higher values take more bits away from edges and complex areas to improve areas with finer detail.</property> - <property name="adjustment">adjustment34</property> - <property name="restrict_to_fill_level">False</property> - <property name="value_pos">GTK_POS_RIGHT</property> - <signal handler="x264_slider_changed_cb" name="value_changed"/> - <signal name="format_value" handler="x264_format_slider_cb"/> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label82"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><small>Psychovisual Rate Distortion:</small></property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - </packing> - </child> - <child> - <object class="GtkHScale" id="x264_psy_rd"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Psychovisual rate-distortion optimization takes advantage of the characteristics of human vision to dramatically improve apparent detail and sharpness. The effect can be made weaker or stronger by adjusting the strength. Being an RD algorithm, it requires mode decision to be at least "6".</property> - <property name="adjustment">adjustment22</property> - <property name="restrict_to_fill_level">False</property> - <property name="value_pos">GTK_POS_RIGHT</property> - <signal handler="x264_slider_changed_cb" name="value_changed"/> - <signal name="format_value" handler="x264_format_slider_cb"/> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label83"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><small>Psychovisual Trellis:</small></property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkHScale" id="x264_psy_trell"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Psychovisual trellis is an experimental algorithm to further improve sharpness and detail retention beyond what Psychovisual RD does. Recommended values are around 0.2, though higher values may help for very grainy video or lower bitrate encodes. Not recommended for cel animation and other sharp-edged graphics.</property> - <property name="adjustment">adjustment23</property> - <property name="digits">2</property> - <property name="restrict_to_fill_level">False</property> - <property name="value_pos">GTK_POS_RIGHT</property> - <signal handler="x264_slider_changed_cb" name="value_changed"/> - <signal name="format_value" handler="x264_format_slider_cb"/> - </object> - <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - </packing> - </child> + <property name="can_focus">True</property> + <property name="tooltip-text" translatable="yes">Your selected options will appear here. + You can edit these and add additional options. + + Default values will not be shown. The defaults are: + ref=3:bframes=3:b-adapt=fast:direct=spatial: + b-pyramid=normal:weightp=2:me=hex:merange=16: + subme=7:partitions=p8x8,b8x8,i8x8,i4x4:8x8dct=1: + deblock=0,0:trellis=1:psy-rd=1,0:aq-strength=1.0: + no-fast-pskip=0:no-dct-decimate=0:cabac=1</property> + <property name="wrap_mode">GTK_WRAP_CHAR</property> + <property name="accepts_tab">False</property> + <signal handler="x264_focus_out_cb" name="focus_out_event"/> </object> - <packing> - <property name="position">0</property> - </packing> </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label54"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes"><small><b>Current x264 Advanced Option String</b></small></property> + <property name="use_markup">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="padding">2</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="padding">0</property> + <property name="position">0</property> + </packing> + + </child> + <child> + <object class="GtkVBox" id="lavc_mpeg4_tab"> + <property name="orientation">vertical</property> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <child> + <object class="GtkHBox" id="hbox86"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="spacing">2</property> + </object> + <packing> + <property name="expand">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame" id="frame18"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment" id="alignment33"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="top_padding">6</property> + <property name="bottom_padding">2</property> + <property name="left_padding">12</property> + <property name="right_padding">2</property> <child> - <object class="GtkHBox" id="hbox39"> + <object class="GtkScrolledWindow" id="scrolledwindow7"> + <property name="height_request">40</property> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <child> - <object class="GtkLabel" id="label61"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Deblocking: </property> - </object> - <packing> - <property name="expand">False</property> - </packing> - </child> - <child> - <object class="GtkSpinButton" id="x264_deblock_alpha"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-markup" translatable="yes">H.264 has a built-in deblocking filter that smooths out blocking artifacts after decoding each frame. This not only improves visual quality, but also helps compression significantly. The deblocking filter takes a lot of CPU power, so if you're looking to minimize CPU requirements for video playback, disable it. - -The deblocking filter has two adjustable parameters, "strength" (Alpha) and "threshold" (Beta). The former controls how strong (or weak) the deblocker is, while the latter controls how many (or few) edges it applies to. Lower values mean less deblocking, higher values mean more deblocking. The default is 0 (normal strength) for both parameters.</property> - <property name="adjustment">adjustment11</property> - <signal handler="x264_widget_changed_cb" name="value_changed"/> - </object> - <packing> - <property name="expand">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkSpinButton" id="x264_deblock_beta"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-markup" translatable="yes">H.264 has a built-in deblocking filter that smooths out blocking artifacts after decoding each frame. This not only improves visual quality, but also helps compression significantly. The deblocking filter takes a lot of CPU power, so if you're looking to minimize CPU requirements for video playback, disable it. - -The deblocking filter has two adjustable parameters, "strength" (Alpha) and "threshold" (Beta). The former controls how strong (or weak) the deblocker is, while the latter controls how many (or few) edges it applies to. Lower values mean less deblocking, higher values mean more deblocking. The default is 0 (normal strength) for both parameters.</property> - <property name="adjustment">adjustment12</property> - <signal handler="x264_widget_changed_cb" name="value_changed"/> - </object> - <packing> - <property name="expand">False</property> - <property name="position">2</property> - </packing> - </child> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="shadow_type">etched-in</property> <child> - <object class="GtkCheckButton" id="x264_no_dct_decimate"> + <object class="GtkTextView" id="lavcOption"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">x264 normally zeroes out nearly-empty data blocks to save bits to be better used for some other purpose in the video. However, this can sometimes have slight negative effects on retention of subtle grain and dither. Don't touch this unless you're having banding issues or other such cases where you are having trouble keeping fine noise.</property> - <property name="label" translatable="yes">No DCT Decimate</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - <signal handler="x264_widget_changed_cb" name="toggled"/> + <property name="tooltip-text" translatable="yes">Your selected options will appear here. + You can edit these and add additional options.</property> + <property name="wrap_mode">GTK_WRAP_CHAR</property> + <property name="accepts_tab">False</property> + <signal handler="lavc_focus_out_cb" name="focus_out_event"/> </object> - <packing> - <property name="padding">20</property> - <property name="position">3</property> - </packing> </child> </object> - <packing> - <property name="position">1</property> - </packing> </child> </object> </child> + <child type="label"> + <object class="GtkLabel" id="label75"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes"><small><b>Current FFMpeg Advanced Option String</b></small></property> + <property name="use_markup">True</property> + </object> + </child> </object> - </child> - <child type="label"> - <object class="GtkLabel" id="label63"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes"><small><b>Psychovisual</b></small></property> - <property name="use_markup">True</property> - </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="padding">2</property> + <property name="position">1</property> + </packing> </child> </object> <packing> - <property name="expand">False</property> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="padding">0</property> <property name="position">1</property> </packing> </child> </object> <packing> - <property name="expand">True</property> - <property name="position">2</property> </packing> </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkHBox" id="hbox85"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">2</property> - </object> - <packing> - <property name="expand">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkFrame" id="frame11"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> + <child type="tab"> + <object class="GtkLabel" id="advanced_tab_label"> + <property name="visible">True</property> + <property name="label" translatable="yes">Advanced</property> + </object> + <packing> + <property name="position">4</property> + <property name="tab_fill">False</property> + </packing> + </child> <child> - <object class="GtkAlignment" id="alignment29"> + <object class="GtkVBox" id="chapters_tab"> + <property name="orientation">vertical</property> <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="top_padding">6</property> - <property name="bottom_padding">2</property> - <property name="left_padding">12</property> - <property name="right_padding">2</property> <child> - <object class="GtkScrolledWindow" id="scrolledwindow6"> - <property name="height_request">40</property> + <object class="GtkHBox" id="hbox30"> + <property name="visible">True</property> + <child> + <object class="GtkCheckButton" id="ChapterMarkers"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="tooltip-text" translatable="yes">Add chapter markers to output file.</property> + <property name="label" translatable="yes">Chapter Markers</property> + <property name="draw_indicator">True</property> + <signal handler="chapter_markers_changed_cb" name="toggled"/> + </object> + <packing> + <property name="expand">False</property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="expand">False</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow3"> <property name="visible">True</property> <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">etched-in</property> <child> - <object class="GtkTextView" id="x264Option"> + <object class="GtkTreeView" id="chapters_list"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="tooltip-text" translatable="yes">Your selected options will appear here. -You can edit these and add additional options. - -Default values will not be shown. The defaults are: -ref=3:bframes=3:b-adapt=fast:direct=spatial: -b-pyramid=normal:weightp=2:me=hex:merange=16: -subme=7:partitions=p8x8,b8x8,i8x8,i4x4:8x8dct=1: -deblock=0,0:trellis=1:psy-rd=1,0:aq-strength=1.0: -no-fast-pskip=0:no-dct-decimate=0:cabac=1</property> - <property name="wrap_mode">GTK_WRAP_CHAR</property> - <property name="accepts_tab">False</property> - <signal handler="x264_focus_out_cb" name="focus_out_event"/> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="headers_clickable">True</property> + <property name="rules_hint">True</property> + <property name="enable-search">False</property> </object> </child> </object> + <packing> + <property name="position">1</property> + </packing> </child> </object> </child> - <child type="label"> - <object class="GtkLabel" id="label54"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes"><small><b>Current x264 Advanced Option String</b></small></property> - <property name="use_markup">True</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="padding">2</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="padding">0</property> - <property name="position">0</property> - </packing> - - </child> - <child> - <object class="GtkVBox" id="lavc_mpeg4_tab"> - <property name="orientation">vertical</property> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <child> - <object class="GtkHBox" id="hbox86"> + <child type="tab"> + <object class="GtkLabel" id="chapters_label"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="spacing">2</property> + <property name="label" translatable="yes">Chapters</property> </object> <packing> - <property name="expand">True</property> - <property name="position">0</property> + <property name="position">5</property> + <property name="tab_fill">False</property> </packing> </child> <child> - <object class="GtkFrame" id="frame18"> + <object class="GtkAlignment" id="alignment76"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> + <property name="top_padding">24</property> + <property name="right_padding">24</property> + <property name="left_padding">24</property> + <property name="bottom_padding">24</property> + <property name="yscale">1</property> <child> - <object class="GtkAlignment" id="alignment33"> + <object class="GtkTable" id="tags_table"> + <property name="n_rows">8</property> + <property name="n_columns">2</property> <property name="visible">True</property> + <property name="column_spacing">5</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="top_padding">6</property> - <property name="bottom_padding">2</property> - <property name="left_padding">12</property> - <property name="right_padding">2</property> <child> - <object class="GtkScrolledWindow" id="scrolledwindow7"> - <property name="height_request">40</property> + <object class="GtkLabel" id="tag_title_label"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Title:</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkEntry" id="MetaName"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="max_length">80</property> + <property name="activates_default">True</property> + <property name="width_chars">50</property> + <property name="truncate_multiline">True</property> + <signal name="changed" handler="meta_setting_widget_changed_cb"/> + </object> + <packing> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="tag_actors_label"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Actors:</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkEntry" id="MetaArtist"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="max_length">80</property> + <property name="activates_default">True</property> + <property name="width_chars">50</property> + <property name="truncate_multiline">True</property> + <signal name="changed" handler="meta_setting_widget_changed_cb"/> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="tag_director_label"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Director:</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkEntry" id="MetaAlbumArtist"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="max_length">80</property> + <property name="activates_default">True</property> + <property name="width_chars">50</property> + <property name="truncate_multiline">True</property> + <signal name="changed" handler="meta_setting_widget_changed_cb"/> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="tag_release_date_label"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Release Date:</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkEntry" id="MetaReleaseDate"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="max_length">80</property> + <property name="activates_default">True</property> + <property name="width_chars">50</property> + <property name="truncate_multiline">True</property> + <signal name="changed" handler="meta_setting_widget_changed_cb"/> + </object> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="tag_comment_label"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Comment:</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkEntry" id="MetaComment"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="max_length">80</property> + <property name="activates_default">True</property> + <property name="width_chars">50</property> + <property name="truncate_multiline">True</property> + <signal name="changed" handler="meta_setting_widget_changed_cb"/> + </object> + <packing> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="tag_genre_label"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Genre:</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="top_attach">5</property> + <property name="bottom_attach">6</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkEntry" id="MetaGenre"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="max_length">80</property> + <property name="activates_default">True</property> + <property name="width_chars">50</property> + <property name="truncate_multiline">True</property> + <signal name="changed" handler="meta_setting_widget_changed_cb"/> + </object> + <packing> + <property name="top_attach">5</property> + <property name="bottom_attach">6</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="tag_description_label"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Description:</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="top_attach">6</property> + <property name="bottom_attach">7</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkEntry" id="MetaDescription"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="max_length">80</property> + <property name="activates_default">True</property> + <property name="width_chars">50</property> + <property name="truncate_multiline">True</property> + <signal name="changed" handler="meta_setting_widget_changed_cb"/> + </object> + <packing> + <property name="top_attach">6</property> + <property name="bottom_attach">7</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="tag_long_description_label"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Plot:</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="top_attach">7</property> + <property name="bottom_attach">8</property> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_EXPAND</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="MetaLongDescriptionScroll"> + <property name="height_request">80</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> <property name="shadow_type">etched-in</property> <child> - <object class="GtkTextView" id="lavcOption"> + <object class="GtkTextView" id="MetaLongDescription"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="tooltip-text" translatable="yes">Your selected options will appear here. - You can edit these and add additional options.</property> <property name="wrap_mode">GTK_WRAP_CHAR</property> <property name="accepts_tab">False</property> - <signal handler="lavc_focus_out_cb" name="focus_out_event"/> + <signal handler="meta_focus_out_cb" name="focus_out_event"/> </object> </child> </object> + <packing> + <property name="top_attach">7</property> + <property name="bottom_attach">8</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL|GTK_EXPAND</property> + <property name="y_options">GTK_FILL|GTK_EXPAND</property> + </packing> </child> </object> </child> - <child type="label"> - <object class="GtkLabel" id="label75"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes"><small><b>Current FFMpeg Advanced Option String</b></small></property> - <property name="use_markup">True</property> - </object> - </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="padding">2</property> - <property name="position">1</property> - </packing> </child> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="padding">0</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - </packing> - </child> - <child type="tab"> - <object class="GtkLabel" id="advanced_tab_label"> - <property name="visible">True</property> - <property name="label" translatable="yes">Advanced</property> - </object> - <packing> - <property name="position">4</property> - <property name="tab_fill">False</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="chapters_tab"> - <property name="orientation">vertical</property> - <property name="visible">True</property> - <child> - <object class="GtkHBox" id="hbox30"> - <property name="visible">True</property> - <child> - <object class="GtkCheckButton" id="ChapterMarkers"> + <child type="tab"> + <object class="GtkLabel" id="metadata_label"> <property name="visible">True</property> - <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="tooltip-text" translatable="yes">Add chapter markers to output file.</property> - <property name="label" translatable="yes">Chapter Markers</property> - <property name="draw_indicator">True</property> - <signal handler="chapter_markers_changed_cb" name="toggled"/> + <property name="label" translatable="yes">Tags</property> </object> <packing> - <property name="expand">False</property> + <property name="position">6</property> + <property name="tab_fill">False</property> </packing> </child> - <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="expand">False</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow3"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <child> - <object class="GtkTreeView" id="chapters_list"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="headers_clickable">True</property> - <property name="rules_hint">True</property> - <property name="enable-search">False</property> - </object> - </child> </object> - <packing> - <property name="position">1</property> - </packing> </child> </object> - </child> - <child type="tab"> - <object class="GtkLabel" id="chapters_label"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Chapters</property> - </object> <packing> - <property name="position">5</property> - <property name="tab_fill">False</property> + <property name="expand">True</property> + <property name="position">1</property> </packing> </child> + <child> - <object class="GtkAlignment" id="alignment76"> + <object class="GtkAlignment" id="alignment66"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="top_padding">48</property> - <property name="right_padding">24</property> - <property name="left_padding">24</property> - <property name="yscale">0</property> + <property name="top_padding">4</property> + <property name="bottom_padding">4</property> + <property name="left_padding">12</property> + <property name="right_padding">12</property> + <property name="xalign">0.0</property> + <property name="yalign">1.0</property> <child> - <object class="GtkTable" id="tags_table"> - <property name="n_rows">8</property> - <property name="n_columns">2</property> + <object class="GtkHBox" id="hbox46"> <property name="visible">True</property> - <property name="column_spacing">5</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <child> - <object class="GtkLabel" id="tag_title_label"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Title:</property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="MetaName"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="max_length">80</property> - <property name="activates_default">True</property> - <property name="width_chars">50</property> - <property name="truncate_multiline">True</property> - <signal name="changed" handler="meta_setting_widget_changed_cb"/> - </object> - <packing> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="tag_actors_label"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Actors:</property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="MetaArtist"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="max_length">80</property> - <property name="activates_default">True</property> - <property name="width_chars">50</property> - <property name="truncate_multiline">True</property> - <signal name="changed" handler="meta_setting_widget_changed_cb"/> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="tag_director_label"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Director:</property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="MetaAlbumArtist"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="max_length">80</property> - <property name="activates_default">True</property> - <property name="width_chars">50</property> - <property name="truncate_multiline">True</property> - <signal name="changed" handler="meta_setting_widget_changed_cb"/> - </object> - <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="tag_release_date_label"> + <object class="GtkLabel" id="work_status"> <property name="visible">True</property> - <property name="xalign">1</property> + <property name="xalign">0</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Release Date:</property> - <property name="use_markup">True</property> </object> <packing> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="MetaReleaseDate"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="max_length">80</property> - <property name="activates_default">True</property> - <property name="width_chars">50</property> - <property name="truncate_multiline">True</property> - <signal name="changed" handler="meta_setting_widget_changed_cb"/> - </object> - <packing> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="tag_comment_label"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Comment:</property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="MetaComment"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="max_length">80</property> - <property name="activates_default">True</property> - <property name="width_chars">50</property> - <property name="truncate_multiline">True</property> - <signal name="changed" handler="meta_setting_widget_changed_cb"/> - </object> - <packing> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="tag_genre_label"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Genre:</property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="top_attach">5</property> - <property name="bottom_attach">6</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="MetaGenre"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="max_length">80</property> - <property name="activates_default">True</property> - <property name="width_chars">50</property> - <property name="truncate_multiline">True</property> - <signal name="changed" handler="meta_setting_widget_changed_cb"/> - </object> - <packing> - <property name="top_attach">5</property> - <property name="bottom_attach">6</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="tag_description_label"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Description:</property> - <property name="use_markup">True</property> - </object> - <packing> - <property name="top_attach">6</property> - <property name="bottom_attach">7</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="MetaDescription"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="max_length">80</property> - <property name="activates_default">True</property> - <property name="width_chars">50</property> - <property name="truncate_multiline">True</property> - <signal name="changed" handler="meta_setting_widget_changed_cb"/> - </object> - <packing> - <property name="top_attach">6</property> - <property name="bottom_attach">7</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkLabel" id="tag_long_description_label"> + <object class="GtkLabel" id="pending_status"> <property name="visible">True</property> <property name="xalign">1</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Plot:</property> - <property name="use_markup">True</property> </object> <packing> - <property name="top_attach">7</property> - <property name="bottom_attach">8</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="MetaLongDescriptionScroll"> - <property name="height_request">80</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">etched-in</property> - <child> - <object class="GtkTextView" id="MetaLongDescription"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="wrap_mode">GTK_WRAP_CHAR</property> - <property name="accepts_tab">False</property> - <signal handler="meta_focus_out_cb" name="focus_out_event"/> - </object> - </child> - </object> - <packing> - <property name="top_attach">7</property> - <property name="bottom_attach">8</property> - <property name="left_attach">1</property> - <property name="right_attach">2</property> + <property name="expand">False</property> + <property name="position">1</property> </packing> </child> </object> - <packing> - </packing> </child> </object> - </child> - <child type="tab"> - <object class="GtkLabel" id="metadata_label"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes">Tags</property> - </object> <packing> - <property name="position">6</property> - <property name="tab_fill">False</property> + <property name="expand">False</property> + <property name="position">2</property> </packing> </child> - </object> - </child> - - </object> - <packing> - <property name="expand">True</property> - <property name="position">1</property> - </packing> - </child> - - <child> - <object class="GtkAlignment" id="alignment66"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="top_padding">4</property> - <property name="bottom_padding">4</property> - <property name="left_padding">12</property> - <property name="right_padding">12</property> - <property name="xalign">0.0</property> - <property name="yalign">1.0</property> <child> - <object class="GtkHBox" id="hbox46"> + <object class="GtkAlignment" id="alignment71"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="left_padding">12</property> + <property name="right_padding">12</property> + <property name="bottom_padding">6</property> <child> - <object class="GtkLabel" id="work_status"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - </object> - <packing> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="pending_status"> - <property name="visible">True</property> - <property name="xalign">1</property> + <object class="GtkProgressBar" id="progressbar"> + <property name="height_request">10</property> + <property name="visible">False</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="text" translatable="yes"/> </object> - <packing> - <property name="expand">False</property> - <property name="position">1</property> - </packing> </child> </object> + <packing> + <property name="expand">False</property> + <property name="position">3</property> + </packing> </child> </object> <packing> + <property name="position">0</property> <property name="expand">False</property> - <property name="position">2</property> </packing> </child> <child> - <object class="GtkAlignment" id="alignment71"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="left_padding">12</property> - <property name="right_padding">12</property> - <property name="bottom_padding">6</property> - <child> - <object class="GtkProgressBar" id="progressbar"> - <property name="height_request">10</property> - <property name="visible">False</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="text" translatable="yes"/> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">3</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - </packing> - </child> - - <child> - <object class="GtkAlignment" id="alignment69"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="top_padding">6</property> - <property name="right_padding">6</property> - - <child> - <object class="GtkFrame" id="presets_frame"> - <property name="visible">False</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> - <signal handler="presets_frame_size_allocate_cb" name="size_allocate"/> - <child> - <object class="GtkAlignment" id="alignment21"> + <object class="GtkAlignment" id="alignment69"> <property name="visible">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="top_padding">6</property> - <property name="left_padding">8</property> + <property name="right_padding">6</property> <child> - <object class="GtkVBox" id="presets_vbox"> - <property name="orientation">vertical</property> - <property name="visible">True</property> + <object class="GtkFrame" id="presets_frame"> + <property name="visible">False</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <signal handler="presets_frame_size_allocate_cb" name="size_allocate"/> <child> - <object class="GtkScrolledWindow" id="presets_scroll"> + <object class="GtkAlignment" id="alignment21"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">etched-in</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="top_padding">6</property> + <property name="left_padding">8</property> <child> - <object class="GtkTreeView" id="presets_list"> - <property name="width_request">206</property> + <object class="GtkVBox" id="presets_vbox"> + <property name="orientation">vertical</property> <property name="visible">True</property> - <property name="can_focus">True</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="headers_visible">False</property> - <property name="headers_clickable">True</property> + <child> + <object class="GtkScrolledWindow" id="presets_scroll"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="shadow_type">etched-in</property> + <child> + <object class="GtkTreeView" id="presets_list"> + <property name="width_request">206</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="headers_visible">False</property> + <property name="headers_clickable">True</property> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkToolbar" id="presets_toolbar"> + <property name="icon-size">2</property> + <property name="visible">True</property> + <property name="show_arrow">False</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <child> + <object class="GtkToolButton" id="presets_save"> + <property name="visible">True</property> + <property name="sensitive">True</property> + <property name="is_important">False</property> + <property name="label" translatable="yes">_Save</property> + <property name="use_underline">True</property> + <property name="tooltip-text" translatable="yes">Save current settings to new preset.</property> + <property name="stock_id">gtk-save</property> + <signal name="clicked" handler="presets_save_clicked_cb"/> + </object> + <packing> + <property name="expand">False</property> + </packing> + </child> + <child> + <object class="GtkToolButton" id="presets_remove"> + <property name="visible">True</property> + <property name="sensitive">True</property> + <property name="is_important">False</property> + <property name="label" translatable="yes">_Delete</property> + <property name="use_underline">True</property> + <property name="tooltip-text" translatable="yes">Delete the currently selected preset.</property> + <property name="stock_id">gtk-delete</property> + <signal name="clicked" handler="presets_remove_clicked_cb"/> + </object> + <packing> + <property name="expand">False</property> + </packing> + </child> + <child> + <object class="GtkSeparatorToolItem" id="toolbutton2"> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="homogeneous">True</property> + </packing> + </child> + <child> + <object class="GtkToolButton" id="presets_menu_button"> + <property name="visible">True</property> + <property name="sensitive">True</property> + <property name="is_important">True</property> + <property name="label" translatable="yes">_Options</property> + <property name="use_underline">True</property> + <property name="tooltip-text" translatable="yes">Preset Options</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="stock_id">gtk-preferences</property> + <signal handler="presets_menu_clicked_cb" name="clicked"/> + </object> + <packing> + <property name="expand">False</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> </object> </child> </object> </child> - <child> - <object class="GtkToolbar" id="presets_toolbar"> - <property name="icon-size">2</property> + <child type="label"> + <object class="GtkLabel" id="label34"> <property name="visible">True</property> - <property name="show_arrow">False</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <child> - <object class="GtkToolButton" id="presets_save"> - <property name="visible">True</property> - <property name="sensitive">True</property> - <property name="is_important">False</property> - <property name="label" translatable="yes">_Save</property> - <property name="use_underline">True</property> - <property name="tooltip-text" translatable="yes">Save current settings to new preset.</property> - <property name="stock_id">gtk-save</property> - <signal name="clicked" handler="presets_save_clicked_cb"/> - </object> - <packing> - <property name="expand">False</property> - </packing> - </child> - <child> - <object class="GtkToolButton" id="presets_remove"> - <property name="visible">True</property> - <property name="sensitive">True</property> - <property name="is_important">False</property> - <property name="label" translatable="yes">_Delete</property> - <property name="use_underline">True</property> - <property name="tooltip-text" translatable="yes">Delete the currently selected preset.</property> - <property name="stock_id">gtk-delete</property> - <signal name="clicked" handler="presets_remove_clicked_cb"/> - </object> - <packing> - <property name="expand">False</property> - </packing> - </child> - <child> - <object class="GtkSeparatorToolItem" id="toolbutton2"> - <property name="visible">True</property> - </object> - <packing> - <property name="expand">True</property> - <property name="homogeneous">True</property> - </packing> - </child> - <child> - <object class="GtkToolButton" id="presets_menu_button"> - <property name="visible">True</property> - <property name="sensitive">True</property> - <property name="is_important">True</property> - <property name="label" translatable="yes">_Options</property> - <property name="use_underline">True</property> - <property name="tooltip-text" translatable="yes">Preset Options</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="stock_id">gtk-preferences</property> - <signal handler="presets_menu_clicked_cb" name="clicked"/> - </object> - <packing> - <property name="expand">False</property> - </packing> - </child> + <property name="label" translatable="yes"><b>Presets</b></property> + <property name="use_markup">True</property> </object> - <packing> - <property name="expand">False</property> - <property name="position">1</property> - </packing> </child> </object> </child> </object> + <packing> + <property name="position">1</property> + <property name="expand">True</property> + </packing> </child> - <child type="label"> - <object class="GtkLabel" id="label34"> - <property name="visible">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="label" translatable="yes"><b>Presets</b></property> - <property name="use_markup">True</property> - </object> - </child> - </object> - </child> - </object> <packing> - <property name="position">1</property> + <property name="position">2</property> </packing> </child> - </object> - <packing> - <property name="position">2</property> - </packing> </child> - - </object> - </child> - </object> <object class="GtkDialog" id="prefs_dialog"> @@ -5486,6 +5528,7 @@ no-fast-pskip=0:no-dct-decimate=0:cabac=1</property> </child> </object> <packing> + <property name="expand">False</property> <property name="position">0</property> </packing> </child> @@ -5533,6 +5576,7 @@ no-fast-pskip=0:no-dct-decimate=0:cabac=1</property> </object> <packing> <property name="position">1</property> + <property name="expand">False</property> </packing> </child> </object> @@ -6417,6 +6461,8 @@ on the Video tab instead.</property> <property name="visible">False</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="type_hint">GDK_WINDOW_TYPE_HINT_UTILITY</property> + <property name="default_width">800</property> + <property name="default_height">600</property> <property name="skip_taskbar_hint">True</property> <property name="skip_pager_hint">True</property> <property name="transient-for">hb_window</property> @@ -6476,6 +6522,8 @@ on the Video tab instead.</property> <property name="title" translatable="yes">HandBrake Queue</property> <property name="icon_name">hb-queue</property> <property name="type_hint">GDK_WINDOW_TYPE_HINT_UTILITY</property> + <property name="default_width">800</property> + <property name="default_height">600</property> <property name="skip_taskbar_hint">True</property> <property name="skip_pager_hint">True</property> <property name="transient-for">hb_window</property> @@ -6543,6 +6591,10 @@ on the Video tab instead.</property> <object class="GtkLabel" id="current_encode"> <property name="visible">True</property> </object> + <packing> + <property name="position">0</property> + <property name="expand">False</property> + </packing> </child> <child> <object class="GtkHBox" id="hbox28"> @@ -6566,6 +6618,7 @@ on the Video tab instead.</property> </object> <packing> <property name="position">1</property> + <property name="expand">False</property> </packing> </child> </object> @@ -7770,6 +7823,7 @@ The classic deinterlace filter is applied to all frames. Frames that are not int <object class="GtkVBox" id="live_progress_box"> <property name="orientation">vertical</property> <property name="visible">True</property> + <!-- <child> <object class="GtkLabel" id="label71"> <property name="height_request">1</property> @@ -7779,6 +7833,7 @@ The classic deinterlace filter is applied to all frames. Frames that are not int <property name="position">0</property> </packing> </child> +--> <child> <object class="GtkProgressBar" id="live_encode_progress"> <property name="height_request">20</property> @@ -7787,9 +7842,10 @@ The classic deinterlace filter is applied to all frames. Frames that are not int </object> <packing> <property name="expand">False</property> - <property name="position">1</property> + <property name="position">0</property> </packing> </child> + <!-- <child> <object class="GtkLabel" id="label72"> <property name="height_request">1</property> @@ -7799,6 +7855,7 @@ The classic deinterlace filter is applied to all frames. Frames that are not int <property name="position">2</property> </packing> </child> +--> </object> <packing> <property name="position">2</property> @@ -7807,6 +7864,7 @@ The classic deinterlace filter is applied to all frames. Frames that are not int </object> <packing> <property name="position">1</property> + <property name="expand">False</property> </packing> </child> <child> @@ -7848,7 +7906,7 @@ The classic deinterlace filter is applied to all frames. Frames that are not int </packing> </child> <child> - <object class="GtkCheckButton" id="show_crop"> + <object class="GtkCheckButton" id="preview_show_crop"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="tooltip-text" translatable="yes">Show Cropped area of the preview</property> @@ -7866,6 +7924,7 @@ The classic deinterlace filter is applied to all frames. Frames that are not int <property name="can_focus">True</property> <property name="tooltip-text" translatable="yes">View Fullscreen Preview</property> <property name="label" translatable="yes">Fullscreen</property> + <property name="relief">none</property> <signal handler="fullscreen_clicked_cb" name="toggled"/> </object> <packing> @@ -7879,6 +7938,7 @@ The classic deinterlace filter is applied to all frames. Frames that are not int <property name="can_focus">True</property> <property name="tooltip-text" translatable="yes">Hide the picture settings window while leaving the preview visible.</property> <property name="label" translatable="yes">Hide Settings</property> + <property name="relief">none</property> <signal handler="picture_settings_alt2_clicked_cb" name="clicked"/> </object> <packing> @@ -8357,6 +8417,7 @@ libx264 authors: </child> </object> <packing> + <property name="expand">False</property> <property name="position">0</property> </packing> </child> @@ -8380,7 +8441,7 @@ libx264 authors: <property name="xalign">0</property> <property name="xscale">0</property> <child> - <object class="GtkComboBox" id="source_device"> + <object class="GtkComboBoxText" id="source_device"> <property name="visible">True</property> <property name="model">device_list</property> <signal handler="dvd_device_changed_cb" name="changed"/> @@ -8400,6 +8461,7 @@ libx264 authors: </object> <packing> <property name="position">1</property> + <property name="expand">False</property> </packing> </child> </object> diff --git a/gtk/src/ghbcellrenderertext.c b/gtk/src/ghbcellrenderertext.c index 4c39f729d..f65c111e0 100644 --- a/gtk/src/ghbcellrenderertext.c +++ b/gtk/src/ghbcellrenderertext.c @@ -38,6 +38,12 @@ #define GTK_PARAM_READWRITE G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB +#if GTK_CHECK_VERSION(3, 0, 0) +#define MyGdkRectangle const GdkRectangle +#else +#define MyGdkRectangle GdkRectangle +#endif + static void ghb_cell_renderer_text_finalize (GObject *object); @@ -51,25 +57,34 @@ static void ghb_cell_renderer_text_set_property (GObject *obje GParamSpec *pspec); static void ghb_cell_renderer_text_get_size (GtkCellRenderer *cell, GtkWidget *widget, - GdkRectangle *cell_area, + MyGdkRectangle *cell_area, gint *x_offset, gint *y_offset, gint *width, gint *height); +#if GTK_CHECK_VERSION(3, 0, 0) +static void ghb_cell_renderer_text_render (GtkCellRenderer *cell, + cairo_t *cr, + GtkWidget *widget, + MyGdkRectangle *background_area, + MyGdkRectangle *cell_area, + GtkCellRendererState flags); +#else static void ghb_cell_renderer_text_render (GtkCellRenderer *cell, GdkWindow *window, GtkWidget *widget, - GdkRectangle *background_area, - GdkRectangle *cell_area, + MyGdkRectangle *background_area, + MyGdkRectangle *cell_area, GdkRectangle *expose_area, GtkCellRendererState flags); +#endif static GtkCellEditable *ghb_cell_renderer_text_start_editing (GtkCellRenderer *cell, GdkEvent *event, GtkWidget *widget, const gchar *path, - GdkRectangle *background_area, - GdkRectangle *cell_area, + MyGdkRectangle *background_area, + MyGdkRectangle *cell_area, GtkCellRendererState flags); enum { @@ -1504,7 +1519,7 @@ get_layout (GhbCellRendererText *celltext, static void get_size (GtkCellRenderer *cell, GtkWidget *widget, - GdkRectangle *cell_area, + MyGdkRectangle *cell_area, PangoLayout *layout, gint *x_offset, gint *y_offset, @@ -1531,8 +1546,8 @@ get_size (GtkCellRenderer *cell, PangoFontDescription *font_desc; gint row_height; - font_desc = pango_font_description_copy_static (widget->style->font_desc); - pango_font_description_merge_static (font_desc, celltext->font, TRUE); + font_desc = pango_font_description_copy_static(gtk_widget_get_style(widget)->font_desc); + pango_font_description_merge_static(font_desc, celltext->font, TRUE); if (celltext->scale_set) pango_font_description_set_size (font_desc, @@ -1610,7 +1625,7 @@ get_size (GtkCellRenderer *cell, static void ghb_cell_renderer_text_get_size (GtkCellRenderer *cell, GtkWidget *widget, - GdkRectangle *cell_area, + MyGdkRectangle *cell_area, gint *x_offset, gint *y_offset, gint *width, @@ -1620,98 +1635,176 @@ ghb_cell_renderer_text_get_size (GtkCellRenderer *cell, x_offset, y_offset, width, height); } -static void -ghb_cell_renderer_text_render (GtkCellRenderer *cell, - GdkDrawable *window, - GtkWidget *widget, - GdkRectangle *background_area, - GdkRectangle *cell_area, - GdkRectangle *expose_area, - GtkCellRendererState flags) - +#if GTK_CHECK_VERSION(3, 0, 0) +static void ghb_cell_renderer_text_render( + GtkCellRenderer *cell, + cairo_t *cr, + GtkWidget *widget, + MyGdkRectangle *background_area, + MyGdkRectangle *cell_area, + GtkCellRendererState flags) { - GhbCellRendererText *celltext = (GhbCellRendererText *) cell; - PangoLayout *layout; - GtkStateType state; - gint x_offset; - gint y_offset; - GhbCellRendererTextPrivate *priv; + GhbCellRendererText *celltext = (GhbCellRendererText *) cell; + PangoLayout *layout; + gint x_offset; + gint y_offset; + GhbCellRendererTextPrivate *priv; - priv = GHB_CELL_RENDERER_TEXT_GET_PRIVATE (cell); + priv = GHB_CELL_RENDERER_TEXT_GET_PRIVATE (cell); - layout = get_layout (celltext, widget, TRUE, flags); - get_size (cell, widget, cell_area, layout, &x_offset, &y_offset, NULL, NULL); + layout = get_layout (celltext, widget, TRUE, flags); + get_size(cell, widget, cell_area, layout, &x_offset, &y_offset, NULL, NULL); - gboolean sensitive; - gint xpad, ypad; + gint xpad, ypad; +#if 0 + GtkStateType state; + gboolean sensitive; - sensitive = gtk_cell_renderer_get_sensitive(cell); - if (!sensitive) + sensitive = gtk_cell_renderer_get_sensitive(cell); + if (!sensitive) { state = GTK_STATE_INSENSITIVE; } - else if ((flags & GTK_CELL_RENDERER_SELECTED) == GTK_CELL_RENDERER_SELECTED) + else if ((flags & GTK_CELL_RENDERER_SELECTED) == GTK_CELL_RENDERER_SELECTED) { - if (gtk_widget_has_focus (widget)) - state = GTK_STATE_SELECTED; - else - state = GTK_STATE_ACTIVE; + if (gtk_widget_has_focus (widget)) + state = GTK_STATE_SELECTED; + else + state = GTK_STATE_ACTIVE; } - else if ((flags & GTK_CELL_RENDERER_PRELIT) == GTK_CELL_RENDERER_PRELIT && - GTK_WIDGET_STATE (widget) == GTK_STATE_PRELIGHT) + else if ((flags & GTK_CELL_RENDERER_PRELIT) == GTK_CELL_RENDERER_PRELIT && + gtk_widget_get_state(widget) == GTK_STATE_PRELIGHT) { - state = GTK_STATE_PRELIGHT; + state = GTK_STATE_PRELIGHT; } - else + else { - if (GTK_WIDGET_STATE (widget) == GTK_STATE_INSENSITIVE) - state = GTK_STATE_INSENSITIVE; - else - state = GTK_STATE_NORMAL; + if (gtk_widget_get_state(widget) == GTK_STATE_INSENSITIVE) + state = GTK_STATE_INSENSITIVE; + else + state = GTK_STATE_NORMAL; } +#endif - gtk_cell_renderer_get_padding(cell, &xpad, &ypad); + gtk_cell_renderer_get_padding(cell, &xpad, &ypad); - if (celltext->background_set && + if (celltext->background_set && (flags & GTK_CELL_RENDERER_SELECTED) == 0) { - cairo_t *cr = gdk_cairo_create (window); + gdk_cairo_rectangle (cr, background_area); + cairo_set_source_rgb (cr, + celltext->background.red / 65535., + celltext->background.green / 65535., + celltext->background.blue / 65535.); + cairo_fill (cr); + } + + if (priv->ellipsize_set && priv->ellipsize != PANGO_ELLIPSIZE_NONE) + pango_layout_set_width (layout, + (cell_area->width - x_offset - 2 * xpad) * PANGO_SCALE); + else if (priv->wrap_width == -1) + pango_layout_set_width (layout, -1); + + gtk_render_layout(gtk_widget_get_style_context(widget), + cr, + cell_area->x + x_offset + xpad, + cell_area->y + y_offset + ypad, + layout); + + g_object_unref (layout); +} +#else +static void ghb_cell_renderer_text_render (GtkCellRenderer *cell, + GdkWindow *window, + GtkWidget *widget, + MyGdkRectangle *background_area, + MyGdkRectangle *cell_area, + GdkRectangle *expose_area, + GtkCellRendererState flags) +{ + GhbCellRendererText *celltext = (GhbCellRendererText *) cell; + PangoLayout *layout; + GtkStateType state; + gint x_offset; + gint y_offset; + GhbCellRendererTextPrivate *priv; + + priv = GHB_CELL_RENDERER_TEXT_GET_PRIVATE (cell); - if (expose_area) + layout = get_layout (celltext, widget, TRUE, flags); + get_size(cell, widget, cell_area, layout, &x_offset, &y_offset, NULL, NULL); + + gboolean sensitive; + gint xpad, ypad; + + sensitive = gtk_cell_renderer_get_sensitive(cell); + if (!sensitive) + { + state = GTK_STATE_INSENSITIVE; + } + else if ((flags & GTK_CELL_RENDERER_SELECTED) == GTK_CELL_RENDERER_SELECTED) { - gdk_cairo_rectangle (cr, expose_area); - cairo_clip (cr); + if (gtk_widget_has_focus (widget)) + state = GTK_STATE_SELECTED; + else + state = GTK_STATE_ACTIVE; } + else if ((flags & GTK_CELL_RENDERER_PRELIT) == GTK_CELL_RENDERER_PRELIT && + GTK_WIDGET_STATE (widget) == GTK_STATE_PRELIGHT) + { + state = GTK_STATE_PRELIGHT; + } + else + { + if (GTK_WIDGET_STATE (widget) == GTK_STATE_INSENSITIVE) + state = GTK_STATE_INSENSITIVE; + else + state = GTK_STATE_NORMAL; + } + + gtk_cell_renderer_get_padding(cell, &xpad, &ypad); + + if (celltext->background_set && + (flags & GTK_CELL_RENDERER_SELECTED) == 0) + { + cairo_t *cr = gdk_cairo_create (window); + + if (expose_area) + { + gdk_cairo_rectangle (cr, expose_area); + cairo_clip (cr); + } - gdk_cairo_rectangle (cr, background_area); - cairo_set_source_rgb (cr, + gdk_cairo_rectangle (cr, background_area); + cairo_set_source_rgb (cr, celltext->background.red / 65535., celltext->background.green / 65535., celltext->background.blue / 65535.); - cairo_fill (cr); + cairo_fill (cr); - cairo_destroy (cr); + cairo_destroy (cr); } - if (priv->ellipsize_set && priv->ellipsize != PANGO_ELLIPSIZE_NONE) - pango_layout_set_width (layout, + if (priv->ellipsize_set && priv->ellipsize != PANGO_ELLIPSIZE_NONE) + pango_layout_set_width (layout, (cell_area->width - x_offset - 2 * xpad) * PANGO_SCALE); - else if (priv->wrap_width == -1) - pango_layout_set_width (layout, -1); - - gtk_paint_layout (widget->style, - window, - state, - TRUE, - expose_area, - widget, - "cellrenderertext", - cell_area->x + x_offset + xpad, - cell_area->y + y_offset + ypad, - layout); - - g_object_unref (layout); + else if (priv->wrap_width == -1) + pango_layout_set_width (layout, -1); + + gtk_paint_layout (widget->style, + window, + state, + TRUE, + expose_area, + widget, + "cellrenderertext", + cell_area->x + x_offset + xpad, + cell_area->y + y_offset + ypad, + layout); + + g_object_unref (layout); } +#endif static gboolean ghb_cell_renderer_text_keypress( @@ -1846,87 +1939,94 @@ ghb_cell_renderer_text_start_editing (GtkCellRenderer *cell, GdkEvent *event, GtkWidget *widget, const gchar *path, - GdkRectangle *background_area, - GdkRectangle *cell_area, + MyGdkRectangle *background_area, + MyGdkRectangle *cell_area, GtkCellRendererState flags) { - GtkRequisition requisition; - GhbCellRendererText *celltext; - GhbCellRendererTextPrivate *priv; + GhbCellRendererText *celltext; + GhbCellRendererTextPrivate *priv; - celltext = GHB_CELL_RENDERER_TEXT (cell); - priv = GHB_CELL_RENDERER_TEXT_GET_PRIVATE (cell); + celltext = GHB_CELL_RENDERER_TEXT (cell); + priv = GHB_CELL_RENDERER_TEXT_GET_PRIVATE (cell); - /* If the cell isn't editable we return NULL. */ - if (celltext->editable == FALSE) - return NULL; + /* If the cell isn't editable we return NULL. */ + if (celltext->editable == FALSE) + return NULL; - gint xalign; - g_object_get(cell, "xalign", &xalign, NULL); - priv->entry = g_object_new (GTK_TYPE_ENTRY, + gint xalign; + g_object_get(cell, "xalign", &xalign, NULL); + priv->entry = g_object_new (GTK_TYPE_ENTRY, "has-frame", FALSE, "xalign", xalign, NULL); - if (celltext->text) - gtk_entry_set_text (GTK_ENTRY (priv->entry), celltext->text); - g_object_set_data_full (G_OBJECT (priv->entry), I_(GHB_CELL_RENDERER_TEXT_PATH), g_strdup (path), g_free); + if (celltext->text) + gtk_entry_set_text (GTK_ENTRY (priv->entry), celltext->text); + + g_object_set_data_full (G_OBJECT (priv->entry), + I_(GHB_CELL_RENDERER_TEXT_PATH), g_strdup (path), g_free); - gtk_editable_select_region (GTK_EDITABLE (priv->entry), 0, -1); + gtk_editable_select_region (GTK_EDITABLE (priv->entry), 0, -1); - gtk_widget_size_request (priv->entry, &requisition); - if (requisition.height < cell_area->height) +#if 0 + GtkRequisition min_size, size; + + gtk_widget_get_preferred_size(priv->entry, &min_size, &size); + if (min_size.height > size.height) + size.height = min_size.height; + if (min_size.width > size.width) + size.width = min_size.width; + if (size.height < cell_area->height) { - GtkBorder *style_border; - GtkBorder border; + GtkBorder *style_border; + GtkBorder border; - gtk_widget_style_get (priv->entry, + gtk_widget_style_get (priv->entry, "inner-border", &style_border, NULL); - if (style_border) + if (style_border) { - border = *style_border; - g_boxed_free (GTK_TYPE_BORDER, style_border); - } - else + border = *style_border; + g_boxed_free (GTK_TYPE_BORDER, style_border); + } + else { - /* Since boxed style properties can't have default values ... */ - border.left = 2; - border.right = 2; - } + /* Since boxed style properties can't have default values ... */ + border.left = 2; + border.right = 2; + } - border.top = (cell_area->height - requisition.height) / 2; - border.bottom = (cell_area->height - requisition.height) / 2; - gtk_entry_set_inner_border (GTK_ENTRY (priv->entry), &border); + border.top = (cell_area->height - size.height) / 2; + border.bottom = (cell_area->height - size.height) / 2; + gtk_entry_set_inner_border (GTK_ENTRY (priv->entry), &border); } - - priv->in_entry_menu = FALSE; - if (priv->entry_menu_popdown_timeout) +#endif + priv->in_entry_menu = FALSE; + if (priv->entry_menu_popdown_timeout) { - g_source_remove (priv->entry_menu_popdown_timeout); - priv->entry_menu_popdown_timeout = 0; + g_source_remove (priv->entry_menu_popdown_timeout); + priv->entry_menu_popdown_timeout = 0; } - g_signal_connect (priv->entry, + g_signal_connect (priv->entry, "key-press-event", G_CALLBACK (ghb_cell_renderer_text_keypress), celltext); - g_signal_connect (priv->entry, + g_signal_connect (priv->entry, "editing_done", G_CALLBACK (ghb_cell_renderer_text_editing_done), celltext); - priv->focus_out_id = g_signal_connect_after (priv->entry, "focus_out_event", + priv->focus_out_id = g_signal_connect_after (priv->entry, "focus_out_event", G_CALLBACK (ghb_cell_renderer_text_focus_out_event), celltext); - priv->populate_popup_id = - g_signal_connect (priv->entry, "populate_popup", + priv->populate_popup_id = g_signal_connect (priv->entry, "populate_popup", G_CALLBACK (ghb_cell_renderer_text_populate_popup), celltext); - gtk_widget_show (priv->entry); + gtk_widget_show (priv->entry); - return GTK_CELL_EDITABLE (priv->entry); + return GTK_CELL_EDITABLE (priv->entry); } /** diff --git a/gtk/src/ghbcompositor.c b/gtk/src/ghbcompositor.c index 41ea67936..92f8fe2e8 100644 --- a/gtk/src/ghbcompositor.c +++ b/gtk/src/ghbcompositor.c @@ -45,12 +45,23 @@ enum { static void ghb_compositor_finalize (GObject *object); static void ghb_compositor_realize (GtkWidget *widget); static void ghb_compositor_unrealize (GtkWidget *widget); -static void ghb_compositor_size_request (GtkWidget *widget, - GtkRequisition *requisition); static void ghb_compositor_size_allocate (GtkWidget *widget, GtkAllocation *allocation); +#if GTK_CHECK_VERSION(3, 0, 0) +static gboolean ghb_compositor_draw (GtkWidget *widget, + cairo_t *cr); +static void ghb_compositor_get_preferred_width(GtkWidget *widget, + gint *minimum_size, + gint *natural_size); +static void ghb_compositor_get_preferred_height(GtkWidget *widget, + gint *minimum_size, + gint *natural_size); +#else static gboolean ghb_compositor_expose (GtkWidget *widget, GdkEventExpose *event); +static void ghb_compositor_size_request (GtkWidget *widget, + GtkRequisition *requisition); +#endif static void ghb_compositor_set_property (GObject *object, guint prop_id, const GValue *value, @@ -93,14 +104,19 @@ ghb_compositor_class_init (GhbCompositorClass *class) gobject_class->set_property = ghb_compositor_set_property; gobject_class->get_property = ghb_compositor_get_property; +#if GTK_CHECK_VERSION(3, 0, 0) + widget_class->draw = ghb_compositor_draw; + widget_class->get_preferred_width = ghb_compositor_get_preferred_width; + widget_class->get_preferred_height = ghb_compositor_get_preferred_height; +#else widget_class->size_request = ghb_compositor_size_request; + widget_class->expose_event = ghb_compositor_expose; +#endif widget_class->size_allocate = ghb_compositor_size_allocate; widget_class->realize = ghb_compositor_realize; widget_class->unrealize = ghb_compositor_unrealize; - widget_class->expose_event = ghb_compositor_expose; - container_class->add = ghb_compositor_add; container_class->remove = ghb_compositor_remove; container_class->forall = ghb_compositor_forall; @@ -425,7 +441,7 @@ ghb_compositor_forall( GhbCompositorChild *cc; GList *link, *next; - for (link = compositor->children; link != NULL; link = link->next) + for (link = compositor->children; link != NULL; ) { // The callback may cause the link to be removed from the list. // So find next before calling callback @@ -487,11 +503,15 @@ ghb_compositor_realize (GtkWidget *widget) GdkWindow *window; if (visible_window) { - attributes.visual = gtk_widget_get_visual (widget); +#if GTK_CHECK_VERSION(3, 0, 0) + attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL; +#else + attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; attributes.colormap = gtk_widget_get_colormap (widget); +#endif + attributes.visual = gtk_widget_get_visual (widget); attributes.wclass = GDK_INPUT_OUTPUT; - attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; window = gdk_window_new(gtk_widget_get_parent_window (widget), &attributes, attributes_mask); @@ -505,11 +525,13 @@ ghb_compositor_realize (GtkWidget *widget) g_object_ref (window); } - widget->style = gtk_style_attach (widget->style, window); +#if !GTK_CHECK_VERSION(3, 0, 0) + gtk_widget_style_attach(widget); if (visible_window) gtk_style_set_background(widget->style, window, GTK_STATE_NORMAL); +#endif } static void @@ -518,6 +540,60 @@ ghb_compositor_unrealize (GtkWidget *widget) GTK_WIDGET_CLASS (ghb_compositor_parent_class)->unrealize (widget); } +#if GTK_CHECK_VERSION(3, 0, 0) +static void +ghb_compositor_get_preferred_width( + GtkWidget *widget, + gint *minimum_size, + gint *natural_size) +{ + GhbCompositor *compositor = GHB_COMPOSITOR (widget); + GList *link; + GhbCompositorChild *cc; + gint width = 0; + GtkRequisition min_size, size; + + for (link = compositor->children; link != NULL; link = link->next) + { + cc = (GhbCompositorChild*)link->data; + if (gtk_widget_get_visible(cc->widget)) + { + gtk_widget_get_preferred_size(cc->widget, &min_size, &size); + width = MAX(MAX(min_size.width, size.width), width); + } + } + + *minimum_size = width + gtk_container_get_border_width(GTK_CONTAINER (widget)) * 2; + *natural_size = width + gtk_container_get_border_width(GTK_CONTAINER (widget)) * 2; +} + +static void +ghb_compositor_get_preferred_height( + GtkWidget *widget, + gint *minimum_size, + gint *natural_size) +{ + GhbCompositor *compositor = GHB_COMPOSITOR (widget); + GList *link; + GhbCompositorChild *cc; + gint height = 0; + GtkRequisition min_size, size; + + for (link = compositor->children; link != NULL; link = link->next) + { + cc = (GhbCompositorChild*)link->data; + if (gtk_widget_get_visible(cc->widget)) + { + gtk_widget_get_preferred_size(cc->widget, &min_size, &size); + height = MAX(MAX(min_size.height, size.height), height); + } + } + + *minimum_size = height + gtk_container_get_border_width(GTK_CONTAINER (widget)) * 2; + *natural_size = height + gtk_container_get_border_width(GTK_CONTAINER (widget)) * 2; +} +#else + static void ghb_compositor_size_request( GtkWidget *widget, @@ -527,23 +603,24 @@ ghb_compositor_size_request( GList *link; GhbCompositorChild *cc; gint width = 0, height = 0; - GtkRequisition child_requisition; + GtkRequisition size; for (link = compositor->children; link != NULL; link = link->next) { cc = (GhbCompositorChild*)link->data; if (gtk_widget_get_visible(cc->widget)) { - gtk_widget_size_request(cc->widget, NULL); - gtk_widget_get_child_requisition(cc->widget, &child_requisition); - width = MAX(child_requisition.width, width); - height = MAX(child_requisition.height, height); + //gtk_widget_size_request(cc->widget, NULL); + gtk_widget_size_request(cc->widget, &size); + width = MAX(size.width, width); + height = MAX(size.height, height); } } requisition->width = width + gtk_container_get_border_width(GTK_CONTAINER (widget)) * 2; requisition->height = height + gtk_container_get_border_width(GTK_CONTAINER (widget)) * 2; } +#endif static void ghb_compositor_size_allocate (GtkWidget *widget, GtkAllocation *allocation) @@ -553,7 +630,7 @@ ghb_compositor_size_allocate (GtkWidget *widget, GtkAllocation *allocation) GhbCompositorChild *cc; GList *link; - widget->allocation = *allocation; + gtk_widget_set_allocation(widget, allocation); compositor = GHB_COMPOSITOR (widget); if (!gtk_widget_get_has_window(widget)) @@ -593,6 +670,90 @@ ghb_compositor_size_allocate (GtkWidget *widget, GtkAllocation *allocation) } } +#if 0 +static void showrects(cairo_region_t *region) +{ + cairo_rectangle_int_t rect; + int ii; + int count = cairo_region_num_rectangles(region); + + printf("rect count %d\n", count); + for (ii = 0; ii < count; ii++) + { + cairo_region_get_rectangle(region, ii, &rect); + printf("rect %d: %d,%d %dx%d\n", + ii, rect.x, rect.y, rect.width, rect.height); + } +} +#endif + +#if GTK_CHECK_VERSION(3, 0, 0) +static void +ghb_compositor_blend (GtkWidget *widget, cairo_t *cr) +{ + GhbCompositor *compositor = GHB_COMPOSITOR (widget); + GList *link, *draw; + cairo_region_t *region; + GtkWidget *child; + GhbCompositorChild *cc; + + if (compositor->children == NULL) return; + /* create a cairo context to draw to the window */ + + for (link = compositor->children; link != NULL; link = link->next) + { + cc = (GhbCompositorChild*)link->data; + for (draw = cc->drawables; draw != NULL; draw = draw->next) + { + GtkAllocation child_alloc; + + /* get our child */ + child = GTK_WIDGET(draw->data); + + if ( +//!gtk_cairo_should_draw_window(cr, gtk_widget_get_window(child)) || + !gtk_widget_get_visible(cc->widget) || + !gtk_widget_get_visible(child)) + continue; + + gtk_widget_get_allocation(child, &child_alloc); + cairo_save(cr); + + /* the source data is the (composited) event box */ + gdk_cairo_set_source_window(cr, gtk_widget_get_window(child), + child_alloc.x, + child_alloc.y); + + cairo_rectangle_int_t rect; + + rect.x = child_alloc.x; + rect.y = child_alloc.y; + rect.width = child_alloc.width; + rect.height = child_alloc.height; + + /* draw no more than our expose event intersects our child */ + region = cairo_region_create_rectangle(&rect); + + cairo_region_t *dregion = gdk_window_get_visible_region( + gtk_widget_get_window(child)); + cairo_region_translate(dregion, child_alloc.x, child_alloc.y); + cairo_region_intersect(region, dregion); + cairo_region_destroy(dregion); + + gdk_cairo_region(cr, region); + cairo_region_destroy(region); + cairo_clip(cr); + + /* composite, with an opacity */ + cairo_set_operator(cr, CAIRO_OPERATOR_OVER); + cairo_paint_with_alpha(cr, cc->opacity); + + cairo_restore(cr); + } + } + /* we're done */ +} +#else static void ghb_compositor_blend (GtkWidget *widget, GdkEventExpose *event) { @@ -631,6 +792,7 @@ ghb_compositor_blend (GtkWidget *widget, GdkEventExpose *event) gtk_widget_get_window(child)); gdk_region_offset(dregion, child->allocation.x, child->allocation.y); gdk_region_intersect (region, dregion); + gdk_region_destroy(dregion); gdk_cairo_region (cr, region); gdk_region_destroy(region); @@ -644,7 +806,23 @@ ghb_compositor_blend (GtkWidget *widget, GdkEventExpose *event) /* we're done */ cairo_destroy (cr); } +#endif +#if GTK_CHECK_VERSION(3, 0, 0) +static gboolean +ghb_compositor_draw(GtkWidget *widget, cairo_t *cr) +{ + if (gtk_widget_is_drawable(widget)) + { + if (gtk_widget_get_has_window(widget)) + ghb_compositor_blend (widget, cr); + + } + GTK_WIDGET_CLASS(ghb_compositor_parent_class)->draw(widget, cr); + + return FALSE; +} +#else static gboolean ghb_compositor_expose (GtkWidget *widget, GdkEventExpose *event) { @@ -659,3 +837,4 @@ ghb_compositor_expose (GtkWidget *widget, GdkEventExpose *event) return FALSE; } +#endif diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c index 5ab946f9b..3426e5adc 100644 --- a/gtk/src/hb-backend.c +++ b/gtk/src/hb-backend.c @@ -883,7 +883,7 @@ static const gchar* lookup_mix_option(const GValue *mix) { gint ii; - gchar *result = "None"; + const gchar *result = "None"; if (G_VALUE_TYPE(mix) == G_TYPE_STRING) @@ -920,7 +920,7 @@ static const gchar* lookup_mix_string(const GValue *mix) { gint ii; - gchar *result = "none"; + const gchar *result = "none"; if (G_VALUE_TYPE(mix) == G_TYPE_STRING) @@ -1696,7 +1696,7 @@ init_combo_box(GtkBuilder *builder, const gchar *name) G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_STRING); gtk_combo_box_set_model(combo, GTK_TREE_MODEL(store)); - if (G_OBJECT_TYPE(combo) == GTK_TYPE_COMBO_BOX) + if (!gtk_combo_box_get_has_entry(combo)) { gtk_cell_layout_clear(GTK_CELL_LAYOUT(combo)); cell = GTK_CELL_RENDERER(gtk_cell_renderer_text_new()); @@ -1706,7 +1706,7 @@ init_combo_box(GtkBuilder *builder, const gchar *name) } else { // Combo box entry - gtk_combo_box_entry_set_text_column(GTK_COMBO_BOX_ENTRY(combo), 0); + gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(combo), 0); } } @@ -3354,7 +3354,7 @@ audio_bitrate_opts_add(GtkBuilder *builder, const gchar *name, gint rate) if (ghb_audio_bitrates[hb_audio_bitrates_count].string) { - g_free(ghb_audio_bitrates[hb_audio_bitrates_count].string); + g_free((char*)ghb_audio_bitrates[hb_audio_bitrates_count].string); } ghb_audio_bitrates[hb_audio_bitrates_count].rate = rate; if (rate < 0) @@ -4209,7 +4209,7 @@ set_preview_job_settings(hb_job_t *job, GValue *settings) ghb_settings_combo_int(settings, "PictureModulus"); job->width = ghb_settings_get_int(settings, "scale_width"); job->height = ghb_settings_get_int(settings, "scale_height"); - if (ghb_settings_get_boolean(settings, "show_crop")) + if (ghb_settings_get_boolean(settings, "preview_show_crop")) { gdouble xscale = (gdouble)job->width / (gdouble)(job->title->width - job->crop[2] - job->crop[3]); @@ -4565,7 +4565,7 @@ ghb_validate_audio(GValue *settings) gint mix = ghb_settings_combo_int (asettings, "AudioMixdown"); gint jj; - gchar *mix_unsup = NULL; + const gchar *mix_unsup = NULL; if (!hb_mixdown_is_supported(mix, codec, aconfig->in.channel_layout)) { for (jj = 0; jj < hb_audio_mixdowns_count; jj++) @@ -5577,7 +5577,7 @@ ghb_get_preview_image( } GdkPixbuf *scaled_preview; scaled_preview = gdk_pixbuf_scale_simple(preview, dstWidth, dstHeight, GDK_INTERP_HYPER); - if (ghb_settings_get_boolean(settings, "show_crop")) + if (ghb_settings_get_boolean(settings, "preview_show_crop")) { c0 *= yscale; c1 *= yscale; diff --git a/gtk/src/internal_defaults.xml b/gtk/src/internal_defaults.xml index f403b763d..7ac06d3e8 100644 --- a/gtk/src/internal_defaults.xml +++ b/gtk/src/internal_defaults.xml @@ -58,7 +58,7 @@ <integer>0</integer> <key>scale_width</key> <integer>0</integer> - <key>show_crop</key> + <key>preview_show_crop</key> <false /> <key>hide_settings</key> <false /> diff --git a/gtk/src/main.c b/gtk/src/main.c index 3936da982..77cb439d6 100644 --- a/gtk/src/main.c +++ b/gtk/src/main.c @@ -76,9 +76,9 @@ #ifdef ENABLE_NLS # include <libintl.h> # undef _ -# define _(String) dgettext (PACKAGE, String) +# define _(String) dgettext(PACKAGE, String) # ifdef gettext_noop -# define N_(String) gettext_noop (String) +# define N_(String) gettext_noop(String) # else # define N_(String) (String) # endif @@ -108,7 +108,7 @@ create_builder_or_die(const gchar * name) "\n" "Internal error. Could not parse UI description.\n" "%s"); - g_debug("create_builder_or_die ()\n"); + g_debug("create_builder_or_die()\n"); GtkBuilder *xml = gtk_builder_new(); gval = ghb_resource_get("ghb-ui"); ghb_ui = g_value_get_string(gval); @@ -215,15 +215,15 @@ extern G_MODULE_EXPORT void chapter_keypress_cb(void); // Create and bind the tree model to the tree view for the chapter list // Also, connect up the signal that lets us know the selection has changed static void -bind_chapter_tree_model (signal_user_data_t *ud) +bind_chapter_tree_model(signal_user_data_t *ud) { GtkCellRenderer *cell; GtkTreeViewColumn *column; GtkListStore *treestore; GtkTreeView *treeview; - g_debug("bind_chapter_tree_model ()\n"); - treeview = GTK_TREE_VIEW(GHB_WIDGET (ud->builder, "chapters_list")); + g_debug("bind_chapter_tree_model()\n"); + treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "chapters_list")); treestore = gtk_list_store_new(4, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN); gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(treestore)); @@ -257,7 +257,7 @@ extern G_MODULE_EXPORT void queue_drag_motion_cb(void); // Create and bind the tree model to the tree view for the queue list // Also, connect up the signal that lets us know the selection has changed static void -bind_queue_tree_model (signal_user_data_t *ud) +bind_queue_tree_model(signal_user_data_t *ud) { GtkCellRenderer *cell, *textcell; GtkTreeViewColumn *column; @@ -268,37 +268,37 @@ bind_queue_tree_model (signal_user_data_t *ud) SrcEntry.target = "DATA"; SrcEntry.flags = GTK_TARGET_SAME_WIDGET; - g_debug("bind_queue_tree_model ()\n"); - treeview = GTK_TREE_VIEW(GHB_WIDGET (ud->builder, "queue_list")); - selection = gtk_tree_view_get_selection (treeview); + g_debug("bind_queue_tree_model()\n"); + treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "queue_list")); + selection = gtk_tree_view_get_selection(treeview); treestore = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(treestore)); column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_title (column, _("Job Information")); + gtk_tree_view_column_set_title(column, _("Job Information")); cell = gtk_cell_renderer_pixbuf_new(); g_object_set(cell, "yalign", 0.0, NULL); - gtk_tree_view_column_pack_start (column, cell, FALSE); - gtk_tree_view_column_add_attribute (column, cell, "icon-name", 0); + gtk_tree_view_column_pack_start(column, cell, FALSE); + gtk_tree_view_column_add_attribute(column, cell, "icon-name", 0); textcell = gtk_cell_renderer_text_new(); g_object_set(textcell, "wrap-mode", PANGO_WRAP_CHAR, NULL); g_object_set(textcell, "wrap-width", 500, NULL); - gtk_tree_view_column_pack_start (column, textcell, TRUE); - gtk_tree_view_column_add_attribute (column, textcell, "markup", 1); + gtk_tree_view_column_pack_start(column, textcell, TRUE); + gtk_tree_view_column_add_attribute(column, textcell, "markup", 1); gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column)); - gtk_tree_view_column_set_expand (column, TRUE); - gtk_tree_view_column_set_max_width (column, 550); + gtk_tree_view_column_set_expand(column, TRUE); + gtk_tree_view_column_set_max_width(column, 550); cell = custom_cell_renderer_button_new(); g_object_set(cell, "yalign", 0.0, NULL); column = gtk_tree_view_column_new_with_attributes( _(""), cell, "icon-name", 2, NULL); - gtk_tree_view_column_set_min_width (column, 24); + gtk_tree_view_column_set_min_width(column, 24); gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column)); - gtk_tree_view_enable_model_drag_dest (treeview, &SrcEntry, 1, + gtk_tree_view_enable_model_drag_dest(treeview, &SrcEntry, 1, GDK_ACTION_MOVE); - gtk_tree_view_enable_model_drag_source (treeview, GDK_BUTTON1_MASK, + gtk_tree_view_enable_model_drag_source(treeview, GDK_BUTTON1_MASK, &SrcEntry, 1, GDK_ACTION_MOVE); g_signal_connect(selection, "changed", queue_list_selection_changed_cb, ud); @@ -314,7 +314,7 @@ extern G_MODULE_EXPORT void audio_list_selection_changed_cb(void); // Create and bind the tree model to the tree view for the audio track list // Also, connect up the signal that lets us know the selection has changed static void -bind_audio_tree_model (signal_user_data_t *ud) +bind_audio_tree_model(signal_user_data_t *ud) { GtkCellRenderer *cell; GtkTreeViewColumn *column; @@ -323,9 +323,9 @@ bind_audio_tree_model (signal_user_data_t *ud) GtkTreeSelection *selection; GtkWidget *widget; - g_debug("bind_audio_tree_model ()\n"); - treeview = GTK_TREE_VIEW(GHB_WIDGET (ud->builder, "audio_list")); - selection = gtk_tree_view_get_selection (treeview); + g_debug("bind_audio_tree_model()\n"); + treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "audio_list")); + selection = gtk_tree_view_get_selection(treeview); // 12 columns in model. 6 are visible, the other 6 are for storing // values that I need treestore = gtk_list_store_new(7, G_TYPE_STRING, G_TYPE_STRING, @@ -337,32 +337,32 @@ bind_audio_tree_model (signal_user_data_t *ud) column = gtk_tree_view_column_new_with_attributes( _("Track"), cell, "text", 0, NULL); gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column)); - gtk_tree_view_column_set_min_width (column, 200); - gtk_tree_view_column_set_max_width (column, 200); + gtk_tree_view_column_set_min_width(column, 200); + gtk_tree_view_column_set_max_width(column, 200); cell = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( _("Codec"), cell, "text", 1, NULL); gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column)); - gtk_tree_view_column_set_min_width (column, 110); + gtk_tree_view_column_set_min_width(column, 110); cell = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( _("Bitrate"), cell, "text", 2, NULL); gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column)); - gtk_tree_view_column_set_min_width (column, 50); + gtk_tree_view_column_set_min_width(column, 50); cell = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( _("Sample Rate"), cell, "text", 3, NULL); gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column)); - gtk_tree_view_column_set_min_width (column, 100); + gtk_tree_view_column_set_min_width(column, 100); cell = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( _("Mix"), cell, "text", 4, NULL); gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column)); - gtk_tree_view_column_set_min_width (column, 115); + gtk_tree_view_column_set_min_width(column, 115); cell = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( @@ -377,7 +377,7 @@ bind_audio_tree_model (signal_user_data_t *ud) g_signal_connect(selection, "changed", audio_list_selection_changed_cb, ud); // Need to disable remove and update buttons since there are initially // no selections - widget = GHB_WIDGET (ud->builder, "audio_remove"); + widget = GHB_WIDGET(ud->builder, "audio_remove"); gtk_widget_set_sensitive(widget, FALSE); g_debug("Done\n"); } @@ -390,7 +390,7 @@ extern G_MODULE_EXPORT void subtitle_default_toggled_cb(void); // Create and bind the tree model to the tree view for the subtitle track list // Also, connect up the signal that lets us know the selection has changed static void -bind_subtitle_tree_model (signal_user_data_t *ud) +bind_subtitle_tree_model(signal_user_data_t *ud) { GtkCellRenderer *cell; GtkTreeViewColumn *column; @@ -399,9 +399,9 @@ bind_subtitle_tree_model (signal_user_data_t *ud) GtkTreeSelection *selection; GtkWidget *widget; - g_debug("bind_subtitle_tree_model ()\n"); - treeview = GTK_TREE_VIEW(GHB_WIDGET (ud->builder, "subtitle_list")); - selection = gtk_tree_view_get_selection (treeview); + g_debug("bind_subtitle_tree_model()\n"); + treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "subtitle_list")); + selection = gtk_tree_view_get_selection(treeview); // 6 columns in model. 5 are visible, the other 1 is for storing // values that I need // Track, force, burn, default, type, srt offset, track short, source @@ -420,8 +420,8 @@ bind_subtitle_tree_model (signal_user_data_t *ud) column = gtk_tree_view_column_new_with_attributes( _("Track"), cell, "text", 0, NULL); gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column)); - gtk_tree_view_column_set_min_width (column, 350); - gtk_tree_view_column_set_max_width (column, 350); + gtk_tree_view_column_set_min_width(column, 350); + gtk_tree_view_column_set_max_width(column, 350); cell = gtk_cell_renderer_toggle_new(); column = gtk_tree_view_column_new_with_attributes( @@ -452,7 +452,7 @@ bind_subtitle_tree_model (signal_user_data_t *ud) g_signal_connect(selection, "changed", subtitle_list_selection_changed_cb, ud); // Need to disable remove and update buttons since there are initially // no selections - widget = GHB_WIDGET (ud->builder, "subtitle_remove"); + widget = GHB_WIDGET(ud->builder, "subtitle_remove"); gtk_widget_set_sensitive(widget, FALSE); g_debug("Done\n"); } @@ -466,7 +466,7 @@ extern void presets_row_expanded_cb(void); // Create and bind the tree model to the tree view for the preset list // Also, connect up the signal that lets us know the selection has changed static void -bind_presets_tree_model (signal_user_data_t *ud) +bind_presets_tree_model(signal_user_data_t *ud) { GtkCellRenderer *cell; GtkTreeViewColumn *column; @@ -478,9 +478,9 @@ bind_presets_tree_model (signal_user_data_t *ud) SrcEntry.target = "DATA"; SrcEntry.flags = GTK_TARGET_SAME_WIDGET; - g_debug("bind_presets_tree_model ()\n"); - treeview = GTK_TREE_VIEW(GHB_WIDGET (ud->builder, "presets_list")); - selection = gtk_tree_view_get_selection (treeview); + g_debug("bind_presets_tree_model()\n"); + treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "presets_list")); + selection = gtk_tree_view_get_selection(treeview); treestore = gtk_tree_store_new(6, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN); gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(treestore)); @@ -493,12 +493,12 @@ bind_presets_tree_model (signal_user_data_t *ud) g_signal_connect(cell, "edited", preset_edited_cb, ud); gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column)); - gtk_tree_view_column_set_expand (column, TRUE); - gtk_tree_view_set_tooltip_column (treeview, 4); + gtk_tree_view_column_set_expand(column, TRUE); + gtk_tree_view_set_tooltip_column(treeview, 4); - gtk_tree_view_enable_model_drag_dest (treeview, &SrcEntry, 1, + gtk_tree_view_enable_model_drag_dest(treeview, &SrcEntry, 1, GDK_ACTION_MOVE); - gtk_tree_view_enable_model_drag_source (treeview, GDK_BUTTON1_MASK, + gtk_tree_view_enable_model_drag_source(treeview, GDK_BUTTON1_MASK, &SrcEntry, 1, GDK_ACTION_MOVE); g_signal_connect(treeview, "drag_data_received", presets_drag_cb, ud); @@ -506,7 +506,7 @@ bind_presets_tree_model (signal_user_data_t *ud) g_signal_connect(treeview, "row_expanded", presets_row_expanded_cb, ud); g_signal_connect(treeview, "row_collapsed", presets_row_expanded_cb, ud); g_signal_connect(selection, "changed", presets_list_selection_changed_cb, ud); - widget = GHB_WIDGET (ud->builder, "presets_remove"); + widget = GHB_WIDGET(ud->builder, "presets_remove"); gtk_widget_set_sensitive(widget, FALSE); g_debug("Done\n"); } @@ -649,7 +649,7 @@ IoRedirect(signal_user_data_t *ud) g_free(path); g_free(config); // Set encoding to raw. - g_io_channel_set_encoding (ud->activity_log, NULL, NULL); + g_io_channel_set_encoding(ud->activity_log, NULL, NULL); // redirect stderr to the writer end of the pipe #if defined(_WIN32) // dup2 doesn't work on windows for some stupid reason @@ -658,12 +658,12 @@ IoRedirect(signal_user_data_t *ud) dup2(pfd[1], /*stderr*/2); #endif setvbuf(stderr, NULL, _IONBF, 0); - channel = g_io_channel_unix_new (pfd[0]); + channel = g_io_channel_unix_new(pfd[0]); // I was getting an this error: // "Invalid byte sequence in conversion input" // Set disable encoding on the channel. - g_io_channel_set_encoding (channel, NULL, NULL); - g_io_add_watch (channel, G_IO_IN, ghb_log_cb, (gpointer)ud ); + g_io_channel_set_encoding(channel, NULL, NULL); + g_io_add_watch(channel, G_IO_IN, ghb_log_cb, (gpointer)ud ); } typedef struct @@ -706,14 +706,14 @@ watch_volumes(signal_user_data_t *ud) { #if !defined(_WIN32) GVolumeMonitor *gvm; - gvm = g_volume_monitor_get (); + gvm = g_volume_monitor_get(); g_signal_connect(gvm, "drive-changed", (GCallback)drive_changed_cb, ud); #else GdkWindow *window; GtkWidget *widget; - widget = GHB_WIDGET (ud->builder, "hb_window"); + widget = GHB_WIDGET(ud->builder, "hb_window"); window = gtk_widget_get_parent_window(widget); gdk_window_add_filter(window, win_message_cb, ud); #endif @@ -721,8 +721,74 @@ watch_volumes(signal_user_data_t *ud) G_MODULE_EXPORT void x264_entry_changed_cb(GtkWidget *widget, signal_user_data_t *ud); G_MODULE_EXPORT void x264_option_changed_cb(GtkWidget *widget, signal_user_data_t *ud); -void preview_window_expose_cb(void); +G_MODULE_EXPORT void position_overlay_cb(GtkWidget *widget, signal_user_data_t *ud); +G_MODULE_EXPORT void preview_hud_size_alloc_cb(GtkWidget *widget, signal_user_data_t *ud); + +#if GTK_CHECK_VERSION(3, 0, 0) +const gchar *MyCSS = +" \n\ +GtkComboBox { \n\ + padding: 1px; \n\ +} \n\ +GtkEntry { \n\ + padding: 4px; \n\ +} \n\ + \n\ +@define-color black #000000; \n\ +@define-color gray18 #2e2e2e; \n\ +@define-color gray22 #383838; \n\ +@define-color gray26 #424242; \n\ +@define-color gray32 #525252; \n\ +@define-color gray40 #666666; \n\ +@define-color gray46 #757575; \n\ +@define-color white #ffffff; \n\ + \n\ +#preview_event_box, \n\ +#live_preview_play, \n\ +#live_encode_progress, \n\ +#live_duration, \n\ +#preview_fullscreen, \n\ +#hide_settings \n\ +{ \n\ + background: @black; \n\ + background-color: @gray18; \n\ + border-color: @white; \n\ + color: @white; \n\ +} \n\ + \n\ +#preview_show_crop \n\ +{ \n\ + background-color: @gray22; \n\ + border-color: @white; \n\ + color: @white; \n\ +} \n\ + \n\ +#live_preview_progress, \n\ +#preview_frame \n\ +{ \n\ + background: @black; \n\ + background-color: @black; \n\ + color: @white; \n\ +} \n\ + \n\ +#preview_fullscreen:prelight, \n\ +#hide_settings:prelight \n\ +{ \n\ + background: @black; \n\ + background-color: @gray32; \n\ + color: @white; \n\ +} \n\ + \n\ +#preview_fullscreen:active, \n\ +#hide_settings:active \n\ +{ \n\ + background: @black; \n\ + background-color: @gray32; \n\ + color: @white; \n\ +} \n\ +"; +#else // Some style definitions for the preview window and hud const gchar *hud_rcstyle = "style \"ghb-entry\" {\n" @@ -752,13 +818,14 @@ const gchar *hud_rcstyle = "widget_class \"*.GtkEntry\" style \"ghb-entry\"\n" "widget \"preview_window.*.preview_hud.*\" style \"ghb-hud\"\n" "widget \"preview_window\" style \"ghb-preview\"\n"; +#endif #if GTK_CHECK_VERSION(2, 16, 0) extern G_MODULE_EXPORT void status_icon_query_tooltip_cb(void); #endif int -main (int argc, char *argv[]) +main(int argc, char *argv[]) { signal_user_data_t *ud; GValue *preset; @@ -766,20 +833,23 @@ main (int argc, char *argv[]) GOptionContext *context; #ifdef ENABLE_NLS - bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); - textdomain (GETTEXT_PACKAGE); + bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); + bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); + textdomain(GETTEXT_PACKAGE); #endif - if (!g_thread_supported()) - g_thread_init(NULL); - context = g_option_context_new ("- Transcode media formats"); - g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); - g_option_context_add_group (context, gtk_get_option_group (TRUE)); + context = g_option_context_new("- Transcode media formats"); + g_option_context_add_main_entries(context, entries, GETTEXT_PACKAGE); + g_option_context_add_group(context, gtk_get_option_group(TRUE)); #if defined(_ENABLE_GST) - g_option_context_add_group (context, gst_init_get_option_group ()); + g_option_context_add_group(context, gst_init_get_option_group()); #endif - g_option_context_parse (context, &argc, &argv, &error); + g_option_context_parse(context, &argc, &argv, &error); + if (error != NULL) + { + g_warning("%s: %s", G_STRFUNC, error->message); + g_clear_error(&error); + } g_option_context_free(context); if (argc > 1 && dvd_device == NULL && argv[1][0] != '-') @@ -787,8 +857,27 @@ main (int argc, char *argv[]) dvd_device = argv[1]; } - gtk_init (&argc, &argv); + gtk_init(&argc, &argv); + +#if GTK_CHECK_VERSION(3, 0, 0) + GtkCssProvider *css = gtk_css_provider_new(); + error = NULL; + gtk_css_provider_load_from_data(css, MyCSS, -1, &error); + if (error == NULL) + { + GdkScreen *ss = gdk_screen_get_default(); + gtk_style_context_add_provider_for_screen(ss, GTK_STYLE_PROVIDER(css), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + } + else + { + g_warning("%s: %s", G_STRFUNC, error->message); + g_clear_error(&error); + } +#else gtk_rc_parse_string(hud_rcstyle); +#endif + g_type_class_unref(g_type_class_ref(GTK_TYPE_BUTTON)); g_object_set(gtk_settings_get_default(), "gtk-button-images", TRUE, NULL); #if !defined(_WIN32) @@ -806,13 +895,13 @@ main (int argc, char *argv[]) ghb_write_pid_file(); ud = g_malloc0(sizeof(signal_user_data_t)); ud->debug = ghb_debug; - g_log_set_handler (NULL, G_LOG_LEVEL_DEBUG, debug_log_handler, ud); - g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, warn_log_handler, ud); - //g_log_set_handler ("Gtk", G_LOG_LEVEL_CRITICAL, warn_log_handler, ud); + g_log_set_handler(NULL, G_LOG_LEVEL_DEBUG, debug_log_handler, ud); + g_log_set_handler("Gtk", G_LOG_LEVEL_WARNING, warn_log_handler, ud); + //g_log_set_handler("Gtk", G_LOG_LEVEL_CRITICAL, warn_log_handler, ud); ud->settings = ghb_settings_new(); - ud->builder = create_builder_or_die (BUILDER_NAME); + ud->builder = create_builder_or_die(BUILDER_NAME); // Enable events that alert us to media change events - watch_volumes (ud); + watch_volumes(ud); //GtkWidget *widget = GHB_WIDGET(ud->builder, "PictureDetelecineCustom"); //gtk_entry_set_inner_border(widget, 2); @@ -825,18 +914,54 @@ main (int argc, char *argv[]) gtk_widget_hide(widget); #endif + // Must set the names of the widgets that I want to modify + // style for. + gtk_widget_set_name(GHB_WIDGET(ud->builder, "preview_event_box"), "preview_event_box"); + gtk_widget_set_name(GHB_WIDGET(ud->builder, "preview_frame"), "preview_frame"); + gtk_widget_set_name(GHB_WIDGET(ud->builder, "live_preview_play"), "live_preview_play"); + gtk_widget_set_name(GHB_WIDGET(ud->builder, "live_preview_progress"), "live_preview_progress"); + gtk_widget_set_name(GHB_WIDGET(ud->builder, "live_encode_progress"), "live_encode_progress"); + gtk_widget_set_name(GHB_WIDGET(ud->builder, "live_duration"), "live_duration"); + gtk_widget_set_name(GHB_WIDGET(ud->builder, "preview_show_crop"), "preview_show_crop"); + gtk_widget_set_name(GHB_WIDGET(ud->builder, "preview_fullscreen"), "preview_fullscreen"); + gtk_widget_set_name(GHB_WIDGET(ud->builder, "hide_settings"), "hide_settings"); widget = GHB_WIDGET(ud->builder, "preview_hud"); gtk_widget_set_name(widget, "preview_hud"); widget = GHB_WIDGET(ud->builder, "preview_window"); gtk_widget_set_name(widget, "preview_window"); // Set up the "hud" control overlay for the preview window - GtkWidget *draw, *hud, *blender, *align; + GtkWidget *align, *draw, *hud, *blender; align = GHB_WIDGET(ud->builder, "preview_window_alignment"); draw = GHB_WIDGET(ud->builder, "preview_image_align"); hud = GHB_WIDGET(ud->builder, "preview_hud"); +#if 0 // wGTK_CHECK_VERSION(3, 0, 0) + // This uses the new GtkOverlay widget. + // + // Unfortunately, GtkOverlay is broken in a couple of ways. + // + // First, it doesn't respect gtk_widget_shape_combine_region() + // on it's child overlays. It appears to just ignore the clip + // mask of the child. + // + // Second, it doesn't respect window opacity. + // + // So for now, I'll just continue using my home-grown overlay + // widget (GhbCompositor). + blender = gtk_overlay_new(); + gtk_container_add(GTK_CONTAINER(align), blender); + gtk_container_add(GTK_CONTAINER(blender), draw); + gtk_widget_set_valign (hud, GTK_ALIGN_END); + gtk_widget_set_halign (hud, GTK_ALIGN_CENTER); + gtk_overlay_add_overlay(GTK_OVERLAY(blender), hud); + + g_signal_connect(G_OBJECT(blender), "get-child-position", + G_CALLBACK(position_overlay_cb), ud); + + gtk_widget_show(blender); +#else // Set up compositing for hud blender = ghb_compositor_new(); @@ -844,6 +969,7 @@ main (int argc, char *argv[]) ghb_compositor_zlist_insert(GHB_COMPOSITOR(blender), draw, 1, 1); ghb_compositor_zlist_insert(GHB_COMPOSITOR(blender), hud, 2, .85); gtk_widget_show(blender); +#endif // Redirect stderr to the activity window ghb_preview_init(ud); @@ -856,12 +982,12 @@ main (int argc, char *argv[]) // since it can't be done automatically GtkTextView *textview; GtkTextBuffer *buffer; - textview = GTK_TEXT_VIEW(GHB_WIDGET (ud->builder, "x264Option")); - buffer = gtk_text_view_get_buffer (textview); + textview = GTK_TEXT_VIEW(GHB_WIDGET(ud->builder, "x264Option")); + buffer = gtk_text_view_get_buffer(textview); g_signal_connect(buffer, "changed", (GCallback)x264_entry_changed_cb, ud); - textview = GTK_TEXT_VIEW(GHB_WIDGET (ud->builder, "x264OptionExtra")); - buffer = gtk_text_view_get_buffer (textview); + textview = GTK_TEXT_VIEW(GHB_WIDGET(ud->builder, "x264OptionExtra")); + buffer = gtk_text_view_get_buffer(textview); g_signal_connect(buffer, "changed", (GCallback)x264_option_changed_cb, ud); ghb_combo_init(ud); @@ -877,14 +1003,14 @@ main (int argc, char *argv[]) // Connect up the signals to their callbacks // I wrote my own connector so that I could pass user data // to the callbacks. Builder's standard autoconnect doesn't all this. - gtk_builder_connect_signals_full (ud->builder, MyConnect, ud); + gtk_builder_connect_signals_full(ud->builder, MyConnect, ud); GtkWidget *presetSlider = GHB_WIDGET(ud->builder, "x264PresetSlider"); const char * const *x264_presets; int count = 0; x264_presets = hb_x264_presets(); while (x264_presets && x264_presets[count]) count++; - gtk_range_set_range (GTK_RANGE(presetSlider), 0, count-1); + gtk_range_set_range(GTK_RANGE(presetSlider), 0, count-1); // Load all internal settings ghb_settings_init(ud); @@ -927,7 +1053,7 @@ main (int argc, char *argv[]) } // Grey out widgets that are dependent on a disabled feature - ghb_check_all_depencencies (ud); + ghb_check_all_depencencies(ud); if (dvd_device != NULL) { @@ -939,11 +1065,11 @@ main (int argc, char *argv[]) g_idle_add((GSourceFunc)ghb_reload_queue, ud); // Start timer for monitoring libhb status, 500ms - g_timeout_add (500, ghb_timer_cb, (gpointer)ud); + g_timeout_add(500, ghb_timer_cb, (gpointer)ud); // Add dvd devices to File menu ghb_volname_cache_init(); - g_thread_create((GThreadFunc)ghb_cache_volnames, ud, FALSE, NULL); + g_thread_new("Cache Volume Names", (GThreadFunc)ghb_cache_volnames, ud); #if defined(_USE_APP_IND) GtkUIManager * uim = GTK_UI_MANAGER(GHB_OBJECT(ud->builder, "uimanager1")); @@ -982,19 +1108,32 @@ main (int argc, char *argv[]) // Ugly hack to keep subtitle table from bouncing around as I change // which set of controls are visible - GtkRequisition req; gint width, height; +#if GTK_CHECK_VERSION(3, 0, 0) + GtkRequisition min_size, size; widget = GHB_WIDGET(ud->builder, "SrtCodeset"); - gtk_widget_size_request( widget, &req ); - height = req.height; + gtk_widget_get_preferred_size( widget, &min_size, &size ); + height = MAX(min_size.height, size.height); widget = GHB_WIDGET(ud->builder, "srt_code_label"); - gtk_widget_size_request( widget, &req ); - height += req.height; + gtk_widget_get_preferred_size( widget, &min_size, &size ); + height += MAX(min_size.height, size.height); widget = GHB_WIDGET(ud->builder, "subtitle_table"); gtk_widget_set_size_request(widget, -1, height); +#else + GtkRequisition size; + + widget = GHB_WIDGET(ud->builder, "SrtCodeset"); + gtk_widget_size_request( widget, &size ); + height = size.height; + widget = GHB_WIDGET(ud->builder, "srt_code_label"); + gtk_widget_size_request( widget, &size ); + height += size.height; + widget = GHB_WIDGET(ud->builder, "subtitle_table"); + gtk_widget_set_size_request(widget, -1, height); +#endif - widget = GHB_WIDGET (ud->builder, "hb_window"); + widget = GHB_WIDGET(ud->builder, "hb_window"); GdkGeometry geo = { -1, -1, 1024, 768, -1, -1, 10, 10, 0, 0, GDK_GRAVITY_NORTH_WEST @@ -1111,14 +1250,14 @@ main (int argc, char *argv[]) gtk_file_chooser_set_filter(chooser, filter); PangoFontDescription *font_desc; - font_desc = pango_font_description_from_string ("monospace 10"); - textview = GTK_TEXT_VIEW(GHB_WIDGET (ud->builder, "activity_view")); + font_desc = pango_font_description_from_string("monospace 10"); + textview = GTK_TEXT_VIEW(GHB_WIDGET(ud->builder, "activity_view")); gtk_widget_modify_font(GTK_WIDGET(textview), font_desc); - pango_font_description_free (font_desc); + pango_font_description_free(font_desc); // Everything should be go-to-go. Lets rock! - gtk_main (); + gtk_main(); gtk_status_icon_set_visible(si, FALSE); ghb_backend_close(); if (ud->queue) diff --git a/gtk/src/preview.c b/gtk/src/preview.c index d8cfd64bf..f78004f2d 100644 --- a/gtk/src/preview.c +++ b/gtk/src/preview.c @@ -23,7 +23,11 @@ #if defined(_ENABLE_GST) #include <gst/gst.h> +#if GST_CHECK_VERSION(1, 0, 0) +#include <gst/video/videooverlay.h> +#else #include <gst/interfaces/xoverlay.h> +#endif #include <gst/video/video.h> #include <gst/pbutils/missing-plugins.h> #endif @@ -151,8 +155,13 @@ ghb_preview_init(signal_user_data_t *ud) ud->preview = g_malloc0(sizeof(preview_t)); ud->preview->view = GHB_WIDGET(ud->builder, "preview_image"); gtk_widget_realize(ud->preview->view); +#if GTK_CHECK_VERSION(3, 0, 0) + g_signal_connect(G_OBJECT(ud->preview->view), "draw", + G_CALLBACK(preview_expose_cb), ud); +#else g_signal_connect(G_OBJECT(ud->preview->view), "expose_event", G_CALLBACK(preview_expose_cb), ud); +#endif ud->preview->pause = TRUE; ud->preview->encode_frame = -1; @@ -209,7 +218,11 @@ ghb_preview_init(signal_user_data_t *ud) bus = gst_pipeline_get_bus(GST_PIPELINE(ud->preview->play)); gst_bus_add_watch(bus, live_preview_cb, ud); +#if GST_CHECK_VERSION(1, 0, 0) + gst_bus_set_sync_handler(bus, create_window, ud->preview, NULL); +#else gst_bus_set_sync_handler(bus, create_window, ud->preview); +#endif gst_object_unref(bus); ud->preview->live_enabled = 1; } @@ -241,6 +254,12 @@ create_window(GstBus *bus, GstMessage *msg, gpointer data) { case GST_MESSAGE_ELEMENT: { +#if GST_CHECK_VERSION(1, 0, 0) + if (!gst_is_video_overlay_prepare_window_handle_message(msg)) + return GST_BUS_PASS; + gst_video_overlay_set_window_handle( + GST_VIDEO_OVERLAY(GST_MESSAGE_SRC(msg)), preview->xid); +#else if (!gst_structure_has_name(msg->structure, "prepare-xwindow-id")) return GST_BUS_PASS; #if !defined(_WIN32) @@ -250,6 +269,7 @@ create_window(GstBus *bus, GstMessage *msg, gpointer data) gst_directdraw_sink_set_window_id( GST_X_OVERLAY(GST_MESSAGE_SRC(msg)), preview->xid); #endif +#endif gst_message_unref(msg); return GST_BUS_DROP; } break; @@ -261,52 +281,6 @@ create_window(GstBus *bus, GstMessage *msg, gpointer data) return GST_BUS_PASS; } -static GList * -get_stream_info_objects_for_type (GstElement *play, const gchar *typestr) -{ - GValueArray *info_arr = NULL; - GList *ret = NULL; - guint ii; - - if (play == NULL) - return NULL; - - g_object_get(play, "stream-info-value-array", &info_arr, NULL); - if (info_arr == NULL) - return NULL; - - for (ii = 0; ii < info_arr->n_values; ++ii) - { - GObject *info_obj; - GValue *val; - - val = g_value_array_get_nth(info_arr, ii); - info_obj = g_value_get_object(val); - if (info_obj) - { - GParamSpec *pspec; - GEnumValue *value; - gint type = -1; - - g_object_get(info_obj, "type", &type, NULL); - pspec = g_object_class_find_property( - G_OBJECT_GET_CLASS (info_obj), "type"); - value = g_enum_get_value( - G_PARAM_SPEC_ENUM (pspec)->enum_class, type); - if (value) - { - if (g_ascii_strcasecmp (value->value_nick, typestr) == 0 || - g_ascii_strcasecmp (value->value_name, typestr) == 0) - { - ret = g_list_prepend (ret, g_object_ref (info_obj)); - } - } - } - } - g_value_array_free (info_arr); - return g_list_reverse (ret); -} - static void caps_set(GstCaps *caps, signal_user_data_t *ud) { @@ -366,6 +340,87 @@ caps_set(GstCaps *caps, signal_user_data_t *ud) } } +#if GST_CHECK_VERSION(1, 0, 0) +static void +update_stream_info(signal_user_data_t *ud) +{ + GstPad *vpad = NULL; + gint n_video; + + g_object_get(G_OBJECT(ud->preview->play), "n-video", &n_video, NULL); + if (n_video > 0) + { + gint ii; + for (ii = 0; ii < n_video && vpad == NULL; ii++) + { + g_signal_emit_by_name(ud->preview->play, "get-video-pad", ii, &vpad); + } + } + + if (vpad) + { + GstCaps *caps; + + caps = gst_pad_get_current_caps(vpad); + if (caps) + { + caps_set(caps, ud); + gst_caps_unref(caps); + } + //g_signal_connect(vpad, "notify::caps", G_CALLBACK(caps_set_cb), preview); + gst_object_unref(vpad); + } +} + +#else + +static GList * +get_stream_info_objects_for_type (GstElement *play, const gchar *typestr) +{ + GValueArray *info_arr = NULL; + GList *ret = NULL; + guint ii; + + if (play == NULL) + return NULL; + + g_object_get(play, "stream-info-value-array", &info_arr, NULL); + if (info_arr == NULL) + return NULL; + + for (ii = 0; ii < info_arr->n_values; ++ii) + { + GObject *info_obj; + GValue *val; + + val = g_value_array_get_nth(info_arr, ii); + //val = &((GValue*)info_arr->values)[ii]; + info_obj = g_value_get_object(val); + if (info_obj) + { + GParamSpec *pspec; + GEnumValue *value; + gint type = -1; + + g_object_get(info_obj, "type", &type, NULL); + pspec = g_object_class_find_property( + G_OBJECT_GET_CLASS (info_obj), "type"); + value = g_enum_get_value( + G_PARAM_SPEC_ENUM (pspec)->enum_class, type); + if (value) + { + if (g_ascii_strcasecmp (value->value_nick, typestr) == 0 || + g_ascii_strcasecmp (value->value_name, typestr) == 0) + { + ret = g_list_prepend (ret, g_object_ref (info_obj)); + } + } + } + } + g_value_array_free (info_arr); + return g_list_reverse (ret); +} + static void update_stream_info(signal_user_data_t *ud) { @@ -397,6 +452,8 @@ update_stream_info(signal_user_data_t *ud) g_list_free(vstreams); } +#endif + G_MODULE_EXPORT gboolean live_preview_cb(GstBus *bus, GstMessage *msg, gpointer data) { @@ -404,8 +461,30 @@ live_preview_cb(GstBus *bus, GstMessage *msg, gpointer data) switch (GST_MESSAGE_TYPE(msg)) { + case GST_MESSAGE_UNKNOWN: + { + //printf("unknown"); + } break; + + case GST_MESSAGE_EOS: + { + // Done + GtkImage *img; + + //printf("eos"); + 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); + ud->preview->pause = TRUE; + gst_element_seek(ud->preview->play, 1.0, + GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, + GST_SEEK_TYPE_SET, 0, + GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE); + } break; + case GST_MESSAGE_ERROR: { + //printf("error\n"); GError *err; gchar *debug; @@ -415,8 +494,64 @@ live_preview_cb(GstBus *bus, GstMessage *msg, gpointer data) g_free(debug); } break; + case GST_MESSAGE_WARNING: + case GST_MESSAGE_INFO: + case GST_MESSAGE_TAG: + case GST_MESSAGE_BUFFERING: + case GST_MESSAGE_STATE_CHANGED: + { + GstState state, pending; + gst_element_get_state(ud->preview->play, &state, &pending, 0); + //printf("state change %x\n", state); + if (state == GST_STATE_PAUSED || state == GST_STATE_PLAYING) + { + update_stream_info(ud); + } + } break; + + case GST_MESSAGE_STATE_DIRTY: + { + //printf("state dirty\n"); + } break; + + case GST_MESSAGE_STEP_DONE: + { + //printf("step done\n"); + } break; + + case GST_MESSAGE_CLOCK_PROVIDE: + { + //printf("clock provide\n"); + } break; + + case GST_MESSAGE_CLOCK_LOST: + { + //printf("clock lost\n"); + } break; + + case GST_MESSAGE_NEW_CLOCK: + { + //printf("new clock\n"); + } break; + + case GST_MESSAGE_STRUCTURE_CHANGE: + { + //printf("structure change\n"); + } break; + + case GST_MESSAGE_STREAM_STATUS: + { + //printf("stream status\n"); + } break; + + case GST_MESSAGE_APPLICATION: + { + //printf("application\n"); + } break; + case GST_MESSAGE_ELEMENT: { + //printf("element\n"); if (gst_is_missing_plugin_message(msg)) { gst_element_set_state(ud->preview->play, GST_STATE_PAUSED); @@ -432,34 +567,85 @@ live_preview_cb(GstBus *bus, GstMessage *msg, gpointer data) } } break; - case GST_MESSAGE_STATE_CHANGED: + case GST_MESSAGE_SEGMENT_START: { - GstState state, pending; - gst_element_get_state(ud->preview->play, &state, &pending, 0); - if (state == GST_STATE_PAUSED || state == GST_STATE_PLAYING) - { - update_stream_info(ud); - } + //printf("segment start\n"); } break; - case GST_MESSAGE_EOS: + case GST_MESSAGE_SEGMENT_DONE: { - // Done - GtkImage *img; + //printf("segment done\n"); + } break; - 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); - ud->preview->pause = TRUE; - gst_element_seek(ud->preview->play, 1.0, - GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, - GST_SEEK_TYPE_SET, 0, - GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE); +#if GST_CHECK_VERSION(1, 0, 0) + case GST_MESSAGE_DURATION_CHANGED: + { + //printf("duration change\n"); + }; +#endif + + case GST_MESSAGE_LATENCY: + { + //printf("latency\n"); + }; + + case GST_MESSAGE_ASYNC_START: + { + //printf("async start\n"); + } break; + + case GST_MESSAGE_ASYNC_DONE: + { + //printf("async done\n"); } break; + case GST_MESSAGE_REQUEST_STATE: + { + //printf("request state\n"); + } break; + + case GST_MESSAGE_STEP_START: + { + //printf("step start\n"); + } break; + + case GST_MESSAGE_QOS: + { + //printf("qos\n"); + } break; + + case GST_MESSAGE_PROGRESS: + { + //printf("progress\n"); + } break; + +#if GST_CHECK_VERSION(1, 0, 0) + case GST_MESSAGE_TOC: + { + //printf("toc\n"); + } break; + + case GST_MESSAGE_RESET_TIME: + { + //printf("reset time\n"); + } break; + + case GST_MESSAGE_STREAM_START: + { + //printf("stream start\n"); + }; +#endif + + case GST_MESSAGE_ANY: + { + //printf("any\n"); + } break; + + default: { // Ignore + //printf("?msg? %x\n", GST_MESSAGE_TYPE(msg)); } } return TRUE; @@ -645,14 +831,22 @@ ghb_live_preview_progress(signal_user_data_t *ud) return; ud->preview->progress_lock = TRUE; +#if GST_CHECK_VERSION(1, 0, 0) + if (gst_element_query_duration(ud->preview->play, fmt, &len)) +#else if (gst_element_query_duration(ud->preview->play, &fmt, &len)) +#endif { if (len != -1 && fmt == GST_FORMAT_TIME) { ud->preview->len = len / GST_MSECOND; } } +#if GST_CHECK_VERSION(1, 0, 0) + if (gst_element_query_position(ud->preview->play, fmt, &pos)) +#else if (gst_element_query_position(ud->preview->play, &fmt, &pos)) +#endif { if (pos != -1 && fmt == GST_FORMAT_TIME) { @@ -798,6 +992,31 @@ ghb_set_preview_image(signal_user_data_t *ud) } #if defined(_ENABLE_GST) +#if GST_CHECK_VERSION(1, 0, 0) +G_MODULE_EXPORT gboolean +delayed_expose_cb(signal_user_data_t *ud) +{ + GstElement *vsink; + GstVideoOverlay *vover; + + if (!ud->preview->live_enabled) + return FALSE; + + g_object_get(ud->preview->play, "video-sink", &vsink, NULL); + if (vsink == NULL) + return FALSE; + + if (GST_IS_BIN(vsink)) + vover = GST_VIDEO_OVERLAY(gst_bin_get_by_interface( + GST_BIN(vsink), GST_TYPE_VIDEO_OVERLAY)); + else + vover = GST_VIDEO_OVERLAY(vsink); + gst_video_overlay_expose(vover); + // This function is initiated by g_idle_add. Must return false + // so that it is not called again + return FALSE; +} +#else G_MODULE_EXPORT gboolean delayed_expose_cb(signal_user_data_t *ud) { @@ -822,6 +1041,27 @@ delayed_expose_cb(signal_user_data_t *ud) return FALSE; } #endif +#endif + +#if GTK_CHECK_VERSION(3, 0, 0) +G_MODULE_EXPORT gboolean +position_overlay_cb( + GtkWidget *overlay, + GtkWidget *widget, + GdkRectangle *rect, + signal_user_data_t *ud) +{ + GtkRequisition min_size, size; + gtk_widget_get_preferred_size(widget, &min_size, &size); + + rect->width = MAX(min_size.width, size.width); + rect->height = MAX(min_size.height, size.height); + rect->x = MAX(0, ud->preview->width / 2 - rect->width / 2); + rect->y = MAX(0, ud->preview->height - rect->height - 50); + + return TRUE; +} +#endif G_MODULE_EXPORT gboolean preview_expose_cb( @@ -830,6 +1070,30 @@ preview_expose_cb( signal_user_data_t *ud) { #if defined(_ENABLE_GST) +#if GST_CHECK_VERSION(1, 0, 0) + if (ud->preview->live_enabled && ud->preview->state == PREVIEW_STATE_LIVE) + { + if (GST_STATE(ud->preview->play) >= GST_STATE_PAUSED) + { + GstElement *vsink; + GstVideoOverlay *vover; + + g_object_get(ud->preview->play, "video-sink", &vsink, NULL); + if (GST_IS_BIN(vsink)) + vover = GST_VIDEO_OVERLAY(gst_bin_get_by_interface( + GST_BIN(vsink), GST_TYPE_VIDEO_OVERLAY)); + else + vover = GST_VIDEO_OVERLAY(vsink); + gst_video_overlay_expose(vover); + // For some reason, the exposed region doesn't always get + // cleaned up here. But a delayed gst_x_overlay_expose() + // takes care of it. + g_idle_add((GSourceFunc)delayed_expose_cb, ud); + return FALSE; + } + return TRUE; + } +#else if (ud->preview->live_enabled && ud->preview->state == PREVIEW_STATE_LIVE) { if (GST_STATE(ud->preview->play) >= GST_STATE_PAUSED) @@ -853,10 +1117,12 @@ preview_expose_cb( return TRUE; } #endif +#endif if (ud->preview->pix != NULL) { - _draw_pixbuf(gtk_widget_get_window(widget), ud->preview->pix); + _draw_pixbuf(gtk_widget_get_window(ud->preview->view), ud->preview->pix); + //_draw_pixbuf(gtk_widget_get_window(widget), ud->preview->pix); } return TRUE; } @@ -1166,6 +1432,56 @@ preview_motion_cb( return FALSE; } +#if GTK_CHECK_VERSION(3, 0, 0) +cairo_region_t* +ghb_curved_rect_mask(gint width, gint height, gint radius) +{ + cairo_region_t *shape; + cairo_surface_t *surface; + cairo_t *cr; + double w, h; + + if (!width || !height) + return NULL; + + surface = cairo_image_surface_create(CAIRO_FORMAT_A8, width, height); + cr = cairo_create (surface); + + w = width; + h = height; + if (radius > width / 2) + radius = width / 2; + if (radius > height / 2) + radius = height / 2; + + // fill shape with black + cairo_save(cr); + cairo_rectangle (cr, 0, 0, width, height); + cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR); + cairo_fill (cr); + cairo_restore (cr); + + cairo_move_to (cr, 0, radius); + cairo_curve_to (cr, 0 , 0, 0 , 0, radius, 0); + cairo_line_to (cr, w - radius, 0); + cairo_curve_to (cr, w, 0, w, 0, w, radius); + cairo_line_to (cr, w , h - radius); + cairo_curve_to (cr, w, h, w, h, w - radius, h); + cairo_line_to (cr, 0 + radius, h); + cairo_curve_to (cr, 0, h, 0, h, 0, h - radius); + + cairo_close_path(cr); + + cairo_set_source_rgb(cr, 1, 1, 1); + cairo_fill(cr); + + cairo_destroy(cr); + shape = gdk_cairo_region_create_from_surface(surface); + cairo_surface_destroy(surface); + + return shape; +} +#else GdkDrawable* ghb_curved_rect_mask(gint width, gint height, gint radius) { @@ -1212,6 +1528,7 @@ ghb_curved_rect_mask(gint width, gint height, gint radius) return shape; } +#endif G_MODULE_EXPORT void preview_hud_size_alloc_cb( @@ -1219,7 +1536,11 @@ preview_hud_size_alloc_cb( GtkAllocation *allocation, signal_user_data_t *ud) { +#if GTK_CHECK_VERSION(3, 0, 0) + cairo_region_t *shape; +#else GdkDrawable *shape; +#endif //g_message("preview_hud_size_alloc_cb()"); if (gtk_widget_get_visible(widget) && allocation->height > 50) @@ -1228,8 +1549,13 @@ preview_hud_size_alloc_cb( allocation->height, allocation->height/4); if (shape != NULL) { +#if GTK_CHECK_VERSION(3, 0, 0) + gtk_widget_shape_combine_region(widget, shape); + cairo_region_destroy(shape); +#else gtk_widget_shape_combine_mask(widget, shape, 0, 0); gdk_pixmap_unref(shape); +#endif } } } diff --git a/gtk/src/renderer_button.c b/gtk/src/renderer_button.c index bcc1fc352..50e53dfe6 100644 --- a/gtk/src/renderer_button.c +++ b/gtk/src/renderer_button.c @@ -1,6 +1,12 @@ #include "marshalers.h" #include "renderer_button.h" +#if GTK_CHECK_VERSION(3, 0, 0) +#define MyGdkRectangle const GdkRectangle +#else +#define MyGdkRectangle GdkRectangle +#endif + /* Some boring function declarations: GObject type system stuff */ static void custom_cell_renderer_button_init (CustomCellRendererButton *cellprogress); static void custom_cell_renderer_button_class_init (CustomCellRendererButtonClass *klass); @@ -16,13 +22,14 @@ static void custom_cell_renderer_button_finalize (GObject *gobject); // My customized part that adds "clicked" signal static gboolean -custom_cell_renderer_button_activate (GtkCellRenderer *cell, - GdkEvent *event, - GtkWidget *widget, - const gchar *path, - GdkRectangle *background_area, - GdkRectangle *cell_area, - GtkCellRendererState flags); +custom_cell_renderer_button_activate ( + GtkCellRenderer *cell, + GdkEvent *event, + GtkWidget *widget, + const gchar *path, + MyGdkRectangle *background_area, + MyGdkRectangle *cell_area, + GtkCellRendererState flags); enum { CLICKED, @@ -196,13 +203,14 @@ custom_cell_renderer_button_new (void) } static gboolean -custom_cell_renderer_button_activate (GtkCellRenderer *cell, - GdkEvent *event, - GtkWidget *widget, - const gchar *path, - GdkRectangle *background_area, - GdkRectangle *cell_area, - GtkCellRendererState flags) +custom_cell_renderer_button_activate ( + GtkCellRenderer *cell, + GdkEvent *event, + GtkWidget *widget, + const gchar *path, + MyGdkRectangle *background_area, + MyGdkRectangle *cell_area, + GtkCellRendererState flags) { g_debug("custom_cell_renderer_button_activate ()\n"); g_signal_emit (cell, button_cell_signals[CLICKED], 0, path); diff --git a/gtk/src/settings.c b/gtk/src/settings.c index de4e3e818..34775f137 100644 --- a/gtk/src/settings.c +++ b/gtk/src/settings.c @@ -282,32 +282,17 @@ ghb_widget_value(GtkWidget *widget) value = ghb_string_value_new(shortOpt); g_free(shortOpt); } - else - { - value = ghb_string_value_new(""); - } - } - else if (type == GTK_TYPE_COMBO_BOX_ENTRY) - { - GtkTreeModel *store; - GtkTreeIter iter; - gchar *shortOpt; - - g_debug("\tcombo_box_entry"); - store = gtk_combo_box_get_model(GTK_COMBO_BOX(widget)); - if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widget), &iter)) - { - gtk_tree_model_get(store, &iter, 2, &shortOpt, -1); - value = ghb_string_value_new(shortOpt); - g_free(shortOpt); - } - else + else if (gtk_combo_box_get_has_entry(GTK_COMBO_BOX(widget))) { const gchar *str; - str = gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget)); + str = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(widget)))); if (str == NULL) str = ""; value = ghb_string_value_new(str); } + else + { + value = ghb_string_value_new(""); + } } else if (type == GTK_TYPE_SPIN_BUTTON) { @@ -358,10 +343,12 @@ ghb_widget_value(GtkWidget *widget) } else if (type == GTK_TYPE_FILE_CHOOSER_BUTTON) { - gchar *str; + gchar *str = NULL; str = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(widget)); if (str == NULL) + { str = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(widget)); + } value = ghb_string_value_new(str); if (str != NULL) g_free(str); @@ -581,55 +568,21 @@ update_widget(GtkWidget *widget, const GValue *value) } if (!foundit) { - gtk_combo_box_set_active (GTK_COMBO_BOX(widget), 0); - } - } - else if (type == GTK_TYPE_COMBO_BOX_ENTRY) - { - GtkTreeModel *store; - GtkTreeIter iter; - gchar *shortOpt; - gdouble ivalue; - gboolean foundit = FALSE; - - g_debug("GTK_COMBO_BOX_ENTRY"); - store = gtk_combo_box_get_model(GTK_COMBO_BOX(widget)); - if (gtk_tree_model_get_iter_first (store, &iter)) - { - do + if (gtk_combo_box_get_has_entry(GTK_COMBO_BOX(widget))) { - gtk_tree_model_get(store, &iter, 2, &shortOpt, -1); - if (strcmp(shortOpt, str) == 0) + GtkEntry *entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(widget))); + if (entry) { - gtk_combo_box_set_active_iter ( - GTK_COMBO_BOX(widget), &iter); - g_free(shortOpt); - foundit = TRUE; - break; + gtk_entry_set_text (entry, str); } - g_free(shortOpt); - } while (gtk_tree_model_iter_next (store, &iter)); - } - if (!foundit && gtk_tree_model_get_iter_first (store, &iter)) - { - do - { - gtk_tree_model_get(store, &iter, 3, &ivalue, -1); - if ((gint)ivalue == ival || ivalue == dval) + else { - gtk_combo_box_set_active_iter ( - GTK_COMBO_BOX(widget), &iter); - foundit = TRUE; - break; + gtk_combo_box_set_active (GTK_COMBO_BOX(widget), 0); } - } while (gtk_tree_model_iter_next (store, &iter)); - } - if (!foundit) - { - GtkEntry *entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(widget))); - if (entry) + } + else { - gtk_entry_set_text (entry, str); + gtk_combo_box_set_active (GTK_COMBO_BOX(widget), 0); } } } @@ -663,15 +616,16 @@ update_widget(GtkWidget *widget, const GValue *value) { GtkFileChooserAction act; act = gtk_file_chooser_get_action(GTK_FILE_CHOOSER(widget)); + if (str[0] == 0) { // Do nothing ; } else if (act == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || - act == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) + act == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) { - gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(widget), str); + gtk_file_chooser_set_filename (GTK_FILE_CHOOSER(widget), str); } else if (act == GTK_FILE_CHOOSER_ACTION_SAVE) { |