summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--contrib/ffmpeg/A01-swscale-assert.patch2
-rw-r--r--contrib/ffmpeg/A03-h264-recovery-point.patch4
-rw-r--r--contrib/ffmpeg/A04-dca-resync.patch (renamed from contrib/ffmpeg/A05-dca-resync.patch)0
-rw-r--r--contrib/ffmpeg/A04-snow-use-videodspcontext.patch33
-rw-r--r--contrib/ffmpeg/P01-solaris.patch4
-rw-r--r--contrib/ffmpeg/P02-darwin-pic.patch6
-rw-r--r--contrib/ffmpeg/module.defs2
-rw-r--r--contrib/libiconv/A00-do-not-build-preloadable-iconv-shared-library.patch106
-rw-r--r--gtk/configure.ac101
-rw-r--r--gtk/src/audiohandler.c6
-rw-r--r--gtk/src/callbacks.c57
-rw-r--r--gtk/src/callbacks.h8
-rw-r--r--gtk/src/ghb.ui6910
-rw-r--r--gtk/src/ghbcellrenderertext.c334
-rw-r--r--gtk/src/ghbcompositor.c207
-rw-r--r--gtk/src/hb-backend.c16
-rw-r--r--gtk/src/internal_defaults.xml2
-rw-r--r--gtk/src/main.c328
-rw-r--r--gtk/src/preview.c456
-rw-r--r--gtk/src/renderer_button.c36
-rw-r--r--gtk/src/settings.c88
-rw-r--r--gtk/src/standard_presets.xml4
-rw-r--r--macosx/Controller.h6
-rw-r--r--macosx/Controller.m34
-rw-r--r--test/test.c67
-rw-r--r--win/CS/HandBrake.ApplicationServices/Model/Encoding/AudioTrack.cs2
-rw-r--r--win/CS/HandBrake.ApplicationServices/Services/Encode.cs4
-rw-r--r--win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/AudioEncoder.cs3
-rw-r--r--win/CS/HandBrakeWPF/Commands/OpenOptionsScreenCommand.cs62
-rw-r--r--win/CS/HandBrakeWPF/Controls/NumberBox.xaml175
-rw-r--r--win/CS/HandBrakeWPF/Controls/NumberBox.xaml.cs655
-rw-r--r--win/CS/HandBrakeWPF/Controls/RefireControl.cs134
-rw-r--r--win/CS/HandBrakeWPF/Converters/Options/OptionsTabConverter.cs27
-rw-r--r--win/CS/HandBrakeWPF/Converters/Options/OptionsTabNameConverter.cs71
-rw-r--r--win/CS/HandBrakeWPF/HandBrakeWPF.csproj15
-rw-r--r--win/CS/HandBrakeWPF/Model/OptionsTab.cs37
-rw-r--r--win/CS/HandBrakeWPF/Properties/Resources.Designer.cs70
-rw-r--r--win/CS/HandBrakeWPF/Properties/Resources.resx44
-rw-r--r--win/CS/HandBrakeWPF/ViewModels/AdvancedViewModel.cs55
-rw-r--r--win/CS/HandBrakeWPF/ViewModels/AudioViewModel.cs152
-rw-r--r--win/CS/HandBrakeWPF/ViewModels/Interfaces/IOptionsViewModel.cs9
-rw-r--r--win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs38
-rw-r--r--win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs44
-rw-r--r--win/CS/HandBrakeWPF/ViewModels/PictureSettingsViewModel.cs14
-rw-r--r--win/CS/HandBrakeWPF/ViewModels/SubtitlesViewModel.cs93
-rw-r--r--win/CS/HandBrakeWPF/ViewModels/VideoViewModel.cs26
-rw-r--r--win/CS/HandBrakeWPF/Views/AboutView.xaml55
-rw-r--r--win/CS/HandBrakeWPF/Views/AboutView.xaml.cs4
-rw-r--r--win/CS/HandBrakeWPF/Views/AddPresetView.xaml20
-rw-r--r--win/CS/HandBrakeWPF/Views/AdvancedView.xaml287
-rw-r--r--win/CS/HandBrakeWPF/Views/AudioView.xaml7
-rw-r--r--win/CS/HandBrakeWPF/Views/FiltersView.xaml2
-rw-r--r--win/CS/HandBrakeWPF/Views/OptionsView.xaml45
-rw-r--r--win/CS/HandBrakeWPF/Views/PictureSettingsView.xaml37
-rw-r--r--win/CS/HandBrakeWPF/Views/ShellView.xaml4
-rw-r--r--win/CS/HandBrakeWPF/Views/SubtitlesView.xaml2
-rw-r--r--win/CS/HandBrakeWPF/Views/VideoView.xaml5
57 files changed, 6605 insertions, 4410 deletions
diff --git a/contrib/ffmpeg/A01-swscale-assert.patch b/contrib/ffmpeg/A01-swscale-assert.patch
index e0b6aad6b..9db84b7fa 100644
--- a/contrib/ffmpeg/A01-swscale-assert.patch
+++ b/contrib/ffmpeg/A01-swscale-assert.patch
@@ -1,5 +1,5 @@
diff --git a/libswscale/utils.c b/libswscale/utils.c
-index e5e4d60..062ae01 100644
+index f0a2b46..61506c6 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -531,7 +531,9 @@ static int initFilter(int16_t **outFilter, int32_t **filterPos,
diff --git a/contrib/ffmpeg/A03-h264-recovery-point.patch b/contrib/ffmpeg/A03-h264-recovery-point.patch
index bbd25ab46..78c182df2 100644
--- a/contrib/ffmpeg/A03-h264-recovery-point.patch
+++ b/contrib/ffmpeg/A03-h264-recovery-point.patch
@@ -1,5 +1,5 @@
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
-index 1a0b341..98a0350 100644
+index 3660597..bf4e072 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -2163,6 +2163,7 @@ static void flush_dpb(AVCodecContext *avctx)
@@ -10,7 +10,7 @@ index 1a0b341..98a0350 100644
}
static int init_poc(H264Context *h)
-@@ -3976,9 +3977,18 @@ again:
+@@ -3981,9 +3982,18 @@ again:
if ((err = decode_slice_header(hx, h)))
break;
diff --git a/contrib/ffmpeg/A05-dca-resync.patch b/contrib/ffmpeg/A04-dca-resync.patch
index 3e32c7a74..3e32c7a74 100644
--- a/contrib/ffmpeg/A05-dca-resync.patch
+++ b/contrib/ffmpeg/A04-dca-resync.patch
diff --git a/contrib/ffmpeg/A04-snow-use-videodspcontext.patch b/contrib/ffmpeg/A04-snow-use-videodspcontext.patch
deleted file mode 100644
index fc9a120b9..000000000
--- a/contrib/ffmpeg/A04-snow-use-videodspcontext.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-diff --git a/libavcodec/snow.c b/libavcodec/snow.c
-index b9dab45..153e5b2 100644
---- a/libavcodec/snow.c
-+++ b/libavcodec/snow.c
-@@ -349,7 +349,7 @@ void ff_snow_pred_block(SnowContext *s, uint8_t *dst, uint8_t *tmp, int stride,
- src += sx + sy*stride;
- if( (unsigned)sx >= w - b_w - (HTAPS_MAX-2)
- || (unsigned)sy >= h - b_h - (HTAPS_MAX-2)){
-- s->dsp.emulated_edge_mc(tmp + MB_SIZE, src, stride, b_w+HTAPS_MAX-1, b_h+HTAPS_MAX-1, sx, sy, w, h);
-+ s->vdsp.emulated_edge_mc(tmp + MB_SIZE, src, stride, b_w+HTAPS_MAX-1, b_h+HTAPS_MAX-1, sx, sy, w, h);
- src= tmp + MB_SIZE;
- }
- // assert(b_w == b_h || 2*b_w == b_h || b_w == 2*b_h);
-@@ -402,6 +402,7 @@ av_cold int ff_snow_common_init(AVCodecContext *avctx){
- s->max_ref_frames=1; //just make sure its not an invalid value in case of no initial keyframe
-
- ff_dsputil_init(&s->dsp, avctx);
-+ ff_videodsp_init(&s->vdsp, 8);
- ff_dwt_init(&s->dwt);
-
- #define mcf(dx,dy)\
-diff --git a/libavcodec/snow.h b/libavcodec/snow.h
-index abf3309..b988115 100644
---- a/libavcodec/snow.h
-+++ b/libavcodec/snow.h
-@@ -108,6 +108,7 @@ typedef struct SnowContext{
- AVCodecContext *avctx;
- RangeCoder c;
- DSPContext dsp;
-+ VideoDSPContext vdsp;
- DWTContext dwt;
- AVFrame new_picture;
- AVFrame input_picture; ///< new_picture with the internal linesizes
diff --git a/contrib/ffmpeg/P01-solaris.patch b/contrib/ffmpeg/P01-solaris.patch
index b97907941..0a2355f91 100644
--- a/contrib/ffmpeg/P01-solaris.patch
+++ b/contrib/ffmpeg/P01-solaris.patch
@@ -1,8 +1,8 @@
diff --git a/configure b/configure
-index 5355300..5ac7bc0 100755
+index e87a326..5ccfc0f 100755
--- a/configure
+++ b/configure
-@@ -3146,7 +3146,7 @@ EOF
+@@ -3156,7 +3156,7 @@ EOF
check_cc <<EOF || die "endian test failed"
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
EOF
diff --git a/contrib/ffmpeg/P02-darwin-pic.patch b/contrib/ffmpeg/P02-darwin-pic.patch
index 576c23e79..0e0a08429 100644
--- a/contrib/ffmpeg/P02-darwin-pic.patch
+++ b/contrib/ffmpeg/P02-darwin-pic.patch
@@ -1,8 +1,8 @@
diff --git a/configure b/configure
-index 5355300..7ae7148 100755
+index e87a326..422a7a5 100755
--- a/configure
+++ b/configure
-@@ -2868,6 +2868,7 @@ case $target_os in
+@@ -2878,6 +2878,7 @@ case $target_os in
AVSERVERLDFLAGS=-Wl,-bind_at_load
objformat="macho"
enabled x86_64 && objformat="macho64"
@@ -10,7 +10,7 @@ index 5355300..7ae7148 100755
enabled_any pic shared ||
{ check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
;;
-@@ -3070,7 +3071,7 @@ esc(){
+@@ -3080,7 +3081,7 @@ esc(){
echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
diff --git a/contrib/ffmpeg/module.defs b/contrib/ffmpeg/module.defs
index f8bc5f762..01fd5f753 100644
--- a/contrib/ffmpeg/module.defs
+++ b/contrib/ffmpeg/module.defs
@@ -1,7 +1,7 @@
$(eval $(call import.MODULE.defs,FFMPEG,ffmpeg,YASM BZIP2 ZLIB))
$(eval $(call import.CONTRIB.defs,FFMPEG))
-FFMPEG.FETCH.url = http://download.handbrake.fr/handbrake/contrib/libav-v9_beta3.tar.bz2
+FFMPEG.FETCH.url = http://download.handbrake.fr/handbrake/contrib/libav-v9.1.tar.bz2
FFMPEG.CONFIGURE.deps =
FFMPEG.CONFIGURE.env =
diff --git a/contrib/libiconv/A00-do-not-build-preloadable-iconv-shared-library.patch b/contrib/libiconv/A00-do-not-build-preloadable-iconv-shared-library.patch
new file mode 100644
index 000000000..be7236041
--- /dev/null
+++ b/contrib/libiconv/A00-do-not-build-preloadable-iconv-shared-library.patch
@@ -0,0 +1,106 @@
+From 766e19dd36c57330cf5985677a5af09e3165253b Mon Sep 17 00:00:00 2001
+From: Sean McGovern <[email protected]>
+Date: Wed, 31 Oct 2012 23:33:41 -0400
+Subject: [PATCH] do not build preloadable iconv shared library
+
+---
+ Makefile.in | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 8168cad..b27cbea 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -31,7 +31,7 @@ SHELL = /bin/sh
+
+ all : lib/localcharset.h force
+ cd lib && $(MAKE) all
+- cd preload && $(MAKE) all
++# cd preload && $(MAKE) all
+ cd srclib && $(MAKE) all
+ cd src && $(MAKE) all
+ cd po && $(MAKE) all
+@@ -51,7 +51,7 @@ install-lib : all force
+ install : lib/localcharset.h force
+ cd libcharset && $(MAKE) install prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+ cd lib && $(MAKE) install prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+- cd preload && $(MAKE) install prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
++# cd preload && $(MAKE) install prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+ cd srclib && $(MAKE) install prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+ cd src && $(MAKE) install prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+ if [ ! -d $(DESTDIR)$(includedir) ] ; then $(mkinstalldirs) $(DESTDIR)$(includedir) ; fi
+@@ -62,7 +62,7 @@ install : lib/localcharset.h force
+ install-strip : lib/localcharset.h force
+ cd libcharset && $(MAKE) install-strip prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+ cd lib && $(MAKE) install-strip prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+- cd preload && $(MAKE) install-strip prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
++# cd preload && $(MAKE) install-strip prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+ cd srclib && $(MAKE) install-strip prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+ cd src && $(MAKE) install-strip prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+ if [ ! -d $(DESTDIR)$(includedir) ] ; then $(mkinstalldirs) $(DESTDIR)$(includedir) ; fi
+@@ -73,7 +73,7 @@ install-strip : lib/localcharset.h force
+ installdirs : force
+ cd libcharset && $(MAKE) installdirs prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+ cd lib && $(MAKE) installdirs prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+- cd preload && $(MAKE) installdirs prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
++# cd preload && $(MAKE) installdirs prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+ cd srclib && $(MAKE) installdirs prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+ cd src && $(MAKE) installdirs prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+ if [ ! -d $(DESTDIR)$(includedir) ] ; then $(mkinstalldirs) $(DESTDIR)$(includedir) ; fi
+@@ -83,7 +83,7 @@ installdirs : force
+ uninstall : force
+ cd libcharset && $(MAKE) uninstall prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+ cd lib && $(MAKE) uninstall prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+- cd preload && $(MAKE) uninstall prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
++# cd preload && $(MAKE) uninstall prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+ cd srclib && $(MAKE) uninstall prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+ cd src && $(MAKE) uninstall prefix='$(prefix)' exec_prefix='$(exec_prefix)' libdir='$(libdir)'
+ $(RM) $(DESTDIR)$(includedir)/iconv.h
+@@ -93,7 +93,7 @@ uninstall : force
+ check : all force
+ cd libcharset && $(MAKE) check
+ cd lib && $(MAKE) check
+- cd preload && $(MAKE) check
++# cd preload && $(MAKE) check
+ cd srclib && $(MAKE) check
+ cd src && $(MAKE) check
+ cd po && $(MAKE) check
+@@ -104,7 +104,7 @@ mostlyclean : force
+ cd libcharset && $(MAKE) mostlyclean
+ $(RM) lib/charset.alias lib/libcharset.* lib/localcharset.h
+ cd lib && $(MAKE) mostlyclean
+- cd preload && $(MAKE) mostlyclean
++# cd preload && $(MAKE) mostlyclean
+ cd srclib && $(MAKE) mostlyclean
+ cd src && $(MAKE) mostlyclean
+ cd po && $(MAKE) mostlyclean
+@@ -116,7 +116,7 @@ clean : force
+ cd libcharset && $(MAKE) clean
+ $(RM) lib/charset.alias lib/libcharset.* lib/localcharset.h
+ cd lib && $(MAKE) clean
+- cd preload && $(MAKE) clean
++# cd preload && $(MAKE) clean
+ cd srclib && $(MAKE) clean
+ cd src && $(MAKE) clean
+ cd po && $(MAKE) clean
+@@ -128,7 +128,7 @@ distclean : force
+ cd libcharset && if test -f Makefile; then $(MAKE) distclean; fi
+ $(RM) lib/charset.alias lib/libcharset.* lib/localcharset.h
+ cd lib && if test -f Makefile; then $(MAKE) distclean; fi
+- cd preload && if test -f Makefile; then $(MAKE) distclean; fi
++# cd preload && if test -f Makefile; then $(MAKE) distclean; fi
+ cd srclib && if test -f Makefile; then $(MAKE) distclean; fi
+ cd src && if test -f Makefile; then $(MAKE) distclean; fi
+ cd po && if test -f Makefile; then $(MAKE) distclean; fi
+@@ -143,7 +143,7 @@ maintainer-clean : force
+ cd libcharset && if test -f Makefile; then $(MAKE) maintainer-clean; fi
+ $(RM) lib/charset.alias lib/libcharset.* lib/localcharset.h
+ cd lib && if test -f Makefile; then $(MAKE) maintainer-clean; fi
+- cd preload && if test -f Makefile; then $(MAKE) maintainer-clean; fi
++# cd preload && if test -f Makefile; then $(MAKE) maintainer-clean; fi
+ cd srclib && if test -f Makefile; then $(MAKE) maintainer-clean; fi
+ cd src && if test -f Makefile; then $(MAKE) maintainer-clean; fi
+ cd po && if test -f Makefile; then $(MAKE) maintainer-clean; fi
+--
+1.7.12
+
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/audiohandler.c b/gtk/src/audiohandler.c
index 8c4707266..d7171c3d4 100644
--- a/gtk/src/audiohandler.c
+++ b/gtk/src/audiohandler.c
@@ -516,7 +516,7 @@ ghb_audio_list_refresh_selected(signal_user_data_t *ud)
selection = gtk_tree_view_get_selection (treeview);
if (gtk_tree_selection_get_selected(selection, &store, &iter))
{
- const gchar *track, *codec, *br, *sr, *mix;
+ const gchar *track, *codec, *br = NULL, *sr, *mix;
gchar *s_drc, *s_gain, *s_quality = NULL;
gdouble drc, gain;
// Get the row number
@@ -588,7 +588,7 @@ ghb_audio_list_refresh(signal_user_data_t *ud)
{
do
{
- const gchar *track, *codec, *br, *sr, *mix;
+ const gchar *track, *codec, *br = NULL, *sr, *mix;
gchar *s_drc, *s_gain, *s_quality = NULL;
gdouble drc, gain;
GValue *asettings;
@@ -986,7 +986,7 @@ ghb_add_audio_to_ui(GtkBuilder *builder, const GValue *settings)
GtkTreeIter iter;
GtkListStore *store;
GtkTreeSelection *selection;
- const gchar *track, *codec, *br, *sr, *mix;
+ const gchar *track, *codec, *br = NULL, *sr, *mix;
gchar *s_drc, *s_gain, *s_quality = NULL;
gdouble drc;
gdouble gain;
diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c
index 0f99948b9..42fd3fa03 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,10 @@ get_dvd_device_name(GDrive *gd)
#endif
static GHashTable *volname_hash = NULL;
-static GMutex *volname_mutex = NULL;
+#if GTK_CHECK_VERSION(2, 32, 0)
+static GMutex volname_mutex_static;
+#endif
+static GMutex *volname_mutex;
static void
free_volname_key(gpointer data)
@@ -485,7 +488,12 @@ get_dvd_volume_name(gpointer gd)
void
ghb_volname_cache_init(void)
{
+#if GTK_CHECK_VERSION(2, 32, 0)
+ g_mutex_init(&volname_mutex_static);
+ volname_mutex = &volname_mutex_static;
+#else
volname_mutex = g_mutex_new();
+#endif
volname_hash = g_hash_table_new_full(g_str_hash, g_str_equal,
free_volname_key, free_volname_value);
}
@@ -812,20 +820,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 +847,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 +3191,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);
+ GHB_THREAD_NEW("Update Check", (GThreadFunc)ghb_check_update, ud);
}
}
}
@@ -3227,7 +3235,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 +3398,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 +3414,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 +4105,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);
+ GHB_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 +4126,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);
+ GHB_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 +4202,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);
+ GHB_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 +4888,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 +4914,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 +4926,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/callbacks.h b/gtk/src/callbacks.h
index b4a9654ee..3a22b4c2c 100644
--- a/gtk/src/callbacks.h
+++ b/gtk/src/callbacks.h
@@ -32,6 +32,14 @@
#include <gtk/gtk.h>
#include "settings.h"
+#if GTK_CHECK_VERSION(2, 32, 0)
+#define GHB_THREAD_NEW(n, f, p) \
+ g_thread_new(n, (GThreadFunc)(f), (p))
+#else
+#define GHB_THREAD_NEW(n, f, p) \
+ g_thread_create((GThreadFunc)(f), (p), TRUE, NULL)
+#endif
+
void ghb_check_all_depencencies(signal_user_data_t *ud);
gboolean ghb_timer_cb(gpointer data);
gboolean ghb_log_cb(GIOChannel *source, GIOCondition cond, gpointer data);
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">&lt;b&gt;Source:&lt;/b&gt;</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">&lt;b&gt;Source:&lt;/b&gt;</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 (&gt;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.
+
+ &lt;b&gt;Caution:&lt;/b&gt; 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">&lt;b&gt;&lt;u&gt;D&lt;/u&gt;estination&lt;/b&gt;</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">&lt;b&gt;Source Picture Parameters&lt;/b&gt;</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">&lt;b&gt;Cropping&lt;/b&gt;</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">&lt;b&gt;Scaling&lt;/b&gt;</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 (&gt;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.
-
-&lt;b&gt;Caution:&lt;/b&gt; 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">&lt;b&gt;&lt;u&gt;D&lt;/u&gt;estination&lt;/b&gt;</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">&lt;b&gt;Source Picture Parameters&lt;/b&gt;</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">&lt;b&gt;Cropping&lt;/b&gt;</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">&lt;b&gt;Scaling&lt;/b&gt;</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">&lt;b&gt;Audio Gain:&lt;/b&gt; 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">&lt;b&gt;Audio Gain:&lt;/b&gt; 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">&lt;b&gt;Dynamic Range Compression:&lt;/b&gt; 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">&lt;b&gt;Dynamic Range Compression:&lt;/b&gt; 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">&lt;b&gt;Dynamic Range Compression:&lt;/b&gt; 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">&lt;b&gt;Dynamic Range Compression:&lt;/b&gt; 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">&lt;b&gt;Quality:&lt;/b&gt; 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">&lt;b&gt;Quality:&lt;/b&gt; 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">&lt;b&gt;Quality:&lt;/b&gt; 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">&lt;b&gt;Quality:&lt;/b&gt; 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">&lt;small&gt;Reference Frames:&lt;/small&gt;</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">&lt;small&gt;Maximum B-Frames:&lt;/small&gt;</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">&lt;small&gt;Pyramidal B-Frames:&lt;/small&gt;</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">&lt;small&gt;Weighted P-Frames:&lt;/small&gt;</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">&lt;small&gt;&lt;b&gt;Encoding Features&lt;/b&gt;&lt;/small&gt;</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">&lt;small&gt;Motion Est. Method:&lt;/small&gt;</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">&lt;small&gt;Reference Frames:&lt;/small&gt;</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">&lt;small&gt;Maximum B-Frames:&lt;/small&gt;</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">&lt;small&gt;Pyramidal B-Frames:&lt;/small&gt;</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">&lt;small&gt;Weighted P-Frames:&lt;/small&gt;</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">&lt;small&gt;&lt;b&gt;Encoding Features&lt;/b&gt;&lt;/small&gt;</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">&lt;small&gt;Motion Est. Method:&lt;/small&gt;</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">&lt;small&gt;Subpel ME &amp;amp; Mode:&lt;/small&gt;</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">&lt;small&gt;Subpel ME &amp;amp; Mode:&lt;/small&gt;</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">&lt;small&gt;Motion Est. Range:&lt;/small&gt;</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">&lt;small&gt;Adaptive Direct Mode:&lt;/small&gt;</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">&lt;small&gt;Motion Est. Range:&lt;/small&gt;</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">&lt;small&gt;Adaptive Direct Mode:&lt;/small&gt;</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">&lt;small&gt;Adaptive B-Frames:&lt;/small&gt;</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">&lt;small&gt;Adaptive B-Frames:&lt;/small&gt;</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">&lt;small&gt;Partitions:&lt;/small&gt;</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">&lt;small&gt;Trellis:&lt;/small&gt;</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">&lt;small&gt;&lt;b&gt;Analysis&lt;/b&gt;&lt;/small&gt;</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">&lt;small&gt;Partitions:&lt;/small&gt;</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">&lt;small&gt;Trellis:&lt;/small&gt;</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">&lt;small&gt;Adaptive Quantization Strength:&lt;/small&gt;</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">&lt;small&gt;Psychovisual Rate Distortion:&lt;/small&gt;</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">&lt;small&gt;Psychovisual Trellis:&lt;/small&gt;</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">&lt;small&gt;&lt;b&gt;Psychovisual&lt;/b&gt;&lt;/small&gt;</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">&lt;small&gt;&lt;b&gt;Analysis&lt;/b&gt;&lt;/small&gt;</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">&lt;small&gt;Adaptive Quantization Strength:&lt;/small&gt;</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">&lt;small&gt;Psychovisual Rate Distortion:&lt;/small&gt;</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">&lt;small&gt;Psychovisual Trellis:&lt;/small&gt;</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">&lt;small&gt;&lt;b&gt;Current x264 Advanced Option String&lt;/b&gt;&lt;/small&gt;</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">&lt;small&gt;&lt;b&gt;Current FFMpeg Advanced Option String&lt;/b&gt;&lt;/small&gt;</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">&lt;small&gt;&lt;b&gt;Psychovisual&lt;/b&gt;&lt;/small&gt;</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">&lt;small&gt;&lt;b&gt;Current x264 Advanced Option String&lt;/b&gt;&lt;/small&gt;</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">&lt;small&gt;&lt;b&gt;Current FFMpeg Advanced Option String&lt;/b&gt;&lt;/small&gt;</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">&lt;b&gt;Presets&lt;/b&gt;</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">&lt;b&gt;Presets&lt;/b&gt;</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..891abd088 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,81 @@ 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_duration, \n\
+#preview_fullscreen, \n\
+#hide_settings \n\
+{ \n\
+ background: @black; \n\
+ background-color: @gray18; \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_encode_progress, \n\
+#live_preview_progress, \n\
+#preview_frame \n\
+{ \n\
+ background: @black; \n\
+ background-color: @gray46; \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:selected:focused \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 +825,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 +840,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 +864,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 +902,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 +921,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 +976,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 +989,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 +1010,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 +1060,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 +1072,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);
+ GHB_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 +1115,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 +1257,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..d62026e7c 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;
+
+#if GST_CHECK_VERSION(1, 0, 0)
+ case GST_MESSAGE_PROGRESS:
+ {
+ //printf("progress\n");
+ } break;
+
+ 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)
{
diff --git a/gtk/src/standard_presets.xml b/gtk/src/standard_presets.xml
index 9a0b35400..0b71c030d 100644
--- a/gtk/src/standard_presets.xml
+++ b/gtk/src/standard_presets.xml
@@ -526,13 +526,13 @@
<key>x264UseAdvancedOptions</key>
<false />
<key>x264Option</key>
- <string>cabac=0:ref=2:b-pyramid=none:weightb=0:weightp=0:vbv-maxrate=9500:vbv-bufsize=9500:level=3.1:8x8dct=0</string>
+ <string>cabac=0:ref=2:b-pyramid=none:weightb=0:weightp=0:vbv-maxrate=9500:vbv-bufsize=9500:level=3.1</string>
<key>x264OptionExtra</key>
<string>cabac=0:ref=2:b-pyramid=none:weightb=0:weightp=0:vbv-maxrate=9500:vbv-bufsize=9500</string>
<key>x264Preset</key>
<string>medium</string>
<key>h264Profile</key>
- <string>main</string>
+ <string>high</string>
<key>x264Tune</key>
<string>none</string>
</dict>
diff --git a/macosx/Controller.h b/macosx/Controller.h
index b4c0420f5..c7667a620 100644
--- a/macosx/Controller.h
+++ b/macosx/Controller.h
@@ -61,7 +61,7 @@ BOOL fIsDragging;
/* x264 Presets Box */
NSArray * fX264PresetNames;
- NSUInteger * fX264MediumPresetIndex;
+ NSUInteger fX264MediumPresetIndex;
IBOutlet NSButton * fx264UseAdvancedOptionsCheck;
IBOutlet NSBox * fX264PresetsBox;
IBOutlet NSSlider * fX264PresetsSlider;
@@ -79,6 +79,8 @@ BOOL fIsDragging;
// Text Field to show the expanded opts from unparse()
IBOutlet NSTextField * fDisplayX264PresetsUnparseTextField;
char * fX264PresetsUnparsedUTF8String;
+ NSUInteger fX264PresetsHeightForUnparse;
+ NSUInteger fX264PresetsWidthForUnparse;
/* Advanced options tab */
HBAdvancedController * fAdvancedOptions;
@@ -196,7 +198,7 @@ BOOL fIsDragging;
IBOutlet NSButton * fAudioAllowDTSHDPassCheck;
IBOutlet NSButton * fAudioAllowDTSPassCheck;
IBOutlet NSButton * fAudioAllowMP3PassCheck;
- IBOutlet NSButton * fAudioFallbackPopUp;
+ IBOutlet NSPopUpButton * fAudioFallbackPopUp;
/* Chapters box */
diff --git a/macosx/Controller.m b/macosx/Controller.m
index 9eb594c66..d19f7f754 100644
--- a/macosx/Controller.m
+++ b/macosx/Controller.m
@@ -2903,11 +2903,11 @@ fWorkingCount = 0;
hb_job_set_advanced_opts(job, advanced_opts_tmp);
hb_job_set_x264_profile (job, h264_profile_tmp);
hb_job_set_x264_level (job, h264_level_tmp);
- if (x264_preset_tmp != NULL) free(x264_preset_tmp);
- if (x264_tune_tmp != NULL) free(x264_tune_tmp);
- if (advanced_opts_tmp != NULL) free(advanced_opts_tmp);
- if (h264_profile_tmp != NULL) free(h264_profile_tmp);
- if (h264_level_tmp != NULL) free(h264_level_tmp);
+ free(x264_preset_tmp);
+ free(x264_tune_tmp);
+ free(advanced_opts_tmp);
+ free(h264_profile_tmp);
+ free(h264_level_tmp);
}
@@ -5579,7 +5579,8 @@ the user is using "Custom" settings by determining the sender*/
const char *advanced_opts = NULL;
const char *h264_profile = NULL;
const char *h264_level = NULL;
- int unparse_width, unparse_height;
+ int width = 1;
+ int height = 1;
// prepare the tune, advanced options, profile and level
if ([(tmpString = [self x264Tune]) length])
{
@@ -5597,22 +5598,21 @@ the user is using "Custom" settings by determining the sender*/
{
h264_level = [tmpString UTF8String];
}
- // prepare the width and height (FIXME)
- unparse_width = 1280;
- unparse_height = 720;
- // if the previous unparsed string is non-NULL, free it
- if (fX264PresetsUnparsedUTF8String != NULL)
+ // width and height must be non-zero
+ if (fX264PresetsWidthForUnparse && fX264PresetsHeightForUnparse)
{
- free(fX264PresetsUnparsedUTF8String);
+ width = fX264PresetsWidthForUnparse;
+ height = fX264PresetsHeightForUnparse;
}
+ // free the previous unparsed string
+ free(fX264PresetsUnparsedUTF8String);
// now, unparse
fX264PresetsUnparsedUTF8String = hb_x264_param_unparse(x264_preset,
x264_tune,
advanced_opts,
h264_profile,
h264_level,
- unparse_width,
- unparse_height);
+ width, height);
// update the text field
[fDisplayX264PresetsUnparseTextField setStringValue:
[NSString stringWithFormat:@"x264 Unparse: %s",
@@ -5774,6 +5774,12 @@ the user is using "Custom" settings by determining the sender*/
}
[fVideoFiltersField setStringValue: [NSString stringWithFormat:@"Video Filters: %@", videoFilters]];
+ /* Store storage resolution for unparse */
+ fX264PresetsWidthForUnparse = fTitle->job->width;
+ fX264PresetsHeightForUnparse = fTitle->job->height;
+ // width or height may have changed, unparse
+ [self x264PresetsChangedDisplayExpandedOptions:nil];
+
//[fPictureController reloadStillPreview];
}
diff --git a/test/test.c b/test/test.c
index 8bca6bd66..82797fd6e 100644
--- a/test/test.c
+++ b/test/test.c
@@ -345,44 +345,45 @@ int main( int argc, char ** argv )
}
/* Clean up */
- hb_close( &h );
+ hb_close(&h);
hb_global_close();
- if( input ) free( input );
- if( output ) free( output );
- if( format ) free( format );
- if( audios )
+ if (audios != NULL)
{
- while( ( audio = hb_list_item( audios, 0 ) ) )
+ while ((audio = hb_list_item(audios, 0)) != NULL)
{
- hb_list_rem( audios, audio );
- if( audio->out.name )
+ hb_list_rem(audios, audio);
+ if (audio->out.name != NULL)
{
- free( audio->out.name );
+ free(audio->out.name);
}
- free( audio );
+ free(audio);
}
- hb_list_close( &audios );
+ hb_list_close(&audios);
}
- if( mixdowns ) free( mixdowns );
- if( dynamic_range_compression ) free( dynamic_range_compression );
- if( audio_gain ) free( audio_gain );
- if( atracks ) free( atracks );
- if( arates ) free( arates );
- str_vfree( abitrates );
- str_vfree( aqualities );
- str_vfree( acompressions );
- if( acodecs ) free( acodecs );
- if (native_language ) free (native_language );
- if( advanced_opts ) free (advanced_opts );
- if (preset_name) free (preset_name);
- free( x264_profile );
- free( x264_preset );
- free( x264_tune );
- free( h264_level );
-
- // write a carriage return to stdout - avoids overlap / line wrapping when stderr is redirected
- fprintf( stdout, "\n" );
- fprintf( stderr, "HandBrake has exited.\n" );
+ str_vfree(abitrates);
+ str_vfree(acompressions);
+ str_vfree(aqualities);
+ free(acodecs);
+ free(arates);
+ free(atracks);
+ free(audio_gain);
+ free(dynamic_range_compression);
+ free(mixdowns);
+ free(native_language);
+ free(format);
+ free(input);
+ free(output);
+ free(preset_name);
+ free(x264_preset);
+ free(x264_tune);
+ free(advanced_opts);
+ free(x264_profile);
+ free(h264_level);
+
+ // write a carriage return to stdout
+ // avoids overlap / line wrapping when stderr is redirected
+ fprintf(stdout, "\n");
+ fprintf(stderr, "HandBrake has exited.\n");
return 0;
}
@@ -965,7 +966,7 @@ static int HandleEvents( hb_handle_t * h )
}
if (x264_profile == NULL)
{
- x264_profile = strdup("main");
+ x264_profile = strdup("high");
}
if (h264_level == NULL)
{
@@ -3104,7 +3105,7 @@ static void ShowPresets()
printf("\n + iPod: -e x264 -q 22.0 -r 30 --pfr -a 1 -E faac -B 160 -6 dpl2 -R Auto -D 0.0 -f mp4 -I -X 320 --modulus 2 -m --x264-preset medium --x264-profile baseline --h264-level 1.3\n");
printf("\n + iPhone & iPod Touch: -e x264 -q 22.0 -r 29.97 --pfr -a 1 -E faac -B 160 -6 dpl2 -R Auto -D 0.0 -f mp4 -4 -X 960 --loose-anamorphic --modulus 2 -m --x264-preset medium --x264-profile high --h264-level 3.1\n");
printf("\n + iPad: -e x264 -q 20.0 -r 29.97 --pfr -a 1 -E faac -B 160 -6 dpl2 -R Auto -D 0.0 -f mp4 -4 -X 1280 --loose-anamorphic --modulus 2 -m --x264-preset medium --x264-profile high --h264-level 3.1\n");
- printf("\n + AppleTV: -e x264 -q 20.0 -r 30 --pfr -a 1,1 -E faac,copy:ac3 -B 160,160 -6 dpl2,auto -R Auto,Auto -D 0.0,0.0 -f mp4 -4 -X 960 --loose-anamorphic --modulus 2 -m --x264-preset medium --x264-profile main --h264-level 3.1 -x cabac=0:ref=2:b-pyramid=none:weightb=0:weightp=0:vbv-maxrate=9500:vbv-bufsize=9500\n");
+ printf("\n + AppleTV: -e x264 -q 20.0 -r 30 --pfr -a 1,1 -E faac,copy:ac3 -B 160,160 -6 dpl2,auto -R Auto,Auto -D 0.0,0.0 -f mp4 -4 -X 960 --loose-anamorphic --modulus 2 -m --x264-preset medium --x264-profile high --h264-level 3.1 -x cabac=0:ref=2:b-pyramid=none:weightb=0:weightp=0:vbv-maxrate=9500:vbv-bufsize=9500\n");
printf("\n + AppleTV 2: -e x264 -q 20.0 -r 29.97 --pfr -a 1,1 -E faac,copy:ac3 -B 160,160 -6 dpl2,auto -R Auto,Auto -D 0.0,0.0 -f mp4 -4 -X 1280 --loose-anamorphic --modulus 2 -m --x264-preset medium --x264-profile high --h264-level 3.1\n");
printf("\n + AppleTV 3: -e x264 -q 20.0 -r 30 --pfr -a 1,1 -E faac,copy:ac3 -B 160,160 -6 dpl2,auto -R Auto,Auto -D 0.0,0.0 -f mp4 -4 -X 1920 --decomb=fast --loose-anamorphic --modulus 2 -m --x264-preset medium --x264-profile high --h264-level 4.0\n");
printf("\n + Android: -e x264 -q 22.0 -r 29.97 --pfr -a 1 -E faac -B 128 -6 dpl2 -R Auto -D 0.0 -f mp4 -X 720 --loose-anamorphic --modulus 2 --x264-preset medium --x264-profile main --h264-level 2.2\n");
diff --git a/win/CS/HandBrake.ApplicationServices/Model/Encoding/AudioTrack.cs b/win/CS/HandBrake.ApplicationServices/Model/Encoding/AudioTrack.cs
index 051052e47..c8238927f 100644
--- a/win/CS/HandBrake.ApplicationServices/Model/Encoding/AudioTrack.cs
+++ b/win/CS/HandBrake.ApplicationServices/Model/Encoding/AudioTrack.cs
@@ -260,7 +260,7 @@ namespace HandBrake.ApplicationServices.Model.Encoding
}
/// <summary>
- /// Gets the The UI display value for sample rate
+ /// Gets or sets the The UI display value for sample rate
/// </summary>
public string SampleRateDisplayValue
{
diff --git a/win/CS/HandBrake.ApplicationServices/Services/Encode.cs b/win/CS/HandBrake.ApplicationServices/Services/Encode.cs
index ce75267c5..c136c18ee 100644
--- a/win/CS/HandBrake.ApplicationServices/Services/Encode.cs
+++ b/win/CS/HandBrake.ApplicationServices/Services/Encode.cs
@@ -118,7 +118,7 @@ namespace HandBrake.ApplicationServices.Services
if (this.userSettingService.GetUserSetting<bool>(ASUserSettingConstants.PreventSleep))
{
- // Win32.PreventSleep();
+ Win32.PreventSleep();
}
// Make sure the path exists, attempt to create it if it doesn't
@@ -143,7 +143,7 @@ namespace HandBrake.ApplicationServices.Services
ProcessStartInfo cliStart = new ProcessStartInfo(handbrakeCLIPath, query)
{
RedirectStandardOutput = true,
- RedirectStandardError = enableLogging ? true : false,
+ RedirectStandardError = enableLogging,
UseShellExecute = false,
CreateNoWindow = true
};
diff --git a/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/AudioEncoder.cs b/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/AudioEncoder.cs
index 570597176..c8877e6d6 100644
--- a/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/AudioEncoder.cs
+++ b/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/AudioEncoder.cs
@@ -2,6 +2,9 @@
// <copyright file="AudioEncoder.cs" company="HandBrake Project (http://handbrake.fr)">
// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
// </copyright>
+// <summary>
+// The audio encoder enumeration
+// </summary>
// --------------------------------------------------------------------------------------------------------------------
namespace HandBrake.Interop.Model.Encoding
diff --git a/win/CS/HandBrakeWPF/Commands/OpenOptionsScreenCommand.cs b/win/CS/HandBrakeWPF/Commands/OpenOptionsScreenCommand.cs
new file mode 100644
index 000000000..30a473d90
--- /dev/null
+++ b/win/CS/HandBrakeWPF/Commands/OpenOptionsScreenCommand.cs
@@ -0,0 +1,62 @@
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="OpenOptionsScreen.cs" company="HandBrake Project (http://handbrake.fr)">
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
+// </copyright>
+// <summary>
+// A Command to display the options window.
+// </summary>
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.Commands
+{
+ using System;
+ using System.Windows.Input;
+
+ using Caliburn.Micro;
+
+ using HandBrakeWPF.Model;
+ using HandBrakeWPF.ViewModels.Interfaces;
+
+ /// <summary>
+ /// A Command to display the options window.
+ /// </summary>
+ public class OpenOptionsScreenCommand : ICommand
+ {
+ /// <summary>
+ /// The can execute changed.
+ /// </summary>
+ public event EventHandler CanExecuteChanged;
+
+ /// <summary>
+ /// The can execute.
+ /// </summary>
+ /// <param name="parameter">
+ /// The parameter.
+ /// </param>
+ /// <returns>
+ /// The <see cref="bool"/>.
+ /// </returns>
+ public bool CanExecute(object parameter)
+ {
+ return true;
+ }
+
+ /// <summary>
+ /// The execute.
+ /// </summary>
+ /// <param name="parameter">
+ /// The parameter.
+ /// </param>
+ public void Execute(object parameter)
+ {
+ var shellViewModel = IoC.Get<IShellViewModel>();
+ shellViewModel.DisplayWindow(ShellWindow.OptionsWindow);
+
+ if (parameter != null && parameter.GetType() == typeof(OptionsTab))
+ {
+ var optionsViewModel = IoC.Get<IOptionsViewModel>();
+ optionsViewModel.GotoTab((OptionsTab)parameter);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/win/CS/HandBrakeWPF/Controls/NumberBox.xaml b/win/CS/HandBrakeWPF/Controls/NumberBox.xaml
new file mode 100644
index 000000000..d8248d4e1
--- /dev/null
+++ b/win/CS/HandBrakeWPF/Controls/NumberBox.xaml
@@ -0,0 +1,175 @@
+<UserControl x:Class="HandBrakeWPF.Controls.NumberBox"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ Loaded="UserControl_Loaded">
+ <UserControl.Resources>
+ <Style x:Key="Arrow" TargetType="Polygon">
+ <Setter Property="Fill" Value="#333" />
+ </Style>
+ <!-- UpButton and DownButton are identical except for the border radius in the control template.
+ We can't pass that through so we need to duplicate the template. After a change is made from one button
+ template it should be copied to the other. -->
+ <Style x:Key="UpButton" TargetType="Button">
+ <Setter Property="Margin" Value="0"/>
+ <Setter Property="Background" >
+ <Setter.Value>
+ <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
+ <GradientStop Color="#EEE" Offset="0.4"/>
+ <GradientStop Color="#BBB" Offset="1"/>
+ </LinearGradientBrush>
+ </Setter.Value>
+ </Setter>
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="Button">
+ <Border
+ Name="border"
+ BorderThickness="1"
+ BorderBrush="#888"
+ CornerRadius="0,2,0,0"
+ Background="{TemplateBinding Background}">
+ <ContentPresenter
+ Name="content"
+ HorizontalAlignment="Center" VerticalAlignment="Center" />
+ </Border>
+ <ControlTemplate.Triggers>
+ <Trigger Property="IsMouseOver" Value="True">
+ <Setter TargetName="border" Property="BorderBrush" Value="#FF4788c8" />
+ <Setter Property="Foreground" Value="#FF4788c8" />
+ </Trigger>
+ <Trigger Property="IsPressed" Value="True">
+ <Setter Property="Background" >
+ <Setter.Value>
+ <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
+ <GradientStop Color="#CCC" Offset="0.4"/>
+ <GradientStop Color="#999" Offset="1"/>
+ </LinearGradientBrush>
+ </Setter.Value>
+ </Setter>
+ <Setter TargetName="content" Property="RenderTransform" >
+ <Setter.Value>
+ <TranslateTransform Y="1.0" />
+ </Setter.Value>
+ </Setter>
+ </Trigger>
+ <Trigger Property="IsDefaulted" Value="True">
+ <Setter TargetName="border" Property="BorderBrush" Value="#FF282828" />
+ </Trigger>
+ <Trigger Property="IsFocused" Value="True">
+ <Setter TargetName="border" Property="BorderBrush" Value="#FF282828" />
+ </Trigger>
+ <Trigger Property="IsEnabled" Value="False">
+ <Setter TargetName="border" Property="Opacity" Value="0.7" />
+ <Setter Property="Foreground" Value="Gray" />
+ </Trigger>
+ </ControlTemplate.Triggers>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ </Style>
+ <Style x:Key="DownButton" TargetType="Button">
+ <Setter Property="Margin" Value="0"/>
+ <Setter Property="Background" >
+ <Setter.Value>
+ <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
+ <GradientStop Color="#EEE" Offset="0.4"/>
+ <GradientStop Color="#BBB" Offset="1"/>
+ </LinearGradientBrush>
+ </Setter.Value>
+ </Setter>
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="Button">
+ <Border
+ Name="border"
+ BorderThickness="1"
+ BorderBrush="#888"
+ CornerRadius="0,0,2,0"
+ Background="{TemplateBinding Background}">
+ <ContentPresenter
+ Name="content"
+ HorizontalAlignment="Center" VerticalAlignment="Center" />
+ </Border>
+ <ControlTemplate.Triggers>
+ <Trigger Property="IsMouseOver" Value="True">
+ <Setter TargetName="border" Property="BorderBrush" Value="#FF4788c8" />
+ <Setter Property="Foreground" Value="#FF4788c8" />
+ </Trigger>
+ <Trigger Property="IsPressed" Value="True">
+ <Setter Property="Background" >
+ <Setter.Value>
+ <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
+ <GradientStop Color="#CCC" Offset="0.4"/>
+ <GradientStop Color="#999" Offset="1"/>
+ </LinearGradientBrush>
+ </Setter.Value>
+ </Setter>
+ <Setter TargetName="content" Property="RenderTransform" >
+ <Setter.Value>
+ <TranslateTransform Y="1.0" />
+ </Setter.Value>
+ </Setter>
+ </Trigger>
+ <Trigger Property="IsDefaulted" Value="True">
+ <Setter TargetName="border" Property="BorderBrush" Value="#FF282828" />
+ </Trigger>
+ <Trigger Property="IsFocused" Value="True">
+ <Setter TargetName="border" Property="BorderBrush" Value="#FF282828" />
+ </Trigger>
+ <Trigger Property="IsEnabled" Value="False">
+ <Setter TargetName="border" Property="Opacity" Value="0.7" />
+ <Setter Property="Foreground" Value="Gray" />
+ </Trigger>
+ </ControlTemplate.Triggers>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ </Style>
+ </UserControl.Resources>
+ <Grid>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="*" />
+ <ColumnDefinition Width="Auto" />
+ </Grid.ColumnDefinitions>
+ <TextBox
+ Name="numberBox"
+ Grid.Column="0"
+ GotFocus="NumberBoxGotFocus"
+ LostFocus="NumberBoxLostFocus"
+ PreviewTextInput="NumberBoxPreviewTextInput"
+ PreviewKeyDown="NumberBoxPreviewKeyDown"
+ PreviewMouseDown="NumberBoxPreviewMouseDown"
+ PreviewMouseUp="NumberBoxPreviewMouseUp"
+ TextChanged="NumberBoxTextChanged"
+ VerticalContentAlignment="Center"/>
+ <Grid
+ Name="incrementButtonsGrid"
+ Grid.Column="1"
+ Width="16">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="*" />
+ <RowDefinition Height="*" />
+ </Grid.RowDefinitions>
+ <Button
+ Style="{StaticResource UpButton}"
+ Grid.Row="0"
+ FontSize="4"
+ PreviewMouseLeftButtonDown="UpButtonMouseLeftButtonDown"
+ PreviewMouseLeftButtonUp="UpButtonMouseLeftButtonUp">
+ <Polygon
+ Style="{StaticResource Arrow}"
+ Points="4,0 0,4 8,4" />
+ </Button>
+ <Button
+ Style="{StaticResource DownButton}"
+ Grid.Row="1"
+ FontSize="4"
+ PreviewMouseLeftButtonDown="DownButtonMouseLeftButtonDown"
+ PreviewMouseLeftButtonUp="DownButtonMouseLeftButtonUp">
+ <Polygon
+ Style="{StaticResource Arrow}"
+ Points="0,0 8,0 4,4" />
+ </Button>
+ </Grid>
+ </Grid>
+</UserControl>
diff --git a/win/CS/HandBrakeWPF/Controls/NumberBox.xaml.cs b/win/CS/HandBrakeWPF/Controls/NumberBox.xaml.cs
new file mode 100644
index 000000000..7a8fc7519
--- /dev/null
+++ b/win/CS/HandBrakeWPF/Controls/NumberBox.xaml.cs
@@ -0,0 +1,655 @@
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="NumberBox.xaml.cs" company="HandBrake Project (http://handbrake.fr)">
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
+// </copyright>
+// <summary>
+// Interaction logic for NumberBox.xaml
+// </summary>
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.Controls
+{
+ using System;
+ using System.Globalization;
+ using System.Linq;
+ using System.Windows;
+ using System.Windows.Controls;
+ using System.Windows.Input;
+ using System.Windows.Media;
+
+ /// <summary>
+ /// Interaction logic for NumberBox.xaml
+ /// </summary>
+ public partial class NumberBox
+ {
+ #region Constants and Fields
+
+ /// <summary>
+ /// The maximum property name.
+ /// </summary>
+ public const string MaximumPropertyName = "Maximum";
+
+ /// <summary>
+ /// The minimum property name.
+ /// </summary>
+ public const string MinimumPropertyName = "Minimum";
+
+ /// <summary>
+ /// The modulus property name.
+ /// </summary>
+ public const string ModulusPropertyName = "Modulus";
+
+ /// <summary>
+ /// The allow empty property.
+ /// </summary>
+ public static readonly DependencyProperty AllowEmptyProperty = DependencyProperty.Register(
+ "AllowEmpty", typeof(bool), typeof(NumberBox), new PropertyMetadata(true, OnAllowEmptyChanged));
+
+ /// <summary>
+ /// The maximum property.
+ /// </summary>
+ public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register(
+ MaximumPropertyName, typeof(double), typeof(NumberBox), new UIPropertyMetadata(double.MaxValue));
+
+ /// <summary>
+ /// The minimum property.
+ /// </summary>
+ public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register(
+ MinimumPropertyName, typeof(double), typeof(NumberBox), new UIPropertyMetadata(double.MinValue));
+
+ /// <summary>
+ /// The modulus property.
+ /// </summary>
+ public static readonly DependencyProperty ModulusProperty = DependencyProperty.Register(
+ ModulusPropertyName, typeof(double), typeof(NumberBox), new UIPropertyMetadata(0.0));
+
+ /// <summary>
+ /// The number property.
+ /// </summary>
+ public static readonly DependencyProperty NumberProperty = DependencyProperty.Register(
+ "Number", typeof(double), typeof(NumberBox), new PropertyMetadata(OnNumberChanged));
+
+ /// <summary>
+ /// The select all threshold.
+ /// </summary>
+ private static readonly TimeSpan SelectAllThreshold = TimeSpan.FromMilliseconds(500);
+
+ /// <summary>
+ /// The has focus.
+ /// </summary>
+ private bool hasFocus;
+
+ /// <summary>
+ /// The last focus mouse down.
+ /// </summary>
+ private DateTime lastFocusMouseDown;
+
+ /// <summary>
+ /// The none caption.
+ /// </summary>
+ private string noneCaption;
+
+ /// <summary>
+ /// The refire control.
+ /// </summary>
+ private RefireControl refireControl;
+
+ /// <summary>
+ /// The suppress refresh.
+ /// </summary>
+ private bool suppressRefresh;
+
+ #endregion
+
+ #region Constructors and Destructors
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="NumberBox"/> class.
+ /// </summary>
+ public NumberBox()
+ {
+ this.noneCaption = "(none)";
+ this.UpdateBindingOnTextChange = true;
+ this.ShowIncrementButtons = true;
+ this.SelectAllOnClick = true;
+
+ this.InitializeComponent();
+
+ this.RefreshNumberBox();
+ }
+
+ #endregion
+
+ #region Properties
+
+ /// <summary>
+ /// Gets or sets a value indicating whether allow empty.
+ /// </summary>
+ public bool AllowEmpty
+ {
+ get
+ {
+ return (bool)this.GetValue(AllowEmptyProperty);
+ }
+
+ set
+ {
+ this.SetValue(AllowEmptyProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the maximum.
+ /// </summary>
+ public double Maximum
+ {
+ get
+ {
+ return (double)this.GetValue(MaximumProperty);
+ }
+ set
+ {
+ this.SetValue(MaximumProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the minimum.
+ /// </summary>
+ public double Minimum
+ {
+ get
+ {
+ return (double)this.GetValue(MinimumProperty);
+ }
+ set
+ {
+ this.SetValue(MinimumProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the modulus.
+ /// </summary>
+ public double Modulus
+ {
+ get
+ {
+ return (double)this.GetValue(ModulusProperty);
+ }
+ set
+ {
+ this.SetValue(ModulusProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the none caption.
+ /// </summary>
+ public string NoneCaption
+ {
+ get
+ {
+ return this.noneCaption;
+ }
+
+ set
+ {
+ this.noneCaption = value;
+ this.RefreshNumberBox();
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the number.
+ /// </summary>
+ public double Number
+ {
+ get
+ {
+ return (double)this.GetValue(NumberProperty);
+ }
+
+ set
+ {
+ this.SetValue(NumberProperty, value);
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether select all on click.
+ /// </summary>
+ public bool SelectAllOnClick { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether show increment buttons.
+ /// </summary>
+ public bool ShowIncrementButtons { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether update binding on text change.
+ /// </summary>
+ public bool UpdateBindingOnTextChange { get; set; }
+
+ /// <summary>
+ /// Gets the increment.
+ /// </summary>
+ private double Increment
+ {
+ get
+ {
+ return this.Modulus > 0 ? this.Modulus : 1;
+ }
+ }
+
+ #endregion
+
+ #region Methods
+
+ /// <summary>
+ /// The on allow empty changed.
+ /// </summary>
+ /// <param name="dependencyObject">
+ /// The dependency object.
+ /// </param>
+ /// <param name="eventArgs">
+ /// The event args.
+ /// </param>
+ private static void OnAllowEmptyChanged(
+ DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs)
+ {
+ var numBox = dependencyObject as NumberBox;
+ if (numBox != null)
+ {
+ numBox.RefreshNumberBox();
+ }
+ }
+
+ /// <summary>
+ /// The on number changed.
+ /// </summary>
+ /// <param name="dependencyObject">
+ /// The dependency object.
+ /// </param>
+ /// <param name="eventArgs">
+ /// The event args.
+ /// </param>
+ private static void OnNumberChanged(
+ DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs)
+ {
+ if (eventArgs.NewValue != eventArgs.OldValue)
+ {
+ var numBox = dependencyObject as NumberBox;
+
+ if (!numBox.suppressRefresh)
+ {
+ numBox.RefreshNumberBox();
+ }
+ }
+ }
+
+ /// <summary>
+ /// The decrement number.
+ /// </summary>
+ private void DecrementNumber()
+ {
+ double newNumber;
+ if (this.AllowEmpty && this.Number == 0)
+ {
+ newNumber = Math.Min(this.Maximum, -this.Increment);
+ }
+ else
+ {
+ newNumber = this.Number - this.Increment;
+ }
+
+ if (newNumber < this.Minimum)
+ {
+ newNumber = this.Minimum;
+ }
+
+ if (newNumber != this.Number)
+ {
+ this.Number = newNumber;
+ }
+ }
+
+ /// <summary>
+ /// The down button mouse left button down.
+ /// </summary>
+ /// <param name="sender">
+ /// The sender.
+ /// </param>
+ /// <param name="e">
+ /// The e.
+ /// </param>
+ private void DownButtonMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+ {
+ this.refireControl = new RefireControl(this.DecrementNumber);
+ this.refireControl.Begin();
+ }
+
+ /// <summary>
+ /// The down button mouse left button up.
+ /// </summary>
+ /// <param name="sender">
+ /// The sender.
+ /// </param>
+ /// <param name="e">
+ /// The e.
+ /// </param>
+ private void DownButtonMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
+ {
+ this.refireControl.Stop();
+ }
+
+ /// <summary>
+ /// The get nearest value.
+ /// </summary>
+ /// <param name="number">
+ /// The number.
+ /// </param>
+ /// <param name="modulus">
+ /// The modulus.
+ /// </param>
+ /// <returns>
+ /// The <see cref="double"/>.
+ /// </returns>
+ private double GetNearestValue(double number, double modulus)
+ {
+ double remainder = number % modulus;
+
+ if (remainder == 0)
+ {
+ return number;
+ }
+
+ return remainder >= (modulus / 2) ? number + (modulus - remainder) : number - remainder;
+ }
+
+ /// <summary>
+ /// The increment number.
+ /// </summary>
+ private void IncrementNumber()
+ {
+ double newNumber;
+ if (this.AllowEmpty && this.Number == 0)
+ {
+ newNumber = Math.Max(this.Minimum, this.Increment);
+ }
+ else
+ {
+ newNumber = this.Number + this.Increment;
+ }
+
+ if (newNumber > this.Maximum)
+ {
+ newNumber = this.Maximum;
+ }
+
+ if (newNumber != this.Number)
+ {
+ this.Number = newNumber;
+ }
+ }
+
+ /// <summary>
+ /// The number box got focus.
+ /// </summary>
+ /// <param name="sender">
+ /// The sender.
+ /// </param>
+ /// <param name="e">
+ /// The e.
+ /// </param>
+ private void NumberBoxGotFocus(object sender, RoutedEventArgs e)
+ {
+ this.hasFocus = true;
+
+ if (this.AllowEmpty)
+ {
+ if (this.Number == 0)
+ {
+ this.numberBox.Text = string.Empty;
+ }
+
+ this.numberBox.Foreground = new SolidColorBrush(Colors.Black);
+ }
+ }
+
+ /// <summary>
+ /// The number box lost focus.
+ /// </summary>
+ /// <param name="sender">
+ /// The sender.
+ /// </param>
+ /// <param name="e">
+ /// The e.
+ /// </param>
+ private void NumberBoxLostFocus(object sender, RoutedEventArgs e)
+ {
+ this.hasFocus = false;
+
+ if (this.AllowEmpty && this.numberBox.Text == string.Empty)
+ {
+ this.Number = 0;
+ this.RefreshNumberBox();
+ return;
+ }
+
+ this.UpdateNumberBindingFromBox();
+ this.RefreshNumberBox();
+ }
+
+ /// <summary>
+ /// The number box preview key down.
+ /// </summary>
+ /// <param name="sender">
+ /// The sender.
+ /// </param>
+ /// <param name="e">
+ /// The e.
+ /// </param>
+ private void NumberBoxPreviewKeyDown(object sender, KeyEventArgs e)
+ {
+ if (e.Key == Key.Space)
+ {
+ e.Handled = true;
+ }
+ }
+
+ /// <summary>
+ /// The number box preview mouse down.
+ /// </summary>
+ /// <param name="sender">
+ /// The sender.
+ /// </param>
+ /// <param name="e">
+ /// The e.
+ /// </param>
+ private void NumberBoxPreviewMouseDown(object sender, MouseButtonEventArgs e)
+ {
+ if (!this.hasFocus)
+ {
+ this.lastFocusMouseDown = DateTime.Now;
+ }
+ }
+
+ /// <summary>
+ /// The number box preview mouse up.
+ /// </summary>
+ /// <param name="sender">
+ /// The sender.
+ /// </param>
+ /// <param name="e">
+ /// The e.
+ /// </param>
+ private void NumberBoxPreviewMouseUp(object sender, MouseButtonEventArgs e)
+ {
+ // If this mouse up is soon enough after an initial click on the box, select all.
+ if (this.SelectAllOnClick && DateTime.Now - this.lastFocusMouseDown < SelectAllThreshold)
+ {
+ this.Dispatcher.BeginInvoke(new Action(() => this.numberBox.SelectAll()));
+ }
+ }
+
+ /// <summary>
+ /// The number box preview text input.
+ /// </summary>
+ /// <param name="sender">
+ /// The sender.
+ /// </param>
+ /// <param name="e">
+ /// The e.
+ /// </param>
+ private void NumberBoxPreviewTextInput(object sender, TextCompositionEventArgs e)
+ {
+ if (e.Text.Any(c => !char.IsNumber(c) && c != '.' && (this.Minimum >= 0 || c != '-')))
+ {
+ e.Handled = true;
+ }
+ }
+
+ /// <summary>
+ /// The number box text changed.
+ /// </summary>
+ /// <param name="sender">
+ /// The sender.
+ /// </param>
+ /// <param name="e">
+ /// The e.
+ /// </param>
+ private void NumberBoxTextChanged(object sender, TextChangedEventArgs e)
+ {
+ if (this.UpdateBindingOnTextChange)
+ {
+ if (this.AllowEmpty && this.numberBox.Text == string.Empty)
+ {
+ this.Number = 0;
+ return;
+ }
+
+ this.UpdateNumberBindingFromBox();
+ }
+
+ this.RefreshNumberBoxColor();
+ }
+
+ /// <summary>
+ /// The number is valid.
+ /// </summary>
+ /// <param name="number">
+ /// The number.
+ /// </param>
+ /// <returns>
+ /// The <see cref="bool"/>.
+ /// </returns>
+ private bool NumberIsValid(double number)
+ {
+ return number >= this.Minimum && number <= this.Maximum;
+ }
+
+ /// <summary>
+ /// The refresh number box.
+ /// </summary>
+ private void RefreshNumberBox()
+ {
+ if (this.AllowEmpty && this.Number == 0)
+ {
+ this.numberBox.Text = this.hasFocus ? string.Empty : this.NoneCaption;
+
+ // this.numberBox.Foreground = new SolidColorBrush(Colors.Gray);
+ }
+ else
+ {
+ this.numberBox.Text = this.Number.ToString(CultureInfo.InvariantCulture);
+
+ // this.numberBox.Foreground = new SolidColorBrush(Colors.Black);
+ }
+
+ this.RefreshNumberBoxColor();
+ }
+
+ /// <summary>
+ /// The refresh number box color.
+ /// </summary>
+ private void RefreshNumberBoxColor()
+ {
+ this.numberBox.Foreground = this.numberBox.Text == this.NoneCaption ? new SolidColorBrush(Colors.Gray) : new SolidColorBrush(Colors.Black);
+ }
+
+ /// <summary>
+ /// The up button mouse left button down.
+ /// </summary>
+ /// <param name="sender">
+ /// The sender.
+ /// </param>
+ /// <param name="e">
+ /// The e.
+ /// </param>
+ private void UpButtonMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+ {
+ this.refireControl = new RefireControl(this.IncrementNumber);
+ this.refireControl.Begin();
+ }
+
+ /// <summary>
+ /// The up button mouse left button up.
+ /// </summary>
+ /// <param name="sender">
+ /// The sender.
+ /// </param>
+ /// <param name="e">
+ /// The e.
+ /// </param>
+ private void UpButtonMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
+ {
+ this.refireControl.Stop();
+ }
+
+ /// <summary>
+ /// The update number binding from box.
+ /// </summary>
+ private void UpdateNumberBindingFromBox()
+ {
+ double newNumber;
+ if (double.TryParse(this.numberBox.Text, out newNumber))
+ {
+ if (this.NumberIsValid(newNumber))
+ {
+ if (this.Modulus != 0)
+ {
+ newNumber = this.GetNearestValue(newNumber, this.Modulus);
+ }
+
+ if (newNumber != this.Number)
+ {
+ // While updating the binding we don't need to react to the change.
+ this.suppressRefresh = true;
+ this.Number = newNumber;
+ this.suppressRefresh = false;
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// The user control_ loaded.
+ /// </summary>
+ /// <param name="sender">
+ /// The sender.
+ /// </param>
+ /// <param name="e">
+ /// The e.
+ /// </param>
+ private void UserControl_Loaded(object sender, RoutedEventArgs e)
+ {
+ if (!this.ShowIncrementButtons)
+ {
+ this.incrementButtonsGrid.Visibility = Visibility.Collapsed;
+ }
+ }
+
+ #endregion
+ }
+} \ No newline at end of file
diff --git a/win/CS/HandBrakeWPF/Controls/RefireControl.cs b/win/CS/HandBrakeWPF/Controls/RefireControl.cs
new file mode 100644
index 000000000..e32f3b589
--- /dev/null
+++ b/win/CS/HandBrakeWPF/Controls/RefireControl.cs
@@ -0,0 +1,134 @@
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="RefireControl.cs" company="HandBrake Project (http://handbrake.fr)">
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
+// </copyright>
+// <summary>
+// The refire control.
+// </summary>
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.Controls
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Diagnostics;
+ using System.Threading;
+ using System.Windows;
+
+ /// <summary>
+ /// The refire control.
+ /// </summary>
+ public class RefireControl
+ {
+ #region Constants and Fields
+
+ /// <summary>
+ /// How long stages last.
+ /// </summary>
+ private const int StageDurationMsec = 900;
+
+ /// <summary>
+ /// The delays. At each stage the refire rate increases.
+ /// </summary>
+ private static readonly List<int> Delays = new List<int> { 500, 200, 100, 50, 20 };
+
+ /// <summary>
+ /// The refire action.
+ /// </summary>
+ private readonly Action refireAction;
+
+ /// <summary>
+ /// The refire sync.
+ /// </summary>
+ private readonly object refireSync = new object();
+
+ /// <summary>
+ /// The refire timer.
+ /// </summary>
+ private Timer refireTimer;
+
+ /// <summary>
+ /// The running.
+ /// </summary>
+ private bool running;
+
+ /// <summary>
+ /// The stopwatch.
+ /// </summary>
+ private Stopwatch stopwatch;
+
+ #endregion
+
+ #region Constructors and Destructors
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="RefireControl"/> class.
+ /// </summary>
+ /// <param name="refireAction">
+ /// The refire action.
+ /// </param>
+ public RefireControl(Action refireAction)
+ {
+ this.refireAction = refireAction;
+ }
+
+ #endregion
+
+ #region Public Methods
+
+ /// <summary>
+ /// The begin.
+ /// </summary>
+ public void Begin()
+ {
+ lock (this.refireSync)
+ {
+ this.stopwatch = Stopwatch.StartNew();
+ this.running = true;
+
+ // Fire once immediately.
+ this.refireAction();
+
+ this.refireTimer = new Timer(
+ obj =>
+ {
+ lock (this.refireSync)
+ {
+ if (this.running)
+ {
+ var stage = (int)(this.stopwatch.ElapsedMilliseconds / StageDurationMsec);
+
+ int newDelay = stage >= Delays.Count ? Delays[Delays.Count - 1] : Delays[stage];
+
+ Application.Current.Dispatcher.BeginInvoke(this.refireAction);
+
+ this.refireTimer.Change(newDelay, newDelay);
+ }
+ }
+ },
+ null,
+ Delays[0],
+ Delays[0]);
+ }
+ }
+
+ /// <summary>
+ /// The stop.
+ /// </summary>
+ public void Stop()
+ {
+ lock (this.refireSync)
+ {
+ this.stopwatch.Stop();
+ this.running = false;
+
+ if (this.refireTimer != null)
+ {
+ this.refireTimer.Dispose();
+ }
+ }
+ }
+
+ #endregion
+ }
+} \ No newline at end of file
diff --git a/win/CS/HandBrakeWPF/Converters/Options/OptionsTabConverter.cs b/win/CS/HandBrakeWPF/Converters/Options/OptionsTabConverter.cs
index 9c561e549..128596f3f 100644
--- a/win/CS/HandBrakeWPF/Converters/Options/OptionsTabConverter.cs
+++ b/win/CS/HandBrakeWPF/Converters/Options/OptionsTabConverter.cs
@@ -15,6 +15,8 @@ namespace HandBrakeWPF.Converters.Options
using System.Windows;
using System.Windows.Data;
+ using HandBrakeWPF.Model;
+
/// <summary>
/// The Options Tab Converter. Controls which tab is dispalyed.
/// </summary>
@@ -31,22 +33,25 @@ namespace HandBrakeWPF.Converters.Options
{
if (value != null && parameter != null)
{
- switch (value.ToString())
+ switch ((OptionsTab)value)
{
- case "General":
- if (parameter.ToString() == "General") return Visibility.Visible;
+ case OptionsTab.General:
+ if ((OptionsTab)parameter == OptionsTab.General) return Visibility.Visible;
+ break;
+ case OptionsTab.OutputFiles:
+ if ((OptionsTab)parameter == OptionsTab.OutputFiles) return Visibility.Visible;
break;
- case "Output Files":
- if (parameter.ToString() == "Output Files") return Visibility.Visible;
+ case OptionsTab.AudioAndSubtitles:
+ if ((OptionsTab)parameter == OptionsTab.AudioAndSubtitles) return Visibility.Visible;
break;
- case "Audio and Subtitles":
- if (parameter.ToString() == "Audio and Subtitles") return Visibility.Visible;
+ case OptionsTab.Advanced:
+ if ((OptionsTab)parameter == OptionsTab.Advanced) return Visibility.Visible;
break;
- case "Advanced":
- if (parameter.ToString() == "Advanced") return Visibility.Visible;
+ case OptionsTab.Updates:
+ if ((OptionsTab)parameter == OptionsTab.Updates) return Visibility.Visible;
break;
- case "Updates":
- if (parameter.ToString() == "Updates") return Visibility.Visible;
+ case OptionsTab.About:
+ if ((OptionsTab)parameter == OptionsTab.About) return Visibility.Visible;
break;
}
}
diff --git a/win/CS/HandBrakeWPF/Converters/Options/OptionsTabNameConverter.cs b/win/CS/HandBrakeWPF/Converters/Options/OptionsTabNameConverter.cs
new file mode 100644
index 000000000..beddd18be
--- /dev/null
+++ b/win/CS/HandBrakeWPF/Converters/Options/OptionsTabNameConverter.cs
@@ -0,0 +1,71 @@
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="OptionsTabNameConverter.cs" company="HandBrake Project (http://handbrake.fr)">
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
+// </copyright>
+// <summary>
+// A Converter to get the Display Name of each options tab.
+// </summary>
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.Converters.Options
+{
+ using System;
+ using System.Globalization;
+ using System.Windows.Data;
+
+ using HandBrake.ApplicationServices.Utilities;
+
+ using HandBrakeWPF.Model;
+
+ /// <summary>
+ /// A Converter to get the Display Name of each options tab.
+ /// </summary>
+ public class OptionsTabNameConverter : IValueConverter
+ {
+ /// <summary>
+ /// The convert.
+ /// </summary>
+ /// <param name="value">
+ /// The value.
+ /// </param>
+ /// <param name="targetType">
+ /// The target type.
+ /// </param>
+ /// <param name="parameter">
+ /// The parameter.
+ /// </param>
+ /// <param name="culture">
+ /// The culture.
+ /// </param>
+ /// <returns>
+ /// The <see cref="object"/>.
+ /// </returns>
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ return EnumHelper<OptionsTab>.GetDisplay((OptionsTab)value);
+ }
+
+ /// <summary>
+ /// The convert back.
+ /// </summary>
+ /// <param name="value">
+ /// The value.
+ /// </param>
+ /// <param name="targetType">
+ /// The target type.
+ /// </param>
+ /// <param name="parameter">
+ /// The parameter.
+ /// </param>
+ /// <param name="culture">
+ /// The culture.
+ /// </param>
+ /// <returns>
+ /// The <see cref="object"/>.
+ /// </returns>
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ return EnumHelper<OptionsTab>.GetValue(value.ToString());
+ }
+ }
+} \ No newline at end of file
diff --git a/win/CS/HandBrakeWPF/HandBrakeWPF.csproj b/win/CS/HandBrakeWPF/HandBrakeWPF.csproj
index 4b3afd937..e11f8e8f9 100644
--- a/win/CS/HandBrakeWPF/HandBrakeWPF.csproj
+++ b/win/CS/HandBrakeWPF/HandBrakeWPF.csproj
@@ -81,7 +81,8 @@
<Reference Include="Castle.Windsor">
<HintPath>..\libraries\caliburn\Castle.Windsor.dll</HintPath>
</Reference>
- <Reference Include="EagleBoost.Wpf.Presentation">
+ <Reference Include="EagleBoost.Wpf.Presentation, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
<HintPath>..\libraries\EagleBoost.Wpf.Presentation.dll</HintPath>
</Reference>
<Reference Include="GongSolutions.Wpf.DragDrop">
@@ -100,6 +101,7 @@
</Reference>
<Reference Include="PresentationFramework" />
<Reference Include="System" />
+ <Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Drawing" />
<Reference Include="System.Management" />
<Reference Include="System.Runtime.Serialization" />
@@ -123,12 +125,17 @@
<Compile Include="AttachedProperties\MenuItemExtensions.cs" />
<Compile Include="Commands\CancelScanCommand.cs" />
<Compile Include="Commands\Interfaces\IAdvancedEncoderOptionsCommand.cs" />
+ <Compile Include="Commands\OpenOptionsScreenCommand.cs" />
<Compile Include="Commands\ProcessShortcutCommand.cs" />
<Compile Include="Commands\SourceMenuCommand.cs" />
<Compile Include="Commands\AdvancedEncoderOptionsCommand.cs" />
<Compile Include="Controls\Loading.xaml.cs">
<DependentUpon>Loading.xaml</DependentUpon>
</Compile>
+ <Compile Include="Controls\NumberBox.xaml.cs">
+ <DependentUpon>NumberBox.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="Controls\RefireControl.cs" />
<Compile Include="Controls\StatusPanel.xaml.cs">
<DependentUpon>StatusPanel.xaml</DependentUpon>
</Compile>
@@ -137,10 +144,12 @@
<Compile Include="Converters\Audio\AudioQueueDisplayConverter.cs" />
<Compile Include="Converters\BooleanToHiddenVisibilityConverter.cs" />
<Compile Include="Converters\Options\OptionsTabConverter.cs" />
+ <Compile Include="Converters\Options\OptionsTabNameConverter.cs" />
<Compile Include="Converters\Subtitles\SubtitlesQueueDisplayConverter.cs" />
<Compile Include="Converters\Video\VideoEncoderConverter.cs" />
<Compile Include="Helpers\GrayscaleImage.cs" />
<Compile Include="Helpers\GrowlCommunicator.cs" />
+ <Compile Include="Model\OptionsTab.cs" />
<Compile Include="Services\DriveDetectService.cs" />
<Compile Include="Services\EncodeServiceWrapper.cs" />
<Compile Include="Services\Interfaces\IDriveDetectService.cs" />
@@ -299,6 +308,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
+ <Page Include="Controls\NumberBox.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
<Page Include="Controls\StatusPanel.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
diff --git a/win/CS/HandBrakeWPF/Model/OptionsTab.cs b/win/CS/HandBrakeWPF/Model/OptionsTab.cs
new file mode 100644
index 000000000..93692d13d
--- /dev/null
+++ b/win/CS/HandBrakeWPF/Model/OptionsTab.cs
@@ -0,0 +1,37 @@
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="OptionsTab.cs" company="HandBrake Project (http://handbrake.fr)">
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
+// </copyright>
+// <summary>
+// A enum representing each tab on the options screen.
+// </summary>
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.Model
+{
+ using System.ComponentModel.DataAnnotations;
+
+ /// <summary>
+ /// A enum representing each tab on the options screen.
+ /// </summary>
+ public enum OptionsTab
+ {
+ [Display(Name = "General")]
+ General = 0,
+
+ [Display(Name = "Output Files")]
+ OutputFiles,
+
+ [Display(Name = "Audio and Subtitles")]
+ AudioAndSubtitles,
+
+ [Display(Name = "Advanced")]
+ Advanced,
+
+ [Display(Name = "Updates")]
+ Updates,
+
+ [Display(Name = "About HandBrake")]
+ About,
+ }
+}
diff --git a/win/CS/HandBrakeWPF/Properties/Resources.Designer.cs b/win/CS/HandBrakeWPF/Properties/Resources.Designer.cs
index ba0031cc6..5adc38011 100644
--- a/win/CS/HandBrakeWPF/Properties/Resources.Designer.cs
+++ b/win/CS/HandBrakeWPF/Properties/Resources.Designer.cs
@@ -61,6 +61,40 @@ namespace HandBrakeWPF.Properties {
}
/// <summary>
+ /// Looks up a localized string similar to Copyright (C) 2003-2013 The HandBrake Team
+ ///
+ ///This program is free software; you can redistribute it and/or
+ ///modify it under the terms of the GNU General Public License
+ ///as published by the Free Software Foundation; either version 2
+ ///of the License, or (at your option) any later version.
+ ///
+ ///This program is distributed in the hope that it will be useful,
+ ///but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ///MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ ///GNU General Public License f [rest of string was truncated]&quot;;.
+ /// </summary>
+ public static string About_GPL {
+ get {
+ return ResourceManager.GetString("About_GPL", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to You can optionally store a maximum resolution for encodes that use this preset. There are 3 modes:
+ ///
+ ///None: There is no maximum resolution for encodes using this preset. They will always use the source resolution minus any cropping that may be applied.
+ ///
+ ///Custom: You can optionally set a Maximum width and height. When doing this an encode will be less than or equal to these values.
+ ///
+ ///Source Maximum: Similar to custom, but the resolution of your current source is used as the Max width and Height values in [rest of string was truncated]&quot;;.
+ /// </summary>
+ public static string AddPreset_PictureSizeMode {
+ get {
+ return ResourceManager.GetString("AddPreset_PictureSizeMode", resourceCulture);
+ }
+ }
+
+ /// <summary>
/// Looks up a localized string similar to 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.
@@ -153,6 +187,17 @@ namespace HandBrakeWPF.Properties {
}
/// <summary>
+ /// Looks up a localized string similar to The options passed to the x264 encoder.
+ ///The above controls are only a subset of useful x264 parameters.
+ ///This box allows you to add or modify additional or current parameters as desired. .
+ /// </summary>
+ public static string Advanced_EncoderOptions {
+ get {
+ return ResourceManager.GetString("Advanced_EncoderOptions", resourceCulture);
+ }
+ }
+
+ /// <summary>
/// Looks up a localized string similar to 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.
///
@@ -287,6 +332,31 @@ namespace HandBrakeWPF.Properties {
}
/// <summary>
+ /// Looks up a localized string similar to Warning: RF 0 is Lossless!.
+ /// </summary>
+ public static string Video_LosslessWarning {
+ get {
+ return ResourceManager.GetString("Video_LosslessWarning", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to 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.
+ ///
+ ///x264&apos;s scale is logarithmic and lower values correspond to higher quality.
+ ///
+ ///So small increases in value will result in progressively larger increases in the resulting file size.
+ ///
+ ///Suggested values are: 18 to 20 for Standard Definition and 20 to 23 for High Definition..
+ /// </summary>
+ public static string Video_LosslessWarningTooltip {
+ get {
+ return ResourceManager.GetString("Video_LosslessWarningTooltip", resourceCulture);
+ }
+ }
+
+ /// <summary>
/// Looks up a localized string similar to Set the desired quality factor. The encoder targets a certain quality.
///The scale used by each video encoder is different.
///
diff --git a/win/CS/HandBrakeWPF/Properties/Resources.resx b/win/CS/HandBrakeWPF/Properties/Resources.resx
index 6265c3fc9..6148d29c6 100644
--- a/win/CS/HandBrakeWPF/Properties/Resources.resx
+++ b/win/CS/HandBrakeWPF/Properties/Resources.resx
@@ -277,4 +277,48 @@ Suggested values are: 18 to 20 for Standard Definition and 20 to 23 for High Def
FFMpeg's and Theora's scale is more linear. These encoders do not have a lossless mode.</value>
</data>
+ <data name="Video_LosslessWarning" xml:space="preserve">
+ <value>Warning: RF 0 is Lossless!</value>
+ </data>
+ <data name="Video_LosslessWarningTooltip" xml:space="preserve">
+ <value>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.
+
+x264's scale is logarithmic and lower values correspond to higher quality.
+
+So small increases in value will result in progressively larger increases in the resulting file size.
+
+Suggested values are: 18 to 20 for Standard Definition and 20 to 23 for High Definition.</value>
+ </data>
+ <data name="AddPreset_PictureSizeMode" xml:space="preserve">
+ <value>You can optionally store a maximum resolution for encodes that use this preset. There are 3 modes:
+
+None: There is no maximum resolution for encodes using this preset. They will always use the source resolution minus any cropping that may be applied.
+
+Custom: You can optionally set a Maximum width and height. When doing this an encode will be less than or equal to these values.
+
+Source Maximum: Similar to custom, but the resolution of your current source is used as the Max width and Height values instead.</value>
+ </data>
+ <data name="Advanced_EncoderOptions" xml:space="preserve">
+ <value>The options passed to the x264 encoder.
+The above controls are only a subset of useful x264 parameters.
+This box allows you to add or modify additional or current parameters as desired. </value>
+ </data>
+ <data name="About_GPL" xml:space="preserve">
+ <value>Copyright (C) 2003-2013 The HandBrake Team
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</value>
+ </data>
</root> \ No newline at end of file
diff --git a/win/CS/HandBrakeWPF/ViewModels/AdvancedViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/AdvancedViewModel.cs
index 29b4bed48..741f31876 100644
--- a/win/CS/HandBrakeWPF/ViewModels/AdvancedViewModel.cs
+++ b/win/CS/HandBrakeWPF/ViewModels/AdvancedViewModel.cs
@@ -98,7 +98,7 @@ namespace HandBrakeWPF.ViewModels
/// <summary>
/// The motion estimation range.
/// </summary>
- private AdvancedChoice motionEstimationRange;
+ private int motionEstimationRange;
/// <summary>
/// The no dct decimate.
@@ -418,7 +418,13 @@ namespace HandBrakeWPF.ViewModels
{
this.motionEstimationMethod = value;
this.NotifyOfPropertyChange(() => this.MotionEstimationMethod);
- this.NotifyOfPropertyChange(() => this.MotionEstimationRangeVisible);
+
+ if ((MotionEstimationMethod.Value == "hex" || MotionEstimationMethod.Value == "dia") && (motionEstimationRange > 16))
+ {
+ this.motionEstimationRange = 16;
+ this.NotifyOfPropertyChange(() => this.MotionEstimationRange);
+ }
+
this.UpdateOptionsString();
}
}
@@ -426,7 +432,7 @@ namespace HandBrakeWPF.ViewModels
/// <summary>
/// Gets or sets MotionEstimationRange.
/// </summary>
- public AdvancedChoice MotionEstimationRange
+ public int MotionEstimationRange
{
get
{
@@ -435,25 +441,25 @@ namespace HandBrakeWPF.ViewModels
set
{
- this.motionEstimationRange = value;
+ if ((MotionEstimationMethod.Value == "hex" || MotionEstimationMethod.Value == "dia") && (value > 16))
+ {
+ this.motionEstimationRange = 16;
+ }
+ else if (value < 4)
+ {
+ this.motionEstimationRange = 4;
+ }
+ else
+ {
+ this.motionEstimationRange = value;
+ }
+
this.NotifyOfPropertyChange(() => this.MotionEstimationRange);
this.UpdateOptionsString();
}
}
/// <summary>
- /// Gets a value indicating whether MotionEstimationRangeVisible.
- /// </summary>
- public bool MotionEstimationRangeVisible
- {
- get
- {
- string motionMethod = this.MotionEstimationMethod.Value;
- return motionMethod == "umh" || motionMethod == "esa" || motionMethod == "tesa";
- }
- }
-
- /// <summary>
/// Gets or sets a value indicating whether NoDctDecimate.
/// </summary>
public bool NoDctDecimate
@@ -772,13 +778,7 @@ namespace HandBrakeWPF.ViewModels
case "merange":
if (int.TryParse(optionValue, out parseInt))
{
- newChoice =
- AdvancedChoicesHelper.MotionEstimationRange.SingleOrDefault(
- choice => choice.Value == parseInt.ToString(CultureInfo.InvariantCulture));
- if (newChoice != null)
- {
- this.MotionEstimationRange = newChoice;
- }
+ this.MotionEstimationRange = parseInt;
}
break;
@@ -1015,8 +1015,7 @@ namespace HandBrakeWPF.ViewModels
AdvancedChoicesHelper.MotionEstimationMethod.SingleOrDefault(choice => choice.IsDefault);
this.SubpixelMotionEstimation =
AdvancedChoicesHelper.SubpixelMotionEstimation.SingleOrDefault(choice => choice.IsDefault);
- this.MotionEstimationRange =
- AdvancedChoicesHelper.MotionEstimationRange.SingleOrDefault(choice => choice.IsDefault);
+ this.MotionEstimationRange = 16;
this.Analysis = AdvancedChoicesHelper.Analysis.SingleOrDefault(choice => choice.IsDefault);
this.EightByEightDct = true;
this.CabacEntropyCoding = true;
@@ -1107,11 +1106,9 @@ namespace HandBrakeWPF.ViewModels
newOptions.Add("subme=" + this.SubpixelMotionEstimation.Value);
}
- string motionEstimation = this.MotionEstimationMethod.Value;
- if ((motionEstimation == "umh" || motionEstimation == "esa" || motionEstimation == "tesa") &&
- !this.MotionEstimationRange.IsDefault)
+ if (this.MotionEstimationRange != 16)
{
- newOptions.Add("merange=" + this.MotionEstimationRange.Value);
+ newOptions.Add("merange=" + this.MotionEstimationRange);
}
if (!this.Analysis.IsDefault)
diff --git a/win/CS/HandBrakeWPF/ViewModels/AudioViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/AudioViewModel.cs
index 8f7cbbc01..516fc7642 100644
--- a/win/CS/HandBrakeWPF/ViewModels/AudioViewModel.cs
+++ b/win/CS/HandBrakeWPF/ViewModels/AudioViewModel.cs
@@ -23,6 +23,8 @@ namespace HandBrakeWPF.ViewModels
using HandBrake.ApplicationServices.Utilities;
using HandBrake.Interop.Model.Encoding;
+ using HandBrakeWPF.Commands;
+ using HandBrakeWPF.Model;
using HandBrakeWPF.ViewModels.Interfaces;
/// <summary>
@@ -167,6 +169,15 @@ namespace HandBrakeWPF.ViewModels
}
}
+ /// <summary>
+ /// Open the options screen to the Audio and Subtitles tab.
+ /// </summary>
+ public void SetDefaultBehaviour()
+ {
+ OpenOptionsScreenCommand command = new OpenOptionsScreenCommand();
+ command.Execute(OptionsTab.AudioAndSubtitles);
+ }
+
#endregion
#region Implemented Interfaces
@@ -259,7 +270,7 @@ namespace HandBrakeWPF.ViewModels
{
if (this.SourceTracks != null)
{
- Audio track = sourceTrack ?? this.SourceTracks.FirstOrDefault();
+ Audio track = sourceTrack ?? this.GetPreferredAudioTrack();
if (track != null)
{
this.Task.AudioTracks.Add(new AudioTrack { ScannedTrack = track });
@@ -272,11 +283,20 @@ namespace HandBrakeWPF.ViewModels
/// </summary>
private void AddAllRemainingTracks()
{
+ // For all the source audio tracks
foreach (Audio sourceTrack in this.SourceTracks)
{
- bool found = this.Task.AudioTracks.Any(audioTrack => audioTrack.ScannedTrack == sourceTrack);
+ // Step 1: If "Add only One per language" is turned on, check to see if this language is already added.
+ if (this.CanSkipSourceTrack(sourceTrack))
+ {
+ continue;
+ }
+
+ // Step 2: Check if the track list already contrains this track
+ bool found = this.Task.AudioTracks.Any(audioTrack => Equals(audioTrack.ScannedTrack, sourceTrack));
if (!found)
{
+ // If it doesn't, add it.
this.Add(sourceTrack);
}
}
@@ -287,24 +307,20 @@ namespace HandBrakeWPF.ViewModels
/// </summary>
public void AddAllRemainingForSelectedLanguages()
{
- // Figure out the source tracks we want to add
- List<Audio> trackList = new List<Audio>();
- foreach (
- string language in
- this.UserSettingService.GetUserSetting<StringCollection>(
- UserSettingConstants.SelectedLanguages))
- {
- // TODO add support for "Add only 1 per language"
- trackList.AddRange(this.SourceTracks.Where(source => source.Language.Trim() == language));
- }
-
// Add them if they are not already added.
- foreach (Audio sourceTrack in trackList)
+ foreach (Audio sourceTrack in this.GetSelectedLanguagesTracks())
{
- bool found = this.Task.AudioTracks.Any(audioTrack => audioTrack.ScannedTrack == sourceTrack);
+ // Step 1: If "Add only One per language" is turned on, check to see if this language is already added.
+ if (this.CanSkipSourceTrack(sourceTrack))
+ {
+ continue;
+ }
+ // Step 2: Check if the track list already contrains this track
+ bool found = this.Task.AudioTracks.Any(audioTrack => Equals(audioTrack.ScannedTrack, sourceTrack));
if (!found)
{
+ // If it doesn't, add it.
this.Add(sourceTrack);
}
}
@@ -321,18 +337,10 @@ namespace HandBrakeWPF.ViewModels
// Clear out the old tracks
this.Task.AudioTracks.Clear();
- // Get the preferred Language
- IEnumerable<Audio> preferredAudioTracks =
- this.SourceTracks.Where(
- item =>
- item.Language.Contains(
- this.UserSettingService.GetUserSetting<string>(UserSettingConstants.NativeLanguage)));
- Audio preferred = preferredAudioTracks.FirstOrDefault() ?? this.SourceTracks.FirstOrDefault();
-
// Add the preset audio tracks with the preferred language
foreach (AudioTrack track in preset.Task.AudioTracks)
{
- this.Task.AudioTracks.Add(new AudioTrack(track) { ScannedTrack = preferred });
+ this.Task.AudioTracks.Add(new AudioTrack(track) { ScannedTrack = this.GetPreferredAudioTrack() });
}
}
@@ -341,44 +349,24 @@ namespace HandBrakeWPF.ViewModels
/// </summary>
private void AutomaticTrackSelection()
{
- List<Audio> trackList = new List<Audio>();
if (!this.SourceTracks.Any())
{
+ // Clear out the old tracks
+ this.Task.AudioTracks.Clear();
+
return;
}
- // Step 1: Fetch all the Preferred Language settings
- if (this.UserSettingService.GetUserSetting<string>(UserSettingConstants.NativeLanguage) == "Any")
- {
- // If we have Any as the preferred Language, just set the first track to all audio tracks.
- trackList.Add(this.SourceTracks.FirstOrDefault());
- }
- else
+ // Default all the language tracks to the preferred or first language of this source.
+ foreach (AudioTrack track in this.Task.AudioTracks)
{
- // Otherwise, fetch the preferred language.
- foreach (
- Audio item in
- this.SourceTracks.Where(
- item =>
- item.Language.Contains(
- this.UserSettingService.GetUserSetting<string>(UserSettingConstants.NativeLanguage))))
- {
- trackList.Add(item);
- break;
- }
+ track.ScannedTrack = this.GetPreferredAudioTrack();
}
- // Step 2: Handle "All Remaining Tracks" and "All for Selected Languages" or use the default behaviour
+ // Handle the default selection behaviour.
int mode = this.UserSettingService.GetUserSetting<int>(UserSettingConstants.DubModeAudio);
-
switch (mode)
{
- default: // Default by setting all existing tracks to a preferred or first source track.
- foreach (AudioTrack track in this.Task.AudioTracks)
- {
- track.ScannedTrack = trackList.FirstOrDefault() ?? this.SourceTracks.FirstOrDefault();
- }
- break;
case 1: // Adding all remaining audio tracks
this.AddAllRemaining();
break;
@@ -389,35 +377,59 @@ namespace HandBrakeWPF.ViewModels
}
/// <summary>
- /// The get language tracks.
+ /// The get preferred audio track, or the first if none available.
+ /// </summary>
+ /// <returns>
+ /// The users preferred language, or the first if none available.
+ /// </returns>
+ private Audio GetPreferredAudioTrack()
+ {
+ // Get the preferred Language
+ IEnumerable<Audio> preferredAudioTracks =
+ this.SourceTracks.Where(
+ item =>
+ item.Language.Contains(
+ this.UserSettingService.GetUserSetting<string>(UserSettingConstants.NativeLanguage)));
+ return preferredAudioTracks.FirstOrDefault() ?? this.SourceTracks.FirstOrDefault();
+ }
+
+ /// <summary>
+ /// Gets a list of source tracks for the users selected languages.
/// </summary>
/// <returns>
- /// The Users desired audio tracks
+ /// A list of source audio tracks.
/// </returns>
- private List<Audio> GetLanguageTracks()
+ private IEnumerable<Audio> GetSelectedLanguagesTracks()
{
List<Audio> trackList = new List<Audio>();
- if (this.UserSettingService.GetUserSetting<string>(UserSettingConstants.NativeLanguage) == "Any")
+ foreach (string language in this.UserSettingService.GetUserSetting<StringCollection>(UserSettingConstants.SelectedLanguages))
{
- // If we have Any as the preferred Language, just set the first track to all audio tracks.
- trackList.Add(this.SourceTracks.FirstOrDefault());
+ trackList.AddRange(this.SourceTracks.Where(source => source.Language.Trim() == language));
}
- else
+
+ return trackList;
+ }
+
+ /// <summary>
+ /// Checks to see if we can skip over the given source audio track.
+ /// True when the user has set "Add only one per language" feature AND the language is contained in the track list.
+ /// </summary>
+ /// <param name="sourceTrack">
+ /// The source track.
+ /// </param>
+ /// <returns>
+ /// True when the user has set "Add only one per language" feature AND the language is contained in the track list
+ /// </returns>
+ private bool CanSkipSourceTrack(Audio sourceTrack)
+ {
+ bool addOnlyOnePerLanguage = this.UserSettingService.GetUserSetting<bool>(UserSettingConstants.AddOnlyOneAudioPerLanguage);
+ bool sourceTrackLanguageFound = this.Task.AudioTracks.Any(audioTrack => audioTrack.ScannedTrack != null && sourceTrack.Language == audioTrack.ScannedTrack.Language);
+ if (addOnlyOnePerLanguage && sourceTrackLanguageFound)
{
- // Otherwise, fetch the preferred language.
- foreach (
- Audio item in
- this.SourceTracks.Where(
- item =>
- item.Language.Contains(
- this.UserSettingService.GetUserSetting<string>(UserSettingConstants.NativeLanguage))))
- {
- trackList.Add(item);
- break;
- }
+ return true; // This track can be skipped.
}
- return trackList;
+ return false;
}
#endregion
diff --git a/win/CS/HandBrakeWPF/ViewModels/Interfaces/IOptionsViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/Interfaces/IOptionsViewModel.cs
index 7805aea63..c2d48f8e5 100644
--- a/win/CS/HandBrakeWPF/ViewModels/Interfaces/IOptionsViewModel.cs
+++ b/win/CS/HandBrakeWPF/ViewModels/Interfaces/IOptionsViewModel.cs
@@ -9,10 +9,19 @@
namespace HandBrakeWPF.ViewModels.Interfaces
{
+ using HandBrakeWPF.Model;
+
/// <summary>
/// The Options Screen View Model Interface
/// </summary>
public interface IOptionsViewModel
{
+ /// <summary>
+ /// The goto tab.
+ /// </summary>
+ /// <param name="tab">
+ /// The tab.
+ /// </param>
+ void GotoTab(OptionsTab tab);
}
} \ No newline at end of file
diff --git a/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs
index 6d2e736a3..e814e897c 100644
--- a/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs
+++ b/win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs
@@ -938,16 +938,8 @@ namespace HandBrakeWPF.ViewModels
/// </summary>
public void OpenAboutApplication()
{
- Window window = Application.Current.Windows.Cast<Window>().FirstOrDefault(x => x.GetType() == typeof(AboutView));
-
- if (window != null)
- {
- window.Activate();
- }
- else
- {
- this.WindowManager.ShowWindow(IoC.Get<IAboutViewModel>());
- }
+ OpenOptionsScreenCommand command = new OpenOptionsScreenCommand();
+ command.Execute(OptionsTab.About);
}
/// <summary>
@@ -1025,8 +1017,8 @@ namespace HandBrakeWPF.ViewModels
/// </summary>
public void CheckForUpdates()
{
- this.ProgramStatusLabel = "Checking for Updates ...";
- this.updateService.CheckForUpdates(this.HandleManualUpdateCheckResults);
+ OpenOptionsScreenCommand command = new OpenOptionsScreenCommand();
+ command.Execute(OptionsTab.Updates);
}
/// <summary>
@@ -1656,27 +1648,6 @@ namespace HandBrakeWPF.ViewModels
this.ProgramStatusLabel = "A New Update is Available. Goto Tools Menu > Options to Install";
}
}
-
- /// <summary>
- /// Handle Update Check Results
- /// </summary>
- /// <param name="information">
- /// The information.
- /// </param>
- private void HandleManualUpdateCheckResults(UpdateCheckInformation information)
- {
- if (information.NewVersionAvailable)
- {
- MessageBox.Show("A New Version is available. Goto Tools Menu > Options to Install or visit http://handbrake.fr for details.", "Update Available", MessageBoxButton.OK, MessageBoxImage.Information);
- }
- else
- {
- MessageBox.Show("There is no new updates at this time.", "No Update Available", MessageBoxButton.OK, MessageBoxImage.Information);
- }
-
- this.ProgramStatusLabel = "Ready";
- }
-
#endregion
#region Event Handlers
@@ -1715,7 +1686,6 @@ namespace HandBrakeWPF.ViewModels
this.NotifyOfPropertyChange(() => this.ScannedSource.Titles);
this.SelectedTitle = this.ScannedSource.Titles.FirstOrDefault(t => t.MainTitle)
?? this.ScannedSource.Titles.FirstOrDefault();
- this.SetupTabs();
}
if (e.Successful && this.selectedTitle != null)
{
diff --git a/win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs
index 82c0daa3c..36fa35985 100644
--- a/win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs
+++ b/win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs
@@ -309,7 +309,7 @@ namespace HandBrakeWPF.ViewModels
/// <summary>
/// The options tab that is selected.
/// </summary>
- private string selectedTab;
+ private OptionsTab selectedTab;
/// <summary>
/// Update Message
@@ -380,7 +380,7 @@ namespace HandBrakeWPF.ViewModels
this.updateService = updateService;
this.OnLoad();
- this.SelectedTab = "General";
+ this.SelectedTab = OptionsTab.General;
this.UpdateMessage = "Click 'Check for Updates' to check for new versions";
}
@@ -389,20 +389,9 @@ namespace HandBrakeWPF.ViewModels
#region Window Properties
/// <summary>
- /// Gets OptionTabs.
- /// </summary>
- public IEnumerable<string> OptionTabs
- {
- get
- {
- return new List<string> { "General", "Output Files", "Audio and Subtitles", "Advanced", "Updates" };
- }
- }
-
- /// <summary>
/// Gets or sets SelectedTab.
/// </summary>
- public string SelectedTab
+ public OptionsTab SelectedTab
{
get
{
@@ -415,6 +404,12 @@ namespace HandBrakeWPF.ViewModels
this.NotifyOfPropertyChange(() => this.SelectedTab);
}
}
+
+ /// <summary>
+ /// Gets or sets the about view model.
+ /// </summary>
+ public IAboutViewModel AboutViewModel { get; set; }
+
#endregion
#region Properties
@@ -800,7 +795,7 @@ namespace HandBrakeWPF.ViewModels
set
{
this.selectedPreferredLangauge = value;
- this.NotifyOfPropertyChange("SelectedPreferreedLangauge");
+ this.NotifyOfPropertyChange(() => SelectedPreferredLangauge);
}
}
@@ -817,7 +812,7 @@ namespace HandBrakeWPF.ViewModels
set
{
this.selectedPreferredSubtitleLangauge = value;
- this.NotifyOfPropertyChange("SelectedPreferredSubtitleLangauge");
+ this.NotifyOfPropertyChange(() => SelectedPreferredSubtitleLangauge);
}
}
@@ -1344,7 +1339,7 @@ namespace HandBrakeWPF.ViewModels
}
/// <summary>
- /// Enable Debugging features in the UI.
+ /// Gets or sets a value indicating whether debug features are enabled.
/// </summary>
public bool EnableDebugFeatures
{
@@ -1731,7 +1726,7 @@ namespace HandBrakeWPF.ViewModels
/// <summary>
/// Audio List Move Left
/// </summary>
- public void LanguageMoveLeft()
+ public void LanguageMoveRight()
{
if (this.SelectedAvailableToMove.Count > 0)
{
@@ -1749,7 +1744,7 @@ namespace HandBrakeWPF.ViewModels
/// <summary>
/// Audio List Move Right
/// </summary>
- public void LanguageMoveRight()
+ public void LanguageMoveLeft()
{
if (this.SelectedLangaugesToMove.Count > 0)
{
@@ -1962,5 +1957,16 @@ namespace HandBrakeWPF.ViewModels
Process.Start(Path.Combine(Path.GetTempPath(), "handbrake-setup.exe"));
Application.Current.Shutdown();
}
+
+ /// <summary>
+ /// The goto tab.
+ /// </summary>
+ /// <param name="tab">
+ /// The tab.
+ /// </param>
+ public void GotoTab(OptionsTab tab)
+ {
+ this.SelectedTab = tab;
+ }
}
} \ No newline at end of file
diff --git a/win/CS/HandBrakeWPF/ViewModels/PictureSettingsViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/PictureSettingsViewModel.cs
index db8e7ebe8..4c01f8f35 100644
--- a/win/CS/HandBrakeWPF/ViewModels/PictureSettingsViewModel.cs
+++ b/win/CS/HandBrakeWPF/ViewModels/PictureSettingsViewModel.cs
@@ -53,11 +53,6 @@ namespace HandBrakeWPF.ViewModels
private bool showCustomAnamorphicControls;
/// <summary>
- /// The source aspect ratio.
- /// </summary>
- private double sourceAspectRatio;
-
- /// <summary>
/// The source info.
/// </summary>
private string sourceInfo;
@@ -148,7 +143,7 @@ namespace HandBrakeWPF.ViewModels
set
{
- this.Task.Cropping.Bottom = this.CorrectForModulus(this.Task.Cropping.Bottom, value);
+ this.Task.Cropping.Bottom = value;
this.NotifyOfPropertyChange(() => this.CropBottom);
this.SetDisplaySize();
}
@@ -166,7 +161,7 @@ namespace HandBrakeWPF.ViewModels
set
{
- this.Task.Cropping.Left = this.CorrectForModulus(this.Task.Cropping.Left, value);
+ this.Task.Cropping.Left = value;
this.NotifyOfPropertyChange(() => this.CropLeft);
this.SetDisplaySize();
}
@@ -184,7 +179,7 @@ namespace HandBrakeWPF.ViewModels
set
{
- this.Task.Cropping.Right = this.CorrectForModulus(this.Task.Cropping.Right, value);
+ this.Task.Cropping.Right = value;
this.NotifyOfPropertyChange(() => this.CropRight);
this.SetDisplaySize();
}
@@ -202,7 +197,7 @@ namespace HandBrakeWPF.ViewModels
set
{
- this.Task.Cropping.Top = this.CorrectForModulus(this.Task.Cropping.Top, value);
+ this.Task.Cropping.Top = value;
this.NotifyOfPropertyChange(() => this.CropTop);
this.SetDisplaySize();
}
@@ -701,7 +696,6 @@ namespace HandBrakeWPF.ViewModels
if (title != null)
{
// Set cached info
- this.sourceAspectRatio = title.AspectRatio;
this.sourceParValues = title.ParVal;
this.sourceResolution = title.Resolution;
diff --git a/win/CS/HandBrakeWPF/ViewModels/SubtitlesViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/SubtitlesViewModel.cs
index 446fab6cf..3fcca18aa 100644
--- a/win/CS/HandBrakeWPF/ViewModels/SubtitlesViewModel.cs
+++ b/win/CS/HandBrakeWPF/ViewModels/SubtitlesViewModel.cs
@@ -22,6 +22,8 @@ namespace HandBrakeWPF.ViewModels
using HandBrake.ApplicationServices.Services.Interfaces;
using HandBrake.ApplicationServices.Utilities;
+ using HandBrakeWPF.Commands;
+ using HandBrakeWPF.Model;
using HandBrakeWPF.ViewModels.Interfaces;
using Ookii.Dialogs.Wpf;
@@ -120,13 +122,10 @@ namespace HandBrakeWPF.ViewModels
/// </summary>
public void AddAllClosedCaptions()
{
- if (this.UserSettingService.GetUserSetting<bool>(UserSettingConstants.UseClosedCaption))
+
+ foreach (Subtitle subtitle in this.SourceTitlesSubset(null).Where(s => s.SubtitleType == SubtitleType.CC))
{
- foreach (
- Subtitle subtitle in this.SourceTitlesSubset(null).Where(s => s.SubtitleType == SubtitleType.CC))
- {
- this.Add(subtitle);
- }
+ this.Add(subtitle);
}
}
@@ -161,38 +160,6 @@ namespace HandBrakeWPF.ViewModels
}
/// <summary>
- /// Automatic Subtitle Selection based on user preferences.
- /// </summary>
- public void AutomaticSubtitleSelection()
- {
- this.Task.SubtitleTracks.Clear();
-
- // New DUB Settings
- int mode = this.UserSettingService.GetUserSetting<int>(UserSettingConstants.DubModeSubtitle);
- switch (mode)
- {
- case 1: // Adding all remaining subtitle tracks
- this.AddAllRemaining();
- break;
- case 2: // Adding only the first or preferred first subtitle track.
- this.Add();
- break;
- case 3: // Selected Languages Only
- this.AddAllRemainingForSelectedLanguages();
- break;
- case 4: // Prefered Only
- this.AddForPreferredLanaguages(true);
- break;
- case 5: // Prefered Only All
- this.AddForPreferredLanaguages(false);
- break;
- }
-
- // Add all closed captions if enabled.
- this.AddAllClosedCaptions();
- }
-
- /// <summary>
/// Import an SRT File.
/// </summary>
public void Import()
@@ -279,6 +246,50 @@ namespace HandBrakeWPF.ViewModels
this.NotifyOfPropertyChange(() => this.Task);
}
+ /// <summary>
+ /// Automatic Subtitle Selection based on user preferences.
+ /// </summary>
+ public void AutomaticSubtitleSelection()
+ {
+ this.Task.SubtitleTracks.Clear();
+
+ // New DUB Settings
+ int mode = this.UserSettingService.GetUserSetting<int>(UserSettingConstants.DubModeSubtitle);
+ switch (mode)
+ {
+ case 1: // Adding all remaining subtitle tracks
+ this.AddAllRemaining();
+ break;
+ case 2: // Adding only the first or preferred first subtitle track.
+ this.Add();
+ break;
+ case 3: // Selected Languages Only
+ this.AddAllRemainingForSelectedLanguages();
+ break;
+ case 4: // Prefered Only
+ this.AddForPreferredLanaguages(true);
+ break;
+ case 5: // Prefered Only All
+ this.AddForPreferredLanaguages(false);
+ break;
+ }
+
+ // Add all closed captions if enabled.
+ if (this.UserSettingService.GetUserSetting<bool>(UserSettingConstants.UseClosedCaption))
+ {
+ this.AddAllClosedCaptions();
+ }
+ }
+
+ /// <summary>
+ /// Open the options screen to the Audio and Subtitles tab.
+ /// </summary>
+ public void SetDefaultBehaviour()
+ {
+ OpenOptionsScreenCommand command = new OpenOptionsScreenCommand();
+ command.Execute(OptionsTab.AudioAndSubtitles);
+ }
+
#endregion
#region Implemented Interfaces
@@ -419,10 +430,8 @@ namespace HandBrakeWPF.ViewModels
private IEnumerable<Subtitle> SourceTitlesSubset(IEnumerable<Subtitle> subtitles)
{
return subtitles != null
- ? subtitles.Where(
- subtitle => !this.Task.SubtitleTracks.Any(track => track.SourceTrack == subtitle)).ToList()
- : this.SourceTracks.Where(
- subtitle => !this.Task.SubtitleTracks.Any(track => track.SourceTrack == subtitle)).ToList();
+ ? subtitles.Where(subtitle => !this.Task.SubtitleTracks.Any(track => Equals(track.SourceTrack, subtitle))).ToList()
+ : this.SourceTracks.Where(subtitle => !this.Task.SubtitleTracks.Any(track => Equals(track.SourceTrack, subtitle))).ToList();
}
#endregion
diff --git a/win/CS/HandBrakeWPF/ViewModels/VideoViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/VideoViewModel.cs
index b0b46b760..6164e3603 100644
--- a/win/CS/HandBrakeWPF/ViewModels/VideoViewModel.cs
+++ b/win/CS/HandBrakeWPF/ViewModels/VideoViewModel.cs
@@ -23,12 +23,10 @@ namespace HandBrakeWPF.ViewModels
using HandBrake.ApplicationServices.Services.Interfaces;
using HandBrake.ApplicationServices.Utilities;
using HandBrake.Interop;
- using HandBrake.Interop.HbLib;
using HandBrake.Interop.Model.Encoding;
using HandBrake.Interop.Model.Encoding.x264;
using HandBrakeWPF.Commands.Interfaces;
- using HandBrakeWPF.Properties;
using HandBrakeWPF.ViewModels.Interfaces;
/// <summary>
@@ -241,6 +239,17 @@ namespace HandBrakeWPF.ViewModels
}
/// <summary>
+ /// Gets a value indicating whether is lossless.
+ /// </summary>
+ public bool IsLossless
+ {
+ get
+ {
+ return 51.Equals(this.RF);
+ }
+ }
+
+ /// <summary>
/// Gets or sets QualityMax.
/// </summary>
public int QualityMax
@@ -303,8 +312,6 @@ namespace HandBrakeWPF.ViewModels
double rfValue = 51.0 - value * cqStep;
rfValue = Math.Round(rfValue, 2);
this.Task.Quality = rfValue;
-
- // TODO: Lossless warning.
break;
case VideoEncoder.Theora:
Task.Quality = value;
@@ -313,6 +320,7 @@ namespace HandBrakeWPF.ViewModels
this.NotifyOfPropertyChange(() => this.RF);
this.NotifyOfPropertyChange(() => this.DisplayRF);
+ this.NotifyOfPropertyChange(() => this.IsLossless);
}
}
@@ -327,6 +335,14 @@ namespace HandBrakeWPF.ViewModels
}
}
+ public string Rfqp
+ {
+ get
+ {
+ return this.SelectedVideoEncoder == VideoEncoder.X264 ? "RF" : "QP";
+ }
+ }
+
/// <summary>
/// Gets or sets SelectedFramerate.
/// </summary>
@@ -391,6 +407,8 @@ namespace HandBrakeWPF.ViewModels
// Hide the x264 controls when not needed.
this.DisplayX264Options = value == VideoEncoder.X264;
+
+ this.NotifyOfPropertyChange(() => this.Rfqp);
}
}
diff --git a/win/CS/HandBrakeWPF/Views/AboutView.xaml b/win/CS/HandBrakeWPF/Views/AboutView.xaml
index a9e7e4319..d7b63c08b 100644
--- a/win/CS/HandBrakeWPF/Views/AboutView.xaml
+++ b/win/CS/HandBrakeWPF/Views/AboutView.xaml
@@ -1,13 +1,7 @@
-<Window x:Class="HandBrakeWPF.Views.AboutView"
+<UserControl x:Class="HandBrakeWPF.Views.AboutView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:Micro="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro"
- Title="{Binding Title}"
- Width="600"
- Height="320"
- ResizeMode="NoResize"
- TextOptions.TextFormattingMode="Display"
- WindowStartupLocation="CenterScreen">
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Properties="clr-namespace:HandBrakeWPF.Properties"
+ TextOptions.TextFormattingMode="Display">
<Grid>
<Grid.RowDefinitions>
@@ -34,54 +28,23 @@
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
- <RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0"
Margin="5,10,0,0"
Orientation="Horizontal">
- <TextBlock Margin="0,0,5,0"
- FontSize="14"
- FontWeight="Bold"
- Text="HandBrake" />
- <TextBlock Margin="0,0,0,1"
- VerticalAlignment="Bottom"
- Text="{Binding Version}" />
+ <TextBlock Margin="0,0,5,0" FontSize="12" FontWeight="Bold" Text="HandBrake " />
+ <TextBlock Margin="0,0,0,1" FontSize="12" VerticalAlignment="Bottom" Text="{Binding Version}" />
</StackPanel>
- <TextBlock Grid.Row="1"
- Margin="5,0,0,0 "
- Text="Copyright 2003-2013 HandBrake Team" />
+ <TextBlock Grid.Row="1" Margin="5,10,0,5" Text="License: " />
- <TextBlock Grid.Row="2"
- Margin="5,10,0,5"
- Text="License:" />
- <TextBox Grid.Row="3"
- Margin="10,0,10,10"
- HorizontalAlignment="Stretch"
- VerticalAlignment="Stretch"
- IsReadOnly="True"
- TextWrapping="Wrap"
- VerticalScrollBarVisibility="Auto">
- This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
- You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- </TextBox>
+ <TextBox Text="{x:Static Properties:Resources.About_GPL}" Grid.Row="2" Margin="10,0,10,10" HorizontalAlignment="Stretch"
+ VerticalAlignment="Stretch" IsReadOnly="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" />
</Grid>
</Grid>
- <StackPanel Grid.Row="1"
- HorizontalAlignment="Stretch"
- Background="LightGray">
- <Button Margin="0,5,10,5"
- HorizontalAlignment="Right"
- VerticalAlignment="Center"
- Content="Close"
- IsDefault="True"
- Micro:Message.Attach="[Event Click] = [Action Close]"
- Padding="12,2" />
- </StackPanel>
</Grid>
-</Window>
+</UserControl>
diff --git a/win/CS/HandBrakeWPF/Views/AboutView.xaml.cs b/win/CS/HandBrakeWPF/Views/AboutView.xaml.cs
index 55665fc8b..2be3fd009 100644
--- a/win/CS/HandBrakeWPF/Views/AboutView.xaml.cs
+++ b/win/CS/HandBrakeWPF/Views/AboutView.xaml.cs
@@ -9,12 +9,12 @@
namespace HandBrakeWPF.Views
{
- using System.Windows;
+ using System.Windows.Controls;
/// <summary>
/// Interaction logic for AboutView.xaml
/// </summary>
- public partial class AboutView : Window
+ public partial class AboutView : UserControl
{
/// <summary>
/// Initializes a new instance of the <see cref="AboutView"/> class.
diff --git a/win/CS/HandBrakeWPF/Views/AddPresetView.xaml b/win/CS/HandBrakeWPF/Views/AddPresetView.xaml
index d6f6cb7e0..3e7a3fd7b 100644
--- a/win/CS/HandBrakeWPF/Views/AddPresetView.xaml
+++ b/win/CS/HandBrakeWPF/Views/AddPresetView.xaml
@@ -5,6 +5,7 @@
xmlns:Converters="clr-namespace:HandBrakeWPF.Converters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:Properties="clr-namespace:HandBrakeWPF.Properties"
Title="{Binding Title}"
Width="350"
ResizeMode="NoResize"
@@ -16,6 +17,11 @@
<Window.Resources>
<Converters:BooleanToVisibilityConverter x:Key="boolToVisConverter" />
<Converters:EnumComboConverter x:Key="enumComboConverter" />
+
+ <Style x:Key="LongToolTipHolder" TargetType="FrameworkElement">
+ <Setter Property="ToolTipService.ShowDuration" Value="20000" />
+ <Setter Property="Margin" Value="0,2,0,2" />
+ </Style>
</Window.Resources>
<Grid HorizontalAlignment="Stretch"
@@ -80,11 +86,15 @@
<TextBlock Grid.Row="2"
Grid.Column="0"
- Text="Use Picture Size:" />
+ Style="{StaticResource LongToolTipHolder}"
+ ToolTip="{x:Static Properties:Resources.AddPreset_PictureSizeMode}"
+ Text="Picture Size:" />
<ComboBox Grid.Row="2"
Grid.Column="1"
Width="125"
HorizontalAlignment="Left"
+ Style="{StaticResource LongToolTipHolder}"
+ ToolTip="{x:Static Properties:Resources.AddPreset_PictureSizeMode}"
ItemsSource="{Binding PictureSettingsModes,
Converter={StaticResource enumComboConverter}}"
SelectedItem="{Binding SelectedPictureSettingMode,
@@ -104,18 +114,18 @@
</StackPanel>
<CheckBox Grid.Row="4"
- Grid.Column="1"
+ Grid.Column="0" Grid.ColumnSpan="2"
Margin="0,10,0,0"
- Content="Use Picture Filters"
+ Content="Save Video Filter Settings"
IsChecked="{Binding Preset.UsePictureFilters}" />
<!-- Description -->
<TextBlock Grid.Row="5"
Grid.Column="0"
- FontWeight="Bold"
+ FontWeight="Bold" Margin="0,10,0,0"
Text="Description:" />
<TextBox Grid.Row="6"
- Grid.ColumnSpan="2"
+ Grid.ColumnSpan="2" Margin="0,10,0,0"
HorizontalAlignment="Stretch"
Text="{Binding Preset.Description}" />
</Grid>
diff --git a/win/CS/HandBrakeWPF/Views/AdvancedView.xaml b/win/CS/HandBrakeWPF/Views/AdvancedView.xaml
index a05b41bff..785102cd2 100644
--- a/win/CS/HandBrakeWPF/Views/AdvancedView.xaml
+++ b/win/CS/HandBrakeWPF/Views/AdvancedView.xaml
@@ -6,6 +6,7 @@
xmlns:Helpers="clr-namespace:HandBrakeWPF.Helpers"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Properties="clr-namespace:HandBrakeWPF.Properties"
+ xmlns:controls="clr-namespace:HandBrakeWPF.Controls"
x:Name="advancedView"
mc:Ignorable="d"
>
@@ -31,13 +32,25 @@
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
+ <RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- X264 Query -->
- <TextBox Grid.Row="2"
+
+ <TextBlock Grid.Row="2" Margin="10,5,10,0"
+ VerticalAlignment="Center"
+ FontWeight="Bold"
+ Text="x264 Encoder Options:"
+ Visibility="{Binding DisplayX264Options, Converter={StaticResource BooleanVisibilityConverter}, ConverterParameter=false}"
+ />
+
+ <TextBox Grid.Row="3"
+ Margin="10,2,10, 2"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
+ Style="{StaticResource LongToolTipHolder}"
+ ToolTip="{x:Static Properties:Resources.Advanced_EncoderOptions}"
Text="{Binding AdvancedOptionsString,
UpdateSourceTrigger=PropertyChanged}"
TextWrapping="Wrap"
@@ -75,7 +88,6 @@
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
- <ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<!-- Left Column -->
@@ -219,47 +231,23 @@
</ComboBox>
</Grid>
</StackPanel>
-
- <!-- Psychvisual -->
- <StackPanel Orientation="Vertical">
- <TextBlock Grid.Row="0"
- Margin="10,5,0,0"
- FontWeight="Bold"
- Text="Psychovisual: "
- />
- <StackPanel Orientation="Horizontal">
- <Label Width="110"
- HorizontalAlignment="Left"
- VerticalAlignment="Center"
- HorizontalContentAlignment="Right"
- Content="No DCT-Decimate:"
- />
- <CheckBox HorizontalAlignment="Left"
- VerticalAlignment="Center"
- IsChecked="{Binding NoDctDecimate}"
- Style="{StaticResource LongToolTipHolder}"
- >
- <CheckBox.ToolTip>
- <TextBlock Style="{StaticResource LongToolTip}" Text="{x:Static Properties:Resources.Advanced_NoDctDecimateToolTip}" />
- </CheckBox.ToolTip>
- </CheckBox>
-
- </StackPanel>
- </StackPanel>
-
</StackPanel>
- <!-- Analysis (Center Column) -->
- <StackPanel Grid.Row="0"
- Grid.Column="1"
- Orientation="Vertical"
- >
- <TextBlock Grid.Row="0"
- Margin="10,5,0,0"
- FontWeight="Bold"
- Text="Analysis: "
- />
- <Grid HorizontalAlignment="Left" VerticalAlignment="Top">
+ <!-- Right Column -->
+ <Grid Grid.Row="0" Grid.Column="1">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto" />
+ <RowDefinition Height="Auto" />
+ <RowDefinition Height="Auto" />
+ <RowDefinition Height="*" />
+ </Grid.RowDefinitions>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="Auto" />
+ </Grid.ColumnDefinitions>
+
+ <!-- Analysis -->
+ <TextBlock Text="Analysis: " Grid.Row="0" Margin="10,5,0,0" FontWeight="Bold" />
+ <Grid Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Top">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
@@ -269,7 +257,9 @@
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
- <ColumnDefinition Width="*" MinWidth="100" />
+ <ColumnDefinition Width="Auto" MinWidth="100" />
+ <ColumnDefinition Width="Auto" />
+ <ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Label Content="Adaptive B-Frames:"
@@ -360,29 +350,63 @@
<Label Grid.Row="4"
Grid.Column="0"
Content="Motion Est Range:"
- Style="{StaticResource AdvancedLabel}"
- Visibility="{Binding MotionEstimationRangeVisible,
- Converter={StaticResource VisibilityConverter}}"
+ Style="{StaticResource AdvancedLabel}" />
+ <controls:NumberBox Grid.Row="4"
+ Grid.Column="1"
+ Width="120"
+ Height="22"
+ MaxWidth="120"
+ Minimum="4" Maximum="64"
+ Number="{Binding MotionEstimationRange, Mode=TwoWay}"
+ ToolTip="{x:Static Properties:Resources.Advanced_MotionEstimationRangeToolTip}"
+ />
+
+
+ <!-- Column 2 -->
+ <Label Grid.Row="0" Grid.Column="2"
+ Height="28"
+ HorizontalAlignment="Right"
+ VerticalAlignment="Top"
+ Content="Partition Type:"
/>
- <ComboBox Grid.Row="4"
- Grid.Column="1"
- Width="120"
- Height="22"
- MaxWidth="120"
+ <ComboBox Grid.Row="0" Grid.Column="3"
+ Width="100"
+ Height="23"
+ MaxWidth="100"
+ HorizontalAlignment="Right"
+ VerticalAlignment="Top"
DisplayMemberPath="Label"
- ItemsSource="{x:Static Helpers:AdvancedChoicesHelper.MotionEstimationRange}"
- SelectedItem="{Binding MotionEstimationRange}"
+ ItemsSource="{x:Static Helpers:AdvancedChoicesHelper.Analysis}"
+ SelectedItem="{Binding Analysis}"
Style="{StaticResource LongToolTipHolder}"
- Visibility="{Binding MotionEstimationRangeVisible,
- Converter={StaticResource VisibilityConverter}}" Margin="0,0,0,2" VerticalAlignment="Bottom">
+ >
<ComboBox.ToolTip>
- <TextBlock Style="{StaticResource LongToolTip}" Text="{x:Static Properties:Resources.Advanced_MotionEstimationRangeToolTip}" />
+ <TextBlock Style="{StaticResource LongToolTip}" Text="{x:Static Properties:Resources.Advanced_AnalysisToolTip}" />
</ComboBox.ToolTip>
</ComboBox>
- </Grid>
- <Grid Width="300"
- Height="80"
+ <Label Grid.Row="1" Grid.Column="2" Height="28" HorizontalAlignment="Right" VerticalAlignment="Top" Content="Trellis:" />
+ <ComboBox Grid.Row="1"
+ Grid.Column="3"
+ Width="100"
+ Height="23"
+ MaxWidth="100"
+ HorizontalAlignment="Right"
+ VerticalAlignment="Top"
+ DisplayMemberPath="Label"
+ ItemsSource="{x:Static Helpers:AdvancedChoicesHelper.Trellis}"
+ SelectedItem="{Binding Trellis}"
+ Style="{StaticResource LongToolTipHolder}">
+ <ComboBox.ToolTip>
+ <TextBlock Style="{StaticResource LongToolTip}" Text="{x:Static Properties:Resources.Advanced_TrellisToolTip}" />
+ </ComboBox.ToolTip>
+ </ComboBox>
+ </Grid>
+
+ <!-- PhysoVisual -->
+ <TextBlock Text="Psychovisual: " Grid.Row="2" Margin="10,5,0,0" FontWeight="Bold" />
+ <Grid Grid.Row="3"
+ Height="90"
HorizontalAlignment="Left"
VerticalAlignment="Top"
>
@@ -393,19 +417,20 @@
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
- <ColumnDefinition Width="*" MinWidth="100" />
+ <ColumnDefinition Width="Auto" MinWidth="100" />
+ <ColumnDefinition Width="Auto" />
+ <ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
- <Label Grid.Row="0"
- Grid.Column="0"
+ <Label Grid.Row="0" Grid.Column="0"
Content="Adaptive Quant Strength:"
Style="{StaticResource AdvancedLabel}"
/>
- <Slider Grid.Row="0"
- Grid.Column="1"
+ <Slider Grid.Row="0" Grid.Column="1"
IsSnapToTickEnabled="True"
LargeChange="0.2"
Maximum="2.0"
+ Width="150"
Minimum="0.0"
SmallChange="0.1"
Style="{StaticResource LongToolTipHolder}"
@@ -418,19 +443,18 @@
</Slider.ToolTip>
</Slider>
- <Label Grid.Row="1"
- Grid.Column="0"
- Content="Psychovisual Rate Distortion:"
+ <Label Grid.Row="1" Grid.Column="0"
+ Content="Rate Distortion:"
Style="{StaticResource AdvancedLabel}"
Visibility="{Binding PsychovisualRateDistortionVisible,
Converter={StaticResource VisibilityConverter}}"
/>
- <Slider Grid.Row="1"
- Grid.Column="1"
+ <Slider Grid.Row="1" Grid.Column="1"
IsSnapToTickEnabled="True"
LargeChange="0.2"
Maximum="2.0"
Minimum="0.0"
+ Width="150"
SmallChange="0.1"
Style="{StaticResource LongToolTipHolder}"
TickFrequency="0.1"
@@ -444,19 +468,18 @@
</Slider.ToolTip>
</Slider>
- <Label Grid.Row="2"
- Grid.Column="0"
+ <Label Grid.Row="2" Grid.Column="0"
Content="Psychovisual Trellis:"
Style="{StaticResource AdvancedLabel}"
Visibility="{Binding PsychovisualTrellisVisible,
Converter={StaticResource VisibilityConverter}}"
/>
- <Slider Grid.Row="2"
- Grid.Column="1"
+ <Slider Grid.Row="2" Grid.Column="1"
IsSnapToTickEnabled="True"
LargeChange="0.2"
Maximum="1.0"
Minimum="0.0"
+ Width="150"
SmallChange="0.05"
Style="{StaticResource LongToolTipHolder}"
TickFrequency="0.05"
@@ -469,85 +492,35 @@
<TextBlock Style="{StaticResource LongToolTip}" Text="{x:Static Properties:Resources.Advanced_PsychovisualTrellisToolTip}" />
</Slider.ToolTip>
</Slider>
- </Grid>
- </StackPanel>
-
- <!-- Analysis (Right Column) -->
- <StackPanel Grid.Row="0"
- Grid.Column="2"
- Orientation="Vertical"
- >
- <Grid Margin="0,20,0,0">
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto" />
- <RowDefinition Height="Auto" />
- <RowDefinition Height="Auto" />
- <RowDefinition Height="Auto" />
- </Grid.RowDefinitions>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="Auto" />
- <ColumnDefinition Width="*" MinWidth="100" />
- </Grid.ColumnDefinitions>
- <Label Grid.Column="0"
- Height="28"
- HorizontalAlignment="Right"
- VerticalAlignment="Top"
- Content="Partition Type:"
- />
- <ComboBox Grid.Column="1"
- Width="100"
- Height="23"
- MaxWidth="100"
- HorizontalAlignment="Right"
- VerticalAlignment="Top"
- DisplayMemberPath="Label"
- ItemsSource="{x:Static Helpers:AdvancedChoicesHelper.Analysis}"
- SelectedItem="{Binding Analysis}"
- Style="{StaticResource LongToolTipHolder}"
- >
- <ComboBox.ToolTip>
- <TextBlock Style="{StaticResource LongToolTip}" Text="{x:Static Properties:Resources.Advanced_AnalysisToolTip}" />
- </ComboBox.ToolTip>
- </ComboBox>
+ <Label Grid.Row="0" Grid.Column="2" Width="110"
+ HorizontalAlignment="Left"
+ VerticalAlignment="Center"
+ HorizontalContentAlignment="Right"
+ Content="No DCT-Decimate:"
+ />
+ <CheckBox Grid.Row="0" Grid.Column="3" HorizontalAlignment="Left"
+ VerticalAlignment="Center"
+ IsChecked="{Binding NoDctDecimate}"
+ Style="{StaticResource LongToolTipHolder}"
+ >
+ <CheckBox.ToolTip>
+ <TextBlock Style="{StaticResource LongToolTip}" Text="{x:Static Properties:Resources.Advanced_NoDctDecimateToolTip}" />
+ </CheckBox.ToolTip>
+ </CheckBox>
<Label Grid.Row="1"
- Grid.Column="0"
- Height="28"
- HorizontalAlignment="Right"
- VerticalAlignment="Top"
- Content="Trellis:"
- />
- <ComboBox Grid.Row="1"
- Grid.Column="1"
- Width="100"
- Height="23"
- MaxWidth="100"
- HorizontalAlignment="Right"
- VerticalAlignment="Top"
- DisplayMemberPath="Label"
- ItemsSource="{x:Static Helpers:AdvancedChoicesHelper.Trellis}"
- SelectedItem="{Binding Trellis}"
- Style="{StaticResource LongToolTipHolder}"
- >
- <ComboBox.ToolTip>
- <TextBlock Style="{StaticResource LongToolTip}" Text="{x:Static Properties:Resources.Advanced_TrellisToolTip}" />
- </ComboBox.ToolTip>
- </ComboBox>
-
-
- <Label Grid.Row="2"
- Grid.Column="0"
+ Grid.Column="2"
Height="28"
HorizontalAlignment="Right"
VerticalAlignment="Top"
Content="Deblocking:"
/>
- <ComboBox Grid.Row="2"
- Grid.Column="1"
- Width="100"
+ <StackPanel Orientation="Vertical" Grid.Row="1" Grid.Column="3" Grid.RowSpan="2">
+ <ComboBox
+ Width="85"
Height="23"
- MaxWidth="100"
+ MaxWidth="85"
HorizontalAlignment="Right"
VerticalAlignment="Top"
DisplayMemberPath="Label"
@@ -555,15 +528,15 @@
SelectedItem="{Binding DeblockingStrength}"
Style="{StaticResource LongToolTipHolder}"
>
- <ComboBox.ToolTip>
- <TextBlock Style="{StaticResource LongToolTip}" Text="{x:Static Properties:Resources.Advanced_DeblockingToolTip}" />
- </ComboBox.ToolTip>
- </ComboBox>
- <ComboBox Grid.Row="3"
- Grid.Column="1"
- Width="100"
+ <ComboBox.ToolTip>
+ <TextBlock Style="{StaticResource LongToolTip}" Text="{x:Static Properties:Resources.Advanced_DeblockingToolTip}" />
+ </ComboBox.ToolTip>
+ </ComboBox>
+ <ComboBox
+ Width="85"
Height="23"
- MaxWidth="100"
+ MaxWidth="85"
+ Margin="0,5,0,0"
HorizontalAlignment="Right"
VerticalAlignment="Top"
DisplayMemberPath="Label"
@@ -571,12 +544,16 @@
SelectedItem="{Binding DeblockingThreshold}"
Style="{StaticResource LongToolTipHolder}"
>
- <ComboBox.ToolTip>
- <TextBlock Style="{StaticResource LongToolTip}" Text="{x:Static Properties:Resources.Advanced_DeblockingToolTip}" />
- </ComboBox.ToolTip>
- </ComboBox>
+ <ComboBox.ToolTip>
+ <TextBlock Style="{StaticResource LongToolTip}" Text="{x:Static Properties:Resources.Advanced_DeblockingToolTip}" />
+ </ComboBox.ToolTip>
+ </ComboBox>
+ </StackPanel>
+
</Grid>
- </StackPanel>
+
+ </Grid>
+
</Grid>
</StackPanel>
diff --git a/win/CS/HandBrakeWPF/Views/AudioView.xaml b/win/CS/HandBrakeWPF/Views/AudioView.xaml
index d90e5643f..af5b81514 100644
--- a/win/CS/HandBrakeWPF/Views/AudioView.xaml
+++ b/win/CS/HandBrakeWPF/Views/AudioView.xaml
@@ -111,15 +111,14 @@
<MenuItem Header="Add All Remaining Selected Languages" cal:Message.Attach="[Event Click] = [Action AddAllRemainingForSelectedLanguages]" />
<Separator />
<MenuItem Header="Clear All" cal:Message.Attach="[Event Click] = [Action Clear]" />
+ <Separator />
+ <MenuItem Header="Configure Default Behaviours" cal:Message.Attach="[Event Click] = [Action SetDefaultBehaviour]" />
</ContextMenu>
</ListBox.ContextMenu>
<ListBox.ItemTemplate>
<DataTemplate>
-
-
-
-
+
<Grid HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
diff --git a/win/CS/HandBrakeWPF/Views/FiltersView.xaml b/win/CS/HandBrakeWPF/Views/FiltersView.xaml
index a27deb617..9c46aeabd 100644
--- a/win/CS/HandBrakeWPF/Views/FiltersView.xaml
+++ b/win/CS/HandBrakeWPF/Views/FiltersView.xaml
@@ -59,7 +59,7 @@
Visibility="{Binding ShowDenoiseCustom, Converter={StaticResource boolToVisConverter}}" />
<TextBlock Text="Deblock:" Grid.Row="4" Grid.Column="0" Margin="0,0,0,10"/>
- <Slider Width="120" Value="{Binding DeblockValue}" Minimum="4" Maximum="15" Grid.Row="4" Grid.Column="1" Margin="0,0,0,10"/>
+ <Slider Width="120" Value="{Binding DeblockValue}" TickPlacement="BottomRight" Minimum="4" Maximum="15" Grid.Row="4" Grid.Column="1" Margin="0,0,0,10"/>
<TextBlock Text="{Binding DeblockText}" Grid.Row="4" Grid.Column="2" Margin="0,0,0,10"/>
<CheckBox Content="Grayscale" IsChecked="{Binding Grayscale}" Grid.Row="5" Grid.Column="1" Margin="0,0,0,10"/>
diff --git a/win/CS/HandBrakeWPF/Views/OptionsView.xaml b/win/CS/HandBrakeWPF/Views/OptionsView.xaml
index c5d5d3e60..99d857bdc 100644
--- a/win/CS/HandBrakeWPF/Views/OptionsView.xaml
+++ b/win/CS/HandBrakeWPF/Views/OptionsView.xaml
@@ -3,7 +3,8 @@
xmlns:Helpers="clr-namespace:HandBrakeWPF.Helpers"
xmlns:Options="clr-namespace:HandBrakeWPF.Converters.Options"
xmlns:dd="clr-namespace:GongSolutions.Wpf.DragDrop;assembly=GongSolutions.Wpf.DragDrop"
- xmlns:Converters="clr-namespace:HandBrakeWPF.Converters" Background="White">
+ xmlns:Converters="clr-namespace:HandBrakeWPF.Converters" xmlns:local="clr-namespace:HandBrakeWPF.Model"
+ Background="White">
<UserControl.Resources>
<Style TargetType="Button">
@@ -30,7 +31,17 @@
</Style>
<Options:OptionsTabConverter x:Key="tabConverter" />
+ <Options:OptionsTabNameConverter x:Key="tabNameConverter" />
+
<Converters:BooleanToVisibilityConverter x:Key="boolToVisConverter" />
+
+ <ObjectDataProvider MethodName="GetValues"
+ ObjectType="{x:Type local:OptionsTab}"
+ x:Key="OptionTabsList">
+ <ObjectDataProvider.MethodParameters>
+ <x:Type TypeName="local:OptionsTab" />
+ </ObjectDataProvider.MethodParameters>
+ </ObjectDataProvider>
</UserControl.Resources>
<Grid>
@@ -44,14 +55,18 @@
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
-
<StackPanel Orientation="Vertical" Grid.Column="0" Margin="10,10,0,0">
<Border BorderThickness="0 0 0 1" BorderBrush="LightGray" Margin="0,0,0,10">
<TextBlock Text="Preferences" FontSize="16" />
</Border>
- <ListBox ItemsSource="{Binding OptionTabs}" SelectedItem="{Binding SelectedTab}"
+ <ListBox ItemsSource="{Binding Source={StaticResource OptionTabsList}}" SelectedItem="{Binding SelectedTab}"
BorderThickness="0" Background="Transparent">
+ <ListBox.ItemTemplate>
+ <DataTemplate>
+ <TextBlock Text="{Binding Converter={StaticResource tabNameConverter}}"/>
+ </DataTemplate>
+ </ListBox.ItemTemplate>
</ListBox>
</StackPanel>
@@ -60,7 +75,7 @@
<StackPanel Orientation="Vertical">
<StackPanel Name="General" Orientation="Vertical" Margin="10,10,0,0"
- Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter='General'}">
+ Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter={x:Static local:OptionsTab.General}}">
<Border BorderThickness="0 0 0 1" BorderBrush="LightGray">
<TextBlock Text="General" FontSize="16" />
@@ -121,7 +136,7 @@
</StackPanel>
<StackPanel Name="Output" Orientation="Vertical" Margin="10,10,0,0"
- Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter='Output Files'}">
+ Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter={x:Static local:OptionsTab.OutputFiles}}">
<Border BorderThickness="0 0 0 1" BorderBrush="LightGray">
<TextBlock Text="Output Files" FontSize="16" />
@@ -161,7 +176,7 @@
</StackPanel>
<StackPanel Name="Audio" Orientation="Vertical" Margin="10,10,0,0"
- Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter='Audio and Subtitles'}">
+ Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter={x:Static local:OptionsTab.AudioAndSubtitles}}">
<Border BorderThickness="0 0 0 1" BorderBrush="LightGray">
@@ -236,8 +251,8 @@
<DockPanel Grid.Column="1" Margin="10,0,10,0">
<StackPanel Orientation="Vertical" VerticalAlignment="Center">
- <Button Content="Move Left" VerticalAlignment="Center" Margin="0,0,0,5" cal:Message.Attach="[Event Click] = [Action LanguageMoveLeft]" Width="80" />
<Button Content="Move Right" VerticalAlignment="Center" Margin="0,0,0,5" cal:Message.Attach="[Event Click] = [Action LanguageMoveRight]" Width="80" />
+ <Button Content="Move Left" VerticalAlignment="Center" Margin="0,0,0,5" cal:Message.Attach="[Event Click] = [Action LanguageMoveLeft]" Width="80" />
<Button Content="Clear" VerticalAlignment="Center" Margin="0,0,0,5" cal:Message.Attach="[Event Click] = [Action LanguageClearAll]" Width="80"/>
</StackPanel>
</DockPanel>
@@ -263,7 +278,7 @@
</StackPanel>
<StackPanel Name="Advanced" Orientation="Vertical" Margin="10,10,0,0"
- Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter='Advanced'}">
+ Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter={x:Static local:OptionsTab.Advanced}}">
<Border BorderThickness="0 0 0 1" BorderBrush="LightGray">
<TextBlock Text="Advanced" FontSize="16" />
@@ -364,7 +379,7 @@
</StackPanel>
<StackPanel Name="Updates" Orientation="Vertical" Margin="10,10,0,0"
- Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter='Updates'}">
+ Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter={x:Static local:OptionsTab.Updates}}">
<Border BorderThickness="0 0 0 1" BorderBrush="LightGray">
@@ -398,6 +413,18 @@
</StackPanel>
</StackPanel>
+
+ <StackPanel Name="About" Orientation="Vertical" Margin="10,10,0,0"
+ Visibility="{Binding SelectedTab, Converter={StaticResource tabConverter}, ConverterParameter={x:Static local:OptionsTab.About}}">
+
+
+ <Border BorderThickness="0 0 0 1" BorderBrush="LightGray">
+ <TextBlock Text="About HandBrake" FontSize="16" />
+ </Border>
+
+ <ContentControl x:Name="AboutViewModel" />
+
+ </StackPanel>
</StackPanel>
</ScrollViewer>
diff --git a/win/CS/HandBrakeWPF/Views/PictureSettingsView.xaml b/win/CS/HandBrakeWPF/Views/PictureSettingsView.xaml
index c68a54e72..e7f5bbb35 100644
--- a/win/CS/HandBrakeWPF/Views/PictureSettingsView.xaml
+++ b/win/CS/HandBrakeWPF/Views/PictureSettingsView.xaml
@@ -1,12 +1,15 @@
<UserControl x:Class="HandBrakeWPF.Views.PictureSettingsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:NumericUpDown="clr-namespace:EagleBoost.Wpf.Presentation.Controls.NumericUpDown;assembly=EagleBoost.Wpf.Presentation"
- xmlns:Converters="clr-namespace:HandBrakeWPF.Converters">
+ xmlns:Converters="clr-namespace:HandBrakeWPF.Converters"
+ xmlns:controls="clr-namespace:HandBrakeWPF.Controls">
<UserControl.Resources>
<Converters:BooleanConverter x:Key="boolConverter" />
<Converters:BooleanToVisibilityConverter x:Key="boolToVisConverter" />
+ <Style TargetType="controls:NumberBox">
+ <Setter Property="Height" Value="24" />
+ </Style>
</UserControl.Resources>
<StackPanel Orientation="Horizontal" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
@@ -24,10 +27,10 @@
<!-- Row 2-->
<StackPanel Orientation="Horizontal" Margin="5,0,5,0">
<Label Content="Width:" Grid.Row="1" Grid.Column="0" />
- <NumericUpDown:NumericUpDown Value="{Binding Width, Mode=TwoWay}" IsEnabled="{Binding WidthControlEnabled}" SmallChange="{Binding SelectedModulus, Mode=OneWay}"
+ <controls:NumberBox Number="{Binding Width, Mode=TwoWay}" IsEnabled="{Binding WidthControlEnabled}" Modulus="{Binding SelectedModulus, Mode=OneWay}"
Minimum="0" Grid.Row="1" Grid.Column="1" Width="60" />
<Label Content="Height:" Grid.Row="1" Grid.Column="2" />
- <NumericUpDown:NumericUpDown Value="{Binding Height, Mode=TwoWay}" IsEnabled="{Binding HeightControlEnabled}" SmallChange="{Binding SelectedModulus, Mode=OneWay}"
+ <controls:NumberBox Number="{Binding Height, Mode=TwoWay}" IsEnabled="{Binding HeightControlEnabled}" Modulus="{Binding SelectedModulus, Mode=OneWay}"
Minimum="0" Grid.Row="1" Grid.Column="3" Width="60" />
<CheckBox Content="Keep Aspect Ratio" IsChecked="{Binding MaintainAspectRatio}" VerticalAlignment="Center" Margin="5,0,0,0" />
</StackPanel>
@@ -71,10 +74,11 @@
<Label Content="PAR Width:" Grid.Row="1" Grid.Column="0" />
<Label Content="PAR Height:" Grid.Row="5" Grid.Column="0" />
- <NumericUpDown:NumericUpDown Width="60" Value="{Binding DisplayWidth, Mode=TwoWay}" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Left" Margin="0,0,0,5" />
- <NumericUpDown:NumericUpDown Width="60" Value="{Binding ParWidth, Mode=TwoWay}" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Left"
+ <controls:NumberBox Width="60" Number="{Binding DisplayWidth, Mode=TwoWay}" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Left" Margin="0,0,0,5"
+ AllowEmpty="False" />
+ <controls:NumberBox Width="60" Number="{Binding ParWidth, Mode=TwoWay}" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Left" AllowEmpty="False"
IsEnabled="{Binding MaintainAspectRatio, Converter={StaticResource boolConverter}, ConverterParameter=true}" Margin="0,0,0,5" />
- <NumericUpDown:NumericUpDown Width="60" Value="{Binding ParHeight, Mode=TwoWay}" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Left"
+ <controls:NumberBox Width="60" Number="{Binding ParHeight, Mode=TwoWay}" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Left" AllowEmpty="False"
IsEnabled="{Binding MaintainAspectRatio, Converter={StaticResource boolConverter}, ConverterParameter=true}" Margin="0,0,0,5" />
</Grid>
@@ -125,14 +129,17 @@
<Label Content="Left" Grid.Row="2" Grid.Column="0" HorizontalAlignment="Center" />
<Label Content="Right" Grid.Row="2" Grid.Column="4" HorizontalAlignment="Center" />
- <NumericUpDown:NumericUpDown Width="60" Value="{Binding CropTop, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" IsEnabled="{Binding IsCustomCrop}" Grid.Row="1" Grid.Column="2"
- HorizontalAlignment="Left" Margin="0,0,0,5" />
- <NumericUpDown:NumericUpDown Width="60" Value="{Binding CropBottom, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" IsEnabled="{Binding IsCustomCrop}" Grid.Row="3" Grid.Column="2"
- HorizontalAlignment="Left" Margin="0,0,0,5" />
- <NumericUpDown:NumericUpDown Width="60" Value="{Binding CropLeft, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" IsEnabled="{Binding IsCustomCrop}" Grid.Row="2" Grid.Column="1"
- HorizontalAlignment="Left" Margin="0,0,0,5" />
- <NumericUpDown:NumericUpDown Width="60" Value="{Binding CropRight, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" IsEnabled="{Binding IsCustomCrop}" Grid.Row="2" Grid.Column="3"
- HorizontalAlignment="Left" Margin="0,0,0,5" />
+ <controls:NumberBox Width="60" HorizontalAlignment="Left" Margin="0,0,0,5" IsEnabled="{Binding IsCustomCrop}" Grid.Row="1" Grid.Column="2"
+ Minimum="0" Modulus="2" Number="{Binding CropTop, Mode=TwoWay}" UpdateBindingOnTextChange="True" ShowIncrementButtons="True" AllowEmpty="False" />
+
+ <controls:NumberBox Width="60" HorizontalAlignment="Left" Margin="0,0,0,5" IsEnabled="{Binding IsCustomCrop}" Grid.Row="3" Grid.Column="2"
+ Minimum="0" Modulus="2" Number="{Binding CropBottom, Mode=TwoWay}" UpdateBindingOnTextChange="True" ShowIncrementButtons="True" AllowEmpty="False" />
+
+ <controls:NumberBox Width="60" HorizontalAlignment="Left" Margin="0,0,0,5" IsEnabled="{Binding IsCustomCrop}" Grid.Row="2" Grid.Column="1"
+ Minimum="0" Modulus="2" Number="{Binding CropLeft, Mode=TwoWay}" UpdateBindingOnTextChange="True" ShowIncrementButtons="True" AllowEmpty="False" />
+
+ <controls:NumberBox Width="60" HorizontalAlignment="Left" Margin="0,0,0,5" IsEnabled="{Binding IsCustomCrop}" Grid.Row="2" Grid.Column="3"
+ Minimum="0" Modulus="2" Number="{Binding CropRight, Mode=TwoWay}" UpdateBindingOnTextChange="True" ShowIncrementButtons="True" AllowEmpty="False" />
</Grid>
diff --git a/win/CS/HandBrakeWPF/Views/ShellView.xaml b/win/CS/HandBrakeWPF/Views/ShellView.xaml
index b6f3cc9eb..9bfee4bc1 100644
--- a/win/CS/HandBrakeWPF/Views/ShellView.xaml
+++ b/win/CS/HandBrakeWPF/Views/ShellView.xaml
@@ -4,9 +4,9 @@
xmlns:Data="clr-namespace:System.Windows.Data;assembly=PresentationFramework"
xmlns:Converters="clr-namespace:HandBrakeWPF.Converters" Title="{Data:Binding Path=WindowTitle}"
Width="1015"
- Height="652"
+ Height="670"
MinWidth="1015"
- MinHeight="652"
+ MinHeight="670"
AllowDrop="True"
Background="#FFF0F0F0"
FontSize="11"
diff --git a/win/CS/HandBrakeWPF/Views/SubtitlesView.xaml b/win/CS/HandBrakeWPF/Views/SubtitlesView.xaml
index 83dabf50f..362734851 100644
--- a/win/CS/HandBrakeWPF/Views/SubtitlesView.xaml
+++ b/win/CS/HandBrakeWPF/Views/SubtitlesView.xaml
@@ -69,6 +69,8 @@
<MenuItem Header="Add All Remaining Selected Languages" cal:Message.Attach="[Event Click] = [Action AddAllRemainingForSelectedLanguages]" />
<Separator />
<MenuItem Header="Clear All" cal:Message.Attach="[Event Click] = [Action Clear]" />
+ <Separator />
+ <MenuItem Header="Configure Default Behaviours" cal:Message.Attach="[Event Click] = [Action SetDefaultBehaviour]" />
</ContextMenu>
</ListBox.ContextMenu>
diff --git a/win/CS/HandBrakeWPF/Views/VideoView.xaml b/win/CS/HandBrakeWPF/Views/VideoView.xaml
index 78186238d..c9b125abe 100644
--- a/win/CS/HandBrakeWPF/Views/VideoView.xaml
+++ b/win/CS/HandBrakeWPF/Views/VideoView.xaml
@@ -79,7 +79,10 @@
<StackPanel Orientation="Horizontal" Margin="0,0,0,10" >
<RadioButton Content="Constant Quality:" IsChecked="{Binding IsConstantQuantity}" Margin="0,0,10,0"/>
<TextBlock Text="{Binding DisplayRF}" Width="25" />
- <TextBlock Text="RF" FontWeight="Bold" />
+ <TextBlock Text="{Binding Rfqp}" FontWeight="Bold" />
+
+ <TextBlock Text="{x:Static Properties:Resources.Video_LosslessWarning}" Visibility="{Binding IsLossless, Converter={StaticResource boolToVisConverter}}"
+ Margin="10,0,0,0" ToolTip="{x:Static Properties:Resources.Video_LosslessWarningTooltip}" FontWeight="Bold" />
</StackPanel>
<Slider Width="280" Value="{Binding RF}" HorizontalAlignment="Left" Maximum="{Binding QualityMax}" Minimum="{Binding QualityMin}"