--- /dev/null
+diff -Naur a52dec.orig/configure.in a52dec/configure.in
+--- a52dec.orig/configure.in 2002-07-27 23:50:20.000000000 -0400
++++ a52dec/configure.in 2013-01-28 21:06:27.000000000 -0500
+@@ -6,7 +6,7 @@
+ AC_CONFIG_FILES([Makefile autotools/Makefile include/Makefile test/Makefile
+ doc/Makefile src/Makefile liba52/Makefile libao/Makefile vc++/Makefile])
+ AM_INIT_AUTOMAKE([a52dec],[0.7.4])
+-AM_CONFIG_HEADER(include/config.h)
++AC_CONFIG_HEADER(include/config.h)
+ AM_MAINTAINER_MODE
+ AC_CANONICAL_HOST
+
$(eval $(call import.MODULE.defs,AUTOMAKE,automake,AUTOCONF))
$(eval $(call import.CONTRIB.defs,AUTOMAKE))
-AUTOMAKE.FETCH.url = http://download.handbrake.fr/handbrake/contrib/automake-1.12.3.tar.bz2
+AUTOMAKE.FETCH.url = http://download.handbrake.fr/handbrake/contrib/automake-1.13.1.tar.bz2
+++ /dev/null
-diff --git a/libavcodec/mlpdec.c b/libavcodec/mlpdec.c
-index 3852f6e..c7217c8 100644
---- a/libavcodec/mlpdec.c
-+++ b/libavcodec/mlpdec.c
-@@ -28,6 +28,7 @@
-
- #include "avcodec.h"
- #include "libavutil/intreadwrite.h"
-+#include "libavutil/channel_layout.h"
- #include "get_bits.h"
- #include "internal.h"
- #include "libavutil/crc.h"
-@@ -435,6 +436,28 @@ static int read_restart_header(MLPDecodeContext *m, GetBitContext *gbp,
- s->ch_assign[ch_assign] = ch;
- }
-
-+ if (m->avctx->codec_id == AV_CODEC_ID_TRUEHD) {
-+ switch (m->avctx->channel_layout) {
-+ case AV_CH_LAYOUT_6POINT1:
-+ case (AV_CH_LAYOUT_6POINT1|AV_CH_TOP_CENTER):
-+ case (AV_CH_LAYOUT_6POINT1|AV_CH_TOP_FRONT_CENTER):
-+ {
-+ int i = s->ch_assign[6];
-+ s->ch_assign[6] = s->ch_assign[5];
-+ s->ch_assign[5] = s->ch_assign[4];
-+ s->ch_assign[4] = i;
-+ break;
-+ }
-+ case AV_CH_LAYOUT_7POINT1:
-+ case (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER):
-+ FFSWAP(int, s->ch_assign[4], s->ch_assign[6]);
-+ FFSWAP(int, s->ch_assign[5], s->ch_assign[7]);
-+ break;
-+ default:
-+ break;
-+ }
-+ }
-+
- checksum = ff_mlp_restart_checksum(buf, get_bits_count(gbp) - start_count);
-
- if (checksum != get_bits(gbp, 8))
--- /dev/null
+diff --git a/libavcodec/mlp_parser.c b/libavcodec/mlp_parser.c
+index d1a3dc1..31c79c9 100644
+--- a/libavcodec/mlp_parser.c
++++ b/libavcodec/mlp_parser.c
+@@ -126,7 +126,7 @@ static uint64_t truehd_layout(int chanmap)
+
+ int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb)
+ {
+- int ratebits;
++ int ratebits, channel_arrangement;
+ uint16_t checksum;
+
+ assert(get_bits_count(gb) == 0);
+@@ -157,7 +157,9 @@ int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb)
+
+ skip_bits(gb, 11);
+
+- mh->channels_mlp = get_bits(gb, 5);
++ channel_arrangement = get_bits(gb, 5);
++ mh->channels_mlp = mlp_channels[channel_arrangement];
++ mh->channel_layout_mlp = mlp_layout[channel_arrangement];
+ } else if (mh->stream_type == 0xba) {
+ mh->group1_bits = 24; // TODO: Is this information actually conveyed anywhere?
+ mh->group2_bits = 0;
+@@ -168,11 +170,15 @@ int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb)
+
+ skip_bits(gb, 8);
+
+- mh->channels_thd_stream1 = get_bits(gb, 5);
++ channel_arrangement = get_bits(gb, 5);
++ mh->channels_thd_stream1 = truehd_channels(channel_arrangement);
++ mh->channel_layout_thd_stream1 = truehd_layout(channel_arrangement);
+
+ skip_bits(gb, 2);
+
+- mh->channels_thd_stream2 = get_bits(gb, 13);
++ channel_arrangement = get_bits(gb, 13);
++ mh->channels_thd_stream2 = truehd_channels(channel_arrangement);
++ mh->channel_layout_thd_stream2 = truehd_layout(channel_arrangement);
+ } else
+ return AVERROR_INVALIDDATA;
+
+@@ -316,16 +322,16 @@ static int mlp_parse(AVCodecParserContext *s,
+
+ if (mh.stream_type == 0xbb) {
+ /* MLP stream */
+- avctx->channels = mlp_channels[mh.channels_mlp];
+- avctx->channel_layout = mlp_layout[mh.channels_mlp];
++ avctx->channels = mh.channels_mlp;
++ avctx->channel_layout = mh.channel_layout_mlp;
+ } else { /* mh.stream_type == 0xba */
+ /* TrueHD stream */
+ if (mh.channels_thd_stream2) {
+- avctx->channels = truehd_channels(mh.channels_thd_stream2);
+- avctx->channel_layout = truehd_layout(mh.channels_thd_stream2);
++ avctx->channels = mh.channels_thd_stream2;
++ avctx->channel_layout = mh.channel_layout_thd_stream2;
+ } else {
+- avctx->channels = truehd_channels(mh.channels_thd_stream1);
+- avctx->channel_layout = truehd_layout(mh.channels_thd_stream1);
++ avctx->channels = mh.channels_thd_stream1;
++ avctx->channel_layout = mh.channel_layout_thd_stream1;
+ }
+ }
+
+diff --git a/libavcodec/mlp_parser.h b/libavcodec/mlp_parser.h
+index 35bb312..e874426 100644
+--- a/libavcodec/mlp_parser.h
++++ b/libavcodec/mlp_parser.h
+@@ -31,25 +31,28 @@
+
+ typedef struct MLPHeaderInfo
+ {
+- int stream_type; ///< 0xBB for MLP, 0xBA for TrueHD
++ int stream_type; ///< 0xBB for MLP, 0xBA for TrueHD
+
+- int group1_bits; ///< The bit depth of the first substream
+- int group2_bits; ///< Bit depth of the second substream (MLP only)
++ int group1_bits; ///< The bit depth of the first substream
++ int group2_bits; ///< Bit depth of the second substream (MLP only)
+
+- int group1_samplerate; ///< Sample rate of first substream
+- int group2_samplerate; ///< Sample rate of second substream (MLP only)
++ int group1_samplerate; ///< Sample rate of first substream
++ int group2_samplerate; ///< Sample rate of second substream (MLP only)
+
+- int channels_mlp; ///< Channel arrangement for MLP streams
+- int channels_thd_stream1; ///< Channel arrangement for substream 1 of TrueHD streams (5.1)
+- int channels_thd_stream2; ///< Channel arrangement for substream 2 of TrueHD streams (7.1)
++ int channels_mlp; ///< Channel count for MLP streams
++ int channels_thd_stream1; ///< Channel count for substream 1 of TrueHD streams ("6-channel presentation")
++ int channels_thd_stream2; ///< Channel count for substream 2 of TrueHD streams ("8-channel presentation")
++ uint64_t channel_layout_mlp; ///< Channel layout for MLP streams
++ uint64_t channel_layout_thd_stream1; ///< Channel layout for substream 1 of TrueHD streams ("6-channel presentation")
++ uint64_t channel_layout_thd_stream2; ///< Channel layout for substream 2 of TrueHD streams ("8-channel presentation")
+
+- int access_unit_size; ///< Number of samples per coded frame
+- int access_unit_size_pow2; ///< Next power of two above number of samples per frame
++ int access_unit_size; ///< Number of samples per coded frame
++ int access_unit_size_pow2; ///< Next power of two above number of samples per frame
+
+- int is_vbr; ///< Stream is VBR instead of CBR
+- int peak_bitrate; ///< Peak bitrate for VBR, actual bitrate (==peak) for CBR
++ int is_vbr; ///< Stream is VBR instead of CBR
++ int peak_bitrate; ///< Peak bitrate for VBR, actual bitrate (==peak) for CBR
+
+- int num_substreams; ///< Number of substreams within stream
++ int num_substreams; ///< Number of substreams within stream
+ } MLPHeaderInfo;
+
+
+diff --git a/libavcodec/mlpdec.c b/libavcodec/mlpdec.c
+index 3852f6e..f8c647a 100644
+--- a/libavcodec/mlpdec.c
++++ b/libavcodec/mlpdec.c
+@@ -28,6 +28,7 @@
+
+ #include "avcodec.h"
+ #include "libavutil/intreadwrite.h"
++#include "libavutil/channel_layout.h"
+ #include "get_bits.h"
+ #include "internal.h"
+ #include "libavutil/crc.h"
+@@ -56,6 +57,8 @@ typedef struct SubStream {
+ uint8_t max_matrix_channel;
+ /// For each channel output by the matrix, the output channel to map it to
+ uint8_t ch_assign[MAX_CHANNELS];
++ /// The channel layout for this substream
++ uint64_t ch_layout;
+
+ /// Channel coding parameters for channels in the substream
+ ChannelParams channel_params[MAX_CHANNELS];
+@@ -146,6 +149,36 @@ typedef struct MLPDecodeContext {
+ MLPDSPContext dsp;
+ } MLPDecodeContext;
+
++static const uint64_t thd_channel_order[] = {
++ AV_CH_FRONT_LEFT, AV_CH_FRONT_RIGHT, // LR
++ AV_CH_FRONT_CENTER, // C
++ AV_CH_LOW_FREQUENCY, // LFE
++ AV_CH_SIDE_LEFT, AV_CH_SIDE_RIGHT, // LRs
++ AV_CH_TOP_FRONT_LEFT, AV_CH_TOP_FRONT_RIGHT, // LRvh
++ AV_CH_FRONT_LEFT_OF_CENTER, AV_CH_FRONT_RIGHT_OF_CENTER, // LRc
++ AV_CH_BACK_LEFT, AV_CH_BACK_RIGHT, // LRrs
++ AV_CH_BACK_CENTER, // Cs
++ AV_CH_TOP_CENTER, // Ts
++ AV_CH_SURROUND_DIRECT_LEFT, AV_CH_SURROUND_DIRECT_RIGHT, // LRsd
++ AV_CH_WIDE_LEFT, AV_CH_WIDE_RIGHT, // LRw
++ AV_CH_TOP_FRONT_CENTER, // Cvh
++ AV_CH_LOW_FREQUENCY_2, // LFE2
++};
++
++static uint64_t thd_channel_layout_extract_channel(uint64_t channel_layout,
++ int index)
++{
++ int i;
++
++ if (av_get_channel_layout_nb_channels(channel_layout) <= index)
++ return 0;
++
++ for (i = 0; i < FF_ARRAY_ELEMS(thd_channel_order); i++)
++ if (channel_layout & thd_channel_order[i] && !index--)
++ return thd_channel_order[i];
++ return 0;
++}
++
+ static VLC huff_vlc[3];
+
+ /** Initialize static data, constant between all invocations of the codec. */
+@@ -325,6 +358,24 @@ static int read_major_sync(MLPDecodeContext *m, GetBitContext *gb)
+ for (substr = 0; substr < MAX_SUBSTREAMS; substr++)
+ m->substream[substr].restart_seen = 0;
+
++ /* Set the layout for each substream. When there's more than one, the first
++ * substream is Stereo. Subsequent substreams' layouts are indicated in the
++ * major sync. */
++ if (m->avctx->codec_id == AV_CODEC_ID_MLP) {
++ if ((substr = (mh.num_substreams > 1)))
++ m->substream[0].ch_layout = AV_CH_LAYOUT_STEREO;
++ m->substream[substr].ch_layout = mh.channel_layout_mlp;
++ } else {
++ if ((substr = (mh.num_substreams > 1)))
++ m->substream[0].ch_layout = AV_CH_LAYOUT_STEREO;
++ if (mh.num_substreams > 2)
++ if (mh.channel_layout_thd_stream2)
++ m->substream[2].ch_layout = mh.channel_layout_thd_stream2;
++ else
++ m->substream[2].ch_layout = mh.channel_layout_thd_stream1;
++ m->substream[substr].ch_layout = mh.channel_layout_thd_stream1;
++ }
++
+ return 0;
+ }
+
+@@ -426,6 +477,12 @@ static int read_restart_header(MLPDecodeContext *m, GetBitContext *gbp,
+
+ for (ch = 0; ch <= s->max_matrix_channel; ch++) {
+ int ch_assign = get_bits(gbp, 6);
++ if (m->avctx->codec_id == AV_CODEC_ID_TRUEHD) {
++ uint64_t channel = thd_channel_layout_extract_channel(s->ch_layout,
++ ch_assign);
++ ch_assign = av_get_channel_layout_channel_index(s->ch_layout,
++ channel);
++ }
+ if (ch_assign > s->max_matrix_channel) {
+ av_log_ask_for_sample(m->avctx,
+ "Assignment of matrix channel %d to invalid output channel %d.\n",
-From 021a7700ff839b295b5776d4552563de1a448df6 Mon Sep 17 00:00:00 2001
+From 9922584ba3b5b02d913e629ea74d72e994870873 Mon Sep 17 00:00:00 2001
From: John Stebbins <jstebbins.hb@gmail.com>
-Date: Sat, 5 Jan 2013 16:57:06 -0800
+Date: Thu, 17 Jan 2013 19:57:26 +0100
Subject: [PATCH] dca_parser: Handle changes in dca frame size
A change in framesize caused a perpetual loss of synchronization.
So read (and use) the frame size from the frame header instead of
setting it only once.
---
- libavcodec/dca_parser.c | 13 ++++++++-----
- 1 file changed, 8 insertions(+), 5 deletions(-)
+ libavcodec/dca_parser.c | 15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/libavcodec/dca_parser.c b/libavcodec/dca_parser.c
-index ab235cf..75e9321 100644
+index ab235cf..12180f3 100644
--- a/libavcodec/dca_parser.c
+++ b/libavcodec/dca_parser.c
@@ -62,10 +62,12 @@ static int dca_find_frame_end(DCAParseContext * pc1, const uint8_t * buf,
{
GetBitContext gb;
uint8_t hdr[12 + FF_INPUT_BUFFER_PADDING_SIZE] = { 0 };
-@@ -159,6 +158,10 @@ static int dca_parse_params(const uint8_t *buf, int buf_size, int *duration,
+@@ -159,7 +158,11 @@ static int dca_parse_params(const uint8_t *buf, int buf_size, int *duration,
return AVERROR_INVALIDDATA;
*duration = 256 * (sample_blocks / 8);
+- skip_bits(&gb, 20);
+ *framesize = get_bits(&gb, 14) + 1;
+ if (*framesize < 95)
+ return AVERROR_INVALIDDATA;
+
- skip_bits(&gb, 20);
++ skip_bits(&gb, 6);
sr_code = get_bits(&gb, 4);
*sample_rate = avpriv_dca_sample_rates[sr_code];
+ if (*sample_rate == 0)
@@ -190,7 +193,7 @@ static int dca_parse(AVCodecParserContext * s,
}
--- /dev/null
+diff -Naur libbluray-0.2.3.orig/configure.ac libbluray-0.2.3/configure.ac
+--- libbluray-0.2.3.orig/configure.ac 2012-08-17 07:27:32.000000000 -0400
++++ libbluray-0.2.3/configure.ac 2013-01-28 23:52:04.000000000 -0500
+@@ -22,7 +22,7 @@
+ AC_CONFIG_MACRO_DIR([m4])
+ AC_CANONICAL_SYSTEM
+ AM_INIT_AUTOMAKE([foreign tar-ustar])
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+
+ case "${host_os}" in
+ "")
--- /dev/null
+diff -Naur libdvdread.orig/configure.ac libdvdread/configure.ac
+--- libdvdread.orig/configure.ac 2009-01-08 14:57:10.000000000 -0800
++++ libdvdread/configure.ac 2013-01-26 10:35:21.366836184 -0800
+@@ -141,6 +141,15 @@
+ *mingw32*)
+ CFLAGS="-idirafter \$(top_srcdir)/msvc/include $CFLAGS"
+ LDFLAGS="-no-undefined $LDFLAGS"
++ if test "$GCC" = "yes" ; then
++ gcc_version="`$CC -dumpversion`"
++ gcc_version_major=$(echo $gcc_version | cut -d"." -f1)
++ gcc_version_minor=$(echo $gcc_version | cut -d"." -f2)
++ gcc_version_patch=$(echo $gcc_version | cut -d"." -f3)
++ if test $gcc_version_major -ge 4 -a $gcc_version_minor -ge 7 ; then
++ CFLAGS="-mno-ms-bitfields $CFLAGS"
++ fi
++ fi
+ ;;
+ *cygwin*)
+ LDFLAGS="-no-undefined $LDFLAGS"
--- /dev/null
+diff -Naur libogg-1.3.0.orig/configure.in libogg-1.3.0/configure.in
+--- libogg-1.3.0.orig/configure.in 2011-08-04 13:11:08.000000000 -0400
++++ libogg-1.3.0/configure.in 2013-01-28 23:40:03.000000000 -0500
+@@ -19,7 +19,7 @@
+ AM_PROG_CC_C_O
+
+ dnl config.h
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADER(config.h)
+
+ dnl Set some options based on environment
+
--- /dev/null
+diff -Naur aotuv-b6.03_20110424.orig/configure.ac aotuv-b6.03_20110424/configure.ac
+--- aotuv-b6.03_20110424.orig/configure.ac 2010-11-01 15:27:12.000000000 -0400
++++ aotuv-b6.03_20110424/configure.ac 2013-01-28 23:43:26.000000000 -0500
+@@ -13,7 +13,7 @@
+
+ AM_INIT_AUTOMAKE($PACKAGE_NAME,$PACKAGE_VERSION)
+ AM_MAINTAINER_MODE
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADER([config.h])
+
+ dnl Add parameters for aclocal
+ AC_SUBST(ACLOCAL_AMFLAGS, "-I m4")
$(eval $(call import.MODULE.defs,X264,x264,YASM PTHREADW32))
$(eval $(call import.CONTRIB.defs,X264))
-X264.FETCH.url = http://download.handbrake.fr/handbrake/contrib/x264-r2216-198a7ea.tar.gz
+X264.FETCH.url = http://download.handbrake.fr/handbrake/contrib/x264-r2245-bc13772.tar.gz
X264.EXTRACT.tarbase = x264
X264.CONFIGURE.deps =
$(eval $(call import.MODULE.defs,YASM,yasm))
$(eval $(call import.CONTRIB.defs,YASM))
-YASM.FETCH.url = http://download.handbrake.fr/handbrake/contrib/yasm-1.1.0.tar.gz
+YASM.FETCH.url = http://download.handbrake.fr/handbrake/contrib/yasm-1.2.0.tar.gz
-Guide to Building HandBrake svn4981 (2012092601) on Linux
+Guide to Building HandBrake svn5208 (2013012701) on Linux
*********************************************************
Table of Contents
* Intel 32-bit or 64-bit kernel
- * Ubuntu 10.04, gcc 4.4.3, yasm 0.8.0
+ * Ubuntu 12.04, gcc 4.5, yasm 1.2.x
- * Fedora 14, gcc 4.5.1, yasm 1.0.1
+ * Fedora 17 and 18, gcc 4.5, yasm 1.2.x
- * gcc 4.0.0 or higher is reported to work
+ * gcc 4.5 or higher is reported to work
Note: It is recommended to use the platform distribution's
standard compiler for maximum C++ compatibility. If you build with
intend to disable building the GUI with `configure --disable-gtk' you
will not need many of these packages installed:
-Ubuntu 10.04 - 10.10 packages:
+Ubuntu 12+ packages:
* subversion (cli/gui)
* yasm (cli/gui)
* libgstreamer-plugins-base0.10-dev (gui)
-Ubuntu 11.04 - 11.10 packages:
+Ubuntu 12+ packages:
* libappindicator-dev (gui)
To install these packages:
libgtk2.0-dev libgudev-1.0-dev libwebkit-dev libnotify-dev \
libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libappindicator-dev
-Fedora 12 - 13 package groups:
+Fedora 17+ package groups:
* Development Tools
* Development Libraries
This chapter is for building from a terminal/shell environment in as
few commands as possible. Upon completion of the following commands you
should have a fresh build of HandBrake. Further instructions are
-available beginning with *note overview:: which describes procedures
+available beginning with *Note overview:: which describes procedures
suitable for repeating builds. This chapter should be skipped by those
seeking more than a minimalist build.
root: svn://svn.handbrake.fr/HandBrake
branch: trunk
uuid: b64f7644-9d1e-0410-96f1-a4d463321fa5
- rev: 4981
- date: 2012-09-25 09:52:53 -0700
+ rev: 5208
+ date: 2013-01-26 18:47:13 +0000
type: developer
-Build Guide for HandBrake 4394svn on Mac OS X
+Build Guide for HandBrake 5208svn on Mac OS X
*********************************************
Table of Contents
* llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658)
- * yasm 1.1.0.2352
+ * yasm 1.2.x
+
+ * xquartz (http://xquartz.macosforge.org/landing/)
Note: It is recommended to use the platform distribution's
standard compiler for maximum C++ compatibility. If you build with
This chapter is for building from a terminal/shell environment in as
few commands as possible. Upon completion of the following commands you
should have a fresh build of HandBrake. Further instructions are
-available beginning with *note overview:: which describes procedures
+available beginning with *Note overview:: which describes procedures
suitable for repeating builds. This chapter should be skipped by those
seeking more than a minimalist build.
root: svn://svn.handbrake.fr/HandBrake
branch: trunk
uuid: b64f7644-9d1e-0410-96f1-a4d463321fa5
- rev: 4394
- date: 2011-12-30 17:21:44 -0500
+ rev: 5208
+ date: 2013-01-26 18:47:13 +0000
type: developer
-Guide to Building HandBrake svn4891 (2012080501) on MinGW
+Guide to Building HandBrake svn5208 (2013012701) on MinGW
*********************************************************
Table of Contents
* Intel 32-bit or 64-bit hardware
- * MinGW on Fedora 16, Ubuntu or Debian, gcc 4.5+
+ * MinGW on Fedora 17+, Ubuntu 12+ or Debian, gcc 4.5+
- * yasm 1.1.x.x (for i386 or x86_64 architectures)
+ * yasm 1.2.x (for i386 or x86_64 architectures)
Note: It is recommended to use the platform distribution's
standard compiler for maximum C++ compatibility. If you build with
`g++-4' respectively and you must indicate to configure the
desired versions. The following syntax should do the trick:
- ../configure --cross=i686-pc-mingw32 --gcc=gcc-4
+ ../configure --cross=i686-w64-mingw32 --gcc=gcc-4
The following general tools are used on various platforms and it is
recommended you use these versions or similar:
This chapter is for building from a terminal/shell environment in as
few commands as possible. Upon completion of the following commands you
should have a fresh build of HandBrake. Further instructions are
-available beginning with *note overview:: which describes procedures
+available beginning with *Note overview:: which describes procedures
suitable for repeating builds. This chapter should be skipped by those
seeking more than a minimalist build.
root: svn://svn.handbrake.fr/HandBrake
branch: trunk
uuid: b64f7644-9d1e-0410-96f1-a4d463321fa5
- rev: 4891
- date: 2012-08-05 17:23:19 +0100
+ rev: 5208
+ date: 2013-01-26 18:47:13 +0000
type: developer
+
@itemize @bullet
@item Intel 32-bit or 64-bit kernel
-@item Ubuntu 10.04, gcc 4.4.3, yasm 0.8.0
-@item Fedora 14, gcc 4.5.1, yasm 1.0.1
-@item gcc 4.0.0 or higher is reported to work
+@item Ubuntu 12.04, gcc 4.5, yasm 1.2.x
+@item Fedora 17 and 18, gcc 4.5, yasm 1.2.x
+@item gcc 4.5 or higher is reported to work
@end itemize
@include building/prerequisites.bundled.texi
The @b{GTK UI} introduces some significant extra build requirements. If you intend to disable building the GUI with @command{configure --disable-gtk} you will not need many of these packages installed:
-Ubuntu 10.04 - 10.10 packages:
+Ubuntu 12+ packages:
@itemize @bullet
@item subversion (cli/gui)
@item yasm (cli/gui)
@item libgstreamer-plugins-base0.10-dev (gui)
@end itemize
-Ubuntu 11.04 - 11.10 packages:
+Ubuntu 12+ packages:
@itemize @bullet
@item libappindicator-dev (gui)
@end itemize
libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libappindicator-dev
@end example
-Fedora 12 - 13 package groups:
+Fedora 17+ package groups:
@itemize @bullet
@item Development Tools
@item Development Libraries
@itemize @bullet
@item Intel 32-bit or 64-bit hardware
-@item @value{OS.mingw} on Fedora 16, Ubuntu or Debian, gcc 4.5+
-@item yasm 1.1.x.x (for i386 or x86_64 architectures)
+@item @value{OS.mingw} on Fedora 17+, Ubuntu 12+ or Debian, gcc 4.5+
+@item yasm 1.2.x (for i386 or x86_64 architectures)
@end itemize
@include building/prerequisites.bundled.texi
@end quotation
@example
-../configure --cross=i686-pc-mingw32 --gcc=gcc-4
+../configure --cross=i686-w64-mingw32 --gcc=gcc-4
@end example
@include building/prerequisites.common.texi
@item @value{OS.osx} 10.7.2
@item Xcode 4.2.1 (Build version 4D502)
@item llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658)
-@item yasm 1.1.0.2352
+@item yasm 1.2.x
+@item xquartz (http://xquartz.macosforge.org/landing/)
@end itemize
@include building/prerequisites.bundled.texi
indices = gtk_tree_path_get_indices (treepath);
row = indices[0];
gtk_tree_path_free(treepath);
- // Remove the selected item
- gtk_list_store_remove (GTK_LIST_STORE(store), &iter);
- // remove from audio settings list
if (row < 0) return;
- widget = GHB_WIDGET (ud->builder, "audio_add");
- gtk_widget_set_sensitive(widget, TRUE);
+
audio_list = ghb_settings_get_value(ud->settings, "audio_list");
if (row >= ghb_array_len(audio_list))
return;
+
+ // Update our settings list before removing the row from the
+ // treeview. Removing from the treeview sometimes provokes an
+ // immediate selection change, so the list needs to be up to date
+ // when this happens.
GValue *old = ghb_array_get_nth(audio_list, row);
ghb_value_free(old);
ghb_array_remove(audio_list, row);
+
+ // Remove the selected item
+ gtk_list_store_remove (GTK_LIST_STORE(store), &iter);
+ // remove from audio settings list
+ widget = GHB_WIDGET (ud->builder, "audio_add");
+ gtk_widget_set_sensitive(widget, TRUE);
}
}
gchar *name;
dialog = GHB_WIDGET(ud->builder, "source_dialog");
- 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);
- if (name != NULL)
- g_free(name);
+ device = gtk_combo_box_text_get_active_text(combo);
+ // Protext against unexpected NULL return value
+ if (device != NULL)
+ {
+ 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);
+ if (name != NULL)
+ g_free(name);
+ }
}
}
dialog = GHB_WIDGET(ud->builder, "source_dialog");
source_dialog_extra_widgets(ud, dialog);
+#if GTK_CHECK_VERSION(3, 0, 0)
+ // gtk3 has a STUPID BUG! If you select the "same_path" it ends
+ // up selecting the "Recent Files" shortcut instead of taking you
+ // to the directory and file THAT YOU ASKED FOR!!! FUUUUK!!!
+ //
+ // So instead, I am just setting the current folder. It's not
+ // optimal because if you are processing several files in the same
+ // folder, you want the selection to return to where you were last
+ // in the list, but there's not much else I can do at this point.
+ gchar *dirname = g_path_get_dirname(sourcename);
+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), dirname);
+ g_free(dirname);
+#else
gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), sourcename);
+#endif
response = gtk_dialog_run(GTK_DIALOG (dialog));
gtk_widget_hide(dialog);
if (response == GTK_RESPONSE_NO)
<?xml version="1.0"?>
<!--*- mode: xml -*-->
<interface>
+ <object class="GtkLabel" id="SubTrackLabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Track</b></property>
+ <property name="tooltip-text" translatable="yes">The source subtitle track
+
+You can choose any of the subtitles
+recognized in your source file.
+
+In addition, there is a special track option
+"Foreign Audio Search". This option will add
+an extra pass to the encode that searches for
+subtitles that may correspond to a foreign
+language scene. This option is best used in
+conjunction with the "Forced" option.</property>
+ <property name="use_markup">True</property>
+ </object>
+ <object class="GtkLabel" id="SubForcedLabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Forced Only</b></property>
+ <property name="tooltip-text" translatable="yes">Use only subtitles that have been flagged
+as forced in the source subtitle track
+
+"Forced" subtitles are usually used to show
+subtitles during scenes where someone is speaking
+a foreign language.</property>
+ <property name="use_markup">True</property>
+ </object>
+ <object class="GtkLabel" id="SubBurnedLabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Burned In</b></property>
+ <property name="tooltip-text" translatable="yes">Render the subtitle over the video.
+
+The subtitle will be part of the video and can not be disabled.</property>
+ <property name="use_markup">True</property>
+ </object>
+ <object class="GtkLabel" id="SubDefaultLabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Default</b></property>
+ <property name="tooltip-text" translatable="yes">Set the default output subtitle track.
+
+Most players will automatically display this
+subtitle track whenever the video is played.
+
+This is usefule for creating a "forced" track
+in your output.</property>
+ <property name="use_markup">True</property>
+ </object>
+ <object class="GtkLabel" id="SubSRTOffsetLabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>SRT Offset</b></property>
+ <property name="tooltip-text" translatable="yes">Add (or subtract) an offset (in milliseconds)
+to the start of the SRT subtitle track.
+
+Often, the start of an external SRT file
+does not coincide with the start of the video.
+This setting allows you to synchronize the files.</property>
+ <property name="use_markup">True</property>
+ </object>
<object class="GtkAdjustment" id="adjustment1">
<property name="upper">100</property>
<property name="lower">1</property>
</popup>
</ui>
</object>
- <object class="GtkListStore" id="device_list">
- <columns>
- <!-- column-name device -->
- <column type="gchararray"/>
- </columns>
- </object>
<object class="GtkMenu" id="presets_menu">
<child>
<property name="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">
+ <object class="GtkAlignment" id="alignment19">
<property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</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="GtkAlignment" id="alignment19">
+ <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="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>
+ <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 class="GtkComboBoxText" id="source_device">
<property name="visible">True</property>
- <property name="model">device_list</property>
+ <property name="entry-text-column">0</property>
<signal handler="dvd_device_changed_cb" name="changed"/>
- <child>
- <object class="GtkCellRendererText" id="cellrenderertext1"/>
- <attributes>
- <attribute name="text">0</attribute>
- </attributes>
- </child>
</object>
</child>
</object>
}
static void
-x264_profile_opts_set(GtkBuilder *builder, const gchar *name)
+h264_profile_opts_set(GtkBuilder *builder, const gchar *name)
{
GtkTreeIter iter;
GtkListStore *store;
gint ii, count = 0;
const char * const *profiles;
- profiles = hb_x264_profiles();
+ profiles = hb_h264_profiles();
while (profiles && profiles[count]) count++;
- g_debug("x264_profile_opts_set ()\n");
+ g_debug("h264_profile_opts_set ()\n");
store = get_combo_box_store(builder, name);
gtk_list_store_clear(store);
- gtk_list_store_append(store, &iter);
- gtk_list_store_set(store, &iter,
- 0, "Auto",
- 1, TRUE,
- 2, "auto",
- 3, (gdouble)0,
- 4, "auto",
- -1);
-
for (ii = 0; ii < count; ii++)
{
- // HandBrake doesn't support high10 (10 bit encoding)
- // or high422 (YUV422)
- if (!strcasecmp("high10", profiles[ii]) ||
- !strcasecmp("high422", profiles[ii]) ||
- !strcasecmp("high444", profiles[ii]))
- {
- continue;
- }
-
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
0, profiles[ii],
1, TRUE,
2, profiles[ii],
- 3, (gdouble)ii + 1,
+ 3, (gdouble)ii,
4, profiles[ii],
-1);
}
}
static void
-x264_level_opts_set(GtkBuilder *builder, const gchar *name)
+h264_level_opts_set(GtkBuilder *builder, const gchar *name)
{
GtkTreeIter iter;
GtkListStore *store;
levels = hb_h264_levels();
while (levels && levels[count]) count++;
- g_debug("x264_level_opts_set ()\n");
+ g_debug("h264_level_opts_set ()\n");
store = get_combo_box_store(builder, name);
gtk_list_store_clear(store);
- gtk_list_store_append(store, &iter);
- gtk_list_store_set(store, &iter,
- 0, "Auto",
- 1, TRUE,
- 2, "auto",
- 3, (gdouble)0,
- 4, "auto",
- -1);
-
for (ii = 0; ii < count; ii++)
{
gtk_list_store_append(store, &iter);
0, levels[ii],
1, TRUE,
2, levels[ii],
- 3, (gdouble)ii + 1,
+ 3, (gdouble)ii,
4, levels[ii],
-1);
}
small_opts_set(ud->builder, "x264_analyse", &analyse_opts);
small_opts_set(ud->builder, "x264_trellis", &trellis_opts);
x264_tune_opts_set(ud->builder, "x264Tune");
- x264_profile_opts_set(ud->builder, "h264Profile");
- x264_level_opts_set(ud->builder, "h264Level");
+ h264_profile_opts_set(ud->builder, "h264Profile");
+ h264_level_opts_set(ud->builder, "h264Level");
}
else
{
else if (strcmp(name, "x264Tune") == 0)
x264_tune_opts_set(ud->builder, "x264Tune");
else if (strcmp(name, "h264Profile") == 0)
- x264_profile_opts_set(ud->builder, "h264Profile");
+ h264_profile_opts_set(ud->builder, "h264Profile");
else if (strcmp(name, "h264Level") == 0)
- x264_level_opts_set(ud->builder, "h264Level");
+ h264_level_opts_set(ud->builder, "h264Level");
else
generic_opts_set(ud->builder, name, find_combo_table(name));
}
hb_job_set_x264_tune(job, tunes);
if (profile != NULL && strcasecmp(profile, "auto"))
- hb_job_set_x264_profile(job, profile);
+ hb_job_set_h264_profile(job, profile);
if (level != NULL && strcasecmp(level, "auto"))
- hb_job_set_x264_level(job, level);
+ hb_job_set_h264_level(job, level);
hb_job_set_advanced_opts(job, opts);
cell = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes(
_("Track"), cell, "text", 0, NULL);
+ widget = GHB_WIDGET(ud->builder, "SubTrackLabel");
+ gtk_tree_view_column_set_widget(column, widget);
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);
cell = gtk_cell_renderer_toggle_new();
column = gtk_tree_view_column_new_with_attributes(
_("Forced Only"), cell, "active", 1, "visible", 7, NULL);
+ widget = GHB_WIDGET(ud->builder, "SubForcedLabel");
+ gtk_tree_view_column_set_widget(column, widget);
gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
g_signal_connect(cell, "toggled", subtitle_forced_toggled_cb, ud);
gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(cell), TRUE);
column = gtk_tree_view_column_new_with_attributes(
_("Burned In"), cell, "active", 2, "visible", 8, NULL);
+ widget = GHB_WIDGET(ud->builder, "SubBurnedLabel");
+ gtk_tree_view_column_set_widget(column, widget);
gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
g_signal_connect(cell, "toggled", subtitle_burned_toggled_cb, ud);
gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(cell), TRUE);
column = gtk_tree_view_column_new_with_attributes(
_("Default"), cell, "active", 3, NULL);
+ widget = GHB_WIDGET(ud->builder, "SubDefaultLabel");
+ gtk_tree_view_column_set_widget(column, widget);
gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
g_signal_connect(cell, "toggled", subtitle_default_toggled_cb, ud);
cell = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes(
_("Srt Offset"), cell, "text", 4, "visible", 9, NULL);
+ widget = GHB_WIDGET(ud->builder, "SubSRTOffsetLabel");
+ gtk_tree_view_column_set_widget(column, widget);
gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
{
gtk_tree_selection_select_iter (selection, &nextIter);
}
+
// Get the row number
treepath = gtk_tree_model_get_path (store, &iter);
indices = gtk_tree_path_get_indices (treepath);
row = indices[0];
gtk_tree_path_free(treepath);
- // Remove the selected item
- gtk_list_store_remove (GTK_LIST_STORE(store), &iter);
- // remove from subtitle settings list
if (row < 0) return;
- widget = GHB_WIDGET (ud->builder, "subtitle_add");
- gtk_widget_set_sensitive(widget, TRUE);
- widget = GHB_WIDGET (ud->builder, "srt_add");
- gtk_widget_set_sensitive(widget, TRUE);
+
subtitle_list = ghb_settings_get_value(ud->settings, "subtitle_list");
if (row >= ghb_array_len(subtitle_list))
return;
+
+ // Update our settings list before removing the row from the
+ // treeview. Removing from the treeview sometimes provokes an
+ // immediate selection change, so the list needs to be up to date
+ // when this happens.
GValue *old = ghb_array_get_nth(subtitle_list, row);
ghb_value_free(old);
ghb_array_remove(subtitle_list, row);
+
+ // Remove the selected item
+ gtk_list_store_remove (GTK_LIST_STORE(store), &iter);
+ // remove from subtitle settings list
+ widget = GHB_WIDGET (ud->builder, "subtitle_add");
+ gtk_widget_set_sensitive(widget, TRUE);
+ widget = GHB_WIDGET (ud->builder, "srt_add");
+ gtk_widget_set_sensitive(widget, TRUE);
+
ghb_live_reset(ud);
}
}
job->x264_preset = NULL;
free(job->x264_tune);
job->x264_tune = NULL;
- free(job->x264_profile);
- job->x264_profile = NULL;
+ free(job->h264_profile);
+ job->h264_profile = NULL;
free(job->h264_level);
job->h264_level = NULL;
}
}
-void hb_job_set_x264_profile( hb_job_t *job, const char *profile )
+void hb_job_set_h264_profile( hb_job_t *job, const char *profile )
{
if ( job )
{
- hb_update_str( &job->x264_profile, profile );
+ hb_update_str( &job->h264_profile, profile );
}
}
-void hb_job_set_x264_level( hb_job_t *job, const char *level )
+void hb_job_set_h264_level( hb_job_t *job, const char *level )
{
if ( job )
{
void hb_job_set_advanced_opts( hb_job_t *job, const char *advanced_opts );
void hb_job_set_x264_preset( hb_job_t *job, const char *preset );
void hb_job_set_x264_tune( hb_job_t *job, const char *tune );
-void hb_job_set_x264_profile( hb_job_t *job, const char *profile );
-void hb_job_set_x264_level( hb_job_t *job, const char *level );
+void hb_job_set_h264_profile( hb_job_t *job, const char *profile );
+void hb_job_set_h264_level( hb_job_t *job, const char *level );
void hb_job_set_file( hb_job_t *job, const char *file );
hb_audio_t *hb_audio_copy(const hb_audio_t *src);
int cfr;
int pass;
int fastfirstpass;
- char *advanced_opts;
- char *x264_profile;
char *x264_preset;
char *x264_tune;
+ char *advanced_opts;
+ char *h264_profile;
char *h264_level;
int areBframes;
// unparse a set of x264 settings to an HB encopts string
char * hb_x264_param_unparse(const char *x264_preset, const char *x264_tune,
- const char *x264_encopts, const char *x264_profile,
+ const char *x264_encopts, const char *h264_profile,
const char *h264_level, int width, int height);
-// x264 preset/tune/profile & h264 level helpers
+// x264 preset/tune & h264 profile/level helpers
const char * const * hb_x264_presets();
const char * const * hb_x264_tunes();
-const char * const * hb_x264_profiles();
+const char * const * hb_h264_profiles();
const char * const * hb_h264_levels();
// x264 option name/synonym helper
int64_t start; // start time of this frame
hb_buffer_t * cc_buf; // captions for this frame
} tags[NTAGS];
+ uint8_t cc_tag_pending;
struct SwsContext *sws_context; // if we have to rescale or convert color space
int sws_width;
int i;
for ( i = 0; i < NTAGS; ++i )
{
- m->tags[i].start = -1;
+ m->tags[i].start = -2;
}
return m;
{
if ( m->tags[m->cur_tag].start < 0 ||
( m->got_iframe && m->tags[m->cur_tag].start >= m->first_pts ) )
- hb_log("mpeg2 tag botch: pts %"PRId64", tag pts %"PRId64" buf 0x%p",
+ hb_log("mpeg2 tag botch: pts %"PRId64", tag pts %"PRId64" buf %p",
buf_es->s.start, m->tags[m->cur_tag].start, m->tags[m->cur_tag].cc_buf);
if ( m->tags[m->cur_tag].cc_buf )
hb_buffer_close( &m->tags[m->cur_tag].cc_buf );
if( buf_es->s.start >= 0 )
{
next_tag( m, buf_es );
+ m->cc_tag_pending = 1;
}
mpeg2_buffer( m->libmpeg2, buf_es->data, buf_es->data + buf_es->size );
}
// if we don't have a tag for the captions, make one
if ( m->last_cc1_buf && m->tags[m->cur_tag].cc_buf != m->last_cc1_buf )
{
- if (m->tags[m->cur_tag].cc_buf)
+ // If we have not set a CC tag for the picture and
+ // we have a new CC buffer, make a new tag.
+ if (!m->cc_tag_pending && m->tags[m->cur_tag].cc_buf != NULL)
{
- hb_log("mpeg2 tag botch2: pts %"PRId64", tag pts %"PRId64" buf 0x%p",
+ next_tag( m, buf_es );
+ }
+ else if (m->tags[m->cur_tag].cc_buf)
+ {
+ hb_log("mpeg2 tag botch2: pts %"PRId64", tag pts %"PRId64" buf %p",
buf_es->s.start, m->tags[m->cur_tag].start, m->tags[m->cur_tag].cc_buf);
hb_buffer_close( &m->tags[m->cur_tag].cc_buf );
}
// see if we already made a tag for the timestamp. If so we
// can just use it, otherwise make a new tag.
- if (m->tags[m->cur_tag].start < 0)
+ if (m->tags[m->cur_tag].start == -2)
{
next_tag( m, buf_es );
}
m->tags[m->cur_tag].cc_buf = m->last_cc1_buf;
}
}
- if( state == STATE_SEQUENCE )
+ if( state == STATE_PICTURE )
+ {
+ m->cc_tag_pending = 0;
+ }
+ else if( state == STATE_SEQUENCE )
{
if( !( m->width && m->height && m->rate ) )
{
int t = m->info->display_picture->tag;
buf->s.start = m->tags[t].start;
cc_buf = m->tags[t].cc_buf;
- m->tags[t].start = -1;
+ m->tags[t].start = -2;
m->tags[t].cc_buf = NULL;
}
if( buf->s.start < 0 && m->last_pts >= 0 )
cur_title = title;
- for (jj = 0; jj < 5; jj++)
+ for (jj = 0; jj < 10; jj++)
{
for (ii = 0; ii < 2000; ii++)
{
}
/* Apply profile and level settings last, if present. */
- if (job->x264_profile != NULL && *job->x264_profile)
+ if (job->h264_profile != NULL && *job->h264_profile)
{
- if (x264_param_apply_profile(¶m, job->x264_profile))
+ if (hb_apply_h264_profile(¶m, job->h264_profile, 1))
{
free(pv);
pv = NULL;
if (job->h264_level != NULL && *job->h264_level)
{
if (hb_apply_h264_level(¶m, job->h264_level,
- job->x264_profile, 1) < 0)
+ job->h264_profile, 1) < 0)
{
free(pv);
pv = NULL;
return HB_WORK_OK;
}
+int hb_apply_h264_profile(x264_param_t *param, const char *h264_profile,
+ int verbose)
+{
+ if (h264_profile != NULL &&
+ strcasecmp(h264_profile, hb_h264_profile_names[0]) != 0)
+ {
+ /*
+ * baseline profile doesn't support interlacing
+ */
+ if ((param->b_interlaced ||
+ param->b_fake_interlaced) &&
+ !strcasecmp(h264_profile, "baseline"))
+ {
+ if (verbose)
+ {
+ hb_log("hb_apply_h264_profile [warning]: baseline profile doesn't support interlacing, disabling");
+ }
+ param->b_interlaced = param->b_fake_interlaced = 0;
+ }
+ /*
+ * lossless requires High 4:4:4 Predictive profile
+ */
+ if (param->rc.f_rf_constant < 1.0 &&
+ param->rc.i_rc_method == X264_RC_CRF &&
+ strcasecmp(h264_profile, "high444") != 0)
+ {
+ if (verbose)
+ {
+ hb_log("hb_apply_h264_profile [warning]: lossless requires high444 profile, disabling");
+ }
+ param->rc.f_rf_constant = 1.0;
+ }
+ if (!strcasecmp(h264_profile, "high10") ||
+ !strcasecmp(h264_profile, "high422"))
+ {
+ // arbitrary profile names may be specified via the CLI
+ // map unsupported high10 and high422 profiles to high
+ return x264_param_apply_profile(param, "high");
+ }
+ return x264_param_apply_profile(param, h264_profile);
+ }
+ else if (!strcasecmp(h264_profile, hb_h264_profile_names[0]))
+ {
+ // "auto", do nothing
+ return 0;
+ }
+ else
+ {
+ // error (profile not a string), abort
+ hb_error("hb_apply_h264_profile: no profile specified");
+ return -1;
+ }
+}
+
int hb_check_h264_level(const char *h264_level, int width, int height,
int fps_num, int fps_den, int interlaced,
int fake_interlaced)
}
int hb_apply_h264_level(x264_param_t *param, const char *h264_level,
- const char *x264_profile, int verbose)
+ const char *h264_profile, int verbose)
{
float f_framerate;
const x264_level_t *x264_level = NULL;
int i, i_mb_size, i_mb_rate, i_mb_width, i_mb_height, max_mb_side, ret;
+ /*
+ * find the x264_level_t corresponding to the requested level
+ */
+ if (h264_level != NULL &&
+ strcasecmp(h264_level, hb_h264_level_names[0]) != 0)
+ {
+ for (i = 0; hb_h264_level_values[i]; i++)
+ {
+ if (!strcmp(hb_h264_level_names[i], h264_level))
+ {
+ int val = hb_h264_level_values[i];
+ for (i = 0; x264_levels[i].level_idc; i++)
+ {
+ if (x264_levels[i].level_idc == val)
+ {
+ x264_level = &x264_levels[i];
+ break;
+ }
+ }
+ break;
+ }
+ }
+ if (x264_level == NULL)
+ {
+ // error (invalid or unsupported level), abort
+ hb_error("hb_apply_h264_level: invalid level %s", h264_level);
+ return -1;
+ }
+ }
+ else if(!strcasecmp(h264_level, hb_h264_level_names[0]))
+ {
+ // "auto", do nothing
+ return 0;
+ }
+ else
+ {
+ // error (level not a string), abort
+ hb_error("hb_apply_h264_level: no level specified");
+ return -1;
+ }
+
/*
* the H.264 profile determines VBV constraints
*/
enum
{
// Main or Baseline (equivalent)
- HB_H264_PROFILE_MAIN,
+ HB_ENCX264_PROFILE_MAIN,
// High (no 4:2:2 or 10-bit support, so anything lossy is equivalent)
- HB_H264_PROFILE_HIGH,
+ HB_ENCX264_PROFILE_HIGH,
// Lossless (4:2:0 8-bit for now)
- HB_H264_PROFILE_HIGH444,
- } h264_profile;
+ HB_ENCX264_PROFILE_HIGH444,
+ } hb_encx264_profile;
/*
* H.264 profile
* re-enabled.
*/
#if 0
- if (x264_profile != NULL && *x264_profile)
+ if (h264_profile != NULL && *h264_profile)
{
// if the user explicitly specified a profile, don't guess it
- if (!strcasecmp(x264_profile, "high444"))
+ if (!strcasecmp(h264_profile, "high444"))
{
- h264_profile = HB_H264_PROFILE_HIGH444;
+ hb_encx264_profile = HB_ENCX264_PROFILE_HIGH444;
}
- else if (!strcasecmp(x264_profile, "main") ||
- !strcasecmp(x264_profile, "baseline"))
+ else if (!strcasecmp(h264_profile, "main") ||
+ !strcasecmp(h264_profile, "baseline"))
{
- h264_profile = HB_H264_PROFILE_MAIN;
+ hb_encx264_profile = HB_ENCX264_PROFILE_MAIN;
}
else
{
- h264_profile = HB_H264_PROFILE_HIGH;
+ hb_encx264_profile = HB_ENCX264_PROFILE_HIGH;
}
}
else
if (param->rc.i_rc_method == X264_RC_CRF &&
param->rc.f_rf_constant < 1.0)
{
- h264_profile = HB_H264_PROFILE_HIGH444;
+ hb_encx264_profile = HB_ENCX264_PROFILE_HIGH444;
}
else if (param->analyse.b_transform_8x8 ||
param->i_cqm_preset != X264_CQM_FLAT)
{
- h264_profile = HB_H264_PROFILE_HIGH;
+ hb_encx264_profile = HB_ENCX264_PROFILE_HIGH;
}
else
{
- h264_profile = HB_H264_PROFILE_MAIN;
- }
- }
-
- /*
- * find the x264_level_t corresponding to the requested level
- */
- if (h264_level != NULL && *h264_level)
- {
- for (i = 0; hb_h264_level_values[i]; i++)
- {
- if (!strcmp(hb_h264_level_names[i], h264_level))
- {
- int val = hb_h264_level_values[i];
- for (i = 0; x264_levels[i].level_idc; i++)
- {
- if (x264_levels[i].level_idc == val)
- {
- x264_level = &x264_levels[i];
- break;
- }
- }
- break;
- }
- }
- if (x264_level == NULL)
- {
- // error (invalid or unsupported level), abort
- hb_error("hb_apply_h264_level: invalid level %s", h264_level);
- return -1;
+ hb_encx264_profile = HB_ENCX264_PROFILE_MAIN;
}
}
- else
- {
- // error (level not a string), abort
- hb_error("hb_apply_h264_level: no level specified");
- return -1;
- }
/*
* we need at least width and height in order to apply a level correctly
if (param->i_keyint_max != 1)
{
int i_max_dec_frame_buffering =
- MAX(MIN(x264_level->dpb / (384 * i_mb_size), 16), 1);
+ MAX(MIN(x264_level->dpb / i_mb_size, 16), 1);
param->i_frame_reference =
MIN(i_max_dec_frame_buffering, param->i_frame_reference);
/*
/*
* set and/or sanitize the VBV (if not lossless)
*/
- if (h264_profile != HB_H264_PROFILE_HIGH444)
+ if (hb_encx264_profile != HB_ENCX264_PROFILE_HIGH444)
{
// High profile allows for higher VBV bufsize/maxrate
- int cbp_factor = h264_profile == HB_H264_PROFILE_HIGH ? 5 : 4;
+ int cbp_factor = hb_encx264_profile == HB_ENCX264_PROFILE_HIGH ? 5 : 4;
if (!param->rc.i_vbv_max_bitrate)
{
param->rc.i_vbv_max_bitrate = (x264_level->bitrate * cbp_factor) / 4;
}
char * hb_x264_param_unparse(const char *x264_preset, const char *x264_tune,
- const char *x264_encopts, const char *x264_profile,
+ const char *x264_encopts, const char *h264_profile,
const char *h264_level, int width, int height)
{
int i;
/*
* apply the x264 profile, if specified
*/
- if (x264_profile != NULL && *x264_profile)
+ if (h264_profile != NULL && *h264_profile)
{
- if (x264_param_apply_profile(¶m, x264_profile) < 0)
- {
- /*
- * Note: x264_param_apply_profile can bail even when the specified
- * profile is valid; examples:
- *
- * 1) when profile is baseline and interlaced is set
- * 2) when profile is not high444 and lossless is set
- *
- * So this can happen even when calling hb_x264_param_unparse from a
- * GUI - maybe we should sanitize settings before calling
- * x264_param_apply_profile()?
- */
- hb_dict_free(&x264_opts);
- return strdup("hb_x264_param_unparse: could not apply x264 profile");
- }
+ // be quiet so at to not pollute GUI logs
+ hb_apply_h264_profile(¶m, h264_profile, 0);
}
/*
param.i_width = width;
param.i_height = height;
// be quiet so at to not pollute GUI logs
- hb_apply_h264_level(¶m, h264_level, x264_profile, 0);
+ hb_apply_h264_level(¶m, h264_level, h264_profile, 0);
}
/*
return x264_tune_names;
}
-const char * const * hb_x264_profiles()
+const char * const * hb_h264_profiles()
{
- return x264_profile_names;
+ return hb_h264_profile_names;
}
const char * const * hb_h264_levels()
#include "x264.h"
-static const char * const hb_h264_level_names[] = { "1.0", "1b", "1.1", "1.2", "1.3", "2.0", "2.1", "2.2", "3.0", "3.1", "3.2", "4.0", "4.1", "4.2", "5.0", "5.1", "5.2", NULL };
-static const int const hb_h264_level_values[] = { 10, 9, 11, 12, 13, 20, 21, 22, 30, 31, 32, 40, 41, 42, 50, 51, 52, 0 };
+static const char * const hb_h264_profile_names[] = { "auto", "high", "main", "baseline", NULL, };
+static const char * const hb_h264_level_names[] = { "auto", "1.0", "1b", "1.1", "1.2", "1.3", "2.0", "2.1", "2.2", "3.0", "3.1", "3.2", "4.0", "4.1", "4.2", "5.0", "5.1", "5.2", NULL, };
+static const int const hb_h264_level_values[] = { -1, 10, 9, 11, 12, 13, 20, 21, 22, 30, 31, 32, 40, 41, 42, 50, 51, 52, 0, };
/* x264 preferred option names (left) and synonyms (right).
* The "preferred" names match names used in x264's param2string function more
*/
int hb_apply_h264_level(x264_param_t *param, const char *h264_level,
const char *x264_profile, int verbose);
+
+/*
+ * Applies the restrictions of the requested H.264 profile to an x264_param_t.
+ *
+ * x264_param_apply_profile wrapper designed to always succeed when a valid
+ * H.264 profile is specified (unlike x264's function).
+ */
+int hb_apply_h264_profile(x264_param_t *param, const char *h264_profile,
+ int verbose);
job_copy->x264_preset = strdup( job->x264_preset );
if ( job->x264_tune )
job_copy->x264_tune = strdup( job->x264_tune );
- if ( job->x264_profile )
- job_copy->x264_profile = strdup( job->x264_profile );
+ if ( job->h264_profile )
+ job_copy->h264_profile = strdup( job->h264_profile );
if ( job->h264_level )
job_copy->h264_level = strdup( job->h264_level );
hb_sync_audio_t *sync = &pv->type.audio;
hb_buffer_t *buf;
hb_fifo_t *fifo;
- int frame_dur, frame_count;
+ int frame_dur;
// to keep pass-thru and regular audio in sync we generate silence in
// frame-sized units. If the silence duration isn't an integer multiple
frame_dur = ( 90000 * w->audio->config.out.samples_per_frame ) /
w->audio->config.in.samplerate;
}
- frame_count = ( duration + (frame_dur >> 1) ) / frame_dur;
- while ( --frame_count >= 0 )
+ while (duration >= frame_dur >> 2)
{
if( w->audio->config.out.codec & HB_ACODEC_PASS_FLAG )
{
buf->s.stop = buf->s.start + frame_dur;
memcpy( buf->data, sync->silence_buf, buf->size );
fifo = w->audio->priv.fifo_out;
+ duration -= frame_dur;
}
else
{
- buf = hb_buffer_init( sizeof( float ) * w->audio->config.out.samples_per_frame *
- hb_mixdown_get_discrete_channel_count( w->audio->config.out.mixdown ) );
+ int channel_count = hb_mixdown_get_discrete_channel_count( w->audio->config.out.mixdown );
+ int size = sizeof( float ) *
+ w->audio->config.out.samples_per_frame *
+ channel_count;
+ if (frame_dur > duration)
+ {
+ int samples = duration * w->audio->config.in.samplerate / 90000;
+ if (samples == 0)
+ {
+ break;
+ }
+ size = sizeof(float) * samples * channel_count;
+ frame_dur = (90000 * samples) / w->audio->config.in.samplerate;
+ }
+ buf = hb_buffer_init(size);
buf->s.start = sync->next_start;
+ buf->s.duration = frame_dur;
buf->s.stop = buf->s.start + frame_dur;
memset( buf->data, 0, buf->size );
fifo = w->audio->priv.fifo_sync;
+ duration -= frame_dur;
}
buf = OutputAudioFrame( w->audio, buf, sync );
hb_fifo_push( fifo, buf );
{
hb_log( " + options: %s", job->advanced_opts );
}
- if( job->x264_profile && *job->x264_profile &&
+ if( job->h264_profile && *job->h264_profile &&
job->vcodec == HB_VCODEC_X264 )
{
- hb_log( " + x264 profile: %s", job->x264_profile );
+ hb_log( " + h264 profile: %s", job->h264_profile );
}
if( job->h264_level && *job->h264_level &&
job->vcodec == HB_VCODEC_X264 )
IBOutlet NSTextField * fQueueStatus;
/* Output panel */
- HBOutputPanelController *outputPanel;
+ HBOutputPanelController * outputPanel;
/* Source box */
IBOutlet NSProgressIndicator * fScanIndicator;
+ IBOutlet NSBox * fScanHorizontalLine;
+
NSString * sourceDisplayName;
IBOutlet NSTextField * fSrcDVD2Field;
IBOutlet NSTextField * fSrcTitleField;
[fScanIndicator setIndeterminate: NO];
[fScanIndicator setDoubleValue: 0.0];
[fScanIndicator setHidden: YES];
+ [fScanHorizontalLine setHidden: NO];
+
[self showNewScan:nil];
}
NSLocalizedString( @"Scanning title %d of %d…", @"" ),
p.title_cur, p.title_count]];
[fScanIndicator setHidden: NO];
+ [fScanHorizontalLine setHidden: YES];
[fScanIndicator setDoubleValue: 100.0 * ((double)( p.title_cur - 1 ) / p.title_count)];
break;
}
[fScanIndicator setIndeterminate: NO];
[fScanIndicator setDoubleValue: 0.0];
[fScanIndicator setHidden: YES];
+ [fScanHorizontalLine setHidden: NO];
[self writeToActivityLog:"ScanDone state received from fHandle"];
[self showNewScan:nil];
[[fWindow toolbar] validateVisibleItems];
pass_desc = @"";
}
- string = [NSMutableString stringWithFormat: NSLocalizedString( @"Encoding: %@ \nPass %d %@ of %d, %.2f %%", @"" ), currentQueueEncodeNameString, p.job_cur, pass_desc, p.job_count, 100.0 * p.progress];
+
+ if ([pass_desc length])
+ {
+ string = [NSMutableString stringWithFormat: NSLocalizedString( @"Encoding: %@ \nPass %d %@ of %d, %.2f %%", @"" ), currentQueueEncodeNameString, p.job_cur, pass_desc, p.job_count, 100.0 * p.progress];
+ }
+ else
+ {
+ string = [NSMutableString stringWithFormat: NSLocalizedString( @"Encoding: %@ \nPass %d of %d, %.2f %%", @"" ), currentQueueEncodeNameString, p.job_cur, p.job_count, 100.0 * p.progress];
+ }
if( p.seconds > -1 )
{
/* We setup the scan status in the main window to indicate a source title scan */
[fSrcDVD2Field setStringValue: @"Opening a new source title…"];
[fScanIndicator setHidden: NO];
+ [fScanHorizontalLine setHidden: YES];
[fScanIndicator setIndeterminate: YES];
[fScanIndicator startAnimation: nil];
{
/* use a bool to determine whether or not we can decrypt using vlc */
BOOL cancelScanDecrypt = 0;
- BOOL vlcFound = 0;
NSString *path = scanPath;
HBDVDDetector *detector = [HBDVDDetector detectorForPath:path];
path = [detector devicePath];
[self writeToActivityLog: "trying to open a physical dvd at: %s", [scanPath UTF8String]];
- /* lets check for vlc here to make sure we have a dylib available to use for decrypting */
+
+ NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
+ NSInteger suppressWarning = [prefs integerForKey:@"suppresslibdvdcss"];
+
+ /* Notify the user that we don't support removal of copy proteciton. */
void *dvdcss = dlopen("libdvdcss.2.dylib", RTLD_LAZY);
- if (dvdcss == NULL)
+ if (dvdcss == NULL && suppressWarning != 1)
{
+ /* Only show the user this warning once. They may be using a solution we don't know about. Notifying them each time is annoying. */
+ [prefs setInteger:1 forKey:@"suppresslibdvdcss"];
+
/*compatible vlc not found, so we set the bool to cancel scanning to 1 */
cancelScanDecrypt = 1;
[self writeToActivityLog: "libdvdcss.2.dylib not found for decrypting physical dvd"];
int status;
- status = NSRunAlertPanel(@"HandBrake could not find a compatible version of libdvdcss (32-bit libdvdcss is not compatible with 64-bit HandBrake and vice-versa).",
- @"Please download and install libdvdcss.pkg if you wish to read encrypted DVDs.", @"Get libdvdcss.pkg", @"Cancel Scan", @"Attempt Scan Anyway");
+ status = NSRunAlertPanel(@"Please note that HandBrake does not support the removal of copy-protection from DVD Discs. You can if you wish install libdvdcss or any other 3rd party software for this function.",
+ @"Videolan.org provides libdvdcss if you are not currently using another solution.", @"Get libdvdcss.pkg", @"Cancel Scan", @"Attempt Scan Anyway");
[NSApp requestUserAttention:NSCriticalRequest];
if (status == NSAlertDefaultReturn)
else if (status == NSAlertAlternateReturn)
{
/* User chose to cancel the scan */
- [self writeToActivityLog: "cannot open physical dvd, scan cancelled"];
+ [self writeToActivityLog: "Cannot open physical dvd, scan cancelled"];
}
else
{
/* User chose to override our warning and scan the physical dvd anyway, at their own peril. on an encrypted dvd this produces massive log files and fails */
cancelScanDecrypt = 0;
- [self writeToActivityLog: "user overrode dvdcss warning - trying to open physical dvd without decryption"];
+ [self writeToActivityLog: "User overrode copy-proteciton warning - trying to open physical dvd without decryption"];
}
}
{
/* VLC was found in /Applications so all is well, we can carry on using vlc's libdvdcss.dylib for decrypting if needed */
[self writeToActivityLog: "libdvdcss.2.dylib found for decrypting physical dvd"];
- vlcFound = 1;
dlclose(dvdcss);
}
}
*/
NSString *path = scanPath;
HBDVDDetector *detector = [HBDVDDetector detectorForPath:path];
-
- if( [detector isVideoDVD] )
- {
- // The chosen path was actually on a DVD, so use the raw block
- // device path instead.
- path = [detector devicePath];
- [self writeToActivityLog: "trying to open a physical dvd at: %s", [scanPath UTF8String]];
-
- /* lets check for vlc here to make sure we have a dylib available to use for decrypting */
- void *dvdcss = dlopen("libdvdcss.2.dylib", RTLD_LAZY);
- if (dvdcss == NULL)
- {
- /*vlc not found in /Applications so we set the bool to cancel scanning to 1 */
- cancelScanDecrypt = 1;
- [self writeToActivityLog: "VLC app not found for decrypting physical dvd"];
- int status;
- status = NSRunAlertPanel(@"HandBrake could not find VLC.",@"Please download and install VLC media player in your /Applications folder if you wish to read encrypted DVDs.", @"Get VLC", @"Cancel Scan", @"Attempt Scan Anyway");
- [NSApp requestUserAttention:NSCriticalRequest];
-
- if (status == NSAlertDefaultReturn)
- {
- /* User chose to go download vlc (as they rightfully should) so we send them to the vlc site */
- [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://www.videolan.org/"]];
- }
- else if (status == NSAlertAlternateReturn)
- {
- /* User chose to cancel the scan */
- [self writeToActivityLog: "cannot open physical dvd , scan cancelled"];
- }
- else
- {
- /* User chose to override our warning and scan the physical dvd anyway, at their own peril. on an encrypted dvd this produces massive log files and fails */
- cancelScanDecrypt = 0;
- [self writeToActivityLog: "user overrode vlc warning -trying to open physical dvd without decryption"];
- }
-
- }
- else
- {
- /* VLC was found in /Applications so all is well, we can carry on using vlc's libdvdcss.dylib for decrypting if needed */
- dlclose(dvdcss);
- [self writeToActivityLog: "VLC app found for decrypting physical dvd"];
- }
- }
if (cancelScanDecrypt == 0)
{
*/
if (job->indepth_scan == 1)
{
- char *x264_preset_tmp = job->x264_preset != NULL ? strdup(job->x264_preset) : NULL;
- char *x264_tune_tmp = job->x264_tune != NULL ? strdup(job->x264_tune) : NULL;
- char *advanced_opts_tmp = job->advanced_opts != NULL ? job->advanced_opts : NULL;
- char *h264_profile_tmp = job->x264_profile != NULL ? strdup(job->x264_profile) : NULL;
- char *h264_level_tmp = job->h264_level != NULL ? strdup(job->h264_level) : NULL;
+ char *x264_preset_tmp = job->x264_preset != NULL ? strdup(job->x264_preset) : NULL;
+ char *x264_tune_tmp = job->x264_tune != NULL ? strdup(job->x264_tune) : NULL;
+ char *advanced_opts_tmp = job->advanced_opts != NULL ? strdup(job->advanced_opts) : NULL;
+ char *h264_profile_tmp = job->h264_profile != NULL ? strdup(job->h264_profile) : NULL;
+ char *h264_level_tmp = job->h264_level != NULL ? strdup(job->h264_level) : NULL;
/*
* When subtitle scan is enabled do a fast pre-scan job
* which will determine which subtitles to enable, if any.
hb_job_set_x264_preset (job, NULL);
hb_job_set_x264_tune (job, NULL);
hb_job_set_advanced_opts(job, NULL);
- hb_job_set_x264_profile (job, NULL);
- hb_job_set_x264_level (job, NULL);
+ hb_job_set_h264_profile (job, NULL);
+ hb_job_set_h264_level (job, NULL);
job->pass = -1;
hb_add(fQueueEncodeLibhb, job);
/*
hb_job_set_x264_preset (job, x264_preset_tmp);
hb_job_set_x264_tune (job, x264_tune_tmp);
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);
+ hb_job_set_h264_profile (job, h264_profile_tmp);
+ hb_job_set_h264_level (job, h264_level_tmp);
free(x264_preset_tmp);
free(x264_tune_tmp);
free(advanced_opts_tmp);
job->modulus = [[queueToApply objectForKey:@"PictureModulus"] intValue];
- /* we check to make sure the presets width/height does not exceed the sources width/height */
- if (fTitle->width < [[queueToApply objectForKey:@"PictureWidth"] intValue] || fTitle->height < [[queueToApply objectForKey:@"PictureHeight"] intValue])
- {
- /* if so, then we use the sources height and width to avoid scaling up */
- //job->width = fTitle->width;
- //job->height = fTitle->height;
+ /*
+ * if the preset specifies neither max. width nor height
+ * (both are 0), use the max. picture size
+ *
+ * if the specified non-zero dimensions exceed those of the
+ * source, also use the max. picture size (no upscaling)
+ */
+ if (([[queueToApply objectForKey:@"PictureWidth"] intValue] <= 0 &&
+ [[queueToApply objectForKey:@"PictureHeight"] intValue] <= 0) ||
+ ([[queueToApply objectForKey:@"PictureWidth"] intValue] > fTitle->width &&
+ [[queueToApply objectForKey:@"PictureHeight"] intValue] > fTitle->height) ||
+ ([[queueToApply objectForKey:@"PictureHeight"] intValue] <= 0 &&
+ [[queueToApply objectForKey:@"PictureWidth"] intValue] > fTitle->width) ||
+ ([[queueToApply objectForKey:@"PictureWidth"] intValue] <= 0 &&
+ [[queueToApply objectForKey:@"PictureHeight"] intValue] > fTitle->height))
+ {
+ /* use the source's width/height to avoid upscaling */
[self revertPictureSizeToMax:nil];
}
- else // source width/height is >= the preset height/width
+ else // source width/height is >= preset width/height
{
- /* we can go ahead and use the presets values for height and width */
- job->width = [[queueToApply objectForKey:@"PictureWidth"] intValue];
- job->height = [[queueToApply objectForKey:@"PictureHeight"] intValue];
+ /* use the preset values for width/height */
+ job->width = [[queueToApply objectForKey:@"PictureWidth"] intValue];
+ job->height = [[queueToApply objectForKey:@"PictureHeight"] intValue];
}
job->keep_ratio = [[queueToApply objectForKey:@"PictureKeepRatio"] intValue];
if (job->keep_ratio == 1)
hb_job_set_x264_preset (job, x264_preset);
hb_job_set_x264_tune (job, x264_tune);
hb_job_set_advanced_opts(job, advanced_opts);
- hb_job_set_x264_profile (job, h264_profile);
- hb_job_set_x264_level (job, h264_level);
+ hb_job_set_h264_profile (job, h264_profile);
+ hb_job_set_h264_level (job, h264_level);
}
else if (job->vcodec & HB_VCODEC_FFMPEG_MASK)
{
hb_job_set_x264_preset (job, x264_preset);
hb_job_set_x264_tune (job, x264_tune);
hb_job_set_advanced_opts(job, advanced_opts);
- hb_job_set_x264_profile (job, h264_profile);
- hb_job_set_x264_level (job, h264_level);
+ hb_job_set_h264_profile (job, h264_profile);
+ hb_job_set_h264_level (job, h264_level);
}
else if (job->vcodec & HB_VCODEC_FFMPEG_MASK)
{
NSUInteger i;
/*
* now we populate the x264 system widgets via hb_x264_presets(),
- * hb_x264_tunes(), hb_x264_profiles(), hb_h264_levels()
+ * hb_x264_tunes(), hb_h264_profiles(), hb_h264_levels()
*/
-
// store x264 preset names
const char * const * x264_presets = hb_x264_presets();
NSMutableArray *tmp_array = [[NSMutableArray alloc] init];
[fX264TunePopUp addItemWithTitle: @"none"];
const char * const * x264_tunes = hb_x264_tunes();
for (int i = 0; x264_tunes[i] != NULL; i++)
- {
+ {
// we filter out "fastdecode" as we have a dedicated checkbox for it
- if (strcasecmp(x264_tunes[i], "fastdecode"))
+ if (strcasecmp(x264_tunes[i], "fastdecode") != 0)
{
[fX264TunePopUp addItemWithTitle: [NSString stringWithUTF8String:x264_tunes[i]]];
}
[fX264FastDecodeCheck setState: NSOffState];
// setup the h264 profile popup
[fX264ProfilePopUp removeAllItems];
- [fX264ProfilePopUp addItemWithTitle: @"auto"];
- const char * const * x264_profiles = hb_x264_profiles();
- for (int i = 0; x264_profiles[i] != NULL; i++)
- {
- [fX264ProfilePopUp addItemWithTitle: [NSString stringWithUTF8String:x264_profiles[i]]];
+ const char * const * h264_profiles = hb_h264_profiles();
+ for (int i = 0; h264_profiles[i] != NULL; i++)
+ {
+ [fX264ProfilePopUp addItemWithTitle: [NSString stringWithUTF8String:h264_profiles[i]]];
}
// setup the h264 level popup
[fX264LevelPopUp removeAllItems];
- [fX264LevelPopUp addItemWithTitle: @"auto"];
const char * const * h264_levels = hb_h264_levels();
for (int i = 0; h264_levels[i] != NULL; i++)
- {
+ {
[fX264LevelPopUp addItemWithTitle: [NSString stringWithUTF8String:h264_levels[i]]];
}
// clear the additional x264 options
* char * hb_x264_param_unparse(const char *x264_preset,
* const char *x264_tune,
* const char *x264_encopts,
- * const char *x264_profile,
+ * const char *h264_profile,
* const char *h264_level,
* int width, int height);
*/
h264_level,
width, height);
// update the text field
- [fDisplayX264PresetsUnparseTextField setStringValue:
- [NSString stringWithFormat:@"x264 Unparse: %s",
- fX264PresetsUnparsedUTF8String]];
+ if (fX264PresetsUnparsedUTF8String != NULL)
+ {
+ [fDisplayX264PresetsUnparseTextField setStringValue:
+ [NSString stringWithFormat:@"x264 Unparse: %s",
+ fX264PresetsUnparsedUTF8String]];
+ }
+ else
+ {
+ [fDisplayX264PresetsUnparseTextField setStringValue:@"x264 Unparse:"];
+ }
}
#pragma mark -
job->modulus = 16;
}
- /* Check to see if the objectForKey:@"UsesPictureSettings is 2 which is "Use Max for the source */
- if ([[chosenPreset objectForKey:@"UsesPictureSettings"] intValue] == 2 || [[chosenPreset objectForKey:@"UsesMaxPictureSettings"] intValue] == 1)
+ /* Check to see if the objectForKey:@"UsesPictureSettings" is 2,
+ * which means "Use max. picture size for the source" */
+ if ([[chosenPreset objectForKey:@"UsesPictureSettings"] intValue] == 2 ||
+ [[chosenPreset objectForKey:@"UsesMaxPictureSettings"] intValue] == 1)
{
/* Use Max Picture settings for whatever the dvd is.*/
[self revertPictureSizeToMax:nil];
}
job->anamorphic.mode = [[chosenPreset objectForKey:@"PicturePAR"] intValue];
}
- else // /* If not 0 or 2 we assume objectForKey:@"UsesPictureSettings is 1 which is "Use picture sizing from when the preset was set" */
+ /* If not 0 or 2 we assume objectForKey:@"UsesPictureSettings" is 1,
+ * which means "Use the picture size specified in the preset" */
+ else
{
- /* we check to make sure the presets width/height does not exceed the sources width/height */
- if (fTitle->width < [[chosenPreset objectForKey:@"PictureWidth"] intValue] || fTitle->height < [[chosenPreset objectForKey:@"PictureHeight"] intValue])
+ /*
+ * if the preset specifies neither max. width nor height
+ * (both are 0), use the max. picture size
+ *
+ * if the specified non-zero dimensions exceed those of the
+ * source, also use the max. picture size (no upscaling)
+ */
+ if (([[chosenPreset objectForKey:@"PictureWidth"] intValue] <= 0 &&
+ [[chosenPreset objectForKey:@"PictureHeight"] intValue] <= 0) ||
+ ([[chosenPreset objectForKey:@"PictureWidth"] intValue] > fTitle->width &&
+ [[chosenPreset objectForKey:@"PictureHeight"] intValue] > fTitle->height) ||
+ ([[chosenPreset objectForKey:@"PictureHeight"] intValue] <= 0 &&
+ [[chosenPreset objectForKey:@"PictureWidth"] intValue] > fTitle->width) ||
+ ([[chosenPreset objectForKey:@"PictureWidth"] intValue] <= 0 &&
+ [[chosenPreset objectForKey:@"PictureHeight"] intValue] > fTitle->height))
{
- /* if so, then we use the sources height and width to avoid scaling up */
- //job->width = fTitle->width;
- //job->height = fTitle->height;
+ /* use the source's width/height to avoid upscaling */
[self revertPictureSizeToMax:nil];
}
- else // source width/height is >= the preset height/width
+ else // source width/height is >= preset width/height
{
- /* we can go ahead and use the presets values for height and width */
- job->width = [[chosenPreset objectForKey:@"PictureWidth"] intValue];
- job->height = [[chosenPreset objectForKey:@"PictureHeight"] intValue];
+ /* use the preset values for width/height */
+ job->width = [[chosenPreset objectForKey:@"PictureWidth"] intValue];
+ job->height = [[chosenPreset objectForKey:@"PictureHeight"] intValue];
}
job->keep_ratio = [[chosenPreset objectForKey:@"PictureKeepRatio"] intValue];
if (job->keep_ratio == 1)
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
<data>
<int key="IBDocument.SystemTarget">1050</int>
- <string key="IBDocument.SystemVersion">11G63</string>
- <string key="IBDocument.InterfaceBuilderVersion">1938</string>
- <string key="IBDocument.AppKitVersion">1138.51</string>
- <string key="IBDocument.HIToolboxVersion">569.00</string>
+ <string key="IBDocument.SystemVersion">12C60</string>
+ <string key="IBDocument.InterfaceBuilderVersion">2844</string>
+ <string key="IBDocument.AppKitVersion">1187.34</string>
+ <string key="IBDocument.HIToolboxVersion">625.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string key="NS.object.0">1938</string>
+ <string key="NS.object.0">2844</string>
</object>
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
- <string>NSTabView</string>
- <string>NSScroller</string>
- <string>NSMenu</string>
- <string>NSSliderCell</string>
+ <string>NSArrayController</string>
+ <string>NSBox</string>
<string>NSButton</string>
- <string>NSTableHeaderView</string>
- <string>NSMatrix</string>
+ <string>NSButtonCell</string>
<string>NSCustomObject</string>
- <string>NSArrayController</string>
- <string>NSImageView</string>
- <string>NSTableView</string>
<string>NSCustomView</string>
- <string>NSSlider</string>
+ <string>NSDrawer</string>
<string>NSImageCell</string>
- <string>NSTextField</string>
+ <string>NSImageView</string>
+ <string>NSMatrix</string>
+ <string>NSMenu</string>
+ <string>NSMenuItem</string>
<string>NSNumberFormatter</string>
- <string>NSWindowTemplate</string>
- <string>NSTextFieldCell</string>
- <string>NSButtonCell</string>
- <string>NSTableColumn</string>
- <string>NSBox</string>
- <string>NSView</string>
<string>NSOutlineView</string>
+ <string>NSPopUpButton</string>
<string>NSPopUpButtonCell</string>
+ <string>NSProgressIndicator</string>
<string>NSScrollView</string>
+ <string>NSScroller</string>
+ <string>NSSlider</string>
+ <string>NSSliderCell</string>
+ <string>NSTabView</string>
<string>NSTabViewItem</string>
- <string>NSProgressIndicator</string>
+ <string>NSTableColumn</string>
+ <string>NSTableHeaderView</string>
+ <string>NSTableView</string>
+ <string>NSTextField</string>
+ <string>NSTextFieldCell</string>
<string>NSUserDefaultsController</string>
- <string>NSPopUpButton</string>
- <string>NSMenuItem</string>
- <string>NSDrawer</string>
+ <string>NSView</string>
+ <string>NSWindowTemplate</string>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference key="NSNextKeyView" ref="1007421233"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="10523918">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">4325376</int>
<string type="base64-UTF8" key="NSContents">RE8gTk9UIFRSQU5TTEFURSBUSElTIE5JQiBGSUxFLAo</string>
<object class="NSFont" key="NSSupport" id="26">
</object>
</object>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSProgressIndicator" id="222334056">
<reference key="NSNextResponder" ref="168918359"/>
<int key="NSvFlags">1288</int>
- <object class="NSPSMatrix" key="NSDrawMatrix"/>
<string key="NSFrame">{{18, -26}, {930, 20}}</string>
<reference key="NSSuperview" ref="168918359"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="888819828"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="200565868">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">4194304</int>
<string key="NSContents">Video Quality:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="783405221">
<reference key="NSNextResponder" ref="1053078401"/>
<reference key="NSNextKeyView" ref="1000247853"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="351953267">
- <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags">-1804599231</int>
<int key="NSCellFlags2">4326400</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
<reference key="NSColor" ref="544409939"/>
</object>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSSlider" id="239657287">
<reference key="NSNextResponder" ref="1053078401"/>
<reference key="NSNextKeyView" ref="783405221"/>
<bool key="NSEnabled">YES</bool>
<object class="NSSliderCell" key="NSCell" id="160453387">
- <int key="NSCellFlags">67501824</int>
+ <int key="NSCellFlags">67371264</int>
<int key="NSCellFlags2">262144</int>
<object class="NSMutableString" key="NSContents">
<characters key="NS.bytes"/>
<bool key="NSAllowsTickMarkValuesOnly">YES</bool>
<bool key="NSVertical">NO</bool>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="987137669">
<reference key="NSNextResponder" ref="1053078401"/>
<reference key="NSNextKeyView" ref="690364175"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="537000521">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">4194304</int>
<string key="NSContents">Picture Size: </string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="690304958">
<reference key="NSNextResponder" ref="1053078401"/>
<reference key="NSNextKeyView" ref="239657287"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="923732752">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">-2143158272</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
<string>numberStyle</string>
<string>positiveInfinitySymbol</string>
</object>
- <object class="NSMutableArray" key="dict.values">
+ <object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<boolean value="YES"/>
<integer value="1040"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="323705695">
<reference key="NSNextResponder" ref="1053078401"/>
<reference key="NSNextKeyView" ref="690304958"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="936221726">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">4325376</int>
<string key="NSContents">RF:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="690364175">
<reference key="NSNextResponder" ref="1053078401"/>
<int key="NSvFlags">256</int>
- <string key="NSFrame">{{14, 15}, {892, 14}}</string>
+ <string key="NSFrame">{{14, 17}, {892, 14}}</string>
<reference key="NSSuperview" ref="1053078401"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="503933842"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="508148739">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">4194304</int>
<string key="NSContents">Picture Cropping:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="503933842">
<reference key="NSNextResponder" ref="1053078401"/>
<int key="NSvFlags">256</int>
- <string key="NSFrame">{{14, 2}, {892, 14}}</string>
+ <string key="NSFrame">{{14, 3}, {892, 14}}</string>
<reference key="NSSuperview" ref="1053078401"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="794651271"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="109092334">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">4194304</int>
<string key="NSContents">Video Filters:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSPopUpButton" id="222980245">
<reference key="NSNextResponder" ref="1053078401"/>
<reference key="NSNextKeyView" ref="521019277"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="343952154">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">132096</int>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="222980245"/>
- <int key="NSButtonFlags">109199615</int>
+ <int key="NSButtonFlags">109199360</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="26"/>
<string key="NSAlternateContents"/>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">1</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="1000247853">
<reference key="NSNextResponder" ref="1053078401"/>
<reference key="NSNextKeyView" ref="447003158"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="860863090">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">2-pass encoding</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="1000247853"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<object class="NSButtonImageSource" key="NSAlternateImage" id="624832340">
<string key="NSImageName">NSSwitch</string>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="447003158">
<reference key="NSNextResponder" ref="1053078401"/>
<reference key="NSNextKeyView" ref="954159030"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="1070893195">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Turbo first pass</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="447003158"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<object class="NSCustomResource" key="NSNormalImage" id="887198214">
<string key="NSClassName">NSImage</string>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSPopUpButton" id="12330413">
<reference key="NSNextResponder" ref="1053078401"/>
<reference key="NSNextKeyView" ref="463960465"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="1018849574">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">132096</int>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="12330413"/>
- <int key="NSButtonFlags">109199615</int>
+ <int key="NSButtonFlags">109199360</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="26"/>
<string key="NSAlternateContents"/>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">1</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="463960465">
<reference key="NSNextResponder" ref="1053078401"/>
<reference key="NSNextKeyView" ref="222980245"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="509250281">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71303168</int>
<string key="NSContents">Framerate (FPS):</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="1064150725">
<reference key="NSNextResponder" ref="1053078401"/>
<reference key="NSNextKeyView" ref="12330413"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="451922400">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">4194304</int>
<string key="NSContents">Video Codec:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSMatrix" id="1036976683">
<reference key="NSNextResponder" ref="1053078401"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="323705695"/>
<bool key="NSEnabled">YES</bool>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSNumRows">2</int>
<int key="NSNumCols">1</int>
<object class="NSMutableArray" key="NSCells">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSButtonCell" id="613962178">
- <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Constant Quality</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="1036976683"/>
<int key="NSTag">1</int>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">0</int>
<object class="NSButtonImageSource" key="NSAlternateImage" id="860784734">
<string key="NSImageName">NSRadioButton</string>
<int key="NSPeriodicInterval">25</int>
</object>
<object class="NSButtonCell" id="878990764">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Average Bitrate (kbps):</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="1036976683"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">0</int>
<object class="NSImage" key="NSNormalImage">
<int key="NSImageFlags">549453824</int>
<int key="NSMatrixFlags">1151868928</int>
<string key="NSCellClass">NSActionCell</string>
<object class="NSButtonCell" key="NSProtoCell" id="121093497">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Radio</string>
<object class="NSFont" key="NSSupport" id="273283760">
<double key="NSSize">13</double>
<int key="NSfFlags">1044</int>
</object>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">0</int>
<object class="NSImage" key="NSNormalImage">
<int key="NSImageFlags">549453824</int>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1036976683"/>
<bool key="NSEnabled">YES</bool>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSNumRows">2</int>
<int key="NSNumCols">1</int>
<object class="NSMutableArray" key="NSCells">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSButtonCell" id="329026312">
- <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Variable Framerate</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="888819828"/>
<int key="NSTag">1</int>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">0</int>
<reference key="NSAlternateImage" ref="860784734"/>
<string key="NSAlternateContents"/>
<int key="NSPeriodicInterval">25</int>
</object>
<object class="NSButtonCell" id="995154792">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Constant Framerate</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="888819828"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">0</int>
<object class="NSImage" key="NSNormalImage">
<int key="NSImageFlags">549453824</int>
<int key="NSMatrixFlags">1151868928</int>
<string key="NSCellClass">NSActionCell</string>
<object class="NSButtonCell" key="NSProtoCell" id="217044635">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Radio</string>
<reference key="NSSupport" ref="273283760"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">0</int>
<object class="NSImage" key="NSNormalImage">
<int key="NSImageFlags">549453824</int>
<object class="NSSlider" id="480823072">
<reference key="NSNextResponder" ref="443817184"/>
<int key="NSvFlags">268</int>
- <string key="NSFrame">{{212, 105}, {660, 16}}</string>
+ <string key="NSFrame">{{243, 105}, {629, 16}}</string>
<reference key="NSSuperview" ref="443817184"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1031662534"/>
<string key="NSReuseIdentifierKey">_NS:779</string>
<bool key="NSEnabled">YES</bool>
<object class="NSSliderCell" key="NSCell" id="690637620">
- <int key="NSCellFlags">-2079981824</int>
+ <int key="NSCellFlags">-2080112384</int>
<int key="NSCellFlags2">262144</int>
<string key="NSContents"/>
<string key="NSCellIdentifier">_NS:779</string>
<bool key="NSAllowsTickMarkValuesOnly">YES</bool>
<bool key="NSVertical">NO</bool>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="139432403">
<reference key="NSNextResponder" ref="443817184"/>
<reference key="NSNextKeyView" ref="527737261"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="367754591">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71303168</int>
<string key="NSContents">x264 Preset:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="1031662534">
<reference key="NSNextResponder" ref="443817184"/>
<reference key="NSNextKeyView" ref="610425389"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="444043003">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71303168</int>
<string key="NSContents">x264 Tune:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="102651997">
<reference key="NSNextResponder" ref="443817184"/>
<reference key="NSNextKeyView" ref="112458239"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="858212432">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71303168</int>
- <string key="NSContents">x264 Profile:</string>
+ <string key="NSContents">h264 Profile:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="102651997"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="8023338">
<reference key="NSNextResponder" ref="443817184"/>
<reference key="NSNextKeyView" ref="144142005"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="248169798">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71303168</int>
- <string key="NSContents">x264 Level:</string>
+ <string key="NSContents">h264 Level:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="8023338"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSPopUpButton" id="610425389">
<reference key="NSNextResponder" ref="443817184"/>
<string key="NSReuseIdentifierKey">_NS:868</string>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="1050851477">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">264192</int>
<reference key="NSSupport" ref="22"/>
<string key="NSCellIdentifier">_NS:868</string>
<reference key="NSControlView" ref="610425389"/>
- <int key="NSButtonFlags">109199615</int>
+ <int key="NSButtonFlags">109199360</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">1</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSPopUpButton" id="112458239">
<reference key="NSNextResponder" ref="443817184"/>
<string key="NSReuseIdentifierKey">_NS:868</string>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="1012707648">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">264192</int>
<reference key="NSSupport" ref="22"/>
<string key="NSCellIdentifier">_NS:868</string>
<reference key="NSControlView" ref="112458239"/>
- <int key="NSButtonFlags">109199615</int>
+ <int key="NSButtonFlags">109199360</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">1</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSPopUpButton" id="144142005">
<reference key="NSNextResponder" ref="443817184"/>
<string key="NSReuseIdentifierKey">_NS:868</string>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="379682863">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">264192</int>
<reference key="NSSupport" ref="22"/>
<string key="NSCellIdentifier">_NS:868</string>
<reference key="NSControlView" ref="144142005"/>
- <int key="NSButtonFlags">109199615</int>
+ <int key="NSButtonFlags">109199360</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">1</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="884471415">
<reference key="NSNextResponder" ref="443817184"/>
<string key="NSReuseIdentifierKey">_NS:771</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="140128742">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Fast Decode</string>
<reference key="NSSupport" ref="26"/>
<string key="NSCellIdentifier">_NS:771</string>
<reference key="NSControlView" ref="884471415"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="887198214"/>
<reference key="NSAlternateImage" ref="624832340"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="796460997">
<reference key="NSNextResponder" ref="443817184"/>
<reference key="NSNextKeyView" ref="8023338"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="934066385">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71303168</int>
<string key="NSContents">Additional Options:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="487526549">
<reference key="NSNextResponder" ref="443817184"/>
<string key="NSAntiCompressionPriority">{250, 750}</string>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="284269747">
- <int key="NSCellFlags">-1805517311</int>
+ <int key="NSCellFlags">-1805647871</int>
<int key="NSCellFlags2">272760832</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="138233214"/>
<reference key="NSTextColor" ref="378140636"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="527737261">
<reference key="NSNextResponder" ref="443817184"/>
<int key="NSvFlags">256</int>
- <string key="NSFrame">{{96, 107}, {95, 13}}</string>
+ <string key="NSFrame">{{96, 107}, {129, 13}}</string>
<reference key="NSSuperview" ref="443817184"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="480823072"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="513519725">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">138412032</int>
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">4194304</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="527737261"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="902460295">
<reference key="NSNextResponder" ref="443817184"/>
<string key="NSReuseIdentifierKey">_NS:771</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="191360965">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Use x264 Advanced Options Panel</string>
<reference key="NSSupport" ref="26"/>
<string key="NSCellIdentifier">_NS:771</string>
<reference key="NSControlView" ref="902460295"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="887198214"/>
<reference key="NSAlternateImage" ref="624832340"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="349581420">
<reference key="NSNextResponder" ref="443817184"/>
<int key="NSvFlags">256</int>
- <string key="NSFrame">{{22, 6}, {853, 29}}</string>
+ <string key="NSFrame">{{12, 6}, {863, 29}}</string>
<reference key="NSSuperview" ref="443817184"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="987137669"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="812860538">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">4194304</int>
<string key="NSContents">x264 Unparse:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</object>
<string key="NSFrame">{{1, 1}, {890, 155}}</string>
<string key="NSReuseIdentifierKey">_NS:18</string>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">x264 Presets</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSSuperview" ref="528259747"/>
<reference key="NSNextKeyView" ref="496546489"/>
<bool key="NSEnabled">YES</bool>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <bool key="NSControlAllowsExpansionToolTips">YES</bool>
<object class="NSTableHeaderView" key="NSHeaderView" id="146611085">
<reference key="NSNextResponder" ref="230332532"/>
<int key="NSvFlags">256</int>
<double key="NSMinWidth">40</double>
<double key="NSMaxWidth">1000</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents">Track</string>
<reference key="NSSupport" ref="26"/>
</object>
</object>
<object class="NSPopUpButtonCell" key="NSDataCell" id="871837653">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">133120</int>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="792464451"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">129</int>
<object class="NSFont" key="NSAlternateImage" id="995413175">
<string key="NSName">LucidaGrande</string>
<double key="NSMinWidth">10</double>
<double key="NSMaxWidth">3.4028229999999999e+38</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents">Codec</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSPopUpButtonCell" key="NSDataCell" id="4014313">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">133120</int>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="792464451"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">129</int>
<reference key="NSAlternateImage" ref="995413175"/>
<string key="NSAlternateContents"/>
<double key="NSMinWidth">10</double>
<double key="NSMaxWidth">3.4028229999999999e+38</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents">Mixdown</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSPopUpButtonCell" key="NSDataCell" id="1037917692">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">133120</int>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="792464451"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">129</int>
<reference key="NSAlternateImage" ref="995413175"/>
<string key="NSAlternateContents"/>
<double key="NSMinWidth">10</double>
<double key="NSMaxWidth">3.4028229999999999e+38</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents">Samplerate</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSPopUpButtonCell" key="NSDataCell" id="257530638">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">133120</int>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="792464451"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">129</int>
<reference key="NSAlternateImage" ref="995413175"/>
<string key="NSAlternateContents"/>
<double key="NSMinWidth">10</double>
<double key="NSMaxWidth">3.4028229999999999e+38</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents">Bitrate</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSPopUpButtonCell" key="NSDataCell" id="238248766">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">133120</int>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="792464451"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">129</int>
<reference key="NSAlternateImage" ref="995413175"/>
<string key="NSAlternateContents"/>
<double key="NSMinWidth">10</double>
<double key="NSMaxWidth">3.4028234663852886e+38</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">134219776</int>
<string key="NSContents">Gain</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSSliderCell" key="NSDataCell" id="723141526">
- <int key="NSCellFlags">-2079981824</int>
+ <int key="NSCellFlags">-2080112384</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents"/>
<reference key="NSControlView" ref="792464451"/>
<double key="NSMinWidth">10</double>
<double key="NSMaxWidth">3.4028234663852886e+38</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSTextFieldCell" key="NSDataCell" id="718953459">
- <int key="NSCellFlags">337772096</int>
+ <int key="NSCellFlags">337641536</int>
<int key="NSCellFlags2">133120</int>
<string key="NSContents">Text Cell</string>
<reference key="NSSupport" ref="26"/>
<double key="NSMinWidth">10</double>
<double key="NSMaxWidth">3.4028229999999999e+38</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">134219776</int>
<string key="NSContents">DRC</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSSliderCell" key="NSDataCell" id="852982078">
- <int key="NSCellFlags">-2079981824</int>
+ <int key="NSCellFlags">-2080112384</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents"/>
<reference key="NSControlView" ref="792464451"/>
<double key="NSMinWidth">10</double>
<double key="NSMaxWidth">3.4028229999999999e+38</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSTextFieldCell" key="NSDataCell" id="750418243">
- <int key="NSCellFlags">337772096</int>
+ <int key="NSCellFlags">337641536</int>
<int key="NSCellFlags2">272761856</int>
<string key="NSContents">Text</string>
<reference key="NSSupport" ref="26"/>
<string key="NSFrame">{{-100, -100}, {15, 206}}</string>
<reference key="NSSuperview" ref="933946879"/>
<reference key="NSNextKeyView" ref="821562152"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<reference key="NSTarget" ref="933946879"/>
<string key="NSAction">_doScroller:</string>
<double key="NSCurValue">37</double>
<string key="NSFrame">{{-100, -100}, {685, 15}}</string>
<reference key="NSSuperview" ref="933946879"/>
<reference key="NSNextKeyView" ref="727606062"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="933946879"/>
<string key="NSAction">_doScroller:</string>
<reference key="NSContentView" ref="528259747"/>
<reference key="NSHeaderClipView" ref="230332532"/>
<bytes key="NSScrollAmts">QSAAAEEgAABB2AAAQdgAAA</bytes>
+ <double key="NSMinMagnification">0.25</double>
+ <double key="NSMaxMagnification">4</double>
+ <double key="NSMagnification">1</double>
</object>
<object class="NSButton" id="883603583">
<reference key="NSNextResponder" ref="577274772"/>
<reference key="NSNextKeyView" ref="334448622"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="327570663">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134479872</int>
<string key="NSContents">Add All Tracks</string>
<reference key="NSSupport" ref="22"/>
<reference key="NSControlView" ref="883603583"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSBox" id="334448622">
<reference key="NSNextResponder" ref="577274772"/>
<string key="NSReuseIdentifierKey">_NS:771</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="707344957">
- <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">262144</int>
<string key="NSContents">MP3</string>
<reference key="NSSupport" ref="22"/>
<string key="NSCellIdentifier">_NS:771</string>
<reference key="NSControlView" ref="162512199"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="887198214"/>
<reference key="NSAlternateImage" ref="624832340"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="354328979">
<reference key="NSNextResponder" ref="754802956"/>
<string key="NSReuseIdentifierKey">_NS:771</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="243873688">
- <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">262144</int>
<string key="NSContents">AAC</string>
<reference key="NSSupport" ref="22"/>
<string key="NSCellIdentifier">_NS:771</string>
<reference key="NSControlView" ref="354328979"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="887198214"/>
<reference key="NSAlternateImage" ref="624832340"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="453548414">
<reference key="NSNextResponder" ref="754802956"/>
<string key="NSReuseIdentifierKey">_NS:771</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="368344404">
- <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">262144</int>
<string key="NSContents">AC3</string>
<reference key="NSSupport" ref="22"/>
<string key="NSCellIdentifier">_NS:771</string>
<reference key="NSControlView" ref="453548414"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="887198214"/>
<reference key="NSAlternateImage" ref="624832340"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="485809563">
<reference key="NSNextResponder" ref="754802956"/>
<string key="NSReuseIdentifierKey">_NS:771</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="118300837">
- <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">262144</int>
<string key="NSContents">DTS</string>
<reference key="NSSupport" ref="22"/>
<string key="NSCellIdentifier">_NS:771</string>
<reference key="NSControlView" ref="485809563"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="887198214"/>
<reference key="NSAlternateImage" ref="624832340"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="1024961404">
<reference key="NSNextResponder" ref="754802956"/>
<string key="NSReuseIdentifierKey">_NS:771</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="735750065">
- <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">262144</int>
<string key="NSContents">DTS-HD</string>
<reference key="NSSupport" ref="22"/>
<string key="NSCellIdentifier">_NS:771</string>
<reference key="NSControlView" ref="1024961404"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="887198214"/>
<reference key="NSAlternateImage" ref="624832340"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSPopUpButton" id="586044455">
<reference key="NSNextResponder" ref="754802956"/>
<string key="NSReuseIdentifierKey">_NS:868</string>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="141259846">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">264192</int>
<reference key="NSSupport" ref="22"/>
<string key="NSCellIdentifier">_NS:868</string>
<reference key="NSControlView" ref="586044455"/>
- <int key="NSButtonFlags">109199615</int>
+ <int key="NSButtonFlags">109199360</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">2</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="1010907474">
<reference key="NSNextResponder" ref="754802956"/>
<reference key="NSNextKeyView" ref="162512199"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="935575109">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71565312</int>
<string key="NSContents">Auto Passthru:</string>
<reference key="NSSupport" ref="22"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="431725280">
<reference key="NSNextResponder" ref="754802956"/>
<reference key="NSNextKeyView" ref="586044455"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="121164790">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71565312</int>
<string key="NSContents">Passthru Fallback:</string>
<reference key="NSSupport" ref="22"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</object>
<string key="NSFrame">{{1, 1}, {552, 29}}</string>
<string key="NSReuseIdentifierKey">_NS:18</string>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Auto Passthru</string>
<reference key="NSSupport" ref="26"/>
<string key="NSFrameSize">{884, 241}</string>
<reference key="NSSuperview" ref="705918581"/>
<bool key="NSEnabled">YES</bool>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <bool key="NSControlAllowsExpansionToolTips">YES</bool>
<object class="NSTableHeaderView" key="NSHeaderView" id="569585004">
<reference key="NSNextResponder" ref="139191276"/>
<int key="NSvFlags">256</int>
<double key="NSMinWidth">40</double>
<double key="NSMaxWidth">1000</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents">Track</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSPopUpButtonCell" key="NSDataCell" id="426946554">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">264192</int>
<reference key="NSSupport" ref="22"/>
<reference key="NSControlView" ref="587237088"/>
- <int key="NSButtonFlags">100679935</int>
+ <int key="NSButtonFlags">100679680</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<double key="NSMinWidth">10</double>
<double key="NSMaxWidth">3.4028229999999999e+38</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">134219776</int>
<string key="NSContents">Forced Only</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSButtonCell" key="NSDataCell" id="13236417">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Check</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="587237088"/>
- <int key="NSButtonFlags">1215582719</int>
+ <int key="NSButtonFlags">1215582464</int>
<int key="NSButtonFlags2">130</int>
<reference key="NSNormalImage" ref="887198214"/>
<reference key="NSAlternateImage" ref="624832340"/>
<double key="NSMinWidth">10</double>
<double key="NSMaxWidth">3.4028229999999999e+38</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">134219776</int>
<string key="NSContents">Burned In</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSButtonCell" key="NSDataCell" id="704907857">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Check</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="587237088"/>
- <int key="NSButtonFlags">1215582719</int>
+ <int key="NSButtonFlags">1215582464</int>
<int key="NSButtonFlags2">130</int>
<reference key="NSNormalImage" ref="887198214"/>
<reference key="NSAlternateImage" ref="624832340"/>
<double key="NSMinWidth">10</double>
<double key="NSMaxWidth">3.4028229999999999e+38</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">134219776</int>
<string key="NSContents">Default</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSButtonCell" key="NSDataCell" id="299034685">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Check</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="587237088"/>
- <int key="NSButtonFlags">1215582719</int>
+ <int key="NSButtonFlags">1215582464</int>
<int key="NSButtonFlags2">130</int>
<reference key="NSNormalImage" ref="887198214"/>
<reference key="NSAlternateImage" ref="624832340"/>
<double key="NSMinWidth">10</double>
<double key="NSMaxWidth">3.4028229999999999e+38</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents">Srt Language</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSPopUpButtonCell" key="NSDataCell" id="688461412">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">133120</int>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="587237088"/>
- <int key="NSButtonFlags">100679935</int>
+ <int key="NSButtonFlags">100679680</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<double key="NSMinWidth">10</double>
<double key="NSMaxWidth">3.4028229999999999e+38</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents">Srt Char Code</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSPopUpButtonCell" key="NSDataCell" id="483232645">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">133120</int>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="587237088"/>
- <int key="NSButtonFlags">100679935</int>
+ <int key="NSButtonFlags">100679680</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<double key="NSMinWidth">10</double>
<double key="NSMaxWidth">3.4028229999999999e+38</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents">Srt Offset</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSTextFieldCell" key="NSDataCell" id="43785715">
- <int key="NSCellFlags">337772096</int>
+ <int key="NSCellFlags">337641536</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents">Text</string>
<reference key="NSSupport" ref="273283760"/>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{-100, -100}, {15, 206}}</string>
<reference key="NSSuperview" ref="596256174"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<reference key="NSTarget" ref="596256174"/>
<string key="NSAction">_doScroller:</string>
<double key="NSCurValue">37</double>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{-100, -100}, {685, 15}}</string>
<reference key="NSSuperview" ref="596256174"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="596256174"/>
<string key="NSAction">_doScroller:</string>
<reference key="NSContentView" ref="705918581"/>
<reference key="NSHeaderClipView" ref="139191276"/>
<bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
+ <double key="NSMinMagnification">0.25</double>
+ <double key="NSMaxMagnification">4</double>
+ <double key="NSMagnification">1</double>
</object>
<object class="NSButton" id="377401502">
<reference key="NSNextResponder" ref="756255803"/>
<reference key="NSSuperview" ref="756255803"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="206924163">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134479872</int>
<string key="NSContents">Add External SRT ...</string>
<reference key="NSSupport" ref="22"/>
<reference key="NSControlView" ref="377401502"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</object>
<string key="NSFrame">{{10, 25}, {920, 305}}</string>
<reference key="NSNextKeyView" ref="815869140"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Box</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSSuperview" ref="272816362"/>
<reference key="NSNextKeyView" ref="1033243513"/>
<bool key="NSEnabled">YES</bool>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <bool key="NSControlAllowsExpansionToolTips">YES</bool>
<object class="NSTableHeaderView" key="NSHeaderView" id="928480858">
<reference key="NSNextResponder" ref="814110287"/>
<int key="NSvFlags">256</int>
<double key="NSMinWidth">40</double>
<double key="NSMaxWidth">1000</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents">Chapter</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSTextFieldCell" key="NSDataCell" id="686068440">
- <int key="NSCellFlags">337772096</int>
+ <int key="NSCellFlags">337641536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents">Text Cell</string>
<reference key="NSSupport" ref="995413175"/>
<double key="NSMinWidth">77.217290000000006</double>
<double key="NSMaxWidth">1000</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents">Chapter Title</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSTextFieldCell" key="NSDataCell" id="237660698">
- <int key="NSCellFlags">337772096</int>
+ <int key="NSCellFlags">337641536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents">Text Cell</string>
<reference key="NSSupport" ref="995413175"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{870, 17}, {15, 242}}</string>
<reference key="NSSuperview" ref="307620967"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<reference key="NSTarget" ref="307620967"/>
<string key="NSAction">_doScroller:</string>
<double key="NSPercent">0.9736842</double>
<string key="NSFrame">{{-100, -100}, {488, 15}}</string>
<reference key="NSSuperview" ref="307620967"/>
<reference key="NSNextKeyView" ref="814110287"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="307620967"/>
<string key="NSAction">_doScroller:</string>
<reference key="NSContentView" ref="272816362"/>
<reference key="NSHeaderClipView" ref="814110287"/>
<bytes key="NSScrollAmts">AAAAAAAAAABBmAAAQZgAAA</bytes>
+ <double key="NSMinMagnification">0.25</double>
+ <double key="NSMaxMagnification">4</double>
+ <double key="NSMagnification">1</double>
</object>
<object class="NSButton" id="262106913">
<reference key="NSNextResponder" ref="440990725"/>
<reference key="NSNextKeyView" ref="307620967"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="719511430">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Create chapter markers</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="262106913"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSAlternateImage" ref="624832340"/>
<string key="NSAlternateContents"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="959722284">
<reference key="NSNextResponder" ref="440990725"/>
<reference key="NSSuperview" ref="440990725"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="100898939">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134479872</int>
<string key="NSContents">Import Chapters ...</string>
<reference key="NSSupport" ref="22"/>
<reference key="NSControlView" ref="959722284"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="931485910">
<reference key="NSNextResponder" ref="440990725"/>
<reference key="NSSuperview" ref="440990725"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="843416672">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134479872</int>
<string key="NSContents">Export Chapters ...</string>
<reference key="NSSupport" ref="22"/>
<reference key="NSControlView" ref="931485910"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</object>
<string key="NSFrame">{{10, 25}, {920, 305}}</string>
<reference key="NSNextKeyView" ref="854767306"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="121574898">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">4325376</int>
<string key="NSContents">Source:</string>
<object class="NSFont" key="NSSupport" id="27">
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="806469067">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="766125203"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="177567437">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71303168</int>
<string key="NSContents">Title:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSPopUpButton" id="766125203">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="303369850"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="821198683">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">263168</int>
<reference key="NSSupport" ref="22"/>
<reference key="NSControlView" ref="766125203"/>
- <int key="NSButtonFlags">109199615</int>
+ <int key="NSButtonFlags">109199360</int>
<int key="NSButtonFlags2">1</int>
<object class="NSFont" key="NSAlternateImage" id="1010451086">
<string key="NSName">LucidaGrande</string>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">1</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSPopUpButton" id="482831442">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="971754180"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="266952854">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">263168</int>
<reference key="NSSupport" ref="22"/>
<reference key="NSControlView" ref="482831442"/>
- <int key="NSButtonFlags">109199615</int>
+ <int key="NSButtonFlags">109199360</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="1010451086"/>
<string key="NSAlternateContents"/>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">1</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="303369850">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="460320725"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="677126774">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71303168</int>
<string key="NSContents">Angle:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSPopUpButton" id="460320725">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="482831442"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="567459641">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">263168</int>
<reference key="NSSupport" ref="22"/>
<reference key="NSControlView" ref="460320725"/>
- <int key="NSButtonFlags">109199615</int>
+ <int key="NSButtonFlags">109199360</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="1010451086"/>
<string key="NSAlternateContents"/>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">1</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="1023408378">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="186223550"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="834340599">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71303168</int>
<string key="NSContents">File:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="713493964">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="955053416"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="1038625481">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71303168</int>
<string key="NSContents">Duration:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="955053416">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="138115732"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="362196160">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">4194304</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
</object>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="138115732">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="104002862"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="510160694">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">4325376</int>
<string key="NSContents">Destination</string>
<reference key="NSSupport" ref="27"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSPopUpButton" id="732193996">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="553453876"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="264217237">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">132096</int>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="732193996"/>
- <int key="NSButtonFlags">109199615</int>
+ <int key="NSButtonFlags">109199360</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="26"/>
<string key="NSAlternateContents"/>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">1</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="210289606">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="35106907"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="295879492">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134348800</int>
<string key="NSContents">Browse…</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="210289606"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="995413175"/>
<string key="NSAlternateContents"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSBox" id="10346684">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="1023408378"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Box</string>
<reference key="NSSupport" ref="273283760"/>
<reference key="NSNextKeyView" ref="519699512"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="689580100">
- <int key="NSCellFlags">69336641</int>
+ <int key="NSCellFlags">69206081</int>
<int key="NSCellFlags2">4327936</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
</object>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="186223550">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="210289606"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="988599137">
- <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags">-1804599231</int>
<int key="NSCellFlags2">4326400</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="138233214"/>
<reference key="NSTextColor" ref="378140636"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="104002862">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="978025076"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="371961838">
- <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags">-1804599231</int>
<int key="NSCellFlags2">71566336</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="22"/>
<reference key="NSBackgroundColor" ref="138233214"/>
<reference key="NSTextColor" ref="378140636"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="398989741">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="453345136"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="506346481">
- <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags">-1804599231</int>
<int key="NSCellFlags2">71566336</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="22"/>
<reference key="NSBackgroundColor" ref="138233214"/>
<reference key="NSTextColor" ref="378140636"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="19055068">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="164276139"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="778187711">
- <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags">-1804599231</int>
<int key="NSCellFlags2">4457472</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="22"/>
<reference key="NSBackgroundColor" ref="138233214"/>
<reference key="NSTextColor" ref="378140636"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="164276139">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="10346684"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="1039518079">
- <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags">-1804599231</int>
<int key="NSCellFlags2">4457472</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="22"/>
<reference key="NSBackgroundColor" ref="138233214"/>
<reference key="NSTextColor" ref="378140636"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="35106907">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="574185541"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="293028864">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">4325376</int>
<string key="NSContents">Output Settings:</string>
<reference key="NSSupport" ref="27"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSBox" id="151388399">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="87961628"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Box</string>
<reference key="NSSupport" ref="273283760"/>
<reference key="NSNextKeyView" ref="151388399"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="488791842">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">272629760</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="27"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="1007421233">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="222334056"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="224806210">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71434240</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="87961628">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="732193996"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="51600927">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71303168</int>
<string key="NSContents">Format:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSBox" id="454206717">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="806469067"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Box</string>
<reference key="NSSupport" ref="273283760"/>
</object>
<object class="NSProgressIndicator" id="519699512">
<reference key="NSNextResponder" ref="168918359"/>
- <int key="NSvFlags">-2147482356</int>
- <object class="NSPSMatrix" key="NSDrawMatrix"/>
+ <int key="NSvFlags">-2147483380</int>
<string key="NSFrame">{{385, 532}, {562, 12}}</string>
<reference key="NSSuperview" ref="168918359"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="921877174"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="832863281">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Web optimized</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="581806074"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="887198214"/>
<reference key="NSAlternateImage" ref="624832340"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="553453876">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="581806074"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="294332300">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Large file size</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="553453876"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="887198214"/>
<reference key="NSAlternateImage" ref="624832340"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="921877174">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="712502892"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="547085070">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">iPod 5G support</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="921877174"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="887198214"/>
<reference key="NSAlternateImage" ref="624832340"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="978025076">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="398989741"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="138681808">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">138412032</int>
<string key="NSContents">through</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSPopUpButton" id="971754180">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="713493964"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="286887304">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">263168</int>
<reference key="NSSupport" ref="22"/>
<reference key="NSControlView" ref="971754180"/>
- <int key="NSButtonFlags">109199615</int>
+ <int key="NSButtonFlags">109199360</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="1010451086"/>
<string key="NSAlternateContents"/>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">1</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSPopUpButton" id="453345136">
<reference key="NSNextResponder" ref="168918359"/>
<reference key="NSNextKeyView" ref="19055068"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="564669343">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">263168</int>
<reference key="NSSupport" ref="22"/>
<reference key="NSControlView" ref="453345136"/>
- <int key="NSButtonFlags">109199615</int>
+ <int key="NSButtonFlags">109199360</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="1010451086"/>
<string key="NSAlternateContents"/>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">1</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</object>
<string key="NSFrameSize">{959, 558}</string>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="586321835"/>
</object>
- <string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
+ <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
<string key="NSMinSize">{213, 129}</string>
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
<bool key="NSWindowIsRestorable">YES</bool>
<reference key="NSSuperview" ref="168254512"/>
<bool key="NSEnabled">YES</bool>
<object class="NSImageCell" key="NSCell" id="72412547">
- <int key="NSCellFlags">130560</int>
+ <int key="NSCellFlags">134217728</int>
<int key="NSCellFlags2">33554432</int>
<object class="NSCustomResource" key="NSContents">
<string key="NSClassName">NSImage</string>
<int key="NSStyle">0</int>
<bool key="NSAnimates">NO</bool>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<bool key="NSEditable">YES</bool>
</object>
<object class="NSButton" id="764659803">
<reference key="NSSuperview" ref="168254512"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="938246142">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">137887744</int>
<string key="NSContents">Ahuh !</string>
<reference key="NSSupport" ref="273283760"/>
<reference key="NSControlView" ref="764659803"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">1</int>
<object class="NSFont" key="NSAlternateImage">
<string key="NSName">Helvetica</string>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="640205151">
<reference key="NSNextResponder" ref="168254512"/>
<reference key="NSSuperview" ref="168254512"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="160092001">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">138412032</int>
<string key="NSContents">Rip done !</string>
<reference key="NSSupport" ref="273283760"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</object>
<string key="NSFrameSize">{300, 233}</string>
</object>
- <string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
+ <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
<string key="NSMinSize">{213, 129}</string>
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
<bool key="NSWindowIsRestorable">YES</bool>
<string key="NSFrameSize">{247, 506}</string>
<reference key="NSSuperview" ref="421228634"/>
<bool key="NSEnabled">YES</bool>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <bool key="NSControlAllowsExpansionToolTips">YES</bool>
<object class="_NSCornerView" key="NSCornerView">
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<double key="NSMinWidth">40</double>
<double key="NSMaxWidth">1000</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
- <int key="NSCellFlags">75628096</int>
+ <int key="NSCellFlags">75497536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents">Presets</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSTextColor" ref="188451177"/>
</object>
<object class="NSTextFieldCell" key="NSDataCell" id="384895213">
- <int key="NSCellFlags">337772096</int>
+ <int key="NSCellFlags">337641536</int>
<int key="NSCellFlags2">2048</int>
<string key="NSContents">Text Cell</string>
<reference key="NSSupport" ref="995413175"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{248, 1}, {11, 506}}</string>
<reference key="NSSuperview" ref="33643505"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSsFlags">256</int>
<reference key="NSTarget" ref="33643505"/>
<string key="NSAction">_doScroller:</string>
<int key="NSvFlags">-2147483392</int>
<string key="NSFrame">{{-100, -100}, {183, 15}}</string>
<reference key="NSSuperview" ref="33643505"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<int key="NSsFlags">1</int>
<reference key="NSTarget" ref="33643505"/>
<string key="NSAction">_doScroller:</string>
<reference key="NSHScroller" ref="573337548"/>
<reference key="NSContentView" ref="421228634"/>
<bytes key="NSScrollAmts">QSAAAEEgAABBgAAAQYAAAA</bytes>
+ <double key="NSMinMagnification">0.25</double>
+ <double key="NSMaxMagnification">4</double>
+ <double key="NSMagnification">1</double>
</object>
<object class="NSButton" id="241719587">
<reference key="NSNextResponder" ref="621751818"/>
<reference key="NSSuperview" ref="621751818"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="501219161">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents"/>
<object class="NSFont" key="NSSupport" id="575851035">
<int key="NSfFlags">2072</int>
</object>
<reference key="NSControlView" ref="241719587"/>
- <int key="NSButtonFlags">-2030804737</int>
+ <int key="NSButtonFlags">-2030804992</int>
<int key="NSButtonFlags2">34</int>
<object class="NSCustomResource" key="NSNormalImage">
<string key="NSClassName">NSImage</string>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="699919504">
<reference key="NSNextResponder" ref="621751818"/>
<reference key="NSSuperview" ref="621751818"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="489159603">
- <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="575851035"/>
<reference key="NSControlView" ref="699919504"/>
- <int key="NSButtonFlags">-2032901889</int>
+ <int key="NSButtonFlags">-2032902144</int>
<int key="NSButtonFlags2">34</int>
<object class="NSCustomResource" key="NSNormalImage">
<string key="NSClassName">NSImage</string>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSPopUpButton" id="886184281">
<reference key="NSNextResponder" ref="621751818"/>
<reference key="NSSuperview" ref="621751818"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="492120702">
- <int key="NSCellFlags">71433792</int>
+ <int key="NSCellFlags">71303232</int>
<int key="NSCellFlags2">2048</int>
<reference key="NSSupport" ref="273283760"/>
<reference key="NSControlView" ref="886184281"/>
- <int key="NSButtonFlags">-2031075073</int>
+ <int key="NSButtonFlags">-2031075328</int>
<int key="NSButtonFlags2">162</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">2</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</object>
<string key="NSFrameSize">{270, 550}</string>
<reference key="NSSuperview" ref="69290042"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="107603394">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">Add</string>
<reference key="NSSupport" ref="273283760"/>
<reference key="NSControlView" ref="636581183"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">1</int>
<object class="NSFont" key="NSAlternateImage" id="212993004">
<string key="NSName">LucidaGrande</string>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="586136427">
<reference key="NSNextResponder" ref="69290042"/>
<reference key="NSSuperview" ref="69290042"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="231870318">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">Cancel</string>
<reference key="NSSupport" ref="273283760"/>
<reference key="NSControlView" ref="586136427"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="212993004"/>
<string key="NSAlternateContents"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="978853241">
<reference key="NSNextResponder" ref="69290042"/>
<reference key="NSSuperview" ref="69290042"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="479246832">
- <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags">-1804599231</int>
<int key="NSCellFlags2">272761856</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="138233214"/>
<reference key="NSTextColor" ref="378140636"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSPopUpButton" id="167356719">
<reference key="NSNextResponder" ref="69290042"/>
<reference key="NSSuperview" ref="69290042"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="17688962">
- <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">133120</int>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="167356719"/>
- <int key="NSButtonFlags">109199615</int>
+ <int key="NSButtonFlags">109199360</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="995413175"/>
<string key="NSAlternateContents"/>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">1</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="343391844">
<reference key="NSNextResponder" ref="69290042"/>
<reference key="NSSuperview" ref="69290042"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="658438349">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">272760832</int>
<string type="base64-UTF8" key="NSContents">UHJlc2V0IE5hbWU6Cg</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="340554114">
<reference key="NSNextResponder" ref="69290042"/>
<reference key="NSSuperview" ref="69290042"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="70981869">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">272760832</int>
<string key="NSContents">Picture Settings:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="384547934">
<reference key="NSNextResponder" ref="69290042"/>
<reference key="NSSuperview" ref="69290042"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="207651610">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">272760832</int>
<string key="NSContents">Description:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="511645357">
<reference key="NSNextResponder" ref="69290042"/>
<reference key="NSSuperview" ref="69290042"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="855042909">
- <int key="NSCellFlags">-1805517311</int>
+ <int key="NSCellFlags">-1805647871</int>
<int key="NSCellFlags2">272760832</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="138233214"/>
<reference key="NSTextColor" ref="378140636"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="31472093">
<reference key="NSNextResponder" ref="69290042"/>
<reference key="NSSuperview" ref="69290042"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="31665321">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71434240</int>
<string key="NSContents">Use Picture Size:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="1024752086">
<reference key="NSNextResponder" ref="69290042"/>
<reference key="NSSuperview" ref="69290042"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="625635488">
- <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags">-2080374784</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="1024752086"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="887198214"/>
<reference key="NSAlternateImage" ref="624832340"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="786415813">
<reference key="NSNextResponder" ref="69290042"/>
<reference key="NSSuperview" ref="69290042"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="977106207">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">131072</int>
<string key="NSContents">Preset Folder ( if checked disregard below )</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="786415813"/>
- <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags">1211912448</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="887198214"/>
<reference key="NSAlternateImage" ref="624832340"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSBox" id="5085381">
<reference key="NSNextResponder" ref="69290042"/>
<reference key="NSSuperview" ref="69290042"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Box</string>
<reference key="NSSupport" ref="273283760"/>
<reference key="NSSuperview" ref="69290042"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Box</string>
<reference key="NSSupport" ref="273283760"/>
<reference key="NSSuperview" ref="69290042"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="155469085">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71434240</int>
<string key="NSContents">Use Picture Filters:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSBox" id="277759901">
<reference key="NSNextResponder" ref="69290042"/>
<reference key="NSSuperview" ref="956968044"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="862361869">
- <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags">-1804599231</int>
<int key="NSCellFlags2">71566336</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="22"/>
<reference key="NSBackgroundColor" ref="138233214"/>
<reference key="NSTextColor" ref="378140636"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="358179065">
<reference key="NSNextResponder" ref="956968044"/>
<reference key="NSSuperview" ref="956968044"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="14541127">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">138543104</int>
<string key="NSContents">X</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="525081109">
<reference key="NSNextResponder" ref="956968044"/>
<reference key="NSSuperview" ref="956968044"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="945554305">
- <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags">-1804599231</int>
<int key="NSCellFlags2">4457472</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="22"/>
<reference key="NSBackgroundColor" ref="138233214"/>
<reference key="NSTextColor" ref="378140636"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</object>
<string key="NSFrameSize">{155, 32}</string>
<reference key="NSSuperview" ref="69290042"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Box</string>
<reference key="NSSupport" ref="26"/>
</object>
<string key="NSFrameSize">{338, 318}</string>
</object>
- <string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
+ <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
<string key="NSMinSize">{338, 254}</string>
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
<bool key="NSWindowIsRestorable">YES</bool>
<reference key="NSSuperview" ref="867624722"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="874724779">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">272629760</int>
<string key="NSContents">Source Path Here</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="293908248">
<reference key="NSNextResponder" ref="867624722"/>
<reference key="NSSuperview" ref="867624722"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="290236859">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">272629760</int>
<string key="NSContents">for</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="535532677">
<reference key="NSNextResponder" ref="867624722"/>
<reference key="NSSuperview" ref="867624722"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="1026393301">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71303168</int>
<string key="NSContents">Scan title number</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="290568055">
<reference key="NSNextResponder" ref="867624722"/>
<reference key="NSSuperview" ref="867624722"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="412266408">
- <int key="NSCellFlags">-1804468671</int>
+ <int key="NSCellFlags">-1804599231</int>
<int key="NSCellFlags2">138544128</int>
<string key="NSContents">0</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="138233214"/>
<reference key="NSTextColor" ref="378140636"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="35126402">
<reference key="NSNextResponder" ref="867624722"/>
<reference key="NSSuperview" ref="867624722"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="935162329">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134348800</int>
<string key="NSContents">Cancel</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="35126402"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="995413175"/>
<string key="NSAlternateContents"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSButton" id="1029080172">
<reference key="NSNextResponder" ref="867624722"/>
<reference key="NSSuperview" ref="867624722"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="1020926636">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134348800</int>
<string key="NSContents">Open Title</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSControlView" ref="1029080172"/>
- <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">1</int>
<reference key="NSAlternateImage" ref="995413175"/>
<string key="NSAlternateContents"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="1010749064">
<reference key="NSNextResponder" ref="867624722"/>
<reference key="NSSuperview" ref="867624722"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="938406174">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">4194304</int>
<string key="NSContents">Note: (entering 0 or leaving blank will result in a full source scan)</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="610976437">
<reference key="NSNextResponder" ref="867624722"/>
<reference key="NSSuperview" ref="867624722"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="802225466">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">272629760</int>
<string key="NSContents">Source Path:</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSTextField" id="655257851">
<reference key="NSNextResponder" ref="867624722"/>
<reference key="NSSuperview" ref="867624722"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="19595360">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">272629760</int>
<string key="NSContents">Small System Font Text</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="242973447"/>
<reference key="NSTextColor" ref="701609070"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</object>
<string key="NSFrameSize">{392, 144}</string>
</object>
- <string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
+ <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
<string key="NSMinSize">{213, 129}</string>
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
<bool key="NSWindowIsRestorable">YES</bool>
</object>
<int key="connectionID">6003</int>
</object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">fScanHorizontalLine</string>
+ <reference key="source" ref="2258723"/>
+ <reference key="destination" ref="454206717"/>
+ </object>
+ <int key="connectionID">6004</int>
+ </object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">parentWindow</string>
<string>NSCreatesSortDescriptor</string>
<string>NSValidatesImmediately</string>
</object>
- <object class="NSMutableArray" key="dict.values">
+ <object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<boolean value="NO"/>
<boolean value="YES"/>
<string>NSCreatesSortDescriptor</string>
<string>NSValidatesImmediately</string>
</object>
- <object class="NSMutableArray" key="dict.values">
+ <object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<boolean value="NO"/>
<boolean value="YES"/>
<reference ref="112458239"/>
<reference ref="796460997"/>
<reference ref="487526549"/>
- <reference ref="884471415"/>
<reference ref="527737261"/>
<reference ref="902460295"/>
<reference ref="349581420"/>
+ <reference ref="884471415"/>
</object>
<reference key="parent" ref="1053078401"/>
</object>
<string>971.IBPluginDependency</string>
<string>973.IBPluginDependency</string>
</object>
- <object class="NSMutableArray" key="dict.values">
+ <object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="IBToolTipAttribute" key="NS.object.0">
<string key="name">ToolTip</string>
<reference key="object" ref="581806074"/>
- <string key="toolTip">Mixed</string>
+ <string key="toolTip">This rearranges the header of the MP4 file to optimize it for streaming across the web.</string>
</object>
</object>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="IBToolTipAttribute" key="NS.object.0">
<string key="name">ToolTip</string>
<reference key="object" ref="921877174"/>
- <string key="toolTip">Mixed</string>
+ <string key="toolTip">This option adds an atom to the MP4 file which allows older iPods (5th Generation classic style) to play the file.</string>
</object>
</object>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference key="dict.values" ref="0"/>
</object>
<nil key="sourceID"/>
- <int key="maxID">6003</int>
+ <int key="maxID">6004</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<string>customSettingUsed:</string>
<string>deleteFactoryPresets:</string>
<string>deletePreset:</string>
- <string>updateX264Widgets:</string>
<string>encodeStartStopPopUpChanged:</string>
<string>formatPopUpChanged:</string>
<string>getDefaultPresets:</string>
<string>selectDefaultPreset:</string>
<string>selectPreset:</string>
<string>setDefaultPreset:</string>
- <string>setupX264PresetsWidgets:</string>
<string>showAboutPanel:</string>
<string>showAddPresetPanel:</string>
<string>showDebugOutputPanel:</string>
<string>startEndSecValueChanged:</string>
<string>titlePopUpChanged:</string>
<string>twoPassCheckboxChanged:</string>
+ <string>updateX264Widgets:</string>
<string>videoEncoderPopUpChanged:</string>
<string>videoFrameRateChanged:</string>
<string>videoMatrixChanged:</string>
<string>x264PresetsChangedDisplayExpandedOptions:</string>
- <string>x264PresetsSetJobVariables:</string>
<string>x264PresetsSliderChanged:</string>
</object>
- <object class="NSMutableArray" key="dict.values">
+ <object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>id</string>
<string>id</string>
<string>id</string>
<string>id</string>
<string>id</string>
- <string>id</string>
- <string>id</string>
</object>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string>customSettingUsed:</string>
<string>deleteFactoryPresets:</string>
<string>deletePreset:</string>
- <string>updateX264Widgets:</string>
<string>encodeStartStopPopUpChanged:</string>
<string>formatPopUpChanged:</string>
<string>getDefaultPresets:</string>
<string>selectDefaultPreset:</string>
<string>selectPreset:</string>
<string>setDefaultPreset:</string>
- <string>setupX264PresetsWidgets:</string>
<string>showAboutPanel:</string>
<string>showAddPresetPanel:</string>
<string>showDebugOutputPanel:</string>
<string>startEndSecValueChanged:</string>
<string>titlePopUpChanged:</string>
<string>twoPassCheckboxChanged:</string>
+ <string>updateX264Widgets:</string>
<string>videoEncoderPopUpChanged:</string>
<string>videoFrameRateChanged:</string>
<string>videoMatrixChanged:</string>
<string>x264PresetsChangedDisplayExpandedOptions:</string>
- <string>x264PresetsSetJobVariables:</string>
<string>x264PresetsSliderChanged:</string>
</object>
- <object class="NSMutableArray" key="dict.values">
+ <object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBActionInfo">
<string key="name">Cancel:</string>
<string key="name">deletePreset:</string>
<string key="candidateClassName">id</string>
</object>
- <object class="IBActionInfo">
- <string key="name">updateX264Widgets:</string>
- <string key="candidateClassName">id</string>
- </object>
<object class="IBActionInfo">
<string key="name">encodeStartStopPopUpChanged:</string>
<string key="candidateClassName">id</string>
<string key="name">setDefaultPreset:</string>
<string key="candidateClassName">id</string>
</object>
- <object class="IBActionInfo">
- <string key="name">setupX264PresetsWidgets:</string>
- <string key="candidateClassName">id</string>
- </object>
<object class="IBActionInfo">
<string key="name">showAboutPanel:</string>
<string key="candidateClassName">id</string>
<string key="name">twoPassCheckboxChanged:</string>
<string key="candidateClassName">id</string>
</object>
+ <object class="IBActionInfo">
+ <string key="name">updateX264Widgets:</string>
+ <string key="candidateClassName">id</string>
+ </object>
<object class="IBActionInfo">
<string key="name">videoEncoderPopUpChanged:</string>
<string key="candidateClassName">id</string>
<string key="name">x264PresetsChangedDisplayExpandedOptions:</string>
<string key="candidateClassName">id</string>
</object>
- <object class="IBActionInfo">
- <string key="name">x264PresetsSetJobVariables:</string>
- <string key="candidateClassName">id</string>
- </object>
<object class="IBActionInfo">
<string key="name">x264PresetsSliderChanged:</string>
<string key="candidateClassName">id</string>
<string>fQueueStatus</string>
<string>fRipIndicator</string>
<string>fSaveChaptersButton</string>
+ <string>fScanHorizontalLine</string>
<string>fScanIndicator</string>
<string>fScanSrcTitleCancelButton</string>
<string>fScanSrcTitleNumField</string>
<string>fX264TunePopUpLabel</string>
<string>fx264UseAdvancedOptionsCheck</string>
</object>
- <object class="NSMutableArray" key="dict.values">
+ <object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>NSPanel</string>
<string>NSBox</string>
<string>NSButton</string>
<string>NSBox</string>
<string>HBAudioController</string>
- <string>NSButton</string>
+ <string>NSPopUpButton</string>
<string>NSButton</string>
<string>NSTableView</string>
<string>NSTableColumn</string>
<string>NSTextField</string>
<string>NSProgressIndicator</string>
<string>NSButton</string>
+ <string>NSBox</string>
<string>NSProgressIndicator</string>
<string>NSButton</string>
<string>NSTextField</string>
<string>fQueueStatus</string>
<string>fRipIndicator</string>
<string>fSaveChaptersButton</string>
+ <string>fScanHorizontalLine</string>
<string>fScanIndicator</string>
<string>fScanSrcTitleCancelButton</string>
<string>fScanSrcTitleNumField</string>
<string>fX264TunePopUpLabel</string>
<string>fx264UseAdvancedOptionsCheck</string>
</object>
- <object class="NSMutableArray" key="dict.values">
+ <object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBToOneOutletInfo">
<string key="name">fAddPresetPanel</string>
</object>
<object class="IBToOneOutletInfo">
<string key="name">fAudioFallbackPopUp</string>
- <string key="candidateClassName">NSButton</string>
+ <string key="candidateClassName">NSPopUpButton</string>
</object>
<object class="IBToOneOutletInfo">
<string key="name">fBrowseSrtFileButton</string>
<string key="name">fSaveChaptersButton</string>
<string key="candidateClassName">NSButton</string>
</object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fScanHorizontalLine</string>
+ <string key="candidateClassName">NSBox</string>
+ </object>
<object class="IBToOneOutletInfo">
<string key="name">fScanIndicator</string>
<string key="candidateClassName">NSProgressIndicator</string>
<string>NSRemoveTemplate</string>
<string>NSSwitch</string>
</object>
- <object class="NSMutableArray" key="dict.values">
+ <object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>{128, 128}</string>
<string>{15, 15}</string>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
<data>
<int key="IBDocument.SystemTarget">1050</int>
- <string key="IBDocument.SystemVersion">11C74</string>
- <string key="IBDocument.InterfaceBuilderVersion">1938</string>
- <string key="IBDocument.AppKitVersion">1138.23</string>
- <string key="IBDocument.HIToolboxVersion">567.00</string>
+ <string key="IBDocument.SystemVersion">12D61</string>
+ <string key="IBDocument.InterfaceBuilderVersion">3084</string>
+ <string key="IBDocument.AppKitVersion">1187.37</string>
+ <string key="IBDocument.HIToolboxVersion">626.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.QTKitIBPlugin</string>
</object>
- <object class="NSMutableArray" key="dict.values">
+ <object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
- <string>1938</string>
- <string>822</string>
+ <string>3084</string>
+ <string>2053</string>
</object>
</object>
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
- <string>NSPopUpButton</string>
+ <string>NSBox</string>
<string>NSButton</string>
+ <string>NSButtonCell</string>
+ <string>NSCustomObject</string>
<string>NSMenu</string>
- <string>NSTextFieldCell</string>
<string>NSMenuItem</string>
- <string>NSButtonCell</string>
- <string>NSBox</string>
+ <string>NSPopUpButton</string>
+ <string>NSPopUpButtonCell</string>
<string>NSProgressIndicator</string>
- <string>NSImageView</string>
- <string>NSImageCell</string>
- <string>QTMovieView</string>
<string>NSSlider</string>
<string>NSSliderCell</string>
- <string>NSCustomObject</string>
+ <string>NSTextField</string>
+ <string>NSTextFieldCell</string>
<string>NSView</string>
<string>NSWindowTemplate</string>
- <string>NSTextField</string>
- <string>NSPopUpButtonCell</string>
+ <string>QTMovieView</string>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<int key="NSvFlags">274</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSBox" id="289177107">
+ <object class="QTMovieView" id="48693112">
<reference key="NSNextResponder" ref="49161063"/>
- <int key="NSvFlags">18</int>
+ <int key="NSvFlags">274</int>
+ <object class="NSMutableSet" key="NSDragTypes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="set.sortedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>Apple URL pasteboard type</string>
+ <string>CorePasteboardFlavorType 0x6D6F6F76</string>
+ <string>NSFilenamesPboardType</string>
+ <string>QTMoviePasteboardType</string>
+ </object>
+ </object>
+ <string key="NSFrameSize">{480, 360}</string>
+ <reference key="NSSuperview" ref="49161063"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="768906858"/>
+ <object class="NSColor" key="kCoderFillColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MC44MDAwMDAwMSAwLjgwMDAwMDAxIDAuODAwMDAwMDEAA</bytes>
+ </object>
+ <boolean value="YES" key="kCoderControllerVisible"/>
+ <boolean value="YES" key="kCoderPreservesAspectRatio"/>
+ <nil key="kCoderMovie"/>
+ <boolean value="NO" key="kCoderEditable"/>
+ </object>
+ <object class="NSBox" id="92351498">
+ <reference key="NSNextResponder" ref="49161063"/>
+ <int key="NSvFlags">-2147483611</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSView" id="353606868">
- <reference key="NSNextResponder" ref="289177107"/>
+ <object class="NSView" id="385854969">
+ <reference key="NSNextResponder" ref="92351498"/>
<int key="NSvFlags">274</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSImageView" id="844127024">
- <reference key="NSNextResponder" ref="353606868"/>
- <int key="NSvFlags">274</int>
- <object class="NSMutableSet" key="NSDragTypes">
+ <object class="NSButton" id="798240356">
+ <reference key="NSNextResponder" ref="385854969"/>
+ <int key="NSvFlags">292</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <string key="NSFrame">{{17, 11}, {77, 16}}</string>
+ <reference key="NSSuperview" ref="385854969"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="66510867"/>
+ <object class="NSArray" key="NSViewContentFilters">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="set.sortedObjects">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>Apple PDF pasteboard type</string>
- <string>Apple PICT pasteboard type</string>
- <string>Apple PNG pasteboard type</string>
- <string>NSFilenamesPboardType</string>
- <string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
- <string>NeXT TIFF v4.0 pasteboard type</string>
+ <object class="CIColorMonochrome">
+ <object class="CIColor" key="CI_inputColor">
+ <float key="red">0.70196080207824707</float>
+ <float key="green">0.70196080207824707</float>
+ <float key="blue">0.70196080207824707</float>
+ <float key="alpha">1</float>
+ </object>
+ <integer value="1" key="CI_inputIntensity"/>
+ <bool key="CIEnabled">YES</bool>
</object>
</object>
- <string key="NSFrame">{{-3, -3}, {488, 368}}</string>
- <reference key="NSSuperview" ref="353606868"/>
- <reference key="NSNextKeyView" ref="48693112"/>
<bool key="NSEnabled">YES</bool>
- <object class="NSImageCell" key="NSCell" id="955430771">
- <int key="NSCellFlags">130560</int>
- <int key="NSCellFlags2">33554432</int>
- <int key="NSAlign">0</int>
- <int key="NSScale">1</int>
- <int key="NSStyle">3</int>
- <bool key="NSAnimates">NO</bool>
+ <object class="NSButtonCell" key="NSCell" id="975305481">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">134479872</int>
+ <string key="NSContents">Live Preview</string>
+ <object class="NSFont" key="NSSupport" id="22">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">9</double>
+ <int key="NSfFlags">3614</int>
+ </object>
+ <reference key="NSControlView" ref="798240356"/>
+ <int key="NSButtonFlags">-2038284288</int>
+ <int key="NSButtonFlags2">129</int>
+ <reference key="NSAlternateImage" ref="22"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
</object>
- <bool key="NSEditable">YES</bool>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
- <object class="QTMovieView" id="48693112">
- <reference key="NSNextResponder" ref="353606868"/>
- <int key="NSvFlags">274</int>
- <object class="NSMutableSet" key="NSDragTypes">
+ <object class="NSButton" id="141370142">
+ <reference key="NSNextResponder" ref="385854969"/>
+ <int key="NSvFlags">289</int>
+ <object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="set.sortedObjects">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>Apple URL pasteboard type</string>
- <string>CorePasteboardFlavorType 0x6D6F6F76</string>
- <string>NSFilenamesPboardType</string>
- <string>QTMoviePasteboardType</string>
+ </object>
+ <string key="NSFrame">{{370, 11}, {59, 16}}</string>
+ <reference key="NSSuperview" ref="385854969"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="700607930"/>
+ <object class="NSArray" key="NSViewContentFilters">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="CIColorMonochrome">
+ <object class="CIColor" key="CI_inputColor">
+ <float key="red">0.70196080207824707</float>
+ <float key="green">0.70196080207824707</float>
+ <float key="blue">0.70196080207824707</float>
+ <float key="alpha">1</float>
+ </object>
+ <integer value="1" key="CI_inputIntensity"/>
+ <bool key="CIEnabled">YES</bool>
</object>
</object>
- <string key="NSFrameSize">{482, 362}</string>
- <reference key="NSSuperview" ref="353606868"/>
- <reference key="NSNextKeyView" ref="768906858"/>
- <object class="NSColor" key="kCoderFillColor">
- <int key="NSColorSpace">1</int>
- <bytes key="NSRGB">MC44MDAwMDAwMSAwLjgwMDAwMDAxIDAuODAwMDAwMDEAA</bytes>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="606007744">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">134479872</int>
+ <string key="NSContents">Settings</string>
+ <reference key="NSSupport" ref="22"/>
+ <reference key="NSControlView" ref="141370142"/>
+ <int key="NSButtonFlags">-2038284288</int>
+ <int key="NSButtonFlags2">129</int>
+ <reference key="NSAlternateImage" ref="22"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
</object>
- <boolean value="YES" key="kCoderControllerVisible"/>
- <boolean value="YES" key="kCoderPreservesAspectRatio"/>
- <nil key="kCoderMovie"/>
- <boolean value="NO" key="kCoderEditable"/>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
- <object class="NSBox" id="92351498">
- <reference key="NSNextResponder" ref="353606868"/>
- <int key="NSvFlags">-2147483611</int>
+ <object class="NSButton" id="81685190">
+ <reference key="NSNextResponder" ref="385854969"/>
+ <int key="NSvFlags">289</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSView" id="385854969">
- <reference key="NSNextResponder" ref="92351498"/>
- <int key="NSvFlags">274</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSButton" id="798240356">
- <reference key="NSNextResponder" ref="385854969"/>
- <int key="NSvFlags">292</int>
- <string key="NSFrame">{{20, 9}, {77, 16}}</string>
- <reference key="NSSuperview" ref="385854969"/>
- <reference key="NSNextKeyView" ref="66510867"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
- <bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="975305481">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">134479872</int>
- <string key="NSContents">Live Preview</string>
- <object class="NSFont" key="NSSupport" id="22">
- <string key="NSName">LucidaGrande</string>
- <double key="NSSize">9</double>
- <int key="NSfFlags">3614</int>
- </object>
- <reference key="NSControlView" ref="798240356"/>
- <int key="NSButtonFlags">-2038284033</int>
- <int key="NSButtonFlags2">129</int>
- <reference key="NSAlternateImage" ref="22"/>
- <string key="NSAlternateContents"/>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
- </object>
- </object>
- <object class="NSButton" id="141370142">
- <reference key="NSNextResponder" ref="385854969"/>
- <int key="NSvFlags">289</int>
- <string key="NSFrame">{{357, 10}, {59, 16}}</string>
- <reference key="NSSuperview" ref="385854969"/>
- <reference key="NSNextKeyView" ref="700607930"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
- <bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="606007744">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">134479872</int>
- <string key="NSContents">Settings</string>
- <reference key="NSSupport" ref="22"/>
- <reference key="NSControlView" ref="141370142"/>
- <int key="NSButtonFlags">-2038284033</int>
- <int key="NSButtonFlags2">129</int>
- <reference key="NSAlternateImage" ref="22"/>
- <string key="NSAlternateContents"/>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
- </object>
- </object>
- <object class="NSButton" id="81685190">
- <reference key="NSNextResponder" ref="385854969"/>
- <int key="NSvFlags">289</int>
- <string key="NSFrame">{{259, 10}, {92, 16}}</string>
- <reference key="NSSuperview" ref="385854969"/>
- <reference key="NSNextKeyView" ref="141370142"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
- <bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="847033897">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">134479872</int>
- <string key="NSContents">Scale To Screen</string>
- <reference key="NSSupport" ref="22"/>
- <reference key="NSControlView" ref="81685190"/>
- <int key="NSButtonFlags">-2038284033</int>
- <int key="NSButtonFlags2">129</int>
- <object class="NSFont" key="NSAlternateImage" id="354866114">
- <string key="NSName">LucidaGrande</string>
- <double key="NSSize">9</double>
- <int key="NSfFlags">16</int>
- </object>
- <string key="NSAlternateContents"/>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
- </object>
- </object>
- <object class="NSTextField" id="66510867">
- <reference key="NSNextResponder" ref="385854969"/>
- <int key="NSvFlags">289</int>
- <string key="NSFrame">{{101, 14}, {75, 11}}</string>
- <reference key="NSSuperview" ref="385854969"/>
- <reference key="NSNextKeyView" ref="598619000"/>
- <bool key="NSEnabled">YES</bool>
- <object class="NSTextFieldCell" key="NSCell" id="567286013">
- <int key="NSCellFlags">68288064</int>
- <int key="NSCellFlags2">71566336</int>
- <string key="NSContents">Duration (sec):</string>
- <object class="NSFont" key="NSSupport" id="811969608">
- <string key="NSName">LucidaGrande-Bold</string>
- <double key="NSSize">9</double>
- <int key="NSfFlags">16</int>
- </object>
- <reference key="NSControlView" ref="66510867"/>
- <object class="NSColor" key="NSBackgroundColor" id="407686733">
- <int key="NSColorSpace">6</int>
- <string key="NSCatalogName">System</string>
- <string key="NSColorName">controlColor</string>
- <object class="NSColor" key="NSColor">
- <int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
- </object>
- </object>
- <object class="NSColor" key="NSTextColor">
- <int key="NSColorSpace">1</int>
- <bytes key="NSRGB">MC44MDAwMDAwMSAwLjgwMDAwMDAxIDAuODAwMDAwMDEAA</bytes>
- </object>
- </object>
- </object>
- <object class="NSPopUpButton" id="598619000">
- <reference key="NSNextResponder" ref="385854969"/>
- <int key="NSvFlags">289</int>
- <string key="NSFrame">{{184, 11}, {58, 15}}</string>
- <reference key="NSSuperview" ref="385854969"/>
- <reference key="NSNextKeyView" ref="81685190"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
- <bool key="NSEnabled">YES</bool>
- <object class="NSPopUpButtonCell" key="NSCell" id="953108737">
- <int key="NSCellFlags">-2076049856</int>
- <int key="NSCellFlags2">264192</int>
- <reference key="NSSupport" ref="22"/>
- <reference key="NSControlView" ref="598619000"/>
- <int key="NSButtonFlags">109199615</int>
- <int key="NSButtonFlags2">1</int>
- <string key="NSAlternateContents"/>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">400</int>
- <int key="NSPeriodicInterval">75</int>
- <object class="NSMenuItem" key="NSMenuItem" id="372655630">
- <reference key="NSMenu" ref="501672847"/>
- <string key="NSTitle">Item 1</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <int key="NSState">1</int>
- <object class="NSCustomResource" key="NSOnImage" id="858043985">
- <string key="NSClassName">NSImage</string>
- <string key="NSResourceName">NSMenuCheckmark</string>
- </object>
- <object class="NSCustomResource" key="NSMixedImage" id="700487240">
- <string key="NSClassName">NSImage</string>
- <string key="NSResourceName">NSMenuMixedState</string>
- </object>
- <string key="NSAction">_popUpItemAction:</string>
- <reference key="NSTarget" ref="953108737"/>
- </object>
- <bool key="NSMenuItemRespectAlignment">YES</bool>
- <object class="NSMenu" key="NSMenu" id="501672847">
- <string key="NSTitle">OtherViews</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="372655630"/>
- <object class="NSMenuItem" id="607756368">
- <reference key="NSMenu" ref="501672847"/>
- <string key="NSTitle">Item 2</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="858043985"/>
- <reference key="NSMixedImage" ref="700487240"/>
- <string key="NSAction">_popUpItemAction:</string>
- <reference key="NSTarget" ref="953108737"/>
- </object>
- <object class="NSMenuItem" id="272743761">
- <reference key="NSMenu" ref="501672847"/>
- <string key="NSTitle">Item 3</string>
- <string key="NSKeyEquiv"/>
- <int key="NSKeyEquivModMask">1048576</int>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="858043985"/>
- <reference key="NSMixedImage" ref="700487240"/>
- <string key="NSAction">_popUpItemAction:</string>
- <reference key="NSTarget" ref="953108737"/>
- </object>
- </object>
- </object>
- <int key="NSPreferredEdge">1</int>
- <bool key="NSUsesItemFromMenu">YES</bool>
- <bool key="NSAltersState">YES</bool>
- <int key="NSArrowPosition">2</int>
- </object>
- </object>
- <object class="NSSlider" id="396925210">
- <reference key="NSNextResponder" ref="385854969"/>
- <int key="NSvFlags">290</int>
- <string key="NSFrame">{{18, 39}, {402, 16}}</string>
- <reference key="NSSuperview" ref="385854969"/>
- <reference key="NSNextKeyView" ref="798240356"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
- <bool key="NSEnabled">YES</bool>
- <object class="NSSliderCell" key="NSCell" id="639767004">
- <int key="NSCellFlags">67501824</int>
- <int key="NSCellFlags2">262144</int>
- <string key="NSContents"/>
- <reference key="NSSupport" ref="22"/>
- <reference key="NSControlView" ref="396925210"/>
- <double key="NSMaxValue">9</double>
- <double key="NSMinValue">0.0</double>
- <double key="NSValue">0.0</double>
- <double key="NSAltIncValue">0.0</double>
- <int key="NSNumberOfTickMarks">10</int>
- <int key="NSTickMarkPosition">1</int>
- <bool key="NSAllowsTickMarkValuesOnly">YES</bool>
- <bool key="NSVertical">NO</bool>
- </object>
- </object>
- <object class="NSTextField" id="628196212">
- <reference key="NSNextResponder" ref="385854969"/>
- <int key="NSvFlags">290</int>
- <string key="NSFrame">{{15, 55}, {408, 20}}</string>
- <reference key="NSSuperview" ref="385854969"/>
- <reference key="NSNextKeyView" ref="396925210"/>
- <bool key="NSEnabled">YES</bool>
- <object class="NSTextFieldCell" key="NSCell" id="921881842">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">4325376</int>
- <string key="NSContents"/>
- <object class="NSFont" key="NSSupport" id="476446081">
- <string key="NSName">LucidaGrande-Bold</string>
- <double key="NSSize">11</double>
- <int key="NSfFlags">16</int>
- </object>
- <reference key="NSControlView" ref="628196212"/>
- <bool key="NSDrawsBackground">YES</bool>
- <reference key="NSBackgroundColor" ref="407686733"/>
- <object class="NSColor" key="NSTextColor" id="978544139">
- <int key="NSColorSpace">1</int>
- <bytes key="NSRGB">MSAxIDEAA</bytes>
- </object>
- </object>
- </object>
- <object class="NSTextField" id="245200984">
- <reference key="NSNextResponder" ref="385854969"/>
- <int key="NSvFlags">290</int>
- <string key="NSFrame">{{16, 80}, {408, 12}}</string>
- <reference key="NSSuperview" ref="385854969"/>
- <reference key="NSNextKeyView" ref="628196212"/>
- <bool key="NSEnabled">YES</bool>
- <object class="NSTextFieldCell" key="NSCell" id="1032360651">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">4456448</int>
- <string key="NSContents"/>
- <reference key="NSSupport" ref="811969608"/>
- <reference key="NSControlView" ref="245200984"/>
- <bool key="NSDrawsBackground">YES</bool>
- <reference key="NSBackgroundColor" ref="407686733"/>
- <reference key="NSTextColor" ref="978544139"/>
- </object>
- </object>
+ </object>
+ <string key="NSFrame">{{272, 11}, {92, 16}}</string>
+ <reference key="NSSuperview" ref="385854969"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="141370142"/>
+ <object class="NSArray" key="NSViewContentFilters">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="CIColorMonochrome">
+ <object class="CIColor" key="CI_inputColor">
+ <float key="red">0.70196080207824707</float>
+ <float key="green">0.70196080207824707</float>
+ <float key="blue">0.70196080207824707</float>
+ <float key="alpha">1</float>
</object>
- <string key="NSFrame">{{1, 1}, {438, 97}}</string>
- <reference key="NSSuperview" ref="92351498"/>
- <reference key="NSNextKeyView" ref="245200984"/>
+ <integer value="1" key="CI_inputIntensity"/>
+ <bool key="CIEnabled">YES</bool>
</object>
</object>
- <string key="NSFrame">{{21, 121}, {440, 99}}</string>
- <reference key="NSSuperview" ref="353606868"/>
- <reference key="NSNextKeyView" ref="385854969"/>
- <string key="NSOffsets">{0, 0}</string>
- <object class="NSTextFieldCell" key="NSTitleCell">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">0</int>
- <string key="NSContents">Picture Controls</string>
- <object class="NSFont" key="NSSupport" id="26">
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="847033897">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">134479872</int>
+ <string key="NSContents">Scale To Screen</string>
+ <reference key="NSSupport" ref="22"/>
+ <reference key="NSControlView" ref="81685190"/>
+ <int key="NSButtonFlags">-2038284288</int>
+ <int key="NSButtonFlags2">129</int>
+ <object class="NSFont" key="NSAlternateImage" id="354866114">
<string key="NSName">LucidaGrande</string>
- <double key="NSSize">11</double>
- <int key="NSfFlags">3100</int>
+ <double key="NSSize">9</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSTextField" id="66510867">
+ <reference key="NSNextResponder" ref="385854969"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{108, 14}, {75, 11}}</string>
+ <reference key="NSSuperview" ref="385854969"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="598619000"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="567286013">
+ <int key="NSCellFlags">68157504</int>
+ <int key="NSCellFlags2">71566336</int>
+ <string key="NSContents">Duration (sec):</string>
+ <object class="NSFont" key="NSSupport" id="811969608">
+ <string key="NSName">LucidaGrande-Bold</string>
+ <double key="NSSize">9</double>
+ <int key="NSfFlags">16</int>
</object>
- <object class="NSColor" key="NSBackgroundColor" id="384686844">
+ <reference key="NSControlView" ref="66510867"/>
+ <object class="NSColor" key="NSBackgroundColor" id="407686733">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
- <string key="NSColorName">textBackgroundColor</string>
+ <string key="NSColorName">controlColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MQA</bytes>
+ <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
</object>
</object>
- <object class="NSColor" key="NSTextColor">
- <int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+ <object class="NSColor" key="NSTextColor" id="978544139">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MSAxIDEAA</bytes>
</object>
</object>
- <reference key="NSContentView" ref="385854969"/>
- <int key="NSBorderType">1</int>
- <int key="NSBoxType">4</int>
- <int key="NSTitlePosition">0</int>
- <bool key="NSTransparent">NO</bool>
- <double key="NSCornerRadius2">12</double>
- <object class="NSColor" key="NSBorderColor2">
- <int key="NSColorSpace">1</int>
- <bytes key="NSRGB">MSAxIDEgMC41AA</bytes>
- </object>
- <object class="NSColor" key="NSFillColor2">
- <int key="NSColorSpace">1</int>
- <bytes key="NSRGB">MCAwIDAgMC42AA</bytes>
- </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
- <object class="NSBox" id="700607930">
- <reference key="NSNextResponder" ref="353606868"/>
- <int key="NSvFlags">-2147483611</int>
- <object class="NSMutableArray" key="NSSubviews">
+ <object class="NSPopUpButton" id="598619000">
+ <reference key="NSNextResponder" ref="385854969"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{187, 12}, {58, 15}}</string>
+ <reference key="NSSuperview" ref="385854969"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="81685190"/>
+ <object class="NSArray" key="NSViewContentFilters">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSView" id="1068222891">
- <reference key="NSNextResponder" ref="700607930"/>
- <int key="NSvFlags">274</int>
- <object class="NSMutableArray" key="NSSubviews">
+ <object class="CIColorMonochrome">
+ <object class="CIColor" key="CI_inputColor">
+ <float key="red">0.70196080207824707</float>
+ <float key="green">0.70196080207824707</float>
+ <float key="blue">0.70196080207824707</float>
+ <float key="alpha">1</float>
+ </object>
+ <integer value="1" key="CI_inputIntensity"/>
+ <bool key="CIEnabled">YES</bool>
+ </object>
+ </object>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSPopUpButtonCell" key="NSCell" id="953108737">
+ <int key="NSCellFlags">-2076180416</int>
+ <int key="NSCellFlags2">264192</int>
+ <reference key="NSSupport" ref="22"/>
+ <reference key="NSControlView" ref="598619000"/>
+ <int key="NSButtonFlags">109199360</int>
+ <int key="NSButtonFlags2">1</int>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ <object class="NSMenuItem" key="NSMenuItem" id="372655630">
+ <reference key="NSMenu" ref="501672847"/>
+ <string key="NSTitle">Item 1</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <int key="NSState">1</int>
+ <object class="NSCustomResource" key="NSOnImage" id="858043985">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuCheckmark</string>
+ </object>
+ <object class="NSCustomResource" key="NSMixedImage" id="700487240">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSMenuMixedState</string>
+ </object>
+ <string key="NSAction">_popUpItemAction:</string>
+ <reference key="NSTarget" ref="953108737"/>
+ </object>
+ <bool key="NSMenuItemRespectAlignment">YES</bool>
+ <object class="NSMenu" key="NSMenu" id="501672847">
+ <string key="NSTitle">OtherViews</string>
+ <object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSSlider" id="886140787">
- <reference key="NSNextResponder" ref="1068222891"/>
- <int key="NSvFlags">290</int>
- <string key="NSFrame">{{18, 27}, {407, 21}}</string>
- <reference key="NSSuperview" ref="1068222891"/>
- <reference key="NSNextKeyView" ref="964331174"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
- <bool key="NSEnabled">YES</bool>
- <object class="NSSliderCell" key="NSCell" id="493667684">
- <int key="NSCellFlags">67501824</int>
- <int key="NSCellFlags2">0</int>
- <string key="NSContents"/>
- <reference key="NSControlView" ref="886140787"/>
- <double key="NSMaxValue">100</double>
- <double key="NSMinValue">0.0</double>
- <double key="NSValue">0.0</double>
- <double key="NSAltIncValue">0.0</double>
- <int key="NSNumberOfTickMarks">0</int>
- <int key="NSTickMarkPosition">1</int>
- <bool key="NSAllowsTickMarkValuesOnly">NO</bool>
- <bool key="NSVertical">NO</bool>
- </object>
+ <reference ref="372655630"/>
+ <object class="NSMenuItem" id="607756368">
+ <reference key="NSMenu" ref="501672847"/>
+ <string key="NSTitle">Item 2</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="858043985"/>
+ <reference key="NSMixedImage" ref="700487240"/>
+ <string key="NSAction">_popUpItemAction:</string>
+ <reference key="NSTarget" ref="953108737"/>
</object>
- <object class="NSButton" id="102183813">
- <reference key="NSNextResponder" ref="1068222891"/>
- <int key="NSvFlags">268</int>
- <string key="NSFrame">{{200, 53}, {39, 25}}</string>
- <reference key="NSSuperview" ref="1068222891"/>
- <reference key="NSNextKeyView" ref="894608246"/>
- <bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="19809002">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">134217728</int>
- <string key="NSContents"/>
- <object class="NSFont" key="NSSupport" id="353643025">
- <string key="NSName">LucidaGrande</string>
- <double key="NSSize">13</double>
- <int key="NSfFlags">1044</int>
- </object>
- <reference key="NSControlView" ref="102183813"/>
- <int key="NSButtonFlags">-2038169345</int>
- <int key="NSButtonFlags2">134</int>
- <string key="NSAlternateContents"/>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
- </object>
- </object>
- <object class="NSButton" id="897614796">
- <reference key="NSNextResponder" ref="1068222891"/>
- <int key="NSvFlags">268</int>
- <string key="NSFrame">{{171, 53}, {30, 25}}</string>
- <reference key="NSSuperview" ref="1068222891"/>
- <reference key="NSNextKeyView" ref="102183813"/>
- <bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="913339095">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">134217728</int>
- <string key="NSContents">|<</string>
- <reference key="NSSupport" ref="353643025"/>
- <reference key="NSControlView" ref="897614796"/>
- <int key="NSButtonFlags">-2038038273</int>
- <int key="NSButtonFlags2">134</int>
- <object class="NSFont" key="NSAlternateImage">
- <string key="NSName">LucidaGrande</string>
- <double key="NSSize">13</double>
- <int key="NSfFlags">16</int>
- </object>
- <string key="NSAlternateContents"/>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
- </object>
- </object>
- <object class="NSButton" id="894608246">
- <reference key="NSNextResponder" ref="1068222891"/>
- <int key="NSvFlags">268</int>
- <string key="NSFrame">{{238, 53}, {32, 25}}</string>
- <reference key="NSSuperview" ref="1068222891"/>
- <reference key="NSNextKeyView" ref="630042886"/>
- <bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="117507013">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">134479872</int>
- <string key="NSContents">>|</string>
- <reference key="NSSupport" ref="22"/>
- <reference key="NSControlView" ref="894608246"/>
- <int key="NSButtonFlags">-2038169345</int>
- <int key="NSButtonFlags2">134</int>
- <string key="NSAlternateContents"/>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
- </object>
- </object>
- <object class="NSButton" id="630042886">
- <reference key="NSNextResponder" ref="1068222891"/>
- <int key="NSvFlags">292</int>
- <string key="NSFrame">{{331, 56}, {77, 16}}</string>
- <reference key="NSSuperview" ref="1068222891"/>
- <reference key="NSNextKeyView" ref="886140787"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
- <bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="999505395">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">134479872</int>
- <string key="NSContents">Still Previews</string>
- <reference key="NSSupport" ref="22"/>
- <reference key="NSControlView" ref="630042886"/>
- <int key="NSButtonFlags">-2038284033</int>
- <int key="NSButtonFlags2">129</int>
- <reference key="NSAlternateImage" ref="22"/>
- <string key="NSAlternateContents"/>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
- </object>
- </object>
- <object class="NSTextField" id="964331174">
- <reference key="NSNextResponder" ref="1068222891"/>
- <int key="NSvFlags">290</int>
- <string key="NSFrame">{{18, 10}, {399, 12}}</string>
- <reference key="NSSuperview" ref="1068222891"/>
- <reference key="NSNextKeyView"/>
- <bool key="NSEnabled">YES</bool>
- <object class="NSTextFieldCell" key="NSCell" id="113790059">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">4456448</int>
- <string key="NSContents"/>
- <reference key="NSSupport" ref="811969608"/>
- <reference key="NSControlView" ref="964331174"/>
- <bool key="NSDrawsBackground">YES</bool>
- <reference key="NSBackgroundColor" ref="407686733"/>
- <reference key="NSTextColor" ref="978544139"/>
- </object>
+ <object class="NSMenuItem" id="272743761">
+ <reference key="NSMenu" ref="501672847"/>
+ <string key="NSTitle">Item 3</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="858043985"/>
+ <reference key="NSMixedImage" ref="700487240"/>
+ <string key="NSAction">_popUpItemAction:</string>
+ <reference key="NSTarget" ref="953108737"/>
</object>
</object>
- <string key="NSFrame">{{1, 1}, {438, 97}}</string>
- <reference key="NSSuperview" ref="700607930"/>
- <reference key="NSNextKeyView" ref="897614796"/>
+ </object>
+ <int key="NSPreferredEdge">1</int>
+ <bool key="NSUsesItemFromMenu">YES</bool>
+ <bool key="NSAltersState">YES</bool>
+ <int key="NSArrowPosition">2</int>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSSlider" id="396925210">
+ <reference key="NSNextResponder" ref="385854969"/>
+ <int key="NSvFlags">290</int>
+ <string key="NSFrame">{{18, 39}, {410, 16}}</string>
+ <reference key="NSSuperview" ref="385854969"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="798240356"/>
+ <object class="NSArray" key="NSViewContentFilters">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="CIColorMonochrome">
+ <object class="CIColor" key="CI_inputColor">
+ <float key="red">0.70196080207824707</float>
+ <float key="green">0.70196080207824707</float>
+ <float key="blue">0.70196080207824707</float>
+ <float key="alpha">1</float>
+ </object>
+ <integer value="1" key="CI_inputIntensity"/>
+ <bool key="CIEnabled">YES</bool>
+ </object>
+ </object>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSSliderCell" key="NSCell" id="639767004">
+ <int key="NSCellFlags">67371264</int>
+ <int key="NSCellFlags2">262144</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="22"/>
+ <reference key="NSControlView" ref="396925210"/>
+ <double key="NSMaxValue">9</double>
+ <double key="NSMinValue">0.0</double>
+ <double key="NSValue">0.0</double>
+ <double key="NSAltIncValue">0.0</double>
+ <int key="NSNumberOfTickMarks">10</int>
+ <int key="NSTickMarkPosition">1</int>
+ <bool key="NSAllowsTickMarkValuesOnly">YES</bool>
+ <bool key="NSVertical">NO</bool>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSTextField" id="628196212">
+ <reference key="NSNextResponder" ref="385854969"/>
+ <int key="NSvFlags">290</int>
+ <string key="NSFrame">{{15, 55}, {420, 20}}</string>
+ <reference key="NSSuperview" ref="385854969"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="396925210"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="921881842">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">4325376</int>
+ <string key="NSContents"/>
+ <object class="NSFont" key="NSSupport" id="476446081">
+ <string key="NSName">LucidaGrande-Bold</string>
+ <double key="NSSize">11</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <reference key="NSControlView" ref="628196212"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="407686733"/>
+ <reference key="NSTextColor" ref="978544139"/>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSTextField" id="245200984">
+ <reference key="NSNextResponder" ref="385854969"/>
+ <int key="NSvFlags">290</int>
+ <string key="NSFrame">{{15, 77}, {416, 12}}</string>
+ <reference key="NSSuperview" ref="385854969"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="628196212"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="1032360651">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">4456448</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="811969608"/>
+ <reference key="NSControlView" ref="245200984"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="407686733"/>
+ <reference key="NSTextColor" ref="978544139"/>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ </object>
+ <string key="NSFrame">{{2, 2}, {446, 96}}</string>
+ <reference key="NSSuperview" ref="92351498"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="245200984"/>
+ </object>
+ </object>
+ <string key="NSFrame">{{15, 132}, {450, 100}}</string>
+ <reference key="NSSuperview" ref="49161063"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="385854969"/>
+ <string key="NSOffsets">{0, 0}</string>
+ <object class="NSTextFieldCell" key="NSTitleCell">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Picture Controls</string>
+ <object class="NSFont" key="NSSupport" id="26">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">11</double>
+ <int key="NSfFlags">3100</int>
+ </object>
+ <object class="NSColor" key="NSBackgroundColor" id="384686844">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textBackgroundColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+ </object>
+ </object>
+ <reference key="NSContentView" ref="385854969"/>
+ <int key="NSBorderType">1</int>
+ <int key="NSBoxType">4</int>
+ <int key="NSTitlePosition">0</int>
+ <bool key="NSTransparent">NO</bool>
+ <real value="2" key="NSBorderWidth2"/>
+ <double key="NSCornerRadius2">12</double>
+ <object class="NSColor" key="NSBorderColor2">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MSAxIDEgMC44AA</bytes>
+ </object>
+ <object class="NSColor" key="NSFillColor2">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MCAwIDAgMC42AA</bytes>
+ </object>
+ </object>
+ <object class="NSBox" id="700607930">
+ <reference key="NSNextResponder" ref="49161063"/>
+ <int key="NSvFlags">-2147483611</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSView" id="1068222891">
+ <reference key="NSNextResponder" ref="700607930"/>
+ <int key="NSvFlags">274</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSSlider" id="886140787">
+ <reference key="NSNextResponder" ref="1068222891"/>
+ <int key="NSvFlags">290</int>
+ <string key="NSFrame">{{16, 16}, {355, 21}}</string>
+ <reference key="NSSuperview" ref="1068222891"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="964331174"/>
+ <object class="NSArray" key="NSViewContentFilters">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="CIColorMonochrome">
+ <object class="CIColor" key="CI_inputColor">
+ <float key="red">0.70196080207824707</float>
+ <float key="green">0.70196080207824707</float>
+ <float key="blue">0.70196080207824707</float>
+ <float key="alpha">1</float>
+ </object>
+ <integer value="1" key="CI_inputIntensity"/>
+ <bool key="CIEnabled">YES</bool>
</object>
</object>
- <string key="NSFrame">{{21, 16}, {440, 99}}</string>
- <reference key="NSSuperview" ref="353606868"/>
- <reference key="NSNextKeyView" ref="1068222891"/>
- <string key="NSOffsets">{0, 0}</string>
- <object class="NSTextFieldCell" key="NSTitleCell">
- <int key="NSCellFlags">67239424</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSSliderCell" key="NSCell" id="493667684">
+ <int key="NSCellFlags">67371264</int>
<int key="NSCellFlags2">0</int>
- <string key="NSContents">Playback Controls</string>
- <reference key="NSSupport" ref="26"/>
- <reference key="NSBackgroundColor" ref="384686844"/>
- <object class="NSColor" key="NSTextColor">
- <int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+ <string key="NSContents"/>
+ <reference key="NSControlView" ref="886140787"/>
+ <double key="NSMaxValue">100</double>
+ <double key="NSMinValue">0.0</double>
+ <double key="NSValue">0.0</double>
+ <double key="NSAltIncValue">0.0</double>
+ <int key="NSNumberOfTickMarks">0</int>
+ <int key="NSTickMarkPosition">1</int>
+ <bool key="NSAllowsTickMarkValuesOnly">NO</bool>
+ <bool key="NSVertical">NO</bool>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSButton" id="102183813">
+ <reference key="NSNextResponder" ref="1068222891"/>
+ <int key="NSvFlags">268</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <string key="NSFrame">{{205, 43}, {36, 36}}</string>
+ <reference key="NSSuperview" ref="1068222891"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="894608246"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="19809002">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents"/>
+ <object class="NSFont" key="NSSupport" id="353643025">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">13</double>
+ <int key="NSfFlags">1044</int>
</object>
+ <reference key="NSControlView" ref="102183813"/>
+ <int key="NSButtonFlags">-931921920</int>
+ <int key="NSButtonFlags2">134</int>
+ <object class="NSCustomResource" key="NSNormalImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">play-p</string>
+ </object>
+ <object class="NSCustomResource" key="NSAlternateImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">pause-p</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
</object>
- <reference key="NSContentView" ref="1068222891"/>
- <int key="NSBorderType">1</int>
- <int key="NSBoxType">4</int>
- <int key="NSTitlePosition">0</int>
- <bool key="NSTransparent">NO</bool>
- <double key="NSCornerRadius2">12</double>
- <object class="NSColor" key="NSBorderColor2">
- <int key="NSColorSpace">1</int>
- <bytes key="NSRGB">MSAxIDEgMC41AA</bytes>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSButton" id="897614796">
+ <reference key="NSNextResponder" ref="1068222891"/>
+ <int key="NSvFlags">268</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
</object>
- <object class="NSColor" key="NSFillColor2">
- <int key="NSColorSpace">1</int>
- <bytes key="NSRGB">MCAwIDAgMC42AA</bytes>
+ <string key="NSFrame">{{163, 48}, {32, 26}}</string>
+ <reference key="NSSuperview" ref="1068222891"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="102183813"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="913339095">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="353643025"/>
+ <reference key="NSControlView" ref="897614796"/>
+ <int key="NSButtonFlags">-2041839616</int>
+ <int key="NSButtonFlags2">134</int>
+ <object class="NSCustomResource" key="NSNormalImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">prev-p</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
- <object class="NSBox" id="768906858">
- <reference key="NSNextResponder" ref="353606868"/>
- <int key="NSvFlags">-2147483611</int>
+ <object class="NSButton" id="894608246">
+ <reference key="NSNextResponder" ref="1068222891"/>
+ <int key="NSvFlags">268</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSView" id="1067699710">
- <reference key="NSNextResponder" ref="768906858"/>
- <int key="NSvFlags">274</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSProgressIndicator" id="196868285">
- <reference key="NSNextResponder" ref="1067699710"/>
- <int key="NSvFlags">-2147482368</int>
- <object class="NSPSMatrix" key="NSDrawMatrix"/>
- <string key="NSFrame">{{23, 26}, {336, 12}}</string>
- <reference key="NSSuperview" ref="1067699710"/>
- <reference key="NSNextKeyView" ref="569473100"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
- <int key="NSpiFlags">16650</int>
- <double key="NSMinValue">20</double>
- <double key="NSMaxValue">100</double>
- </object>
- <object class="NSButton" id="569473100">
- <reference key="NSNextResponder" ref="1067699710"/>
- <int key="NSvFlags">265</int>
- <string key="NSFrame">{{366, 24}, {58, 16}}</string>
- <reference key="NSSuperview" ref="1067699710"/>
- <reference key="NSNextKeyView" ref="92351498"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
- <bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="908165435">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">134479872</int>
- <string key="NSContents">Cancel</string>
- <reference key="NSSupport" ref="22"/>
- <reference key="NSControlView" ref="569473100"/>
- <int key="NSButtonFlags">-2038284033</int>
- <int key="NSButtonFlags2">129</int>
- <reference key="NSAlternateImage" ref="354866114"/>
- <string key="NSAlternateContents"/>
- <string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
- </object>
- </object>
- <object class="NSTextField" id="986015194">
- <reference key="NSNextResponder" ref="1067699710"/>
- <int key="NSvFlags">256</int>
- <string key="NSFrame">{{21, 59}, {394, 14}}</string>
- <reference key="NSSuperview" ref="1067699710"/>
- <reference key="NSNextKeyView" ref="196868285"/>
- <bool key="NSEnabled">YES</bool>
- <object class="NSTextFieldCell" key="NSCell" id="304208899">
- <int key="NSCellFlags">68288064</int>
- <int key="NSCellFlags2">4326400</int>
- <string key="NSContents">Preparing Preview</string>
- <reference key="NSSupport" ref="476446081"/>
- <reference key="NSControlView" ref="986015194"/>
- <object class="NSColor" key="NSBackgroundColor">
- <int key="NSColorSpace">2</int>
- <bytes key="NSRGB">MC45MDE5NjA4NSAwLjkwMTk2MDg1IDAuOTAxOTYwODUgMAA</bytes>
- </object>
- <reference key="NSTextColor" ref="978544139"/>
- </object>
- </object>
+ </object>
+ <string key="NSFrame">{{251, 48}, {32, 26}}</string>
+ <reference key="NSSuperview" ref="1068222891"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="630042886"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="117507013">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">134479872</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="22"/>
+ <reference key="NSControlView" ref="894608246"/>
+ <int key="NSButtonFlags">-2042363904</int>
+ <int key="NSButtonFlags2">134</int>
+ <object class="NSCustomResource" key="NSNormalImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">next-p</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSButton" id="630042886">
+ <reference key="NSNextResponder" ref="1068222891"/>
+ <int key="NSvFlags">292</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <string key="NSFrame">{{348, 53}, {81, 16}}</string>
+ <reference key="NSSuperview" ref="1068222891"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="886140787"/>
+ <object class="NSArray" key="NSViewContentFilters">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="CIColorMonochrome">
+ <object class="CIColor" key="CI_inputColor">
+ <float key="red">0.70196080207824707</float>
+ <float key="green">0.70196080207824707</float>
+ <float key="blue">0.70196080207824707</float>
+ <float key="alpha">1</float>
</object>
- <string key="NSFrame">{{1, 1}, {438, 98}}</string>
- <reference key="NSSuperview" ref="768906858"/>
- <reference key="NSNextKeyView" ref="986015194"/>
+ <integer value="1" key="CI_inputIntensity"/>
+ <bool key="CIEnabled">YES</bool>
</object>
</object>
- <string key="NSFrame">{{21, 233}, {440, 100}}</string>
- <reference key="NSSuperview" ref="353606868"/>
- <reference key="NSNextKeyView" ref="1067699710"/>
- <string key="NSOffsets">{0, 0}</string>
- <object class="NSTextFieldCell" key="NSTitleCell">
- <int key="NSCellFlags">67239424</int>
- <int key="NSCellFlags2">0</int>
- <string key="NSContents">Encoding Controls</string>
- <reference key="NSSupport" ref="26"/>
- <reference key="NSBackgroundColor" ref="384686844"/>
- <object class="NSColor" key="NSTextColor">
- <int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="999505395">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">134479872</int>
+ <string key="NSContents">Still Previews</string>
+ <reference key="NSSupport" ref="22"/>
+ <reference key="NSControlView" ref="630042886"/>
+ <int key="NSButtonFlags">-2038284288</int>
+ <int key="NSButtonFlags2">129</int>
+ <reference key="NSAlternateImage" ref="22"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSTextField" id="964331174">
+ <reference key="NSNextResponder" ref="1068222891"/>
+ <int key="NSvFlags">290</int>
+ <string key="NSFrame">{{364, 19}, {67, 14}}</string>
+ <reference key="NSSuperview" ref="1068222891"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="113790059">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">71565312</int>
+ <string key="NSContents">00:00:00</string>
+ <reference key="NSSupport" ref="476446081"/>
+ <reference key="NSControlView" ref="964331174"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="407686733"/>
+ <reference key="NSTextColor" ref="978544139"/>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ </object>
+ <string key="NSFrame">{{2, 2}, {446, 96}}</string>
+ <reference key="NSSuperview" ref="700607930"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="897614796"/>
+ </object>
+ </object>
+ <string key="NSFrame">{{15, 30}, {450, 100}}</string>
+ <reference key="NSSuperview" ref="49161063"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="1068222891"/>
+ <string key="NSOffsets">{0, 0}</string>
+ <object class="NSTextFieldCell" key="NSTitleCell">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Playback Controls</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSBackgroundColor" ref="384686844"/>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+ </object>
+ </object>
+ <reference key="NSContentView" ref="1068222891"/>
+ <int key="NSBorderType">1</int>
+ <int key="NSBoxType">4</int>
+ <int key="NSTitlePosition">0</int>
+ <bool key="NSTransparent">NO</bool>
+ <real value="2" key="NSBorderWidth2"/>
+ <double key="NSCornerRadius2">12</double>
+ <object class="NSColor" key="NSBorderColor2">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MSAxIDEgMC44AA</bytes>
+ </object>
+ <object class="NSColor" key="NSFillColor2">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MCAwIDAgMC42AA</bytes>
+ </object>
+ </object>
+ <object class="NSBox" id="768906858">
+ <reference key="NSNextResponder" ref="49161063"/>
+ <int key="NSvFlags">-2147483611</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSView" id="1067699710">
+ <reference key="NSNextResponder" ref="768906858"/>
+ <int key="NSvFlags">274</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSProgressIndicator" id="196868285">
+ <reference key="NSNextResponder" ref="1067699710"/>
+ <int key="NSvFlags">1280</int>
+ <string key="NSFrame">{{18, 26}, {346, 12}}</string>
+ <reference key="NSSuperview" ref="1067699710"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="569473100"/>
+ <object class="NSArray" key="NSViewContentFilters">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="CIColorMonochrome">
+ <object class="CIColor" key="CI_inputColor">
+ <float key="red">0.70196080207824707</float>
+ <float key="green">0.70196080207824707</float>
+ <float key="blue">0.70196080207824707</float>
+ <float key="alpha">1</float>
+ </object>
+ <integer value="1" key="CI_inputIntensity"/>
+ <bool key="CIEnabled">YES</bool>
+ </object>
+ </object>
+ <int key="NSpiFlags">16650</int>
+ <double key="NSMaxValue">100</double>
+ </object>
+ <object class="NSButton" id="569473100">
+ <reference key="NSNextResponder" ref="1067699710"/>
+ <int key="NSvFlags">265</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <string key="NSFrame">{{371, 24}, {58, 16}}</string>
+ <reference key="NSSuperview" ref="1067699710"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="92351498"/>
+ <object class="NSArray" key="NSViewContentFilters">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="CIColorMonochrome">
+ <object class="CIColor" key="CI_inputColor">
+ <float key="red">0.70196080207824707</float>
+ <float key="green">0.70196080207824707</float>
+ <float key="blue">0.70196080207824707</float>
+ <float key="alpha">1</float>
+ </object>
+ <integer value="1" key="CI_inputIntensity"/>
+ <bool key="CIEnabled">YES</bool>
</object>
</object>
- <reference key="NSContentView" ref="1067699710"/>
- <int key="NSBorderType">1</int>
- <int key="NSBoxType">4</int>
- <int key="NSTitlePosition">0</int>
- <bool key="NSTransparent">NO</bool>
- <double key="NSCornerRadius2">11</double>
- <object class="NSColor" key="NSBorderColor2">
- <int key="NSColorSpace">1</int>
- <bytes key="NSRGB">MSAxIDEgMC41AA</bytes>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="908165435">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">134479872</int>
+ <string key="NSContents">Cancel</string>
+ <reference key="NSSupport" ref="22"/>
+ <reference key="NSControlView" ref="569473100"/>
+ <int key="NSButtonFlags">-2038284288</int>
+ <int key="NSButtonFlags2">129</int>
+ <reference key="NSAlternateImage" ref="354866114"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
</object>
- <object class="NSColor" key="NSFillColor2">
- <int key="NSColorSpace">1</int>
- <bytes key="NSRGB">MCAwIDAgMC42AA</bytes>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSTextField" id="986015194">
+ <reference key="NSNextResponder" ref="1067699710"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{15, 59}, {406, 14}}</string>
+ <reference key="NSSuperview" ref="1067699710"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="196868285"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="304208899">
+ <int key="NSCellFlags">68157504</int>
+ <int key="NSCellFlags2">4326400</int>
+ <string key="NSContents">Preparing Preview</string>
+ <reference key="NSSupport" ref="476446081"/>
+ <reference key="NSControlView" ref="986015194"/>
+ <object class="NSColor" key="NSBackgroundColor">
+ <int key="NSColorSpace">2</int>
+ <bytes key="NSRGB">MC45MDE5NjA4NSAwLjkwMTk2MDg1IDAuOTAxOTYwODUgMAA</bytes>
+ </object>
+ <reference key="NSTextColor" ref="978544139"/>
</object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
</object>
- <string key="NSFrameSize">{480, 360}</string>
- <reference key="NSSuperview" ref="289177107"/>
- <reference key="NSNextKeyView" ref="844127024"/>
+ <string key="NSFrame">{{2, 2}, {446, 96}}</string>
+ <reference key="NSSuperview" ref="768906858"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="986015194"/>
</object>
</object>
- <string key="NSFrameSize">{480, 360}</string>
+ <string key="NSFrame">{{15, 235}, {450, 100}}</string>
<reference key="NSSuperview" ref="49161063"/>
- <reference key="NSNextKeyView" ref="353606868"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="1067699710"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">0</int>
- <string key="NSContents">Box</string>
+ <string key="NSContents">Encoding Controls</string>
<reference key="NSSupport" ref="26"/>
<reference key="NSBackgroundColor" ref="384686844"/>
<object class="NSColor" key="NSTextColor">
<bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
</object>
</object>
- <reference key="NSContentView" ref="353606868"/>
+ <reference key="NSContentView" ref="1067699710"/>
<int key="NSBorderType">1</int>
<int key="NSBoxType">4</int>
<int key="NSTitlePosition">0</int>
<bool key="NSTransparent">NO</bool>
- <real value="0.0" key="NSBorderWidth2"/>
+ <real value="2" key="NSBorderWidth2"/>
+ <double key="NSCornerRadius2">12</double>
<object class="NSColor" key="NSBorderColor2">
- <int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MCAwLjQ0AA</bytes>
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MSAxIDEgMC44AA</bytes>
</object>
<object class="NSColor" key="NSFillColor2">
<int key="NSColorSpace">1</int>
- <bytes key="NSRGB">MC43MDE5NjA4IDAuNzAxOTYwOCAwLjcwMTk2MDgAA</bytes>
+ <bytes key="NSRGB">MCAwIDAgMC42AA</bytes>
</object>
</object>
</object>
<string key="NSFrameSize">{480, 360}</string>
<reference key="NSSuperview"/>
- <reference key="NSNextKeyView" ref="289177107"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="48693112"/>
</object>
- <string key="NSScreenRect">{{0, 0}, {2560, 1578}}</string>
+ <string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string>
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
<bool key="NSWindowIsRestorable">YES</bool>
</object>
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fInfoField</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="628196212"/>
- </object>
- <int key="connectionID">73</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">fPictureView</string>
+ <string key="label">window</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="844127024"/>
+ <reference key="destination" ref="616825745"/>
</object>
- <int key="connectionID">181</int>
+ <int key="connectionID">184</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">window</string>
+ <string key="label">fCreatePreviewMovieButton</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="616825745"/>
+ <reference key="destination" ref="798240356"/>
</object>
- <int key="connectionID">184</int>
+ <int key="connectionID">217</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fMovieView</string>
+ <string key="label">fscaleInfoField</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="48693112"/>
+ <reference key="destination" ref="245200984"/>
</object>
- <int key="connectionID">208</int>
+ <int key="connectionID">282</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fPictureSlider</string>
+ <string key="label">fPreviewMovieLengthPopUp</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="396925210"/>
+ <reference key="destination" ref="598619000"/>
</object>
- <int key="connectionID">211</int>
+ <int key="connectionID">232</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
- <string key="label">pictureSliderChanged:</string>
+ <string key="label">previewDurationPopUpChanged:</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="396925210"/>
+ <reference key="destination" ref="598619000"/>
</object>
- <int key="connectionID">212</int>
+ <int key="connectionID">233</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fMovieCreationProgressIndicator</string>
+ <string key="label">fPictureControlBox</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="196868285"/>
+ <reference key="destination" ref="92351498"/>
</object>
- <int key="connectionID">214</int>
+ <int key="connectionID">254</int>
</object>
<object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">fCreatePreviewMovieButton</string>
+ <object class="IBActionConnection" key="connection">
+ <string key="label">pictureSliderChanged:</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="798240356"/>
+ <reference key="destination" ref="396925210"/>
</object>
- <int key="connectionID">217</int>
+ <int key="connectionID">212</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fPreviewMovieStatusField</string>
+ <string key="label">fPictureSettingsToggleButton</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="986015194"/>
+ <reference key="destination" ref="141370142"/>
</object>
- <int key="connectionID">225</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">fPreviewMovieLengthPopUp</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="598619000"/>
- </object>
- <int key="connectionID">232</int>
+ <int key="connectionID">273</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
- <string key="label">previewDurationPopUpChanged:</string>
+ <string key="label">toggleScaleToScreen:</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="598619000"/>
+ <reference key="destination" ref="81685190"/>
</object>
- <int key="connectionID">233</int>
+ <int key="connectionID">279</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fPreviewWindow</string>
+ <string key="label">fScaleToScreenToggleButton</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="616825745"/>
+ <reference key="destination" ref="81685190"/>
</object>
- <int key="connectionID">244</int>
+ <int key="connectionID">277</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fEncodingControlBox</string>
+ <string key="label">fPictureSlider</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="768906858"/>
+ <reference key="destination" ref="396925210"/>
</object>
- <int key="connectionID">253</int>
+ <int key="connectionID">211</int>
</object>
<object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">fPictureControlBox</string>
+ <object class="IBActionConnection" key="connection">
+ <string key="label">showPictureSettings:</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="92351498"/>
+ <reference key="destination" ref="141370142"/>
</object>
- <int key="connectionID">254</int>
+ <int key="connectionID">274</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fPictureViewArea</string>
+ <string key="label">fInfoField</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="289177107"/>
+ <reference key="destination" ref="628196212"/>
</object>
- <int key="connectionID">258</int>
+ <int key="connectionID">73</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fCancelPreviewMovieButton</string>
+ <string key="label">fGoToBeginningButton</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="569473100"/>
+ <reference key="destination" ref="897614796"/>
</object>
- <int key="connectionID">263</int>
+ <int key="connectionID">380</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fPictureSettingsToggleButton</string>
+ <string key="label">fMovieScrubberSlider</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="141370142"/>
+ <reference key="destination" ref="886140787"/>
</object>
- <int key="connectionID">273</int>
+ <int key="connectionID">371</int>
</object>
<object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">showPictureSettings:</string>
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">fMovieInfoField</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="141370142"/>
+ <reference key="destination" ref="964331174"/>
</object>
- <int key="connectionID">274</int>
+ <int key="connectionID">374</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fScaleToScreenToggleButton</string>
+ <string key="label">fGoToEndButton</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="81685190"/>
+ <reference key="destination" ref="894608246"/>
</object>
- <int key="connectionID">277</int>
+ <int key="connectionID">381</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
- <string key="label">toggleScaleToScreen:</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="81685190"/>
- </object>
- <int key="connectionID">279</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">fscaleInfoField</string>
+ <string key="label">moviePlaybackGoToEnd:</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="245200984"/>
+ <reference key="destination" ref="894608246"/>
</object>
- <int key="connectionID">282</int>
+ <int key="connectionID">383</int>
</object>
<object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">fMoviePlaybackControlBox</string>
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleMoviePreviewPlayPause:</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="700607930"/>
+ <reference key="destination" ref="102183813"/>
</object>
- <int key="connectionID">363</int>
+ <int key="connectionID">370</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<int key="connectionID">364</int>
</object>
<object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">fGoToStillPreviewButton</string>
+ <object class="IBActionConnection" key="connection">
+ <string key="label">moviePlaybackGoToBeginning:</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="630042886"/>
+ <reference key="destination" ref="897614796"/>
</object>
- <int key="connectionID">368</int>
+ <int key="connectionID">382</int>
</object>
<object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">pictureSliderChanged:</string>
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">fGoToStillPreviewButton</string>
<reference key="source" ref="355312334"/>
<reference key="destination" ref="630042886"/>
</object>
- <int key="connectionID">369</int>
+ <int key="connectionID">368</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
- <string key="label">toggleMoviePreviewPlayPause:</string>
+ <string key="label">previewScrubberChanged:</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="102183813"/>
+ <reference key="destination" ref="886140787"/>
</object>
- <int key="connectionID">370</int>
+ <int key="connectionID">384</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fMovieScrubberSlider</string>
+ <string key="label">fMoviePlaybackControlBox</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="886140787"/>
+ <reference key="destination" ref="700607930"/>
</object>
- <int key="connectionID">371</int>
+ <int key="connectionID">363</int>
</object>
<object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">fMovieInfoField</string>
+ <object class="IBActionConnection" key="connection">
+ <string key="label">showPicturesPreview:</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="964331174"/>
+ <reference key="destination" ref="630042886"/>
</object>
- <int key="connectionID">374</int>
+ <int key="connectionID">396</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fGoToBeginningButton</string>
+ <string key="label">fMovieCreationProgressIndicator</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="897614796"/>
+ <reference key="destination" ref="196868285"/>
</object>
- <int key="connectionID">380</int>
+ <int key="connectionID">214</int>
</object>
<object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">fGoToEndButton</string>
+ <object class="IBActionConnection" key="connection">
+ <string key="label">cancelCreateMoviePreview:</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="894608246"/>
+ <reference key="destination" ref="569473100"/>
</object>
- <int key="connectionID">381</int>
+ <int key="connectionID">395</int>
</object>
<object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">moviePlaybackGoToBeginning:</string>
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">fPreviewMovieStatusField</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="897614796"/>
+ <reference key="destination" ref="986015194"/>
</object>
- <int key="connectionID">382</int>
+ <int key="connectionID">225</int>
</object>
<object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">moviePlaybackGoToEnd:</string>
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">fCancelPreviewMovieButton</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="894608246"/>
+ <reference key="destination" ref="569473100"/>
</object>
- <int key="connectionID">383</int>
+ <int key="connectionID">263</int>
</object>
<object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">previewScrubberChanged:</string>
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">fEncodingControlBox</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="886140787"/>
+ <reference key="destination" ref="768906858"/>
</object>
- <int key="connectionID">384</int>
+ <int key="connectionID">253</int>
</object>
<object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">cancelCreateMoviePreview:</string>
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">fMovieView</string>
<reference key="source" ref="355312334"/>
- <reference key="destination" ref="569473100"/>
+ <reference key="destination" ref="48693112"/>
</object>
- <int key="connectionID">395</int>
+ <int key="connectionID">208</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<reference key="object" ref="49161063"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="289177107"/>
- </object>
- <reference key="parent" ref="616825745"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">257</int>
- <reference key="object" ref="289177107"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="844127024"/>
- <reference ref="92351498"/>
+ <reference ref="700607930"/>
<reference ref="768906858"/>
+ <reference ref="92351498"/>
<reference ref="48693112"/>
- <reference ref="700607930"/>
- </object>
- <reference key="parent" ref="49161063"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">252</int>
- <reference key="object" ref="768906858"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="196868285"/>
- <reference ref="986015194"/>
- <reference ref="569473100"/>
- </object>
- <reference key="parent" ref="289177107"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">213</int>
- <reference key="object" ref="196868285"/>
- <reference key="parent" ref="768906858"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">223</int>
- <reference key="object" ref="986015194"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="304208899"/>
</object>
- <reference key="parent" ref="768906858"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">224</int>
- <reference key="object" ref="304208899"/>
- <reference key="parent" ref="986015194"/>
+ <reference key="parent" ref="616825745"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">251</int>
- <reference key="object" ref="92351498"/>
+ <int key="objectID">335</int>
+ <reference key="object" ref="700607930"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="628196212"/>
- <reference ref="396925210"/>
- <reference ref="245200984"/>
- <reference ref="66510867"/>
- <reference ref="598619000"/>
- <reference ref="81685190"/>
- <reference ref="798240356"/>
- <reference ref="141370142"/>
+ <reference ref="102183813"/>
+ <reference ref="894608246"/>
+ <reference ref="897614796"/>
+ <reference ref="964331174"/>
+ <reference ref="886140787"/>
+ <reference ref="630042886"/>
</object>
- <reference key="parent" ref="289177107"/>
+ <reference key="parent" ref="49161063"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">38</int>
- <reference key="object" ref="628196212"/>
+ <int key="objectID">365</int>
+ <reference key="object" ref="630042886"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="921881842"/>
+ <reference ref="999505395"/>
</object>
- <reference key="parent" ref="92351498"/>
+ <reference key="parent" ref="700607930"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">215</int>
- <reference key="object" ref="798240356"/>
+ <int key="objectID">375</int>
+ <reference key="object" ref="897614796"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="975305481"/>
+ <reference ref="913339095"/>
</object>
- <reference key="parent" ref="92351498"/>
+ <reference key="parent" ref="700607930"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">234</int>
- <reference key="object" ref="66510867"/>
+ <int key="objectID">378</int>
+ <reference key="object" ref="894608246"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="567286013"/>
+ <reference ref="117507013"/>
</object>
- <reference key="parent" ref="92351498"/>
+ <reference key="parent" ref="700607930"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">226</int>
- <reference key="object" ref="598619000"/>
+ <int key="objectID">361</int>
+ <reference key="object" ref="102183813"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="953108737"/>
+ <reference ref="19809002"/>
</object>
- <reference key="parent" ref="92351498"/>
+ <reference key="parent" ref="700607930"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">209</int>
- <reference key="object" ref="396925210"/>
+ <int key="objectID">372</int>
+ <reference key="object" ref="964331174"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="639767004"/>
+ <reference ref="113790059"/>
</object>
- <reference key="parent" ref="92351498"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">210</int>
- <reference key="object" ref="639767004"/>
- <reference key="parent" ref="396925210"/>
+ <reference key="parent" ref="700607930"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">227</int>
- <reference key="object" ref="953108737"/>
+ <int key="objectID">341</int>
+ <reference key="object" ref="886140787"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="501672847"/>
+ <reference ref="493667684"/>
</object>
- <reference key="parent" ref="598619000"/>
+ <reference key="parent" ref="700607930"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">228</int>
- <reference key="object" ref="501672847"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="372655630"/>
- <reference ref="607756368"/>
- <reference ref="272743761"/>
- </object>
- <reference key="parent" ref="953108737"/>
+ <int key="objectID">346</int>
+ <reference key="object" ref="493667684"/>
+ <reference key="parent" ref="886140787"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">231</int>
- <reference key="object" ref="372655630"/>
- <reference key="parent" ref="501672847"/>
+ <int key="objectID">373</int>
+ <reference key="object" ref="113790059"/>
+ <reference key="parent" ref="964331174"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">230</int>
- <reference key="object" ref="607756368"/>
- <reference key="parent" ref="501672847"/>
+ <int key="objectID">362</int>
+ <reference key="object" ref="19809002"/>
+ <reference key="parent" ref="102183813"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">229</int>
- <reference key="object" ref="272743761"/>
- <reference key="parent" ref="501672847"/>
+ <int key="objectID">379</int>
+ <reference key="object" ref="117507013"/>
+ <reference key="parent" ref="894608246"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">235</int>
- <reference key="object" ref="567286013"/>
- <reference key="parent" ref="66510867"/>
+ <int key="objectID">376</int>
+ <reference key="object" ref="913339095"/>
+ <reference key="parent" ref="897614796"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">216</int>
- <reference key="object" ref="975305481"/>
- <reference key="parent" ref="798240356"/>
+ <int key="objectID">366</int>
+ <reference key="object" ref="999505395"/>
+ <reference key="parent" ref="630042886"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">165</int>
- <reference key="object" ref="921881842"/>
- <reference key="parent" ref="628196212"/>
+ <int key="objectID">252</int>
+ <reference key="object" ref="768906858"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="569473100"/>
+ <reference ref="986015194"/>
+ <reference ref="196868285"/>
+ </object>
+ <reference key="parent" ref="49161063"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">261</int>
</object>
<reference key="parent" ref="768906858"/>
</object>
+ <object class="IBObjectRecord">
+ <int key="objectID">223</int>
+ <reference key="object" ref="986015194"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="304208899"/>
+ </object>
+ <reference key="parent" ref="768906858"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">213</int>
+ <reference key="object" ref="196868285"/>
+ <reference key="parent" ref="768906858"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">224</int>
+ <reference key="object" ref="304208899"/>
+ <reference key="parent" ref="986015194"/>
+ </object>
<object class="IBObjectRecord">
<int key="objectID">262</int>
<reference key="object" ref="908165435"/>
<reference key="parent" ref="569473100"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">271</int>
- <reference key="object" ref="141370142"/>
+ <int key="objectID">251</int>
+ <reference key="object" ref="92351498"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="606007744"/>
+ <reference ref="66510867"/>
+ <reference ref="598619000"/>
+ <reference ref="141370142"/>
+ <reference ref="798240356"/>
+ <reference ref="81685190"/>
+ <reference ref="245200984"/>
+ <reference ref="396925210"/>
+ <reference ref="628196212"/>
+ </object>
+ <reference key="parent" ref="49161063"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">38</int>
+ <reference key="object" ref="628196212"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="921881842"/>
</object>
<reference key="parent" ref="92351498"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">272</int>
- <reference key="object" ref="606007744"/>
- <reference key="parent" ref="141370142"/>
+ <int key="objectID">165</int>
+ <reference key="object" ref="921881842"/>
+ <reference key="parent" ref="628196212"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">275</int>
- <reference key="object" ref="81685190"/>
+ <int key="objectID">209</int>
+ <reference key="object" ref="396925210"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="847033897"/>
+ <reference ref="639767004"/>
</object>
<reference key="parent" ref="92351498"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">276</int>
- <reference key="object" ref="847033897"/>
- <reference key="parent" ref="81685190"/>
+ <int key="objectID">210</int>
+ <reference key="object" ref="639767004"/>
+ <reference key="parent" ref="396925210"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">280</int>
<reference key="parent" ref="245200984"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">179</int>
- <reference key="object" ref="844127024"/>
+ <int key="objectID">275</int>
+ <reference key="object" ref="81685190"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="955430771"/>
+ <reference ref="847033897"/>
</object>
- <reference key="parent" ref="289177107"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">180</int>
- <reference key="object" ref="955430771"/>
- <reference key="parent" ref="844127024"/>
+ <reference key="parent" ref="92351498"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">207</int>
- <reference key="object" ref="48693112"/>
- <reference key="parent" ref="289177107"/>
+ <int key="objectID">276</int>
+ <reference key="object" ref="847033897"/>
+ <reference key="parent" ref="81685190"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">335</int>
- <reference key="object" ref="700607930"/>
+ <int key="objectID">215</int>
+ <reference key="object" ref="798240356"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="886140787"/>
- <reference ref="964331174"/>
- <reference ref="102183813"/>
- <reference ref="894608246"/>
- <reference ref="630042886"/>
- <reference ref="897614796"/>
+ <reference ref="975305481"/>
</object>
- <reference key="parent" ref="289177107"/>
+ <reference key="parent" ref="92351498"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">341</int>
- <reference key="object" ref="886140787"/>
+ <int key="objectID">216</int>
+ <reference key="object" ref="975305481"/>
+ <reference key="parent" ref="798240356"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">271</int>
+ <reference key="object" ref="141370142"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="493667684"/>
+ <reference ref="606007744"/>
</object>
- <reference key="parent" ref="700607930"/>
+ <reference key="parent" ref="92351498"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">346</int>
- <reference key="object" ref="493667684"/>
- <reference key="parent" ref="886140787"/>
+ <int key="objectID">272</int>
+ <reference key="object" ref="606007744"/>
+ <reference key="parent" ref="141370142"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">361</int>
- <reference key="object" ref="102183813"/>
+ <int key="objectID">226</int>
+ <reference key="object" ref="598619000"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="19809002"/>
+ <reference ref="953108737"/>
</object>
- <reference key="parent" ref="700607930"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">362</int>
- <reference key="object" ref="19809002"/>
- <reference key="parent" ref="102183813"/>
+ <reference key="parent" ref="92351498"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">365</int>
- <reference key="object" ref="630042886"/>
+ <int key="objectID">227</int>
+ <reference key="object" ref="953108737"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="999505395"/>
+ <reference ref="501672847"/>
</object>
- <reference key="parent" ref="700607930"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">366</int>
- <reference key="object" ref="999505395"/>
- <reference key="parent" ref="630042886"/>
+ <reference key="parent" ref="598619000"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">372</int>
- <reference key="object" ref="964331174"/>
+ <int key="objectID">228</int>
+ <reference key="object" ref="501672847"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="113790059"/>
+ <reference ref="272743761"/>
+ <reference ref="607756368"/>
+ <reference ref="372655630"/>
</object>
- <reference key="parent" ref="700607930"/>
+ <reference key="parent" ref="953108737"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">373</int>
- <reference key="object" ref="113790059"/>
- <reference key="parent" ref="964331174"/>
+ <int key="objectID">231</int>
+ <reference key="object" ref="372655630"/>
+ <reference key="parent" ref="501672847"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">375</int>
- <reference key="object" ref="897614796"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="913339095"/>
- </object>
- <reference key="parent" ref="700607930"/>
+ <int key="objectID">230</int>
+ <reference key="object" ref="607756368"/>
+ <reference key="parent" ref="501672847"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">376</int>
- <reference key="object" ref="913339095"/>
- <reference key="parent" ref="897614796"/>
+ <int key="objectID">229</int>
+ <reference key="object" ref="272743761"/>
+ <reference key="parent" ref="501672847"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">378</int>
- <reference key="object" ref="894608246"/>
+ <int key="objectID">234</int>
+ <reference key="object" ref="66510867"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="117507013"/>
+ <reference ref="567286013"/>
</object>
- <reference key="parent" ref="700607930"/>
+ <reference key="parent" ref="92351498"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">379</int>
- <reference key="object" ref="117507013"/>
- <reference key="parent" ref="894608246"/>
+ <int key="objectID">235</int>
+ <reference key="object" ref="567286013"/>
+ <reference key="parent" ref="66510867"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">207</int>
+ <reference key="object" ref="48693112"/>
+ <reference key="parent" ref="49161063"/>
</object>
</object>
</object>
<string>-2.IBPluginDependency</string>
<string>-3.IBPluginDependency</string>
<string>165.IBPluginDependency</string>
- <string>179.IBPluginDependency</string>
- <string>180.IBPluginDependency</string>
<string>207.IBPluginDependency</string>
<string>209.IBPluginDependency</string>
<string>210.IBPluginDependency</string>
<string>252.IBViewIntegration.shadowColor</string>
<string>252.IBViewIntegration.shadowOffsetHeight</string>
<string>252.IBViewIntegration.shadowOffsetWidth</string>
- <string>257.IBPluginDependency</string>
<string>261.IBAttributePlaceholdersKey</string>
<string>261.IBPluginDependency</string>
<string>262.IBPluginDependency</string>
<string>5.IBPluginDependency</string>
<string>5.IBWindowTemplateEditedContentRect</string>
<string>6.IBPluginDependency</string>
+ <string>6.IBViewIntegration.shadowBlurRadius</string>
+ <string>6.IBViewIntegration.shadowColor</string>
+ <string>6.IBViewIntegration.shadowOffsetHeight</string>
+ <string>6.IBViewIntegration.shadowOffsetWidth</string>
</object>
- <object class="NSMutableArray" key="dict.values">
+ <object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.QTKitIBPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="864448722"/>
<integer value="0"/>
<integer value="0"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSMutableDictionary">
<string key="NS.key.0">ToolTip</string>
<object class="IBToolTipAttribute" key="NS.object.0">
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{262, 474}, {480, 360}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <real value="0.0"/>
+ <reference ref="864448722"/>
+ <real value="0.0"/>
+ <real value="0.0"/>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
<reference key="dict.values" ref="0"/>
</object>
<nil key="sourceID"/>
- <int key="maxID">395</int>
+ <int key="maxID">396</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">PreviewController</string>
+ <string key="superclassName">NSWindowController</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>cancelCreateMoviePreview:</string>
+ <string>createMoviePreview:</string>
+ <string>moviePlaybackGoBackwardOneFrame:</string>
+ <string>moviePlaybackGoForwardOneFrame:</string>
+ <string>moviePlaybackGoToBeginning:</string>
+ <string>moviePlaybackGoToEnd:</string>
+ <string>pictureSliderChanged:</string>
+ <string>previewDurationPopUpChanged:</string>
+ <string>previewScrubberChanged:</string>
+ <string>settingsChanged:</string>
+ <string>showMoviePreview:</string>
+ <string>showPictureSettings:</string>
+ <string>showPicturesPreview:</string>
+ <string>toggleMoviePreviewPlayPause:</string>
+ <string>toggleScaleToScreen:</string>
+ </object>
+ <object class="NSArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>NSString</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="actionInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>cancelCreateMoviePreview:</string>
+ <string>createMoviePreview:</string>
+ <string>moviePlaybackGoBackwardOneFrame:</string>
+ <string>moviePlaybackGoForwardOneFrame:</string>
+ <string>moviePlaybackGoToBeginning:</string>
+ <string>moviePlaybackGoToEnd:</string>
+ <string>pictureSliderChanged:</string>
+ <string>previewDurationPopUpChanged:</string>
+ <string>previewScrubberChanged:</string>
+ <string>settingsChanged:</string>
+ <string>showMoviePreview:</string>
+ <string>showPictureSettings:</string>
+ <string>showPicturesPreview:</string>
+ <string>toggleMoviePreviewPlayPause:</string>
+ <string>toggleScaleToScreen:</string>
+ </object>
+ <object class="NSArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBActionInfo">
+ <string key="name">cancelCreateMoviePreview:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">createMoviePreview:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">moviePlaybackGoBackwardOneFrame:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">moviePlaybackGoForwardOneFrame:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">moviePlaybackGoToBeginning:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">moviePlaybackGoToEnd:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">pictureSliderChanged:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">previewDurationPopUpChanged:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">previewScrubberChanged:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">settingsChanged:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">showMoviePreview:</string>
+ <string key="candidateClassName">NSString</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">showPictureSettings:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">showPicturesPreview:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">toggleMoviePreviewPlayPause:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">toggleScaleToScreen:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>fCancelPreviewMovieButton</string>
+ <string>fCreatePreviewMovieButton</string>
+ <string>fEncodingControlBox</string>
+ <string>fGoBackwardOneFrameButton</string>
+ <string>fGoForwardOneFrameButton</string>
+ <string>fGoToBeginningButton</string>
+ <string>fGoToEndButton</string>
+ <string>fGoToStillPreviewButton</string>
+ <string>fInfoField</string>
+ <string>fMovieCreationProgressIndicator</string>
+ <string>fMovieInfoField</string>
+ <string>fMoviePlaybackControlBox</string>
+ <string>fMovieScrubberSlider</string>
+ <string>fMovieView</string>
+ <string>fPictureControlBox</string>
+ <string>fPictureSettingsToggleButton</string>
+ <string>fPictureSlider</string>
+ <string>fPlayPauseButton</string>
+ <string>fPreviewMovieLengthPopUp</string>
+ <string>fPreviewMovieStatusField</string>
+ <string>fScaleToScreenToggleButton</string>
+ <string>fShowPreviewMovieButton</string>
+ <string>fscaleInfoField</string>
+ </object>
+ <object class="NSArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ <string>NSBox</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ <string>NSTextField</string>
+ <string>NSProgressIndicator</string>
+ <string>NSTextField</string>
+ <string>NSBox</string>
+ <string>NSSlider</string>
+ <string>QTMovieView</string>
+ <string>NSBox</string>
+ <string>NSButton</string>
+ <string>NSSlider</string>
+ <string>NSButton</string>
+ <string>NSPopUpButton</string>
+ <string>NSTextField</string>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ <string>NSTextField</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="toOneOutletInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>fCancelPreviewMovieButton</string>
+ <string>fCreatePreviewMovieButton</string>
+ <string>fEncodingControlBox</string>
+ <string>fGoBackwardOneFrameButton</string>
+ <string>fGoForwardOneFrameButton</string>
+ <string>fGoToBeginningButton</string>
+ <string>fGoToEndButton</string>
+ <string>fGoToStillPreviewButton</string>
+ <string>fInfoField</string>
+ <string>fMovieCreationProgressIndicator</string>
+ <string>fMovieInfoField</string>
+ <string>fMoviePlaybackControlBox</string>
+ <string>fMovieScrubberSlider</string>
+ <string>fMovieView</string>
+ <string>fPictureControlBox</string>
+ <string>fPictureSettingsToggleButton</string>
+ <string>fPictureSlider</string>
+ <string>fPlayPauseButton</string>
+ <string>fPreviewMovieLengthPopUp</string>
+ <string>fPreviewMovieStatusField</string>
+ <string>fScaleToScreenToggleButton</string>
+ <string>fShowPreviewMovieButton</string>
+ <string>fscaleInfoField</string>
+ </object>
+ <object class="NSArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fCancelPreviewMovieButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fCreatePreviewMovieButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fEncodingControlBox</string>
+ <string key="candidateClassName">NSBox</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fGoBackwardOneFrameButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fGoForwardOneFrameButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fGoToBeginningButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fGoToEndButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fGoToStillPreviewButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fInfoField</string>
+ <string key="candidateClassName">NSTextField</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fMovieCreationProgressIndicator</string>
+ <string key="candidateClassName">NSProgressIndicator</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fMovieInfoField</string>
+ <string key="candidateClassName">NSTextField</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fMoviePlaybackControlBox</string>
+ <string key="candidateClassName">NSBox</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fMovieScrubberSlider</string>
+ <string key="candidateClassName">NSSlider</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fMovieView</string>
+ <string key="candidateClassName">QTMovieView</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fPictureControlBox</string>
+ <string key="candidateClassName">NSBox</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fPictureSettingsToggleButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fPictureSlider</string>
+ <string key="candidateClassName">NSSlider</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fPlayPauseButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fPreviewMovieLengthPopUp</string>
+ <string key="candidateClassName">NSPopUpButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fPreviewMovieStatusField</string>
+ <string key="candidateClassName">NSTextField</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fScaleToScreenToggleButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fShowPreviewMovieButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">fscaleInfoField</string>
+ <string key="candidateClassName">NSTextField</string>
+ </object>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">./Classes/PreviewController.h</string>
+ </object>
+ </object>
+ </object>
</object>
- <object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>NSMenuCheckmark</string>
<string>NSMenuMixedState</string>
+ <string>next-p</string>
+ <string>pause-p</string>
+ <string>play-p</string>
+ <string>prev-p</string>
</object>
- <object class="NSMutableArray" key="dict.values">
+ <object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
- <string>{9, 8}</string>
- <string>{7, 2}</string>
+ <string>{11, 11}</string>
+ <string>{10, 3}</string>
+ <string>{48, 48}</string>
+ <string>{48, 48}</string>
+ <string>{48, 48}</string>
+ <string>{48, 48}</string>
</object>
</object>
</data>
/* Built-In Preset Dictionaries (one for each built in preset) */
- (NSDictionary *)createDevicesPresetFolder;
- (NSDictionary *)createRegularPresetFolder;
-- (NSDictionary *)createLegacyPresetFolder;
- (NSDictionary *)createiPadPreset;
-- (NSDictionary *)createiPhone4Preset;
-- (NSDictionary *)createAppleTv2Preset;
+- (NSDictionary *)createAppleTV2Preset;
- (NSDictionary *)createAppleTVPreset;
-- (NSDictionary *)createAppleTv3Preset;
-- (NSDictionary *)createAppleUniversalPreset;
-- (NSDictionary *)createClassicPreset;
-- (NSDictionary *)createiPhonePreset;
-- (NSDictionary *)createIpodHighPreset;
-- (NSDictionary *)createIpodLowPreset;
+- (NSDictionary *)createAppleTV3Preset;
+- (NSDictionary *)createUniversalPreset;
+- (NSDictionary *)createiPhoneiPodtouchPreset;
+- (NSDictionary *)createiPodPreset;
- (NSDictionary *)createNormalPreset;
- (NSDictionary *)createHighProfilePreset;
-- (NSDictionary *)createAndroidMidPreset;
-- (NSDictionary *)createAndroidHighPreset;
+- (NSDictionary *)createAndroidPreset;
+- (NSDictionary *)createAndroidTabletPreset;
@end
/* Built in preset folders at the root of the hierarchy */
[UserPresets addObject:[self createDevicesPresetFolder]];
[UserPresets addObject:[self createRegularPresetFolder]];
- [UserPresets addObject:[self createLegacyPresetFolder]];
/* Independent presets at the root hierarchy level would go here */
- (NSDictionary *)createDevicesPresetFolder
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
-/*Set whether or not this is a folder, 1 is bool for folder*/
- [preset setObject:[NSNumber numberWithBool: YES] forKey:@"Folder"];
-
/* Get the New Preset Name from the field in the AddPresetPanel */
[preset setObject:@"Devices" forKey:@"PresetName"];
/*Set whether or not this is a user preset where 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
-
- /*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
+ [preset setObject:[NSNumber numberWithBool: YES] forKey:@"Folder"];
/* Lets initalize the child array of dictionaries for folders, this
is an array of dictionaries much like the root level of presets and
may contain folders and presets alike, etc.*/
NSMutableArray *childrenArray = [[NSMutableArray alloc] init];
/* we actually call the methods for the nests here */
- [childrenArray addObject:[self createAppleUniversalPreset]];
- [childrenArray addObject:[self createIpodLowPreset]];
- [childrenArray addObject:[self createiPhonePreset]];
- [childrenArray addObject:[self createiPhone4Preset]];
+ [childrenArray addObject:[self createUniversalPreset]];
+ [childrenArray addObject:[self createiPodPreset]];
+ [childrenArray addObject:[self createiPhoneiPodtouchPreset]];
[childrenArray addObject:[self createiPadPreset]];
[childrenArray addObject:[self createAppleTVPreset]];
- [childrenArray addObject:[self createAppleTv2Preset]];
- [childrenArray addObject:[self createAppleTv3Preset]];
- [childrenArray addObject:[self createAndroidMidPreset]];
- [childrenArray addObject:[self createAndroidHighPreset]];
+ [childrenArray addObject:[self createAppleTV2Preset]];
+ [childrenArray addObject:[self createAppleTV3Preset]];
+ [childrenArray addObject:[self createAndroidPreset]];
+ [childrenArray addObject:[self createAndroidTabletPreset]];
[preset setObject:[NSMutableArray arrayWithArray: childrenArray] forKey:@"ChildrenArray"];
- (NSDictionary *)createRegularPresetFolder
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
-/*Set whether or not this is a folder, 1 is bool for folder*/
- [preset setObject:[NSNumber numberWithBool: YES] forKey:@"Folder"];
-
/* Get the New Preset Name from the field in the AddPresetPanel */
[preset setObject:@"Regular" forKey:@"PresetName"];
/*Set whether or not this is a user preset where 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
-
- /*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
+ [preset setObject:[NSNumber numberWithBool: YES] forKey:@"Folder"];
/* Lets initalize the child array of dictionaries for folders, this
is an array of dictionaries much like the root level of presets and
return preset;
}
-- (NSDictionary *)createLegacyPresetFolder
-{
- NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
-/*Set whether or not this is a folder, 1 is bool for folder*/
- [preset setObject:[NSNumber numberWithBool: YES] forKey:@"Folder"];
-
-
- /* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"Legacy" forKey:@"PresetName"];
-
- /*Set whether or not this is a user preset where 0 is factory, 1 is user*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
-
- /*Set whether or not this is default, at creation set to 0*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-
- /* Lets initalize the child array of dictionaries for folders, this
- is an array of dictionaries much like the root level of presets and
- may contain folders and presets alike, etc.*/
- NSMutableArray *childrenArray = [[NSMutableArray alloc] init];
- /* we actually call the methods for the nests here */
- [childrenArray addObject:[self createClassicPreset]];
- [childrenArray addObject:[self createIpodHighPreset]];
- [preset setObject:[NSMutableArray arrayWithArray: childrenArray] forKey:@"ChildrenArray"];
-
- [childrenArray autorelease];
-
-
-
- [preset autorelease];
- return preset;
-}
-
-
#pragma mark -
#pragma mark Built In Preset Definitions
/*Set whether or not this is a user preset where 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
- /*Set whether or not this is a folder, 1 is bool for folder*/
- [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
- /*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
/* Get the New Preset Description from the field in the AddPresetPanel */
[preset setObject:@"HandBrake's settings for the AppleTV and 2009's iPhone and iPod Touch lineup. Provides a good balance between quality and file size, and pushes the devices to their limits. Includes Dolby Digital 5.1 AC3 sound for the AppleTV." forKey:@"PresetDescription"];
/* File Format */
[preset setObject:@"MP4 file" forKey:@"FileFormat"];
-
- /* 64-bit MP4 file */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4LargeFile"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4iPodCompatible"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
/* x264 Option String (We can use this to tweak the appleTV output)*/
- [preset setObject:@"cabac=0:ref=2:me=umh:b-pyramid=none:b-adapt=2:weightb=0:trellis=0:weightp=0:vbv-maxrate=9500:vbv-bufsize=9500" forKey:@"x264Option"];
+ [preset setObject:@"" forKey:@"x264Option"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"x264UseAdvancedOptions"];
+ [preset setObject:@"medium" forKey:@"x264Preset"];
+ [preset setObject:@"" forKey:@"x264Tune"];
+ [preset setObject:@"cabac=0:ref=2:b-pyramid=none:weightb=0:weightp=0:vbv-maxrate=9500:vbv-bufsize=9500" forKey:@"x264OptionExtra"];
+ [preset setObject:@"high" forKey:@"h264Profile"];
+ [preset setObject:@"3.1" forKey:@"h264Level"];
/* Video quality */
- [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
[preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
[preset setObject:[NSNumber numberWithFloat:20.0] forKey:@"VideoQualitySlider"];
/* Video framerate */
- [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
- [preset setObject:@"vfr" forKey:@"VideoFramerateMode"];
+ [preset setObject:@"30" forKey:@"VideoFramerate"];
+ [preset setObject:@"pfr" forKey:@"VideoFramerateMode"];
/* GrayScale */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
[preset setObject:[NSNumber numberWithInt:2] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"PictureModulus"];
/* Explicitly set the filters for built-in presets */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
return preset;
}
-- (NSDictionary *)createAppleUniversalPreset
+- (NSDictionary *)createUniversalPreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/*Set whether or not this is a user preset where 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
- /*Set whether or not this is a folder, 1 is bool for folder*/
- [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
- /*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
/* Get the New Preset Description from the field in the AddPresetPanel */
[preset setObject:@"HandBrake's universally compatible, full resolution settings for all current Apple devices: iPod (6G and up), iPhone, AppleTV, and Macs" forKey:@"PresetDescription"];
/* File Format */
[preset setObject:@"MP4 file" forKey:@"FileFormat"];
-
- /* 64-bit MP4 file */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4LargeFile"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4iPodCompatible"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
/* x264 Option String (We can use this to tweak the appleTV output)*/
- [preset setObject:@"cabac=0:ref=2:me=umh:bframes=0:weightp=0:8x8dct=0:trellis=0:subme=6" forKey:@"x264Option"];
+ [preset setObject:@"" forKey:@"x264Option"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"x264UseAdvancedOptions"];
+ [preset setObject:@"fast" forKey:@"x264Preset"];
+ [preset setObject:@"" forKey:@"x264Tune"];
+ [preset setObject:@"" forKey:@"x264OptionExtra"];
+ [preset setObject:@"baseline" forKey:@"h264Profile"];
+ [preset setObject:@"3.0" forKey:@"h264Level"];
/* Video quality */
- [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
[preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
[preset setObject:[NSNumber numberWithFloat:20.0] forKey:@"VideoQualitySlider"];
/* Video framerate */
- [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
- [preset setObject:@"vfr" forKey:@"VideoFramerateMode"];
+ [preset setObject:@"30" forKey:@"VideoFramerate"];
+ [preset setObject:@"pfr" forKey:@"VideoFramerateMode"];
/* GrayScale */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
[preset setObject:[NSNumber numberWithInt:2] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"PictureModulus"];
/* Explicitly set the filters for built-in presets */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
/*Set whether or not this is a user preset where 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
- /*Set whether or not this is a folder, 1 is bool for folder*/
- [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
- /*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
/* Get the New Preset Description from the field in the AddPresetPanel */
[preset setObject:@"HandBrake's preset for the iPad (all generations) is optimized for a good balance between quality and filesize." forKey:@"PresetDescription"];
/* File Format */
[preset setObject:@"MP4 file" forKey:@"FileFormat"];
-
- /* 64-bit MP4 file */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4LargeFile"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4iPodCompatible"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
/* x264 Option String (We can use this to tweak the output)*/
[preset setObject:@"" forKey:@"x264Option"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"x264UseAdvancedOptions"];
+ [preset setObject:@"medium" forKey:@"x264Preset"];
+ [preset setObject:@"" forKey:@"x264Tune"];
+ [preset setObject:@"" forKey:@"x264OptionExtra"];
+ [preset setObject:@"high" forKey:@"h264Profile"];
+ [preset setObject:@"3.1" forKey:@"h264Level"];
/* Video quality */
- [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
[preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
[preset setObject:[NSNumber numberWithFloat:20.0] forKey:@"VideoQualitySlider"];
/* Video framerate */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
[preset setObject:[NSNumber numberWithInt:2] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"PictureModulus"];
/* Explicitly set the filters for built-in presets */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
return preset;
}
-- (NSDictionary *)createiPhone4Preset
-{
- NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
-
- /* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"iPhone 4" forKey:@"PresetName"];
-
- /*Set whether or not this is a user preset where 0 is factory, 1 is user*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
- /*Set whether or not this is a folder, 1 is bool for folder*/
- [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
- /*Set whether or not this is default, at creation set to 0*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
-
- /* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's preset for the iPhone 4 is optimized for viewing on its 960x480 display." forKey:@"PresetDescription"];
-
- /* File Format */
- [preset setObject:@"MP4 file" forKey:@"FileFormat"];
-
- /* 64-bit MP4 file */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4LargeFile"];
-
- /* Chapter Markers*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
-
- /* Video encoder */
- [preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
-
- /* x264 Option String (We can use this to tweak the output)*/
- [preset setObject:@"" forKey:@"x264Option"];
-
- /* Video quality */
- [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
- [preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
- [preset setObject:[NSNumber numberWithFloat:20.0] forKey:@"VideoQualitySlider"];
-
- /* Video framerate */
- [preset setObject:@"29.97 (NTSC Video)" forKey:@"VideoFramerate"];
- [preset setObject:@"pfr" forKey:@"VideoFramerateMode"];
-
- /* GrayScale */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
-
- /* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
-
- /* Basic Picture Settings */
- /* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
- [preset setObject:[NSNumber numberWithInt:960] forKey:@"PictureWidth"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:2] forKey:@"PicturePAR"];
-
- /* Explicitly set the filters for built-in presets */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
-
- /* Set crop settings here */
- /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
-
- /* Audio - Is done on a track by track basis, ONLY specifiy the tracks we want set as any track
- * not listed will be set to "None" and not encoded */
- NSMutableArray *audioListArray = [[NSMutableArray alloc] init];
-
- /* Track 1 */
- NSMutableDictionary *audioTrack1Array = [[NSMutableDictionary alloc] init];
- [audioTrack1Array setObject:[NSNumber numberWithInt:1] forKey:@"AudioTrack"];
- [audioTrack1Array setObject:@"AAC (faac)" forKey:@"AudioEncoder"];
- [audioTrack1Array setObject:@"Dolby Pro Logic II" forKey:@"AudioMixdown"];
- [audioTrack1Array setObject:@"Auto" forKey:@"AudioSamplerate"];
- [audioTrack1Array setObject:@"160" forKey:@"AudioBitrate"];
- [audioTrack1Array setObject:[NSNumber numberWithFloat:0.0] forKey:@"AudioTrackDRCSlider"];
- [audioTrack1Array autorelease];
- [audioListArray addObject:audioTrack1Array];
-
- [preset setObject:[NSMutableArray arrayWithArray: audioListArray] forKey:@"AudioList"];
-
- /* Subtitles*/
- [preset setObject:@"None" forKey:@"Subtitles"];
-
- [preset autorelease];
- return preset;
-}
-
-- (NSDictionary *)createAppleTv2Preset
+- (NSDictionary *)createAppleTV2Preset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/*Set whether or not this is a user preset where 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
- /*Set whether or not this is a folder, 1 is bool for folder*/
- [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
- /*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
/* Get the New Preset Description from the field in the AddPresetPanel */
[preset setObject:@"HandBrake's preset for the Apple TV (2nd gen) is optimized for viewing on its 1280x720 display." forKey:@"PresetDescription"];
/* File Format */
[preset setObject:@"MP4 file" forKey:@"FileFormat"];
-
- /* 64-bit MP4 file */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4LargeFile"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4LargeFile"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4iPodCompatible"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
/* x264 Option String (We can use this to tweak the output)*/
[preset setObject:@"" forKey:@"x264Option"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"x264UseAdvancedOptions"];
+ [preset setObject:@"medium" forKey:@"x264Preset"];
+ [preset setObject:@"" forKey:@"x264Tune"];
+ [preset setObject:@"" forKey:@"x264OptionExtra"];
+ [preset setObject:@"high" forKey:@"h264Profile"];
+ [preset setObject:@"3.1" forKey:@"h264Level"];
/* Video quality */
- [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
[preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
[preset setObject:[NSNumber numberWithFloat:20.0] forKey:@"VideoQualitySlider"];
/* Video framerate */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
[preset setObject:[NSNumber numberWithInt:2] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"PictureModulus"];
/* Explicitly set the filters for built-in presets */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
return preset;
}
-- (NSDictionary *)createAppleTv3Preset
+- (NSDictionary *)createAppleTV3Preset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/*Set whether or not this is a user preset where 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
- /*Set whether or not this is a folder, 1 is bool for folder*/
- [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
- /*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
/* Get the New Preset Description from the field in the AddPresetPanel */
[preset setObject:@"HandBrake's preset for the Apple TV (3rd gen) is optimized for up to 1080p playback." forKey:@"PresetDescription"];
/* File Format */
[preset setObject:@"MP4 file" forKey:@"FileFormat"];
-
- /* 64-bit MP4 file */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4LargeFile"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4LargeFile"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4iPodCompatible"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
/* x264 Option String (We can use this to tweak the output)*/
- [preset setObject:@"b-adapt=2" forKey:@"x264Option"];
+ [preset setObject:@"" forKey:@"x264Option"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"x264UseAdvancedOptions"];
+ [preset setObject:@"medium" forKey:@"x264Preset"];
+ [preset setObject:@"" forKey:@"x264Tune"];
+ [preset setObject:@"" forKey:@"x264OptionExtra"];
+ [preset setObject:@"high" forKey:@"h264Profile"];
+ [preset setObject:@"4.0" forKey:@"h264Level"];
/* Video quality */
- [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
[preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
[preset setObject:[NSNumber numberWithFloat:20.0] forKey:@"VideoQualitySlider"];
/* Video framerate */
return preset;
}
-
-- (NSDictionary *)createClassicPreset
-{
- NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
-
- /* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"Classic" forKey:@"PresetName"];
-
- /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
-
- /*Set whether or not this is default, at creation set to 0*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:2] forKey:@"UsesPictureSettings"];
-
- /* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's traditional, faster, lower-quality settings." forKey:@"PresetDescription"];
-
- /* File Format */
- [preset setObject:@"MP4 file" forKey:@"FileFormat"];
-
- /* Chapter Markers*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"ChapterMarkers"];
-
- /* Video encoder */
- [preset setObject:@"MPEG-4 (FFmpeg)" forKey:@"VideoEncoder"];
-
- /* x264 Option String */
- [preset setObject:@"" forKey:@"x264Option"];
-
- /* Video quality */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
- [preset setObject:@"1000" forKey:@"VideoAvgBitrate"];
-
- /* Video framerate */
- [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
- [preset setObject:@"vfr" forKey:@"VideoFramerateMode"];
-
- /* GrayScale */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
-
- /* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
-
- /*Picture Settings*/
- /* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
-
- /* Explicitly set the filters for built-in presets */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
-
- /* Set crop settings here */
- /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
-
- /* Audio - Is done on a track by track basis, ONLY specifiy the tracks we want set as any track
- * not listed will be set to "None" and not encoded */
- NSMutableArray *audioListArray = [[NSMutableArray alloc] init];
-
- /* Track 1 */
- NSMutableDictionary *audioTrack1Array = [[NSMutableDictionary alloc] init];
- [audioTrack1Array setObject:[NSNumber numberWithInt:1] forKey:@"AudioTrack"];
- [audioTrack1Array setObject:@"AAC (faac)" forKey:@"AudioEncoder"];
- [audioTrack1Array setObject:@"Dolby Pro Logic II" forKey:@"AudioMixdown"];
- [audioTrack1Array setObject:@"Auto" forKey:@"AudioSamplerate"];
- [audioTrack1Array setObject:@"160" forKey:@"AudioBitrate"];
- [audioTrack1Array setObject:[NSNumber numberWithFloat:0.0] forKey:@"AudioTrackDRCSlider"];
- [audioTrack1Array autorelease];
- [audioListArray addObject:audioTrack1Array];
-
- [preset setObject:[NSMutableArray arrayWithArray: audioListArray] forKey:@"AudioList"];
-
- /* Subtitles*/
- [preset setObject:@"None" forKey:@"Subtitles"];
-
- [preset autorelease];
- return preset;
-}
-
- (NSDictionary *)createHighProfilePreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
-
- /*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:2] forKey:@"UsesPictureSettings"];
+ [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
/* Get the New Preset Description from the field in the AddPresetPanel */
[preset setObject:@"HandBrake's general-purpose preset for High Profile H.264 video, with all the bells and whistles." forKey:@"PresetDescription"];
/* File Format */
[preset setObject:@"MP4 file" forKey:@"FileFormat"];
-
- /* 64-bit MP4 file */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4LargeFile"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4iPodCompatible"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
/* x264 Option String */
- [preset setObject:@"b-adapt=2:rc-lookahead=50" forKey:@"x264Option"];
+ [preset setObject:@"" forKey:@"x264Option"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"x264UseAdvancedOptions"];
+ [preset setObject:@"medium" forKey:@"x264Preset"];
+ [preset setObject:@"" forKey:@"x264Tune"];
+ [preset setObject:@"" forKey:@"x264OptionExtra"];
+ [preset setObject:@"high" forKey:@"h264Profile"];
+ [preset setObject:@"4.1" forKey:@"h264Level"];
/* Video quality */
+ [preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
- [preset setObject:@"1800" forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithFloat:20.0] forKey:@"VideoQualitySlider"];
/* Video framerate */
/*Picture Settings*/
/* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
[preset setObject:[NSNumber numberWithInt:2] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"PictureModulus"];
/* Explicitly set the filters for built-in presets */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
/* Set crop settings here */
/* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
return preset;
}
-- (NSDictionary *)createiPhonePreset
+- (NSDictionary *)createiPhoneiPodtouchPreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
-
- /*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
/* Get the New Preset Description from the field in the AddPresetPanel */
[preset setObject:@"HandBrake's settings for all iPhones and iPod Touches going back to the original iPhone 2G." forKey:@"PresetDescription"];
/* File Format */
[preset setObject:@"MP4 file" forKey:@"FileFormat"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4LargeFile"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4iPodCompatible"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
/* Video encoder */
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4iPodCompatible"];
+
/* x264 Option String */
- [preset setObject:@"cabac=0:ref=2:me=umh:bframes=0:weightp=0:subme=6:8x8dct=0:trellis=0" forKey:@"x264Option"];
+ [preset setObject:@"" forKey:@"x264Option"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"x264UseAdvancedOptions"];
+ [preset setObject:@"medium" forKey:@"x264Preset"];
+ [preset setObject:@"" forKey:@"x264Tune"];
+ [preset setObject:@"" forKey:@"x264OptionExtra"];
+ [preset setObject:@"high" forKey:@"h264Profile"];
+ [preset setObject:@"3.1" forKey:@"h264Level"];
/* Video quality */
+ [preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
- [preset setObject:@"960" forKey:@"VideoAvgBitrate"];
- [preset setObject:[NSNumber numberWithFloat:20.0] forKey:@"VideoQualitySlider"];
+ [preset setObject:[NSNumber numberWithFloat:22.0] forKey:@"VideoQualitySlider"];
/* Video framerate */
- [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
- [preset setObject:@"vfr" forKey:@"VideoFramerateMode"];
+ [preset setObject:@"29.97 (NTSC Video)" forKey:@"VideoFramerate"];
+ [preset setObject:@"pfr" forKey:@"VideoFramerateMode"];
/* GrayScale */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
/*Picture Settings*/
- /* Use a width of 480 for the iPhone*/
- [preset setObject:[NSNumber numberWithInt:480] forKey:@"PictureWidth"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
-
- /* Explicitly set the filters for built-in presets */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
-
- /* Set crop settings here */
- /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
-
- /* Audio - Is done on a track by track basis, ONLY specifiy the tracks we want set as any track
- * not listed will be set to "None" and not encoded */
- NSMutableArray *audioListArray = [[NSMutableArray alloc] init];
-
- /* Track 1 */
- NSMutableDictionary *audioTrack1Array = [[NSMutableDictionary alloc] init];
- [audioTrack1Array setObject:[NSNumber numberWithInt:1] forKey:@"AudioTrack"];
- [audioTrack1Array setObject:@"AAC (faac)" forKey:@"AudioEncoder"];
- [audioTrack1Array setObject:@"Dolby Pro Logic II" forKey:@"AudioMixdown"];
- [audioTrack1Array setObject:@"Auto" forKey:@"AudioSamplerate"];
- [audioTrack1Array setObject:@"128" forKey:@"AudioBitrate"];
- [audioTrack1Array setObject:[NSNumber numberWithFloat:0.0] forKey:@"AudioTrackDRCSlider"];
- [audioTrack1Array autorelease];
- [audioListArray addObject:audioTrack1Array];
-
- [preset setObject:[NSMutableArray arrayWithArray: audioListArray] forKey:@"AudioList"];
-
- /* Subtitles*/
- [preset setObject:@"None" forKey:@"Subtitles"];
-
- [preset autorelease];
- return preset;
-}
-
-- (NSDictionary *)createIpodHighPreset
-{
- NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
-
- /* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"iPod Legacy" forKey:@"PresetName"];
-
- /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
-
- /*Set whether or not this is default, at creation set to 0*/
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
+ /* Use a width of 960 for the iPhone 4 and later */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
-
- /* Get the New Preset Description from the field in the AddPresetPanel */
- [preset setObject:@"HandBrake's high resolution settings for older 5 and 5.5G iPods. Good video quality, great for viewing on a TV using your iPod. This is the iPod High-Rez preset from 0.9.2." forKey:@"PresetDescription"];
-
- /* File Format */
- [preset setObject:@"MP4 file" forKey:@"FileFormat"];
-
- /* Chapter Markers*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
-
- /* Video encoder */
- [preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4iPodCompatible"];
- /* x264 Option String */
- [preset setObject:@"level=30:bframes=0:weightp=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1:psy-rd=0,0:subme=6:8x8dct=0:trellis=0" forKey:@"x264Option"];
-
- /* Video quality */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
- [preset setObject:@"1500" forKey:@"VideoAvgBitrate"];
-
- /* Video framerate */
- [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
- [preset setObject:@"vfr" forKey:@"VideoFramerateMode"];
-
- /* GrayScale */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
-
- /* 2 Pass Encoding */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
-
- /*Picture Settings*/
- /* Use a width of 640 for iPod TV-out */
- [preset setObject:[NSNumber numberWithInt:640] forKey:@"PictureWidth"];
+ [preset setObject:[NSNumber numberWithInt:960] forKey:@"PictureWidth"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"PictureModulus"];
/* Explicitly set the filters for built-in presets */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
return preset;
}
-- (NSDictionary *)createIpodLowPreset
+- (NSDictionary *)createiPodPreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
-
- /*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
/* Get the New Preset Description from the field in the AddPresetPanel */
[preset setObject:@"HandBrake's low resolution settings for the iPod (5G and up). Optimized for great playback on the iPod screen, with smaller file size." forKey:@"PresetDescription"];
/* File Format */
[preset setObject:@"MP4 file" forKey:@"FileFormat"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4LargeFile"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4iPodCompatible"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
/* Video encoder */
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4iPodCompatible"];
+
/* x264 Option String */
- [preset setObject:@"level=30:bframes=0:weightp=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1:subme=6:8x8dct=0:trellis=0" forKey:@"x264Option"];
+ [preset setObject:@"" forKey:@"x264Option"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"x264UseAdvancedOptions"];
+ [preset setObject:@"medium" forKey:@"x264Preset"];
+ [preset setObject:@"" forKey:@"x264Tune"];
+ [preset setObject:@"" forKey:@"x264OptionExtra"];
+ [preset setObject:@"baseline" forKey:@"h264Profile"];
+ [preset setObject:@"1.3" forKey:@"h264Level"];
/* Video quality */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
- [preset setObject:@"700" forKey:@"VideoAvgBitrate"];
+ [preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
+ [preset setObject:[NSNumber numberWithFloat:22.0] forKey:@"VideoQualitySlider"];
/* Video framerate */
- [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
- [preset setObject:@"vfr" forKey:@"VideoFramerateMode"];
+ [preset setObject:@"30" forKey:@"VideoFramerate"];
+ [preset setObject:@"pfr" forKey:@"VideoFramerateMode"];
/* GrayScale */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
/*Picture Settings*/
- /* Use a width of 320 for the iPod screen */
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
[preset setObject:[NSNumber numberWithInt:320] forKey:@"PictureWidth"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
[preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"PictureModulus"];
/* Explicitly set the filters for built-in presets */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
/* Set crop settings here */
/* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
/*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
-
- /*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"Default"];
-
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:2] forKey:@"UsesPictureSettings"];
+ [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
/* Get the New Preset Description from the field in the AddPresetPanel */
[preset setObject:@"HandBrake's normal, default settings." forKey:@"PresetDescription"];
/* File Format */
[preset setObject:@"MP4 file" forKey:@"FileFormat"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4LargeFile"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4iPodCompatible"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
/* x264 Option String */
- [preset setObject:@"ref=1:weightp=1:subq=2:rc-lookahead=10:trellis=0:8x8dct=0" forKey:@"x264Option"];
+ [preset setObject:@"" forKey:@"x264Option"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"x264UseAdvancedOptions"];
+ [preset setObject:@"veryfast" forKey:@"x264Preset"];
+ [preset setObject:@"" forKey:@"x264Tune"];
+ [preset setObject:@"" forKey:@"x264OptionExtra"];
+ [preset setObject:@"main" forKey:@"h264Profile"];
+ [preset setObject:@"4.0" forKey:@"h264Level"];
/* Video quality */
+ [preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
- [preset setObject:@"1500" forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithFloat:20.0] forKey:@"VideoQualitySlider"];
/* Video framerate */
/*Picture Settings*/
/* Use Max Picture settings for whatever the dvd is.*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"PictureModulus"];
/* Explicitly set the filters for built-in presets */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
/* Set crop settings here */
/* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
return preset;
}
-- (NSDictionary *)createAndroidMidPreset
+- (NSDictionary *)createAndroidPreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"Android Mid" forKey:@"PresetName"];
+ [preset setObject:@"Android" forKey:@"PresetName"];
/*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
-
- /*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
/* Get the New Preset Description from the field in the AddPresetPanel */
[preset setObject:@"HandBrake's settings for Mid-range Android 2.3 or better devices." forKey:@"PresetDescription"];
/* File Format */
[preset setObject:@"MP4 file" forKey:@"FileFormat"];
-
- /* 64-bit MP4 file */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4LargeFile"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4iPodCompatible"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"ChapterMarkers"];
/* Video encoder */
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4iPodCompatible"];
+
/* x264 Option String */
- [preset setObject:@"cabac=0:ref=2:me=umh:bframes=0:weightp=0:subme=6:8x8dct=0:trellis=0" forKey:@"x264Option"];
+ [preset setObject:@"" forKey:@"x264Option"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"x264UseAdvancedOptions"];
+ [preset setObject:@"medium" forKey:@"x264Preset"];
+ [preset setObject:@"" forKey:@"x264Tune"];
+ [preset setObject:@"" forKey:@"x264OptionExtra"];
+ [preset setObject:@"main" forKey:@"h264Profile"];
+ [preset setObject:@"2.2" forKey:@"h264Level"];
/* Video quality */
+ [preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
- [preset setObject:@"960" forKey:@"VideoAvgBitrate"];
[preset setObject:[NSNumber numberWithFloat:22.0] forKey:@"VideoQualitySlider"];
/* Video framerate */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
/*Picture Settings*/
- /* Use a width of 480 for the iPhone*/
- [preset setObject:[NSNumber numberWithInt:480] forKey:@"PictureWidth"];
+ [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ [preset setObject:[NSNumber numberWithInt:720] forKey:@"PictureWidth"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"PictureModulus"];
/* Explicitly set the filters for built-in presets */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
return preset;
}
-- (NSDictionary *)createAndroidHighPreset
+- (NSDictionary *)createAndroidTabletPreset
{
NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
/* Get the New Preset Name from the field in the AddPresetPanel */
- [preset setObject:@"Android High" forKey:@"PresetName"];
+ [preset setObject:@"Android Tablet" forKey:@"PresetName"];
/*Set whether or not this is a user preset where 0 is factory, 1 is user*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
- /*Set whether or not this is a folder, 1 is bool for folder*/
- [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
- /*Set whether or not this is default, at creation set to 0*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-
- /*Get the whether or not to apply pic settings in the AddPresetPanel*/
- [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+ [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
/* Get the New Preset Description from the field in the AddPresetPanel */
[preset setObject:@"HandBrake's preset for the Higher end Anroid 2.3 or better devices." forKey:@"PresetDescription"];
/* File Format */
[preset setObject:@"MP4 file" forKey:@"FileFormat"];
-
- /* 64-bit MP4 file */
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4LargeFile"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4LargeFile"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4iPodCompatible"];
/* Chapter Markers*/
[preset setObject:[NSNumber numberWithInt:0] forKey:@"ChapterMarkers"];
[preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
/* x264 Option String (We can use this to tweak the output)*/
- [preset setObject:@"weightp=0:cabac=0" forKey:@"x264Option"];
+ [preset setObject:@"" forKey:@"x264Option"];
+ [preset setObject:[NSNumber numberWithInt:0] forKey:@"x264UseAdvancedOptions"];
+ [preset setObject:@"medium" forKey:@"x264Preset"];
+ [preset setObject:@"" forKey:@"x264Tune"];
+ [preset setObject:@"" forKey:@"x264OptionExtra"];
+ [preset setObject:@"main" forKey:@"h264Profile"];
+ [preset setObject:@"3.1" forKey:@"h264Level"];
/* Video quality */
- [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
[preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
[preset setObject:[NSNumber numberWithFloat:22.0] forKey:@"VideoQualitySlider"];
/* Video framerate */
[preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
/* Basic Picture Settings */
- /* Use Max Picture settings for whatever the dvd is.*/
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
- [preset setObject:[NSNumber numberWithInt:720] forKey:@"PictureWidth"];
+ [preset setObject:[NSNumber numberWithInt:1280] forKey:@"PictureWidth"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
[preset setObject:[NSNumber numberWithInt:2] forKey:@"PicturePAR"];
+ [preset setObject:[NSNumber numberWithInt:2] forKey:@"PictureModulus"];
/* Explicitly set the filters for built-in presets */
[preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
- [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
[preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
@class HBController;
-#define HB_NUM_HBLIB_PICTURES 20 // # of preview pictures libhb should generate
-
-@interface PreviewController : NSWindowController
+@interface PreviewController : NSWindowController <NSWindowDelegate>
{
hb_handle_t * fHandle;
hb_title_t * fTitle;
- HBController *fHBController; // reference to HBController
+ HBController * fHBController; // reference to HBController
- IBOutlet NSWindow * fPreviewWindow;
- NSWindow * fFullScreenWindow; // Full Screen window
NSMutableDictionary * fPicturePreviews; // NSImages, one for each preview libhb creates, created lazily
int fPicture;
- IBOutlet NSImageView * fPictureView;
- IBOutlet NSBox * fPictureViewArea;
+ CALayer * fWhiteBackground;
+ CALayer * fPictureLayer;
IBOutlet NSBox * fPictureControlBox;
IBOutlet NSBox * fEncodingControlBox;
IBOutlet NSBox * fMoviePlaybackControlBox;
IBOutlet NSTextField * fInfoField;
IBOutlet NSTextField * fscaleInfoField;
- BOOL isEncoding;
-
-
- int MaxOutputWidth;
- int MaxOutputHeight;
-
- int output_width, output_height, output_par_width, output_par_height;
- int display_width;
+ CGFloat backingScaleFactor;
/* Hud Control Overlay */
NSTimer * fHudTimer;
int hudTimerSeconds;
/* Full Screen Mode Toggle */
+ BOOL scaleToScreen;
IBOutlet NSButton * fScaleToScreenToggleButton;
IBOutlet NSButton * fPictureSettingsToggleButton;
- BOOL scaleToScreen;
/* Movie Previews */
QTMovie * aMovie;
IBOutlet NSTextField * fMovieInfoField;
NSTimer * fMovieTimer;
-
IBOutlet NSButton * fCreatePreviewMovieButton;
IBOutlet NSButton * fCancelPreviewMovieButton;
IBOutlet NSButton * fShowPreviewMovieButton;
NSString * fPreviewMoviePath;
IBOutlet NSProgressIndicator * fMovieCreationProgressIndicator;
hb_handle_t * fPreviewLibhb; // private libhb for creating previews
+ NSInteger fEncodeState;
NSTimer * fLibhbTimer; // timer for retrieving state from libhb
IBOutlet NSTextField * fPreviewMovieStatusField;
IBOutlet NSPopUpButton * fPreviewMovieLengthPopUp; // popup of choices for length of preview in seconds
- (void) SetHandle: (hb_handle_t *) handle;
- (void) SetTitle: (hb_title_t *) title;
-- (void)setHBController: (HBController *)controller;
-- (IBAction) showPreviewWindow: (id)sender;
-- (BOOL)acceptsMouseMovedEvents;
+- (void) setHBController: (HBController *)controller;
- (void) displayPreview;
-- (IBAction) SettingsChanged: (id) sender;
+- (IBAction) settingsChanged: (id) sender;
- (IBAction) pictureSliderChanged: (id) sender;
-- (IBAction)showPictureSettings:(id)sender;
+- (IBAction) showPictureSettings:(id)sender;
- (NSString*) pictureSizeInfoString;
-- (IBAction)toggleScaleToScreen:(id)sender;
-- (IBAction)goWindowedScreen:(id)sender;
+- (IBAction) toggleScaleToScreen:(id)sender;
/* HUD overlay */
- (void) enableHudControls;
- (void) stopReceivingLibhbNotifications;
- (void) installMovieCallbacks;
-- (void)removeMovieCallbacks;
+- (void) removeMovieCallbacks;
- (IBAction) cancelCreateMoviePreview: (id) sender;
- (IBAction) createMoviePreview: (id) sender;
- (void) libhbStateChanged: (hb_state_t ) state;
- (IBAction) showMoviePreview: (NSString *) path;
+- (IBAction) showPicturesPreview: (id) sender;
- (IBAction) toggleMoviePreviewPlayPause: (id) sender;
- (IBAction) moviePlaybackGoToBeginning: (id) sender;
- (IBAction) moviePlaybackGoToEnd: (id) sender;
- (IBAction) moviePlaybackGoBackwardOneFrame: (id) sender;
- (IBAction) moviePlaybackGoForwardOneFrame: (id) sender;
--(void) initPreviewScrubberForMovie;
--(void) adjustPreviewScrubberForCurrentMovieTime;
+- (void) initPreviewScrubberForMovie;
+- (void) adjustPreviewScrubberForCurrentMovieTime;
- (IBAction) previewScrubberChanged: (id) sender;
--(void)setTime:(int)timeValue;
--(void)timeToQTTime:(long)timeValue resultTime:(QTTime *)aQTTime;
+- (BOOL) isPlaying;
+
- (void) startMovieTimer;
- (void) stopMovieTimer;
-- (NSString*) calculatePlaybackSMTPETimecodeForDisplay;
+- (NSString*) SMTPETimecode: (QTTime)time;
+- (QTTime)SliderToQTTime:(double)time;
- (IBAction) previewDurationPopUpChanged: (id) sender;
-
-- (IBAction)showPreviewPanel: (id)sender forTitle: (hb_title_t *)title;
-
-+ (NSImage *) makeImageForPicture: (int)pictureIndex
++ (NSImage *) makeImageForPicture: (NSInteger)pictureIndex
libhb:(hb_handle_t*)handle
title:(hb_title_t*)title;
-- (NSImage *) imageForPicture: (int) pictureIndex;
+- (NSImage *) imageForPicture: (NSInteger) pictureIndex;
- (void) purgeImageCache;
@end
#import "HBPreviewController.h"
#import "Controller.h"
-@implementation QTMovieView ( HBQTkitExt )
+#define BORDER_SIZE 2.0
+#define HB_NUM_HBLIB_PICTURES 20 // # of preview pictures libhb should generate
+
+@implementation QTMovieView (HBExtensions)
- (void) mouseMoved:(NSEvent *)theEvent
{
[super mouseMoved:theEvent];
}
@end
+#if MAC_OS_X_VERSION_MAX_ALLOWED < 1070
+@interface NSWindow(HBExtensions)
+
+@property (readonly) CGFloat backingScaleFactor;
+@end
+#endif
@interface PreviewController (Private)
- (NSSize)optimalViewSizeForImageSize: (NSSize)imageSize;
-- (void)resizeSheetForViewSize: (NSSize)viewSize;
-- (void)setViewSize: (NSSize)viewSize;
-- (BOOL)viewNeedsToResizeToSize: (NSSize)newSize;
-
+- (void)resizeWindowForViewSize: (NSSize)viewSize;
@end
@implementation PreviewController
/* Init libhb with check for updates libhb style set to "0" so its ignored and lets sparkle take care of it */
int loggingLevel = [[[NSUserDefaults standardUserDefaults] objectForKey:@"LoggingLevel"] intValue];
fPreviewLibhb = hb_init(loggingLevel, 0);
-
-
-
}
return self;
}
-
-//------------------------------------------------------------------------------------
-// Displays and brings the picture window to the front
-//------------------------------------------------------------------------------------
-- (IBAction) showPreviewWindow: (id)sender
-{
- [self showWindow:sender];
- [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"PreviewWindowIsOpen"];
-
- /* lets set the preview window to accept mouse moved events */
- [fPreviewWindow setAcceptsMouseMovedEvents:YES];
- hudTimerSeconds = 0;
- [self pictureSliderChanged:nil];
- [self startReceivingLibhbNotifications];
-}
-
- (void)setHBController: (HBController *)controller
{
fHBController = controller;
- (void)awakeFromNib
{
- [fPreviewWindow setDelegate:self];
+ [[self window] setDelegate:self];
+
if( ![[self window] setFrameUsingName:@"Preview"] )
[[self window] center];
+
[self setWindowFrameAutosaveName:@"Preview"];
[[self window] setExcludedFromWindowsMenu:YES];
/* lets set the preview window to accept mouse moved events */
- [fPreviewWindow setAcceptsMouseMovedEvents:YES];
- //[self pictureSliderChanged:nil];
+ [[self window] setAcceptsMouseMovedEvents:YES];
[self startReceivingLibhbNotifications];
hudTimerSeconds = 0;
*/
[fMovieCreationProgressIndicator setUsesThreadedAnimation:NO];
- /* Setup our layers for core animation */
- [fPictureViewArea setWantsLayer:YES];
- [fPictureView setWantsLayer:YES];
+ /* we set the preview length popup in seconds */
+ [fPreviewMovieLengthPopUp removeAllItems];
+ [fPreviewMovieLengthPopUp addItemWithTitle: @"15"];
+ [fPreviewMovieLengthPopUp addItemWithTitle: @"30"];
+ [fPreviewMovieLengthPopUp addItemWithTitle: @"45"];
+ [fPreviewMovieLengthPopUp addItemWithTitle: @"60"];
+ [fPreviewMovieLengthPopUp addItemWithTitle: @"90"];
+ [fPreviewMovieLengthPopUp addItemWithTitle: @"105"];
+ [fPreviewMovieLengthPopUp addItemWithTitle: @"120"];
- [fCancelPreviewMovieButton setWantsLayer:YES];
- [fMovieCreationProgressIndicator setWantsLayer:YES];
+ [fMovieView setHidden:YES];
+ [fMovieView setDelegate:self];
+ /* Setup our layers for core animation */
+ [[[self window] contentView] setWantsLayer:YES];
[fPictureControlBox setWantsLayer:YES];
[fEncodingControlBox setWantsLayer:YES];
- [fMovieView setWantsLayer:YES];
- [fMovieView setHidden:YES];
- [fMovieView setDelegate:self];
+ [fMoviePlaybackControlBox setWantsLayer:YES];
+
+ fWhiteBackground = [CALayer layer];
+ [fWhiteBackground setBounds:CGRectMake(0.0, 0.0, 480.0, 360.0)];
+ [fWhiteBackground setPosition:CGPointMake([[[self window] contentView] frame].size.width /2,
+ [[[self window] contentView] frame].size.height /2)];
+
+ [fWhiteBackground setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
+ CGColorRef white = CGColorCreateGenericRGB(1.0, 1.0, 1.0, 1.0);
+ [fWhiteBackground setBackgroundColor: white];
+ CFRelease(white);
+ [fWhiteBackground setShadowOpacity:0.5f];
+ [fWhiteBackground setShadowOffset:CGSizeMake(0, 0)];
- /* Since the xib has everything off center for easy acess
- * we align our views and windows here we an align to anything
- * since it will actually change later upon source load, but
- * for convenience we will use the fPictureViewArea
- */
-
- /* Align the still preview image view to the picture box */
- [fPictureView setFrameSize:[fPictureViewArea frame].size];
- [fMovieView setFrameSize:[fPictureViewArea frame].size];
- //[fPreviewWindow setFrameSize:[fPictureViewArea frame].size];
+ fPictureLayer = [CALayer layer];
+ [fPictureLayer setBounds:CGRectMake(0.0, 0.0, 476.0, 356.0)];
+ [fPictureLayer setPosition:CGPointMake([[[self window] contentView] frame].size.width /2,
+ [[[self window] contentView] frame].size.height /2)];
+ [fPictureLayer setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
+
+ NSMutableDictionary *actions = [NSMutableDictionary
+ dictionaryWithDictionary:[fPictureLayer actions]];
+
+ // Disable fade on contents change
+ [actions setObject:[NSNull null] forKey:@"contents"];
+ [fPictureLayer setActions:actions];
+
+ [[[[self window] contentView] layer] insertSublayer:fWhiteBackground below: [fMovieView layer]];
+ [[[[self window] contentView] layer] insertSublayer:fPictureLayer below: [fMovieView layer]];
+
+ /* relocate our hud origins */
+ NSPoint hudControlBoxOrigin = [fMoviePlaybackControlBox frame].origin;
+ [fPictureControlBox setFrameOrigin:hudControlBoxOrigin];
+ [fEncodingControlBox setFrameOrigin:hudControlBoxOrigin];
+ [fMoviePlaybackControlBox setFrameOrigin:hudControlBoxOrigin];
+ if( [[self window] respondsToSelector:@selector( backingScaleFactor )] )
+ backingScaleFactor = [[self window] backingScaleFactor];
+ else
+ backingScaleFactor = 1.0;
+
+ [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(titleChanged:) name: HBTitleChangedNotification object:nil];
}
-- (BOOL)acceptsMouseMovedEvents
+
+- (void) titleChanged: (NSNotification *) aNotification
{
- return YES;
+ /* Notification from HBController, only used to stop
+ * an encoding while the HBController is scanning a new title
+ */
+ [self cancelCreateMoviePreview:self];
}
- (void)windowWillClose:(NSNotification *)aNotification
* to go back to still previews .. just in case nothing is loaded up like in
* a Launch, cancel new scan then quit type scenario.
*/
- if (fPicture)
+
+ if (fEncodeState || [self isPlaying])
{
- [self pictureSliderChanged:nil];
- [fMovieTimer invalidate];
- [fMovieTimer release];
+ [self cancelCreateMoviePreview:self];
+ [fMovieView pause:self];
+ [self stopMovieTimer];
}
-
+
hudTimerSeconds = 0;
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"PreviewWindowIsOpen"];
}
-- (BOOL)windowShouldClose:(id)fPictureWindow
-{
- return YES;
-}
-
- (void) dealloc
{
hb_stop(fPreviewLibhb);
{
[[NSFileManager defaultManager] removeItemAtPath:fPreviewMoviePath error:nil];
[fPreviewMoviePath release];
- }
+ }
[fLibhbTimer invalidate];
[fLibhbTimer release];
[fMovieTimer release];
[fPicturePreviews release];
- [fFullScreenWindow release];
hb_close(&fPreviewLibhb);
{
fHandle = handle;
-
-
- /* we set the preview length popup in seconds */
- [fPreviewMovieLengthPopUp removeAllItems];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"15"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"30"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"45"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"60"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"90"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"105"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"120"];
-
/* adjust the preview slider length */
/* We use our advance pref to determine how many previews we scanned */
int hb_num_previews = [[[NSUserDefaults standardUserDefaults] objectForKey:@"PreviewsNumber"] intValue];
}
else
{
- /* currently hard set default to 10 seconds */
- [fPreviewMovieLengthPopUp selectItemAtIndex: 1];
+ /* currently hard set default to 15 seconds */
+ [fPreviewMovieLengthPopUp selectItemAtIndex: 0];
}
}
- (void) SetTitle: (hb_title_t *) title
{
- hb_job_t * job = title->job;
-
fTitle = title;
fPicture = 0;
- MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
- MaxOutputHeight = title->height - job->crop[0] - job->crop[1];
-
- [self SettingsChanged: nil];
+ [self settingsChanged:nil];
}
-
+- (void)windowDidChangeBackingProperties:(NSNotification *)notification {
+
+ NSWindow *theWindow = (NSWindow *)[notification object];
+
+ CGFloat newBackingScaleFactor = [theWindow backingScaleFactor];
+ CGFloat oldBackingScaleFactor = [[[notification userInfo]
+ objectForKey:@"NSBackingPropertyOldScaleFactorKey"]
+ doubleValue];
+ if( newBackingScaleFactor != oldBackingScaleFactor )
+ {
+ // Scale factor changed, update the preview window
+ // to the new situation
+ backingScaleFactor = newBackingScaleFactor;
+ [self pictureSliderChanged:self];
+ }
+}
// Adjusts the window to draw the current picture (fPicture) adjusting its size as
// necessary to display as much of the picture as possible.
-- (void) displayPreview
+- (void) displayPreview
{
hb_job_t * job = fTitle->job;
- /* lets make sure that the still picture view is not hidden and that
- * the movie preview is
- */
- aMovie = nil;
- [fMovieView pause:nil];
- [fMovieView setHidden:YES];
- [fMovieView setMovie:nil];
- [fMovieCreationProgressIndicator stopAnimation: nil];
- [fMovieCreationProgressIndicator setHidden: YES];
- [fMoviePlaybackControlBox setHidden: YES];
- if( fMovieTimer )
- {
- [self stopMovieTimer];
- }
- [fPictureControlBox setHidden: NO];
-
- [fPictureView setHidden:NO];
-
+
NSImage *fPreviewImage = [self imageForPicture: fPicture];
NSSize imageScaledSize = [fPreviewImage size];
- [fPictureView setImage: fPreviewImage];
-
+ [fPictureLayer setContents:fPreviewImage];
+
NSSize displaySize = NSMakeSize( ( CGFloat )fTitle->width, ( CGFloat )fTitle->height );
NSString *sizeInfoString;
+
/* Set the picture size display fields below the Preview Picture*/
+ int output_width, output_height, output_par_width, output_par_height;
+ int display_width;
if( fTitle->job->anamorphic.mode == 1 ) // Original PAR Implementation
{
output_width = fTitle->width-fTitle->job->crop[2]-fTitle->job->crop[3];
displaySize.width = display_width;
displaySize.height = fTitle->height;
imageScaledSize.width = display_width;
- imageScaledSize.height = output_height;
+ imageScaledSize.height = output_height;
}
else if (fTitle->job->anamorphic.mode == 2) // Loose Anamorphic
{
else if (fTitle->job->anamorphic.mode == 3) // Custom Anamorphic
{
hb_set_anamorphic_size(job, &output_width, &output_height, &output_par_width, &output_par_height);
- display_width = output_width * output_par_width / output_par_height;
sizeInfoString = [NSString stringWithFormat:
@"Source: %dx%d, Output: %dx%d, Anamorphic: %dx%d Custom",
fTitle->width, fTitle->height, output_width, output_height, fTitle->job->anamorphic.dar_width, fTitle->job->anamorphic.dar_height];
displaySize.width = fTitle->job->anamorphic.dar_width + fTitle->job->crop[2] + fTitle->job->crop[3] ;
displaySize.height = fTitle->job->anamorphic.dar_height + fTitle->job->crop[0] + fTitle->job->crop[1];
imageScaledSize.width = (int)fTitle->job->anamorphic.dar_width;
- imageScaledSize.height = (int)fTitle->job->height;
- }
+ imageScaledSize.height = (int)fTitle->job->height;
+ }
else // No Anamorphic
{
sizeInfoString = [NSString stringWithFormat:
imageScaledSize.width = fTitle->job->width;
imageScaledSize.height = fTitle->job->height;
}
-
-
-
- NSSize viewSize = [self optimalViewSizeForImageSize:displaySize];
- [self resizeSheetForViewSize:viewSize];
- NSSize windowSize = [[self window] frame].size;
+ if( backingScaleFactor != 1.0 )
+ {
+ // HiDPI mode usually display everything
+ // with douple pixel count, but we don't
+ // want to double the size of the video
+ displaySize.height /= backingScaleFactor;
+ displaySize.width /= backingScaleFactor;
+ imageScaledSize.height /= backingScaleFactor;
+ imageScaledSize.width /= backingScaleFactor;
+ }
+
+ // Get the optimal view size for the image
+ NSSize viewSize = [self optimalViewSizeForImageSize:displaySize];
+ viewSize.width += BORDER_SIZE * 2;
+ viewSize.height += BORDER_SIZE * 2;
+ NSSize windowSize;
+ if (scaleToScreen == YES)
+ // Scale the window to the max possible size
+ windowSize = [[[self window] screen] visibleFrame].size;
+ else
+ // Scale the window to the image size
+ windowSize = viewSize;
+
+ [self resizeWindowForViewSize:windowSize];
+ NSSize areaSize = [[[self window] contentView] frame].size;
+ areaSize.width -= BORDER_SIZE * 2;
+ areaSize.height -= BORDER_SIZE * 2;
+
if (scaleToScreen == YES)
{
- /* Note: this should probably become a utility function */
/* We are in Scale To Screen mode so, we have to get the ratio for height and width against the window
*size so we can scale from there.
*/
- CGFloat deltaWidth = imageScaledSize.width / displaySize.width;
- CGFloat deltaHeight = imageScaledSize.height /displaySize.height;
- NSSize windowSize = [[self window] frame].size;
CGFloat pictureAspectRatio = imageScaledSize.width / imageScaledSize.height;
+ CGFloat areaAspectRatio = areaSize.width / areaSize.height;
- /* Set our min size to the storage size */
- NSSize minSize;
- minSize.width = fTitle->width;
- minSize.height = fTitle->height;
-
- /* Set delta's based on minimum size */
- if (imageScaledSize.width < minSize.width)
- {
- deltaWidth = imageScaledSize.width / minSize.width;
- }
- else
- {
- deltaWidth = 1.0;
- }
-
- if (imageScaledSize.height < minSize.height)
- {
- deltaHeight = imageScaledSize.height / minSize.height;
- }
- else
- {
- deltaHeight = 1.0;
- }
-
- /* Now apply our deltas to the full screen view */
- if (pictureAspectRatio > 1.0) // we are wider than taller, so expand the width to fill the area and scale the height
+ if (pictureAspectRatio > areaAspectRatio)
{
- viewSize.width = windowSize.width * deltaWidth;
+ viewSize.width = areaSize.width;
viewSize.height = viewSize.width / pictureAspectRatio;
-
}
else
{
- viewSize.height = windowSize.height * deltaHeight;
+ viewSize.height = areaSize.height;
viewSize.width = viewSize.height * pictureAspectRatio;
}
-
}
else
{
- viewSize.width = viewSize.width - (viewSize.width - imageScaledSize.width);
- viewSize.height = viewSize.height - (viewSize.height - imageScaledSize.height);
-
- if (fTitle->width > windowSize.width || fTitle->height > windowSize.height)
+ // If the image is larger then the window, scale the image
+ viewSize = imageScaledSize;
+
+ if (imageScaledSize.width > areaSize.width || imageScaledSize.height > areaSize.height)
{
- CGFloat viewSizeAspect = viewSize.width / viewSize.height;
- if (viewSizeAspect > 1.0) // we are wider than taller, so expand the width to fill the area and scale the height
+ CGFloat pictureAspectRatio = imageScaledSize.width / imageScaledSize.height;
+ CGFloat areaAspectRatio = areaSize.width / areaSize.height;
+
+ if (pictureAspectRatio > areaAspectRatio)
{
- viewSize.width = viewSize.width * (windowSize.width / fTitle->width) ;
- viewSize.height = viewSize.width / viewSizeAspect;
+ viewSize.width = areaSize.width;
+ viewSize.height = viewSize.width / pictureAspectRatio;
}
else
{
- viewSize.height = viewSize.height * (windowSize.height / fTitle->height);
- viewSize.width = viewSize.height * viewSizeAspect;
+ viewSize.height = areaSize.height;
+ viewSize.width = viewSize.height * pictureAspectRatio;
}
}
-
}
-
- [self setViewSize:viewSize];
-
- /* relocate our hud origins as per setViewSize */
- NSPoint hudControlBoxOrigin = [fPictureControlBox frame].origin;
- hudControlBoxOrigin.y = ([[self window] frame].size.height / 2) - (viewSize.height / 2);
- hudControlBoxOrigin.x = ([[self window] frame].size.width / 2) - ([fPictureControlBox frame].size.width / 2);
- [fPictureControlBox setFrameOrigin:hudControlBoxOrigin];
- [fEncodingControlBox setFrameOrigin:hudControlBoxOrigin];
- [fMoviePlaybackControlBox setFrameOrigin:hudControlBoxOrigin];
+ // Resize the CALayers
+ [fWhiteBackground setBounds:CGRectMake(0, 0, viewSize.width + (BORDER_SIZE * 2), viewSize.height + (BORDER_SIZE * 2))];
+ [fPictureLayer setBounds:CGRectMake(0, 0, viewSize.width, viewSize.height)];
NSString *scaleString;
- CGFloat scale = ( ( CGFloat )[fPictureView frame].size.width) / ( ( CGFloat )imageScaledSize.width);
+ CGFloat scale = ( ( CGFloat )[fPictureLayer frame].size.width) / ( ( CGFloat )imageScaledSize.width);
if (scale * 100.0 != 100)
- {
scaleString = [NSString stringWithFormat:
NSLocalizedString( @" (%.0f%% actual size)",
@"String shown when a preview is scaled" ), scale * 100.0];
- }
else
- {
scaleString = @"(Actual size)";
- }
if (scaleToScreen == YES)
- {
scaleString = [scaleString stringByAppendingString:@" Scaled To Screen"];
- }
+
/* Set the info fields in the hud controller */
[fInfoField setStringValue: [NSString stringWithFormat:
@"%@", sizeInfoString]];
- (IBAction) previewDurationPopUpChanged: (id) sender
{
-
[[NSUserDefaults standardUserDefaults] setObject:[fPreviewMovieLengthPopUp titleOfSelectedItem] forKey:@"PreviewLength"];
+}
-}
-
-- (IBAction) SettingsChanged: (id) sender
+- (IBAction) settingsChanged: (id) sender
{
- // Purge the existing picture previews so they get recreated the next time
- // they are needed.
- [self purgeImageCache];
- [self pictureSliderChanged:nil];
+ // Purge the existing picture previews so they get recreated the next time
+ // they are needed.
+ [self purgeImageCache];
+ [self pictureSliderChanged:nil];
}
- (IBAction) pictureSliderChanged: (id) sender
[self cancelCreateMoviePreview:nil];
// Show the picture view
- [fPictureView setHidden:NO];
- [fMovieView pause:nil];
- [fMovieView setHidden:YES];
- [fMovieView setMovie:nil];
- [fEncodingControlBox setHidden: YES];
+ if (aMovie)
+ {
+ [fMoviePlaybackControlBox setHidden:YES];
+ [fMovieView pause:nil];
+ [fMovieView setHidden:YES];
+ [fMovieView setMovie:nil];
+ aMovie = nil;
+ }
int newPicture = [fPictureSlider intValue];
if (newPicture != fPicture)
}
-- (IBAction)showPreviewPanel: (id)sender forTitle: (hb_title_t *)title
+- (IBAction)showWindow:(id)sender
{
- if ([fPreviewWindow isVisible])
- {
- [fPreviewWindow close];
- }
- else
- {
- [self showWindow:sender];
- [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"PreviewWindowIsOpen"];
- [fPreviewWindow setAcceptsMouseMovedEvents:YES];
- scaleToScreen = NO;
- [self pictureSliderChanged:nil];
- }
+ if (aMovie)
+ [self startMovieTimer];
+ [super showWindow:sender];
}
-
- (NSString*) pictureSizeInfoString
{
return [fInfoField stringValue];
NSPoint mouseLoc = [theEvent locationInWindow];
/* Test for mouse location to show/hide hud controls */
- if( isEncoding == NO )
+ if( fEncodeState != 1 )
{
/* Since we are not encoding, verify which control hud to show
* or hide based on aMovie ( aMovie indicates we need movie controls )
*/
- NSBox * hudBoxToShow;
+ NSBox *hudBoxToShow;
if ( aMovie == nil ) // No movie loaded up
{
hudBoxToShow = fPictureControlBox;
[[hudBoxToShow animator] setHidden: NO];
[self stopHudTimer];
}
- else if( NSPointInRect( mouseLoc, [fPictureViewArea frame] ) )
+ else if( NSPointInRect( mouseLoc, [[[self window] contentView] frame] ) )
{
[[hudBoxToShow animator] setHidden: NO];
[self startHudTimer];
}
}
-
-
- (IBAction)toggleScaleToScreen:(id)sender
{
if (scaleToScreen == YES)
}
-
-
-// Title-less windows normally don't receive key presses, override this
-- (BOOL)canBecomeKeyWindow
-{
- return YES;
-}
-
-// Title-less windows normally can't become main which means that another
-// non-fullscreen window will have the "active" titlebar in expose. Bad, fix it.
-- (BOOL)canBecomeMainWindow
-{
- return YES;
-}
-
-
-- (IBAction)goWindowedScreen:(id)sender
-{
-
- /* Get the screen info to release the display but don't actually do
- * it until the windowed screen is setup.
- */
- scaleToScreen = NO;
- [self pictureSliderChanged:nil];
- [fScaleToScreenToggleButton setTitle:@"<->"];
-
- NSScreen* mainScreen = [NSScreen mainScreen];
- NSDictionary* screenInfo = [mainScreen deviceDescription];
- NSNumber* screenID = [screenInfo objectForKey:@"NSScreenNumber"];
- CGDirectDisplayID displayID = (CGDirectDisplayID)[screenID longValue];
-
- [fFullScreenWindow dealloc];
- [fFullScreenWindow release];
-
-
- [fPreviewWindow setContentView:fPictureViewArea];
- [fPictureViewArea setNeedsDisplay:YES];
- [self setWindow:fPreviewWindow];
-
- // Show the window.
- [fPreviewWindow makeKeyAndOrderFront:self];
-
- /* Set the window back to regular level */
- [fPreviewWindow setLevel:NSNormalWindowLevel];
-
- /* Set the isFullScreen flag back to NO */
- //isFullScreen = NO;
- scaleToScreen = NO;
- /* make sure we are set to a still preview */
- [self pictureSliderChanged:nil];
- [self showPreviewWindow:nil];
-
- /* Change the name of fFullScreenToggleButton appropriately */
- //[fFullScreenToggleButton setTitle: @"Full Screen"];
- // [fScaleToScreenToggleButton setHidden:YES];
- /* set the picture settings pallete back to normal level */
- [fHBController picturePanelWindowed];
-
- /* Release the display now that the we are back in windowed mode */
- CGDisplayRelease(displayID);
-
- [fPreviewWindow setAcceptsMouseMovedEvents:YES];
- //[fFullScreenWindow setAcceptsMouseMovedEvents:NO];
-
- hudTimerSeconds = 0;
- [self startHudTimer];
-
-}
-
-
#pragma mark Still Preview Image Processing
-
// This function converts an image created by libhb (specified via pictureIndex) into
// an NSImage suitable for the GUI code to use. If removeBorders is YES,
// makeImageForPicture crops the image generated by libhb stripping off the gray
// border around the content. This is the low-level method that generates the image.
// -imageForPicture calls this function whenever it can't find an image in its cache.
-+ (NSImage *) makeImageForPicture: (int)pictureIndex
++ (NSImage *) makeImageForPicture: (NSInteger)pictureIndex
libhb:(hb_handle_t*)handle
title:(hb_title_t*)title
{
buffer = (uint8_t *) realloc( buffer, bufferSize );
}
- hb_get_preview( handle, title->job, pictureIndex, buffer );
+ hb_get_preview( handle, title->job, (int)pictureIndex, buffer );
// Create an NSBitmapImageRep and copy the libhb image into it, converting it from
// libhb's format to one suitable for NSImage. Along the way, we'll strip off the
// cache or by calling makeImageForPicture if it is not cached. Generally, you should
// use imageForPicture so that images are cached. Calling makeImageForPicture will
// always generate a new copy of the image.
-- (NSImage *) imageForPicture: (int) pictureIndex
+- (NSImage *) imageForPicture: (NSInteger) pictureIndex
{
// The preview for the specified index may not currently exist, so this method
// generates it if necessary.
- NSString * key = [NSString stringWithFormat:@"%d", pictureIndex];
+ NSNumber * key = [NSNumber numberWithInteger:pictureIndex];
NSImage * theImage = [fPicturePreviews objectForKey:key];
if (!theImage)
{
[fPicturePreviews removeAllObjects];
}
-
-
#pragma mark Movie Preview
- (IBAction) cancelCreateMoviePreview: (id) sender
{
-
hb_state_t s;
hb_get_state2( fPreviewLibhb, &s );
- if(isEncoding && (s.state == HB_STATE_WORKING || s.state == HB_STATE_PAUSED))
+ if(fEncodeState && (s.state == HB_STATE_WORKING || s.state == HB_STATE_PAUSED))
{
+ fEncodeState = 2;
hb_stop( fPreviewLibhb );
- [fPictureView setHidden:NO];
- [fMovieView pause:nil];
- [fMovieView setHidden:YES];
- [fMovieView setMovie:nil];
- [fPictureSlider setHidden:NO];
- isEncoding = NO;
-
- [self pictureSliderChanged:nil];
-
+ [NSAnimationContext beginGrouping];
+ [[NSAnimationContext currentContext] setDuration:0.2];
+ [[fEncodingControlBox animator] setHidden:YES];
+ [[fPictureControlBox animator] setHidden:NO];
+ [NSAnimationContext endGrouping];
+
return;
}
-
}
- (IBAction) createMoviePreview: (id) sender
-{
-
-
- /* Lets make sure the still picture previews are showing in case
- * there is currently a movie showing */
- [self pictureSliderChanged:nil];
-
+{
/* Rip or Cancel ? */
hb_state_t s;
hb_get_state2( fPreviewLibhb, &s );
- if(sender == fCancelPreviewMovieButton && (s.state == HB_STATE_WORKING || s.state == HB_STATE_PAUSED))
- {
- hb_stop( fPreviewLibhb );
- [fPictureView setHidden:NO];
- [fMovieView pause:nil];
- [fMovieView setHidden:YES];
- [fMovieView setMovie:nil];
- [fPictureSlider setHidden:NO];
- isEncoding = NO;
-
- return;
- }
-
-
/* we use controller.mm's prepareJobForPreview to go ahead and set all of our settings
* however, we want to use a temporary destination field of course
* so that we do not put our temp preview in the users chosen
/* we need to clean up the various lists after the job(s) have been set */
hb_job_reset( job );
- [fEncodingControlBox setHidden: NO];
- [fPictureControlBox setHidden: YES];
-
- [fMovieCreationProgressIndicator setHidden: NO];
- [fPreviewMovieStatusField setHidden: NO];
-
- isEncoding = YES;
+ [fMovieCreationProgressIndicator setDoubleValue:0];
+
+ [NSAnimationContext beginGrouping];
+ [[NSAnimationContext currentContext] setDuration:0.2];
+ [[fEncodingControlBox animator] setHidden: NO];
+ [[fPictureControlBox animator] setHidden: YES];
+ [NSAnimationContext endGrouping];
/* Let fPreviewLibhb do the job */
+ fEncodeState = 1;
hb_start( fPreviewLibhb );
}
hb_state_t s;
hb_get_state( fPreviewLibhb, &s );
[self libhbStateChanged: s];
-
}
- (void) libhbStateChanged: (hb_state_t)state
case HB_STATE_WORKING:
{
#define p state.param.working
-
NSMutableString * string;
/* Update text field */
string = [NSMutableString stringWithFormat: NSLocalizedString( @"Encoding preview: %.2f %%", @"" ), 100.0 * p.progress];
[fMovieCreationProgressIndicator setIndeterminate: NO];
/* Update slider */
- [fMovieCreationProgressIndicator setDoubleValue: 100.0 * p.progress];
-
- [fCreatePreviewMovieButton setTitle: @"Cancel Preview"];
+ [fMovieCreationProgressIndicator setDoubleValue: 100.0 * p.progress];
break;
}
#undef p
-#define p state.param.muxing
+#define p state.param.muxing
case HB_STATE_MUXING:
{
// Update fMovieCreationProgressIndicator
[fMovieCreationProgressIndicator setIndeterminate: YES];
[fMovieCreationProgressIndicator startAnimation: nil];
- [fPreviewMovieStatusField setStringValue: [NSString stringWithFormat:
- NSLocalizedString( @"Muxing Preview ...", @"" )]];
+ [fPreviewMovieStatusField setStringValue: NSLocalizedString( @"Muxing Preview ...", @"" )];
break;
}
#undef p
hb_rem( fHandle, job );
[fPreviewMovieStatusField setStringValue: @""];
- [fPreviewMovieStatusField setHidden: YES];
-
[fMovieCreationProgressIndicator stopAnimation: nil];
- [fMovieCreationProgressIndicator setHidden: YES];
- [fEncodingControlBox setHidden: YES];
- [fPictureControlBox setHidden: YES];
- isEncoding = NO;
-
- // Show the movie view
- [self showMoviePreview:fPreviewMoviePath];
- [fCreatePreviewMovieButton setTitle: @"Live Preview"];
+ if (fEncodeState != 2)
+ {
+ // Show the movie view
+ [self showMoviePreview:fPreviewMoviePath];
+ }
+
+ fEncodeState = 0;
break;
}
}
* object, given that, we detect the rate to determine whether the movie
* is playing or not.
*/
- if ([aMovie rate] != 0) // we are playing
+ if ([self isPlaying]) // we are playing
{
[fMovieView pause:aMovie];
- [fPlayPauseButton setTitle: @">"];
+ [fPlayPauseButton setState: NSOnState];
}
else // we are paused or stopped
{
[fMovieView play:aMovie];
- [fPlayPauseButton setTitle: @"||"];
+ [fPlayPauseButton setState: NSOffState];
}
}
-
}
- (IBAction) moviePlaybackGoToBeginning: (id) sender
if (aMovie != nil)
{
[fMovieView gotoBeginning:aMovie];
- }
-
+ }
}
- (IBAction) moviePlaybackGoToEnd: (id) sender
if (aMovie != nil)
{
[fMovieView gotoEnd:aMovie];
- }
-
+ }
}
- (IBAction) moviePlaybackGoBackwardOneFrame: (id) sender
[fMovieView pause:aMovie]; // Pause the movie
[fMovieView stepBackward:aMovie];
}
-
}
- (IBAction) moviePlaybackGoForwardOneFrame: (id) sender
[fMovieView pause:aMovie]; // Pause the movie
[fMovieView stepForward:aMovie];
}
-
}
-
- (void) startMovieTimer
{
if( fMovieTimer ) {
- (void) movieTimerFired: (NSTimer*)theTimer
{
- if (aMovie != nil)
+ if (aMovie != nil)
{
[self adjustPreviewScrubberForCurrentMovieTime];
- [fMovieInfoField setStringValue: [NSString stringWithFormat:NSLocalizedString( @"%@", @"" ),[self calculatePlaybackSMTPETimecodeForDisplay]]];
+ [fMovieInfoField setStringValue: [self SMTPETimecode:[aMovie currentTime]]];
}
}
+- (IBAction) showPicturesPreview: (id) sender
+{
+ [fMovieView pause:self];
+ [self stopMovieTimer];
+
+ [NSAnimationContext beginGrouping];
+ [[NSAnimationContext currentContext] setDuration:0.2];
+ [[fMoviePlaybackControlBox animator] setHidden:YES];
+ [[fMovieView animator] setHidden:YES];
+ [[fPictureControlBox animator] setHidden:NO];
+ [NSAnimationContext endGrouping];
+
+ [fMovieView setMovie:nil];
+ aMovie = nil;
+}
- (IBAction) showMoviePreview: (NSString *) path
/* Load the new movie into fMovieView */
if (path)
{
- //QTMovie * aMovie;
NSError *outError;
NSURL *movieUrl = [NSURL fileURLWithPath:path];
NSDictionary *movieAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
aMovie = [[[QTMovie alloc] initWithAttributes:movieAttributes error:&outError] autorelease];
-
if (!aMovie)
{
- NSLog(@"Unable to open movie");
+ [fHBController writeToActivityLog: "showMoviePreview: Unable to open movie"];
}
else
{
NSRect movieBounds;
+
+ [fMovieView setControllerVisible:NO];
+
/* we get some size information from the preview movie */
- NSSize movieSize= [[aMovie attributeForKey:QTMovieNaturalSizeAttribute] sizeValue];
+ NSSize movieSize = [[aMovie attributeForKey:QTMovieNaturalSizeAttribute] sizeValue];
movieBounds = [fMovieView movieBounds];
movieBounds.size.height = movieSize.height;
/* We also get our view size to use for scaling fMovieView's size */
- NSSize scaledMovieViewSize = [fPictureView frame].size;
- [fMovieView setControllerVisible:FALSE];
- if ([fMovieView isControllerVisible])
- {
- CGFloat controllerBarHeight = [fMovieView controllerBarHeight];
- if ( controllerBarHeight != 0 ) //Check if QTKit return a real value or not.
- {
- movieBounds.size.height += controllerBarHeight;
- scaledMovieViewSize.height += controllerBarHeight;
- }
- else
- {
- movieBounds.size.height += 15;
- scaledMovieViewSize.height += 15;
- }
- }
-
+ NSSize scaledMovieViewSize = [fPictureLayer frame].size;
movieBounds.size.width = movieSize.width;
/* we need to account for an issue where the scaledMovieViewSize > the window size */
[fHBController writeToActivityLog: "showMoviePreview: Our window is not tall enough to show the controller bar ..."];
}
-
-
/* Scale the fMovieView to scaledMovieViewSize */
[fMovieView setFrameSize:scaledMovieViewSize];
/*set our origin try using fPictureViewArea or fPictureView */
- NSPoint origin = [fPictureView frame].origin;
- origin.x += trunc( ( [fPictureView frame].size.width -
+ NSPoint origin = [fPictureLayer frame].origin;
+ origin.x += trunc( ( [fPictureLayer frame].size.width -
[fMovieView frame].size.width ) / 2.0 );
- origin.y += trunc( ( ( [fPictureView frame].size.height -
- [fMovieView frame].size.height ) / 2.0 ) - 7.5 );
+ origin.y += trunc( ( ( [fPictureLayer frame].size.height -
+ [fMovieView frame].size.height ) / 2.0 ) );
[fMovieView setFrameOrigin:origin];
[fMovieView setMovie:aMovie];
- [fMovieView setHidden:NO];
- [fMoviePlaybackControlBox setHidden: NO];
- [fPictureControlBox setHidden: YES];
// get and enable subtitles
NSArray *subtitlesArray;
}
// to actually play the movie
-
+ [NSAnimationContext beginGrouping];
+ [[NSAnimationContext currentContext] setDuration:0.2];
+ [[fEncodingControlBox animator] setHidden: YES];
+ [[fMovieView animator] setHidden:NO];
+ [[fMoviePlaybackControlBox animator] setHidden: NO];
+ [NSAnimationContext endGrouping];
+
[self initPreviewScrubberForMovie];
[self startMovieTimer];
/* Install amovie notifications */
[aMovie setDelegate:self];
[self installMovieCallbacks];
[fMovieView play:aMovie];
-
}
}
- isEncoding = NO;
-}
-#pragma mark *** Movie Playback Scrubber and time code methods ***
-
-/* Since MacOSX Leopard QTKit has taken over some responsibility for assessing movie playback
- * information from the old QuickTime carbon api ( time code information as well as fps, etc.).
- * However, the QTKit devs at apple were not really big on documentation and further ...
- * QuickTimes ability to playback HB's largely variable framerate output makes perfectly frame
- * accurate information at best convoluted. Still, for the purpose of a custom hud based custom
- * playback scrubber slider this has so far proven to be as accurate as I have found. To say it
- * could use some better accuracy is not understating it enough probably.
- * Most of this was gleaned from this obscure Apple Mail list thread:
- * http://www.mailinglistarchive.com/quicktime-api@lists.apple.com/msg05642.html
- * Now as we currently do not show a QTKit control bar with scrubber for display sizes > container
- * size, this seems to facilitate playback control from the HB custom HUD controller fairly close
- * to the built in controller bar.
- * Further work needs to be done to try to get accurate frame by frame playback display if we want it.
- * Note that the keyboard commands for frame by frame step through etc. work as always.
- */
-
-// Returns a human readable string from the currentTime of movie playback
-- (NSString*) calculatePlaybackSMTPETimecodeForDisplay
-{
- QTTime time = [aMovie currentTime];
-
- NSString *smtpeTimeCodeString;
- int days, hour, minute, second, frame;
- long long result;
-
- result = time.timeValue / time.timeScale; // second
- frame = (time.timeValue % time.timeScale) / 100;
-
- second = result % 60;
-
- result = result / 60; // minute
- minute = result % 60;
-
- result = result / 60; // hour
- hour = result % 24;
- days = result;
-
- smtpeTimeCodeString = [NSString stringWithFormat:@"Time: %02d:%02d:%02d", hour, minute, second]; // hh:mm:ss
- return smtpeTimeCodeString;
-
}
+#pragma mark *** Movie Playback Scrubber and time code methods ***
// Initialize the preview scrubber min/max to appropriate values for the current movie
-(void) initPreviewScrubberForMovie
{
if (aMovie)
{
-
QTTime duration = [aMovie duration];
- float result = duration.timeValue / duration.timeScale;
+ CGFloat result = duration.timeValue / duration.timeScale;
[fMovieScrubberSlider setMinValue:0.0];
- [fMovieScrubberSlider setMaxValue: (float)result];
- [fMovieScrubberSlider setFloatValue: 0.0];
+ [fMovieScrubberSlider setMaxValue: result];
+ [fMovieScrubberSlider setDoubleValue: 0.0];
}
}
-
-(void) adjustPreviewScrubberForCurrentMovieTime
{
if (aMovie)
{
QTTime time = [aMovie currentTime];
- float result = (float)time.timeValue / (float)time.timeScale;;
- [fMovieScrubberSlider setFloatValue:result];
+ CGFloat result = (CGFloat)time.timeValue / (CGFloat)time.timeScale;;
+ [fMovieScrubberSlider setDoubleValue:result];
}
}
{
if (aMovie)
{
- [fMovieView pause:aMovie]; // Pause the movie
- QTTime time = [aMovie currentTime];
- [self setTime: time.timeScale * [fMovieScrubberSlider floatValue]];
- [self calculatePlaybackSMTPETimecodeForDisplay];
+ [fMovieView pause:aMovie];
+ QTTime time = [self SliderToQTTime:[fMovieScrubberSlider doubleValue]];
+ [aMovie setCurrentTime:time];
+ [fMovieInfoField setStringValue: [self SMTPETimecode:time]];
}
}
-#pragma mark *** Movie Notifications ***
-- (void) installMovieCallbacks
+- (BOOL) isPlaying
{
+ if (aMovie != nil)
+ {
+ /* For some stupid reason there is no "isPlaying" method for a QTMovie
+ * object, given that, we detect the rate to determine whether the movie
+ * is playing or not.
+ */
+ if ([aMovie rate] != 0.0f) // we are playing
+ return YES;
+ else // we are paused or stopped
+ return NO;
+ }
+ return NO;
+}
+#pragma mark *** Movie Notifications ***
-/*Notification for any time the movie rate changes */
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(movieRateDidChange:)
- name:@"QTMovieRateDidChangeNotification"
- object:aMovie];
- /*Notification for when the movie ends */
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(movieDidEnd:)
- name:@"QTMovieDidEndNotification"
- object:aMovie];
+- (void) installMovieCallbacks
+{
+ /*Notification for any time the movie rate changes */
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(movieRateDidChange:)
+ name:@"QTMovieRateDidChangeNotification"
+ object:aMovie];
+ /*Notification for when the movie ends */
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(movieDidEnd:)
+ name:@"QTMovieDidEndNotification"
+ object:aMovie];
}
- (void)removeMovieCallbacks
{
if (aMovie != nil)
{
- /* For some stupid reason there is no "isPlaying" method for a QTMovie
- * object, given that, we detect the rate to determine whether the movie
- * is playing or not.
- */
- //[self adjustPreviewScrubberForCurrentMovieTime];
- if ([aMovie rate] != 0) // we are playing
- {
- [fPlayPauseButton setTitle: @"||"];
- }
- else // we are paused or stopped
- {
- [fPlayPauseButton setTitle: @">"];
- }
+ if ([self isPlaying])
+ [fPlayPauseButton setState: NSOnState];
+ else
+ [fPlayPauseButton setState: NSOffState];
}
}
+
/* This notification is not currently used. However we should keep it "just in case" as
* live preview playback is enhanced.
*/
- (void)movieDidEnd:(NSNotification *)notification
{
-
//[fHBController writeToActivityLog: "Movie DidEnd Notification Received"];
}
-
-#pragma mark *** QTTime Utilities ***
-
- // convert a time value (long) to a QTTime structure
--(void)timeToQTTime:(long)timeValue resultTime:(QTTime *)aQTTime
+/* fMovieView Keyboard controls */
+- (void)keyDown:(NSEvent *)event
{
- NSNumber *timeScaleObj;
- long timeScaleValue;
+ unichar key = [[event charactersIgnoringModifiers] characterAtIndex:0];
- timeScaleObj = [aMovie attributeForKey:QTMovieTimeScaleAttribute];
- timeScaleValue = [timeScaleObj longValue];
+ if (aMovie)
+ {
+ if (key == 32)
+ {
+ if ([self isPlaying])
+ [fMovieView pause:aMovie];
+ else
+ [fMovieView play:aMovie];
+ }
+ else if (key == 'k')
+ [fMovieView pause:aMovie];
+ else if (key == 'l')
+ {
+ float rate = [aMovie rate];
+ rate += 1.0f;
+ [fMovieView play:aMovie];
+ [aMovie setRate:rate];
+ }
+ else if (key == 'j')
+ {
+ float rate = [aMovie rate];
+ rate -= 1.0f;
+ [fMovieView play:aMovie];
+ [aMovie setRate:rate];
+ }
+ else if ([event modifierFlags] & NSAlternateKeyMask && key == NSLeftArrowFunctionKey)
+ [fMovieView gotoBeginning:self];
+ else if ([event modifierFlags] & NSAlternateKeyMask && key == NSRightArrowFunctionKey)
+ [fMovieView gotoEnd:self];
+ else if (key == NSLeftArrowFunctionKey)
+ [fMovieView stepBackward:self];
+ else if (key == NSRightArrowFunctionKey)
+ [fMovieView stepForward:self];
+ else
+ [super keyDown:event];
+ }
+ else if (!fEncodeState)
+ {
+ if (key == NSLeftArrowFunctionKey)
+ {
+ [fPictureSlider setIntegerValue:fPicture > [fPictureSlider minValue] ? fPicture - 1 : fPicture];
+ [self pictureSliderChanged:self];
+ }
+ else if (key == NSRightArrowFunctionKey)
+ {
+ [fPictureSlider setIntegerValue:fPicture < [fPictureSlider maxValue] ? fPicture + 1 : fPicture];
+ [self pictureSliderChanged:self];
+ }
+ [super keyDown:event];
+ }
- *aQTTime = QTMakeTime(timeValue, timeScaleValue);
+ [super keyDown:event];
}
- // set the movie's current time
--(void)setTime:(int)timeValue
+#pragma mark *** QTTime Utilities ***
+
+ // convert a time value (long) to a QTTime structure
+-(QTTime)SliderToQTTime:(double)value
{
- QTTime movieQTTime;
- NSValue *valueForQTTime;
-
- [self timeToQTTime:timeValue resultTime:&movieQTTime];
+ long timeScale = [[aMovie attributeForKey:QTMovieTimeScaleAttribute] longValue];
+ return QTMakeTime(value * timeScale, timeScale);
+}
- valueForQTTime = [NSValue valueWithQTTime:movieQTTime];
+/* Since MacOSX Leopard QTKit has taken over some responsibility for assessing movie playback
+ * information from the old QuickTime carbon api ( time code information as well as fps, etc.).
+ * However, the QTKit devs at apple were not really big on documentation and further ...
+ * QuickTimes ability to playback HB's largely variable framerate output makes perfectly frame
+ * accurate information at best convoluted. Still, for the purpose of a custom hud based custom
+ * playback scrubber slider this has so far proven to be as accurate as I have found. To say it
+ * could use some better accuracy is not understating it enough probably.
+ * Most of this was gleaned from this obscure Apple Mail list thread:
+ * http://www.mailinglistarchive.com/quicktime-api@lists.apple.com/msg05642.html
+ * Now as we currently do not show a QTKit control bar with scrubber for display sizes > container
+ * size, this seems to facilitate playback control from the HB custom HUD controller fairly close
+ * to the built in controller bar.
+ * Further work needs to be done to try to get accurate frame by frame playback display if we want it.
+ * Note that the keyboard commands for frame by frame step through etc. work as always.
+ */
- [aMovie setAttribute:valueForQTTime forKey:QTMovieCurrentTimeAttribute];
+// Returns a human readable string from the currentTime of movie playback
+- (NSString*) SMTPETimecode:(QTTime)time
+{
+ NSString *smtpeTimeCodeString;
+ int days, hour, minute, second, frame;
+ long long result;
+
+ result = time.timeValue / time.timeScale; // second
+ frame = (time.timeValue % time.timeScale) / 100;
+
+ second = result % 60;
+
+ result = result / 60; // minute
+ minute = result % 60;
+
+ result = result / 60; // hour
+ hour = result % 24;
+ days = result;
+
+ smtpeTimeCodeString = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, minute, second]; // hh:mm:ss
+ return smtpeTimeCodeString;
}
-
@end
@implementation PreviewController (Private)
CGFloat minHeight = 360.0;
NSSize screenSize = [[[self window] screen] visibleFrame].size;
- NSSize sheetSize = [[self window] frame].size;
- NSSize viewAreaSize = [fPictureViewArea frame].size;
- CGFloat paddingX = 0.00;
- CGFloat paddingY = 0.00;
-
- if (fTitle->width > screenSize.width || fTitle->height > screenSize.height)
- {
- if (scaleToScreen == YES)
- {
- paddingX = screenSize.width - imageSize.width;
- paddingY = screenSize.height - imageSize.height;
- }
-
- else
- {
- paddingX = sheetSize.width - viewAreaSize.width;
- paddingY = sheetSize.height - viewAreaSize.height;
- }
+ CGFloat maxWidth = screenSize.width;
+ CGFloat maxHeight = screenSize.height;
- }
-
- CGFloat maxWidth;
- CGFloat maxHeight;
- maxWidth = screenSize.width - paddingX;
- maxHeight = screenSize.height - paddingY;
-
NSSize resultSize = imageSize;
CGFloat resultPar = resultSize.width / resultSize.height;
//note, a mbp 15" at 1440 x 900 is a 1.6 ar
CGFloat screenAspect = screenSize.width / screenSize.height;
- // Note, a standard dvd will use 720 x 480 which is a 1.5
- CGFloat viewAreaAspect = viewAreaSize.width / viewAreaSize.height;
-
- if (scaleToScreen == YES)
- {
-
- if (screenAspect < viewAreaAspect)
- {
- resultSize.width = screenSize.width;
- resultSize.height = (screenSize.width / viewAreaAspect);
- }
- else
- {
- resultSize.height = screenSize.height;
- resultSize.width = resultSize.height * viewAreaAspect;
- }
-
- }
- else if ( resultSize.width > maxWidth || resultSize.height > maxHeight )
+
+ if ( resultSize.width > maxWidth || resultSize.height > maxHeight )
{
// Source is larger than screen in one or more dimensions
if ( resultPar > screenAspect )
// If necessary, grow to minimum dimensions to ensure controls overlay is not obstructed
if ( resultSize.width < minWidth )
- {
resultSize.width = minWidth;
- }
if ( resultSize.height < minHeight )
- {
resultSize.height = minHeight;
- }
-
- return resultSize;
-
+ return resultSize;
}
//
-// -[PictureController(Private) resizePanelForViewSize:animate:]
+// -[PictureController(Private) resizeWindowForViewSize:]
//
// Resizes the entire window to accomodate a view of a particular size.
//
-- (void)resizeSheetForViewSize: (NSSize)viewSize
+- (void)resizeWindowForViewSize: (NSSize)viewSize
{
// Figure out the deltas for the new frame area
- NSSize currentSize = [fPictureViewArea frame].size;
+ NSSize currentSize = [[[self window] contentView] frame].size;
CGFloat deltaX = viewSize.width - currentSize.width;
CGFloat deltaY = viewSize.height - currentSize.height;
// Now resize the whole panel by those same deltas, but don't exceed the min
NSRect frame = [[self window] frame];
NSSize maxSize = [[[self window] screen] visibleFrame].size;
- /* if we are not Scale To Screen, put an 85% of visible screen on the window */
+ /* if we are not Scale To Screen, put an 10% of visible screen on the window */
if (scaleToScreen == NO )
{
- maxSize.width = maxSize.width * 0.85;
- maxSize.height = maxSize.height * 0.85;
+ maxSize.width = maxSize.width * 0.90;
+ maxSize.height = maxSize.height * 0.90;
}
/* Set our min size to the storage size */
NSSize minSize;
- minSize.width = fTitle->width;
- minSize.height = fTitle->height;
+ minSize.width = fTitle->width / backingScaleFactor;
+ minSize.height = fTitle->height / backingScaleFactor;
frame.size.width += deltaX;
frame.size.height += deltaY;
if( frame.size.width < minSize.width )
{
frame.size.width = minSize.width;
+ deltaX = frame.size.width - currentSize.width;
}
-
if( frame.size.height < minSize.height )
{
frame.size.height = minSize.height;
+ deltaY = frame.size.height - currentSize.height;
}
/* compare frame to max size of screen */
frame.size.height = maxSize.height;
}
-
-
-
-
// But now the sheet is off-center, so also shift the origin to center it and
// keep the top aligned.
if( frame.size.width != [[self window] frame].size.width )
frame.origin.x -= (deltaX / 2.0);
-
- /* Since upon launch we can open up the preview window if it was open
- * the last time we quit (and at the size it was) we want to make
- * sure that upon resize we do not have the window off the screen
- * So check the origin against the screen origin and adjust if
- * necessary.
- */
- NSSize screenSize = [[[self window] screen] visibleFrame].size;
- NSPoint screenOrigin = [[[self window] screen] frame].origin;
- if (screenSize.height < frame.size.height)
- {
- frame.size.height = screenSize.height;
- }
- if (screenSize.width < frame.size.width)
- {
- frame.size.width = screenSize.width;
- }
-
-
- /* our origin is off the screen to the left*/
- if (frame.origin.x < screenOrigin.x)
- {
- /* so shift our origin to the right */
- frame.origin.x = screenOrigin.x;
- }
- else if ((frame.origin.x + frame.size.width) > (screenOrigin.x + screenSize.width))
- {
- /* the right side of the preview is off the screen, so shift to the left */
- frame.origin.x = (screenOrigin.x + screenSize.width) - frame.size.width;
- }
-
- [[self window] setFrame:frame display:YES animate:YES];
-
-
-}
-
-//
-// -[PictureController(Private) setViewSize:]
-//
-// Changes the view's size and centers it vertically inside of its area.
-// Assumes resizeSheetForViewSize: has already been called.
-//
-- (void)setViewSize: (NSSize)viewSize
-{
-
- /* special case for scaleToScreen */
- NSSize areaSize = [fPictureViewArea frame].size;
- CGFloat viewSizeAspect = viewSize.width / viewSize.height;
-
- if (viewSize.width > areaSize.width || viewSize.height > areaSize.height)
+ /* Since upon launch we can open up the preview window if it was open
+ * the last time we quit (and at the size it was) we want to make
+ * sure that upon resize we do not have the window off the screen
+ * So check the origin against the screen origin and adjust if
+ * necessary.
+ */
+ NSSize screenSize = [[[self window] screen] visibleFrame].size;
+ NSPoint screenOrigin = [[[self window] screen] frame].origin;
+ if (screenSize.height < frame.size.height)
{
-
- if (viewSizeAspect > 1.0) // we are wider than taller, so expand the width to fill the area and scale the height
- {
- viewSize.width = areaSize.width;
- viewSize.height = viewSize.width / viewSizeAspect;
- }
- else
- {
- viewSize.height = areaSize.height;
- viewSize.width = viewSize.height * viewSizeAspect;
- }
-
+ frame.size.height = screenSize.height;
+ }
+ if (screenSize.width < frame.size.width)
+ {
+ frame.size.width = screenSize.width;
}
- [fPictureView setFrameSize:viewSize];
-
-
- // center it vertically and horizontally
- NSPoint origin = [fPictureViewArea frame].origin;
- origin.y += ([fPictureViewArea frame].size.height -
- [fPictureView frame].size.height) / 2.0;
-
- origin.x += ([fPictureViewArea frame].size.width -
- [fPictureView frame].size.width) / 2.0;
-
- origin.x = floor( origin.x );
- origin.y = floor( origin.y );
-
- [fPictureView setFrameOrigin:origin];
+ /* our origin is off the screen to the left*/
+ if (frame.origin.x < screenOrigin.x)
+ {
+ /* so shift our origin to the right */
+ frame.origin.x = screenOrigin.x;
+ }
+ else if ((frame.origin.x + frame.size.width) > (screenOrigin.x + screenSize.width))
+ {
+ /* the right side of the preview is off the screen, so shift to the left */
+ frame.origin.x = (screenOrigin.x + screenSize.width) - frame.size.width;
+ }
-}
-
-
-- (BOOL)viewNeedsToResizeToSize: (NSSize)newSize
-{
- NSSize viewSize = [fPictureViewArea frame].size;
- return (newSize.width != viewSize.width || newSize.height != viewSize.height);
+ [[self window] setFrame:frame display:YES animate:YES];
}
@end
27D6C77314B102DA00B785E4 /* libxml2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C74014B102DA00B785E4 /* libxml2.a */; };
3490BCB41614CF8D002A5AD7 /* HandBrake.icns in Resources */ = {isa = PBXBuildFile; fileRef = 3490BCB31614CF8D002A5AD7 /* HandBrake.icns */; };
46AB433515F98A2B009C0961 /* DockTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 46AB433415F98A2B009C0961 /* DockTextField.m */; };
+ A9E1467B16BC2ABD00C307BC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9E1467A16BC2ABD00C307BC /* QuartzCore.framework */; };
+ A9E1468016BC2AD800C307BC /* next-p.pdf in Resources */ = {isa = PBXBuildFile; fileRef = A9E1467C16BC2AD800C307BC /* next-p.pdf */; };
+ A9E1468116BC2AD800C307BC /* pause-p.pdf in Resources */ = {isa = PBXBuildFile; fileRef = A9E1467D16BC2AD800C307BC /* pause-p.pdf */; };
+ A9E1468216BC2AD800C307BC /* play-p.pdf in Resources */ = {isa = PBXBuildFile; fileRef = A9E1467E16BC2AD800C307BC /* play-p.pdf */; };
+ A9E1468316BC2AD800C307BC /* prev-p.pdf in Resources */ = {isa = PBXBuildFile; fileRef = A9E1467F16BC2AD800C307BC /* prev-p.pdf */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
27D6C73E14B102DA00B785E4 /* libvorbisenc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libvorbisenc.a; path = external/contrib/lib/libvorbisenc.a; sourceTree = BUILT_PRODUCTS_DIR; };
27D6C73F14B102DA00B785E4 /* libx264.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libx264.a; path = external/contrib/lib/libx264.a; sourceTree = BUILT_PRODUCTS_DIR; };
27D6C74014B102DA00B785E4 /* libxml2.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libxml2.a; path = external/contrib/lib/libxml2.a; sourceTree = BUILT_PRODUCTS_DIR; };
- 3490BCB31614CF8D002A5AD7 /* HandBrake.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = HandBrake.icns; path = HandBrake.icns; sourceTree = "<group>"; };
+ 3490BCB31614CF8D002A5AD7 /* HandBrake.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = HandBrake.icns; sourceTree = "<group>"; };
34FF2FC014EEC363004C2400 /* HBAdvancedController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBAdvancedController.h; sourceTree = "<group>"; };
46AB433315F98A2B009C0961 /* DockTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DockTextField.h; sourceTree = "<group>"; };
46AB433415F98A2B009C0961 /* DockTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DockTextField.m; sourceTree = "<group>"; };
+ A9E1467A16BC2ABD00C307BC /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = /System/Library/Frameworks/QuartzCore.framework; sourceTree = "<absolute>"; };
+ A9E1467C16BC2AD800C307BC /* next-p.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "next-p.pdf"; sourceTree = "<group>"; };
+ A9E1467D16BC2AD800C307BC /* pause-p.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "pause-p.pdf"; sourceTree = "<group>"; };
+ A9E1467E16BC2AD800C307BC /* play-p.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "play-p.pdf"; sourceTree = "<group>"; };
+ A9E1467F16BC2AD800C307BC /* prev-p.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "prev-p.pdf"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ A9E1467B16BC2ABD00C307BC /* QuartzCore.framework in Frameworks */,
273F21C114ADE7A20021BE6D /* Growl.framework in Frameworks */,
273F21C214ADE7BC0021BE6D /* Sparkle.framework in Frameworks */,
273F20C914ADC5150021BE6D /* AudioToolbox.framework in Frameworks */,
273F203414ADBAC30021BE6D /* Frameworks */ = {
isa = PBXGroup;
children = (
+ A9E1467A16BC2ABD00C307BC /* QuartzCore.framework */,
273F20C714ADC4FF0021BE6D /* QTKit.framework */,
273F202F14ADB9790021BE6D /* AudioToolbox.framework */,
273F203B14ADBC210021BE6D /* Cocoa.framework */,
273F212014ADCBF70021BE6D /* icons */ = {
isa = PBXGroup;
children = (
+ A9E1467C16BC2AD800C307BC /* next-p.pdf */,
+ A9E1467D16BC2AD800C307BC /* pause-p.pdf */,
+ A9E1467E16BC2AD800C307BC /* play-p.pdf */,
+ A9E1467F16BC2AD800C307BC /* prev-p.pdf */,
273F212114ADCBF70021BE6D /* ActivityWindow.tiff */,
273F212214ADCBF70021BE6D /* AddToQueue.tiff */,
273F212414ADCBF70021BE6D /* Brushed_Window.png */,
273F219014ADDDA10021BE6D /* Preferences.xib in Resources */,
273F219114ADDDA10021BE6D /* Queue.xib in Resources */,
3490BCB41614CF8D002A5AD7 /* HandBrake.icns in Resources */,
+ A9E1468016BC2AD800C307BC /* next-p.pdf in Resources */,
+ A9E1468116BC2AD800C307BC /* pause-p.pdf in Resources */,
+ A9E1468216BC2AD800C307BC /* play-p.pdf in Resources */,
+ A9E1468316BC2AD800C307BC /* prev-p.pdf in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
* this is the only place I could find that looked like C :)
****************************************************************************/
extern "C" {
-void hb_error_handler( const char *errmsg )
-{
- fprintf(stderr, "GUI ERROR dialog: %s\n", errmsg );
-}
+ void hb_error_handler( const char *errmsg )
+ {
+ fprintf(stderr, "GUI ERROR dialog: %s\n", errmsg );
+ }
}
char * str_printf(const char *fmt, ...)
}
}
-#define EXTRA_VLC_DYLD_PATH "/Applications/VLC.app/Contents/MacOS/lib"
-#define DEFAULT_DYLD_PATH "/usr/local/lib:/usr/lib"
-
int main( int argc, const char ** argv )
{
- char *dylib_path;
- int no_exec = 0;
-
- // Check for flag that prevents exec bomb. It
- // incidentally can be used to prevent adding
- // our modifications to the dyld env vars.
- if ( argc > 1 && strncmp(argv[1], "-n", 2) == 0 )
- no_exec = 1;
-
- if ( !no_exec )
- {
- dylib_path = getenv("DYLD_FALLBACK_LIBRARY_PATH");
- if ( dylib_path == NULL ||
- strstr( dylib_path, "/Applications/VLC.app/Contents/MacOS/lib" ) == NULL )
- {
- char *path = NULL;
- char *home;
- int result = -1;
-
- home = getenv("HOME");
-
- if ( dylib_path == NULL )
- {
- // Set the system default of $HOME/lib:/usr/local/lib:/usr/lib
- // And add our extra path
- if ( home != NULL )
- {
- path = str_printf("%s/lib:%s:%s:%s%s", home,
- DEFAULT_DYLD_PATH,
- EXTRA_VLC_DYLD_PATH,
- home, EXTRA_VLC_DYLD_PATH);
- }
- else
- {
- path = str_printf("%s:%s", DEFAULT_DYLD_PATH, EXTRA_VLC_DYLD_PATH);
- }
- if ( path != NULL )
- result = setenv("DYLD_FALLBACK_LIBRARY_PATH", path, 1);
- }
- else
- {
- // add our extra path
- if ( home != NULL )
- {
- path = str_printf("%s:%s:%s%s", dylib_path, EXTRA_VLC_DYLD_PATH,
- home, EXTRA_VLC_DYLD_PATH);
- }
- else
- {
- path = str_printf("%s:%s", dylib_path, EXTRA_VLC_DYLD_PATH);
- }
- if ( path != NULL )
- result = setenv("DYLD_FALLBACK_LIBRARY_PATH", path, 1);
- }
- if ( result == 0 )
- {
- const char ** new_argv;
- int i;
-
- new_argv = (const char**)malloc( (argc + 2) * sizeof(char*) );
- new_argv[0] = argv[0];
- new_argv[1] = "-n";
- for (i = 1; i < argc; i++)
- new_argv[i+1] = argv[i];
- new_argv[i+1] = NULL;
- execv(new_argv[0], (char* const*)new_argv);
- }
- }
- }
signal( SIGINT, SigHandler );
hb_register_error_handler(&hb_error_handler);
return NSApplicationMain( argc, argv );
self.name = self.names[0]
self.pretext = self.name
self.pathname = self.names[0]
+ self.minversion = kwargs.get('minversion', None)
def _action( self ):
self.session = []
break
if self.fail:
self.msg_end = 'not found'
+ elif self.minversion:
+ self.version = VersionProbe( [self.pathname, '--version'], minversion=self.minversion )
def cli_add_option( self, parser ):
parser.add_option( '--'+self.name, metavar='PROG',
###############################################################################
+###############################################################################
+##
+## version probe: passes --version to command and only cares about first line
+## of output. If probe fails, a default version of '0.0.0' results.
+## The default rexpr is useful for some very simple version strings. A Custom
+## expression would be required for more complex version strings.
+##
+## command = full command and arguments to pipe
+## rexpr = a regular expression which must return named subgroups:
+## name: mandatory. The tool name.
+## svers: mandatory. The whole version tuple to be represented as string.
+## i0: mandatory. First element of version tuple to be parsed as int.
+## i1: optional. Second element of version tuple to be parsed as int.
+## i2: optional. Third element of version tuple to be parsed as int.
+## All matching is case-insensitive.
+## abort = if true configure will exit on probe fail
+## session = result. array of lines (stdout/stderr) from command
+## fail = result. true if probe failed
+## svers = result. string of version tuple
+## ivers = result. int[3] of version tuple
+##
+class VersionProbe( Action ):
+ def __init__( self, command, minversion=None, rexpr=None, abort=False ):
+ super( VersionProbe, self ).__init__( 'version probe', os.path.basename(command[0]), abort )
+ self.command = command
+ self.minversion = minversion
+ if not rexpr:
+ rexpr = '(?P<name>[^.]+)\s+(?P<svers>(?P<i0>\d+)(\.(?P<i1>\d+))?(\.(?P<i2>\d+))?)'
+ self.rexpr = rexpr
+
+ def _action( self ):
+ ## pipe and redirect stderr to stdout; effects communicate result
+ pipe = subprocess.Popen( self.command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
+
+ ## read data into memory buffers
+ data = pipe.communicate()
+ self.fail = pipe.returncode != 0
+
+ if data[0]:
+ self.session = data[0].splitlines()
+ else:
+ self.session = []
+
+ self.svers = '0.0.0'
+ self.ivers = [0,0,0]
+
+ try:
+ if not self.fail and self.session and len(self.session):
+ self.fail = True
+ self._parse()
+ self.fail = False
+ self.msg_end = self.svers
+ except Exception, x:
+ self.svers = '0.0.0'
+ self.ivers = [0,0,0]
+ self.msg_end = str(x)
+
+ def _dumpSession( self, printf ):
+ printf( ' + %s\n', ' '.join(self.command) )
+ super( VersionProbe, self )._dumpSession( printf )
+
+ def _parse( self ):
+ mo = re.match( self.rexpr, self.session[0], re.IGNORECASE )
+ md = mo.groupdict()
+ self.svers = md['svers']
+ if 'i0' in md and md['i0']:
+ self.ivers[0] = int(md['i0'])
+ if 'i1' in md and md['i1']:
+ self.ivers[1] = int(md['i1'])
+ if 'i2' in md and md['i2']:
+ self.ivers[2] = int(md['i2'])
+
+ def inadequate( self ):
+ if not self.minversion:
+ return False
+ return self.lesser( self.minversion )
+
+ def lesser( self, ivers ):
+ for i in range(0,3):
+ if self.ivers[i] < ivers[i]:
+ return True
+ elif self.ivers[i] > ivers[i]:
+ return False
+ return False
+
+###############################################################################
+
class SelectTool( Action ):
selects = []
strip = ToolProbe( 'STRIP.exe', 'strip' )
tar = ToolProbe( 'TAR.exe', 'gtar', 'tar' )
wget = ToolProbe( 'WGET.exe', 'wget', abort=False )
- yasm = ToolProbe( 'YASM.exe', 'yasm', abort=False )
+ yasm = ToolProbe( 'YASM.exe', 'yasm', abort=False, minversion=[1,2,0] )
autoconf = ToolProbe( 'AUTOCONF.exe', 'autoconf', abort=False )
automake = ToolProbe( 'AUTOMAKE.exe', 'automake', abort=False )
libtool = ToolProbe( 'LIBTOOL.exe', 'libtool', abort=False )
for action in Action.actions:
action.run()
- ## enable local yasm when yasm probe fails
- if not options.enable_local_yasm and Tools.yasm.fail:
- options.enable_local_yasm = True
+ ## enable local yasm when yasm probe fails or version is too old
+ ## x264 requires 1.2.0+
+ if not options.enable_local_yasm:
+ if Tools.yasm.fail:
+ stdout.write( 'note: enabling local yasm: missing system yasm\n' )
+ options.enable_local_yasm = True
+ elif Tools.yasm.version.inadequate():
+ stdout.write( 'note: enabling local yasm: minimum required version is %s and %s is %s\n' % ('.'.join([str(i) for i in Tools.yasm.version.minversion]),Tools.yasm.pathname,Tools.yasm.version.svers) )
+ options.enable_local_yasm = True
## enable local autotools when any of { autoconf, automake, libtool } probe fails
if not options.enable_local_autotools and (Tools.autoconf.fail or Tools.automake.fail or Tools.libtool.fail):
+ stdout.write( 'note: enabling local autotools\n' )
options.enable_local_autotools = True
if build.system == 'mingw':
case "$CONFIGURATION" in
debug*)
- debug="--debug=max --optimize=none"
+ debug="--debug=std --optimize=none"
;;
release*|*)
debug=
Section: graphics
Priority: optional
Maintainer: John Stebbins <jstebbins.hb@gmail.com>
-Build-Depends: debhelper (>= 6), autotools-dev, libtool, libgudev-1.0-dev, intltool, autoconf, yasm (>= 1.1.0), libbz2-dev, zlib1g-dev, libwebkitgtk-dev, libnotify-dev, libgstreamer0.10-dev, libgstreamer-plugins-base0.10-dev, wget, subversion, python (>= 2.6), libappindicator-dev, libfribidi-dev (>= 0.19.0), libxml2-dev, libogg-dev, libtheora-dev, libvorbis-dev, libsamplerate0-dev, libfreetype6-dev, libfontconfig1-dev, libass-dev
+Build-Depends: debhelper (>= 6), autotools-dev, libtool, libgudev-1.0-dev, intltool, autoconf, yasm (>= 1.1.0), libbz2-dev, zlib1g-dev, libgtk-3-dev, libwebkitgtk-3.0-dev, libnotify-dev, libgstreamer1.0-dev, libgstreamer-plugins-base1.0-dev, wget, subversion, python (>= 2.6), libappindicator3-dev, libfribidi-dev (>= 0.19.0), libxml2-dev, libogg-dev, libtheora-dev, libvorbis-dev, libsamplerate0-dev, libfreetype6-dev, libfontconfig1-dev, libass-dev
Standards-Version: 3.8.4
Homepage: http://www.handbrake.fr/
Package: handbrake-gtk
Architecture: i386 amd64
-Depends: ${shlibs:Depends}, ${misc:Depends}, libwebkitgtk-1.0-0, libnotify4
+Depends: ${shlibs:Depends}, ${misc:Depends}, gstreamer1.0-libav, gstreamer1.0-plugins-base, gstreamer1.0-plugins-good, gstreamer1.0-plugins-bad, gstreamer1.0-plugins-ugly, gstreamer1.0-pulseaudio
Conflicts: handbrake
Description: versatile DVD ripper and video transcoder - GTK GUI
HandBrake is a versatile, easy-to-use tool for converting DVDs and other videos
--- /dev/null
+#!/usr/bin/make -f
+# -*- makefile -*-
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+
+# These are used for cross-compiling and for saving the configure script
+# from having to guess our platform (since we know it already)
+DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
+CROSS= --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE)
+else
+CROSS= --build $(DEB_BUILD_GNU_TYPE)
+endif
+
+PKGDESTDIR = ../
+CONFIGURE = ./configure
+BUILDDIR = build
+FORCEVERSION =
+
+$(BUILDDIR)/GNUmakefile: $(CONFIGURE)
+ dh_testdir
+ unset CFLAGS; unset CPPLAGS; unset CXXLAGS; $(CONFIGURE) --enable-local-yasm --disable-gtk-update-checks --prefix=/usr
+
+build: $(BUILDDIR)/GNUmakefile
+ dh_testdir
+ #We must build both the main project and the GTK project
+ unset CFLAGS ; unset CPPLAGS ; unset CXXLAGS; $(MAKE) -C $(BUILDDIR)
+
+clean:
+ dh_testdir
+ dh_testroot
+
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_installdirs
+ $(MAKE) -C $(BUILDDIR) DESTDIR=$(CURDIR)/debian/tmp install
+
+# Build architecture-independent files here.
+binary-indep: build install
+ dh_testdir
+ dh_testroot
+ dh_installchangelogs -i
+ dh_installdocs -i
+ dh_install --sourcedir=debian/tmp -i
+ dh_icons -i
+ dh_link -i
+ dh_compress -i
+ dh_fixperms -i
+ dh_installdeb -i
+ dh_gencontrol -i $(FORCEVERSION)
+ dh_md5sums -i
+ dh_builddeb --destdir=$(PKGDESTDIR) -i
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+ dh_install --sourcedir=debian/tmp -a
+ dh_installchangelogs -a
+ dh_installdocs -a
+ dh_installexamples -a
+ dh_installman -a
+ dh_link -a
+ dh_icons -a
+ dh_strip -a
+ dh_compress -a
+ dh_fixperms -a
+ dh_installdeb -a
+ dh_shlibdeps -a
+ dh_gencontrol -a $(FORCEVERSION)
+ dh_md5sums -a
+ dh_builddeb -a --destdir=$(PKGDESTDIR) -- -Zbzip2
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install
--- /dev/null
+#!/usr/bin/make -f
+# -*- makefile -*-
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+
+# These are used for cross-compiling and for saving the configure script
+# from having to guess our platform (since we know it already)
+DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
+CROSS= --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE)
+else
+CROSS= --build $(DEB_BUILD_GNU_TYPE)
+endif
+
+PKGDESTDIR = ../
+CONFIGURE = ./configure
+BUILDDIR = build
+FORCEVERSION =
+
+$(BUILDDIR)/GNUmakefile: $(CONFIGURE)
+ dh_testdir
+ unset CFLAGS; unset CPPLAGS; unset CXXLAGS; $(CONFIGURE) --enable-local-yasm --disable-gtk-update-checks --prefix=/usr
+
+build: $(BUILDDIR)/GNUmakefile
+ dh_testdir
+ #We must build both the main project and the GTK project
+ unset CFLAGS ; unset CPPLAGS ; unset CXXLAGS; $(MAKE) -C $(BUILDDIR)
+
+clean:
+ dh_testdir
+ dh_testroot
+
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_installdirs
+ $(MAKE) -C $(BUILDDIR) DESTDIR=$(CURDIR)/debian/tmp install
+
+# Build architecture-independent files here.
+binary-indep: build install
+ dh_testdir
+ dh_testroot
+ dh_installchangelogs -i
+ dh_installdocs -i
+ dh_install --sourcedir=debian/tmp -i
+ dh_icons -i
+ dh_link -i
+ dh_compress -i
+ dh_fixperms -i
+ dh_installdeb -i
+ dh_gencontrol -i $(FORCEVERSION)
+ dh_md5sums -i
+ dh_builddeb --destdir=$(PKGDESTDIR) -i
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+ dh_install --sourcedir=debian/tmp -a
+ dh_installchangelogs -a
+ dh_installdocs -a
+ dh_installexamples -a
+ dh_installman -a
+ dh_link -a
+ dh_icons -a
+ dh_strip -a
+ dh_compress -a
+ dh_fixperms -a
+ dh_installdeb -a
+ dh_shlibdeps -a
+ dh_gencontrol -a $(FORCEVERSION)
+ dh_md5sums -a
+ dh_builddeb -a --destdir=$(PKGDESTDIR) -- -Zbzip2
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install
--- /dev/null
+#!/usr/bin/make -f
+# -*- makefile -*-
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+
+# These are used for cross-compiling and for saving the configure script
+# from having to guess our platform (since we know it already)
+DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
+CROSS= --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE)
+else
+CROSS= --build $(DEB_BUILD_GNU_TYPE)
+endif
+
+PKGDESTDIR = ../
+CONFIGURE = ./configure
+BUILDDIR = build
+FORCEVERSION =
+
+$(BUILDDIR)/GNUmakefile: $(CONFIGURE)
+ dh_testdir
+ unset CFLAGS; unset CPPLAGS; unset CXXLAGS; $(CONFIGURE) --enable-local-yasm --disable-gtk-update-checks --prefix=/usr
+
+build: $(BUILDDIR)/GNUmakefile
+ dh_testdir
+ #We must build both the main project and the GTK project
+ unset CFLAGS ; unset CPPLAGS ; unset CXXLAGS; $(MAKE) -C $(BUILDDIR)
+
+clean:
+ dh_testdir
+ dh_testroot
+
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_installdirs
+ $(MAKE) -C $(BUILDDIR) DESTDIR=$(CURDIR)/debian/tmp install
+
+# Build architecture-independent files here.
+binary-indep: build install
+ dh_testdir
+ dh_testroot
+ dh_installchangelogs -i
+ dh_installdocs -i
+ dh_install --sourcedir=debian/tmp -i
+ dh_icons -i
+ dh_link -i
+ dh_compress -i
+ dh_fixperms -i
+ dh_installdeb -i
+ dh_gencontrol -i $(FORCEVERSION)
+ dh_md5sums -i
+ dh_builddeb --destdir=$(PKGDESTDIR) -i
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+ dh_install --sourcedir=debian/tmp -a
+ dh_installchangelogs -a
+ dh_installdocs -a
+ dh_installexamples -a
+ dh_installman -a
+ dh_link -a
+ dh_icons -a
+ dh_strip -a
+ dh_compress -a
+ dh_fixperms -a
+ dh_installdeb -a
+ dh_shlibdeps -a
+ dh_gencontrol -a $(FORCEVERSION)
+ dh_md5sums -a
+ dh_builddeb -a --destdir=$(PKGDESTDIR) -- -Zbzip2
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install
--- /dev/null
+#!/usr/bin/make -f
+# -*- makefile -*-
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+
+# These are used for cross-compiling and for saving the configure script
+# from having to guess our platform (since we know it already)
+DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
+CROSS= --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE)
+else
+CROSS= --build $(DEB_BUILD_GNU_TYPE)
+endif
+
+PKGDESTDIR = ../
+CONFIGURE = ./configure
+BUILDDIR = build
+FORCEVERSION =
+
+$(BUILDDIR)/GNUmakefile: $(CONFIGURE)
+ dh_testdir
+ unset CFLAGS; unset CPPLAGS; unset CXXLAGS; $(CONFIGURE) --enable-local-yasm --disable-gtk-update-checks --prefix=/usr
+
+build: $(BUILDDIR)/GNUmakefile
+ dh_testdir
+ #We must build both the main project and the GTK project
+ unset CFLAGS ; unset CPPLAGS ; unset CXXLAGS; $(MAKE) -C $(BUILDDIR)
+
+clean:
+ dh_testdir
+ dh_testroot
+
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_installdirs
+ $(MAKE) -C $(BUILDDIR) DESTDIR=$(CURDIR)/debian/tmp install
+
+# Build architecture-independent files here.
+binary-indep: build install
+ dh_testdir
+ dh_testroot
+ dh_installchangelogs -i
+ dh_installdocs -i
+ dh_install --sourcedir=debian/tmp -i
+ dh_icons -i
+ dh_link -i
+ dh_compress -i
+ dh_fixperms -i
+ dh_installdeb -i
+ dh_gencontrol -i $(FORCEVERSION)
+ dh_md5sums -i
+ dh_builddeb --destdir=$(PKGDESTDIR) -i
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+ dh_install --sourcedir=debian/tmp -a
+ dh_installchangelogs -a
+ dh_installdocs -a
+ dh_installexamples -a
+ dh_installman -a
+ dh_link -a
+ dh_icons -a
+ dh_strip -a
+ dh_compress -a
+ dh_fixperms -a
+ dh_installdeb -a
+ dh_shlibdeps -a
+ dh_gencontrol -a $(FORCEVERSION)
+ dh_md5sums -a
+ dh_builddeb -a --destdir=$(PKGDESTDIR) -- -Zbzip2
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install
$(CP.exe) -a $(SRC/)download $(STAGE.out.src/)quantal/$(PKG.deb.basename)
cp -a $(PWD)/$(PKG.debian) $(STAGE.out.src/)quantal/$(PKG.deb.basename)
$(CP.exe) $(STAGE.out.src/)quantal/$(PKG.deb.basename)/debian/control.quantal $(STAGE.out.src/)quantal/$(PKG.deb.basename)/debian/control
+ $(CP.exe) $(STAGE.out.src/)quantal/$(PKG.deb.basename)/debian/rules.quantal $(STAGE.out.src/)quantal/$(PKG.deb.basename)/debian/rules
echo "handbrake ($(HB.version)ppa1~quantal1) quantal; urgency=low" > $(STAGE.out.src/)quantal/$(PKG.deb.basename)/debian/changelog
echo " * Snapshot" >> $(STAGE.out.src/)quantal/$(PKG.deb.basename)/debian/changelog
echo " - See timeline at http://trac.handbrake.fr/timeline" >> $(STAGE.out.src/)quantal/$(PKG.deb.basename)/debian/changelog
$(CP.exe) -a $(SRC/)download $(STAGE.out.src/)precise/$(PKG.deb.basename)
cp -a $(PWD)/$(PKG.debian) $(STAGE.out.src/)precise/$(PKG.deb.basename)
$(CP.exe) $(STAGE.out.src/)precise/$(PKG.deb.basename)/debian/control.precise $(STAGE.out.src/)precise/$(PKG.deb.basename)/debian/control
+ $(CP.exe) $(STAGE.out.src/)precise/$(PKG.deb.basename)/debian/rules.precise $(STAGE.out.src/)precise/$(PKG.deb.basename)/debian/rules
echo "handbrake ($(HB.version)ppa1~precise1) precise; urgency=low" > $(STAGE.out.src/)precise/$(PKG.deb.basename)/debian/changelog
echo " * Snapshot" >> $(STAGE.out.src/)precise/$(PKG.deb.basename)/debian/changelog
echo " - See timeline at http://trac.handbrake.fr/timeline" >> $(STAGE.out.src/)precise/$(PKG.deb.basename)/debian/changelog
$(CP.exe) -a $(SRC/)download $(STAGE.out.src/)oneiric/$(PKG.deb.basename)
cp -a $(PWD)/$(PKG.debian) $(STAGE.out.src/)oneiric/$(PKG.deb.basename)
$(CP.exe) $(STAGE.out.src/)oneiric/$(PKG.deb.basename)/debian/control.oneiric $(STAGE.out.src/)oneiric/$(PKG.deb.basename)/debian/control
+ $(CP.exe) $(STAGE.out.src/)oneiric/$(PKG.deb.basename)/debian/rules.oneiric $(STAGE.out.src/)oneiric/$(PKG.deb.basename)/debian/rules
echo "handbrake ($(HB.version)ppa1~oneiric1) oneiric; urgency=low" > $(STAGE.out.src/)oneiric/$(PKG.deb.basename)/debian/changelog
echo " * Snapshot" >> $(STAGE.out.src/)oneiric/$(PKG.deb.basename)/debian/changelog
echo " - See timeline at http://trac.handbrake.fr/timeline" >> $(STAGE.out.src/)oneiric/$(PKG.deb.basename)/debian/changelog
$(CP.exe) -a $(SRC/)download $(STAGE.out.src/)natty/$(PKG.deb.basename)
cp -a $(PWD)/$(PKG.debian) $(STAGE.out.src/)natty/$(PKG.deb.basename)
$(CP.exe) $(STAGE.out.src/)natty/$(PKG.deb.basename)/debian/control.natty $(STAGE.out.src/)natty/$(PKG.deb.basename)/debian/control
+ $(CP.exe) $(STAGE.out.src/)natty/$(PKG.deb.basename)/debian/rules.natty $(STAGE.out.src/)natty/$(PKG.deb.basename)/debian/rules
echo "handbrake ($(HB.version)ppa1~natty1) natty; urgency=low" > $(STAGE.out.src/)natty/$(PKG.deb.basename)/debian/changelog
echo " * Snapshot" >> $(STAGE.out.src/)natty/$(PKG.deb.basename)/debian/changelog
echo " - See timeline at http://trac.handbrake.fr/timeline" >> $(STAGE.out.src/)natty/$(PKG.deb.basename)/debian/changelog
if hash["VideoTurboTwoPass"] == 1 then commandString << " -T" end
#Advanced Options
- if hash["x264Preset"] != nil && hash["x264Preset"] != "" && hash["x264Preset"] != "custom"
+ if hash["x264UseAdvancedOptions"] != 1
+ if hash["x264Preset"] != ""
commandString << " --x264-preset "
commandString << hash["x264Preset"]
-
- if hash["x264Tune"] != "" && hash["x264Tune"] != "none"
- commandString << " --x264-tune "
- commandString << hash["x264Tune"]
- end
- if hash["x264Profile"] != "" && hash["x264Profile"] != "auto"
- commandString << " --x264-profile "
- commandString << hash["x264Profile"]
- end
- if hash["x264Level"] != "" && hash["x264Level"] != "auto"
- commandString << " --h264-level "
- commandString << hash["x264Level"]
- end
- if hash["x264OptionExtra"] != ""
- commandString << " -x "
- commandString << hash["x264OptionExtra"]
- end
+ end
+ if hash["x264Tune"] != "" && hash["x264Tune"] != "none"
+ commandString << " --x264-tune "
+ commandString << hash["x264Tune"]
+ end
+ if hash["h264Profile"] != "" && hash["h264Profile"] != "auto"
+ commandString << " --h264-profile "
+ commandString << hash["h264Profile"]
+ end
+ if hash["h264Level"] != "" && hash["h264Level"] != "auto"
+ commandString << " --h264-level "
+ commandString << hash["h264Level"]
+ end
+ if hash["x264OptionExtra"] != ""
+ commandString << " -x "
+ commandString << hash["x264OptionExtra"]
+ end
elsif hash["x264Option"] != ""
commandString << " -x "
commandString << hash["x264Option"]
if hash["VideoTurboTwoPass"] == 1 then commandString << " -T" end
#Advanced Options
- if hash["x264Preset"] != nil && hash["x264Preset"] != "" && hash["x264Preset"] != "custom"
+ if hash["x264UseAdvancedOptions"] != 1
+ if hash["x264Preset"] != ""
commandString << " --x264-preset "
commandString << hash["x264Preset"]
-
- if hash["x264Tune"] != "" && hash["x264Tune"] != "none"
- commandString << " --x264-tune "
- commandString << hash["x264Tune"]
- end
- if hash["x264Profile"] != "" && hash["x264Profile"] != "auto"
- commandString << " --x264-profile "
- commandString << hash["x264Profile"]
- end
- if hash["x264Level"] != "" && hash["x264Level"] != "auto"
- commandString << " --h264-level "
- commandString << hash["x264Level"]
- end
- if hash["x264OptionExtra"] != ""
- commandString << " -x "
- commandString << hash["x264OptionExtra"]
- end
+ end
+ if hash["x264Tune"] != "" && hash["x264Tune"] != "none"
+ commandString << " --x264-tune "
+ commandString << hash["x264Tune"]
+ end
+ if hash["h264Profile"] != "" && hash["h264Profile"] != "auto"
+ commandString << " --h264-profile "
+ commandString << hash["h264Profile"]
+ end
+ if hash["h264Level"] != "" && hash["h264Level"] != "auto"
+ commandString << " --h264-level "
+ commandString << hash["h264Level"]
+ end
+ if hash["x264OptionExtra"] != ""
+ commandString << " -x "
+ commandString << hash["x264OptionExtra"]
+ end
elsif hash["x264Option"] != ""
commandString << " -x "
commandString << hash["x264Option"]
end
#Advanced Options
- if hash["x264Preset"] != nil && hash["x264Preset"] != "" && hash["x264Preset"] != "custom"
+ if hash["x264UseAdvancedOptions"] != 1
+ if hash["x264Preset"] != ""
commandString << "if (x264_preset == NULL)\n "
commandString << "{\n "
commandString << " x264_preset = strdup(\""
commandString << hash["x264Preset"] << "\");\n "
commandString << "}\n "
-
- if hash["x264Tune"] != "" && hash["x264Tune"] != "none"
- commandString << "if (x264_tune == NULL)\n "
- commandString << "{\n "
- commandString << " x264_tune = strdup(\""
- commandString << hash["x264Tune"]
- commandString << "\");\n "
- commandString << "}\n "
- end
- if hash["x264Profile"] != "" && hash["x264Profile"] != "auto"
- commandString << "if (x264_profile == NULL)\n "
- commandString << "{\n "
- commandString << " x264_profile = strdup(\""
- commandString << hash["x264Profile"] << "\");\n "
- commandString << "}\n "
- end
- if hash["x264Level"] != "" && hash["x264Level"] != "auto"
- commandString << "if (h264_level == NULL)\n "
- commandString << "{\n "
- commandString << " h264_level = strdup(\""
- commandString << hash["x264Level"] << "\");\n "
- commandString << "}\n "
- end
- if hash["x264OptionExtra"] != ""
- commandString << "if (advanced_opts == NULL)\n "
- commandString << "{\n "
- commandString << " advanced_opts = strdup(\""
- commandString << hash["x264OptionExtra"] << "\");\n "
- commandString << "}\n "
- end
+ end
+ if hash["x264Tune"] != "" && hash["x264Tune"] != "none"
+ commandString << "if (x264_tune == NULL)\n "
+ commandString << "{\n "
+ commandString << " x264_tune = strdup(\""
+ commandString << hash["x264Tune"]
+ commandString << "\");\n "
+ commandString << "}\n "
+ end
+ if hash["h264Profile"] != "" && hash["h264Profile"] != "auto"
+ commandString << "if (h264_profile == NULL)\n "
+ commandString << "{\n "
+ commandString << " h264_profile = strdup(\""
+ commandString << hash["h264Profile"] << "\");\n "
+ commandString << "}\n "
+ end
+ if hash["h264Level"] != "" && hash["h264Level"] != "auto"
+ commandString << "if (h264_level == NULL)\n "
+ commandString << "{\n "
+ commandString << " h264_level = strdup(\""
+ commandString << hash["h264Level"] << "\");\n "
+ commandString << "}\n "
+ end
+ if hash["x264OptionExtra"] != ""
+ commandString << "if (advanced_opts == NULL)\n "
+ commandString << "{\n "
+ commandString << " advanced_opts = strdup(\""
+ commandString << hash["x264OptionExtra"] << "\");\n "
+ commandString << "}\n "
+ end
elsif hash["x264Option"] != ""
commandString << "if (advanced_opts == NULL)\n "
commandString << "{\n "
if hash["VideoTwoPass"] == 1 then commandString << " -2" end
if hash["VideoTurboTwoPass"] == 1 then commandString << " -T" end
- #Advanced Options
- if hash["x264Preset"] != nil && hash["x264Preset"] != "" && hash["x264Preset"] != "custom"
+ #Advanced Options
+ if hash["x264UseAdvancedOptions"] != 1
+ if hash["x264Preset"] != ""
commandString << " --x264-preset "
commandString << hash["x264Preset"]
-
- if hash["x264Tune"] != "" && hash["x264Tune"] != "none"
- commandString << " --x264-tune "
- commandString << hash["x264Tune"]
- end
- if hash["x264Profile"] != "" && hash["x264Profile"] != "auto"
- commandString << " --x264-profile "
- commandString << hash["x264Profile"]
- end
- if hash["x264Level"] != "" && hash["x264Level"] != "auto"
- commandString << " --h264-level "
- commandString << hash["x264Level"]
- end
- if hash["x264OptionExtra"] != ""
- commandString << " -x "
- commandString << hash["x264OptionExtra"]
- end
- elsif hash["x264Option"] != ""
+ end
+ if hash["x264Tune"] != "" && hash["x264Tune"] != "none"
+ commandString << " --x264-tune "
+ commandString << hash["x264Tune"]
+ end
+ if hash["h264Profile"] != "" && hash["h264Profile"] != "auto"
+ commandString << " --h264-profile "
+ commandString << hash["h264Profile"]
+ end
+ if hash["h264Level"] != "" && hash["h264Level"] != "auto"
+ commandString << " --h264-level "
+ commandString << hash["h264Level"]
+ end
+ if hash["x264OptionExtra"] != ""
commandString << " -x "
- commandString << hash["x264Option"]
+ commandString << hash["x264OptionExtra"]
+ end
+ elsif hash["x264Option"] != ""
+ commandString << " -x "
+ commandString << hash["x264Option"]
end
commandString << "\\n\");"
static int chapter_end = 0;
static int chapter_markers = 0;
static char * marker_file = NULL;
-static char * advanced_opts = NULL;
-static char * x264_profile = NULL;
static char * x264_preset = NULL;
static char * x264_tune = NULL;
+static char * advanced_opts = NULL;
+static char * h264_profile = NULL;
static char * h264_level = NULL;
static int maxHeight = 0;
static int maxWidth = 0;
free(x264_preset);
free(x264_tune);
free(advanced_opts);
- free(x264_profile);
+ free(h264_profile);
free(h264_level);
// write a carriage return to stdout
{
x264_preset = strdup("fast");
}
- if (x264_profile == NULL)
+ if (h264_profile == NULL)
{
- x264_profile = strdup("baseline");
+ h264_profile = strdup("baseline");
}
if (h264_level == NULL)
{
{
x264_preset = strdup("medium");
}
- if (x264_profile == NULL)
+ if (h264_profile == NULL)
{
- x264_profile = strdup("baseline");
+ h264_profile = strdup("baseline");
}
if (h264_level == NULL)
{
{
x264_preset = strdup("medium");
}
- if (x264_profile == NULL)
+ if (h264_profile == NULL)
{
- x264_profile = strdup("high");
+ h264_profile = strdup("high");
}
if (h264_level == NULL)
{
{
x264_preset = strdup("medium");
}
- if (x264_profile == NULL)
+ if (h264_profile == NULL)
{
- x264_profile = strdup("high");
+ h264_profile = strdup("high");
}
if (h264_level == NULL)
{
{
x264_preset = strdup("medium");
}
- if (x264_profile == NULL)
+ if (h264_profile == NULL)
{
- x264_profile = strdup("high");
+ h264_profile = strdup("high");
}
if (h264_level == NULL)
{
{
x264_preset = strdup("medium");
}
- if (x264_profile == NULL)
+ if (h264_profile == NULL)
{
- x264_profile = strdup("high");
+ h264_profile = strdup("high");
}
if (h264_level == NULL)
{
{
x264_preset = strdup("medium");
}
- if (x264_profile == NULL)
+ if (h264_profile == NULL)
{
- x264_profile = strdup("high");
+ h264_profile = strdup("high");
}
if (h264_level == NULL)
{
{
x264_preset = strdup("medium");
}
- if (x264_profile == NULL)
+ if (h264_profile == NULL)
{
- x264_profile = strdup("main");
+ h264_profile = strdup("main");
}
if (h264_level == NULL)
{
{
x264_preset = strdup("medium");
}
- if (x264_profile == NULL)
+ if (h264_profile == NULL)
{
- x264_profile = strdup("main");
+ h264_profile = strdup("main");
}
if (h264_level == NULL)
{
{
x264_preset = strdup("veryfast");
}
- if (x264_profile == NULL)
+ if (h264_profile == NULL)
{
- x264_profile = strdup("main");
+ h264_profile = strdup("main");
}
if (h264_level == NULL)
{
{
x264_preset = strdup("medium");
}
- if (x264_profile == NULL)
+ if (h264_profile == NULL)
{
- x264_profile = strdup("high");
+ h264_profile = strdup("high");
}
if (h264_level == NULL)
{
hb_job_set_x264_preset(job, x264_preset);
hb_job_set_x264_tune(job, x264_tune);
- hb_job_set_x264_profile(job, x264_profile);
- hb_job_set_x264_level(job, h264_level);
+ hb_job_set_h264_profile(job, h264_profile);
+ hb_job_set_h264_level(job, h264_level);
if (maxWidth)
job->maxWidth = maxWidth;
" -x, --encopts <string> Specify advanced encoder options in the\n"
" same style as mencoder (x264 and ffmpeg only):\n"
" option1=value1:option2=value2\n"
- " --x264-profile When using x264, ensures compliance with the\n"
- " <string> specified h.264 profile:\n"
+ " --h264-profile When using x264, ensures compliance with the\n"
+ " <string> specified H.264 profile:\n"
" ");
- x264_opts = hb_x264_profiles();
+ x264_opts = hb_h264_profiles();
tmp[0] = 0;
len = 0;
while( x264_opts && *x264_opts )
fprintf( out, "%s\n", tmp );
fprintf( out,
" --h264-level When using x264, ensures compliance with the\n"
- " <string> specified h.264 level:\n"
+ " <string> specified H.264 level:\n"
" ");
x264_opts = hb_h264_levels();
tmp[0] = 0;
fprintf( stderr, "%s - %s - %s\n", HB_PROJECT_TITLE, HB_PROJECT_BUILD_TITLE, HB_PROJECT_URL_WEBSITE );
printf("\n< Devices\n");
- printf("\n + Universal: -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 -X 720 --loose-anamorphic --modulus 2 -m --x264-preset fast --x264-profile baseline --h264-level 3.0\n");
- 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 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");
- printf("\n + Android Tablet: -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 1280 --loose-anamorphic --modulus 2 --x264-preset medium --x264-profile main --h264-level 3.1\n");
+ printf("\n + Universal: -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 -X 720 --loose-anamorphic --modulus 2 -m --x264-preset fast --h264-profile baseline --h264-level 3.0\n");
+ 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 --h264-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 --h264-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 --h264-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 --h264-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 --h264-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 --h264-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 --h264-profile main --h264-level 2.2\n");
+ printf("\n + Android Tablet: -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 1280 --loose-anamorphic --modulus 2 --x264-preset medium --h264-profile main --h264-level 3.1\n");
printf("\n>\n");
printf("\n< Regular\n");
- printf("\n + Normal: -e x264 -q 20.0 -a 1 -E faac -B 160 -6 dpl2 -R Auto -D 0.0 -f mp4 --loose-anamorphic --modulus 2 -m --x264-preset veryfast --x264-profile main --h264-level 4.0\n");
- printf("\n + High Profile: -e x264 -q 20.0 -a 1,1 -E faac,copy:ac3 -B 160,160 -6 dpl2,auto -R Auto,Auto -D 0.0,0.0 -f mp4 -4 --decomb --loose-anamorphic --modulus 2 -m --x264-preset medium --x264-profile high --h264-level 4.1\n");
+ printf("\n + Normal: -e x264 -q 20.0 -a 1 -E faac -B 160 -6 dpl2 -R Auto -D 0.0 -f mp4 --loose-anamorphic --modulus 2 -m --x264-preset veryfast --h264-profile main --h264-level 4.0\n");
+ printf("\n + High Profile: -e x264 -q 20.0 -a 1,1 -E faac,copy:ac3 -B 160,160 -6 dpl2,auto -R Auto,Auto -D 0.0,0.0 -f mp4 -4 --decomb --loose-anamorphic --modulus 2 -m --x264-preset medium --h264-profile high --h264-level 4.1\n");
printf("\n>\n");
}
#define ALLOWED_AUDIO_COPY 280
#define AUDIO_FALLBACK 281
#define LOOSE_CROP 282
- #define X264_PROFILE 283
- #define X264_PRESET 284
- #define X264_TUNE 285
+ #define X264_PRESET 283
+ #define X264_TUNE 284
+ #define H264_PROFILE 285
#define H264_LEVEL 286
#define NO_OPENCL 287
#define NORMALIZE_MIX 288
{ "ac", required_argument, NULL, 'C' },
{ "rate", required_argument, NULL, 'r' },
{ "arate", required_argument, NULL, 'R' },
- { "encopts", required_argument, NULL, 'x' },
- { "x264-profile", required_argument, NULL, X264_PROFILE },
- { "h264-profile", required_argument, NULL, X264_PROFILE },
{ "x264-preset", required_argument, NULL, X264_PRESET },
{ "x264-tune", required_argument, NULL, X264_TUNE },
+ { "encopts", required_argument, NULL, 'x' },
+ { "x264-profile", required_argument, NULL, H264_PROFILE },
+ { "h264-profile", required_argument, NULL, H264_PROFILE },
{ "h264-level", required_argument, NULL, H264_LEVEL },
{ "turbo", no_argument, NULL, 'T' },
{ "maxHeight", required_argument, NULL, 'Y' },
case 'C':
acompressions = str_split( optarg, ',' );
break;
- case 'x':
- advanced_opts = strdup( optarg );
- break;
- case X264_PROFILE:
- x264_profile = strdup( optarg );
- break;
case X264_PRESET:
x264_preset = strdup( optarg );
break;
case X264_TUNE:
x264_tune = strdup( optarg );
break;
+ case 'x':
+ advanced_opts = strdup( optarg );
+ break;
+ case H264_PROFILE:
+ h264_profile = strdup( optarg );
+ break;
case H264_LEVEL:
h264_level = strdup( optarg );
break;
--- /dev/null
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="SettingChangedEventArgs.cs" company="HandBrake Project (http://handbrake.fr)">\r
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.\r
+// </copyright>\r
+// <summary>\r
+// The setting changed event args.\r
+// </summary>\r
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrake.ApplicationServices.EventArgs\r
+{\r
+ /// <summary>\r
+ /// The setting changed event args.\r
+ /// </summary>\r
+ public class SettingChangedEventArgs\r
+ {\r
+ /// <summary>\r
+ /// Gets or sets the key.\r
+ /// </summary>\r
+ public string Key { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the value.\r
+ /// </summary>\r
+ public object Value { get; set; }\r
+ }\r
+}\r
<ItemGroup>\r
<Compile Include="Collections\SerializableDictionary.cs" />\r
<Compile Include="Converters\EnumToDescConverter.cs" />\r
+ <Compile Include="EventArgs\SettingChangedEventArgs.cs" />\r
<Compile Include="Exceptions\GeneralApplicationException.cs" />\r
<Compile Include="EventArgs\EncodeCompletedEventArgs.cs" />\r
<Compile Include="EventArgs\EncodeProgressEventArgs.cs" />\r
using System.Collections.ObjectModel;\r
using System.Linq;\r
\r
+ using Caliburn.Micro;\r
+\r
using HandBrake.ApplicationServices.Model.Encoding;\r
using HandBrake.Interop.Model;\r
using HandBrake.Interop.Model.Encoding;\r
/// <summary>\r
/// An Encode Task\r
/// </summary>\r
- public class EncodeTask\r
+ public class EncodeTask : PropertyChangedBase\r
{\r
+ #region Private Fields\r
+\r
+ /// <summary>\r
+ /// The advanced panel enabled.\r
+ /// </summary>\r
+ private bool showAdvancedTab;\r
+\r
+ #endregion\r
+\r
/// <summary>\r
/// Initializes a new instance of the <see cref="EncodeTask"/> class.\r
/// </summary>\r
public bool FastDecode { get; set; }\r
\r
/// <summary>\r
- /// Extra Advanced Arguments for the Video Tab.\r
+ /// Gets or sets Extra Advanced Arguments for the Video Tab.\r
/// </summary>\r
public string ExtraAdvancedArguments { get; set; }\r
\r
/// Gets or sets PreviewEncodeStartAt.\r
/// </summary>\r
public string PreviewEncodeStartAt { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether advanced panel enabled.\r
+ /// </summary>\r
+ public bool ShowAdvancedTab\r
+ {\r
+ get\r
+ {\r
+ return this.showAdvancedTab;\r
+ }\r
+ set\r
+ {\r
+ if (!object.Equals(value, this.showAdvancedTab))\r
+ {\r
+ this.showAdvancedTab = value;\r
+ this.NotifyOfPropertyChange(() => this.ShowAdvancedTab);\r
+ }\r
+ }\r
+ }\r
#endregion\r
}\r
}\r
\r
namespace HandBrake.ApplicationServices.Model.Encoding\r
{\r
+ using System;\r
+\r
using Caliburn.Micro;\r
\r
/// <summary>\r
/// <param name="name">\r
/// The name.\r
/// </param>\r
- public ChapterMarker(int number, string name)\r
+ /// <param name="duration">\r
+ /// The duration.\r
+ /// </param>\r
+ public ChapterMarker(int number, string name, TimeSpan duration)\r
{\r
this.ChapterName = name;\r
this.ChapterNumber = number;\r
+ this.Duration = duration;\r
}\r
\r
/// <summary>\r
{\r
this.ChapterName = chapter.ChapterName;\r
this.ChapterNumber = chapter.ChapterNumber;\r
+ this.Duration = chapter.Duration;\r
}\r
\r
/// <summary>\r
/// </summary>\r
public int ChapterNumber { get; set; }\r
\r
+ /// <summary>\r
+ /// Gets or sets the duration.\r
+ /// </summary>\r
+ public TimeSpan Duration { get; set; }\r
+\r
/// <summary>\r
/// Gets or sets ChapterName.\r
/// </summary>\r
\r
#region Properties\r
\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="QueueTask"/> class.\r
+ /// </summary>\r
+ public QueueTask()\r
+ {\r
+ this.Status = QueueItemStatus.Waiting;\r
+ }\r
+\r
/// <summary>\r
/// Gets or sets ScannedSource.\r
/// </summary>\r
public EncodeTask Task { get; set; }\r
\r
#endregion\r
+\r
+ /// <summary>\r
+ /// The equals.\r
+ /// </summary>\r
+ /// <param name="other">\r
+ /// The other.\r
+ /// </param>\r
+ /// <returns>\r
+ /// The <see cref="bool"/>.\r
+ /// </returns>\r
+ protected bool Equals(QueueTask other)\r
+ {\r
+ return Equals(this.ScannedSource, other.ScannedSource) && this.CustomQuery.Equals(other.CustomQuery) && Equals(this.Task, other.Task) && this.status == other.status;\r
+ }\r
+\r
+ /// <summary>\r
+ /// The equals.\r
+ /// </summary>\r
+ /// <param name="obj">\r
+ /// The obj.\r
+ /// </param>\r
+ /// <returns>\r
+ /// The <see cref="bool"/>.\r
+ /// </returns>\r
+ public override bool Equals(object obj)\r
+ {\r
+ if (ReferenceEquals(null, obj))\r
+ {\r
+ return false;\r
+ }\r
+\r
+ if (ReferenceEquals(this, obj))\r
+ {\r
+ return true;\r
+ }\r
+\r
+ if (obj.GetType() != this.GetType())\r
+ {\r
+ return false;\r
+ }\r
+\r
+ return Equals((QueueTask)obj);\r
+ }\r
+\r
+ /// <summary>\r
+ /// The get hash code.\r
+ /// </summary>\r
+ /// <returns>\r
+ /// The <see cref="int"/>.\r
+ /// </returns>\r
+ public override int GetHashCode()\r
+ {\r
+ unchecked\r
+ {\r
+ int hashCode = (this.ScannedSource != null ? this.ScannedSource.GetHashCode() : 0);\r
+ hashCode = (hashCode * 397) ^ this.CustomQuery.GetHashCode();\r
+ hashCode = (hashCode * 397) ^ (this.Task != null ? this.Task.GetHashCode() : 0);\r
+ hashCode = (hashCode * 397) ^ (int)this.status;\r
+ return hashCode;\r
+ }\r
+ }\r
}\r
}
\ No newline at end of file
/// </summary>\r
public event ScanProgressEventHandler OnScanProgress;\r
\r
- /// <summary>\r
- /// Raised upon the catching of a "Scanning title # of #..." in the stream\r
- /// </summary>\r
- public event EncodeProgressEventHandler OnEncodeProgress;\r
\r
/// <summary>\r
/// Gets the buffer of data that came from the CLI standard input/error\r
\r
return tmp;\r
}\r
-\r
- /// <summary>\r
- /// Pase the CLI status output (from standard output)\r
- /// </summary>\r
- public void ReadEncodeStatus()\r
- {\r
- string tmp = base.ReadLine();\r
-\r
- Match m = Regex.Match(tmp, @"^Encoding: task ([0-9]*) of ([0-9]*), ([0-9]*\.[0-9]*) %( \(([0-9]*\.[0-9]*) fps, avg ([0-9]*\.[0-9]*) fps, ETA ([0-9]{2})h([0-9]{2})m([0-9]{2})s\))?");\r
- if (m.Success && OnEncodeProgress != null)\r
- {\r
- int currentTask = int.Parse(m.Groups[1].Value);\r
- int totalTasks = int.Parse(m.Groups[2].Value);\r
- float percent = float.Parse(m.Groups[3].Value, CultureInfo.InvariantCulture);\r
- float currentFps = m.Groups[5].Value == string.Empty ? 0.0F : float.Parse(m.Groups[5].Value, CultureInfo.InvariantCulture);\r
- float avgFps = m.Groups[6].Value == string.Empty ? 0.0F : float.Parse(m.Groups[6].Value, CultureInfo.InvariantCulture);\r
- string remaining = string.Empty;\r
- if (m.Groups[7].Value != string.Empty)\r
- {\r
- remaining = m.Groups[7].Value + ":" + m.Groups[8].Value + ":" + m.Groups[9].Value;\r
- }\r
- if (string.IsNullOrEmpty(remaining))\r
- {\r
- remaining = "Calculating ...";\r
- }\r
-\r
- OnEncodeProgress(this, currentTask, totalTasks, percent, currentFps, avgFps, remaining);\r
- }\r
- }\r
}\r
}
\ No newline at end of file
using System.Linq;\r
using System.Text.RegularExpressions;\r
\r
- using Caliburn.Micro;\r
-\r
- using HandBrake.ApplicationServices.Services.Interfaces;\r
using HandBrake.Interop.Model;\r
\r
using Size = System.Drawing.Size;\r
namespace HandBrake.ApplicationServices.Services.Base\r
{\r
using System;\r
+ using System.Globalization;\r
using System.IO;\r
using System.Text;\r
+ using System.Text.RegularExpressions;\r
+\r
+ using Caliburn.Micro;\r
\r
using HandBrake.ApplicationServices.EventArgs;\r
using HandBrake.ApplicationServices.Exceptions;\r
/// </param>\r
public void InvokeEncodeStatusChanged(EncodeProgressEventArgs e)\r
{\r
- EncodeProgessStatus handler = this.EncodeStatusChanged;\r
- if (handler != null)\r
- {\r
- handler(this, e);\r
- }\r
+ Execute.OnUIThread(\r
+ () =>\r
+ {\r
+ EncodeProgessStatus handler = this.EncodeStatusChanged;\r
+ if (handler != null)\r
+ {\r
+ handler(this, e);\r
+ }\r
+ });\r
}\r
\r
/// <summary>\r
/// </param>\r
public void InvokeEncodeCompleted(EncodeCompletedEventArgs e)\r
{\r
- EncodeCompletedStatus handler = this.EncodeCompleted;\r
- if (handler != null)\r
- {\r
- handler(this, e);\r
- }\r
+ Execute.OnUIThread(\r
+ () =>\r
+ {\r
+ EncodeCompletedStatus handler = this.EncodeCompleted;\r
+ if (handler != null)\r
+ {\r
+ handler(this, e);\r
+ }\r
+ });\r
}\r
\r
/// <summary>\r
/// </param>\r
public void InvokeEncodeStarted(EventArgs e)\r
{\r
- EventHandler handler = this.EncodeStarted;\r
- if (handler != null)\r
- {\r
- handler(this, e);\r
- }\r
+ Execute.OnUIThread(() =>\r
+ {\r
+ EventHandler handler = this.EncodeStarted;\r
+ if (handler != null)\r
+ {\r
+ handler(this, e);\r
+ }\r
+ });\r
}\r
\r
#endregion\r
/// <summary>\r
/// A Stop Method to be implemeneted.\r
/// </summary>\r
- /// <param name="exc">\r
- /// The Exception that occured that required a STOP action.\r
- /// </param>\r
- public virtual void Stop(Exception exc)\r
+ public virtual void Stop()\r
{\r
// Do Nothing\r
}\r
}\r
}\r
\r
+\r
+ /// <summary>\r
+ /// Pase the CLI status output (from standard output)\r
+ /// </summary>\r
+ /// <param name="encodeStatus">\r
+ /// The encode Status.\r
+ /// </param>\r
+ /// <param name="startTime">\r
+ /// The start Time.\r
+ /// </param>\r
+ /// <returns>\r
+ /// The <see cref="EncodeProgressEventArgs"/>.\r
+ /// </returns>\r
+ public EncodeProgressEventArgs ReadEncodeStatus(string encodeStatus, DateTime startTime)\r
+ {\r
+ try\r
+ {\r
+ Match m = Regex.Match(\r
+ encodeStatus,\r
+ @"^Encoding: task ([0-9]*) of ([0-9]*), ([0-9]*\.[0-9]*) %( \(([0-9]*\.[0-9]*) fps, avg ([0-9]*\.[0-9]*) fps, ETA ([0-9]{2})h([0-9]{2})m([0-9]{2})s\))?");\r
+\r
+ if (m.Success)\r
+ {\r
+ int currentTask = int.Parse(m.Groups[1].Value);\r
+ int totalTasks = int.Parse(m.Groups[2].Value);\r
+ float percent = float.Parse(m.Groups[3].Value, CultureInfo.InvariantCulture);\r
+ float currentFps = m.Groups[5].Value == string.Empty\r
+ ? 0.0F\r
+ : float.Parse(m.Groups[5].Value, CultureInfo.InvariantCulture);\r
+ float avgFps = m.Groups[6].Value == string.Empty\r
+ ? 0.0F\r
+ : float.Parse(m.Groups[6].Value, CultureInfo.InvariantCulture);\r
+ string remaining = string.Empty;\r
+ if (m.Groups[7].Value != string.Empty)\r
+ {\r
+ remaining = m.Groups[7].Value + ":" + m.Groups[8].Value + ":" + m.Groups[9].Value;\r
+ }\r
+ if (string.IsNullOrEmpty(remaining))\r
+ {\r
+ remaining = "Calculating ...";\r
+ }\r
+\r
+ EncodeProgressEventArgs eventArgs = new EncodeProgressEventArgs\r
+ {\r
+ AverageFrameRate = avgFps,\r
+ CurrentFrameRate = currentFps,\r
+ EstimatedTimeLeft =\r
+ Converters.EncodeToTimespan(\r
+ remaining),\r
+ PercentComplete = percent,\r
+ Task = currentTask,\r
+ TaskCount = totalTasks,\r
+ ElapsedTime =\r
+ DateTime.Now - startTime,\r
+ };\r
+\r
+ return eventArgs;\r
+ }\r
+\r
+ return null;\r
+ }\r
+ catch (Exception exc)\r
+ {\r
+ return null;\r
+ }\r
+ }\r
+\r
/// <summary>\r
/// Setup the logging.\r
/// </summary>\r
\r
this.fileWriter = new StreamWriter(logFile) { AutoFlush = true };\r
this.fileWriter.WriteLine(header);\r
- this.fileWriter.WriteLine(String.Format("CLI Query: {0}", query));\r
- this.fileWriter.WriteLine(String.Format("User Query: {0}", encodeQueueTask.CustomQuery));\r
+ this.fileWriter.WriteLine(string.Format("CLI Query: {0}", query));\r
+ this.fileWriter.WriteLine(string.Format("User Query: {0}", encodeQueueTask.CustomQuery));\r
this.fileWriter.WriteLine();\r
}\r
catch (Exception)\r
if (this.fileWriter != null && this.fileWriter.BaseStream.CanWrite)\r
{\r
this.fileWriter.WriteLine(message);\r
-\r
- // If the logging grows past 100MB, kill the encode and stop.\r
- if (this.fileWriter.BaseStream.Length > 100000000)\r
- {\r
- this.Stop(\r
- new GeneralApplicationException(\r
- "The encode has been stopped. The log file has grown to over 100MB which indicates a serious problem has occured with the encode.", \r
- "Please check the encode log for an indication of what the problem is.", null));\r
- }\r
}\r
}\r
}\r
- catch (GeneralApplicationException)\r
- {\r
- throw;\r
- }\r
catch (Exception exc)\r
{\r
// Do Nothing.\r
{\r
using System;\r
using System.Diagnostics;\r
+ using System.Globalization;\r
using System.IO;\r
- using System.Threading;\r
using System.Windows.Forms;\r
\r
+ using Caliburn.Micro;\r
+\r
using HandBrake.ApplicationServices.EventArgs;\r
using HandBrake.ApplicationServices.Model;\r
using HandBrake.ApplicationServices.Services.Base;\r
using HandBrake.ApplicationServices.Services.Interfaces;\r
using HandBrake.ApplicationServices.Utilities;\r
\r
- using Parser = HandBrake.ApplicationServices.Parsing.Parser;\r
-\r
/// <summary>\r
/// Class which handles the CLI\r
/// </summary>\r
/// </summary>\r
private readonly IUserSettingService userSettingService;\r
\r
- /// <summary>\r
- /// Gets The Process Handle\r
- /// </summary>\r
- private IntPtr processHandle;\r
-\r
/// <summary>\r
/// Gets the Process ID\r
/// </summary>\r
/// </summary>\r
private QueueTask currentTask;\r
\r
+ /// <summary>\r
+ /// The init shutdown.\r
+ /// </summary>\r
+ private bool initShutdown;\r
+\r
#endregion\r
\r
/// <summary>\r
public Encode(IUserSettingService userSettingService)\r
: base(userSettingService)\r
{\r
- this.userSettingService = userSettingService;\r
- this.EncodeStarted += this.EncodeEncodeStarted; \r
+ this.userSettingService = userSettingService; \r
}\r
\r
#region Properties\r
\r
/// <summary>\r
/// Execute a HandBrakeCLI process.\r
+ /// This should only be called from the UI thread.\r
/// </summary>\r
/// <param name="encodeQueueTask">\r
/// The encodeQueueTask.\r
{\r
try\r
{\r
- this.currentTask = encodeQueueTask;\r
-\r
if (this.IsEncoding)\r
{\r
throw new Exception("HandBrake is already encodeing.");\r
\r
this.IsEncoding = true;\r
\r
+ this.currentTask = encodeQueueTask;\r
+\r
if (enableLogging)\r
{\r
try\r
this.HbProcess.BeginErrorReadLine();\r
}\r
\r
+ this.HbProcess.OutputDataReceived += HbProcess_OutputDataReceived;\r
+ this.HbProcess.BeginOutputReadLine();\r
+\r
this.processId = this.HbProcess.Id;\r
- this.processHandle = this.HbProcess.Handle;\r
\r
// Set the process Priority\r
if (this.processId != -1)\r
}\r
}\r
\r
- /// <summary>\r
- /// Stop the Encode\r
- /// </summary>\r
- public void Stop()\r
- {\r
- this.Stop(null);\r
- }\r
-\r
/// <summary>\r
/// Kill the CLI process\r
/// </summary>\r
- /// <param name="exc">\r
- /// The Exception that has occured.\r
- /// This will get bubbled up through the EncodeCompletedEventArgs\r
- /// </param>\r
- public override void Stop(Exception exc)\r
+ public override void Stop()\r
{\r
try\r
{\r
{\r
// No need to report anything to the user. If it fails, it's probably already stopped.\r
}\r
-\r
- this.InvokeEncodeCompleted(\r
- exc == null\r
- ? new EncodeCompletedEventArgs(true, null, string.Empty)\r
- : new EncodeCompletedEventArgs(false, exc, "An Unknown Error has occured when trying to Stop this encode."));\r
}\r
\r
/// <summary>\r
/// </param>\r
private void HbProcessExited(object sender, EventArgs e)\r
{\r
- this.IsEncoding = false;\r
- if (this.WindowsSeven.IsWindowsSeven)\r
- {\r
- this.WindowsSeven.SetTaskBarProgressToNoProgress();\r
- }\r
-\r
- if (this.userSettingService.GetUserSetting<bool>(ASUserSettingConstants.PreventSleep))\r
- {\r
- Win32.AllowSleep();\r
- }\r
+ HbProcess.WaitForExit();\r
\r
try\r
{\r
- // This is just a quick hack to ensure that we are done processing the logging data.\r
- // Logging data comes in after the exit event has processed sometimes. We should really impliment ISyncronizingInvoke\r
- // and set the SyncObject on the process. I think this may resolve this properly.\r
- // For now, just wait 2.5 seconds to let any trailing log messages come in and be processed.\r
- Thread.Sleep(2500);\r
this.HbProcess.CancelErrorRead();\r
+ this.HbProcess.CancelOutputRead();\r
this.ShutdownFileWriter();\r
}\r
catch (Exception exc)\r
// This exception doesn't warrent user interaction, but it should be logged (TODO)\r
}\r
\r
- this.currentTask.Status = QueueItemStatus.Completed;\r
- this.InvokeEncodeCompleted(new EncodeCompletedEventArgs(true, null, string.Empty));\r
+ Execute.OnUIThread(() =>\r
+ {\r
+ if (this.WindowsSeven.IsWindowsSeven)\r
+ {\r
+ this.WindowsSeven.SetTaskBarProgressToNoProgress();\r
+ }\r
+\r
+ if (this.userSettingService.GetUserSetting<bool>(ASUserSettingConstants.PreventSleep))\r
+ {\r
+ Win32.AllowSleep();\r
+ }\r
+\r
+ this.currentTask.Status = QueueItemStatus.Completed;\r
+ this.IsEncoding = false;\r
+ this.InvokeEncodeCompleted(new EncodeCompletedEventArgs(true, null, string.Empty));\r
+ });\r
}\r
\r
/// <summary>\r
/// <param name="e">\r
/// DataReceived EventArgs\r
/// </param>\r
+ /// <remarks>\r
+ /// Worker Thread.\r
+ /// </remarks>\r
private void HbProcErrorDataReceived(object sender, DataReceivedEventArgs e)\r
{\r
if (!String.IsNullOrEmpty(e.Data))\r
{\r
+ if (initShutdown && this.LogBuffer.Length < 25000000) \r
+ {\r
+ initShutdown = false; // Reset this flag.\r
+ }\r
+\r
+ if (this.LogBuffer.Length > 25000000 && !initShutdown) // Approx 23.8MB and make sure it's only printed once\r
+ {\r
+ this.ProcessLogMessage("ERROR: Initiating automatic shutdown of encode process. The size of the log file inidcates that there is an error! ");\r
+ initShutdown = true;\r
+ this.Stop();\r
+ }\r
+\r
this.ProcessLogMessage(e.Data);\r
}\r
}\r
\r
/// <summary>\r
- /// Encode Started\r
+ /// The hb process output data received.\r
/// </summary>\r
/// <param name="sender">\r
/// The sender.\r
/// </param>\r
/// <param name="e">\r
- /// The EventArgs.\r
+ /// The e.\r
/// </param>\r
- private void EncodeEncodeStarted(object sender, EventArgs e)\r
+ private void HbProcess_OutputDataReceived(object sender, DataReceivedEventArgs e)\r
{\r
- Thread monitor = new Thread(this.EncodeMonitor);\r
- monitor.Start();\r
- }\r
-\r
- /// <summary>\r
- /// Monitor the QueueTask\r
- /// </summary>\r
- private void EncodeMonitor()\r
- {\r
- try\r
+ if (!String.IsNullOrEmpty(e.Data) && this.IsEncoding)\r
{\r
- Parser encode = new Parser(this.HbProcess.StandardOutput.BaseStream);\r
- encode.OnEncodeProgress += this.EncodeOnEncodeProgress;\r
- while (!encode.EndOfStream)\r
+ EncodeProgressEventArgs eventArgs = this.ReadEncodeStatus(e.Data, this.startTime);\r
+ if (eventArgs != null)\r
{\r
- encode.ReadEncodeStatus();\r
+ Execute.OnUIThread(\r
+ () =>\r
+ {\r
+ if (!this.IsEncoding)\r
+ {\r
+ // We can get events out of order since the CLI progress is monitored on a background thread.\r
+ // So make sure we don't send a status update after an encode complete event.\r
+ return;\r
+ }\r
+\r
+ this.InvokeEncodeStatusChanged(eventArgs);\r
+\r
+ if (this.WindowsSeven.IsWindowsSeven)\r
+ {\r
+ int percent;\r
+ int.TryParse(\r
+ Math.Round(eventArgs.PercentComplete).ToString(CultureInfo.InvariantCulture),\r
+ out percent);\r
+\r
+ this.WindowsSeven.SetTaskBarProgress(percent);\r
+ }\r
+ });\r
}\r
}\r
- catch (Exception)\r
- {\r
- this.EncodeOnEncodeProgress(null, 0, 0, 0, 0, 0, "Unknown, status not available..");\r
- }\r
- }\r
-\r
- /// <summary>\r
- /// Displays the Encode status in the GUI\r
- /// </summary>\r
- /// <param name="sender">The sender</param>\r
- /// <param name="currentTask">The current task</param>\r
- /// <param name="taskCount">Number of tasks</param>\r
- /// <param name="percentComplete">Percent complete</param>\r
- /// <param name="currentFps">Current encode speed in fps</param>\r
- /// <param name="avg">Avg encode speed</param>\r
- /// <param name="timeRemaining">Time Left</param>\r
- private void EncodeOnEncodeProgress(object sender, int currentTask, int taskCount, float percentComplete, float currentFps, float avg, string timeRemaining)\r
- {\r
- if (!this.IsEncoding)\r
- {\r
- // We can get events out of order since the CLI progress is monitored on a background thread.\r
- // So make sure we don't send a status update after an encode complete event.\r
- return;\r
- }\r
-\r
- EncodeProgressEventArgs eventArgs = new EncodeProgressEventArgs\r
- {\r
- AverageFrameRate = avg,\r
- CurrentFrameRate = currentFps,\r
- EstimatedTimeLeft = Converters.EncodeToTimespan(timeRemaining),\r
- PercentComplete = percentComplete,\r
- Task = currentTask,\r
- TaskCount = taskCount,\r
- ElapsedTime = DateTime.Now - this.startTime,\r
- };\r
-\r
- this.InvokeEncodeStatusChanged(eventArgs);\r
-\r
- if (this.WindowsSeven.IsWindowsSeven)\r
- {\r
- int percent;\r
- int.TryParse(Math.Round(percentComplete).ToString(), out percent);\r
-\r
- this.WindowsSeven.SetTaskBarProgress(percent);\r
- }\r
}\r
\r
#endregion\r
namespace HandBrake.ApplicationServices.Services.Interfaces\r
{\r
using System;\r
- using System.Collections.ObjectModel;\r
+ using System.ComponentModel;\r
\r
using HandBrake.ApplicationServices.Model;\r
\r
/// <summary>\r
/// Gets The current queue.\r
/// </summary>\r
- ObservableCollection<QueueTask> Queue { get; }\r
+ BindingList<QueueTask> Queue { get; }\r
\r
#endregion\r
\r
\r
namespace HandBrake.ApplicationServices.Services.Interfaces\r
{\r
+ using HandBrake.ApplicationServices.EventArgs;\r
+\r
+ /// <summary>\r
+ /// The setting event handler.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ public delegate void SettingEventHandler(object sender, SettingChangedEventArgs e);\r
+\r
/// <summary>\r
/// The User Setting Service Interace.\r
/// </summary>\r
public interface IUserSettingService\r
{\r
+ /// <summary>\r
+ /// The setting changed.\r
+ /// </summary>\r
+ event SettingEventHandler SettingChanged;\r
+\r
/// <summary>\r
/// Set the specified user setting.\r
/// </summary>\r
using System;\r
using System.Diagnostics;\r
\r
- using HandBrake.ApplicationServices.Exceptions;\r
using HandBrake.ApplicationServices.Model;\r
using HandBrake.ApplicationServices.Services.Base;\r
using HandBrake.ApplicationServices.Services.Interfaces;\r
/// <summary>\r
/// Kill the CLI process\r
/// </summary>\r
- public void Stop()\r
- {\r
- this.Stop(null);\r
- }\r
-\r
- /// <summary>\r
- /// Kill the CLI process\r
- /// </summary>\r
- /// <param name="exc">\r
- /// The Exception that has occured.\r
- /// This will get bubbled up through the EncodeCompletedEventArgs\r
- /// </param>\r
- public override void Stop(Exception exc)\r
+ public override void Stop()\r
{\r
try\r
{\r
{\r
// Do Nothing.\r
}\r
-\r
- this.InvokeEncodeCompleted(\r
- exc == null\r
- ? new EncodeCompletedEventArgs(true, null, string.Empty)\r
- : new EncodeCompletedEventArgs(false, exc, "An Error has occured."));\r
}\r
\r
/// <summary>\r
{\r
using System;\r
using System.Collections.Generic;\r
- using System.Collections.ObjectModel;\r
+ using System.ComponentModel;\r
using System.Diagnostics;\r
using System.IO;\r
using System.Linq;\r
/// <summary>\r
/// The Queue of Job objects\r
/// </summary>\r
- private readonly ObservableCollection<QueueTask> queue = new ObservableCollection<QueueTask>();\r
+ private readonly BindingList<QueueTask> queue = new BindingList<QueueTask>();\r
\r
/// <summary>\r
/// The User Setting Service\r
/// <summary>\r
/// Gets The current queue.\r
/// </summary>\r
- public ObservableCollection<QueueTask> Queue\r
+ public BindingList<QueueTask> Queue\r
{\r
get\r
{\r
/// </summary>\r
private void ProcessNextJob()\r
{\r
- if (this.EncodeService.IsEncoding || !this.IsProcessing)\r
- {\r
- // We don't want to try start a second encode, so just return out. The event will trigger the next encode automatically.\r
- // Also, we don't want to start a new encode if we are paused.\r
- return;\r
- }\r
-\r
QueueTask job = this.GetNextJobForProcessing();\r
if (job != null)\r
{\r
using System.Xml.Serialization;\r
\r
using HandBrake.ApplicationServices.Collections;\r
+ using HandBrake.ApplicationServices.EventArgs;\r
using HandBrake.ApplicationServices.Exceptions;\r
using HandBrake.ApplicationServices.Services.Interfaces;\r
\r
this.Load();\r
}\r
\r
+ /// <summary>\r
+ /// The setting changed.\r
+ /// </summary>\r
+ public event SettingEventHandler SettingChanged;\r
+\r
/// <summary>\r
/// Set the specified user setting.\r
/// </summary>\r
{\r
this.userSettings[name] = value;\r
this.Save();\r
+\r
+ this.OnSettingChanged(new SettingChangedEventArgs {Key = name, Value = value});\r
}\r
\r
/// <summary>\r
return (StringCollection)this.userSettings[name];\r
}\r
\r
+ /// <summary>\r
+ /// The on setting changed.\r
+ /// </summary>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ protected virtual void OnSettingChanged(SettingChangedEventArgs e)\r
+ {\r
+ SettingEventHandler handler = this.SettingChanged;\r
+ if (handler != null)\r
+ {\r
+ handler(this, e);\r
+ }\r
+ }\r
+\r
/// <summary>\r
/// Save the User Settings\r
/// </summary>\r
/// </summary>\r
public class InteropModelCreator\r
{\r
- /*\r
- * TODO: This conversion class needs to be finished off before libencode will work.\r
- */\r
-\r
/// <summary>\r
/// Get an EncodeJob model for a LibHB Encode.\r
/// </summary>\r
// job.SourceType = work.Type;\r
job.Title = work.Title;\r
\r
- // TODO Setup subtitles\r
+ // Subtitles\r
job.Subtitles = new Subtitles { SourceSubtitles = new List<SourceSubtitle>(), SrtSubtitles = new List<SrtSubtitle>() };\r
- //foreach (SubtitleTrack track in work.SubtitleTracks)\r
- //{\r
- // // TODO\r
- //}\r
+ foreach (SubtitleTrack track in work.SubtitleTracks)\r
+ {\r
+ if (track.IsSrtSubtitle)\r
+ {\r
+ job.Subtitles.SrtSubtitles.Add(\r
+ new SrtSubtitle\r
+ {\r
+ CharacterCode = track.SrtCharCode,\r
+ Default = track.Default,\r
+ FileName = track.SrtFileName,\r
+ LanguageCode = track.SrtLang,\r
+ Offset = track.SrtOffset\r
+ });\r
+ }\r
+ else\r
+ {\r
+ if (track.SourceTrack != null)\r
+ {\r
+ job.Subtitles.SourceSubtitles.Add(\r
+ new SourceSubtitle\r
+ {\r
+ BurnedIn = track.Burned,\r
+ Default = track.Default,\r
+ Forced = track.Forced,\r
+ TrackNumber = track.SourceTrack.TrackNumber\r
+ });\r
+ }\r
+ }\r
+ }\r
\r
return job;\r
}\r
/// </summary>\r
public static void AllowSleep()\r
{\r
- SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS);\r
+ executor(() => SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS));\r
}\r
\r
/// <summary>\r
/// </summary>\r
public class Title\r
{\r
- private readonly List<AudioTrack> audioTracks;\r
- private readonly List<Chapter> chapters;\r
- private readonly List<Subtitle> subtitles;\r
+ /// <summary>\r
+ /// The audio tracks.\r
+ /// </summary>\r
+ private readonly List<AudioTrack> audioTracks;\r
+\r
+ /// <summary>\r
+ /// The chapters.\r
+ /// </summary>\r
+ private readonly List<Chapter> chapters;\r
+\r
+ /// <summary>\r
+ /// The subtitles.\r
+ /// </summary>\r
+ private readonly List<Subtitle> subtitles;\r
\r
/// <summary>\r
/// Initializes a new instance of the Title class.\r
--- /dev/null
+<UserControl x:Class="HandBrakeWPF.Controls.TimeSpanBox"\r
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"\r
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"\r
+ Loaded="UserControl_Loaded">\r
+ <UserControl.Resources>\r
+ <Style x:Key="Arrow" TargetType="Polygon">\r
+ <Setter Property="Fill" Value="#333" />\r
+ </Style>\r
+ <!-- UpButton and DownButton are identical except for the border radius in the control template.\r
+ We can't pass that through so we need to duplicate the template. After a change is made from one button\r
+ template it should be copied to the other. -->\r
+ <Style x:Key="UpButton" TargetType="Button">\r
+ <Setter Property="Margin" Value="0"/>\r
+ <Setter Property="Background" >\r
+ <Setter.Value>\r
+ <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >\r
+ <GradientStop Color="#EEE" Offset="0.4"/>\r
+ <GradientStop Color="#BBB" Offset="1"/>\r
+ </LinearGradientBrush>\r
+ </Setter.Value>\r
+ </Setter>\r
+ <Setter Property="Template">\r
+ <Setter.Value>\r
+ <ControlTemplate TargetType="Button">\r
+ <Border\r
+ Name="border"\r
+ BorderThickness="1"\r
+ BorderBrush="#888"\r
+ CornerRadius="0,2,0,0"\r
+ Background="{TemplateBinding Background}">\r
+ <ContentPresenter\r
+ Name="content"\r
+ HorizontalAlignment="Center" VerticalAlignment="Center" />\r
+ </Border>\r
+ <ControlTemplate.Triggers>\r
+ <Trigger Property="IsMouseOver" Value="True">\r
+ <Setter TargetName="border" Property="BorderBrush" Value="#FF4788c8" />\r
+ <Setter Property="Foreground" Value="#FF4788c8" />\r
+ </Trigger>\r
+ <Trigger Property="IsPressed" Value="True">\r
+ <Setter Property="Background" >\r
+ <Setter.Value>\r
+ <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >\r
+ <GradientStop Color="#CCC" Offset="0.4"/>\r
+ <GradientStop Color="#999" Offset="1"/>\r
+ </LinearGradientBrush>\r
+ </Setter.Value>\r
+ </Setter>\r
+ <Setter TargetName="content" Property="RenderTransform" >\r
+ <Setter.Value>\r
+ <TranslateTransform Y="1.0" />\r
+ </Setter.Value>\r
+ </Setter>\r
+ </Trigger>\r
+ <Trigger Property="IsDefaulted" Value="True">\r
+ <Setter TargetName="border" Property="BorderBrush" Value="#FF282828" />\r
+ </Trigger>\r
+ <Trigger Property="IsFocused" Value="True">\r
+ <Setter TargetName="border" Property="BorderBrush" Value="#FF282828" />\r
+ </Trigger>\r
+ <Trigger Property="IsEnabled" Value="False">\r
+ <Setter TargetName="border" Property="Opacity" Value="0.7" />\r
+ <Setter Property="Foreground" Value="Gray" />\r
+ </Trigger>\r
+ </ControlTemplate.Triggers>\r
+ </ControlTemplate>\r
+ </Setter.Value>\r
+ </Setter>\r
+ </Style>\r
+ <Style x:Key="DownButton" TargetType="Button">\r
+ <Setter Property="Margin" Value="0"/>\r
+ <Setter Property="Background" >\r
+ <Setter.Value>\r
+ <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >\r
+ <GradientStop Color="#EEE" Offset="0.4"/>\r
+ <GradientStop Color="#BBB" Offset="1"/>\r
+ </LinearGradientBrush>\r
+ </Setter.Value>\r
+ </Setter>\r
+ <Setter Property="Template">\r
+ <Setter.Value>\r
+ <ControlTemplate TargetType="Button">\r
+ <Border\r
+ Name="border"\r
+ BorderThickness="1"\r
+ BorderBrush="#888"\r
+ CornerRadius="0,0,2,0"\r
+ Background="{TemplateBinding Background}">\r
+ <ContentPresenter\r
+ Name="content"\r
+ HorizontalAlignment="Center" VerticalAlignment="Center" />\r
+ </Border>\r
+ <ControlTemplate.Triggers>\r
+ <Trigger Property="IsMouseOver" Value="True">\r
+ <Setter TargetName="border" Property="BorderBrush" Value="#FF4788c8" />\r
+ <Setter Property="Foreground" Value="#FF4788c8" />\r
+ </Trigger>\r
+ <Trigger Property="IsPressed" Value="True">\r
+ <Setter Property="Background" >\r
+ <Setter.Value>\r
+ <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >\r
+ <GradientStop Color="#CCC" Offset="0.4"/>\r
+ <GradientStop Color="#999" Offset="1"/>\r
+ </LinearGradientBrush>\r
+ </Setter.Value>\r
+ </Setter>\r
+ <Setter TargetName="content" Property="RenderTransform" >\r
+ <Setter.Value>\r
+ <TranslateTransform Y="1.0" />\r
+ </Setter.Value>\r
+ </Setter>\r
+ </Trigger>\r
+ <Trigger Property="IsDefaulted" Value="True">\r
+ <Setter TargetName="border" Property="BorderBrush" Value="#FF282828" />\r
+ </Trigger>\r
+ <Trigger Property="IsFocused" Value="True">\r
+ <Setter TargetName="border" Property="BorderBrush" Value="#FF282828" />\r
+ </Trigger>\r
+ <Trigger Property="IsEnabled" Value="False">\r
+ <Setter TargetName="border" Property="Opacity" Value="0.7" />\r
+ <Setter Property="Foreground" Value="Gray" />\r
+ </Trigger>\r
+ </ControlTemplate.Triggers>\r
+ </ControlTemplate>\r
+ </Setter.Value>\r
+ </Setter>\r
+ </Style>\r
+ </UserControl.Resources>\r
+ <Grid>\r
+ <Grid.ColumnDefinitions>\r
+ <ColumnDefinition Width="*" />\r
+ <ColumnDefinition Width="Auto" />\r
+ </Grid.ColumnDefinitions>\r
+ <TextBox\r
+ Name="numberBox"\r
+ Grid.Column="0"\r
+ GotFocus="NumberBoxGotFocus"\r
+ LostFocus="NumberBoxLostFocus"\r
+ PreviewTextInput="NumberBoxPreviewTextInput"\r
+ PreviewKeyDown="NumberBoxPreviewKeyDown"\r
+ PreviewMouseDown="NumberBoxPreviewMouseDown"\r
+ PreviewMouseUp="NumberBoxPreviewMouseUp"\r
+ TextChanged="NumberBoxTextChanged"\r
+ VerticalContentAlignment="Center"/>\r
+ <Grid\r
+ Name="incrementButtonsGrid"\r
+ Grid.Column="1"\r
+ Width="16">\r
+ <Grid.RowDefinitions>\r
+ <RowDefinition Height="*" />\r
+ <RowDefinition Height="*" />\r
+ </Grid.RowDefinitions>\r
+ <Button\r
+ Style="{StaticResource UpButton}"\r
+ Grid.Row="0"\r
+ FontSize="4"\r
+ PreviewMouseLeftButtonDown="UpButtonMouseLeftButtonDown"\r
+ PreviewMouseLeftButtonUp="UpButtonMouseLeftButtonUp">\r
+ <Polygon\r
+ Style="{StaticResource Arrow}"\r
+ Points="4,0 0,4 8,4" />\r
+ </Button>\r
+ <Button\r
+ Style="{StaticResource DownButton}"\r
+ Grid.Row="1"\r
+ FontSize="4"\r
+ PreviewMouseLeftButtonDown="DownButtonMouseLeftButtonDown"\r
+ PreviewMouseLeftButtonUp="DownButtonMouseLeftButtonUp">\r
+ <Polygon\r
+ Style="{StaticResource Arrow}"\r
+ Points="0,0 8,0 4,4" />\r
+ </Button>\r
+ </Grid>\r
+ </Grid>\r
+</UserControl>\r
--- /dev/null
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="TimeSpanBox.xaml.cs" company="HandBrake Project (http://handbrake.fr)">\r
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.\r
+// </copyright>\r
+// <summary>\r
+// Interaction logic for TimeSpanBox.xaml\r
+// </summary>\r
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrakeWPF.Controls\r
+{\r
+ using System;\r
+ using System.Globalization;\r
+ using System.Linq;\r
+ using System.Windows;\r
+ using System.Windows.Controls;\r
+ using System.Windows.Input;\r
+ using System.Windows.Media;\r
+\r
+ /// <summary>\r
+ /// Interaction logic for TimeSpanBox.xaml\r
+ /// </summary>\r
+ public partial class TimeSpanBox\r
+ {\r
+ #region Constants and Fields\r
+\r
+ /// <summary>\r
+ /// The maximum property name.\r
+ /// </summary>\r
+ public const string MaximumPropertyName = "Maximum";\r
+\r
+ /// <summary>\r
+ /// The minimum property name.\r
+ /// </summary>\r
+ public const string MinimumPropertyName = "Minimum";\r
+\r
+ /// <summary>\r
+ /// The modulus property name.\r
+ /// </summary>\r
+ public const string ModulusPropertyName = "Modulus";\r
+\r
+ /// <summary>\r
+ /// The allow empty property.\r
+ /// </summary>\r
+ public static readonly DependencyProperty AllowEmptyProperty = DependencyProperty.Register(\r
+ "AllowEmpty", typeof(bool), typeof(TimeSpanBox), new PropertyMetadata(true, OnAllowEmptyChanged));\r
+\r
+ /// <summary>\r
+ /// The maximum property.\r
+ /// </summary>\r
+ public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register(\r
+ MaximumPropertyName, typeof(int), typeof(TimeSpanBox), new UIPropertyMetadata(int.MaxValue));\r
+\r
+ /// <summary>\r
+ /// The minimum property.\r
+ /// </summary>\r
+ public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register(\r
+ MinimumPropertyName, typeof(int), typeof(TimeSpanBox), new UIPropertyMetadata(int.MinValue));\r
+\r
+ /// <summary>\r
+ /// The modulus property.\r
+ /// </summary>\r
+ public static readonly DependencyProperty ModulusProperty = DependencyProperty.Register(\r
+ ModulusPropertyName, typeof(int), typeof(TimeSpanBox), new UIPropertyMetadata(0));\r
+\r
+ /// <summary>\r
+ /// The number property.\r
+ /// </summary>\r
+ public static readonly DependencyProperty NumberProperty = DependencyProperty.Register(\r
+ "Number", typeof(int), typeof(TimeSpanBox), new PropertyMetadata(OnNumberChanged));\r
+\r
+ /// <summary>\r
+ /// The show time span property.\r
+ /// </summary>\r
+ public static readonly DependencyProperty ShowTimeSpanProperty = DependencyProperty.Register(\r
+ "ShowTimeSpan", typeof(bool), typeof(TimeSpanBox), new PropertyMetadata(OnShowTimeSpanChanged));\r
+\r
+ /// <summary>\r
+ /// The select all threshold.\r
+ /// </summary>\r
+ private static readonly TimeSpan SelectAllThreshold = TimeSpan.FromMilliseconds(500);\r
+\r
+ /// <summary>\r
+ /// The has focus.\r
+ /// </summary>\r
+ private bool hasFocus;\r
+\r
+ /// <summary>\r
+ /// The last focus mouse down.\r
+ /// </summary>\r
+ private DateTime lastFocusMouseDown;\r
+\r
+ /// <summary>\r
+ /// The none caption.\r
+ /// </summary>\r
+ private string noneCaption;\r
+\r
+ /// <summary>\r
+ /// The refire control.\r
+ /// </summary>\r
+ private RefireControl refireControl;\r
+\r
+ /// <summary>\r
+ /// The suppress refresh.\r
+ /// </summary>\r
+ private bool suppressRefresh;\r
+\r
+ #endregion\r
+\r
+ #region Constructors and Destructors\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="TimeSpanBox"/> class. \r
+ /// </summary>\r
+ public TimeSpanBox()\r
+ {\r
+ this.noneCaption = "(none)";\r
+ this.UpdateBindingOnTextChange = true;\r
+ this.ShowIncrementButtons = true;\r
+ this.SelectAllOnClick = true;\r
+\r
+ this.InitializeComponent();\r
+\r
+ this.RefreshNumberBox();\r
+ }\r
+\r
+ #endregion\r
+\r
+ #region Properties\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether show time span.\r
+ /// </summary>\r
+ public bool ShowTimeSpan\r
+ {\r
+ get\r
+ {\r
+ return (bool)this.GetValue(ShowTimeSpanProperty);\r
+ }\r
+\r
+ set\r
+ {\r
+ this.SetValue(ShowTimeSpanProperty, value);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether allow empty.\r
+ /// </summary>\r
+ public bool AllowEmpty\r
+ {\r
+ get\r
+ {\r
+ return (bool)this.GetValue(AllowEmptyProperty);\r
+ }\r
+\r
+ set\r
+ {\r
+ this.SetValue(AllowEmptyProperty, value);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the maximum.\r
+ /// </summary>\r
+ public int Maximum\r
+ {\r
+ get\r
+ {\r
+ return (int)this.GetValue(MaximumProperty);\r
+ }\r
+ set\r
+ {\r
+ this.SetValue(MaximumProperty, value);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the minimum.\r
+ /// </summary>\r
+ public int Minimum\r
+ {\r
+ get\r
+ {\r
+ return (int)this.GetValue(MinimumProperty);\r
+ }\r
+ set\r
+ {\r
+ this.SetValue(MinimumProperty, value);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the modulus.\r
+ /// </summary>\r
+ public int Modulus\r
+ {\r
+ get\r
+ {\r
+ return (int)this.GetValue(ModulusProperty);\r
+ }\r
+ set\r
+ {\r
+ this.SetValue(ModulusProperty, value);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the none caption.\r
+ /// </summary>\r
+ public string NoneCaption\r
+ {\r
+ get\r
+ {\r
+ return this.noneCaption;\r
+ }\r
+\r
+ set\r
+ {\r
+ this.noneCaption = value;\r
+ this.RefreshNumberBox();\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the number.\r
+ /// </summary>\r
+ public int Number\r
+ {\r
+ get\r
+ {\r
+ return (int)this.GetValue(NumberProperty);\r
+ }\r
+\r
+ set\r
+ {\r
+ this.SetValue(NumberProperty, value);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether select all on click.\r
+ /// </summary>\r
+ public bool SelectAllOnClick { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether show increment buttons.\r
+ /// </summary>\r
+ public bool ShowIncrementButtons { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether update binding on text change.\r
+ /// </summary>\r
+ public bool UpdateBindingOnTextChange { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets the increment.\r
+ /// </summary>\r
+ private int Increment\r
+ {\r
+ get\r
+ {\r
+ return this.Modulus > 0 ? this.Modulus : 1;\r
+ }\r
+ }\r
+\r
+ #endregion\r
+\r
+ #region Methods\r
+\r
+ /// <summary>\r
+ /// The on allow empty changed.\r
+ /// </summary>\r
+ /// <param name="dependencyObject">\r
+ /// The dependency object.\r
+ /// </param>\r
+ /// <param name="eventArgs">\r
+ /// The event args.\r
+ /// </param>\r
+ private static void OnAllowEmptyChanged(\r
+ DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs)\r
+ {\r
+ var numBox = dependencyObject as TimeSpanBox;\r
+ if (numBox != null)\r
+ {\r
+ numBox.RefreshNumberBox();\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// The on number changed.\r
+ /// </summary>\r
+ /// <param name="dependencyObject">\r
+ /// The dependency object.\r
+ /// </param>\r
+ /// <param name="eventArgs">\r
+ /// The event args.\r
+ /// </param>\r
+ private static void OnNumberChanged(\r
+ DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs)\r
+ {\r
+ if (eventArgs.NewValue != eventArgs.OldValue)\r
+ {\r
+ var numBox = dependencyObject as TimeSpanBox;\r
+\r
+ if (!numBox.suppressRefresh)\r
+ {\r
+ numBox.RefreshNumberBox();\r
+ }\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// The on show timespan number changed.\r
+ /// </summary>\r
+ /// <param name="dependencyObject">\r
+ /// The dependency object.\r
+ /// </param>\r
+ /// <param name="eventArgs">\r
+ /// The event args.\r
+ /// </param>\r
+ private static void OnShowTimeSpanChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs)\r
+ {\r
+ if (eventArgs.NewValue != eventArgs.OldValue)\r
+ {\r
+ var numBox = dependencyObject as TimeSpanBox;\r
+\r
+ if (!numBox.suppressRefresh)\r
+ {\r
+ numBox.RefreshNumberBox();\r
+ }\r
+ }\r
+ } \r
+\r
+ /// <summary>\r
+ /// The decrement number.\r
+ /// </summary>\r
+ private void DecrementNumber()\r
+ {\r
+ int newNumber;\r
+ if (this.AllowEmpty && this.Number == 0)\r
+ {\r
+ newNumber = Math.Min(this.Maximum, -this.Increment);\r
+ }\r
+ else\r
+ {\r
+ newNumber = this.Number - this.Increment;\r
+ }\r
+\r
+ if (newNumber < this.Minimum)\r
+ {\r
+ newNumber = this.Minimum;\r
+ }\r
+\r
+ if (newNumber != this.Number)\r
+ {\r
+ this.Number = newNumber;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// The down button mouse left button down.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void DownButtonMouseLeftButtonDown(object sender, MouseButtonEventArgs e)\r
+ {\r
+ this.refireControl = new RefireControl(this.DecrementNumber);\r
+ this.refireControl.Begin();\r
+ }\r
+\r
+ /// <summary>\r
+ /// The down button mouse left button up.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void DownButtonMouseLeftButtonUp(object sender, MouseButtonEventArgs e)\r
+ {\r
+ this.refireControl.Stop();\r
+ }\r
+\r
+ /// <summary>\r
+ /// The get nearest value.\r
+ /// </summary>\r
+ /// <param name="number">\r
+ /// The number.\r
+ /// </param>\r
+ /// <param name="modulus">\r
+ /// The modulus.\r
+ /// </param>\r
+ /// <returns>\r
+ /// The <see cref="double"/>.\r
+ /// </returns>\r
+ private int GetNearestValue(int number, int modulus)\r
+ {\r
+ int remainder = number % modulus;\r
+\r
+ if (remainder == 0)\r
+ {\r
+ return number;\r
+ }\r
+\r
+ return remainder >= (modulus / 2) ? number + (modulus - remainder) : number - remainder;\r
+ }\r
+\r
+ /// <summary>\r
+ /// The increment number.\r
+ /// </summary>\r
+ private void IncrementNumber()\r
+ {\r
+ int newNumber;\r
+ if (this.AllowEmpty && this.Number == 0)\r
+ {\r
+ newNumber = Math.Max(this.Minimum, this.Increment);\r
+ }\r
+ else\r
+ {\r
+ newNumber = this.Number + this.Increment;\r
+ }\r
+\r
+ if (newNumber > this.Maximum)\r
+ {\r
+ newNumber = this.Maximum;\r
+ }\r
+\r
+ if (newNumber != this.Number)\r
+ {\r
+ this.Number = newNumber;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// The number box got focus.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void NumberBoxGotFocus(object sender, RoutedEventArgs e)\r
+ {\r
+ this.hasFocus = true;\r
+\r
+ if (this.AllowEmpty)\r
+ {\r
+ if (this.Number == 0)\r
+ {\r
+ this.numberBox.Text = string.Empty;\r
+ }\r
+\r
+ this.numberBox.Foreground = new SolidColorBrush(Colors.Black);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// The number box lost focus.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void NumberBoxLostFocus(object sender, RoutedEventArgs e)\r
+ {\r
+ this.hasFocus = false;\r
+\r
+ if (this.AllowEmpty && this.numberBox.Text == string.Empty)\r
+ {\r
+ this.Number = 0;\r
+ this.RefreshNumberBox();\r
+ return;\r
+ }\r
+\r
+ this.UpdateNumberBindingFromBox();\r
+ this.RefreshNumberBox();\r
+ }\r
+\r
+ /// <summary>\r
+ /// The number box preview key down.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void NumberBoxPreviewKeyDown(object sender, KeyEventArgs e)\r
+ {\r
+ if (e.Key == Key.Space)\r
+ {\r
+ e.Handled = true;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// The number box preview mouse down.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void NumberBoxPreviewMouseDown(object sender, MouseButtonEventArgs e)\r
+ {\r
+ if (!this.hasFocus)\r
+ {\r
+ this.lastFocusMouseDown = DateTime.Now;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// The number box preview mouse up.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void NumberBoxPreviewMouseUp(object sender, MouseButtonEventArgs e)\r
+ {\r
+ // If this mouse up is soon enough after an initial click on the box, select all.\r
+ if (this.SelectAllOnClick && DateTime.Now - this.lastFocusMouseDown < SelectAllThreshold)\r
+ {\r
+ this.Dispatcher.BeginInvoke(new Action(() => this.numberBox.SelectAll()));\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// The number box preview text input.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void NumberBoxPreviewTextInput(object sender, TextCompositionEventArgs e)\r
+ {\r
+ if (e.Text.Any(c => !char.IsNumber(c) && c != '.' && c != ':' && (this.Minimum >= 0 || c != '-')))\r
+ {\r
+ e.Handled = true;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// The number box text changed.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void NumberBoxTextChanged(object sender, TextChangedEventArgs e)\r
+ {\r
+ if (this.UpdateBindingOnTextChange)\r
+ {\r
+ if (this.AllowEmpty && this.numberBox.Text == string.Empty)\r
+ {\r
+ this.Number = 0;\r
+ return;\r
+ }\r
+\r
+ this.UpdateNumberBindingFromBox();\r
+ }\r
+\r
+ this.RefreshNumberBoxColor();\r
+ }\r
+\r
+ /// <summary>\r
+ /// The number is valid.\r
+ /// </summary>\r
+ /// <param name="number">\r
+ /// The number.\r
+ /// </param>\r
+ /// <returns>\r
+ /// The <see cref="bool"/>.\r
+ /// </returns>\r
+ private bool NumberIsValid(double number)\r
+ {\r
+ return number >= this.Minimum && number <= this.Maximum;\r
+ }\r
+\r
+ /// <summary>\r
+ /// The refresh number box.\r
+ /// </summary>\r
+ private void RefreshNumberBox()\r
+ {\r
+ if (this.AllowEmpty && this.Number == 0)\r
+ {\r
+ this.numberBox.Text = this.hasFocus ? string.Empty : this.NoneCaption;\r
+\r
+ // this.numberBox.Foreground = new SolidColorBrush(Colors.Gray);\r
+ }\r
+ else\r
+ {\r
+ if (this.ShowTimeSpan)\r
+ {\r
+ this.numberBox.Text = TimeSpan.FromSeconds(this.Number).ToString();\r
+ }\r
+ else\r
+ {\r
+ this.numberBox.Text = this.Number.ToString(CultureInfo.InvariantCulture);\r
+ }\r
+\r
+ // this.numberBox.Foreground = new SolidColorBrush(Colors.Black);\r
+ }\r
+\r
+ this.RefreshNumberBoxColor();\r
+ }\r
+\r
+ /// <summary>\r
+ /// The refresh number box color.\r
+ /// </summary>\r
+ private void RefreshNumberBoxColor()\r
+ {\r
+ this.numberBox.Foreground = this.numberBox.Text == this.NoneCaption ? new SolidColorBrush(Colors.Gray) : new SolidColorBrush(Colors.Black);\r
+ }\r
+\r
+ /// <summary>\r
+ /// The up button mouse left button down.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void UpButtonMouseLeftButtonDown(object sender, MouseButtonEventArgs e)\r
+ {\r
+ this.refireControl = new RefireControl(this.IncrementNumber);\r
+ this.refireControl.Begin();\r
+ }\r
+\r
+ /// <summary>\r
+ /// The up button mouse left button up.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void UpButtonMouseLeftButtonUp(object sender, MouseButtonEventArgs e)\r
+ {\r
+ this.refireControl.Stop();\r
+ }\r
+\r
+ /// <summary>\r
+ /// The update number binding from box.\r
+ /// </summary>\r
+ private void UpdateNumberBindingFromBox()\r
+ {\r
+ int newNumber;\r
+ TimeSpan newTimespanNumber;\r
+ if (int.TryParse(this.numberBox.Text, out newNumber))\r
+ {\r
+ if (this.NumberIsValid(newNumber))\r
+ {\r
+ if (this.Modulus != 0)\r
+ {\r
+ newNumber = this.GetNearestValue(newNumber, this.Modulus);\r
+ }\r
+\r
+ if (newNumber != this.Number)\r
+ {\r
+ // While updating the binding we don't need to react to the change.\r
+ this.suppressRefresh = true;\r
+ this.Number = newNumber;\r
+ this.suppressRefresh = false;\r
+ }\r
+ }\r
+ } \r
+ else if (TimeSpan.TryParse(this.numberBox.Text, out newTimespanNumber))\r
+ {\r
+ if (newTimespanNumber != TimeSpan.Zero)\r
+ {\r
+ int seconds = (int)Math.Round(newTimespanNumber.TotalSeconds, 0);\r
+ if (seconds != this.Number)\r
+ {\r
+ // While updating the binding we don't need to react to the change.\r
+ this.suppressRefresh = true;\r
+ this.Number = seconds;\r
+ this.suppressRefresh = false;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// The user control_ loaded.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void UserControl_Loaded(object sender, RoutedEventArgs e)\r
+ {\r
+ if (!this.ShowIncrementButtons)\r
+ {\r
+ this.incrementButtonsGrid.Visibility = Visibility.Collapsed;\r
+ }\r
+ }\r
+\r
+ #endregion\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="InverseBooleanConverter.cs" company="HandBrake Project (http://handbrake.fr)">\r
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.\r
+// </copyright>\r
+// <summary>\r
+// The inverse boolean converter.\r
+// </summary>\r
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrakeWPF.Converters\r
+{\r
+ using System;\r
+ using System.Globalization;\r
+ using System.Windows.Data;\r
+\r
+ /// <summary>\r
+ /// The inverse boolean converter.\r
+ /// </summary>\r
+ [ValueConversion(typeof(bool), typeof(bool))]\r
+ public class InverseBooleanConverter : IValueConverter\r
+ {\r
+ #region Implemented Interfaces\r
+\r
+ #region IValueConverter\r
+\r
+ /// <summary>\r
+ /// The convert.\r
+ /// </summary>\r
+ /// <param name="value">\r
+ /// The value.\r
+ /// </param>\r
+ /// <param name="targetType">\r
+ /// The target type.\r
+ /// </param>\r
+ /// <param name="parameter">\r
+ /// The parameter.\r
+ /// </param>\r
+ /// <param name="culture">\r
+ /// The culture.\r
+ /// </param>\r
+ /// <returns>\r
+ /// The <see cref="object"/>.\r
+ /// </returns>\r
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\r
+ {\r
+ if (targetType != typeof(bool))\r
+ {\r
+ throw new InvalidOperationException("The target must be a boolean");\r
+ }\r
+\r
+ return !(bool)value;\r
+ }\r
+\r
+ /// <summary>\r
+ /// The convert back.\r
+ /// </summary>\r
+ /// <param name="value">\r
+ /// The value.\r
+ /// </param>\r
+ /// <param name="targetType">\r
+ /// The target type.\r
+ /// </param>\r
+ /// <param name="parameter">\r
+ /// The parameter.\r
+ /// </param>\r
+ /// <param name="culture">\r
+ /// The culture.\r
+ /// </param>\r
+ /// <returns>\r
+ /// The <see cref="object"/>.\r
+ /// </returns>\r
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\r
+ {\r
+ throw new NotSupportedException();\r
+ }\r
+\r
+ #endregion\r
+\r
+ #endregion\r
+ }\r
+}
\ No newline at end of file
<Compile Include="Commands\ProcessShortcutCommand.cs" />\r
<Compile Include="Commands\SourceMenuCommand.cs" />\r
<Compile Include="Commands\AdvancedEncoderOptionsCommand.cs" />\r
+ <Compile Include="Controls\TimeSpanBox.xaml.cs">\r
+ <DependentUpon>TimeSpanBox.xaml</DependentUpon>\r
+ </Compile>\r
<Compile Include="Controls\Loading.xaml.cs">\r
<DependentUpon>Loading.xaml</DependentUpon>\r
</Compile>\r
<Compile Include="Converters\Audio\AudioEncoderConverter.cs" />\r
<Compile Include="Converters\Audio\AudioQueueDisplayConverter.cs" />\r
<Compile Include="Converters\BooleanToHiddenVisibilityConverter.cs" />\r
+ <Compile Include="Converters\InverseBooleanConverter.cs" />\r
<Compile Include="Converters\Options\OptionsTabConverter.cs" />\r
<Compile Include="Converters\Options\OptionsTabNameConverter.cs" />\r
<Compile Include="Converters\Subtitles\SubtitlesQueueDisplayConverter.cs" />\r
<Compile Include="Helpers\GrayscaleImage.cs" />\r
<Compile Include="Helpers\GrowlCommunicator.cs" />\r
<Compile Include="Model\OptionsTab.cs" />\r
+ <Compile Include="Model\SelectionTitle.cs" />\r
<Compile Include="Services\DriveDetectService.cs" />\r
<Compile Include="Services\EncodeServiceWrapper.cs" />\r
<Compile Include="Services\Interfaces\IDriveDetectService.cs" />\r
<Compile Include="Services\NotificationService.cs" />\r
<Compile Include="Services\ScanServiceWrapper.cs" />\r
<Compile Include="Services\UpdateService.cs" />\r
+ <Compile Include="ViewModels\Interfaces\IQueueSelectionViewModel.cs" />\r
+ <Compile Include="ViewModels\QueueSelectionViewModel.cs" />\r
+ <Compile Include="Views\QueueSelectionView.xaml.cs">\r
+ <DependentUpon>QueueSelectionView.xaml</DependentUpon>\r
+ </Compile>\r
<Compile Include="Views\ShellView.xaml.cs">\r
<DependentUpon>ShellView.xaml</DependentUpon>\r
</Compile>\r
<AppDesigner Include="Properties\" />\r
</ItemGroup>\r
<ItemGroup>\r
+ <Page Include="Controls\TimeSpanBox.xaml">\r
+ <Generator>MSBuild:Compile</Generator>\r
+ <SubType>Designer</SubType>\r
+ </Page>\r
<Page Include="Controls\Loading.xaml">\r
<SubType>Designer</SubType>\r
<Generator>MSBuild:Compile</Generator>\r
<SubType>Designer</SubType>\r
<Generator>MSBuild:Compile</Generator>\r
</Page>\r
+ <Page Include="Views\QueueSelectionView.xaml">\r
+ <Generator>MSBuild:Compile</Generator>\r
+ <SubType>Designer</SubType>\r
+ </Page>\r
<Page Include="Views\ShellView.xaml">\r
<SubType>Designer</SubType>\r
<Generator>MSBuild:Compile</Generator>\r
--- /dev/null
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="SelectionTitle.cs" company="HandBrake Project (http://handbrake.fr)">\r
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.\r
+// </copyright>\r
+// <summary>\r
+// TODO: Update summary.\r
+// </summary>\r
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrakeWPF.Model\r
+{\r
+ using Caliburn.Micro;\r
+\r
+ using HandBrake.ApplicationServices.Parsing;\r
+\r
+ /// <summary>\r
+ /// A model for the multiple selection window for adding to the queue.\r
+ /// </summary>\r
+ public class SelectionTitle : PropertyChangedBase\r
+ {\r
+ /// <summary>\r
+ /// The source name.\r
+ /// </summary>\r
+ private readonly string sourceName;\r
+\r
+ /// <summary>\r
+ /// The is selected.\r
+ /// </summary>\r
+ private bool isSelected;\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="SelectionTitle"/> class.\r
+ /// </summary>\r
+ /// <param name="title">\r
+ /// The title.\r
+ /// </param>\r
+ /// <param name="sourceName">\r
+ /// The source Name.\r
+ /// </param>\r
+ public SelectionTitle(Title title, string sourceName)\r
+ {\r
+ this.sourceName = sourceName;\r
+ this.Title = title;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets the source name.\r
+ /// </summary>\r
+ public string SourceName\r
+ {\r
+ get\r
+ {\r
+ return !string.IsNullOrEmpty(Title.SourceName) ? Title.SourceName : sourceName;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the end point.\r
+ /// </summary>\r
+ public int EndPoint { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether is selected.\r
+ /// </summary>\r
+ public bool IsSelected\r
+ {\r
+ get\r
+ {\r
+ return this.isSelected;\r
+ }\r
+ set\r
+ {\r
+ this.isSelected = value;\r
+ this.NotifyOfPropertyChange(() => this.IsSelected);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the start point.\r
+ /// </summary>\r
+ public int StartPoint { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the title.\r
+ /// </summary>\r
+ public Title Title { get; set; }\r
+ }\r
+}
\ No newline at end of file
\r
/// <summary>\r
/// Looks up a localized string similar to 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. \r
- ///Doesn't apply to Diamond or Hexagon search options. \r
+ ///\r
///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..\r
/// </summary>\r
public static string Advanced_MotionEstimationRangeToolTip {\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Looks up a localized string similar to The x264 Preset / Tune / Profile and Level options are currently in use on the Video Tab. \r
+ ///\r
+ ///To enable this tab, check the "Use Advanced Tab instead" option on the Video Tab.\r
+ ///\r
+ ///If you do not use this tab, it can be hidden from: Tools Menu > Options > Advanced..\r
+ /// </summary>\r
+ public static string Advanced_NotInUse {\r
+ get {\r
+ return ResourceManager.GetString("Advanced_NotInUse", resourceCulture);\r
+ }\r
+ }\r
+ \r
/// <summary>\r
/// Looks up a localized string similar to Psychovisual Rate Distortion means x264 tries to retain detail, for better quality to the human eye, \r
///as opposed to trying to maximize quality the way a computer understands it, through signal-to-noise ratios that have trouble telling apart fine detail and noise..\r
</data>\r
<data name="Advanced_MotionEstimationRangeToolTip" xml:space="preserve">\r
<value>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. \r
-Doesn't apply to Diamond or Hexagon search options. \r
+\r
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.</value>\r
</data>\r
<data name="Advanced_NoDctDecimateToolTip" xml:space="preserve">\r
along with this program; if not, write to the Free Software\r
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</value>\r
</data>\r
+ <data name="Advanced_NotInUse" xml:space="preserve">\r
+ <value>The x264 Preset / Tune / Profile and Level options are currently in use on the Video Tab. \r
+\r
+To enable this tab, check the "Use Advanced Tab instead" option on the Video Tab.\r
+\r
+If you do not use this tab, it can be hidden from: Tools Menu > Options > Advanced.</value>\r
+ </data>\r
</root>
\ No newline at end of file
this.windsorContainer.Register(Component.For<IOptionsViewModel>().ImplementedBy<OptionsViewModel>().LifeStyle.Is(LifestyleType.Singleton));\r
this.windsorContainer.Register(Component.For<IUpdateVersionService>().ImplementedBy<UpdateVersionService>().LifeStyle.Is(LifestyleType.Singleton));\r
this.windsorContainer.Register(Component.For<ITitleSpecificViewModel>().ImplementedBy<TitleSpecificViewModel>().LifeStyle.Is(LifestyleType.Singleton));\r
+ this.windsorContainer.Register(Component.For<IQueueSelectionViewModel>().ImplementedBy<QueueSelectionViewModel>().LifeStyle.Is(LifestyleType.Singleton));\r
+ \r
\r
// Tab Components\r
this.windsorContainer.Register(Component.For<IAudioViewModel>().ImplementedBy<AudioViewModel>().LifeStyle.Is(LifestyleType.Singleton));\r
/// </summary>\r
public const string ShowAdvancedTab = "ShowAdvancedTab";\r
\r
+ /// <summary>\r
+ /// The last preview duration\r
+ /// </summary>\r
+ public const string LastPreviewDuration = "LastPreviewDuration";\r
+\r
#endregion\r
}\r
}
\ No newline at end of file
/// <summary>\r
/// Initializes a new instance of the <see cref="AdvancedViewModel"/> class.\r
/// </summary>\r
+ /// <param name="advancedEncoderOptionsCommand">\r
+ /// The advanced Encoder Options Command.\r
+ /// </param>\r
public AdvancedViewModel(IAdvancedEncoderOptionsCommand advancedEncoderOptionsCommand)\r
{\r
this.advancedEncoderOptionsCommand = advancedEncoderOptionsCommand;\r
this.UpdateUIFromAdvancedOptions();\r
}\r
\r
+ /// <summary>\r
+ /// The task object property changed.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The PropertyChangedEventArgs.\r
+ /// </param>\r
+ private void Task_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)\r
+ {\r
+ if (e.PropertyName == UserSettingConstants.ShowAdvancedTab)\r
+ {\r
+ ShowX264AdvancedOptions = this.Task.ShowAdvancedTab;\r
+ this.NotifyOfPropertyChange(() => ShowX264AdvancedOptions);\r
+ }\r
+ }\r
+\r
#endregion\r
\r
#region Properties\r
\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether show x 264 advanced options.\r
+ /// </summary>\r
+ public bool ShowX264AdvancedOptions { get; set; }\r
+\r
/// <summary>\r
/// Gets or sets a value indicating whether DisplayX264Options.\r
/// </summary>\r
set\r
{\r
this.displayX264Options = value;\r
+\r
+ if (this.displayX264Options == false)\r
+ {\r
+ this.ShowX264AdvancedOptions = false;\r
+ }\r
+\r
+ if (this.displayX264Options == true && this.Task.ShowAdvancedTab)\r
+ {\r
+ this.ShowX264AdvancedOptions = true;\r
+ }\r
+\r
this.NotifyOfPropertyChange(() => this.DisplayX264Options);\r
+ this.NotifyOfPropertyChange(() => this.ShowX264AdvancedOptions);\r
}\r
}\r
\r
/// </param>\r
public void SetPreset(Preset preset, EncodeTask task)\r
{\r
+ this.Task.PropertyChanged -= this.Task_PropertyChanged;\r
this.Task = task;\r
+ this.Task.PropertyChanged += this.Task_PropertyChanged;\r
this.AdvancedOptionsString = preset.Task.AdvancedEncoderOptions;\r
}\r
\r
foreach (Chapter chapter in this.SourceChapterList)\r
{\r
string chapterName = string.IsNullOrEmpty(chapter.ChapterName) ? string.Format("Chapter {0}", counter) : chapter.ChapterName;\r
- var marker = new ChapterMarker(chapter.ChapterNumber, chapterName);\r
+ var marker = new ChapterMarker(chapter.ChapterNumber, chapterName, chapter.Duration);\r
this.Task.ChapterNames.Add(marker);\r
\r
counter += 1;\r
--- /dev/null
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="IQueueSelectionViewModel.cs" company="HandBrake Project (http://handbrake.fr)">\r
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.\r
+// </copyright>\r
+// <summary>\r
+// The Queue Selection View Model Interface\r
+// </summary>\r
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrakeWPF.ViewModels.Interfaces\r
+{\r
+ using System.Collections.Generic;\r
+ using System.ComponentModel;\r
+\r
+ using HandBrake.ApplicationServices.Parsing;\r
+\r
+ using HandBrakeWPF.Model;\r
+\r
+ /// <summary>\r
+ /// The Add Preset View Model\r
+ /// </summary>\r
+ public interface IQueueSelectionViewModel\r
+ {\r
+ /// <summary>\r
+ /// Gets the selected titles.\r
+ /// </summary>\r
+ BindingList<SelectionTitle> TitleList { get; }\r
+\r
+ /// <summary>\r
+ /// The setup.\r
+ /// </summary>\r
+ /// <param name="scannedSource">\r
+ /// The scanned source.\r
+ /// </param>\r
+ /// <param name="sourceName">\r
+ /// The source Name.\r
+ /// </param>\r
+ void Setup(Source scannedSource, string sourceName);\r
+ }\r
+}\r
// Setup Properties\r
this.WindowTitle = "HandBrake";\r
this.CurrentTask = new EncodeTask();\r
+ this.CurrentTask.PropertyChanged += this.CurrentTask_PropertyChanged;\r
this.ScannedSource = new Source();\r
\r
// Setup Events\r
this.queueProcessor.QueueCompleted += this.QueueCompleted;\r
this.queueProcessor.QueueChanged += this.QueueChanged;\r
this.queueProcessor.EncodeService.EncodeStatusChanged += this.EncodeStatusChanged;\r
+ this.userSettingService.SettingChanged += this.UserSettingServiceSettingChanged;\r
\r
this.Presets = this.presetService.Presets;\r
this.CancelScanCommand = new CancelScanCommand(this.scanService);\r
{\r
get\r
{\r
+ // Sanity Check\r
+ if (ScannedSource == null || ScannedSource.ScanPath == null)\r
+ {\r
+ return string.Empty;\r
+ }\r
+\r
// The title that is selected has a source name. This means it's part of a batch scan.\r
if (selectedTitle != null && !string.IsNullOrEmpty(selectedTitle.SourceName))\r
{\r
set\r
{\r
this.isMkv = value;\r
- this.NotifyOfPropertyChange("IsMkv");\r
+ this.NotifyOfPropertyChange(() => this.IsMkv);\r
}\r
}\r
\r
{\r
return this.CurrentTask.StartPoint;\r
}\r
+\r
set\r
{\r
this.CurrentTask.Angle = value;\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether is timespan range.\r
+ /// </summary>\r
+ public bool IsTimespanRange { get; set; }\r
+\r
/// <summary>\r
/// Gets or sets SelectedStartPoint.\r
/// </summary>\r
this.NotifyOfPropertyChange(() => this.SelectedStartPoint);\r
this.Duration = this.DurationCalculation();\r
\r
- if (this.UserSettingService.GetUserSetting<bool>(UserSettingConstants.AutoNaming))\r
+ if (this.UserSettingService.GetUserSetting<bool>(UserSettingConstants.AutoNaming) && this.ScannedSource.ScanPath != null)\r
{\r
this.Destination = AutoNameHelper.AutoName(this.CurrentTask, this.SourceName);\r
}\r
this.NotifyOfPropertyChange(() => this.SelectedEndPoint);\r
this.Duration = this.DurationCalculation();\r
\r
- if (this.UserSettingService.GetUserSetting<bool>(UserSettingConstants.AutoNaming))\r
+ if (this.UserSettingService.GetUserSetting<bool>(UserSettingConstants.AutoNaming) && this.ScannedSource.ScanPath != null)\r
{\r
this.Destination = AutoNameHelper.AutoName(this.CurrentTask, this.SourceName);\r
}\r
\r
if (value == PointToPointMode.Chapters && this.SelectedTitle != null)\r
{\r
+ if (this.selectedTitle == null)\r
+ {\r
+ return;\r
+ }\r
+\r
+\r
this.SelectedStartPoint = 1;\r
this.SelectedEndPoint = selectedTitle.Chapters.Last().ChapterNumber;\r
} \r
else if (value == PointToPointMode.Seconds)\r
{\r
+ if (this.selectedTitle == null)\r
+ {\r
+ return;\r
+ }\r
+\r
+\r
this.SelectedStartPoint = 0;\r
\r
int timeInSeconds;\r
if (int.TryParse(selectedTitle.Duration.TotalSeconds.ToString(CultureInfo.InvariantCulture), out timeInSeconds))\r
{\r
this.SelectedEndPoint = timeInSeconds;\r
- } \r
+ }\r
+\r
+ this.IsTimespanRange = true;\r
+ this.NotifyOfPropertyChange(() => this.IsTimespanRange);\r
}\r
else\r
{\r
+ if (this.selectedTitle == null)\r
+ {\r
+ return;\r
+ }\r
+\r
// Note this does not account for VFR. It's only a guesstimate. \r
double estimatedTotalFrames = selectedTitle.Fps * selectedTitle.Duration.TotalSeconds;\r
\r
{\r
this.SelectedEndPoint = totalFrames;\r
}\r
+\r
+ this.IsTimespanRange = false;\r
+ this.NotifyOfPropertyChange(() => this.IsTimespanRange);\r
}\r
}\r
}\r
this.queueProcessor.QueueChanged -= this.QueueChanged;\r
this.queueProcessor.JobProcessingStarted -= this.QueueProcessorJobProcessingStarted;\r
this.queueProcessor.EncodeService.EncodeStatusChanged -= this.EncodeStatusChanged;\r
+ this.userSettingService.SettingChanged -= this.UserSettingServiceSettingChanged;\r
}\r
\r
#endregion\r
}\r
}\r
\r
+ /// <summary>\r
+ /// The add selection to queue.\r
+ /// </summary>\r
+ public void AddSelectionToQueue()\r
+ {\r
+ if (this.ScannedSource == null || this.ScannedSource.Titles == null || this.ScannedSource.Titles.Count == 0)\r
+ {\r
+ this.errorService.ShowMessageBox("You must first scan a source and setup your job before adding to the queue.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);\r
+ return;\r
+ }\r
+\r
+ if (!AutoNameHelper.IsAutonamingEnabled())\r
+ {\r
+ this.errorService.ShowMessageBox("You must turn on automatic file naming in preferences before you can add to the queue.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);\r
+ return;\r
+ }\r
+\r
+ Window window = Application.Current.Windows.Cast<Window>().FirstOrDefault(x => x.GetType() == typeof(QueueSelectionViewModel));\r
+ IQueueSelectionViewModel viewModel = IoC.Get<IQueueSelectionViewModel>();\r
+\r
+ viewModel.Setup(this.ScannedSource, this.SourceName);\r
+\r
+ if (window != null)\r
+ {\r
+ window.Activate();\r
+ }\r
+ else\r
+ {\r
+ this.WindowManager.ShowWindow(viewModel);\r
+ }\r
+ }\r
+\r
/// <summary>\r
/// Folder Scan\r
/// </summary>\r
this.NotifyOfPropertyChange(() => this.ScannedSource.Titles);\r
\r
// Select the Users Title\r
- this.CurrentTask = new EncodeTask(queueEditTask);\r
- this.NotifyOfPropertyChange(() => this.CurrentTask);\r
this.SelectedTitle = this.ScannedSource.Titles.FirstOrDefault(t => t.TitleNumber == this.CurrentTask.Title);\r
-\r
- // Update the Main UI control Area (TODO)\r
this.CurrentTask = new EncodeTask(queueEditTask);\r
this.NotifyOfPropertyChange(() => this.CurrentTask);\r
\r
- // Update the Tab Controls (TODO)\r
+ // Update the Main Window\r
+ this.NotifyOfPropertyChange(() => this.Destination);\r
+ this.NotifyOfPropertyChange(() => this.SelectedStartPoint);\r
+ this.NotifyOfPropertyChange(() => this.SelectedEndPoint);\r
+ this.NotifyOfPropertyChange(() => this.SelectedAngle);\r
+ this.NotifyOfPropertyChange(() => this.SelectedPointToPoint);\r
+ this.NotifyOfPropertyChange(() => this.SelectedOutputFormat);\r
+ this.NotifyOfPropertyChange(() => IsMkv);\r
+\r
+ // Update the Tab Controls\r
this.PictureSettingsViewModel.UpdateTask(this.CurrentTask);\r
this.VideoViewModel.UpdateTask(this.CurrentTask);\r
this.FiltersViewModel.UpdateTask(this.CurrentTask);\r
this.ChaptersViewModel.UpdateTask(this.CurrentTask);\r
this.AdvancedViewModel.UpdateTask(this.CurrentTask);\r
\r
+ // Tell the Preivew Window\r
+ IPreviewViewModel viewModel = IoC.Get<IPreviewViewModel>();\r
+ viewModel.Task = this.CurrentTask;\r
+\r
// Cleanup\r
this.ShowStatusWindow = false;\r
+\r
+ if (this.SelectedTitle != null && !string.IsNullOrEmpty(this.SelectedTitle.SourceName))\r
+ {\r
+ this.SourceLabel = this.SelectedTitle.SourceName;\r
+ }\r
+ else\r
+ {\r
+ this.SourceLabel = this.SourceName;\r
+ }\r
+\r
+ this.StatusLabel = "Scan Completed";\r
});\r
}\r
\r
this.ProgramStatusLabel = "A New Update is Available. Goto Tools Menu > Options to Install";\r
}\r
}\r
+\r
#endregion\r
\r
#region Event Handlers\r
Caliburn.Micro.Execute.OnUIThread(() => this.SourceMenu = this.GenerateSourceMenu());\r
}\r
\r
+ /// <summary>\r
+ /// Allows the main window to respond to setting changes.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void UserSettingServiceSettingChanged(object sender, HandBrake.ApplicationServices.EventArgs.SettingChangedEventArgs e)\r
+ {\r
+ if (e.Key == UserSettingConstants.ShowAdvancedTab)\r
+ {\r
+ this.NotifyOfPropertyChange(() => this.ShowAdvancedTab);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Handle the property changed event of the encode task. \r
+ /// Allows the main window to respond to changes.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void CurrentTask_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)\r
+ {\r
+ if (e.PropertyName == UserSettingConstants.ShowAdvancedTab)\r
+ {\r
+ this.NotifyOfPropertyChange(() => this.ShowAdvancedTab);\r
+ }\r
+ }\r
+\r
#endregion\r
}\r
}
\ No newline at end of file
this.Duration = 30;\r
\r
UseSystemDefaultPlayer = userSettingService.GetUserSetting<bool>(UserSettingConstants.DefaultPlayer);\r
+ this.Duration = userSettingService.GetUserSetting<int>(UserSettingConstants.LastPreviewDuration);\r
}\r
\r
#endregion\r
{\r
get\r
{\r
- return new List<int> { 10, 30, 45, 60, 75, 90, 105, 120 };\r
+ return new List<int> { 5, 10, 30, 45, 60, 75, 90, 105, 120 };\r
}\r
}\r
\r
this.encodeService.EncodeStatusChanged += this.encodeService_EncodeStatusChanged;\r
\r
this.encodeService.Start((QueueTask)state, false);\r
+ this.userSettingService.SetUserSetting(UserSettingConstants.LastPreviewDuration, this.Duration);\r
}\r
#endregion\r
\r
--- /dev/null
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="QueueSelectionViewModel.cs" company="HandBrake Project (http://handbrake.fr)">\r
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.\r
+// </copyright>\r
+// <summary>\r
+// The Queue Selection View Model\r
+// </summary>\r
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrakeWPF.ViewModels\r
+{\r
+ using System;\r
+ using System.Collections.Generic;\r
+ using System.ComponentModel;\r
+ using System.Linq;\r
+\r
+ using HandBrake.ApplicationServices.Parsing;\r
+\r
+ using HandBrakeWPF.Model;\r
+ using HandBrakeWPF.Services.Interfaces;\r
+ using HandBrakeWPF.ViewModels.Interfaces;\r
+\r
+ /// <summary>\r
+ /// The Queue Selection View Model\r
+ /// </summary>\r
+ public class QueueSelectionViewModel : ViewModelBase, IQueueSelectionViewModel\r
+ {\r
+ /// <summary>\r
+ /// The error service.\r
+ /// </summary>\r
+ private readonly IErrorService errorService;\r
+\r
+ /// <summary>\r
+ /// The ordered by duration.\r
+ /// </summary>\r
+ private bool orderedByDuration;\r
+\r
+ /// <summary>\r
+ /// The ordered by title.\r
+ /// </summary>\r
+ private bool orderedByTitle;\r
+\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="QueueSelectionViewModel"/> class. \r
+ /// </summary>\r
+ /// <param name="errorService">\r
+ /// The Error Service\r
+ /// </param>\r
+ public QueueSelectionViewModel(IErrorService errorService)\r
+ {\r
+ this.errorService = errorService;\r
+ this.Title = "Add to Queue";\r
+ this.TitleList = new BindingList<SelectionTitle>();\r
+ this.OrderedByTitle = true;\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the source.\r
+ /// </summary>\r
+ public string Source { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets the selected titles.\r
+ /// </summary>\r
+ public BindingList<SelectionTitle> TitleList { get; set; }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether ordered by title.\r
+ /// </summary>\r
+ public bool OrderedByTitle\r
+ {\r
+ get\r
+ {\r
+ return this.orderedByTitle;\r
+ }\r
+\r
+ set\r
+ {\r
+ this.orderedByTitle = value;\r
+ this.NotifyOfPropertyChange(() => OrderedByTitle);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether ordered by duration.\r
+ /// </summary>\r
+ public bool OrderedByDuration\r
+ {\r
+ get\r
+ {\r
+ return this.orderedByDuration;\r
+ }\r
+\r
+ set\r
+ {\r
+ this.orderedByDuration = value;\r
+ this.NotifyOfPropertyChange(() => OrderedByDuration);\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// The order by title.\r
+ /// </summary>\r
+ public void OrderByTitle()\r
+ {\r
+ TitleList = new BindingList<SelectionTitle>(TitleList.OrderBy(o => o.Title.TitleNumber).ToList());\r
+ this.NotifyOfPropertyChange(() => TitleList);\r
+ this.OrderedByTitle = true;\r
+ this.OrderedByDuration = false;\r
+ }\r
+\r
+ /// <summary>\r
+ /// The order by duration.\r
+ /// </summary>\r
+ public void OrderByDuration()\r
+ {\r
+ TitleList = new BindingList<SelectionTitle>(TitleList.OrderByDescending(o => o.Title.Duration).ToList());\r
+ this.NotifyOfPropertyChange(() => TitleList);\r
+ this.OrderedByTitle = false;\r
+ this.OrderedByDuration = true;\r
+ }\r
+\r
+ /// <summary>\r
+ /// The select all.\r
+ /// </summary>\r
+ public void SelectAll()\r
+ {\r
+ foreach (var item in TitleList)\r
+ {\r
+ item.IsSelected = true;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// The select all.\r
+ /// </summary>\r
+ public void UnSelectAll()\r
+ {\r
+ foreach (var item in TitleList)\r
+ {\r
+ item.IsSelected = false;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Add a Preset\r
+ /// </summary>\r
+ public void Add()\r
+ {\r
+ this.Close();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Cancel adding a preset\r
+ /// </summary>\r
+ public void Cancel()\r
+ {\r
+ this.TitleList.Clear();\r
+ this.Close();\r
+ }\r
+\r
+ /// <summary>\r
+ /// Close this window.\r
+ /// </summary>\r
+ public void Close()\r
+ {\r
+ this.TryClose();\r
+ }\r
+\r
+ /// <summary>\r
+ /// The setup.\r
+ /// </summary>\r
+ /// <param name="scannedSource">\r
+ /// The scanned source.\r
+ /// </param>\r
+ /// <param name="srcName">\r
+ /// The src Name.\r
+ /// </param>\r
+ public void Setup(Source scannedSource, string srcName)\r
+ {\r
+ this.TitleList.Clear();\r
+\r
+ if (scannedSource != null)\r
+ {\r
+\r
+ IEnumerable<Title> titles = orderedByTitle\r
+ ? scannedSource.Titles\r
+ : scannedSource.Titles.OrderByDescending(o => o.Duration).ToList();\r
+\r
+ foreach (Title item in titles)\r
+ {\r
+ SelectionTitle title = new SelectionTitle(item, srcName);\r
+ TitleList.Add(title);\r
+ }\r
+ }\r
+ }\r
+ }\r
+}\r
{\r
using System;\r
using System.Collections.ObjectModel;\r
+ using System.ComponentModel;\r
using System.Windows;\r
\r
using Caliburn.Micro;\r
/// </summary>\r
public class QueueViewModel : ViewModelBase, IQueueViewModel\r
{\r
+ /*\r
+ \r
+ * TODO FIX THE DRAP/DROP ADORNER!\r
+ */\r
+\r
+\r
+\r
#region Constants and Fields\r
\r
/// <summary>\r
}\r
}\r
\r
- /// <summary>\r
- /// Gets QueueJobs.\r
- /// </summary>\r
- public ObservableCollection<QueueTask> QueueJobs\r
- {\r
- get\r
- {\r
- return this.queueProcessor.Queue;\r
- }\r
- }\r
-\r
/// <summary>\r
/// Gets or sets WhenDoneAction.\r
/// </summary>\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Gets the queue tasks.\r
+ /// </summary>\r
+ public BindingList<QueueTask> QueueTasks\r
+ {\r
+ get\r
+ {\r
+ return this.queueProcessor.Queue;\r
+ }\r
+ }\r
+\r
#endregion\r
\r
#region Public Methods\r
{\r
this.queueProcessor.Remove(task);\r
}\r
-\r
- this.JobsPending = string.Format("{0} jobs pending", this.queueProcessor.Count);\r
}\r
\r
/// <summary>\r
private void EncodeService_EncodeStatusChanged(\r
object sender, EncodeProgressEventArgs e)\r
{\r
- this.JobStatus =\r
- string.Format(\r
- "Encoding: Pass {0} of {1}, {2:00.00}%, FPS: {3:000.0}, Avg FPS: {4:000.0}, Time Remaining: {5}, Elapsed: {6:hh\\:mm\\:ss}", \r
- e.Task, \r
- e.TaskCount, \r
- e.PercentComplete, \r
- e.CurrentFrameRate, \r
- e.AverageFrameRate, \r
- e.EstimatedTimeLeft, \r
- e.ElapsedTime);\r
+ if (this.IsEncoding)\r
+ {\r
+ this.JobStatus =\r
+ string.Format(\r
+ "Encoding: Pass {0} of {1}, {2:00.00}%, FPS: {3:000.0}, Avg FPS: {4:000.0}, Time Remaining: {5}, Elapsed: {6:hh\\:mm\\:ss}",\r
+ e.Task,\r
+ e.TaskCount,\r
+ e.PercentComplete,\r
+ e.CurrentFrameRate,\r
+ e.AverageFrameRate,\r
+ e.EstimatedTimeLeft,\r
+ e.ElapsedTime);\r
+ }\r
}\r
\r
/// <summary>\r
using HandBrake.Interop.Model.Encoding.x264;\r
\r
using HandBrakeWPF.Commands.Interfaces;\r
+ using HandBrakeWPF.Model;\r
using HandBrakeWPF.ViewModels.Interfaces;\r
\r
/// <summary>\r
/// </summary>\r
private bool canClear;\r
\r
+ /// <summary>\r
+ /// The use advanced tab.\r
+ /// </summary>\r
+ private bool useAdvancedTab;\r
+\r
#endregion\r
\r
#region Constructors and Destructors\r
H264Profiles = EnumHelper<x264Profile>.GetEnumList();\r
X264Tunes = EnumHelper<x264Tune>.GetEnumList().Where(t => t != x264Tune.Fastdecode);\r
this.H264Levels = Levels;\r
+\r
+ this.userSettingService.SettingChanged += this.UserSettingServiceSettingChanged;\r
}\r
\r
#endregion\r
/// </summary>\r
public EncodeTask Task { get; set; }\r
\r
+ /// <summary>\r
+ /// Gets a value indicating whether show advanced tab.\r
+ /// </summary>\r
+ public bool ShowAdvancedTab\r
+ {\r
+ get\r
+ {\r
+ bool showAdvTabSetting =\r
+ this.userSettingService.GetUserSetting<bool>(UserSettingConstants.ShowAdvancedTab);\r
+ if (!showAdvTabSetting)\r
+ {\r
+ this.UseAdvancedTab = false;\r
+ }\r
+\r
+ return showAdvTabSetting;\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Gets or sets a value indicating whether use video tab.\r
+ /// </summary>\r
+ public bool UseAdvancedTab\r
+ {\r
+ get\r
+ {\r
+ return this.useAdvancedTab;\r
+ }\r
+ set\r
+ {\r
+ if (!object.Equals(value, this.useAdvancedTab))\r
+ {\r
+ this.useAdvancedTab = value;\r
+ this.Task.ShowAdvancedTab = value;\r
+ this.NotifyOfPropertyChange(() => this.UseAdvancedTab);\r
+ }\r
+ }\r
+ }\r
+\r
/// <summary>\r
/// Gets Framerates.\r
/// </summary>\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Gets the rfqp.\r
+ /// </summary>\r
public string Rfqp\r
{\r
get\r
this.H264Level = preset.Task.VideoEncoder == VideoEncoder.X264 ? preset.Task.H264Level : "Auto";\r
this.FastDecode = preset.Task.VideoEncoder == VideoEncoder.X264 && preset.Task.FastDecode;\r
this.ExtraArguments = preset.Task.ExtraAdvancedArguments;\r
+\r
+ this.UseAdvancedTab = !string.IsNullOrEmpty(preset.Task.AdvancedEncoderOptions) && this.ShowAdvancedTab;\r
}\r
}\r
\r
// TODO figure out what is wrong with this??\r
return HandBrakeUtils.CreateX264OptionsString(preset, tunes, this.ExtraArguments, profile, this.H264Level, width, height);\r
}\r
+\r
+ /// <summary>\r
+ /// The user setting service_ setting changed.\r
+ /// </summary>\r
+ /// <param name="sender">\r
+ /// The sender.\r
+ /// </param>\r
+ /// <param name="e">\r
+ /// The e.\r
+ /// </param>\r
+ private void UserSettingServiceSettingChanged(object sender, HandBrake.ApplicationServices.EventArgs.SettingChangedEventArgs e)\r
+ {\r
+ if (e.Key == UserSettingConstants.ShowAdvancedTab)\r
+ {\r
+ this.NotifyOfPropertyChange(() => this.ShowAdvancedTab);\r
+ }\r
+ }\r
}\r
}
\ No newline at end of file
// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.\r
// </copyright>\r
// <summary>\r
-// Interaction logic for VideoView.xaml\r
+// Interaction logic for AddPresetView.xaml\r
// </summary>\r
// --------------------------------------------------------------------------------------------------------------------\r
\r
using System.Windows;\r
\r
/// <summary>\r
- /// Interaction logic for VideoView.xaml\r
+ /// Interaction logic for AddPresetView.xaml\r
/// </summary>\r
public partial class AddPresetView : Window\r
{\r
VerticalAlignment="Center"\r
FontWeight="Bold"\r
Text="x264 Encoder Options:"\r
- Visibility="{Binding DisplayX264Options, Converter={StaticResource BooleanVisibilityConverter}, ConverterParameter=false}"\r
+ Visibility="{Binding ShowX264AdvancedOptions, Converter={StaticResource BooleanVisibilityConverter}, ConverterParameter=false}"\r
/>\r
\r
<TextBox Grid.Row="3"\r
Text="{Binding AdvancedOptionsString,\r
UpdateSourceTrigger=PropertyChanged}"\r
TextWrapping="Wrap"\r
- Visibility="{Binding DisplayX264Options, Converter={StaticResource BooleanVisibilityConverter}, ConverterParameter=false}"\r
+ Visibility="{Binding ShowX264AdvancedOptions, Converter={StaticResource BooleanVisibilityConverter}, ConverterParameter=false}"\r
/>\r
\r
<StackPanel Orientation="Vertical">\r
</Grid>\r
\r
<!-- X264 -->\r
- <Grid Visibility="{Binding DisplayX264Options, Converter={StaticResource BooleanVisibilityConverter}, ConverterParameter=false}">\r
+ <TextBlock Text="{x:Static Properties:Resources.Advanced_NotInUse}"\r
+ TextWrapping="Wrap" Width="480" Margin="0, 100, 0, 0" FontSize="12"\r
+ Visibility="{Binding ShowX264AdvancedOptions, Converter={StaticResource BooleanVisibilityConverter}, ConverterParameter=true}" />\r
+ \r
+ <Grid Visibility="{Binding ShowX264AdvancedOptions, Converter={StaticResource BooleanVisibilityConverter}, ConverterParameter=false}">\r
<Grid.RowDefinitions>\r
<RowDefinition Height="Auto" />\r
<RowDefinition Height="*" />\r
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"\r
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"\r
xmlns:NumericUpDown="clr-namespace:EagleBoost.Wpf.Presentation.Controls.NumericUpDown;assembly=EagleBoost.Wpf.Presentation"\r
+ xmlns:controls="clr-namespace:HandBrakeWPF.Controls"\r
d:DesignHeight="170"\r
d:DesignWidth="616"\r
mc:Ignorable="d">\r
Visibility="{Binding IsPassthru,\r
Converter={StaticResource boolToVisConverter},\r
ConverterParameter=true}" />\r
+\r
<NumericUpDown:NumericUpDown Name="drcNumericCtl"\r
Grid.Row="1"\r
Grid.Column="3"\r
</ContextMenu>\r
</DataGrid.ContextMenu>\r
<DataGrid.Columns>\r
- <DataGridTextColumn Header="Chapter Number" Width="150" Binding="{Binding ChapterNumber}" IsReadOnly="True" />\r
+ <DataGridTextColumn Header="Chapter Number" Width="120" Binding="{Binding ChapterNumber}" IsReadOnly="True" />\r
+ <DataGridTextColumn Header="Duration" Width="100" Binding="{Binding Duration}" IsReadOnly="True" />\r
<DataGridTextColumn Header="Chapter Name" Width="*" Binding="{Binding ChapterName}" IsReadOnly="False" />\r
</DataGrid.Columns>\r
</DataGrid>\r
</StackPanel>\r
</MenuItem.Header>\r
<MenuItem Header="Add All" Micro:Message.Attach="[Event Click] = [Action AddAllToQueue]" />\r
+ <!--<MenuItem Header="Add Selection" Micro:Message.Attach="[Event Click] = [Action AddSelectionToQueue]" />-->\r
</MenuItem>\r
</Menu>\r
\r
Converter={StaticResource boolToVisConverter},\r
ConverterParameter=true}"\r
/>\r
- <TextBox Name="StartPointText"\r
- MinWidth="60"\r
- Margin="8,0,0,0"\r
- Text="{Binding SelectedStartPoint, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"\r
- Visibility="{Binding ShowTextEntryForPointToPointMode,\r
- Converter={StaticResource boolToVisConverter},\r
- ConverterParameter=false}"\r
- />\r
+ <Controls:TimeSpanBox Number="{Binding SelectedStartPoint, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"\r
+ Minimum="0" AllowEmpty="False" ShowTimeSpan="{Binding IsTimespanRange}"\r
+ MinWidth="80" Margin="8,0,0,0" Visibility="{Binding ShowTextEntryForPointToPointMode,\r
+ Converter={StaticResource boolToVisConverter},\r
+ ConverterParameter=false}"\r
+ />\r
+ \r
<Label Margin="8,0,0,0" Content="through" />\r
<ComboBox Name="EndPoint"\r
MinWidth="60"\r
Converter={StaticResource boolToVisConverter},\r
ConverterParameter=true}"\r
/>\r
- <TextBox Name="EndPointText"\r
- MinWidth="60"\r
- Margin="8,0,0,0"\r
- Text="{Binding SelectedEndPoint, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"\r
- Visibility="{Binding ShowTextEntryForPointToPointMode,\r
- Converter={StaticResource boolToVisConverter},\r
- ConverterParameter=false}"\r
- />\r
+ <Controls:TimeSpanBox Number="{Binding SelectedEndPoint, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"\r
+ Minimum="0" AllowEmpty="False" ShowTimeSpan="{Binding IsTimespanRange}"\r
+ MinWidth="80" Margin="8,0,0,0" Visibility="{Binding ShowTextEntryForPointToPointMode,\r
+ Converter={StaticResource boolToVisConverter},\r
+ ConverterParameter=false}"\r
+ />\r
+ \r
<Label Margin="8,0,0,0" Content="Duration" />\r
<Label Margin="8,0,0,0" Content="{Binding Duration}" />\r
</StackPanel>\r
--- /dev/null
+<Window x:Class="HandBrakeWPF.Views.QueueSelectionView"\r
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"\r
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"\r
+ xmlns:cal="http://www.caliburnproject.org"\r
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"\r
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"\r
+ Title="{Binding Title}"\r
+ Width="450"\r
+ MaxHeight="450"\r
+ SizeToContent="Height"\r
+ WindowStartupLocation="CenterScreen"\r
+ TextOptions.TextFormattingMode="Display"\r
+ mc:Ignorable="d">\r
+\r
+ <Window.Resources>\r
+\r
+ <Style x:Key="LongToolTipHolder" TargetType="FrameworkElement">\r
+ <Setter Property="ToolTipService.ShowDuration" Value="20000" />\r
+ <Setter Property="Margin" Value="0,2,0,2" />\r
+ </Style>\r
+ </Window.Resources>\r
+\r
+ <Grid HorizontalAlignment="Stretch"\r
+ VerticalAlignment="Stretch"\r
+ Background="#FFF1F0EF">\r
+ <Grid.RowDefinitions>\r
+ <RowDefinition Height="Auto" />\r
+ <RowDefinition Height="Auto" />\r
+ <RowDefinition Height="*" />\r
+ <RowDefinition Height="Auto" />\r
+ <RowDefinition Height="Auto" />\r
+ </Grid.RowDefinitions>\r
+\r
+ <!-- Header -->\r
+ <StackPanel Grid.Row="0"\r
+ Height="30"\r
+ Margin="0,0,0,10"\r
+ Background="White"\r
+ Orientation="Horizontal">\r
+ <Image Width="24"\r
+ Height="24"\r
+ Margin="10,0,5,0"\r
+ VerticalAlignment="Center"\r
+ Source="Images/AddToQueue_small.png" />\r
+ <StackPanel VerticalAlignment="Center" Orientation="Vertical">\r
+ <TextBlock FontWeight="Bold" Text="Queue Multiple Items" />\r
+ </StackPanel>\r
+ </StackPanel>\r
+\r
+ <!-- Text -->\r
+ <StackPanel Orientation="Vertical" Grid.Row="1" Margin="10,10,10,0">\r
+ <TextBlock Text="Select multiple titles to add: " />\r
+ </StackPanel>\r
+\r
+ <!-- Selection -->\r
+ <ListBox Grid.Row="2"\r
+ Margin="10,10,10,10"\r
+ VerticalAlignment="Stretch"\r
+ Background="LightGray"\r
+ ItemsSource="{Binding TitleList}"\r
+ SelectionMode="Single">\r
+ <ListBox.ItemContainerStyle>\r
+ <Style TargetType="ListBoxItem">\r
+ <Setter Property="HorizontalContentAlignment" Value="Stretch" />\r
+ <Setter Property="Background" Value="WhiteSmoke" />\r
+ <Setter Property="Margin" Value="0,0,0,1" />\r
+ </Style>\r
+ </ListBox.ItemContainerStyle>\r
+\r
+ <ListBox.ContextMenu>\r
+ <ContextMenu>\r
+ <MenuItem Header="Select All" cal:Message.Attach="[Event Click] = [Action SelectAll]" />\r
+ <MenuItem Header="Select All" cal:Message.Attach="[Event Click] = [Action UnSelectAll]" />\r
+ <Separator />\r
+ <MenuItem Header="Order by Title" IsChecked="{Binding OrderedByTitle}" cal:Message.Attach="[Event Click] = [Action OrderByTitle]" />\r
+ <MenuItem Header="Order by Duration" IsChecked="{Binding OrderedByDuration}" cal:Message.Attach="[Event Click] = [Action OrderByDuration]" />\r
+ </ContextMenu>\r
+ </ListBox.ContextMenu>\r
+\r
+ <ListBox.ItemTemplate>\r
+ <DataTemplate>\r
+ <Grid HorizontalAlignment="Stretch" MinHeight="28">\r
+ <Grid.RowDefinitions>\r
+ <RowDefinition Height="Auto" />\r
+ <RowDefinition Height="Auto" />\r
+ </Grid.RowDefinitions>\r
+ <Grid.ColumnDefinitions>\r
+ <ColumnDefinition Width="Auto" />\r
+ <ColumnDefinition Width="*" />\r
+ <ColumnDefinition Width="Auto" />\r
+ </Grid.ColumnDefinitions>\r
+ \r
+ <CheckBox IsChecked="{Binding IsSelected}" Grid.RowSpan="2" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" />\r
+\r
+ <StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal" Margin="10,0,0,0" > \r
+ <TextBlock Text="Title:" Margin="0,0,5,0" FontWeight="Bold" />\r
+ <TextBlock Text="{Binding Title}" Margin="5,0,5,0" />\r
+ </StackPanel>\r
+\r
+ <StackPanel Grid.Row="1" Grid.Column="1" Orientation="Horizontal" Margin="10,0,0,0" >\r
+ <TextBlock Text="Source:" Margin="0,0,5,0" FontWeight="Bold" />\r
+ <TextBlock Text="{Binding SourceName}" Margin="5,0,5,0" />\r
+ </StackPanel>\r
+ </Grid>\r
+\r
+ </DataTemplate>\r
+ </ListBox.ItemTemplate>\r
+ </ListBox>\r
+\r
+ <!-- Checlist -->\r
+ <StackPanel Orientation="Vertical" Grid.Row="3" Margin="10,10,10,0">\r
+ <TextBlock Text="Checklist " />\r
+ </StackPanel>\r
+\r
+ <!-- Controls -->\r
+ <Grid Grid.Row="4"\r
+ Margin="0,20,0,0"\r
+ Background="LightGray">\r
+ <Grid.ColumnDefinitions>\r
+ <ColumnDefinition Width="*" />\r
+ <ColumnDefinition Width="Auto" />\r
+ <ColumnDefinition Width="Auto" />\r
+ </Grid.ColumnDefinitions>\r
+\r
+ <Button Grid.Column="1"\r
+ Margin="0,5,10,5"\r
+ cal:Message.Attach="[Event Click] = [Action Cancel]"\r
+ Content="Cancel"\r
+ IsCancel="True"\r
+ Padding="8,2" />\r
+ <Button Grid.Column="2"\r
+ Margin="0,5,10,5"\r
+ cal:Message.Attach="[Event Click] = [Action Add]"\r
+ Content="Add"\r
+ IsDefault="True"\r
+ Padding="8,2" />\r
+ </Grid>\r
+\r
+ </Grid>\r
+</Window>\r
--- /dev/null
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="QueueSelectionView.xaml.cs" company="HandBrake Project (http://handbrake.fr)">\r
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.\r
+// </copyright>\r
+// <summary>\r
+// Interaction logic for QueueSelectionView.xaml\r
+// </summary>\r
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrakeWPF.Views\r
+{\r
+ using System.Windows;\r
+\r
+ /// <summary>\r
+ /// Interaction logic for QueueSelectionView.xaml\r
+ /// </summary>\r
+ public partial class QueueSelectionView : Window\r
+ {\r
+ /// <summary>\r
+ /// Initializes a new instance of the <see cref="QueueSelectionView"/> class.\r
+ /// </summary>\r
+ public QueueSelectionView()\r
+ {\r
+ InitializeComponent();\r
+ }\r
+ }\r
+}\r
<TextBlock Text="{Binding JobsPending}" />\r
<TextBlock Text="{Binding JobStatus}" />\r
</StackPanel>\r
-\r
+ \r
<ListBox Grid.Row="2"\r
Margin="10,0,10,10"\r
Background="LightGray"\r
dd:DragDrop.DropHandler="{Binding}"\r
dd:DragDrop.IsDragSource="True"\r
dd:DragDrop.IsDropTarget="True"\r
- ItemsSource="{Binding QueueJobs}"\r
- SelectedItem="{Binding SelectedJob}"\r
+ ItemsSource="{Binding QueueTasks, Mode=OneWay}"\r
SelectionMode="Extended">\r
\r
<ListBox.ContextMenu>\r
\r
<Grid.RowDefinitions>\r
<RowDefinition Height="Auto" />\r
- <RowDefinition Height="Auto" />\r
</Grid.RowDefinitions>\r
\r
<Grid.ColumnDefinitions>\r
<ColumnDefinition Width="Auto" />\r
<ColumnDefinition Width="Auto" />\r
+ <ColumnDefinition Width="Auto" />\r
</Grid.ColumnDefinitions>\r
\r
- <Image Width="20" Grid.Row="0" Grid.Column="0" Grid.RowSpan="2"\r
- Height="20" VerticalAlignment="Center" Margin="0,0,5,0"\r
+ <Image Width="20" Grid.Row="0" Grid.Column="0"\r
+ Height="20" VerticalAlignment="Center" Margin="0,5,0,0"\r
Source="Images/Refresh.ico"\r
ToolTip="Reset job status to Waiting."\r
Visibility="{Binding Status,\r
\r
<Image Width="20" Grid.Row="0" Grid.Column="1"\r
Height="20"\r
- Margin="0,5,0,0"\r
+ Margin="10,5,0,0"\r
Source="Images/Options24.png"\r
ToolTip="Edit this Job">\r
<i:Interaction.Triggers>\r
</i:Interaction.Triggers>\r
</Image>\r
\r
- <Image Width="20" Grid.Row="1" Grid.Column="1"\r
+ <Image Width="20" Grid.Row="0" Grid.Column="2"\r
Height="20"\r
- Margin="0,5,0,0"\r
+ Margin="10,5,0,0"\r
Source="Images/delete.png"\r
ToolTip="Remove this Job">\r
<i:Interaction.Triggers>\r
\r
</Grid>\r
\r
-\r
-\r
</Grid>\r
-\r
-\r
</DataTemplate>\r
</ListBox.ItemTemplate>\r
</ListBox>\r
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"\r
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"\r
xmlns:NumericUpDown="clr-namespace:EagleBoost.Wpf.Presentation.Controls.NumericUpDown;assembly=EagleBoost.Wpf.Presentation"\r
+ xmlns:controls="clr-namespace:HandBrakeWPF.Controls"\r
d:DesignHeight="153"\r
d:DesignWidth="319"\r
mc:Ignorable="d">\r
VerticalAlignment="Center"\r
FontWeight="Bold"\r
Text="Offset (ms)" />\r
- <NumericUpDown:NumericUpDown Grid.Row="1"\r
- Grid.Column="5"\r
- Width="65"\r
- Margin="5,0,5,0"\r
- HorizontalAlignment="Left"\r
- IsEnabled="{Binding IsSrtSubtitle}"\r
- Minimum="-10800"\r
- Value="{Binding SrtOffset, Mode=TwoWay}" />\r
\r
+ <controls:NumberBox Grid.Row="1" Grid.Column="5" Width="65" Height="24" Margin="5,0,5,0"\r
+ Minimum="-900000" Maximum="900000" IsEnabled="{Binding IsSrtSubtitle}"\r
+ Number="{Binding SrtOffset, Mode=TwoWay}" />\r
+ \r
</Grid>\r
\r
<!-- Delete -->\r
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"\r
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"\r
xmlns:NumericUpDown="clr-namespace:EagleBoost.Wpf.Presentation.Controls.NumericUpDown;assembly=EagleBoost.Wpf.Presentation"\r
+ xmlns:controls="clr-namespace:HandBrakeWPF.Controls"\r
Title="Scan Title"\r
Width="250"\r
Background="#FFF1F0EF"\r
Margin="10,10,0,10"\r
Orientation="Horizontal">\r
<TextBlock Text="Choose a title to scan:" />\r
- <NumericUpDown:NumericUpDown Width="60"\r
- Margin="10,0,0,0"\r
- Maximum="1000"\r
- Minimum="0"\r
- Value="{Binding SelectedTitle,\r
- Mode=TwoWay}" />\r
+\r
+ <controls:NumberBox Width="60" Height="24" Margin="10,0,0,0"\r
+ Minimum="0" Maximum="1000" Number="{Binding SelectedTitle, Mode=TwoWay}" />\r
</StackPanel>\r
\r
<StackPanel Grid.Row="2"\r
<Converters:BooleanConverter x:Key="boolConverter" />\r
<Converters:BooleanToVisibilityConverter x:Key="boolToVisConverter" />\r
<Converters:EnumComboConverter x:Key="enumComboConverter" />\r
+ <Converters:InverseBooleanConverter x:Key="inverseConverter" />\r
<Video:VideoEncoderConverter x:Key="videoEncoderConverter" />\r
-\r
+ \r
<Style x:Key="LongToolTipHolder" TargetType="FrameworkElement">\r
<Setter Property="ToolTipService.ShowDuration" Value="20000" />\r
</Style>\r
<!-- H264 settings -->\r
<Grid Grid.Row="1" Grid.ColumnSpan="2" Margin="0,20,0,0" Visibility="{Binding DisplayX264Options, Converter={StaticResource boolToVisConverter}}">\r
<Grid.RowDefinitions>\r
- <RowDefinition Height="Auto" />\r
- <RowDefinition Height="Auto" />\r
- <RowDefinition Height="Auto" />\r
<RowDefinition Height="Auto" />\r
<RowDefinition Height="Auto" />\r
<RowDefinition Height="*" />\r
</Grid.RowDefinitions>\r
- \r
- <Grid.ColumnDefinitions>\r
- <ColumnDefinition Width="Auto" />\r
- <ColumnDefinition Width="Auto" />\r
- <ColumnDefinition Width="Auto" />\r
- <ColumnDefinition Width="Auto" />\r
- </Grid.ColumnDefinitions>\r
-\r
- <TextBlock Text="Optimise Video:" Margin="0,0,0,8" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" FontWeight="Bold" VerticalAlignment="Center" />\r
-\r
- <!-- Row 1 -->\r
- <TextBlock Text="x264 Preset:" Grid.Row="1" Grid.Column="0" VerticalAlignment="Center" />\r
- <StackPanel Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="3" Orientation="Horizontal">\r
- <Slider Minimum="0" Maximum="9" Width="150" Value="{Binding X264PresetValue, Mode=Default, UpdateSourceTrigger=PropertyChanged}" \r
+\r
+ <TextBlock Text="Optimise Video:" Margin="0,0,0,8" Grid.Row="0" Grid.ColumnSpan="2" FontWeight="Bold" VerticalAlignment="Center" />\r
+\r
+ <CheckBox Content="Use Advanced Tab instead" Grid.Row="1" IsChecked="{Binding UseAdvancedTab}" \r
+ Visibility="{Binding ShowAdvancedTab, Converter={StaticResource boolToVisConverter}, ConverterParameter=false}" />\r
+\r
+ <Grid Grid.Row="2" Margin="0,5,0,0" IsEnabled="{Binding UseAdvancedTab, Converter={StaticResource inverseConverter}}"\r
+ Visibility="{Binding DisplayX264Options, Converter={StaticResource boolToVisConverter}}">\r
+ <Grid.RowDefinitions>\r
+ <RowDefinition Height="Auto" />\r
+ <RowDefinition Height="Auto" />\r
+ <RowDefinition Height="Auto" />\r
+ <RowDefinition Height="Auto" />\r
+ <RowDefinition Height="Auto" />\r
+ <RowDefinition Height="*" />\r
+ </Grid.RowDefinitions>\r
+\r
+ <Grid.ColumnDefinitions>\r
+ <ColumnDefinition Width="Auto" />\r
+ <ColumnDefinition Width="Auto" />\r
+ <ColumnDefinition Width="Auto" />\r
+ <ColumnDefinition Width="Auto" />\r
+ </Grid.ColumnDefinitions>\r
+\r
+\r
+\r
+ <!-- Row 1 -->\r
+ <TextBlock Text="x264 Preset:" Grid.Row="1" Grid.Column="0" VerticalAlignment="Center" />\r
+ <StackPanel Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="3" Orientation="Horizontal">\r
+ <Slider Minimum="0" Maximum="9" Width="150" Value="{Binding X264PresetValue, Mode=Default, UpdateSourceTrigger=PropertyChanged}" \r
IsSnapToTickEnabled="True" TickFrequency="1" TickPlacement="BottomRight" ToolTip="{x:Static Properties:Resources.Video_x264Preset}" \r
Style="{StaticResource LongToolTipHolder}" />\r
- <TextBlock Text="{Binding X264Preset, Converter={StaticResource enumComboConverter}}" Margin="5,0,0,0" />\r
- </StackPanel>\r
+ <TextBlock Text="{Binding X264Preset, Converter={StaticResource enumComboConverter}}" Margin="5,0,0,0" />\r
+ </StackPanel>\r
\r
- <TextBlock Text="x264 Tune:" Grid.Row="2" Grid.Column="0" VerticalAlignment="Center" Margin="0,10,0,0" />\r
- <ComboBox Width="100" Grid.Row="2" Grid.Column="1" Margin="5,10,5,0" Height="22"\r
+ <TextBlock Text="x264 Tune:" Grid.Row="2" Grid.Column="0" VerticalAlignment="Center" Margin="0,10,0,0" />\r
+ <ComboBox Width="100" Grid.Row="2" Grid.Column="1" Margin="5,10,5,0" Height="22"\r
ItemsSource="{Binding X264Tunes, Converter={StaticResource enumComboConverter}}" \r
SelectedItem="{Binding X264Tune, Converter={StaticResource enumComboConverter}}"\r
ToolTip="{x:Static Properties:Resources.Video_x264Tune}"\r
Style="{StaticResource LongToolTipHolder}" />\r
- <CheckBox IsChecked="{Binding FastDecode}" Content="Fast Decode" Grid.Row="2" Grid.Column="2" Margin="10,10,10,0" VerticalAlignment="Center"\r
+ <CheckBox IsChecked="{Binding FastDecode}" Content="Fast Decode" Grid.Row="2" Grid.Column="2" Margin="10,10,10,0" VerticalAlignment="Center"\r
ToolTip="{x:Static Properties:Resources.Video_x264FastDecode}"/>\r
- \r
\r
- <!-- Row 2-->\r
- <TextBlock Text="H.264 Profile:" Grid.Row="3" Grid.Column="0" Margin="0,10,0,0" VerticalAlignment="Center" />\r
- <ComboBox Width="100" Grid.Row="3" Grid.Column="1" Margin="5,10,5,0" Height="22" VerticalAlignment="Center"\r
+\r
+ <!-- Row 2-->\r
+ <TextBlock Text="H.264 Profile:" Grid.Row="3" Grid.Column="0" Margin="0,10,0,0" VerticalAlignment="Center" />\r
+ <ComboBox Width="100" Grid.Row="3" Grid.Column="1" Margin="5,10,5,0" Height="22" VerticalAlignment="Center"\r
ItemsSource="{Binding H264Profiles, Converter={StaticResource enumComboConverter}}" \r
SelectedItem="{Binding H264Profile, Converter={StaticResource enumComboConverter}}"\r
Style="{StaticResource LongToolTipHolder}"\r
ToolTip="{x:Static Properties:Resources.Video_x264Profile}" />\r
\r
- <TextBlock Text="H.264 Level:" Grid.Row="3" Grid.Column="2" Margin="10,10,0,0" VerticalAlignment="Center" />\r
- <ComboBox Width="100" Grid.Row="3" Grid.Column="3" Margin="5,10,5,0" Height="22" VerticalAlignment="Center"\r
+ <TextBlock Text="H.264 Level:" Grid.Row="3" Grid.Column="2" Margin="10,10,0,0" VerticalAlignment="Center" />\r
+ <ComboBox Width="100" Grid.Row="3" Grid.Column="3" Margin="5,10,5,0" Height="22" VerticalAlignment="Center"\r
ItemsSource="{Binding H264Levels}" \r
SelectedItem="{Binding H264Level}"\r
Style="{StaticResource LongToolTipHolder}"\r
ToolTip="{x:Static Properties:Resources.Video_x264Level}"/>\r
- \r
- <!-- Row 3 -->\r
- <TextBlock Text="Extra Options:" Grid.Row="4" Grid.Column="0" Margin="0,10,0,0" VerticalAlignment="Center" HorizontalAlignment="Left" />\r
- <TextBox Text="{Binding ExtraArguments, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"\r
+\r
+ <!-- Row 3 -->\r
+ <TextBlock Text="Extra Options:" Grid.Row="4" Grid.Column="0" Margin="0,10,0,0" VerticalAlignment="Center" HorizontalAlignment="Left" />\r
+ <TextBox Text="{Binding ExtraArguments, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"\r
Height="30" MaxLines="2" Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="3" Margin="5,10,0,0" VerticalAlignment="Center"\r
ToolTip="{Binding FullOptionsTooltip}"/>\r
- \r
- \r
+\r
+\r
+ </Grid>\r
</Grid>\r
+ \r
+ \r
</Grid>\r
\r
</Grid>\r
<anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" d4p1:type="q1:boolean" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">true</anyType>\r
</value>\r
</item>\r
+ <item>\r
+ <key>\r
+ <string>LastPreviewDuration</string>\r
+ </key>\r
+ <value>\r
+ <anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" d4p1:type="q1:int" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">30</anyType>\r
+ </value>\r
+ </item>\r
</dictionary>
\ No newline at end of file
<name>GongSolutions.Wpf.DragDrop</name>\r
</assembly>\r
<members>\r
+ <member name="T:GongSolutions.Wpf.DragDrop.IDropTarget">\r
+ <summary>\r
+ Interface implemented by Drop Handlers.\r
+ </summary>\r
+ </member>\r
+ <member name="M:GongSolutions.Wpf.DragDrop.IDropTarget.DragOver(GongSolutions.Wpf.DragDrop.IDropInfo)">\r
+ <summary>\r
+ Updates the current drag state.\r
+ </summary>\r
+ \r
+ <param name="dropInfo">\r
+ Information about the drag.\r
+ </param>\r
+ \r
+ <remarks>\r
+ To allow a drop at the current drag position, the <see cref="P:GongSolutions.Wpf.DragDrop.DropInfo.Effects"/> property on \r
+ <paramref name="dropInfo"/> should be set to a value other than <see cref="F:System.Windows.DragDropEffects.None"/>\r
+ and <see cref="P:GongSolutions.Wpf.DragDrop.DropInfo.Data"/> should be set to a non-null value.\r
+ </remarks>\r
+ </member>\r
+ <member name="M:GongSolutions.Wpf.DragDrop.IDropTarget.Drop(GongSolutions.Wpf.DragDrop.IDropInfo)">\r
+ <summary>\r
+ Performs a drop.\r
+ </summary>\r
+ \r
+ <param name="dropInfo">\r
+ Information about the drop.\r
+ </param>\r
+ </member>\r
<member name="P:GongSolutions.Wpf.DragDrop.IDropInfo.Data">\r
<summary>\r
Gets the drag data.\r
Gets th orientation of the current drop target.\r
</summary>\r
</member>\r
- <member name="T:GongSolutions.Wpf.DragDrop.IDropTarget">\r
+ <member name="T:GongSolutions.Wpf.DragDrop.IDragSource">\r
<summary>\r
- Interface implemented by Drop Handlers.\r
+ Interface implemented by Drag Handlers.\r
</summary>\r
</member>\r
- <member name="M:GongSolutions.Wpf.DragDrop.IDropTarget.DragOver(GongSolutions.Wpf.DragDrop.IDropInfo)">\r
+ <member name="M:GongSolutions.Wpf.DragDrop.IDragSource.StartDrag(GongSolutions.Wpf.DragDrop.IDragInfo)">\r
<summary>\r
- Updates the current drag state.\r
+ Queries whether a drag can be started.\r
</summary>\r
\r
- <param name="dropInfo">\r
- Information about the drag.\r
+ <param name="dragInfo">\r
+ Information about the drag.\r
</param>\r
\r
<remarks>\r
- To allow a drop at the current drag position, the <see cref="P:GongSolutions.Wpf.DragDrop.DropInfo.Effects"/> property on \r
- <paramref name="dropInfo"/> should be set to a value other than <see cref="F:System.Windows.DragDropEffects.None"/>\r
- and <see cref="P:GongSolutions.Wpf.DragDrop.DropInfo.Data"/> should be set to a non-null value.\r
+ To allow a drag to be started, the <see cref="P:GongSolutions.Wpf.DragDrop.DragInfo.Effects"/> property on <paramref name="dragInfo"/> \r
+ should be set to a value other than <see cref="!:DragDropEffects.None"/>. \r
</remarks>\r
</member>\r
- <member name="M:GongSolutions.Wpf.DragDrop.IDropTarget.Drop(GongSolutions.Wpf.DragDrop.IDropInfo)">\r
+ <member name="M:GongSolutions.Wpf.DragDrop.IDragSource.Dropped(GongSolutions.Wpf.DragDrop.IDropInfo)">\r
<summary>\r
- Performs a drop.\r
+ Notifies the drag handler that a drop has occurred.\r
</summary>\r
\r
<param name="dropInfo">\r
will hold a ListBoxItem.\r
</remarks>\r
</member>\r
- <member name="T:GongSolutions.Wpf.DragDrop.IDragSource">\r
- <summary>\r
- Interface implemented by Drag Handlers.\r
- </summary>\r
- </member>\r
- <member name="M:GongSolutions.Wpf.DragDrop.IDragSource.StartDrag(GongSolutions.Wpf.DragDrop.IDragInfo)">\r
- <summary>\r
- Queries whether a drag can be started.\r
- </summary>\r
- \r
- <param name="dragInfo">\r
- Information about the drag.\r
- </param>\r
- \r
- <remarks>\r
- To allow a drag to be started, the <see cref="P:GongSolutions.Wpf.DragDrop.DragInfo.Effects"/> property on <paramref name="dragInfo"/> \r
- should be set to a value other than <see cref="!:DragDropEffects.None"/>. \r
- </remarks>\r
- </member>\r
- <member name="M:GongSolutions.Wpf.DragDrop.IDragSource.Dropped(GongSolutions.Wpf.DragDrop.IDropInfo)">\r
- <summary>\r
- Notifies the drag handler that a drop has occurred.\r
- </summary>\r
- \r
- <param name="dropInfo">\r
- Information about the drop.\r
- </param>\r
- </member>\r
</members>\r
</doc>\r