]> granicus.if.org Git - handbrake/commitdiff
QSV: Merging Trunk
authorsr55 <sr55.hb@outlook.com>
Mon, 24 Jun 2013 18:59:35 +0000 (18:59 +0000)
committersr55 <sr55.hb@outlook.com>
Mon, 24 Jun 2013 18:59:35 +0000 (18:59 +0000)
git-svn-id: svn://svn.handbrake.fr/HandBrake/branches/qsv@5607 b64f7644-9d1e-0410-96f1-a4d463321fa5

74 files changed:
contrib/ffmpeg/A04-aacenc.patch [new file with mode: 0644]
contrib/x264/A00-version-string.patch
contrib/x264/module.defs
gtk/configure.ac
gtk/module.defs
gtk/src/audiohandler.c
gtk/src/callbacks.c
gtk/src/makedeps.py
gtk/src/presets.c
gtk/src/standard_presets.xml
libhb/common.c
libhb/dvd.c
libhb/dvdnav.c
libhb/encfaac.c
libhb/hb.c
libhb/module.defs
libhb/sync.c
macosx/English.lproj/Preferences.xib
macosx/HBAudioController.m
macosx/HBPreferencesController.m
macosx/HBPresets.m
macosx/HandBrake.xcodeproj/project.pbxproj
macosx/module.defs
make/configure.py
make/include/main.defs
scripts/manicure.rb
test/module.defs
test/test.c
win/CS/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj
win/CS/HandBrake.ApplicationServices/LibHb/AudioVideoHelpers.cs [new file with mode: 0644]
win/CS/HandBrake.ApplicationServices/Model/Encoding/AudioTrack.cs
win/CS/HandBrake.ApplicationServices/Services/Interfaces/IPresetService.cs
win/CS/HandBrake.ApplicationServices/Services/PresetService.cs
win/CS/HandBrake.ApplicationServices/Utilities/Converters.cs
win/CS/HandBrake.ApplicationServices/Utilities/EnumHelper.cs
win/CS/HandBrake.Interop/HandBrakeInterop/Attributes/ShortName.cs [new file with mode: 0644]
win/CS/HandBrake.Interop/HandBrakeInterop/Converters.cs
win/CS/HandBrake.Interop/HandBrakeInterop/HandBrakeInstance.cs
win/CS/HandBrake.Interop/HandBrakeInterop/HandBrakeInterop.csproj
win/CS/HandBrake.Interop/HandBrakeInterop/HandBrakeUtils.cs
win/CS/HandBrake.Interop/HandBrakeInterop/HbLib/HbFunctions.cs
win/CS/HandBrake.Interop/HandBrakeInterop/HbLib/Misc.cs
win/CS/HandBrake.Interop/HandBrakeInterop/HbLib/NativeConstants.cs
win/CS/HandBrake.Interop/HandBrakeInterop/HbLib/hb_job_s.cs
win/CS/HandBrake.Interop/HandBrakeInterop/InteropUtilities.cs
win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoders.cs
win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/AudioEncoder.cs
win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/HBRate.cs [new file with mode: 0644]
win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/VideoEncoder.cs
win/CS/HandBrake.Interop/HandBrakeInterop/Properties/AssemblyInfo.cs
win/CS/HandBrake.Interop/HandBrakeInterop/SourceData/AudioCodec.cs
win/CS/HandBrakeWPF/Commands/SourceMenuCommand.cs
win/CS/HandBrakeWPF/Converters/Audio/AudioBitrateConverter.cs
win/CS/HandBrakeWPF/Converters/Audio/AudioEncoderConverter.cs
win/CS/HandBrakeWPF/HandBrakeWPF.csproj
win/CS/HandBrakeWPF/Helpers/AppStyleHelper.cs [new file with mode: 0644]
win/CS/HandBrakeWPF/Model/SourceMenuItem.cs
win/CS/HandBrakeWPF/UserSettingConstants.cs
win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs
win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs
win/CS/HandBrakeWPF/ViewModels/ShellViewModel.cs
win/CS/HandBrakeWPF/ViewModels/VideoViewModel.cs
win/CS/HandBrakeWPF/ViewModels/ViewModelBase.cs
win/CS/HandBrakeWPF/Views/AudioView.xaml
win/CS/HandBrakeWPF/Views/MainView.xaml
win/CS/HandBrakeWPF/Views/OptionsView.xaml
win/CS/HandBrakeWPF/Views/QueueView.xaml
win/CS/HandBrakeWPF/Views/ShellView.xaml
win/CS/HandBrakeWPF/Views/Styles/Styles.xaml
win/CS/HandBrakeWPF/Views/SubtitlesView.xaml
win/CS/HandBrakeWPF/defaultsettings.xml
win/CS/libraries/WPFDragDrop/GongSolutions.Wpf.DragDrop.XML
win/CS/libraries/WPFDragDrop/GongSolutions.Wpf.DragDrop.dll
win/CS/libraries/WPFDragDrop/GongSolutions.Wpf.DragDrop.pdb

diff --git a/contrib/ffmpeg/A04-aacenc.patch b/contrib/ffmpeg/A04-aacenc.patch
new file mode 100644 (file)
index 0000000..b58441a
--- /dev/null
@@ -0,0 +1,82 @@
+commit 8bbdd20a293eab2cfac9f332613ead02a4e3c0c2
+Author: Claudio Freire <klaussfreire@gmail.com>
+Date:   Sun May 12 09:38:40 2013 +0200
+
+    aacenc: Fix erasure of surround channels
+    
+    This was due to a miscomputation of s->cur_channel, which led to
+    psy-based encoders using the psy coefficients for the wrong channel.
+    
+    Signed-off-by: Martin Storsjö <martin@martin.st>
+
+diff --git a/libavcodec/aacenc.c b/libavcodec/aacenc.c
+index 60eca59..b2ad47b 100644
+--- a/libavcodec/aacenc.c
++++ b/libavcodec/aacenc.c
+@@ -597,7 +597,7 @@ static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
+                 coeffs[ch] = cpe->ch[ch].coeffs;
+             s->psy.model->analyze(&s->psy, start_ch, coeffs, wi);
+             for (ch = 0; ch < chans; ch++) {
+-                s->cur_channel = start_ch * 2 + ch;
++                s->cur_channel = start_ch + ch;
+                 s->coder->search_for_quantizers(avctx, s, &cpe->ch[ch], s->lambda);
+             }
+             cpe->common_window = 0;
+@@ -613,7 +613,7 @@ static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
+                     }
+                 }
+             }
+-            s->cur_channel = start_ch * 2;
++            s->cur_channel = start_ch;
+             if (s->options.stereo_mode && cpe->common_window) {
+                 if (s->options.stereo_mode > 0) {
+                     IndividualChannelStream *ics = &cpe->ch[0].ics;
+
+commit f4d0a63b5b5c682c18df3bba730f97a9067408ba
+Author: Claudio Freire <klaussfreire@gmail.com>
+Date:   Sat May 4 18:36:37 2013 -0300
+
+    aacenc: Fix target bitrate for twoloop quantiser search
+    
+    This fixes a case where multichannel bitrate isn't accurately
+    targetted by psy model alone, never achieving the target bitrate.
+    
+    Signed-off-by: Martin Storsjö <martin@martin.st>
+
+diff --git a/libavcodec/aaccoder.c b/libavcodec/aaccoder.c
+index d65d8d9..35b98a9 100644
+--- a/libavcodec/aaccoder.c
++++ b/libavcodec/aaccoder.c
+@@ -710,7 +710,7 @@ static void search_for_quantizers_twoloop(AVCodecContext *avctx,
+                                           const float lambda)
+ {
+     int start = 0, i, w, w2, g;
+-    int destbits = avctx->bit_rate * 1024.0 / avctx->sample_rate / avctx->channels;
++    int destbits = avctx->bit_rate * 1024.0 / avctx->sample_rate / avctx->channels * (lambda / 120.f);
+     float dists[128] = { 0 }, uplims[128];
+     float maxvals[128];
+     int fflag, minscaler;
+
+commit 7c71ada4cad3c6aab5fa24155c379465c41cfd76
+Author: Claudio Freire <klaussfreire@gmail.com>
+Date:   Sat May 4 18:35:49 2013 -0300
+
+    aacenc: Fix a rounding bug in aacpsy channel bitrate computation
+    
+    Signed-off-by: Martin Storsjö <martin@martin.st>
+
+diff --git a/libavcodec/aacpsy.c b/libavcodec/aacpsy.c
+index 6f1ac05..66cf6d5 100644
+--- a/libavcodec/aacpsy.c
++++ b/libavcodec/aacpsy.c
+@@ -312,7 +312,7 @@ static av_cold int psy_3gpp_init(FFPsyContext *ctx) {
+         AacPsyCoeffs *coeffs = pctx->psy_coef[j];
+         const uint8_t *band_sizes = ctx->bands[j];
+         float line_to_frequency = ctx->avctx->sample_rate / (j ? 256.f : 2048.0f);
+-        float avg_chan_bits = chan_bitrate / ctx->avctx->sample_rate * (j ? 128.0f : 1024.0f);
++        float avg_chan_bits = chan_bitrate * (j ? 128.0f : 1024.0f) / ctx->avctx->sample_rate;
+         /* reference encoder uses 2.4% here instead of 60% like the spec says */
+         float bark_pe = 0.024f * PSY_3GPP_BITS_TO_PE(avg_chan_bits) / num_bark;
+         float en_spread_low = j ? PSY_3GPP_EN_SPREAD_LOW_S : PSY_3GPP_EN_SPREAD_LOW_L;
+
+
index dcd4ec62806b217bff8c2518d61ccb2e99b98e5f..49a65225608a068b2d80cfb1ea2999498db24960 100644 (file)
@@ -6,7 +6,7 @@ index e5a1600..f635d9e 100644
  
  #include "x264_config.h"
  
--#define X264_BUILD 130
+-#define X264_BUILD 133
 +/*
 + * Define the full version explicitly so that it survives a git --archive.
 + *
@@ -16,8 +16,8 @@ index e5a1600..f635d9e 100644
 +#ifdef  X264_VERSION
 +#undef  X264_VERSION
 +#endif
-+#define X264_BUILD       130
-+#define X264_VERSION " r2273 b3065e6"
++#define X264_BUILD       133
++#define X264_VERSION " r2334 a3ac64b"
  
  /* Application developers planning to link against a shared library version of
   * libx264 from a Microsoft Visual Studio or similar development environment
index 097f88d42324aa88b92ab3b08cc1df17b30f4022..458a6cddf686320cf2b33f674a7a18510e681b2d 100644 (file)
@@ -1,7 +1,7 @@
 $(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-r2273-b3065e6.tar.gz
+X264.FETCH.url = http://download.handbrake.fr/handbrake/contrib/x264-r2334-a3ac64b.tar.gz
 X264.EXTRACT.tarbase = x264
 
 X264.CONFIGURE.deps   =
@@ -9,7 +9,7 @@ X264.CONFIGURE.shared =
 X264.CONFIGURE.static =
 
 X264.CONFIGURE.extra = --disable-cli --enable-static --enable-strip
-X264.CONFIGURE.extra += --disable-gpac --disable-avs --disable-lavf --disable-ffms --disable-swscale
+X264.CONFIGURE.extra += --disable-gpac --disable-avs --disable-lavf --disable-ffms --disable-swscale --disable-opencl
 
 ifeq (1-mingw,$(BUILD.cross)-$(BUILD.system))
     X264.CONFIGURE.extra += --cross-prefix=$(BUILD.spec)-
index 6d013f935fb2d273537a4568135094e4359a7a47..64aa72744142c9c678759c7264c97f8af9a124a7 100644 (file)
@@ -60,6 +60,10 @@ AC_ARG_ENABLE(fdk-aac,
        AS_HELP_STRING([--enable-fdk-aac], [enable fdk aac encoder]),
        use_fdk_aac=yes, use_fdk_aac=no)
 
+AC_ARG_ENABLE(faac,
+       AS_HELP_STRING([--enable-faac], [enable faac encoder]),
+       use_faac=yes, use_faac=no)
+
 AC_ARG_ENABLE(gst,
        AS_HELP_STRING([--disable-gst], [disable gstreamer (live preview)]),
        gst_disable=yes, gst_disable=no)
@@ -203,12 +207,16 @@ case $host in
     ;;
 esac
 
-HB_LIBS="-lhb -la52 -lmkv -lavresample -lavformat -lavcodec -lavutil -ldvdnav -ldvdread -lfaac -lmp3lame -lmpeg2 -lvorbis -lvorbisenc -logg -lsamplerate -lx264 -lmp4v2 -lswscale -ltheoraenc -ltheoradec -lz -lbz2 -lpthread -lbluray -lass -lfontconfig -lfreetype -lxml2"
+HB_LIBS="-lhb -la52 -lmkv -lavresample -lavformat -lavcodec -lavutil -ldvdnav -ldvdread -lmp3lame -lmpeg2 -lvorbis -lvorbisenc -logg -lsamplerate -lx264 -lmp4v2 -lswscale -ltheoraenc -ltheoradec -lz -lbz2 -lpthread -lbluray -lass -lfontconfig -lfreetype -lxml2"
 
 if test "x$use_fdk_aac" = "xyes" ; then
     HB_LIBS+=" -lfdk-aac"
 fi
 
+if test "x$use_faac" = "xyes" ; then
+    HB_LIBS+=" -lfaac"
+fi
+
 AC_SUBST(HB_LIBS)
 AC_SUBST(GHB_TOOLS_CFLAGS)
 AC_SUBST(GHB_TOOLS_LIBS)
index 8eddc6d91cfdc8670901d84c2f95d8109f141279..cee9d7790303fcb1be287986bbd01b26f02e7359 100644 (file)
@@ -32,3 +32,7 @@ endif
 ifeq (1,$(FEATURE.fdk_aac))
        GTK.CONFIGURE.extra += --enable-fdk-aac
 endif
+
+ifeq (1,$(FEATURE.faac))
+       GTK.CONFIGURE.extra += --enable-faac
+endif
index 72f58bfa73162228c68bf0393350e4bac69c75f1..c25cfe1f3de5474d7d3e69fbdd7eba446ba28402 100644 (file)
@@ -642,6 +642,27 @@ ghb_audio_list_refresh(signal_user_data_t *ud)
     }
 }
 
+static void enable_quality_widget(signal_user_data_t *ud, int acodec)
+{
+    GtkWidget *widget1, *widget2, *widget3;
+
+    widget1 = GHB_WIDGET(ud->builder, "AudioTrackQualityEnable");
+    widget2 = GHB_WIDGET(ud->builder, "AudioTrackQualityValue");
+    widget3 = GHB_WIDGET(ud->builder, "AudioTrackQuality");
+    if (hb_audio_quality_get_default(acodec) == HB_INVALID_AUDIO_QUALITY)
+    {
+        gtk_widget_hide(widget1);
+        gtk_widget_hide(widget2);
+        gtk_widget_hide(widget3);
+    }
+    else
+    {
+        gtk_widget_show(widget1);
+        gtk_widget_show(widget2);
+        gtk_widget_show(widget3);
+    }
+}
+
 G_MODULE_EXPORT void
 audio_codec_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 {
@@ -654,6 +675,7 @@ audio_codec_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
     acodec_code = ghb_lookup_combo_int("AudioEncoder", gval);
     ghb_value_free(gval);
 
+    enable_quality_widget(ud, acodec_code);
     if (block_updates)
     {
         prev_acodec = acodec_code;
index e6b4714cb0670b68abfa544648f6af8d6a0f9a93..eead66275b55c227cebe3aca3419aaa06ce0a67b 100644 (file)
@@ -1600,6 +1600,35 @@ set_title_settings(GValue *settings, gint titleindex)
 
         ghb_set_scale_settings(settings, GHB_PIC_KEEP_PAR|GHB_PIC_USE_MAX);
         ghb_settings_set_int(settings, "angle_count", title->angle_count);
+
+        ghb_settings_set_string(settings, "MetaName", title->name);
+        if (title->metadata)
+        {
+            if (title->metadata->name)
+            {
+                ghb_settings_set_string(settings, "MetaName",
+                    title->metadata->name);
+            }
+            ghb_settings_set_string(settings, "MetaArtist",
+                    title->metadata->artist);
+            ghb_settings_set_string(settings, "MetaReleaseDate",
+                    title->metadata->release_date);
+            ghb_settings_set_string(settings, "MetaComment",
+                    title->metadata->comment);
+            if (!title->metadata->name && title->metadata->album)
+            {
+                ghb_settings_set_string(settings, "MetaName",
+                    title->metadata->album);
+            }
+            ghb_settings_set_string(settings, "MetaAlbumArtist",
+                    title->metadata->album_artist);
+            ghb_settings_set_string(settings, "MetaGenre",
+                    title->metadata->genre);
+            ghb_settings_set_string(settings, "MetaDescription",
+                    title->metadata->description);
+            ghb_settings_set_string(settings, "MetaLongDescription",
+                    title->metadata->long_description);
+        }
     }
     update_chapter_list_settings(settings);
     ghb_set_pref_audio_settings(titleindex, settings);
index 9fecd37fea14a0f73a1bd3eef7abb3322424333c..07830237c65ff1c01ab052c1bdc317e732b94b7b 100644 (file)
@@ -50,13 +50,8 @@ dep_map = (
     DepEntry("VideoEncoder", "x264VideoSettings", "x264", False, True),
     DepEntry("VideoEncoder", "lavc_mpeg4_tab", "ffmpeg|ffmpeg4|ffmpeg2", False, True),
     DepEntry("VideoEncoder", "Mp4iPodCompatible", "x264", False, False),
-    DepEntry("AudioTrackQualityEnable", "AudioTrackQuality", "FALSE", True, False),
-    DepEntry("AudioTrackQualityEnable", "AudioTrackQualityValue", "FALSE", True, False),
     DepEntry("AudioTrackQualityEnable", "AudioBitrateLabel", "TRUE", True, False),
     DepEntry("AudioTrackQualityEnable", "AudioBitrate", "TRUE", True, False),
-    DepEntry("AudioEncoderActual", "AudioTrackQualityEnable", "lame|vorbis", False, True),
-    DepEntry("AudioEncoderActual", "AudioTrackQuality", "lame|vorbis", False, True),
-    DepEntry("AudioEncoderActual", "AudioTrackQualityValue", "lame|vorbis", False, True),
     DepEntry("AudioEncoderActual", "AudioBitrateLabel", "copy:mp3|copy:aac|copy:ac3|copy:dts|copy:dtshd", True, False),
     DepEntry("AudioEncoderActual", "AudioBitrate", "copy:mp3|copy:aac|copy:ac3|copy:dts|copy:dtshd", True, False),
     DepEntry("AudioEncoderActual", "AudioSamplerateLabel", "copy:mp3|copy:aac|copy:ac3|copy:dts|copy:dtshd", True, False),
index 12fdfbd67ed99b963811e4cb54e9a90e145afefb..8562401e7c3facac98b5d8de30362ac8ff054707 100644 (file)
@@ -2018,158 +2018,6 @@ typedef struct
     const gchar *lin_val;
 } value_map_t;
 
-static value_map_t vcodec_xlat_compat[] =
-{
-    {"MPEG-4 (FFmpeg)", "ffmpeg"},
-    {"MPEG-4 (XviD)", "ffmpeg4"},
-    {NULL,NULL}
-};
-
-static value_map_t *vcodec_xlat;
-
-static value_map_t acodec_xlat_compat[] =
-{
-    {"AAC (CoreAudio)", "faac"},
-    {"HE-AAC (CoreAudio)", "faac"},
-    {"AC3 (ffmpeg)", "ac3"},
-    {"AC3", "ac3"},
-    {"MP3 Passthru", "mp3pass"},
-    {"AAC Passthru", "aacpass"},
-    {"AC3 Passthru", "ac3pass"},
-    {"DTS Passthru", "dtspass"},
-    {"DTS-HD Passthru", "dtshdpass"},
-    {"Auto Passthru", "auto"},
-    {NULL,NULL}
-};
-
-static value_map_t *acodec_xlat;
-
-static value_map_t * create_video_encoder_xlat_tbl(value_map_t *compat)
-{
-    value_map_t *out;
-    int cc, ii, size = 0;
-
-    for (cc = 0; compat[cc].mac_val != NULL; cc++);
-    
-    const hb_encoder_t *enc;
-    for (enc = hb_video_encoder_get_next(NULL); enc != NULL;
-         enc = hb_video_encoder_get_next(enc))
-    {
-        size++;
-    }
-    out = calloc(cc + size + 1, sizeof(value_map_t));
-
-    for (ii = 0, enc = hb_video_encoder_get_next(NULL); enc != NULL;
-         ii++, enc = hb_video_encoder_get_next(enc))
-    {
-        out[ii].mac_val = enc->name;
-        out[ii].lin_val = enc->short_name;
-    }
-
-    for (ii = 0; ii < cc; ii++)
-        out[ii+size] = compat[ii];
-
-    return out;
-}
-
-static value_map_t * create_audio_encoder_xlat_tbl(value_map_t *compat)
-{
-    value_map_t *out;
-    int cc, ii, size = 0;
-
-    for (cc = 0; compat[cc].mac_val != NULL; cc++);
-    
-    const hb_encoder_t *enc;
-    for (enc = hb_audio_encoder_get_next(NULL); enc != NULL;
-         enc = hb_audio_encoder_get_next(enc))
-    {
-        size++;
-    }
-    out = calloc(cc + size + 1, sizeof(value_map_t));
-
-    for (ii = 0, enc = hb_audio_encoder_get_next(NULL); enc != NULL;
-         ii++, enc = hb_audio_encoder_get_next(enc))
-    {
-        out[ii].mac_val = enc->name;
-        out[ii].lin_val = enc->short_name;
-    }
-
-    for (ii = 0; ii < cc; ii++)
-        out[ii+size] = compat[ii];
-
-    return out;
-}
-
-static value_map_t * create_mix_xlat_tbl(value_map_t *compat)
-{
-    value_map_t *out;
-    int cc, ii, size = 0;;
-
-    for (cc = 0; compat[cc].mac_val != NULL; cc++);
-
-    const hb_mixdown_t *mix;
-    for (mix = hb_mixdown_get_next(NULL); mix != NULL;
-         mix = hb_mixdown_get_next(mix))
-    {
-        size++;
-    }
-    out = calloc(cc + size + 1, sizeof(value_map_t));
-
-    for (ii = 0, mix = hb_mixdown_get_next(NULL); mix != NULL;
-         ii++, mix = hb_mixdown_get_next(mix))
-    {
-        out[ii].mac_val = mix->name;
-        out[ii].lin_val = mix->short_name;
-    }
-
-    for (ii = 0; ii < cc; ii++)
-        out[ii+size] = compat[ii];
-
-    return out;
-}
-
-value_map_t framerate_xlat[] =
-{
-    {"Same as source", "source"},
-    {"5", "5"},
-    {"10", "10"},
-    {"12", "12"},
-    {"15", "15"},
-    {"23.976 (NTSC Film)", "23.976"},
-    {"24", "24"},
-    {"25 (PAL Film/Video)", "25"},
-    {"29.97 (NTSC Video)", "29.97"},
-    {"30", "30"},
-    {"50", "50"},
-    {"59.94", "59.94"},
-    {"60", "60"},
-    {NULL, NULL}
-};
-
-value_map_t samplerate_xlat[] =
-{
-    {"Auto", "source"},
-    {"22.05", "22.05"},
-    {"24", "24"},
-    {"32", "32"},
-    {"44.1", "44.1"},
-    {"48", "48"},
-    {NULL, NULL}
-};
-
-// mix translation table filed in with hb_audio_mixdowns table contents
-value_map_t *mix_xlat;
-
-// Backwards compatibility mappings for audio mix
-value_map_t mix_xlat_compat[] =
-{
-    {"6-channel discrete", "5point1"},
-    {"AC3 Passthru", "none"},
-    {"DTS Passthru", "none"},
-    {"DTS-HD Passthru", "none"},
-    {NULL, NULL}
-};
-
 value_map_t deint_xlat[] =
 {
     {"0", "off"},
@@ -2394,17 +2242,95 @@ export_value_xlat2(value_map_t *value_map, GValue *lin_val, GType mac_type)
 }
 
 static GValue*
-export_value_xlat_container(GValue *lin_val)
+export_value_video_framerate(GValue *lin_val)
+{
+    GValue *sval = NULL;
+    gchar *str;
+    const gchar *fr;
+
+    str = ghb_value_string(lin_val);
+    fr = hb_video_framerate_get_name(hb_video_framerate_get_from_name(str));
+    g_free(str);
+    if (fr != NULL)
+        sval = ghb_string_value_new(fr);
+
+    return sval;
+}
+
+static GValue*
+export_value_audio_samplerate(GValue *lin_val)
+{
+    GValue *sval = NULL;
+    gchar *str;
+    const gchar *sr;
+
+    str = ghb_value_string(lin_val);
+    sr = hb_audio_samplerate_get_name(hb_audio_samplerate_get_from_name(str));
+    g_free(str);
+    if (sr != NULL)
+        sval = ghb_string_value_new(sr);
+
+    return sval;
+}
+
+static GValue*
+export_value_mixdown(GValue *lin_val)
+{
+    GValue *sval = NULL;
+    gchar *str;
+    const gchar *mix;
+
+    str = ghb_value_string(lin_val);
+    mix = hb_mixdown_get_name(hb_mixdown_get_from_name(str));
+    g_free(str);
+    if (mix != NULL)
+        sval = ghb_string_value_new(mix);
+
+    return sval;
+}
+
+static GValue*
+export_value_video_encoder(GValue *lin_val)
+{
+    GValue *sval = NULL;
+    gchar *str;
+    const gchar *enc;
+
+    str = ghb_value_string(lin_val);
+    enc = hb_video_encoder_get_name(hb_video_encoder_get_from_name(str));
+    g_free(str);
+    if (enc != NULL)
+        sval = ghb_string_value_new(enc);
+
+    return sval;
+}
+
+static GValue*
+export_value_audio_encoder(GValue *lin_val)
+{
+    GValue *sval = NULL;
+    gchar *str;
+    const gchar *enc;
+
+    str = ghb_value_string(lin_val);
+    enc = hb_audio_encoder_get_name(hb_audio_encoder_get_from_name(str));
+    g_free(str);
+    if (enc != NULL)
+        sval = ghb_string_value_new(enc);
+
+    return sval;
+}
+
+static GValue*
+export_value_container(GValue *lin_val)
 {
     GValue *sval = NULL;
     gchar *str;
     const gchar *mux;
-    int imux;
 
     str = ghb_value_string(lin_val);
-    imux = hb_container_get_from_name(str);
+    mux = hb_container_get_name(hb_container_get_from_name(str));
     g_free(str);
-    mux = hb_container_get_name(imux);
     if (mux != NULL)
         sval = ghb_string_value_new(mux);
 
@@ -2419,17 +2345,17 @@ export_value_xlat(GValue *dict)
 
     key = "VideoEncoder";
     lin_val = ghb_dict_lookup(dict, key);
-    gval = export_value_xlat2(vcodec_xlat, lin_val, G_TYPE_STRING);
+    gval = export_value_video_encoder(lin_val);
     if (gval)
         ghb_dict_insert(dict, g_strdup(key), gval);
     key = "FileFormat";
     lin_val = ghb_dict_lookup(dict, key);
-    gval = export_value_xlat_container(lin_val);
+    gval = export_value_container(lin_val);
     if (gval)
         ghb_dict_insert(dict, g_strdup(key), gval);
     key = "VideoFramerate";
     lin_val = ghb_dict_lookup(dict, key);
-    gval = export_value_xlat2(framerate_xlat, lin_val, G_TYPE_STRING);
+    gval = export_value_video_framerate(lin_val);
     if (gval)
         ghb_dict_insert(dict, g_strdup(key), gval);
     key = "PictureDetelecine";
@@ -2474,7 +2400,7 @@ export_value_xlat(GValue *dict)
 
     key = "AudioEncoderFallback";
     lin_val = ghb_dict_lookup(dict, key);
-    gval = export_value_xlat2(acodec_xlat, lin_val, G_TYPE_STRING);
+    gval = export_value_audio_encoder(lin_val);
     if (gval)
         ghb_dict_insert(dict, g_strdup(key), gval);
 
@@ -2490,17 +2416,17 @@ export_value_xlat(GValue *dict)
             ghb_dict_insert(adict, g_strdup(key), gval);
         key = "AudioEncoder";
         lin_val = ghb_dict_lookup(adict, key);
-        gval = export_value_xlat2(acodec_xlat, lin_val, G_TYPE_STRING);
+        gval = export_value_audio_encoder(lin_val);
         if (gval)
             ghb_dict_insert(adict, g_strdup(key), gval);
         key = "AudioSamplerate";
         lin_val = ghb_dict_lookup(adict, key);
-        gval = export_value_xlat2(samplerate_xlat, lin_val, G_TYPE_STRING);
+        gval = export_value_audio_samplerate(lin_val);
         if (gval)
             ghb_dict_insert(adict, g_strdup(key), gval);
         key = "AudioMixdown";
         lin_val = ghb_dict_lookup(adict, key);
-        gval = export_value_xlat2(mix_xlat, lin_val, G_TYPE_STRING);
+        gval = export_value_mixdown(lin_val);
         if (gval)
             ghb_dict_insert(adict, g_strdup(key), gval);
     }
@@ -2579,26 +2505,100 @@ import_value_xlat2(
 }
 
 static GValue*
-import_value_xlat_container(GValue *mac_val)
+import_value_video_framerate(GValue *mac_val)
 {
     GValue *sval = NULL;
     gchar *str;
-    const gchar *mux;
-    int imux;
+    const gchar *fr;
 
     str = ghb_value_string(mac_val);
-    mux = hb_container_sanitize_name(str);
+    fr = hb_video_framerate_get_name(hb_video_framerate_get_from_name(str));
     g_free(str);
 
-    if (mux == NULL)
-    {
-        imux = hb_container_get_from_extension("mp4");
-    }
-    else
-    {
-        imux = hb_container_get_from_name(mux);
-    }
-    mux = hb_container_get_short_name(imux);
+    if (fr != NULL)
+        sval = ghb_string_value_new(fr);
+
+    return sval;
+}
+
+static GValue*
+import_value_audio_samplerate(GValue *mac_val)
+{
+    GValue *sval = NULL;
+    gchar *str;
+    const gchar *sr;
+
+    str = ghb_value_string(mac_val);
+    sr = hb_audio_samplerate_get_name(hb_audio_samplerate_get_from_name(str));
+    g_free(str);
+
+    if (sr != NULL)
+        sval = ghb_string_value_new(sr);
+
+    return sval;
+}
+
+static GValue*
+import_value_mixdown(GValue *mac_val)
+{
+    GValue *sval = NULL;
+    gchar *str;
+    const gchar *mix;
+
+    str = ghb_value_string(mac_val);
+    mix = hb_mixdown_get_short_name(hb_mixdown_get_from_name(str));
+    g_free(str);
+
+    if (mix != NULL)
+        sval = ghb_string_value_new(mix);
+
+    return sval;
+}
+
+static GValue*
+import_value_video_encoder(GValue *mac_val)
+{
+    GValue *sval = NULL;
+    gchar *str;
+    const gchar *enc;
+
+    str = ghb_value_string(mac_val);
+    enc = hb_video_encoder_get_short_name(hb_video_encoder_get_from_name(str));
+    g_free(str);
+
+    if (enc != NULL)
+        sval = ghb_string_value_new(enc);
+
+    return sval;
+}
+
+static GValue*
+import_value_audio_encoder(GValue *mac_val)
+{
+    GValue *sval = NULL;
+    gchar *str;
+    const gchar *enc;
+
+    str = ghb_value_string(mac_val);
+    enc = hb_audio_encoder_get_short_name(hb_audio_encoder_get_from_name(str));
+    g_free(str);
+
+    if (enc != NULL)
+        sval = ghb_string_value_new(enc);
+
+    return sval;
+}
+
+static GValue*
+import_value_container(GValue *mac_val)
+{
+    GValue *sval = NULL;
+    gchar *str;
+    const gchar *mux;
+
+    str = ghb_value_string(mac_val);
+    mux = hb_container_get_short_name(hb_container_get_from_name(str));
+    g_free(str);
 
     if (mux != NULL)
         sval = ghb_string_value_new(mux);
@@ -2615,17 +2615,17 @@ import_value_xlat(GValue *dict)
     defaults = plist_get_dict(internalPlist, "Presets");
     key = "VideoEncoder";
     mac_val = ghb_dict_lookup(dict, key);
-    gval = import_value_xlat2(defaults, vcodec_xlat, key, mac_val);
+    gval = import_value_video_encoder(mac_val);
     if (gval)
         ghb_dict_insert(dict, g_strdup(key), gval);
     key = "FileFormat";
     mac_val = ghb_dict_lookup(dict, key);
-    gval = import_value_xlat_container(mac_val);
+    gval = import_value_container(mac_val);
     if (gval)
         ghb_dict_insert(dict, g_strdup(key), gval);
     key = "VideoFramerate";
     mac_val = ghb_dict_lookup(dict, key);
-    gval = import_value_xlat2(defaults, framerate_xlat, key, mac_val);
+    gval = import_value_video_framerate(mac_val);
     if (gval)
         ghb_dict_insert(dict, g_strdup(key), gval);
     key = "PictureDetelecine";
@@ -2725,7 +2725,7 @@ import_value_xlat(GValue *dict)
 
     key = "AudioEncoderFallback";
     mac_val = ghb_dict_lookup(dict, key);
-    gval = import_value_xlat2(defaults, acodec_xlat, key, mac_val);
+    gval = import_value_audio_encoder(mac_val);
     if (gval)
         ghb_dict_insert(dict, g_strdup(key), gval);
 
@@ -2745,17 +2745,23 @@ import_value_xlat(GValue *dict)
                 ghb_dict_insert(adict, g_strdup(key), gval);
             key = "AudioEncoder";
             mac_val = ghb_dict_lookup(adict, key);
-            gval = import_value_xlat2(adefaults, acodec_xlat, key, mac_val);
+            gval = import_value_audio_encoder(mac_val);
+            if (gval == NULL)
+                gval = ghb_value_dup(ghb_dict_lookup(adefaults, key));
             if (gval)
                 ghb_dict_insert(adict, g_strdup(key), gval);
             key = "AudioSamplerate";
             mac_val = ghb_dict_lookup(adict, key);
-            gval = import_value_xlat2(adefaults, samplerate_xlat, key, mac_val);
+            gval = import_value_audio_samplerate(mac_val);
+            if (gval == NULL)
+                gval = ghb_value_dup(ghb_dict_lookup(adefaults, key));
             if (gval)
                 ghb_dict_insert(adict, g_strdup(key), gval);
             key = "AudioMixdown";
             mac_val = ghb_dict_lookup(adict, key);
-            gval = import_value_xlat2(adefaults, mix_xlat, key, mac_val);
+            gval = import_value_mixdown(mac_val);
+            if (gval == NULL)
+                gval = ghb_value_dup(ghb_dict_lookup(adefaults, key));
             if (gval)
                 ghb_dict_insert(adict, g_strdup(key), gval);
 
@@ -3381,11 +3387,6 @@ update_standard_presets(signal_user_data_t *ud)
 void
 ghb_presets_load(signal_user_data_t *ud)
 {
-    // Create translation tables from libhb tables
-    mix_xlat = create_mix_xlat_tbl(mix_xlat_compat);
-    acodec_xlat = create_audio_encoder_xlat_tbl(acodec_xlat_compat);
-    vcodec_xlat = create_video_encoder_xlat_tbl(vcodec_xlat_compat);
-
     presetsPlist = load_plist("presets");
     if (presetsPlist == NULL)
     {
index f73475bd87fc5bb8f66e83835c526f8174841ef0..989f892de32db33e70d45f0a843290e533790771 100644 (file)
                                <key>x264UseAdvancedOptions</key>
                                <integer>0</integer>
                        </dict>
+                       <dict>
+                               <key>AudioAllowAACPass</key>
+                               <integer>1</integer>
+                               <key>AudioAllowAC3Pass</key>
+                               <integer>1</integer>
+                               <key>AudioAllowDTSHDPass</key>
+                               <integer>1</integer>
+                               <key>AudioAllowDTSPass</key>
+                               <integer>1</integer>
+                               <key>AudioAllowMP3Pass</key>
+                               <integer>1</integer>
+                               <key>AudioEncoderFallback</key>
+                               <string>AC3 (ffmpeg)</string>
+                               <key>AudioList</key>
+                               <array>
+                                       <dict>
+                                               <key>AudioBitrate</key>
+                                               <string>128</string>
+                                               <key>AudioEncoder</key>
+                                               <string>AAC (faac)</string>
+                                               <key>AudioMixdown</key>
+                                               <string>Dolby Pro Logic II</string>
+                                               <key>AudioSamplerate</key>
+                                               <string>Auto</string>
+                                               <key>AudioTrack</key>
+                                               <integer>1</integer>
+                                               <key>AudioTrackDRCSlider</key>
+                                               <real>0.0</real>
+                                               <key>AudioTrackGainSlider</key>
+                                               <real>0.0</real>
+                                       </dict>
+                               </array>
+                               <key>ChapterMarkers</key>
+                               <integer>0</integer>
+                               <key>Default</key>
+                               <integer>0</integer>
+                               <key>FileFormat</key>
+                               <string>MP4 file</string>
+                               <key>Folder</key>
+                               <false/>
+                               <key>Mp4HttpOptimize</key>
+                               <integer>0</integer>
+                               <key>Mp4LargeFile</key>
+                               <integer>0</integer>
+                               <key>Mp4iPodCompatible</key>
+                               <integer>0</integer>
+                               <key>PictureAutoCrop</key>
+                               <integer>1</integer>
+                               <key>PictureBottomCrop</key>
+                               <integer>0</integer>
+                               <key>PictureDeblock</key>
+                               <integer>0</integer>
+                               <key>PictureDecomb</key>
+                               <integer>0</integer>
+                               <key>PictureDecombCustom</key>
+                               <string></string>
+                               <key>PictureDecombDeinterlace</key>
+                               <integer>1</integer>
+                               <key>PictureDeinterlace</key>
+                               <integer>0</integer>
+                               <key>PictureDeinterlaceCustom</key>
+                               <string></string>
+                               <key>PictureDenoise</key>
+                               <integer>0</integer>
+                               <key>PictureDenoiseCustom</key>
+                               <string></string>
+                               <key>PictureDetelecine</key>
+                               <integer>0</integer>
+                               <key>PictureDetelecineCustom</key>
+                               <string></string>
+                               <key>PictureHeight</key>
+                               <integer>720</integer>
+                               <key>PictureKeepRatio</key>
+                               <integer>0</integer>
+                               <key>PictureLeftCrop</key>
+                               <integer>0</integer>
+                               <key>PictureModulus</key>
+                               <integer>2</integer>
+                               <key>PicturePAR</key>
+                               <integer>2</integer>
+                               <key>PictureRightCrop</key>
+                               <integer>0</integer>
+                               <key>PictureTopCrop</key>
+                               <integer>0</integer>
+                               <key>PictureWidth</key>
+                               <integer>1280</integer>
+                               <key>PresetDescription</key>
+                               <string>HandBrake's preset for Windows Phone 8 devices</string>
+                               <key>PresetName</key>
+                               <string>Windows Phone 8</string>
+                               <key>Subtitles</key>
+                               <string>None</string>
+                               <key>Type</key>
+                               <integer>0</integer>
+                               <key>UsesPictureFilters</key>
+                               <integer>1</integer>
+                               <key>UsesPictureSettings</key>
+                               <integer>1</integer>
+                               <key>VideoAvgBitrate</key>
+                               <string>2500</string>
+                               <key>VideoEncoder</key>
+                               <string>H.264 (x264)</string>
+                               <key>VideoFramerate</key>
+                               <string>30</string>
+                               <key>VideoFramerateMode</key>
+                               <string>pfr</string>
+                               <key>VideoGrayScale</key>
+                               <integer>0</integer>
+                               <key>VideoQualitySlider</key>
+                               <real>22</real>
+                               <key>VideoQualityType</key>
+                               <integer>2</integer>
+                               <key>VideoTurboTwoPass</key>
+                               <integer>0</integer>
+                               <key>VideoTwoPass</key>
+                               <integer>0</integer>
+                               <key>h264Level</key>
+                               <string>3.1</string>
+                               <key>h264Profile</key>
+                               <string>main</string>
+                               <key>lavcOption</key>
+                               <string></string>
+                               <key>x264Option</key>
+                               <string></string>
+                               <key>x264OptionExtra</key>
+                               <string></string>
+                               <key>x264Preset</key>
+                               <string>medium</string>
+                               <key>x264Tune</key>
+                               <string></string>
+                               <key>x264UseAdvancedOptions</key>
+                               <integer>0</integer>
+                       </dict>
                </array>
                <key>Default</key>
                <integer>0</integer>
                <key>Folder</key>
                <true/>
                <key>PresetBuildNumber</key>
-               <integer>2013030401</integer>
+               <integer>2013061301</integer>
                <key>PresetName</key>
                <string>Devices</string>
                <key>Type</key>
                <key>Folder</key>
                <true/>
                <key>PresetBuildNumber</key>
-               <integer>2013030401</integer>
+               <integer>2013061301</integer>
                <key>PresetName</key>
                <string>Regular</string>
                <key>Type</key>
index 074d2a13508adeba6c90dfdc08c57c06f1f3cca8..225bc9c2b42095f8f95f91fa756b3f01945a3166 100644 (file)
@@ -153,10 +153,10 @@ hb_mixdown_t *hb_audio_mixdowns_first_item = NULL;
 hb_mixdown_t *hb_audio_mixdowns_last_item  = NULL;
 hb_mixdown_internal_t hb_audio_mixdowns[]  =
 {
-    // legacy mixdowns (disabled)
-    { { "AC3 Passthru",       "ac3pass",    HB_AMIXDOWN_NONE,      }, NULL, 0, },
-    { { "DTS Passthru",       "dtspass",    HB_AMIXDOWN_NONE,      }, NULL, 0, },
-    { { "DTS-HD Passthru",    "dtshdpass",  HB_AMIXDOWN_NONE,      }, NULL, 0, },
+    // legacy mixdowns, back to HB 0.9.4 whenever possible (disabled)
+    { { "AC3 Passthru",       "",           HB_AMIXDOWN_NONE,      }, NULL, 0, },
+    { { "DTS Passthru",       "",           HB_AMIXDOWN_NONE,      }, NULL, 0, },
+    { { "DTS-HD Passthru",    "",           HB_AMIXDOWN_NONE,      }, NULL, 0, },
     { { "6-channel discrete", "6ch",        HB_AMIXDOWN_5POINT1,   }, NULL, 0, },
     // actual mixdowns
     { { "None",               "none",       HB_AMIXDOWN_NONE,      }, NULL, 1, },
@@ -184,22 +184,17 @@ hb_encoder_t *hb_video_encoders_first_item = NULL;
 hb_encoder_t *hb_video_encoders_last_item  = NULL;
 hb_encoder_internal_t hb_video_encoders[]  =
 {
-    // legacy encoders, all the way back to HB 0.7.1 (disabled)
-    { { "x264 (Main profile)", "",      HB_VCODEC_X264,         HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_H264,   },
-    { { "x264 (Baseline profile)", "",  HB_VCODEC_X264,         HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_H264,   },
-    { { "x264 (h.264 Main)", "",        HB_VCODEC_X264,         HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_H264,   },
-    { { "x264 (h.264 iPod)", "",        HB_VCODEC_X264,         HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_H264,   },
-    { { "",                  "x264b13", HB_VCODEC_X264,         HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_H264,   },
-    { { "",                  "x264b30", HB_VCODEC_X264,         HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_H264,   },
-    { { "XviD",              "xvid",    HB_VCODEC_FFMPEG_MPEG4, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_MPEG4,  },
-    { { "MPEG-4 (XviD)",     "",        HB_VCODEC_FFMPEG_MPEG4, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_MPEG4,  },
+    // legacy encoders, back to HB 0.9.4 whenever possible (disabled)
     { { "FFmpeg",            "ffmpeg",  HB_VCODEC_FFMPEG_MPEG4, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_MPEG4,  },
+    { { "MPEG-4 (FFmpeg)",   "ffmpeg4",   HB_VCODEC_FFMPEG_MPEG4, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_MPEG4,  },
+    { { "MPEG-2 (FFmpeg)",   "ffmpeg2",   HB_VCODEC_FFMPEG_MPEG2, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_MPEG2,  },
+    { { "VP3 (Theora)",      "libtheora", HB_VCODEC_THEORA,                       HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_VCODEC_THEORA, },
     // actual encoders
     { { "H.264 (x264)",      "x264",    HB_VCODEC_X264,         HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_H264,   },
     { { "H.264 (Intel QSV)", "qsv_h264",HB_VCODEC_QSV_H264,     HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_H264,   },
-    { { "MPEG-4 (FFmpeg)",   "ffmpeg4", HB_VCODEC_FFMPEG_MPEG4, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_MPEG4,  },
-    { { "MPEG-2 (FFmpeg)",   "ffmpeg2", HB_VCODEC_FFMPEG_MPEG2, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_MPEG2,  },
-    { { "VP3 (Theora)",      "theora",  HB_VCODEC_THEORA,                       HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_THEORA, },
+    { { "MPEG-4",            "mpeg4",     HB_VCODEC_FFMPEG_MPEG4, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_MPEG4,  },
+    { { "MPEG-2",            "mpeg2",     HB_VCODEC_FFMPEG_MPEG2, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_MPEG2,  },
+    { { "Theora",            "theora",    HB_VCODEC_THEORA,                       HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_THEORA, },
 };
 int hb_video_encoders_count = sizeof(hb_video_encoders) / sizeof(hb_video_encoders[0]);
 static int hb_video_encoder_is_enabled(int encoder)
@@ -227,28 +222,31 @@ hb_encoder_t *hb_audio_encoders_first_item = NULL;
 hb_encoder_t *hb_audio_encoders_last_item  = NULL;
 hb_encoder_internal_t hb_audio_encoders[]  =
 {
-    // legacy encoders (disabled)
-    { { "AC3",                "ac3",        HB_ACODEC_AC3,          HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_ACODEC_AC3,        },
-    { { "AC3 (pass-thru)",    "ac3pass",    HB_ACODEC_AC3_PASS,     HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_ACODEC_AC3_PASS,   },
-    { { "DTS (pass-thru)",    "dtspass",    HB_ACODEC_DCA_PASS,     HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_ACODEC_DTS_PASS,   },
+    // legacy encoders, back to HB 0.9.4 whenever possible (disabled)
     { { "",                   "dts",        HB_ACODEC_DCA_PASS,     HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_ACODEC_DTS_PASS,   },
+    { { "AAC (ffmpeg)",       "ffaac",      HB_ACODEC_FFAAC,        HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_ACODEC_AAC,        },
+    { { "AC3 (ffmpeg)",       "ffac3",      HB_ACODEC_AC3,          HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_ACODEC_AC3,        },
+    { { "MP3 (lame)",         "lame",       HB_ACODEC_LAME,         HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_ACODEC_MP3,        },
+    { { "Vorbis (vorbis)",    "libvorbis",  HB_ACODEC_VORBIS,                       HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_ACODEC_VORBIS,     },
+    { { "FLAC (ffmpeg)",      "ffflac",     HB_ACODEC_FFFLAC,                       HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_ACODEC_FLAC,       },
+    { { "FLAC (24-bit)",      "ffflac24",   HB_ACODEC_FFFLAC24,                     HB_MUX_MASK_MKV, }, NULL, 0, HB_GID_ACODEC_FLAC,       },
     // actual encoders
     { { "AAC (CoreAudio)",    "ca_aac",     HB_ACODEC_CA_AAC,       HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_AAC,        },
     { { "HE-AAC (CoreAudio)", "ca_haac",    HB_ACODEC_CA_HAAC,      HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_AAC_HE,     },
+    { { "AAC (faac)",         "faac",       HB_ACODEC_FAAC,         HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_AAC,        },
+    { { "AAC (avcodec)",      "av_aac",     HB_ACODEC_FFAAC,        HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_AAC,        },
     { { "AAC (FDK)",          "fdk_aac",    HB_ACODEC_FDK_AAC,      HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_AAC,        },
     { { "HE-AAC (FDK)",       "fdk_haac",   HB_ACODEC_FDK_HAAC,     HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_AAC_HE,     },
-    { { "AAC (faac)",         "faac",       HB_ACODEC_FAAC,         HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_AAC,        },
-    { { "AAC (ffmpeg)",       "ffaac",      HB_ACODEC_FFAAC,        HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_AAC,        },
     { { "AAC Passthru",       "copy:aac",   HB_ACODEC_AAC_PASS,     HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_AAC_PASS,   },
-    { { "AC3 (ffmpeg)",       "ffac3",      HB_ACODEC_AC3,          HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_AC3,        },
+    { { "AC3",                "ac3",        HB_ACODEC_AC3,          HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_AC3,        },
     { { "AC3 Passthru",       "copy:ac3",   HB_ACODEC_AC3_PASS,     HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_AC3_PASS,   },
     { { "DTS Passthru",       "copy:dts",   HB_ACODEC_DCA_PASS,     HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_DTS_PASS,   },
     { { "DTS-HD Passthru",    "copy:dtshd", HB_ACODEC_DCA_HD_PASS,  HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_DTSHD_PASS, },
-    { { "MP3 (lame)",         "lame",       HB_ACODEC_LAME,         HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_MP3,        },
+    { { "MP3",                "mp3",        HB_ACODEC_LAME,         HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_MP3,        },
     { { "MP3 Passthru",       "copy:mp3",   HB_ACODEC_MP3_PASS,     HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_MP3_PASS,   },
-    { { "Vorbis (vorbis)",    "vorbis",     HB_ACODEC_VORBIS,                       HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_VORBIS,     },
-    { { "FLAC (ffmpeg)",      "ffflac",     HB_ACODEC_FFFLAC,                       HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_FLAC,       },
-    { { "FLAC (24-bit)",      "ffflac24",   HB_ACODEC_FFFLAC24,                     HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_FLAC,       },
+    { { "Vorbis",             "vorbis",     HB_ACODEC_VORBIS,                       HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_VORBIS,     },
+    { { "FLAC 16-bit",        "flac16",     HB_ACODEC_FFFLAC,                       HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_FLAC,       },
+    { { "FLAC 24-bit",        "flac24",     HB_ACODEC_FFFLAC24,                     HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_FLAC,       },
     { { "Auto Passthru",      "copy",       HB_ACODEC_AUTO_PASS,    HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_ACODEC_AUTO_PASS,  },
 };
 int hb_audio_encoders_count = sizeof(hb_audio_encoders) / sizeof(hb_audio_encoders[0]);
@@ -267,12 +265,12 @@ static int hb_audio_encoder_is_enabled(int encoder)
             return 1;
 #endif
             
-#if 1 //#ifdef USE_FAAC
+#ifdef USE_FAAC
         case HB_ACODEC_FAAC:
             return 1;
 #endif
             
-#if 1 //#ifdef USE_LIBAV_AAC
+#ifdef USE_LIBAV_AAC
         case HB_ACODEC_FFAAC:
             return 1;
 #endif
@@ -307,11 +305,9 @@ hb_container_t *hb_containers_first_item = NULL;
 hb_container_t *hb_containers_last_item  = NULL;
 hb_container_internal_t hb_containers[]  =
 {
-    // legacy muxers (disabled)
-    { { "AVI file",          "avi",    "avi",             0, }, NULL, 0, HB_GID_MUX_MP4, },
+    // legacy muxers, back to HB 0.9.4 whenever possible (disabled)
     { { "M4V file",          "m4v",    "m4v",             0, }, NULL, 0, HB_GID_MUX_MP4, },
     { { "MP4 file",          "mp4",    "mp4",             0, }, NULL, 0, HB_GID_MUX_MP4, },
-    { { "OGM file",          "ogm",    "ogm",             0, }, NULL, 0, HB_GID_MUX_MKV, },
     { { "MKV file",          "mkv",    "mkv",             0, }, NULL, 0, HB_GID_MUX_MKV, },
     // actual muxers
     { { "MPEG-4 (mp4v2)",    "mp4v2",  "mp4", HB_MUX_MP4V2,  }, NULL, 1, HB_GID_MUX_MP4, },
@@ -1320,7 +1316,6 @@ int hb_mixdown_has_codec_support(int mixdown, uint32_t codec)
             return (mixdown <= HB_AMIXDOWN_7POINT1);
 
         case HB_ACODEC_LAME:
-        case HB_ACODEC_FFAAC:
             return (mixdown <= HB_AMIXDOWN_DOLBYPLII);
 
         case HB_ACODEC_FAAC:
index 56c1ba571cb9b544de2bdcb2423f9afe253bff05..240582a52fdc1c182ce6287961facf41ed5f0112 100644 (file)
@@ -173,8 +173,6 @@ static hb_title_t * hb_dvdread_title_scan( hb_dvd_t * e, int t, uint64_t min_dur
     ifo_handle_t * vts = NULL;
     int            pgc_id, pgn, i;
     hb_chapter_t * chapter;
-    uint64_t       duration;
-    float          duration_correction;
     unsigned char  unused[1024];
     const char   * codec_name;
 
@@ -609,19 +607,9 @@ static hb_title_t * hb_dvdread_title_scan( hb_dvd_t * e, int t, uint64_t min_dur
         hb_list_add( title->list_chapter, chapter );
     }
 
-    /* The durations we get for chapters aren't precise. Scale them so
-       the total matches the title duration */
-    duration = 0;
-    for( i = 0; i < hb_list_count( title->list_chapter ); i++ )
-    {
-        chapter = hb_list_item( title->list_chapter, i );
-        duration += chapter->duration;
-    }
-    duration_correction = (float) title->duration / (float) duration;
     for( i = 0; i < hb_list_count( title->list_chapter ); i++ )
     {
         chapter           = hb_list_item( title->list_chapter, i );
-        chapter->duration = duration_correction * chapter->duration;
 
         int seconds       = ( chapter->duration + 45000 ) / 90000;
         chapter->hours    = ( seconds / 3600 );
@@ -1270,8 +1258,8 @@ static int dvdtime2msec(dvd_time_t * dt)
 
     if( fps > 0 )
     {
-        ms += ((dt->frame_u & 0x30) >> 3) * 5 +
-              (dt->frame_u & 0x0f) * 1000.0 / fps;
+        ms += (((dt->frame_u & 0x30) >> 3) * 5 +
+                (dt->frame_u & 0x0f)) * 1000.0 / fps;
     }
 
     return ms;
index 9217f7dba89f731a054bd623adf168a939d6c129..ef80bf54124382ada209aed5082ea70e90192ac3 100644 (file)
@@ -318,7 +318,6 @@ static hb_title_t * hb_dvdnav_title_scan( hb_dvd_t * e, int t, uint64_t min_dura
     int            count;
     uint64_t       duration, longest;
     int            longest_pgcn, longest_pgn, longest_pgcn_end;
-    float          duration_correction;
     const char   * name;
     const char   * codec_name;
 
@@ -758,7 +757,6 @@ static hb_title_t * hb_dvdnav_title_scan( hb_dvd_t * e, int t, uint64_t min_dura
 
     hb_log( "scan: title %d has %d chapters", t, c );
 
-    duration = 0;
     count = hb_list_count( title->list_chapter );
     for (i = 0; i < count; i++)
     {
@@ -797,16 +795,11 @@ static hb_title_t * hb_dvdnav_title_scan( hb_dvd_t * e, int t, uint64_t min_dura
 #undef cp
             cell_cur = FindNextCell( pgc, cell_cur );
         }
-        duration += chapter->duration;
     }
 
-    /* The durations we get for chapters aren't precise. Scale them so
-       the total matches the title duration */
-    duration_correction = (float) title->duration / (float) duration;
     for( i = 0; i < hb_list_count( title->list_chapter ); i++ )
     {
         chapter           = hb_list_item( title->list_chapter, i );
-        chapter->duration = duration_correction * chapter->duration;
 
         int seconds       = ( chapter->duration + 45000 ) / 90000;
         chapter->hours    = ( seconds / 3600 );
@@ -1979,7 +1972,7 @@ static int NextPgcn( ifo_handle_t *ifo, int pgcn, uint32_t pgcn_map[MAX_PGCN/32]
  **********************************************************************/
 static void PgcWalkInit( uint32_t pgcn_map[MAX_PGCN/32] )
 {
-    memset(pgcn_map, 0, sizeof(pgcn_map) );
+    memset(pgcn_map, 0, sizeof(uint32_t) * MAX_PGCN/32);
 }
 
 /***********************************************************************
@@ -1998,8 +1991,8 @@ static int dvdtime2msec(dvd_time_t * dt)
 
     if( fps > 0 )
     {
-        ms += ((dt->frame_u & 0x30) >> 3) * 5 +
-              (dt->frame_u & 0x0f) * 1000.0 / fps;
+        ms += (((dt->frame_u & 0x30) >> 3) * 5 +
+                (dt->frame_u & 0x0f)) * 1000.0 / fps;
     }
 
     return ms;
index ffdddc8d49e7dbe18d29c28b6b580aae6e9452d1..3bdd7cee055b1bae5bb8f3053a19dc86cd6d6ee5 100644 (file)
@@ -7,6 +7,7 @@
    For full terms see the file COPYING file or visit http://www.gnu.org/licenses/gpl-2.0.html
  */
 
+#ifdef USE_FAAC
 #include "hb.h"
 #include "audio_remap.h"
 
@@ -286,4 +287,4 @@ int encfaacWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
 
     return HB_WORK_OK;
 }
-
+#endif // USE_FAAC
index 6fbb60fb59199e5ae1307dc35e27d7fae565212a..4c2eb32e454089d270376b039a286616d5fd86de 100644 (file)
@@ -666,9 +666,6 @@ hb_handle_t * hb_init( int verbose, int update_check )
 
     h->interjob = calloc( sizeof( hb_interjob_t ), 1 );
 
-    /* libavcodec */
-    hb_avcodec_init();
-
 #ifdef USE_QSV
     /* Intel Quick Sync Video */
     hb_qsv_info_print();
@@ -679,37 +676,6 @@ hb_handle_t * hb_init( int verbose, int update_check )
     h->die         = 0;
     h->main_thread = hb_thread_init( "libhb", thread_func, h,
                                      HB_NORMAL_PRIORITY );
-    hb_register( &hb_sync_video );
-    hb_register( &hb_sync_audio );
-       hb_register( &hb_decmpeg2 );
-       hb_register( &hb_decvobsub );
-    hb_register( &hb_encvobsub );
-    hb_register( &hb_deccc608 );
-    hb_register( &hb_decsrtsub );
-    hb_register( &hb_decutf8sub );
-    hb_register( &hb_dectx3gsub );
-    hb_register( &hb_decssasub );
-    hb_register( &hb_decpgssub );
-       hb_register( &hb_encavcodec );
-       hb_register( &hb_encx264 );
-#ifdef USE_QSV
-    hb_register(&hb_encqsv);
-#endif
-    hb_register( &hb_enctheora );
-       hb_register( &hb_deca52 );
-       hb_register( &hb_decavcodeca );
-       hb_register( &hb_decavcodecv );
-       hb_register( &hb_declpcm );
-       hb_register( &hb_encfaac );
-       hb_register( &hb_enclame );
-       hb_register( &hb_encvorbis );
-       hb_register( &hb_muxer );
-#ifdef __APPLE__
-       hb_register( &hb_encca_aac );
-       hb_register( &hb_encca_haac );
-#endif
-       hb_register( &hb_encavcodeca );
-       hb_register( &hb_reader );
     
     return h;
 }
@@ -775,9 +741,6 @@ hb_handle_t * hb_init_dl( int verbose, int update_check )
 
     h->pause_lock = hb_lock_init();
 
-    /* libavcodec */
-    hb_avcodec_init();
-
 #ifdef USE_QSV
     /* Intel Quick Sync Video */
     hb_qsv_info_print();
@@ -789,37 +752,6 @@ hb_handle_t * hb_init_dl( int verbose, int update_check )
     h->main_thread = hb_thread_init( "libhb", thread_func, h,
                                      HB_NORMAL_PRIORITY );
 
-    hb_register( &hb_sync_video );
-    hb_register( &hb_sync_audio );
-       hb_register( &hb_decmpeg2 );
-       hb_register( &hb_decvobsub );
-    hb_register( &hb_encvobsub );
-    hb_register( &hb_deccc608 );
-    hb_register( &hb_decsrtsub );
-    hb_register( &hb_decutf8sub );
-    hb_register( &hb_dectx3gsub );
-    hb_register( &hb_decssasub );
-       hb_register( &hb_encavcodec );
-       hb_register( &hb_encx264 );
-#ifdef USE_QSV
-    hb_register(&hb_encqsv);
-#endif
-    hb_register( &hb_enctheora );
-       hb_register( &hb_deca52 );
-       hb_register( &hb_decavcodeca );
-       hb_register( &hb_decavcodecv );
-       hb_register( &hb_declpcm );
-       hb_register( &hb_encfaac );
-       hb_register( &hb_enclame );
-       hb_register( &hb_encvorbis );
-       hb_register( &hb_muxer );
-#ifdef __APPLE__
-       hb_register( &hb_encca_aac );
-       hb_register( &hb_encca_haac );
-#endif
-       hb_register( &hb_encavcodeca );
-       hb_register( &hb_reader );
-
        return h;
 }
 
@@ -1926,6 +1858,46 @@ int hb_global_init()
         return -1;
     }
 
+    /* libavcodec */
+    hb_avcodec_init();
+
+    /* HB work objects */
+    hb_register(&hb_muxer);
+    hb_register(&hb_reader);
+    hb_register(&hb_sync_video);
+    hb_register(&hb_sync_audio);
+ifdef USE_QSV
+    hb_register(&hb_encqsv);
+#endif
+    hb_register(&hb_deca52);
+    hb_register(&hb_decavcodecv);
+    hb_register(&hb_decavcodeca);
+    hb_register(&hb_declpcm);
+    hb_register(&hb_deccc608);
+    hb_register(&hb_decmpeg2);
+    hb_register(&hb_decpgssub);
+    hb_register(&hb_decsrtsub);
+    hb_register(&hb_decssasub);
+    hb_register(&hb_dectx3gsub);
+    hb_register(&hb_decutf8sub);
+    hb_register(&hb_decvobsub);
+    hb_register(&hb_encvobsub);
+    hb_register(&hb_encavcodec);
+    hb_register(&hb_encavcodeca);
+#ifdef __APPLE__
+    hb_register(&hb_encca_aac);
+    hb_register(&hb_encca_haac);
+#endif
+#ifdef USE_FAAC
+    hb_register(&hb_encfaac);
+#endif
+    hb_register(&hb_enclame);
+    hb_register(&hb_enctheora);
+    hb_register(&hb_encvorbis);
+    hb_register(&hb_encx264);
+    
+    hb_common_global_init();
+
 #ifdef USE_QSV
     result = hb_qsv_info_init();
     if (result < 0)
@@ -1935,8 +1907,6 @@ int hb_global_init()
     }
 #endif
 
-    hb_common_global_init();
-
     return result;
 }
 
index 7b9073134d4133ba54ea89e7ebaee424db53200d..24e2a6ebef9f7550e2d501ee184c5a28911e69a4 100644 (file)
@@ -45,7 +45,12 @@ endif
 ifeq (1,$(FEATURE.fdk_aac))
 LIBHB.GCC.D += USE_FDK_AAC
 endif
-
+ifeq (1,$(FEATURE.libav_aac))
+LIBHB.GCC.D += USE_LIBAV_AAC
+endif
+ifeq (1,$(FEATURE.faac))
+LIBHB.GCC.D += USE_FAAC
+endif
 LIBHB.GCC.D += __LIBHB__ USE_PTHREAD
 LIBHB.GCC.D += __LIBHB__ USE_PTHREAD HAVE_THREADS=1
 LIBHB.GCC.I += $(LIBHB.build/) $(CONTRIB.build/)include
@@ -106,7 +111,7 @@ LIBHB.dll = $(LIBHB.build/)hb.dll
 LIBHB.lib = $(LIBHB.build/)hb.lib
 
 LIBHB.dll.libs = $(foreach n, \
-        a52 ass avcodec avformat avutil avresample dvdnav dvdread faac \
+        a52 ass avcodec avformat avutil avresample dvdnav dvdread \
         fontconfig freetype mkv mpeg2 mp3lame mp4v2 \
         ogg samplerate swscale theora vorbis vorbisenc x264 xml2 bluray, \
         $(CONTRIB.build/)lib/lib$(n).a )
@@ -115,6 +120,10 @@ ifeq (1,$(FEATURE.fdk_aac))
 LIBHB.dll.libs += $(CONTRIB.build/)lib/libfdk-aac.a
 endif
 
+ifeq (1,$(FEATURE.faac))
+LIBHB.dll.libs += $(CONTRIB.build/)lib/libfaac.a
+endif
+
 ifeq (1,$(FEATURE.qsv))
 LIBHB.dll.libs += $(CONTRIB.build/)lib/libmfx.a
 endif
index 6b2f65b90310b34074bae66b28580b3c6a18da9c..dee737c195f196668a56727bbc8db067fce78afe 100644 (file)
@@ -273,7 +273,7 @@ int syncVideoWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
     {
         pv->common->first_pts[0] = next->s.start;
         hb_lock( pv->common->mutex );
-        while( pv->common->pts_offset == INT64_MIN )
+        while( pv->common->pts_offset == INT64_MIN && !*w->done )
         {
             // Full fifos will make us wait forever, so get the
             // pts offset from the available streams if full
@@ -765,7 +765,7 @@ static int syncAudioWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
     {
         pv->common->first_pts[sync->index+1] = buf->s.start;
         hb_lock( pv->common->mutex );
-        while( pv->common->pts_offset == INT64_MIN )
+        while( pv->common->pts_offset == INT64_MIN && !*w->done)
         {
             // Full fifos will make us wait forever, so get the
             // pts offset from the available streams if full
@@ -785,7 +785,7 @@ static int syncAudioWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
     /* Wait for start frame if doing point-to-point */
     hb_lock( pv->common->mutex );
     start = buf->s.start - pv->common->audio_pts_slip;
-    while ( !pv->common->start_found )
+    while ( !pv->common->start_found && !*w->done )
     {
         if ( pv->common->audio_pts_thresh < 0 )
         {
@@ -801,7 +801,7 @@ static int syncAudioWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
             return HB_WORK_OK;
         }
         while ( !pv->common->start_found && 
-                buf->s.start >= pv->common->audio_pts_thresh )
+                buf->s.start >= pv->common->audio_pts_thresh && !*w->done )
         {
             hb_cond_timedwait( pv->common->next_frame, pv->common->mutex, 10 );
             // There is an unfortunate unavoidable deadlock that can occur.
index ab9a908bf858540fefd80218751250ac0b8286c2..405e613fd247cfa3fe7384f20be44118406958da 100644 (file)
@@ -2,31 +2,31 @@
 <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">12D78</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">
                        <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-                       <string key="NS.object.0">1938</string>
+                       <string key="NS.object.0">3084</string>
                </object>
                <object class="NSArray" key="IBDocument.IntegratedClassDependencies">
                        <bool key="EncodedWithXMLCoder">YES</bool>
-                       <string>NSPopUpButtonCell</string>
-                       <string>NSComboBoxCell</string>
-                       <string>NSPopUpButton</string>
                        <string>NSButton</string>
-                       <string>NSMenu</string>
-                       <string>NSTextFieldCell</string>
                        <string>NSButtonCell</string>
-                       <string>NSMenuItem</string>
                        <string>NSComboBox</string>
-                       <string>NSCustomView</string>
+                       <string>NSComboBoxCell</string>
                        <string>NSCustomObject</string>
-                       <string>NSView</string>
-                       <string>NSWindowTemplate</string>
+                       <string>NSCustomView</string>
+                       <string>NSMenu</string>
+                       <string>NSMenuItem</string>
+                       <string>NSPopUpButton</string>
+                       <string>NSPopUpButtonCell</string>
                        <string>NSTextField</string>
+                       <string>NSTextFieldCell</string>
                        <string>NSUserDefaultsController</string>
+                       <string>NSView</string>
+                       <string>NSWindowTemplate</string>
                </object>
                <object class="NSArray" key="IBDocument.PluginDependencies">
                        <bool key="EncodedWithXMLCoder">YES</bool>
@@ -64,8 +64,6 @@
                                        <int key="NSvFlags">256</int>
                                        <string key="NSFrameSize">{500, 200}</string>
                                        <reference key="NSSuperview"/>
-                                       <reference key="NSWindow"/>
-                                       <reference key="NSNextKeyView"/>
                                </object>
                                <string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
                                <string key="NSMinSize">{213, 129}</string>
@@ -76,7 +74,7 @@
                                <bool key="NSSharedInstance">YES</bool>
                        </object>
                        <object class="NSCustomView" id="1048779201">
-                               <nil key="NSNextResponder"/>
+                               <reference key="NSNextResponder"/>
                                <int key="NSvFlags">256</int>
                                <object class="NSMutableArray" key="NSSubviews">
                                        <bool key="EncodedWithXMLCoder">YES</bool>
@@ -88,7 +86,7 @@
                                                <reference key="NSNextKeyView" ref="1009109497"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSPopUpButtonCell" key="NSCell" id="630285587">
-                                                       <int key="NSCellFlags">-2076049856</int>
+                                                       <int key="NSCellFlags">-2076180416</int>
                                                        <int key="NSCellFlags2">133120</int>
                                                        <object class="NSFont" key="NSSupport" id="26">
                                                                <string key="NSName">LucidaGrande</string>
@@ -96,7 +94,7 @@
                                                                <int key="NSfFlags">3100</int>
                                                        </object>
                                                        <reference key="NSControlView" ref="23412822"/>
-                                                       <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="NSButton" id="1009109497">
                                                <reference key="NSNextResponder" ref="1048779201"/>
                                                <reference key="NSNextKeyView" ref="597305137"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="878201725">
-                                                       <int key="NSCellFlags">-2080244224</int>
+                                                       <int key="NSCellFlags">-2080374784</int>
                                                        <int key="NSCellFlags2">131072</int>
                                                        <string key="NSContents">Play System Alert Sound</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSControlView" ref="1009109497"/>
-                                                       <int key="NSButtonFlags">1211912703</int>
+                                                       <int key="NSButtonFlags">1211912448</int>
                                                        <int key="NSButtonFlags2">2</int>
                                                        <object class="NSCustomResource" key="NSNormalImage" id="491838135">
                                                                <string key="NSClassName">NSImage</string>
                                                        <int key="NSPeriodicDelay">200</int>
                                                        <int key="NSPeriodicInterval">25</int>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSButton" id="806259169">
                                                <reference key="NSNextResponder" ref="1048779201"/>
                                                <reference key="NSNextKeyView" ref="713240777"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="725806271">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">134479872</int>
                                                        <string key="NSContents">Browse ...</string>
                                                        <object class="NSFont" key="NSSupport" id="22">
                                                                <int key="NSfFlags">3614</int>
                                                        </object>
                                                        <reference key="NSControlView" ref="806259169"/>
-                                                       <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="NSTextField" id="842132572">
                                                <reference key="NSNextResponder" ref="1048779201"/>
                                                <reference key="NSNextKeyView" ref="806259169"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="456853603">
-                                                       <int key="NSCellFlags">68288064</int>
+                                                       <int key="NSCellFlags">68157504</int>
                                                        <int key="NSCellFlags2">272761856</int>
                                                        <string key="NSContents">None</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                                </object>
                                                        </object>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSButton" id="636306431">
                                                <reference key="NSNextResponder" ref="1048779201"/>
                                                <reference key="NSNextKeyView" ref="280291731"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="448858755">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">131072</int>
                                                        <string key="NSContents">Show Presets Drawer</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSControlView" ref="636306431"/>
-                                                       <int key="NSButtonFlags">1211912703</int>
+                                                       <int key="NSButtonFlags">1211912448</int>
                                                        <int key="NSButtonFlags2">2</int>
                                                        <reference key="NSAlternateImage" ref="1056213191"/>
                                                        <string key="NSAlternateContents"/>
                                                        <int key="NSPeriodicDelay">200</int>
                                                        <int key="NSPeriodicInterval">25</int>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSButton" id="965044526">
                                                <reference key="NSNextResponder" ref="1048779201"/>
                                                <reference key="NSNextKeyView" ref="854927877"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="419322096">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">131072</int>
                                                        <string key="NSContents">Use Auto Naming (uses DVD name and title number)</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSControlView" ref="965044526"/>
-                                                       <int key="NSButtonFlags">1211912703</int>
+                                                       <int key="NSButtonFlags">1211912448</int>
                                                        <int key="NSButtonFlags2">2</int>
                                                        <reference key="NSAlternateImage" ref="1056213191"/>
                                                        <string key="NSAlternateContents"/>
                                                        <int key="NSPeriodicDelay">200</int>
                                                        <int key="NSPeriodicInterval">25</int>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSTextField" id="315188467">
                                                <reference key="NSNextResponder" ref="1048779201"/>
                                                <reference key="NSNextKeyView" ref="23412822"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="718672066">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">272760832</int>
                                                        <string key="NSContents">When Done:</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSBackgroundColor" ref="525377782"/>
                                                        <reference key="NSTextColor" ref="887152126"/>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSButton" id="581738572">
                                                <reference key="NSNextResponder" ref="1048779201"/>
                                                <reference key="NSNextKeyView" ref="954667708"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="824062726">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">131072</int>
                                                        <string key="NSContents">Automatically check for updates</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSControlView" ref="581738572"/>
-                                                       <int key="NSButtonFlags">1211912703</int>
+                                                       <int key="NSButtonFlags">1211912448</int>
                                                        <int key="NSButtonFlags2">2</int>
                                                        <reference key="NSAlternateImage" ref="1056213191"/>
                                                        <string key="NSAlternateContents"/>
                                                        <int key="NSPeriodicDelay">200</int>
                                                        <int key="NSPeriodicInterval">25</int>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSButton" id="597305137">
                                                <reference key="NSNextResponder" ref="1048779201"/>
                                                <reference key="NSNextKeyView" ref="842132572"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="437495050">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">131072</int>
                                                        <string key="NSContents">Send file to:</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSControlView" ref="597305137"/>
-                                                       <int key="NSButtonFlags">1211912703</int>
+                                                       <int key="NSButtonFlags">1211912448</int>
                                                        <int key="NSButtonFlags2">2</int>
                                                        <reference key="NSNormalImage" ref="491838135"/>
                                                        <reference key="NSAlternateImage" ref="1056213191"/>
                                                        <int key="NSPeriodicDelay">200</int>
                                                        <int key="NSPeriodicInterval">25</int>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSTextField" id="576686737">
                                                <reference key="NSNextResponder" ref="1048779201"/>
                                                <reference key="NSNextKeyView" ref="636306431"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="404194395">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">272760832</int>
                                                        <string key="NSContents">At launch:</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSBackgroundColor" ref="525377782"/>
                                                        <reference key="NSTextColor" ref="887152126"/>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSTextField" id="854927877">
                                                <reference key="NSNextResponder" ref="1048779201"/>
                                                <reference key="NSNextKeyView" ref="317169558"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="177949206">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">71434240</int>
                                                        <string key="NSContents">Default MP4 Extension:</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSBackgroundColor" ref="525377782"/>
                                                        <reference key="NSTextColor" ref="887152126"/>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSTextField" id="280291731">
                                                <reference key="NSNextResponder" ref="1048779201"/>
                                                <reference key="NSNextKeyView" ref="54712339"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="1049782015">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">71434240</int>
                                                        <string key="NSContents">Source selection:</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSBackgroundColor" ref="525377782"/>
                                                        <reference key="NSTextColor" ref="887152126"/>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSTextField" id="713240777">
                                                <reference key="NSNextResponder" ref="1048779201"/>
                                                <reference key="NSNextKeyView" ref="965044526"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="947435557">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">272760832</int>
                                                        <string key="NSContents">Output files:</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSBackgroundColor" ref="525377782"/>
                                                        <reference key="NSTextColor" ref="887152126"/>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSPopUpButton" id="317169558">
                                                <reference key="NSNextResponder" ref="1048779201"/>
                                                <reference key="NSSuperview" ref="1048779201"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSPopUpButtonCell" key="NSCell" id="792374025">
-                                                       <int key="NSCellFlags">71433792</int>
+                                                       <int key="NSCellFlags">71303232</int>
                                                        <int key="NSCellFlags2">264192</int>
                                                        <reference key="NSSupport" ref="22"/>
                                                        <reference key="NSControlView" ref="317169558"/>
-                                                       <int key="NSButtonFlags">109199615</int>
+                                                       <int key="NSButtonFlags">109199360</int>
                                                        <int key="NSButtonFlags2">1</int>
                                                        <object class="NSFont" key="NSAlternateImage">
                                                                <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="954667708">
                                                <reference key="NSNextResponder" ref="1048779201"/>
                                                <reference key="NSNextKeyView" ref="315188467"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSPopUpButtonCell" key="NSCell" id="841218599">
-                                                       <int key="NSCellFlags">71433792</int>
+                                                       <int key="NSCellFlags">71303232</int>
                                                        <int key="NSCellFlags2">133120</int>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSControlView" ref="954667708"/>
-                                                       <int key="NSButtonFlags">109199615</int>
+                                                       <int key="NSButtonFlags">109199360</int>
                                                        <int key="NSButtonFlags2">1</int>
                                                        <object class="NSFont" key="NSAlternateImage" id="44722471">
                                                                <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="54712339">
                                                <reference key="NSNextResponder" ref="1048779201"/>
                                                <reference key="NSNextKeyView" ref="581738572"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSPopUpButtonCell" key="NSCell" id="310956178">
-                                                       <int key="NSCellFlags">71433792</int>
+                                                       <int key="NSCellFlags">71303232</int>
                                                        <int key="NSCellFlags2">133120</int>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSControlView" ref="54712339"/>
-                                                       <int key="NSButtonFlags">109199615</int>
+                                                       <int key="NSButtonFlags">109199360</int>
                                                        <int key="NSButtonFlags2">1</int>
                                                        <reference key="NSAlternateImage" ref="44722471"/>
                                                        <string key="NSAlternateContents"/>
                                                        <bool key="NSAltersState">YES</bool>
                                                        <int key="NSArrowPosition">1</int>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                </object>
                                <string key="NSFrameSize">{460, 256}</string>
+                               <reference key="NSSuperview"/>
                                <reference key="NSNextKeyView" ref="576686737"/>
                                <string key="NSClassName">NSView</string>
                                <string key="NSExtension">NSControl</string>
                                                <int key="NSvFlags">268</int>
                                                <string key="NSFrame">{{34, 42}, {432, 17}}</string>
                                                <reference key="NSSuperview" ref="520288288"/>
-                                               <reference key="NSWindow"/>
-                                               <reference key="NSNextKeyView"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="374363387">
-                                                       <int key="NSCellFlags">67239488</int>
+                                                       <int key="NSCellFlags">67108928</int>
                                                        <int key="NSCellFlags2">138413056</int>
                                                        <string key="NSContents">Nothing here right now, but I am sure we will think of something</string>
                                                        <reference key="NSSupport" ref="964910696"/>
                                                        <reference key="NSBackgroundColor" ref="525377782"/>
                                                        <reference key="NSTextColor" ref="887152126"/>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                </object>
                                <string key="NSFrameSize">{496, 82}</string>
                                <reference key="NSSuperview"/>
-                               <reference key="NSWindow"/>
                                <reference key="NSNextKeyView" ref="539748933"/>
                                <string key="NSClassName">NSView</string>
                                <string key="NSExtension">NSResponder</string>
                                                <reference key="NSNextKeyView" ref="113289239"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="603140150">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">272760832</int>
                                                        <string key="NSContents">Alternate Language:</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSBackgroundColor" ref="525377782"/>
                                                        <reference key="NSTextColor" ref="887152126"/>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSComboBox" id="113289239">
                                                <reference key="NSNextResponder" ref="332598366"/>
                                                <string key="NSFrame">{{169, 87}, {247, 22}}</string>
                                                <reference key="NSSuperview" ref="332598366"/>
                                                <reference key="NSWindow"/>
-                                               <reference key="NSNextKeyView" ref="247298122"/>
+                                               <reference key="NSNextKeyView"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSComboBoxCell" key="NSCell" id="37767182">
-                                                       <int key="NSCellFlags">343014976</int>
+                                                       <int key="NSCellFlags">342884416</int>
                                                        <int key="NSCellFlags2">272761856</int>
                                                        <string key="NSContents"/>
                                                        <reference key="NSSupport" ref="26"/>
                                                                <reference key="NSSuperview"/>
                                                                <reference key="NSWindow"/>
                                                                <bool key="NSEnabled">YES</bool>
+                                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+                                                               <bool key="NSControlAllowsExpansionToolTips">YES</bool>
                                                                <object class="NSMutableArray" key="NSTableColumns">
                                                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                                                        <object class="NSTableColumn">
                                                                                <double key="NSMinWidth">10</double>
                                                                                <double key="NSMaxWidth">1000</double>
                                                                                <object class="NSTableHeaderCell" key="NSHeaderCell">
-                                                                                       <int key="NSCellFlags">75628032</int>
+                                                                                       <int key="NSCellFlags">75497472</int>
                                                                                        <int key="NSCellFlags2">0</int>
                                                                                        <object class="NSMutableString" key="NSContents">
                                                                                                <characters key="NS.bytes"/>
                                                                                        <reference key="NSTextColor" ref="993015046"/>
                                                                                </object>
                                                                                <object class="NSTextFieldCell" key="NSDataCell">
-                                                                                       <int key="NSCellFlags">338820672</int>
+                                                                                       <int key="NSCellFlags">338690112</int>
                                                                                        <int key="NSCellFlags2">1024</int>
                                                                                        <reference key="NSSupport" ref="26"/>
                                                                                        <reference key="NSControlView" ref="734498420"/>
                                                                <int key="NSTableViewGroupRowStyle">1</int>
                                                        </object>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSTextField" id="389101877">
                                                <reference key="NSNextResponder" ref="332598366"/>
                                                <reference key="NSNextKeyView" ref="172081130"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="459708758">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">272760832</int>
                                                        <string key="NSContents">Native Language:</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSBackgroundColor" ref="525377782"/>
                                                        <reference key="NSTextColor" ref="887152126"/>
                                                </object>
-                                       </object>
-                                       <object class="NSTextField" id="247298122">
-                                               <reference key="NSNextResponder" ref="332598366"/>
-                                               <int key="NSvFlags">256</int>
-                                               <string key="NSFrame">{{90, 55}, {31, 14}}</string>
-                                               <reference key="NSSuperview" ref="332598366"/>
-                                               <reference key="NSWindow"/>
-                                               <reference key="NSNextKeyView" ref="1054432492"/>
-                                               <bool key="NSEnabled">YES</bool>
-                                               <object class="NSTextFieldCell" key="NSCell" id="954547948">
-                                                       <int key="NSCellFlags">67239424</int>
-                                                       <int key="NSCellFlags2">272760832</int>
-                                                       <string key="NSContents">AAC:</string>
-                                                       <reference key="NSSupport" ref="26"/>
-                                                       <reference key="NSControlView" ref="247298122"/>
-                                                       <reference key="NSBackgroundColor" ref="525377782"/>
-                                                       <reference key="NSTextColor" ref="887152126"/>
-                                               </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSComboBox" id="172081130">
                                                <reference key="NSNextResponder" ref="332598366"/>
                                                <reference key="NSNextKeyView" ref="725503362"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSComboBoxCell" key="NSCell" id="210320026">
-                                                       <int key="NSCellFlags">343014976</int>
+                                                       <int key="NSCellFlags">342884416</int>
                                                        <int key="NSCellFlags2">272761856</int>
                                                        <string key="NSContents">English</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                                <reference key="NSSuperview"/>
                                                                <reference key="NSWindow"/>
                                                                <bool key="NSEnabled">YES</bool>
+                                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+                                                               <bool key="NSControlAllowsExpansionToolTips">YES</bool>
                                                                <object class="NSMutableArray" key="NSTableColumns">
                                                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                                                        <object class="NSTableColumn">
                                                                                <double key="NSMinWidth">10</double>
                                                                                <double key="NSMaxWidth">1000</double>
                                                                                <object class="NSTableHeaderCell" key="NSHeaderCell">
-                                                                                       <int key="NSCellFlags">75628032</int>
+                                                                                       <int key="NSCellFlags">75497472</int>
                                                                                        <int key="NSCellFlags2">0</int>
                                                                                        <object class="NSMutableString" key="NSContents">
                                                                                                <characters key="NS.bytes"/>
                                                                                        <reference key="NSTextColor" ref="993015046"/>
                                                                                </object>
                                                                                <object class="NSTextFieldCell" key="NSDataCell">
-                                                                                       <int key="NSCellFlags">338820672</int>
+                                                                                       <int key="NSCellFlags">338690112</int>
                                                                                        <int key="NSCellFlags2">1024</int>
                                                                                        <reference key="NSSupport" ref="26"/>
                                                                                        <reference key="NSControlView" ref="686758712"/>
                                                                <int key="NSTableViewGroupRowStyle">1</int>
                                                        </object>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSButton" id="168948265">
                                                <reference key="NSNextResponder" ref="332598366"/>
                                                <int key="NSvFlags">256</int>
-                                               <string key="NSFrame">{{91, 18}, {292, 26}}</string>
+                                               <string key="NSFrame">{{122, 45}, {248, 26}}</string>
                                                <reference key="NSSuperview" ref="332598366"/>
                                                <reference key="NSWindow"/>
-                                               <reference key="NSNextKeyView"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="686321393">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">0</int>
                                                        <string key="NSContents">Show advanced options for Auto Passthru</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSControlView" ref="168948265"/>
-                                                       <int key="NSButtonFlags">1211912703</int>
+                                                       <int key="NSButtonFlags">1211912448</int>
                                                        <int key="NSButtonFlags2">2</int>
                                                        <reference key="NSAlternateImage" ref="1056213191"/>
                                                        <string key="NSAlternateContents"/>
                                                        <int key="NSPeriodicDelay">200</int>
                                                        <int key="NSPeriodicInterval">25</int>
                                                </object>
-                                       </object>
-                                       <object class="NSButton" id="1054432492">
-                                               <reference key="NSNextResponder" ref="332598366"/>
-                                               <int key="NSvFlags">268</int>
-                                               <string key="NSFrame">{{123, 53}, {333, 18}}</string>
-                                               <reference key="NSSuperview" ref="332598366"/>
-                                               <reference key="NSWindow"/>
-                                               <reference key="NSNextKeyView" ref="168948265"/>
-                                               <bool key="NSEnabled">YES</bool>
-                                               <object class="NSButtonCell" key="NSCell" id="787274685">
-                                                       <int key="NSCellFlags">-2080244224</int>
-                                                       <int key="NSCellFlags2">131072</int>
-                                                       <string key="NSContents">Use CoreAudio instead of FAAC for Built-In Presets</string>
-                                                       <reference key="NSSupport" ref="26"/>
-                                                       <reference key="NSControlView" ref="1054432492"/>
-                                                       <int key="NSButtonFlags">1211912703</int>
-                                                       <int key="NSButtonFlags2">130</int>
-                                                       <reference key="NSNormalImage" ref="491838135"/>
-                                                       <reference key="NSAlternateImage" ref="1056213191"/>
-                                                       <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="NSFrameSize">{492, 157}</string>
                                <string key="NSExtension">NSResponder</string>
                        </object>
                        <object class="NSCustomView" id="23728330">
-                               <reference key="NSNextResponder"/>
+                               <nil key="NSNextResponder"/>
                                <int key="NSvFlags">256</int>
                                <object class="NSMutableArray" key="NSSubviews">
                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                                <int key="NSvFlags">268</int>
                                                <string key="NSFrame">{{302, 172}, {48, 19}}</string>
                                                <reference key="NSSuperview" ref="23728330"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="701867067"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="607341761">
-                                                       <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="NSColor" ref="897199777"/>
                                                        </object>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSTextField" id="226601760">
                                                <reference key="NSNextResponder" ref="23728330"/>
                                                <int key="NSvFlags">256</int>
                                                <string key="NSFrame">{{17, 207}, {280, 14}}</string>
                                                <reference key="NSSuperview" ref="23728330"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="822080053"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="1064438472">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">71434240</int>
                                                        <string key="NSContents">x264 Constant Quality fractional granularity:</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSBackgroundColor" ref="525377782"/>
                                                        <reference key="NSTextColor" ref="887152126"/>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSTextField" id="469378299">
                                                <reference key="NSNextResponder" ref="23728330"/>
                                                <int key="NSvFlags">256</int>
                                                <string key="NSFrame">{{48, 175}, {249, 14}}</string>
                                                <reference key="NSSuperview" ref="23728330"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="62457548"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="552368920">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">71434240</int>
                                                        <string key="NSContents">Minimum length of title to scan (seconds):</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSBackgroundColor" ref="525377782"/>
                                                        <reference key="NSTextColor" ref="887152126"/>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSTextField" id="701867067">
                                                <reference key="NSNextResponder" ref="23728330"/>
                                                <int key="NSvFlags">256</int>
                                                <string key="NSFrame">{{99, 145}, {198, 14}}</string>
                                                <reference key="NSSuperview" ref="23728330"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="772611942"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="978611587">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">71434240</int>
                                                        <string key="NSContents">Number of picture previews to scan:</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSBackgroundColor" ref="525377782"/>
                                                        <reference key="NSTextColor" ref="887152126"/>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSTextField" id="173328305">
                                                <reference key="NSNextResponder" ref="23728330"/>
                                                <int key="NSvFlags">256</int>
                                                <string key="NSFrame">{{137, 53}, {160, 15}}</string>
                                                <reference key="NSSuperview" ref="23728330"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="895206300"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="271531935">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">4325376</int>
                                                        <string key="NSContents">Activity Log Verbosity Level:</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSBackgroundColor" ref="525377782"/>
                                                        <reference key="NSTextColor" ref="887152126"/>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSTextField" id="899831697">
                                                <reference key="NSNextResponder" ref="23728330"/>
                                                <int key="NSvFlags">256</int>
                                                <string key="NSFrame">{{108, 76}, {27, 14}}</string>
                                                <reference key="NSSuperview" ref="23728330"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="907177043"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="483848741">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">272760832</int>
                                                        <string key="NSContents">Log:</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSBackgroundColor" ref="525377782"/>
                                                        <reference key="NSTextColor" ref="887152126"/>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSTextField" id="898312631">
                                                <reference key="NSNextResponder" ref="23728330"/>
                                                <int key="NSvFlags">256</int>
                                                <string key="NSFrame">{{70, 110}, {65, 14}}</string>
                                                <reference key="NSSuperview" ref="23728330"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="745324926"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="1062716368">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">272760832</int>
                                                        <string key="NSContents">Dvd-Video:</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSBackgroundColor" ref="525377782"/>
                                                        <reference key="NSTextColor" ref="887152126"/>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSButton" id="907177043">
                                                <reference key="NSNextResponder" ref="23728330"/>
                                                <int key="NSvFlags">256</int>
                                                <string key="NSFrame">{{137, 74}, {304, 18}}</string>
                                                <reference key="NSSuperview" ref="23728330"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="173328305"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="869757541">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">131072</int>
                                                        <string key="NSContents">Put individual encode logs in same location as movie</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSControlView" ref="907177043"/>
-                                                       <int key="NSButtonFlags">1211912703</int>
+                                                       <int key="NSButtonFlags">1211912448</int>
                                                        <int key="NSButtonFlags2">2</int>
                                                        <reference key="NSAlternateImage" ref="1056213191"/>
                                                        <string key="NSAlternateContents"/>
                                                        <int key="NSPeriodicDelay">200</int>
                                                        <int key="NSPeriodicInterval">25</int>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSButton" id="745324926">
                                                <reference key="NSNextResponder" ref="23728330"/>
                                                <int key="NSvFlags">256</int>
                                                <string key="NSFrame">{{137, 108}, {220, 18}}</string>
                                                <reference key="NSSuperview" ref="23728330"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="899831697"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="884409108">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">131072</int>
                                                        <string key="NSContents">Use libdvdnav (instead of libdvdread)</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSControlView" ref="745324926"/>
-                                                       <int key="NSButtonFlags">1211912703</int>
+                                                       <int key="NSButtonFlags">1211912448</int>
                                                        <int key="NSButtonFlags2">2</int>
                                                        <reference key="NSAlternateImage" ref="1056213191"/>
                                                        <string key="NSAlternateContents"/>
                                                        <int key="NSPeriodicDelay">200</int>
                                                        <int key="NSPeriodicInterval">25</int>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSButton" id="712613872">
                                                <reference key="NSNextResponder" ref="23728330"/>
                                                <int key="NSvFlags">256</int>
                                                <string key="NSFrame">{{137, 18}, {217, 18}}</string>
                                                <reference key="NSSuperview" ref="23728330"/>
-                                               <reference key="NSWindow"/>
-                                               <reference key="NSNextKeyView"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSButtonCell" key="NSCell" id="562265695">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">131072</int>
                                                        <string key="NSContents">Alert when updating built-in presets</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSControlView" ref="712613872"/>
-                                                       <int key="NSButtonFlags">1211912703</int>
+                                                       <int key="NSButtonFlags">1211912448</int>
                                                        <int key="NSButtonFlags2">2</int>
                                                        <reference key="NSAlternateImage" ref="1056213191"/>
                                                        <string key="NSAlternateContents"/>
                                                        <int key="NSPeriodicDelay">200</int>
                                                        <int key="NSPeriodicInterval">25</int>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSPopUpButton" id="772611942">
                                                <reference key="NSNextResponder" ref="23728330"/>
                                                <int key="NSvFlags">268</int>
                                                <string key="NSFrame">{{299, 140}, {73, 22}}</string>
                                                <reference key="NSSuperview" ref="23728330"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="898312631"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSPopUpButtonCell" key="NSCell" id="413609467">
-                                                       <int key="NSCellFlags">-2076049856</int>
+                                                       <int key="NSCellFlags">-2076180416</int>
                                                        <int key="NSCellFlags2">133120</int>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSControlView" ref="772611942"/>
-                                                       <int key="NSButtonFlags">109199615</int>
+                                                       <int key="NSButtonFlags">109199360</int>
                                                        <int key="NSButtonFlags2">129</int>
                                                        <string key="NSAlternateContents"/>
                                                        <string key="NSKeyEquivalent"/>
                                                        <int key="NSPeriodicDelay">400</int>
                                                        <int key="NSPeriodicInterval">75</int>
-                                                       <nil key="NSMenuItem"/>
+                                                       <object class="NSMenuItem" key="NSMenuItem" id="165310533">
+                                                               <reference key="NSMenu" ref="743346318"/>
+                                                               <string key="NSTitle">10</string>
+                                                               <string key="NSKeyEquiv"/>
+                                                               <int key="NSKeyEquivModMask">1048576</int>
+                                                               <int key="NSMnemonicLoc">2147483647</int>
+                                                               <int key="NSState">1</int>
+                                                               <reference key="NSOnImage" ref="13790404"/>
+                                                               <reference key="NSMixedImage" ref="218367874"/>
+                                                               <string key="NSAction">_popUpItemAction:</string>
+                                                               <reference key="NSTarget" ref="413609467"/>
+                                                       </object>
                                                        <bool key="NSMenuItemRespectAlignment">YES</bool>
                                                        <object class="NSMenu" key="NSMenu" id="743346318">
                                                                <string key="NSTitle">OtherViews</string>
                                                                <object class="NSMutableArray" key="NSMenuItems">
                                                                        <bool key="EncodedWithXMLCoder">YES</bool>
-                                                                       <object class="NSMenuItem" id="165310533">
-                                                                               <reference key="NSMenu" ref="743346318"/>
-                                                                               <string key="NSTitle">10</string>
-                                                                               <string key="NSKeyEquiv"/>
-                                                                               <int key="NSKeyEquivModMask">1048576</int>
-                                                                               <int key="NSMnemonicLoc">2147483647</int>
-                                                                               <reference key="NSOnImage" ref="13790404"/>
-                                                                               <reference key="NSMixedImage" ref="218367874"/>
-                                                                               <string key="NSAction">_popUpItemAction:</string>
-                                                                               <reference key="NSTarget" ref="413609467"/>
-                                                                       </object>
+                                                                       <reference ref="165310533"/>
                                                                        <object class="NSMenuItem" id="477590220">
                                                                                <reference key="NSMenu" ref="743346318"/>
                                                                                <string key="NSTitle">15</string>
                                                        <bool key="NSAltersState">YES</bool>
                                                        <int key="NSArrowPosition">2</int>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                        <object class="NSPopUpButton" id="822080053">
                                                <reference key="NSNextResponder" ref="23728330"/>
                                                <int key="NSvFlags">268</int>
                                                <string key="NSFrame">{{299, 202}, {76, 22}}</string>
                                                <reference key="NSSuperview" ref="23728330"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="469378299"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSPopUpButtonCell" key="NSCell" id="434430620">
-                                                       <int key="NSCellFlags">-2076049856</int>
+                                                       <int key="NSCellFlags">-2076180416</int>
                                                        <int key="NSCellFlags2">133120</int>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSControlView" ref="822080053"/>
-                                                       <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="NSPopUpButton" id="895206300">
                                                <reference key="NSNextResponder" ref="23728330"/>
                                                <int key="NSvFlags">268</int>
                                                <string key="NSFrame">{{303, 49}, {66, 22}}</string>
                                                <reference key="NSSuperview" ref="23728330"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="200780219"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSPopUpButtonCell" key="NSCell" id="290473288">
-                                                       <int key="NSCellFlags">-2076049856</int>
+                                                       <int key="NSCellFlags">-2076180416</int>
                                                        <int key="NSCellFlags2">133120</int>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSControlView" ref="895206300"/>
-                                                       <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="200780219">
                                                <reference key="NSNextResponder" ref="23728330"/>
                                                <int key="NSvFlags">256</int>
                                                <string key="NSFrame">{{89, 20}, {46, 14}}</string>
                                                <reference key="NSSuperview" ref="23728330"/>
-                                               <reference key="NSWindow"/>
                                                <reference key="NSNextKeyView" ref="712613872"/>
                                                <bool key="NSEnabled">YES</bool>
                                                <object class="NSTextFieldCell" key="NSCell" id="221545613">
-                                                       <int key="NSCellFlags">67239424</int>
+                                                       <int key="NSCellFlags">67108864</int>
                                                        <int key="NSCellFlags2">272760832</int>
                                                        <string key="NSContents">Presets:</string>
                                                        <reference key="NSSupport" ref="26"/>
                                                        <reference key="NSBackgroundColor" ref="525377782"/>
                                                        <reference key="NSTextColor" ref="887152126"/>
                                                </object>
+                                               <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
                                        </object>
                                </object>
                                <string key="NSFrameSize">{495, 241}</string>
-                               <reference key="NSSuperview"/>
-                               <reference key="NSWindow"/>
                                <reference key="NSNextKeyView" ref="226601760"/>
                                <object class="NSMutableString" key="NSClassName">
                                        <characters key="NS.bytes">NSView</characters>
                                        </object>
                                        <int key="connectionID">403</int>
                                </object>
-                               <object class="IBConnectionRecord">
-                                       <object class="IBBindingConnection" key="connection">
-                                               <string key="label">value: values.UseCoreAudio</string>
-                                               <reference key="source" ref="1054432492"/>
-                                               <reference key="destination" ref="580534391"/>
-                                               <object class="NSNibBindingConnector" key="connector">
-                                                       <reference key="NSSource" ref="1054432492"/>
-                                                       <reference key="NSDestination" ref="580534391"/>
-                                                       <string key="NSLabel">value: values.UseCoreAudio</string>
-                                                       <string key="NSBinding">value</string>
-                                                       <string key="NSKeyPath">values.UseCoreAudio</string>
-                                                       <int key="NSNibBindingConnectorVersion">2</int>
-                                               </object>
-                                       </object>
-                                       <int key="connectionID">409</int>
-                               </object>
                                <object class="IBConnectionRecord">
                                        <object class="IBBindingConnection" key="connection">
                                                <string key="label">enabled: automaticallyChecksForUpdates</string>
                                                        <reference ref="725503362"/>
                                                        <reference ref="113289239"/>
                                                        <reference ref="172081130"/>
-                                                       <reference ref="1054432492"/>
                                                        <reference ref="168948265"/>
-                                                       <reference ref="247298122"/>
                                                </object>
                                                <reference key="parent" ref="0"/>
                                                <string key="objectName">Audio</string>
                                                <reference key="object" ref="562265695"/>
                                                <reference key="parent" ref="712613872"/>
                                        </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">406</int>
-                                               <reference key="object" ref="1054432492"/>
-                                               <object class="NSMutableArray" key="children">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <reference ref="787274685"/>
-                                               </object>
-                                               <reference key="parent" ref="332598366"/>
-                                       </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">407</int>
-                                               <reference key="object" ref="787274685"/>
-                                               <reference key="parent" ref="1054432492"/>
-                                       </object>
                                        <object class="IBObjectRecord">
                                                <int key="objectID">410</int>
                                                <reference key="object" ref="413269307"/>
                                                <reference key="object" ref="221545613"/>
                                                <reference key="parent" ref="200780219"/>
                                        </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">446</int>
-                                               <reference key="object" ref="247298122"/>
-                                               <object class="NSMutableArray" key="children">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <reference ref="954547948"/>
-                                               </object>
-                                               <reference key="parent" ref="332598366"/>
-                                       </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">447</int>
-                                               <reference key="object" ref="954547948"/>
-                                               <reference key="parent" ref="247298122"/>
-                                       </object>
                                        <object class="IBObjectRecord">
                                                <int key="objectID">448</int>
                                                <reference key="object" ref="842132572"/>
                                        <string>399.IBPluginDependency</string>
                                        <string>401.IBPluginDependency</string>
                                        <string>402.IBPluginDependency</string>
-                                       <string>406.IBPluginDependency</string>
-                                       <string>407.IBPluginDependency</string>
                                        <string>410.IBPluginDependency</string>
                                        <string>414.IBPluginDependency</string>
                                        <string>415.IBPluginDependency</string>
                                        <string>443.IBPluginDependency</string>
                                        <string>444.IBPluginDependency</string>
                                        <string>445.IBPluginDependency</string>
-                                       <string>446.IBPluginDependency</string>
-                                       <string>447.IBPluginDependency</string>
                                        <string>448.IBPluginDependency</string>
                                        <string>449.IBPluginDependency</string>
                                        <string>450.IBPluginDependency</string>
                                        <string>6.IBPluginDependency</string>
                                        <string>61.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>
                                        <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.InterfaceBuilder.CocoaPlugin</string>
                                        <string>{{69, 656}, {500, 200}}</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                                        <string>fPictureView</string>
                                                        <string>fSendEncodeToAppField</string>
                                                </object>
-                                               <object class="NSMutableArray" key="dict.values">
+                                               <object class="NSArray" key="dict.values">
                                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                                        <string>NSView</string>
                                                        <string>NSView</string>
                                                        <string>fPictureView</string>
                                                        <string>fSendEncodeToAppField</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">fAdvancedView</string>
                                <string>NSMenuMixedState</string>
                                <string>NSSwitch</string>
                        </object>
-                       <object class="NSMutableArray" key="dict.values">
+                       <object class="NSArray" key="dict.values">
                                <bool key="EncodedWithXMLCoder">YES</bool>
                                <string>{11, 11}</string>
                                <string>{10, 3}</string>
index 52cc8284b7aef6075f28b1c57310a1392b5a501c..30a2f5e9575ce7b6c3920a9621a1810d2e0de2de 100644 (file)
@@ -295,19 +295,8 @@ NSString *HBMixdownChangedNotification = @"HBMixdownChangedNotification";
             [newAudio setVideoContainerTag: [self videoContainerTag]];
             [newAudio setTrackFromIndex: trackIndex];
 
-            // map faac to ca_aac for built-in presets (can be disabled in preferences)
-            if (0 == aType &&
-                [[NSUserDefaults standardUserDefaults] boolForKey:@"UseCoreAudio"] &&
-                [[dict objectForKey:@"AudioEncoder"] isEqualToString:@"AAC (faac)"])
-            {
-                key = @"AAC (CoreAudio)";
-            }
-            else
-            {
-                key = [dict objectForKey:@"AudioEncoder"];
-            }
-
             // map legacy encoder names via libhb
+            key = [dict objectForKey:@"AudioEncoder"];
             if (key != nil)
             {
                 const char *name;
index 4e5baccd1a3d24618cf7d57bd26d629ebedf62b2..82bdc4d7be1e10f5e8e8f6e8cbe95557722ce217 100644 (file)
@@ -45,7 +45,6 @@
         @"YES",             @"CheckForUpdates",
         @"Open Source",     @"LaunchSourceBehavior",
         @"English",         @"DefaultLanguage",
-        @"YES",             @"UseCoreAudio",
         @"Auto",            @"DefaultMpegExtension",
         @"YES",             @"UseDvdNav",
         @"",                @"DefAdvancedx264Flags",
index 0281a436520c43ed0e35883504a9c3ce791dea1e..a97284b1182cd80c22fb5fac6ec17d21d2e130f7 100644 (file)
@@ -60,6 +60,7 @@
     [childrenArray addObject:[self createAppleTV3Preset]];
     [childrenArray addObject:[self createAndroidPreset]];
     [childrenArray addObject:[self createAndroidTabletPreset]];
+    [childrenArray addObject:[self createW8PhonePreset]];
     
     /* Add the individual presets to the folder */
     [preset setObject:[NSMutableArray arrayWithArray:childrenArray]
     return preset;
 }
 
+- (NSDictionary *)createW8PhonePreset
+{
+    NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+    
+    /* Preset properties (name, type: factory/user, default, folder, tooltip) */
+    [preset setObject:@"Windows Phone 8"            forKey:@"PresetName"];
+    [preset setObject:[NSNumber numberWithInt:0]   forKey:@"Type"]; //factory
+    [preset setObject:[NSNumber numberWithInt:0]   forKey:@"Default"];
+    [preset setObject:[NSNumber numberWithBool:NO] forKey:@"Folder"];
+    [preset setObject:@"HandBrake's preset for Windows Phone 8 devices"
+               forKey:@"PresetDescription"];
+    
+    /* Container format and related settings */
+    [preset setObject:@"MP4 file"                forKey:@"FileFormat"];
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4LargeFile"];
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4HttpOptimize"];
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"Mp4iPodCompatible"];
+    
+    /* Chapter markers */
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"ChapterMarkers"];
+    
+    /* Video encoder and advanced options */
+    [preset setObject:@"H.264 (x264)"            forKey:@"VideoEncoder"];
+    [preset setObject:@""                        forKey:@"lavcOption"];
+    [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 rate control */
+    [preset setObject:@"2500"                         forKey:@"VideoAvgBitrate"];
+    [preset setObject:[NSNumber numberWithInt:0]      forKey:@"VideoTwoPass"];
+    [preset setObject:[NSNumber numberWithInt:0]      forKey:@"VideoTurboTwoPass"];
+    [preset setObject:[NSNumber numberWithInt:2]      forKey:@"VideoQualityType"]; //cq
+    [preset setObject:[NSNumber numberWithFloat:22.0] forKey:@"VideoQualitySlider"];
+    
+    /* Video frame rate */
+    [preset setObject:@"30"  forKey:@"VideoFramerate"];
+    [preset setObject:@"pfr" forKey:@"VideoFramerateMode"];
+    
+    /* Picture size */
+    [preset setObject:[NSNumber numberWithInt:1]    forKey:@"UsesPictureSettings"];
+    [preset setObject:[NSNumber numberWithInt:1280] forKey:@"PictureWidth"];
+    [preset setObject:[NSNumber numberWithInt:720]  forKey:@"PictureHeight"];
+    [preset setObject:[NSNumber numberWithInt:2]    forKey:@"PicturePAR"]; //loose
+    [preset setObject:[NSNumber numberWithInt:2]    forKey:@"PictureModulus"];
+    [preset setObject:[NSNumber numberWithInt:0]    forKey:@"PictureKeepRatio"]; //set to 0 for Loose (FIXME: why?)
+    
+    /* Picture filters */
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDecomb"]; //off
+    [preset setObject:@""                        forKey:@"PictureDecombCustom"];
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureDecombDeinterlace"]; //decomb
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
+    [preset setObject:@""                        forKey:@"PictureDeinterlaceCustom"];
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
+    [preset setObject:@""                        forKey:@"PictureDetelecineCustom"];
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
+    [preset setObject:@""                        forKey:@"PictureDenoiseCustom"];
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
+    
+    /* Picture crop */
+    [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"];
+    
+    /* Auto Passthru */
+    [preset setObject:@"AC3 (ffmpeg)"            forKey:@"AudioEncoderFallback"];
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"AudioAllowAACPass"];
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"AudioAllowAC3Pass"];
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"AudioAllowDTSHDPass"];
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"AudioAllowDTSPass"];
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"AudioAllowMP3Pass"];
+    
+    /* Audio track list - no need to add "None" at the end */
+    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:@"AudioTrackGainSlider"];
+    [audioTrack1Array setObject:[NSNumber numberWithFloat:0.0] forKey:@"AudioTrackDRCSlider"];
+    [audioTrack1Array autorelease];
+    [audioListArray addObject:audioTrack1Array];
+    /* Add the audio track(s) to the preset's audio list */
+    [preset setObject:[NSMutableArray arrayWithArray:audioListArray] forKey:@"AudioList"];
+    
+    /* Subtitles (note: currently ignored) */
+    [preset setObject:@"None" forKey:@"Subtitles"];
+    
+    /* Clean up and return the preset */
+    [preset autorelease];
+    return preset;
+}
+
 - (NSDictionary *)createNormalPreset
 {
     NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
index df3329743646005f0161cf42b51429622b855ac6..6762c87e8759f67c698e78d88140aeb7253680cb 100644 (file)
@@ -92,8 +92,6 @@
                27D6C75014B102DA00B785E4 /* libdvdnav.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72E14B102DA00B785E4 /* libdvdnav.a */; };
                27D6C75114B102DA00B785E4 /* libdvdread.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72F14B102DA00B785E4 /* libdvdread.a */; };
                27D6C75214B102DA00B785E4 /* libdvdread.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72F14B102DA00B785E4 /* libdvdread.a */; };
-               27D6C75314B102DA00B785E4 /* libfaac.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73014B102DA00B785E4 /* libfaac.a */; };
-               27D6C75414B102DA00B785E4 /* libfaac.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73014B102DA00B785E4 /* libfaac.a */; };
                27D6C75514B102DA00B785E4 /* libfontconfig.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73114B102DA00B785E4 /* libfontconfig.a */; };
                27D6C75614B102DA00B785E4 /* libfontconfig.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73114B102DA00B785E4 /* libfontconfig.a */; };
                27D6C75714B102DA00B785E4 /* libfreetype.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C73214B102DA00B785E4 /* libfreetype.a */; };
                27D6C72C14B102DA00B785E4 /* libbluray.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libbluray.a; path = external/contrib/lib/libbluray.a; sourceTree = BUILT_PRODUCTS_DIR; };
                27D6C72E14B102DA00B785E4 /* libdvdnav.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libdvdnav.a; path = external/contrib/lib/libdvdnav.a; sourceTree = BUILT_PRODUCTS_DIR; };
                27D6C72F14B102DA00B785E4 /* libdvdread.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libdvdread.a; path = external/contrib/lib/libdvdread.a; sourceTree = BUILT_PRODUCTS_DIR; };
-               27D6C73014B102DA00B785E4 /* libfaac.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfaac.a; path = external/contrib/lib/libfaac.a; sourceTree = BUILT_PRODUCTS_DIR; };
                27D6C73114B102DA00B785E4 /* libfontconfig.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfontconfig.a; path = external/contrib/lib/libfontconfig.a; sourceTree = BUILT_PRODUCTS_DIR; };
                27D6C73214B102DA00B785E4 /* libfreetype.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfreetype.a; path = external/contrib/lib/libfreetype.a; sourceTree = BUILT_PRODUCTS_DIR; };
                27D6C73314B102DA00B785E4 /* libfribidi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfribidi.a; path = external/contrib/lib/libfribidi.a; sourceTree = BUILT_PRODUCTS_DIR; };
                                27D6C74C14B102DA00B785E4 /* libbluray.a in Frameworks */,
                                27D6C75014B102DA00B785E4 /* libdvdnav.a in Frameworks */,
                                27D6C75214B102DA00B785E4 /* libdvdread.a in Frameworks */,
-                               27D6C75414B102DA00B785E4 /* libfaac.a in Frameworks */,
                                27D6C75614B102DA00B785E4 /* libfontconfig.a in Frameworks */,
                                27D6C75814B102DA00B785E4 /* libfreetype.a in Frameworks */,
                                27D6C75A14B102DA00B785E4 /* libfribidi.a in Frameworks */,
                                27D6C74B14B102DA00B785E4 /* libbluray.a in Frameworks */,
                                27D6C74F14B102DA00B785E4 /* libdvdnav.a in Frameworks */,
                                27D6C75114B102DA00B785E4 /* libdvdread.a in Frameworks */,
-                               27D6C75314B102DA00B785E4 /* libfaac.a in Frameworks */,
                                27D6C75514B102DA00B785E4 /* libfontconfig.a in Frameworks */,
                                27D6C75714B102DA00B785E4 /* libfreetype.a in Frameworks */,
                                27D6C75914B102DA00B785E4 /* libfribidi.a in Frameworks */,
                                27D6C72C14B102DA00B785E4 /* libbluray.a */,
                                27D6C72E14B102DA00B785E4 /* libdvdnav.a */,
                                27D6C72F14B102DA00B785E4 /* libdvdread.a */,
-                               27D6C73014B102DA00B785E4 /* libfaac.a */,
                                27D6C73114B102DA00B785E4 /* libfontconfig.a */,
                                27D6C73214B102DA00B785E4 /* libfreetype.a */,
                                27D6C73314B102DA00B785E4 /* libfribidi.a */,
index 1870d5fe9d69ee1df47b6e3b21754e76e1ea272b..1a2b6f81db14719971669d8fdc6dafadfb1bea98 100644 (file)
@@ -26,9 +26,14 @@ MACOSX.map.g.std  = debug
 MACOSX.map.g.max  = debug
 
 ifeq (1,$(FEATURE.fdk_aac))
-MACOSX.extra_ldflags = OTHER_LDFLAGS='$(abspath $(BUILD))/contrib/lib/libfdk-aac.a'
+    extra_libs += $(abspath $(BUILD))/contrib/lib/libfdk-aac.a
 endif
 
+ifeq (1,$(FEATURE.faac))
+    extra_libs += $(abspath $(BUILD))/contrib/lib/libfaac.a
+endif
+MACOSX.extra_ldflags = OTHER_LDFLAGS='$(extra_libs)'
+
 ## xcconfig: must be one of macosx/xcconfig/*.xcconfig
 MACOSX.xcconfig = $(foreach x,$(XCODE.xcconfig),-xcconfig $(MACOSX.src/)xcconfig/$(x))
 MACOSX.sdk      = $(foreach sdk,$(GCC.sysroot),-sdk $(sdk))
index 8dbe78a5671a5e978ea1db9aba45198fddc4d501..2cb3d391d02d95a0e58e20d405f76ee07481e290 100644 (file)
@@ -1179,7 +1179,16 @@ def createCLI():
     grp.add_option( '--enable-qsv', default=False, action='store_true', help=h )
     
     h = IfHost( 'enable use of fdk-aac encoder', '*-*-*', none=optparse.SUPPRESS_HELP ).value
-    grp.add_option( '--enable-fdk-aac', default=False, action='store_true', help=h )
+    grp.add_option( '--enable-fdk-aac', dest="enable_fdk_aac", default=not host.match( '*-*-darwin*' ), action='store_true', help=h )
+    grp.add_option( '--disable-fdk-aac', dest="enable_fdk_aac", action='store_false' )
+
+    h = IfHost( 'enable use of libav aac encoder', '*-*-*', none=optparse.SUPPRESS_HELP ).value
+    grp.add_option( '--enable-libav-aac', dest="enable_libav_aac", default=not host.match( '*-*-darwin*' ), action='store_true', help=h )
+    grp.add_option( '--disable-libav-aac', dest="enable_libav_aac", action='store_false' )
+
+    h = IfHost( 'enable use of faac encoder', '*-*-*', none=optparse.SUPPRESS_HELP ).value
+    grp.add_option( '--enable-faac', dest="enable_faac", default=False, action='store_true', help=h )
+    grp.add_option( '--disable-faac', dest="enable_faac", action='store_false' )
 
     cli.add_option_group( grp )
 
@@ -1620,7 +1629,9 @@ int main ()
     doc.add( 'FEATURE.gtk.mingw',  int( options.enable_gtk_mingw ))
     doc.add( 'FEATURE.gst',        int( not options.disable_gst ))
     doc.add( 'FEATURE.ff.mpeg2',   int( options.enable_ff_mpeg2 ))
-    doc.add( 'FEATURE.fdk_aac',   int( options.enable_fdk_aac ))
+    doc.add( 'FEATURE.fdk_aac',    int( options.enable_fdk_aac ))
+    doc.add( 'FEATURE.libav_aac',  int( options.enable_libav_aac ))
+    doc.add( 'FEATURE.faac',       int( options.enable_faac ))
     doc.add( 'FEATURE.qsv',        int( options.enable_qsv ))
     doc.add( 'FEATURE.xcode',      int( not (Tools.xcodebuild.fail or options.disable_xcode or options.cross) ))
 
index 7031188562d6d91cbe95c355def0015bcf5abad4..d4d3ee0fbad8daed33e6d2bde133d45bde987d36 100644 (file)
@@ -43,8 +43,11 @@ ifeq (1,$(FEATURE.fdk_aac))
     MODULES += contrib/fdk-aac
 endif
 
+ifeq (1,$(FEATURE.faac))
+    MODULES += contrib/faac
+endif
+
 MODULES += contrib/lame
-MODULES += contrib/faac
 MODULES += contrib/ffmpeg
 MODULES += contrib/libdvdread
 MODULES += contrib/libdvdnav
index b8be37432923da933f9170ed173860db26c7a77e..83b991dd92c38b27d7d73ac39a501dfdabcd2d0b 100755 (executable)
@@ -280,16 +280,16 @@ class Display
     end
     
     #Video encoder
-    if hash["VideoEncoder"] != "MPEG-4 (FFmpeg)"
-      commandString << " -e "
-      case hash["VideoEncoder"]
-      when /x264/
-        commandString << "x264"
-      when /Theora/
-        commandString << "theora"
-      when /MPEG/
-        commandString << "ffmpeg2"
-      end
+    commandString << " -e "
+    case hash["VideoEncoder"]
+    when /x264/
+      commandString << "x264"
+    when /Theora/
+      commandString << "theora"
+    when /MPEG-4/
+      commandString << "ffmpeg4"
+    when /MPEG-2/
+      commandString << "ffmpeg2"
     end
 
     #VideoRateControl
@@ -342,23 +342,23 @@ class Display
         when /AC3 Pass/
           audioEncoders << "copy:ac3"
         when /AC3/
-          audioEncoders << "ffac3"
+          audioEncoders << "ac3"
         when /DTS Pass/
           audioEncoders << "copy:dts"
         when /DTS-HD Pass/
           audioEncoders << "copy:dtshd"
         when /AAC Pass/
           audioEncoders << "copy:aac"
-        when "AAC (FDK)"
-          audioEncoders << "fdk_aac"
         when "AAC (faac)"
           audioEncoders << "faac"
-        when "AAC (ffmpeg)"
-          audioEncoders << "ffaac"
-        when "AAC (CoreAudio)"
-          audioEncoders << "ca_aac"
+        when "AAC (ffmpeg)", "AAC (avcodec)"
+          audioEncoders << "av_aac"
+        when "AAC (FDK)"
+          audioEncoders << "fdk_aac"
         when "HE-AAC (FDK)"
           audioEncoders << "fdk_haac"
+        when "AAC (CoreAudio)"
+          audioEncoders << "ca_aac"
         when "HE-AAC (CoreAudio)"
           audioEncoders << "ca_haac"
         when /Vorbis/
@@ -366,11 +366,11 @@ class Display
         when /MP3 Pass/
           audioEncoders << "copy:mp3"
         when /MP3/
-          audioEncoders << "lame"
-        when "FLAC (ffmpeg)"
-          audioEncoders << "ffflac"
-        when "FLAC (24-bit)"
-          audioEncoders << "ffflac24"
+          audioEncoders << "mp3"
+        when "FLAC (ffmpeg)", "FLAC 16-bit"
+          audioEncoders << "flac16"
+        when "FLAC (24-bit)", "FLAC 24-bit"
+          audioEncoders << "flac24"
         when /Auto Pass/
           audioEncoders << "copy"
       end
@@ -467,17 +467,27 @@ class Display
     
     case hash["AudioEncoderFallback"]
       when /AC3/
-        audioEncoderFallback << "ffac3"
-      when "AAC (ffmpeg)"
-        audioEncoderFallback << "ffaac"
-      when /AAC/
+        audioEncoderFallback << "ac3"
+      when "AAC (faac)"
         audioEncoderFallback << "faac"
+      when "AAC (ffmpeg)", "AAC (avcodec)"
+        audioEncoderFallback << "av_aac"
+      when "AAC (FDK)"
+        audioEncoderFallback << "fdk_aac"
+      when "HE-AAC (FDK)"
+        audioEncoderFallback << "fdk_haac"
+      when "AAC (CoreAudio)"
+        audioEncoderFallback << "ca_aac"
+      when "HE-AAC (CoreAudio)"
+        audioEncoderFallback << "ca_haac"
       when /Vorbis/
         audioEncoderFallback << "vorbis"
       when /MP3/
-        audioEncoderFallback << "lame"
-      when /FLAC/
-        audioEncoderFallback << "ffflac"
+        audioEncoderFallback << "mp3"
+      when "FLAC (ffmpeg)", "FLAC 16-bit"
+        audioEncoderFallback << "flac16"
+      when "FLAC (24-bit)", "FLAC 24-bit"
+        audioEncoderFallback << "flac24"
     end
     
     if audioEncoderFallback.size > 0
@@ -678,16 +688,16 @@ class Display
     commandString << '+ ' << hash["PresetName"] << ":"
         
     #Video encoder
-    if hash["VideoEncoder"] != "MPEG-4 (FFmpeg)"
-      commandString << " -e "
-      case hash["VideoEncoder"]
-      when /x264/
-        commandString << "x264"
-      when /Theora/
-        commandString << "theora"
-      when /MPEG/
-        commandString << "ffmpeg2"
-      end
+    commandString << " -e "
+    case hash["VideoEncoder"]
+    when /x264/
+      commandString << "x264"
+    when /Theora/
+      commandString << "theora"
+    when /MPEG-4/
+      commandString << "ffmpeg4"
+    when /MPEG-2/
+      commandString << "ffmpeg2"
     end
 
     #VideoRateControl
@@ -740,23 +750,23 @@ class Display
         when /AC3 Pass/
           audioEncoders << "copy:ac3"
         when /AC3/
-          audioEncoders << "ffac3"
+          audioEncoders << "ac3"
         when /DTS Pass/
           audioEncoders << "copy:dts"
         when /DTS-HD Pass/
           audioEncoders << "copy:dtshd"
         when /AAC Pass/
           audioEncoders << "copy:aac"
-        when "AAC (FDK)"
-          audioEncoders << "fdk_aac"
         when "AAC (faac)"
           audioEncoders << "faac"
-        when "AAC (ffmpeg)"
-          audioEncoders << "ffaac"
-        when "AAC (CoreAudio)"
-          audioEncoders << "ca_aac"
+        when "AAC (ffmpeg)", "AAC (avcodec)"
+          audioEncoders << "av_aac"
+        when "AAC (FDK)"
+          audioEncoders << "fdk_aac"
         when "HE-AAC (FDK)"
           audioEncoders << "fdk_haac"
+        when "AAC (CoreAudio)"
+          audioEncoders << "ca_aac"
         when "HE-AAC (CoreAudio)"
           audioEncoders << "ca_haac"
         when /Vorbis/
@@ -764,11 +774,11 @@ class Display
         when /MP3 Pass/
           audioEncoders << "copy:mp3"
         when /MP3/
-          audioEncoders << "lame"
-        when "FLAC (ffmpeg)"
-          audioEncoders << "ffflac"
-        when "FLAC (24-bit)"
-          audioEncoders << "ffflac24"
+          audioEncoders << "mp3"
+        when "FLAC (ffmpeg)", "FLAC 16-bit"
+          audioEncoders << "flac16"
+        when "FLAC (24-bit)", "FLAC 24-bit"
+          audioEncoders << "flac24"
         when /Auto Pass/
           audioEncoders << "copy"
       end
@@ -865,17 +875,27 @@ class Display
     
     case hash["AudioEncoderFallback"]
       when /AC3/
-        audioEncoderFallback << "ffac3"
-      when "AAC (ffmpeg)"
-        audioEncoderFallback << "ffaac"
-      when /AAC/
+        audioEncoderFallback << "ac3"
+      when "AAC (faac)"
         audioEncoderFallback << "faac"
+      when "AAC (ffmpeg)", "AAC (avcodec)"
+        audioEncoderFallback << "av_aac"
+      when "AAC (FDK)"
+        audioEncoderFallback << "fdk_aac"
+      when "HE-AAC (FDK)"
+        audioEncoderFallback << "fdk_haac"
+      when "AAC (CoreAudio)"
+        audioEncoderFallback << "ca_aac"
+      when "HE-AAC (CoreAudio)"
+        audioEncoderFallback << "ca_haac"
       when /Vorbis/
         audioEncoderFallback << "vorbis"
       when /MP3/
-        audioEncoderFallback << "lame"
-      when /FLAC/
-        audioEncoderFallback << "ffflac"
+        audioEncoderFallback << "mp3"
+      when "FLAC (ffmpeg)", "FLAC 16-bit"
+        audioEncoderFallback << "flac16"
+      when "FLAC (24-bit)", "FLAC 24-bit"
+        audioEncoderFallback << "flac24"
     end
     
     if audioEncoderFallback.size > 0
@@ -1080,16 +1100,16 @@ class Display
     end
     
     #Video encoder
-    if hash["VideoEncoder"] != "MPEG-4 (FFmpeg)"
-      commandString << "vcodec = "
-      case hash["VideoEncoder"]
-      when /x264/
-        commandString << "HB_VCODEC_X264;\n    "
-      when /Theora/
-        commandString << "HB_VCODEC_THEORA;\n    "        
-      when /MPEG/
-        commandString << "HB_VCODEC_FFMPEG_MPEG2;\n    "
-      end
+    commandString << "vcodec = "
+    case hash["VideoEncoder"]
+    when /x264/
+      commandString << "HB_VCODEC_X264;\n    "
+    when /Theora/
+      commandString << "HB_VCODEC_THEORA;\n    "
+    when /MPEG-4/
+      commandString << "HB_VCODEC_FFMPEG_MPEG4;\n    "
+    when /MPEG-2/
+      commandString << "HB_VCODEC_FFMPEG_MPEG2;\n    "
     end
 
     #VideoRateControl
@@ -1144,23 +1164,23 @@ class Display
         when /AC3 Pass/
           audioEncoders << "copy:ac3"
         when /AC3/
-          audioEncoders << "ffac3"
+          audioEncoders << "ac3"
         when /DTS Pass/
           audioEncoders << "copy:dts"
         when /DTS-HD Pass/
           audioEncoders << "copy:dtshd"
         when /AAC Pass/
           audioEncoders << "copy:aac"
-        when "AAC (FDK)"
-          audioEncoders << "fdk_aac"
         when "AAC (faac)"
           audioEncoders << "faac"
-        when "AAC (ffmpeg)"
-          audioEncoders << "ffaac"
-        when "AAC (CoreAudio)"
-          audioEncoders << "ca_aac"
+        when "AAC (ffmpeg)", "AAC (avcodec)"
+          audioEncoders << "av_aac"
+        when "AAC (FDK)"
+          audioEncoders << "fdk_aac"
         when "HE-AAC (FDK)"
           audioEncoders << "fdk_haac"
+        when "AAC (CoreAudio)"
+          audioEncoders << "ca_aac"
         when "HE-AAC (CoreAudio)"
           audioEncoders << "ca_haac"
         when /Vorbis/
@@ -1168,11 +1188,11 @@ class Display
         when /MP3 Pass/
           audioEncoders << "copy:mp3"
         when /MP3/
-          audioEncoders << "lame"
-        when "FLAC (ffmpeg)"
-          audioEncoders << "ffflac"
-        when "FLAC (24-bit)"
-          audioEncoders << "ffflac24"
+          audioEncoders << "mp3"
+        when "FLAC (ffmpeg)", "FLAC 16-bit"
+          audioEncoders << "flac16"
+        when "FLAC (24-bit)", "FLAC 24-bit"
+          audioEncoders << "flac24"
         when /Auto Pass/
           audioEncoders << "copy"
       end
@@ -1287,27 +1307,27 @@ class Display
     
     case hash["AudioEncoderFallback"]
       when /AC3/
-        audioEncoderFallback << "ffac3"
-      when "AAC (FDK)"
-        audioEncoderFallback << "fdk_aac"
+        audioEncoderFallback << "ac3"
       when "AAC (faac)"
         audioEncoderFallback << "faac"
-      when "AAC (ffmpeg)"
-        audioEncoderFallback << "ffaac"
-      when "AAC (CoreAudio)"
-        audioEncoderFallback << "ca_aac"
+      when "AAC (ffmpeg)", "AAC (avcodec)"
+        audioEncoderFallback << "av_aac"
+      when "AAC (FDK)"
+        audioEncoderFallback << "fdk_aac"
       when "HE-AAC (FDK)"
         audioEncoderFallback << "fdk_haac"
+      when "AAC (CoreAudio)"
+        audioEncoderFallback << "ca_aac"
       when "HE-AAC (CoreAudio)"
         audioEncoderFallback << "ca_haac"
       when /Vorbis/
         audioEncoderFallback << "vorbis"
       when /MP3/
-        audioEncoderFallback << "lame"
-      when "FLAC (ffmpeg)"
-        audioEncoderFallback << "ffflac"
-      when "FLAC (24-bit)"
-        audioEncoderFallback << "ffflac24"
+        audioEncoderFallback << "mp3"
+      when "FLAC (ffmpeg)", "FLAC 16-bit"
+        audioEncoderFallback << "flac16"
+      when "FLAC (24-bit)", "FLAC 24-bit"
+        audioEncoderFallback << "flac24"
     end
     
     if audioEncoderFallback.size > 0
@@ -1538,16 +1558,16 @@ class Display
     commandString << "+ " << hash["PresetName"] << ": "
         
     #Video encoder
-    if hash["VideoEncoder"] != "MPEG-4 (FFmpeg)"
-      commandString << " -e "
-      case hash["VideoEncoder"]
-      when /x264/
-        commandString << "x264 "
-      when /Theora/
-        commandString << "theora "
-      when /MPEG/
-        commandString << "ffmpeg2 "
-      end
+    commandString << " -e "
+    case hash["VideoEncoder"]
+    when /x264/
+      commandString << "x264 "
+    when /Theora/
+      commandString << "theora "
+    when /MPEG-4/
+      commandString << "ffmpeg4 "
+    when /MPEG-2/
+      commandString << "ffmpeg2 "
     end
 
     #VideoRateControl
@@ -1600,23 +1620,23 @@ class Display
         when /AC3 Pass/
           audioEncoders << "copy:ac3"
         when /AC3/
-          audioEncoders << "ffac3"
+          audioEncoders << "ac3"
         when /DTS Pass/
           audioEncoders << "copy:dts"
         when /DTS-HD Pass/
           audioEncoders << "copy:dtshd"
         when /AAC Pass/
           audioEncoders << "copy:aac"
-        when "AAC (FDK)"
-          audioEncoders << "fdk_aac"
         when "AAC (faac)"
           audioEncoders << "faac"
-        when "AAC (ffmpeg)"
-          audioEncoders << "ffaac"
-        when "AAC (CoreAudio)"
-          audioEncoders << "ca_aac"
+        when "AAC (ffmpeg)", "AAC (avcodec)"
+          audioEncoders << "av_aac"
+        when "AAC (FDK)"
+          audioEncoders << "fdk_aac"
         when "HE-AAC (FDK)"
           audioEncoders << "fdk_haac"
+        when "AAC (CoreAudio)"
+          audioEncoders << "ca_aac"
         when "HE-AAC (CoreAudio)"
           audioEncoders << "ca_haac"
         when /Vorbis/
@@ -1624,11 +1644,11 @@ class Display
         when /MP3 Pass/
           audioEncoders << "copy:mp3"
         when /MP3/
-          audioEncoders << "lame"
-        when "FLAC (ffmpeg)"
-          audioEncoders << "ffflac"
-        when "FLAC (24-bit)"
-          audioEncoders << "ffflac24"
+          audioEncoders << "mp3"
+        when "FLAC (ffmpeg)", "FLAC 16-bit"
+          audioEncoders << "flac16"
+        when "FLAC (24-bit)", "FLAC 24-bit"
+          audioEncoders << "flac24"
         when /Auto Pass/
           audioEncoders << "copy"
       end
@@ -1725,17 +1745,27 @@ class Display
     
     case hash["AudioEncoderFallback"]
       when /AC3/
-        audioEncoderFallback << "ffac3"
-      when "AAC (ffmpeg)"
-        audioEncoderFallback << "ffaac"
-      when /AAC/
+        audioEncoderFallback << "ac3"
+      when "AAC (faac)"
         audioEncoderFallback << "faac"
+      when "AAC (ffmpeg)", "AAC (avcodec)"
+        audioEncoderFallback << "av_aac"
+      when "AAC (FDK)"
+        audioEncoderFallback << "fdk_aac"
+      when "HE-AAC (FDK)"
+        audioEncoderFallback << "fdk_haac"
+      when "AAC (CoreAudio)"
+        audioEncoderFallback << "ca_aac"
+      when "HE-AAC (CoreAudio)"
+        audioEncoderFallback << "ca_haac"
       when /Vorbis/
         audioEncoderFallback << "vorbis"
       when /MP3/
-        audioEncoderFallback << "lame"
-      when /FLAC/
-        audioEncoderFallback << "ffflac"
+        audioEncoderFallback << "mp3"
+      when "FLAC (ffmpeg)", "FLAC 16-bit"
+        audioEncoderFallback << "flac16"
+      when "FLAC (24-bit)", "FLAC 24-bit"
+        audioEncoderFallback << "flac24"
     end
     
     if audioEncoderFallback.size > 0
index 61444c6c541db7647c737f326bfc51a16c082e79..25bc99991d1fa3dfdb426f48c92f6bfa2e560a65 100644 (file)
@@ -14,7 +14,7 @@ TEST.GCC.L = $(CONTRIB.build/)lib
 TEST.libs = $(LIBHB.a)
 
 TEST.GCC.l = \
-        a52 ass avcodec avformat avutil avresample dvdnav dvdread faac \
+        a52 ass avcodec avformat avutil avresample dvdnav dvdread \
         fontconfig freetype fribidi mkv mpeg2 mp3lame mp4v2 ogg \
         samplerate swscale theoraenc theoradec vorbis vorbisenc x264 \
         bluray xml2 bz2 z
@@ -28,6 +28,10 @@ ifeq (1,$(FEATURE.fdk_aac))
 TEST.GCC.l += fdk-aac
 endif
 
+ifeq (1,$(FEATURE.faac))
+TEST.GCC.l += faac
+endif
+
 TEST.install.exe = $(DESTDIR)$(PREFIX/)bin/$(notdir $(TEST.exe))
 
 ###############################################################################
index fc1c6cff7017ca6db98fd5d59e33b753d2d54b35..cc72983b212576915f1a4879885a3526246a9988 100644 (file)
@@ -1333,6 +1333,74 @@ static int HandleEvents( hb_handle_t * h )
                     }
                     modulus = 2;
                 }
+                if (!strcasecmp(preset_name, "Windows Phone 8"))
+                {
+                    if( !mux )
+                    {
+                        mux = HB_MUX_MP4;
+                    }
+                    vcodec = HB_VCODEC_X264;
+                    job->vquality = 22.0;
+                    filter_vrate_base = 900000;
+                    filter_cfr = 2;
+                    if( !atracks )
+                    {
+                        atracks = strdup("1");
+                    }
+                    if( !acodecs )
+                    {
+                        acodecs = strdup("faac");
+                    }
+                    if( !abitrates )
+                    {
+                        abitrates = str_split("128", ',');
+                    }
+                    if( !mixdowns )
+                    {
+                        mixdowns = strdup("dpl2");
+                    }
+                    if( !arates )
+                    {
+                        arates = strdup("Auto");
+                    }
+                    if( !dynamic_range_compression )
+                    {
+                        dynamic_range_compression = strdup("0.0");
+                    }
+                    if( allowed_audio_copy == -1 )
+                    {
+                        allowed_audio_copy = 0;
+                        allowed_audio_copy |= HB_ACODEC_AAC_PASS;
+                        allowed_audio_copy |= HB_ACODEC_AC3_PASS;
+                        allowed_audio_copy |= HB_ACODEC_DCA_HD_PASS;
+                        allowed_audio_copy |= HB_ACODEC_DCA_PASS;
+                        allowed_audio_copy |= HB_ACODEC_MP3_PASS;
+                        allowed_audio_copy &= HB_ACODEC_PASS_MASK;
+                    }
+                    if( acodec_fallback == NULL )
+                    {
+                        acodec_fallback = "ffac3";
+                    }
+                    maxWidth = 1280;
+                    maxHeight = 720;
+                    if (x264_preset == NULL)
+                    {
+                        x264_preset = strdup("medium");
+                    }
+                    if (h264_profile == NULL)
+                    {
+                        h264_profile = strdup("main");
+                    }
+                    if (h264_level == NULL)
+                    {
+                        h264_level = strdup("3.1");
+                    }
+                    if( !anamorphic_mode )
+                    {
+                        anamorphic_mode = 2;
+                    }
+                    modulus = 2;
+                }
                 if (!strcasecmp(preset_name, "Normal"))
                 {
                     if( !mux )
@@ -2977,6 +3045,7 @@ static void ShowHelp()
     "### Video Options------------------------------------------------------------\n\n"
     "    -e, --encoder <string>  Set video library encoder\n"
     "                            Options: " );
+    name    = NULL;
     encoder = NULL;
     while ((encoder = hb_video_encoder_get_next(encoder)) != NULL)
     {
@@ -3445,7 +3514,8 @@ static void ShowPresets()
     printf("\n   + AppleTV 3:  -e x264  -q 20.0 -r 30 --pfr  -a 1,1 -E faac,copy:ac3 -B 160,160 -6 dpl2,none -R Auto,Auto -D 0.0,0.0 --audio-copy-mask aac,ac3,dtshd,dts,mp3 --audio-fallback ffac3 -f mp4 -4 -X 1920 -Y 1080 --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 30 --pfr  -a 1 -E faac -B 128 -6 dpl2 -R Auto -D 0.0 --audio-copy-mask aac,ac3,dtshd,dts,mp3 --audio-fallback ffac3 -f mp4 -X 720 -Y 576 --loose-anamorphic --modulus 2 --x264-preset medium --h264-profile main --h264-level 3.0\n");
     printf("\n   + Android Tablet:  -e x264  -q 22.0 -r 30 --pfr  -a 1 -E faac -B 128 -6 dpl2 -R Auto -D 0.0 --audio-copy-mask aac,ac3,dtshd,dts,mp3 --audio-fallback ffac3 -f mp4 -X 1280 -Y 720 --loose-anamorphic --modulus 2 --x264-preset medium --h264-profile main --h264-level 3.1\n");
-    printf("\n>\n");
+    printf("\n   + Windows Phone 8:  -e x264  -q 22.0 -r 30 --pfr  -a 1 -E faac -B 128 -6 dpl2 -R Auto -D 0.0 --audio-copy-mask aac,ac3,dtshd,dts,mp3 --audio-fallback ffac3 -f mp4 -X 1280 -Y 720 --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 --audio-copy-mask aac,ac3,dtshd,dts,mp3 --audio-fallback ffac3 -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,none -R Auto,Auto -D 0.0,0.0 --audio-copy-mask aac,ac3,dtshd,dts,mp3 --audio-fallback ffac3 -f mp4 -4 --decomb --loose-anamorphic --modulus 2 -m --x264-preset medium --h264-profile high --h264-level 4.1\n");
index 445b09c36c7e0c7964d9998221103b0662ef39c9..4888c9e9b49e36f8a08b19f91ef9cb6b115fa4f1 100644 (file)
@@ -95,6 +95,7 @@
     <Compile Include="Isolation\BackgroundServiceConnector.cs" />\r
     <Compile Include="Isolation\IsolatedEncodeService.cs" />\r
     <Compile Include="Isolation\IsolatedScanService.cs" />\r
+    <Compile Include="LibHb\AudioVideoHelpers.cs" />\r
     <Compile Include="Services\Interfaces\IEncodeServiceWrapper.cs" />\r
     <Compile Include="Services\Interfaces\IHbServiceCallback.cs" />\r
     <Compile Include="Services\Interfaces\IScanServiceWrapper.cs" />\r
diff --git a/win/CS/HandBrake.ApplicationServices/LibHb/AudioVideoHelpers.cs b/win/CS/HandBrake.ApplicationServices/LibHb/AudioVideoHelpers.cs
new file mode 100644 (file)
index 0000000..022d781
--- /dev/null
@@ -0,0 +1,18 @@
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="AudioVideoHelpers.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
+//   Defines the AudioVideoHelpers type.\r
+// </summary>\r
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrake.ApplicationServices.LibHb\r
+{\r
+    /// <summary>\r
+    /// The audio video helpers.\r
+    /// </summary>\r
+    class AudioVideoHelpers\r
+    {\r
+    }\r
+}\r
index c8238927fc5e932d04eea241e90751e03db54f88..fcbaddf6f5add490fc63d3c819cdcd86edf640ef 100644 (file)
@@ -75,7 +75,7 @@ namespace HandBrake.ApplicationServices.Model.Encoding
         public AudioTrack()\r
         {\r
             // Default Values\r
-            this.Encoder = AudioEncoder.Faac;\r
+            this.Encoder = AudioEncoder.ffaac;\r
             this.MixDown = Mixdown.DolbyProLogicII;\r
             this.SampleRate = 48;\r
             this.Bitrate = 160;\r
@@ -341,7 +341,7 @@ namespace HandBrake.ApplicationServices.Model.Encoding
         {\r
             get\r
             {\r
-                return this.IsPassthru || this.Encoder == AudioEncoder.ffflac;\r
+                return this.IsPassthru || this.Encoder == AudioEncoder.ffflac || this.Encoder == AudioEncoder.ffflac24;\r
             }\r
         }\r
 \r
@@ -352,7 +352,7 @@ namespace HandBrake.ApplicationServices.Model.Encoding
         {\r
             get\r
             {\r
-                return this.IsPassthru || this.Encoder == AudioEncoder.ffflac;\r
+                return this.IsPassthru || this.Encoder == AudioEncoder.ffflac || this.Encoder == AudioEncoder.ffflac24;\r
             }\r
         }\r
 \r
index 63fe251585aad4849a983d48e76238389dde6936..83e1206b298a0f3deaeda88429cd7964649d46af 100644 (file)
@@ -28,6 +28,11 @@ namespace HandBrake.ApplicationServices.Services.Interfaces
         /// </summary>\r
         Preset DefaultPreset { get; }\r
 \r
+        /// <summary>\r
+        /// The load.\r
+        /// </summary>\r
+        void Load();\r
+\r
         /// <summary>\r
         /// Add a new preset to the system\r
         /// </summary>\r
index efdce524099d132682c349db7f244fa58879ee51..e40c440335f46c3ba48179d9afb5cbe2b0c4ec5a 100644 (file)
@@ -38,11 +38,6 @@ namespace HandBrake.ApplicationServices.Services
         /// </summary>\r
         private static readonly XmlSerializer Ser = new XmlSerializer(typeof(List<Preset>));\r
 \r
-        /// <summary>\r
-        /// The User Setting Service\r
-        /// </summary>\r
-        private readonly IUserSettingService userSettingService;\r
-\r
         /// <summary>\r
         /// User Preset Default Catgory Name\r
         /// </summary>\r
@@ -61,30 +56,10 @@ namespace HandBrake.ApplicationServices.Services
         /// <summary>\r
         /// A Collection of presets\r
         /// </summary>\r
-        private ObservableCollection<Preset> presets = new ObservableCollection<Preset>();\r
+        private readonly ObservableCollection<Preset> presets = new ObservableCollection<Preset>();\r
 \r
         #endregion\r
 \r
-\r
-        /// <summary>\r
-        /// Initializes a new instance of the <see cref="PresetService"/> class.\r
-        /// </summary>\r
-        /// <param name="userSettingService">\r
-        /// The user Setting Service.\r
-        /// </param>\r
-        public PresetService(IUserSettingService userSettingService)\r
-        {\r
-            this.userSettingService = userSettingService;\r
-\r
-            // If the preset file doesn't exist. Create it.\r
-            if (!File.Exists(this.builtInPresetFile))\r
-            {\r
-                this.UpdateBuiltInPresets();\r
-            }\r
-\r
-            this.LoadPresets();\r
-        }\r
-\r
         /// <summary>\r
         /// Gets a Collection of presets.\r
         /// </summary>\r
@@ -114,6 +89,20 @@ namespace HandBrake.ApplicationServices.Services
 \r
         #region Public Methods\r
 \r
+        /// <summary>\r
+        /// The load.\r
+        /// </summary>\r
+        public void Load()\r
+        {\r
+            // If the preset file doesn't exist. Create it.\r
+            if (!File.Exists(this.builtInPresetFile))\r
+            {\r
+                this.UpdateBuiltInPresets();\r
+            }\r
+\r
+            this.LoadPresets();\r
+        }\r
+\r
         /// <summary>\r
         /// Add a new preset to the system.\r
         /// Performs an Update if it already exists\r
@@ -413,7 +402,7 @@ namespace HandBrake.ApplicationServices.Services
                 // Recover from Error.\r
                 if (File.Exists(file))\r
                 {\r
-                    string disabledFile = file + ".old";\r
+                    string disabledFile = string.Format("{0}.{1}", file, GeneralUtilities.ProcessId);\r
                     File.Move(file, disabledFile);\r
                     if (File.Exists(file))\r
                     {\r
@@ -458,7 +447,6 @@ namespace HandBrake.ApplicationServices.Services
             {\r
                 RecoverFromCorruptedPresetFile(this.builtInPresetFile);\r
                 this.UpdateBuiltInPresets();\r
-                throw new GeneralApplicationException("HandBrake has detected corruption in the presets file and has attempted to rebuild this file.", "Please restart HandBrake before continuing.", exc);              \r
             }\r
 \r
             // Load in the users Presets from UserPresets.xml\r
@@ -479,7 +467,7 @@ namespace HandBrake.ApplicationServices.Services
             catch (Exception exc)\r
             {\r
                 RecoverFromCorruptedPresetFile(this.userPresetFile);\r
-                throw new GeneralApplicationException("HandBrake has detected corruption in the presets file and has attempted to rebuild this file.", "Please restart HandBrake before continuing.", exc);    \r
+                throw new GeneralApplicationException("HandBrake has detected a problem with your presets.", "Your old presets file has been renamed so that it doesn't get loaded on next launch.", exc);    \r
             }\r
         }\r
 \r
index c69320e1f738e98958012ba1319bc8906920bcce..10d5fc231fcc4da114cc269b697d68ea5a94ea66 100644 (file)
@@ -25,7 +25,7 @@ namespace HandBrake.ApplicationServices.Utilities
          * TODO:\r
          * - Many of these converters can be ditched at a later point. Should be able to model all this within the enums themsevles.\r
          * \r
-         **/ \r
+         **/\r
 \r
         /// <summary>\r
         /// Convert HandBrakes time remaining into a TimeSpan\r
@@ -155,46 +155,6 @@ namespace HandBrake.ApplicationServices.Utilities
             }\r
         }\r
 \r
-        /// <summary>\r
-        /// Get the GUI equiv to a CLI audio encoder\r
-        /// </summary>\r
-        /// <param name="audioEnc">The Audio Encoder</param>\r
-        /// <returns>The GUI representation of that audio encoder</returns>\r
-        public static string GetGUIAudioEncoder(string audioEnc)\r
-        {\r
-            switch (audioEnc)\r
-            {\r
-                case "faac":\r
-                    return "AAC (faac)";\r
-                case "lame":\r
-                    return "MP3 (lame)";\r
-                case "vorbis":\r
-                    return "Vorbis (vorbis)";\r
-                case "ffac3":\r
-                    return "AC3 (ffmpeg)";\r
-                case "copy:ac3":\r
-                    return "AC3 Passthru";\r
-                case "copy:dts":\r
-                    return "DTS Passthru";\r
-                case "copy:dtshd":\r
-                    return "MP3 Passthru";\r
-                case "copy:mp3":\r
-                    return "AAC Passthru";\r
-                case "copy:aac":\r
-                    return "DTS-HD Passthru";\r
-                case "ffaac":\r
-                    return "AAC (ffmpeg)";\r
-                case "ffflac":\r
-                    return "FLAC (ffmpeg)";\r
-                case "ffflac24":\r
-                    return "FLAC (24-bit)";\r
-                case "copy":\r
-                    return "Auto Passthru";\r
-                default:\r
-                    return "AAC (faac)";\r
-            }\r
-        }\r
-\r
         /// <summary>\r
         /// Get the GUI equiv to a CLI audio encoder\r
         /// </summary>\r
@@ -205,17 +165,24 @@ namespace HandBrake.ApplicationServices.Utilities
             switch (audioEnc)\r
             {\r
                 case "faac":\r
-                    return AudioEncoder.Faac;\r
                 case "ffaac":\r
                     return AudioEncoder.ffaac;\r
+                case "fdk_aac":\r
+                    return AudioEncoder.fdkaac;\r
+                case "fdk_haac":\r
+                    return AudioEncoder.fdkheaac;\r
+                case "mp3":\r
                 case "lame":\r
                     return AudioEncoder.Lame;\r
                 case "vorbis":\r
                     return AudioEncoder.Vorbis;\r
+                case "ac3":\r
                 case "ffac3":\r
                     return AudioEncoder.Ac3;\r
+                case "flac16":\r
                 case "ffflac":\r
                     return AudioEncoder.ffflac;\r
+                case "flac24":\r
                 case "ffflac24":\r
                     return AudioEncoder.ffflac24;\r
                 case "copy:ac3":\r
@@ -231,7 +198,7 @@ namespace HandBrake.ApplicationServices.Utilities
                 case "copy":\r
                     return AudioEncoder.Passthrough;\r
                 default:\r
-                    return AudioEncoder.Faac;\r
+                    return AudioEncoder.ffaac;\r
             }\r
         }\r
 \r
@@ -245,16 +212,22 @@ namespace HandBrake.ApplicationServices.Utilities
             switch (audioEnc)\r
             {\r
                 case "AAC (faac)":\r
-                    return AudioEncoder.Faac;\r
+                case "AAC (CoreAudio)":\r
                 case "AAC (ffmpeg)":\r
+                case "AAC (avcodec)":\r
                     return AudioEncoder.ffaac;\r
-                case "AAC (CoreAudio)":\r
-                    return AudioEncoder.Faac;\r
+                case "AAC (FDK)":\r
+                    return AudioEncoder.fdkaac;\r
+                case "HE-AAC (FDK)":\r
+                    return AudioEncoder.fdkheaac;\r
                 case "MP3 (lame)":\r
+                case "MP3":\r
                     return AudioEncoder.Lame;\r
                 case "Vorbis (vorbis)":\r
+                case "Vorbis":\r
                     return AudioEncoder.Vorbis;\r
                 case "AC3 (ffmpeg)":\r
+                case "AC3":\r
                     return AudioEncoder.Ac3;\r
                 case "AC3 Passthru":\r
                     return AudioEncoder.Ac3Passthrough;\r
@@ -267,13 +240,15 @@ namespace HandBrake.ApplicationServices.Utilities
                 case "MP3 Passthru":\r
                     return AudioEncoder.Mp3Passthru;\r
                 case "FLAC (ffmpeg)":\r
+                case "FLAC 16-bit":\r
                     return AudioEncoder.ffflac;\r
                 case "FLAC (24-bit)":\r
+                case "FLAC 24-bit":\r
                     return AudioEncoder.ffflac24;\r
                 case "Auto Passthru":\r
                     return AudioEncoder.Passthrough;\r
                 default:\r
-                    return AudioEncoder.Faac;\r
+                    return AudioEncoder.ffaac;\r
             }\r
         }\r
 \r
@@ -288,43 +263,12 @@ namespace HandBrake.ApplicationServices.Utilities
         /// </returns>\r
         public static string GetCliAudioEncoder(AudioEncoder selectedEncoder)\r
         {\r
-            switch (selectedEncoder)\r
-            {\r
-                case AudioEncoder.Faac:\r
-                    return "faac";\r
-                case AudioEncoder.ffaac:\r
-                    return "ffaac";\r
-\r
-                case AudioEncoder.Lame:\r
-                    return "lame";\r
-                case AudioEncoder.Vorbis:\r
-                    return "vorbis";\r
-                case AudioEncoder.Ac3Passthrough:\r
-                    return "copy:ac3";\r
-                case AudioEncoder.DtsPassthrough:\r
-                    return "copy:dts";\r
-                case AudioEncoder.DtsHDPassthrough:\r
-                    return "copy:dtshd";\r
-                case AudioEncoder.Ac3:\r
-                    return "ffac3";\r
-                case AudioEncoder.AacPassthru:\r
-                    return "copy:aac";\r
-                case AudioEncoder.Mp3Passthru:\r
-                    return "copy:mp3";\r
-                case AudioEncoder.Passthrough:\r
-                    return "copy";\r
-                case AudioEncoder.ffflac:\r
-                    return "ffflac";\r
-                case AudioEncoder.ffflac24:\r
-                    return "ffflac24";\r
-                default:\r
-                    return "faac";\r
-            }\r
+            return EnumHelper<AudioEncoder>.GetShortName(selectedEncoder);\r
         }\r
 \r
         #endregion\r
 \r
-        #region Video \r
+        #region Video\r
 \r
         /// <summary>\r
         /// Get the Video Encoder for a given string\r
@@ -339,11 +283,12 @@ namespace HandBrake.ApplicationServices.Utilities
         {\r
             switch (encoder)\r
             {\r
-                case "":\r
                 case "ffmpeg":\r
                 case "ffmpeg4":\r
+                case "mpeg4":\r
                     return VideoEncoder.FFMpeg;\r
                 case "ffmpeg2":\r
+                case "mpeg2":\r
                     return VideoEncoder.FFMpeg2;\r
                 case "x264":\r
                     return VideoEncoder.X264;\r
@@ -370,9 +315,9 @@ namespace HandBrake.ApplicationServices.Utilities
             switch (encoder)\r
             {\r
                 case VideoEncoder.FFMpeg:\r
-                    return "ffmpeg4";\r
+                    return "mpeg4";\r
                 case VideoEncoder.FFMpeg2:\r
-                    return "ffmpeg2";\r
+                    return "mpeg2";\r
                 case VideoEncoder.X264:\r
                     return "x264";\r
                 case VideoEncoder.Theora:\r
index c854e5a0575b259bcf7d668971f5062b80a00bba..43667557bf7e65d92030707ce4236896aa5a3f8c 100644 (file)
@@ -17,6 +17,8 @@ namespace HandBrake.ApplicationServices.Utilities
     using System.Linq;\r
     using System.Reflection;\r
 \r
+    using HandBrake.Interop.Attributes;\r
+\r
     /// <summary>\r
     /// Enum Helpers\r
     /// </summary>\r
@@ -93,6 +95,23 @@ namespace HandBrake.ApplicationServices.Utilities
             throw new ArgumentOutOfRangeException("The Description for the enum was not recognized.");\r
         }\r
 \r
+        /// <summary>\r
+        /// The get short name.\r
+        /// </summary>\r
+        /// <param name="value">\r
+        /// The value.\r
+        /// </param>\r
+        /// <returns>\r
+        /// The <see cref="string"/>.\r
+        /// </returns>\r
+        public static string GetShortName(T value)\r
+        {\r
+            FieldInfo fieldInfo = value.GetType().GetField(value.ToString());\r
+            ShortName[] attributes = (ShortName[])fieldInfo.GetCustomAttributes(typeof(ShortName), false);\r
+\r
+            return (attributes.Length > 0) ? attributes[0].Name : value.ToString(); \r
+        }\r
+\r
         /// <summary>\r
         /// Return a list of all the enum values.\r
         /// </summary>\r
diff --git a/win/CS/HandBrake.Interop/HandBrakeInterop/Attributes/ShortName.cs b/win/CS/HandBrake.Interop/HandBrakeInterop/Attributes/ShortName.cs
new file mode 100644 (file)
index 0000000..cf32cb8
--- /dev/null
@@ -0,0 +1,35 @@
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="ShortName.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
+//   A Short Name for an enum value\r
+// </summary>\r
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrake.Interop.Attributes\r
+{\r
+    using System;\r
+\r
+    /// <summary>\r
+    ///  A Short Name for an enum value\r
+    /// </summary>\r
+    public class ShortName : Attribute\r
+    {\r
+        /// <summary>\r
+        /// Initializes a new instance of the <see cref="ShortName"/> class.\r
+        /// </summary>\r
+        /// <param name="shortName">\r
+        /// The short name.\r
+        /// </param>\r
+        public ShortName(string shortName)\r
+        {\r
+            this.Name = shortName;\r
+        }\r
+\r
+        /// <summary>\r
+        /// Gets or sets the short name.\r
+        /// </summary>\r
+        public string Name { get; set; }\r
+    }\r
+}\r
index e7f172e32a0e1b952321290f5a816d3d80a57608..42d200e577f136575c1353311d47f4dc196976df 100644 (file)
@@ -25,21 +25,21 @@ namespace HandBrake.Interop
                /// <summary>\r
                /// Video Frame Rates\r
                /// </summary>\r
-               private static readonly Dictionary<double, int> VideoRates = new Dictionary<double, int>\r
+               private static readonly Dictionary<double, int> VideoRates;\r
+\r
+               /// <summary>\r
+               /// Initializes static members of the Converters class.\r
+               /// </summary>\r
+               static Converters()\r
                {\r
-                       {5, 5400000},\r
-                       {10, 2700000},\r
-                       {12, 2250000},\r
-                       {15, 1800000},\r
-                       {23.976, 1126125},\r
-                       {24, 1125000},\r
-                       {25, 1080000},\r
-                       {29.97, 900900},\r
-                       {30, 900000},\r
-                       {50, 540000},\r
-                       {59.94, 450450},\r
-                       {60, 450000}\r
-               };\r
+                       HandBrakeUtils.EnsureGlobalInit();\r
+\r
+                       VideoRates = new Dictionary<double, int>();\r
+                       foreach (var framerate in Encoders.VideoFramerates)\r
+                       {\r
+                               VideoRates.Add(double.Parse(framerate.Name), framerate.Rate);\r
+                       }\r
+               }\r
 \r
                /// <summary>\r
                /// Convert Framerate to Video Rates\r
@@ -78,10 +78,12 @@ namespace HandBrake.Interop
                                        return NativeConstants.HB_ACODEC_AC3_PASS;\r
                                case AudioEncoder.Ac3:\r
                                        return NativeConstants.HB_ACODEC_AC3;\r
-                               case AudioEncoder.Faac:\r
-                                       return NativeConstants.HB_ACODEC_FAAC;\r
                                case AudioEncoder.ffaac:\r
                                        return NativeConstants.HB_ACODEC_FFAAC;\r
+                               case AudioEncoder.fdkaac:\r
+                                       return NativeConstants.HB_ACODEC_FDK_AAC;\r
+                               case AudioEncoder.fdkheaac:\r
+                                       return NativeConstants.HB_ACODEC_FDK_HAAC;\r
                                case AudioEncoder.AacPassthru:\r
                                        return NativeConstants.HB_ACODEC_AAC_PASS;\r
                                case AudioEncoder.Lame:\r
@@ -127,9 +129,12 @@ namespace HandBrake.Interop
                                case NativeConstants.HB_ACODEC_FFAAC:\r
                                case NativeConstants.HB_ACODEC_CA_AAC:\r
                                case NativeConstants.HB_ACODEC_CA_HAAC:\r
+                               case NativeConstants.HB_ACODEC_FDK_HAAC: // TODO Check this is correct\r
+                               case NativeConstants.HB_ACODEC_FDK_AAC: // TODO Check this is correct\r
                                        return AudioCodec.Aac;\r
                                case NativeConstants.HB_ACODEC_FFFLAC:\r
                                        return AudioCodec.Flac;\r
+\r
                                default:\r
                                        return AudioCodec.Other;\r
                        }\r
@@ -144,9 +149,9 @@ namespace HandBrake.Interop
                {\r
                        var result = new HBVideoEncoder\r
                        {\r
-                               Id = encoder.encoder,\r
+                               Id = encoder.codec,\r
                                ShortName = encoder.short_name,\r
-                               DisplayName = encoder.human_readable_name,\r
+                               DisplayName = encoder.name,\r
                                CompatibleContainers = Container.None\r
                        };\r
 \r
@@ -172,9 +177,9 @@ namespace HandBrake.Interop
                {\r
                        var result = new HBAudioEncoder\r
                                {\r
-                                       Id = encoder.encoder,\r
+                                       Id = encoder.codec,\r
                                        ShortName = encoder.short_name,\r
-                                       DisplayName = encoder.human_readable_name,\r
+                                       DisplayName = encoder.name,\r
                                        CompatibleContainers = Container.None\r
                                };\r
 \r
@@ -188,14 +193,28 @@ namespace HandBrake.Interop
                                result.CompatibleContainers = result.CompatibleContainers | Container.Mp4;\r
                        }\r
 \r
-                       result.QualityLimits = Encoders.GetAudioQualityLimits(encoder.encoder);\r
-                       result.DefaultQuality = HBFunctions.hb_get_default_audio_quality((uint)encoder.encoder);\r
-                       result.CompressionLimits = Encoders.GetAudioCompressionLimits(encoder.encoder);\r
-                       result.DefaultCompression = HBFunctions.hb_get_default_audio_compression((uint) encoder.encoder);\r
+                       result.QualityLimits = Encoders.GetAudioQualityLimits(encoder.codec);\r
+                       result.DefaultQuality = HBFunctions.hb_audio_quality_get_default((uint)encoder.codec);\r
+                       result.CompressionLimits = Encoders.GetAudioCompressionLimits(encoder.codec);\r
+                       result.DefaultCompression = HBFunctions.hb_audio_compression_get_default((uint)encoder.codec);\r
 \r
                        return result;\r
                }\r
 \r
+               /// <summary>\r
+               /// Converts a native HB rate structure to an HBRate object.\r
+               /// </summary>\r
+               /// <param name="rate">The structure to convert.</param>\r
+               /// <returns>The converted rate object.</returns>\r
+               public static HBRate NativeToRate(hb_rate_s rate)\r
+               {\r
+                       return new HBRate\r
+                               {\r
+                                       Name = rate.name,\r
+                                       Rate = rate.rate\r
+                               };\r
+               }\r
+\r
                /// <summary>\r
                /// Converts a native HB mixdown structure to a Mixdown model.\r
                /// </summary>\r
@@ -207,7 +226,7 @@ namespace HandBrake.Interop
                                {\r
                                        Id = mixdown.amixdown,\r
                                        ShortName = mixdown.short_name,\r
-                                       DisplayName = mixdown.human_readable_name\r
+                                       DisplayName = mixdown.name\r
                                };\r
                }\r
 \r
index a65ca3e100081275fc92e0248ed6d87698335ae2..18beda7cce32296338dd25445cccf8fdd5e498d9 100644 (file)
@@ -49,16 +49,6 @@ namespace HandBrake.Interop
                /// </summary>\r
                private const string TurboX264Opts = "ref=1:subme=2:me=dia:analyse=none:trellis=0:no-fast-pskip=0:8x8dct=0:weightb=0";\r
 \r
-               /// <summary>\r
-               /// Lock for creation of handbrake instances;\r
-               /// </summary>\r
-               private static object instanceCreationLock = new object();\r
-\r
-               /// <summary>\r
-               /// True if a handbrake instance has been created.\r
-               /// </summary>\r
-               private static bool globalInitialized;\r
-\r
                /// <summary>\r
                /// The native handle to the HandBrake instance.\r
                /// </summary>\r
@@ -181,13 +171,7 @@ namespace HandBrake.Interop
                /// <param name="verbosity">The code for the logging verbosity to use.</param>\r
                public void Initialize(int verbosity)\r
                {\r
-                       lock (instanceCreationLock)\r
-                       {\r
-                               if (!globalInitialized)\r
-                               {\r
-                                       globalInitialized = true;\r
-                               }\r
-                       }\r
+                       HandBrakeUtils.EnsureGlobalInit();\r
 \r
                        HandBrakeUtils.RegisterLogger();\r
                        this.hbHandle = HBFunctions.hb_init(verbosity, update_check: 0);\r
@@ -406,6 +390,11 @@ namespace HandBrake.Interop
                public void StartEncode(EncodeJob job, bool preview, int previewNumber, int previewSeconds, double overallSelectedLengthSeconds)\r
                {\r
                        EncodingProfile profile = job.EncodingProfile;\r
+                       if (job.ChosenAudioTracks == null)\r
+                       {\r
+                               throw new ArgumentException("job.ChosenAudioTracks cannot be null.");\r
+                       }\r
+\r
                        this.currentJob = job;\r
 \r
                        IntPtr nativeJobPtr = HBFunctions.hb_job_init_by_index(this.hbHandle, this.GetTitleIndex(job.Title));\r
@@ -414,7 +403,7 @@ namespace HandBrake.Interop
                        this.encodeAllocatedMemory = this.ApplyJob(ref nativeJob, job, preview, previewNumber, previewSeconds, overallSelectedLengthSeconds);\r
 \r
                        this.subtitleScan = false;\r
-                       if (job.Subtitles.SourceSubtitles != null)\r
+                       if (job.Subtitles != null && job.Subtitles.SourceSubtitles != null)\r
                        {\r
                                foreach (SourceSubtitle subtitle in job.Subtitles.SourceSubtitles)\r
                                {\r
@@ -1267,7 +1256,7 @@ namespace HandBrake.Interop
                                                        }\r
                                                        else\r
                                                        {\r
-                                                               displayWidth = (int)((double)cropHeight * displayAspect);\r
+                                                               displayWidth = (int)((double)height * displayAspect);\r
                                                        }\r
 \r
                                                        nativeJob.anamorphic.dar_width = displayWidth;\r
@@ -1454,7 +1443,7 @@ namespace HandBrake.Interop
                                        }\r
                                }\r
 \r
-                               bool hasBurnedSubtitle = job.Subtitles.SourceSubtitles.Any(s => s.BurnedIn);\r
+                               bool hasBurnedSubtitle = job.Subtitles.SourceSubtitles != null && job.Subtitles.SourceSubtitles.Any(s => s.BurnedIn);\r
                                if (hasBurnedSubtitle)\r
                                {\r
                                        this.AddFilter(filterList, (int)hb_filter_ids.HB_FILTER_RENDER_SUB, string.Format(CultureInfo.InvariantCulture, "{0}:{1}:{2}:{3}", crop.Top, crop.Bottom, crop.Left, crop.Right), allocatedMemory);\r
@@ -1684,7 +1673,7 @@ namespace HandBrake.Interop
                                        if (encoding.Bitrate == 0)\r
                                        {\r
                                                // Bitrate of 0 means auto: choose the default for this codec, sample rate and mixdown.\r
-                                               nativeAudio.config.output.bitrate = HBFunctions.hb_get_default_audio_bitrate(\r
+                                               nativeAudio.config.output.bitrate = HBFunctions.hb_audio_bitrate_get_default(\r
                                                        nativeAudio.config.output.codec,\r
                                                        nativeAudio.config.output.samplerate,\r
                                                        nativeAudio.config.output.mixdown);\r
index b1a84f48fd499985a097ef40043683d4de7982fa..9b3c84f4e0b1c9a943beeb2059872ffc320bb465 100644 (file)
     </Reference>\r
   </ItemGroup>\r
   <ItemGroup>\r
+    <Compile Include="Attributes\ShortName.cs" />\r
     <Compile Include="Converters.cs" />\r
     <Compile Include="EventArgs\EncodeCompletedEventArgs.cs" />\r
     <Compile Include="EventArgs\EncodeProgressEventArgs.cs" />\r
     <Compile Include="Model\Encoding\Detelecine.cs" />\r
     <Compile Include="Model\Encoding\EncodingProfile.cs" />\r
     <Compile Include="Model\Encoding\HBMixdown.cs" />\r
+    <Compile Include="Model\Encoding\HBRate.cs" />\r
     <Compile Include="Model\Encoding\HBVideoEncoder.cs" />\r
     <Compile Include="Model\Encoding\Mixdown.cs" />\r
     <Compile Include="Model\Encoding\OutputExtension.cs" />\r
index 6833dfc36980c1b20ce20a86175309bd6cac73bf..48e8117be6c3009703d2b28aaff036ded059acf6 100644 (file)
@@ -39,6 +39,11 @@ namespace HandBrake.Interop
                /// </summary>\r
                private static LoggingCallback errorCallback;\r
 \r
+               /// <summary>\r
+               /// True if the global initialize function has been called.\r
+               /// </summary>\r
+               private static bool globalInitialized;\r
+\r
                /// <summary>\r
                /// Fires when HandBrake has logged a message.\r
                /// </summary>\r
@@ -49,6 +54,30 @@ namespace HandBrake.Interop
                /// </summary>\r
                public static event EventHandler<MessageLoggedEventArgs> ErrorLogged;\r
 \r
+               /// <summary>\r
+               /// Initializes static members of the HandBrakeUtils class.\r
+               /// </summary>\r
+               static HandBrakeUtils()\r
+               {\r
+                       if (!globalInitialized)\r
+                       {\r
+                               if (HBFunctions.hb_global_init() == -1)\r
+                               {\r
+                                       throw new InvalidOperationException("HB global init failed.");\r
+                               }\r
+\r
+                               globalInitialized = true;\r
+                       }\r
+               }\r
+\r
+               /// <summary>\r
+               /// Ensures the HB global initialize method has been called.\r
+               /// </summary>\r
+               public static void EnsureGlobalInit()\r
+               {\r
+                       // Does nothing, but invokes static ctor.\r
+               }\r
+\r
                /// <summary>\r
                /// Enables or disables LibDVDNav. If disabled libdvdread will be used instead.\r
                /// </summary>\r
@@ -94,12 +123,17 @@ namespace HandBrake.Interop
 \r
                                if (messageParts.Length > 0)\r
                                {\r
-                                       if (MessageLogged != null)\r
+                                       message = messageParts[0];\r
+\r
+                                       // When MP4 muxing fails (for example when the file is too big without Large File Size)\r
+                                       // a message is logged but it isn't marked as an error.\r
+                                       if (message.StartsWith("MP4ERROR", StringComparison.Ordinal))\r
                                        {\r
-                                               MessageLogged(null, new MessageLoggedEventArgs { Message = messageParts[0] });\r
+                                               SendErrorEvent(message);\r
+                                               return;\r
                                        }\r
 \r
-                                       System.Diagnostics.Debug.WriteLine(messageParts[0]);\r
+                                       SendMessageEvent(message);\r
                                }\r
                        }\r
                }\r
@@ -115,20 +149,11 @@ namespace HandBrake.Interop
                                // This error happens in normal operations. Log it as a message.\r
                                if (message == "dvd: ifoOpen failed")\r
                                {\r
-                                       if (MessageLogged != null)\r
-                                       {\r
-                                               MessageLogged(null, new MessageLoggedEventArgs { Message = message });\r
-                                       }\r
-\r
+                                       SendMessageEvent(message);\r
                                        return;\r
                                }\r
 \r
-                               if (ErrorLogged != null)\r
-                               {\r
-                                       ErrorLogged(null, new MessageLoggedEventArgs { Message = message });\r
-                               }\r
-\r
-                               System.Diagnostics.Debug.WriteLine("ERROR: " + message);\r
+                               SendErrorEvent(message);\r
                        }\r
                }\r
 \r
@@ -197,8 +222,8 @@ namespace HandBrake.Interop
                                throw new ArgumentException("height must be positive.");\r
                        }\r
 \r
-                   HBFunctions.hb_init(0, 0);\r
-            IntPtr ptr = HBFunctions.hb_x264_param_unparse(\r
+                       HBFunctions.hb_init(0, 0);\r
+                       IntPtr ptr = HBFunctions.hb_x264_param_unparse(\r
                                preset,\r
                                string.Join(",", tunes),\r
                                extraOptions,\r
@@ -207,10 +232,10 @@ namespace HandBrake.Interop
                                width,\r
                                height);\r
 \r
-                   string x264Settings = Marshal.PtrToStringAnsi(ptr);\r
+                       string x264Settings = Marshal.PtrToStringAnsi(ptr);\r
 \r
 \r
-            return x264Settings;\r
+                       return x264Settings;\r
                }\r
 \r
                /// <summary>\r
@@ -331,5 +356,33 @@ namespace HandBrake.Interop
 \r
                        return audioBytes;\r
                }\r
+\r
+               /// <summary>\r
+               /// Sends the message logged event to any registered listeners.\r
+               /// </summary>\r
+               /// <param name="message">The message to send.</param>\r
+               private static void SendMessageEvent(string message)\r
+               {\r
+                       if (MessageLogged != null)\r
+                       {\r
+                               MessageLogged(null, new MessageLoggedEventArgs { Message = message });\r
+                       }\r
+\r
+                       System.Diagnostics.Debug.WriteLine(message);\r
+               }\r
+\r
+               /// <summary>\r
+               /// Sends the error logged event to any registered listeners.\r
+               /// </summary>\r
+               /// <param name="message">The message to send</param>\r
+               private static void SendErrorEvent(string message)\r
+               {\r
+                       if (ErrorLogged != null)\r
+                       {\r
+                               ErrorLogged(null, new MessageLoggedEventArgs { Message = message });\r
+                       }\r
+\r
+                       System.Diagnostics.Debug.WriteLine("ERROR: " + message);\r
+               }\r
        }\r
 }\r
index 00130a902a770ef68b89b70bdae0af1dceee2b97..25f59599592a227b2322eb7ba866c3c606ef0bef 100644 (file)
@@ -21,6 +21,9 @@ namespace HandBrake.Interop.HbLib
                [DllImport("hb.dll", EntryPoint = "hb_register_error_handler", CallingConvention = CallingConvention.Cdecl)]\r
                public static extern void hb_register_error_handler(LoggingCallback callback);\r
 \r
+               [DllImport("hb.dll", EntryPoint = "hb_global_init", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern int hb_global_init();\r
+\r
                /// Return Type: hb_handle_t*\r
                ///verbose: int\r
                ///update_check: int\r
@@ -210,81 +213,119 @@ namespace HandBrake.Interop.HbLib
                public static extern int hb_srt_add(ref hb_job_s job, ref hb_subtitle_config_s subtitleConfig, string lang);\r
 \r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_mixdown_is_supported", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern int hb_mixdown_is_supported(int mixdown, uint codec, ulong layout);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_mixdown_has_remix_support", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern int hb_mixdown_has_remix_support(int mixdown, ulong layout);\r
+//int              hb_video_framerate_get_from_name(const char *name);\r
+//const char*      hb_video_framerate_get_name(int framerate);\r
+//const char*      hb_video_framerate_sanitize_name(const char *name);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_mixdown_has_codec_support", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern int hb_mixdown_has_codec_support(int mixdown, uint codec);\r
+               // returns hb_rate_s\r
+               [DllImport("hb.dll", EntryPoint = "hb_video_framerate_get_next", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern IntPtr hb_video_framerate_get_next(IntPtr last);\r
+\r
+\r
+//int              hb_audio_samplerate_get_best(uint32_t codec, int samplerate, int *sr_shift);\r
+//int              hb_audio_samplerate_get_from_name(const char *name);\r
+//const char*      hb_audio_samplerate_get_name(int samplerate);\r
+\r
+               // returns hb_rate_s\r
+               [DllImport("hb.dll", EntryPoint = "hb_audio_samplerate_get_next", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern IntPtr hb_audio_samplerate_get_next(IntPtr last);\r
+\r
+\r
+               [DllImport("hb.dll", EntryPoint = "hb_audio_bitrate_get_best", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern int hb_audio_bitrate_get_best(uint codec, int bitrate, int samplerate, int mixdown);\r
+\r
+               [DllImport("hb.dll", EntryPoint = "hb_audio_bitrate_get_default", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern int hb_audio_bitrate_get_default(uint codec, int samplerate, int mixdown);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_default_mixdown", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern int hb_get_default_mixdown(uint codec, ulong layout);\r
+               [DllImport("hb.dll", EntryPoint = "hb_audio_bitrate_get_limits", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern int hb_audio_bitrate_get_limits(uint codec, int samplerate, int mixdown, ref int low, ref int high);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_best_mixdown", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern int hb_get_best_mixdown(uint codec, ulong layout, int mixdown);\r
+               [DllImport("hb.dll", EntryPoint = "hb_audio_bitrate_get_next", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern IntPtr hb_audio_bitrate_get_next(IntPtr last);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_best_audio_bitrate", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern int hb_get_best_audio_bitrate(uint codec, int bitrate, int samplerate, int mixdown);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_default_audio_bitrate", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern int hb_get_default_audio_bitrate(uint codec, int samplerate, int mixdown);\r
+               [DllImport("hb.dll", EntryPoint = "hb_audio_quality_get_limits", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern void hb_audio_quality_get_limits(uint codec, ref float low, ref float high, ref float granularity, ref int direction);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_audio_bitrate_limits", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern int hb_get_audio_bitrate_limits(uint codec, int samplerate, int mixdown, ref int low, ref int high);\r
+//float hb_audio_quality_get_best(uint32_t codec, float quality);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_audio_quality_limits", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern void hb_get_audio_quality_limits(uint codec, ref float low, ref float high, ref float granularity, ref int direction);\r
+               [DllImport("hb.dll", EntryPoint = "hb_audio_quality_get_default", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern float hb_audio_quality_get_default(uint codec);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_default_audio_quality", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern float hb_get_default_audio_quality(uint codec);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_audio_compression_limits", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern void hb_get_audio_compression_limits(uint codec, ref float low, ref float high, ref float granularity, ref int direction);\r
+               [DllImport("hb.dll", EntryPoint = "hb_audio_compression_get_limits", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern void hb_audio_compression_get_limits(uint codec, ref float low, ref float high, ref float granularity, ref int direction);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_default_audio_compression", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern float hb_get_default_audio_compression(uint codec);\r
+//float hb_audio_compression_get_best(uint32_t codec, float compression);\r
+\r
+               [DllImport("hb.dll", EntryPoint = "hb_audio_compression_get_default", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern float hb_audio_compression_get_default(uint codec);\r
+\r
+\r
+//int                hb_audio_dither_get_default();\r
+//int                hb_audio_dither_get_default_method(); // default method, if enabled && supported\r
+//int                hb_audio_dither_is_supported(uint32_t codec);\r
+//int                hb_audio_dither_get_from_name(const char *name);\r
+//const char*        hb_audio_dither_get_description(int method);\r
+//const hb_dither_t* hb_audio_dither_get_next(const hb_dither_t *last);\r
+\r
+               [DllImport("hb.dll", EntryPoint = "hb_mixdown_is_supported", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern int hb_mixdown_is_supported(int mixdown, uint codec, ulong layout);\r
+\r
+               [DllImport("hb.dll", EntryPoint = "hb_mixdown_has_codec_support", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern int hb_mixdown_has_codec_support(int mixdown, uint codec);\r
+\r
+               [DllImport("hb.dll", EntryPoint = "hb_mixdown_has_remix_support", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern int hb_mixdown_has_remix_support(int mixdown, ulong layout);\r
 \r
+//int                 hb_mixdown_get_discrete_channel_count(int mixdown);\r
+//int                 hb_mixdown_get_low_freq_channel_count(int mixdown);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_video_rates", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern IntPtr hb_get_video_rates();\r
+               [DllImport("hb.dll", EntryPoint = "hb_mixdown_get_best", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern int hb_mixdown_get_best(uint codec, ulong layout, int mixdown);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_video_rates_count", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern int hb_get_video_rates_count();\r
+               [DllImport("hb.dll", EntryPoint = "hb_mixdown_get_default", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern int hb_mixdown_get_default(uint codec, ulong layout);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_audio_rates", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern IntPtr hb_get_audio_rates();\r
+//int                 hb_mixdown_get_from_name(const char *name);\r
+//const char*         hb_mixdown_get_name(int mixdown);\r
+//const char*         hb_mixdown_get_short_name(int mixdown);\r
+//const char*         hb_mixdown_sanitize_name(const char *name);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_audio_rates_count", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern int hb_get_audio_rates_count();\r
+               [DllImport("hb.dll", EntryPoint = "hb_mixdown_get_next", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern IntPtr hb_mixdown_get_next(IntPtr last);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_audio_rates_default", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern int hb_get_audio_rates_default();\r
+//int                 hb_video_encoder_get_default(int muxer);\r
+//int                 hb_video_encoder_get_from_name(const char *name);\r
+//const char*         hb_video_encoder_get_name(int encoder);\r
+//const char*         hb_video_encoder_get_short_name(int encoder);\r
+//const char*         hb_video_encoder_sanitize_name(const char *name);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_audio_bitrates", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern IntPtr hb_get_audio_bitrates();\r
+               [DllImport("hb.dll", EntryPoint = "hb_video_encoder_get_next", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern IntPtr hb_video_encoder_get_next(IntPtr last);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_audio_bitrates_count", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern int hb_get_audio_bitrates_count();\r
+/*\r
+ * hb_audio_encoder_get_fallback_for_passthru() will sanitize a passthru codec\r
+ * to the matching audio encoder (if any is available).\r
+ *\r
+ * hb_audio_encoder_get_from_name(), hb_audio_encoder_sanitize_name() will\r
+ * sanitize legacy encoder names, but won't convert passthru to an encoder.\r
+ */\r
+//int                 hb_audio_encoder_get_fallback_for_passthru(int passthru);\r
+//int                 hb_audio_encoder_get_default(int muxer);\r
+//int                 hb_audio_encoder_get_from_name(const char *name);\r
+//const char*         hb_audio_encoder_get_name(int encoder);\r
+//const char*         hb_audio_encoder_get_short_name(int encoder);\r
+//const char*         hb_audio_encoder_sanitize_name(const char *name);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_audio_mixdowns", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern IntPtr hb_get_audio_mixdowns();\r
+               [DllImport("hb.dll", EntryPoint = "hb_audio_encoder_get_next", CallingConvention = CallingConvention.Cdecl)]\r
+               public static extern IntPtr hb_audio_encoder_get_next(IntPtr last);\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_audio_mixdowns_count", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern int hb_get_audio_mixdowns_count();\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_video_encoders", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern IntPtr hb_get_video_encoders();\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_video_encoders_count", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern int hb_get_video_encoders_count();\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_audio_encoders", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern IntPtr hb_get_audio_encoders();\r
 \r
-               [DllImport("hb.dll", EntryPoint = "hb_get_audio_encoders_count", CallingConvention = CallingConvention.Cdecl)]\r
-               public static extern int hb_get_audio_encoders_count();\r
 \r
 \r
                /// void hb_autopassthru_apply_settings( hb_job_t * job )\r
index c34f5daf5ec4aa07215cdd71afc16d0ee092b947..6d6e62a346376b65f2d8bc778e05e01d0882da6b 100644 (file)
@@ -56,7 +56,7 @@ namespace HandBrake.Interop.HbLib
        {\r
                /// char*\r
                [MarshalAs(UnmanagedType.LPStr)]\r
-               public string @string;\r
+               public string name;\r
 \r
                /// int\r
                public int rate;\r
@@ -65,13 +65,8 @@ namespace HandBrake.Interop.HbLib
        [StructLayout(LayoutKind.Sequential)]\r
        public struct hb_mixdown_s\r
        {\r
-               /// char*\r
                [MarshalAs(UnmanagedType.LPStr)]\r
-               public string human_readable_name;\r
-\r
-               /// char*\r
-               [MarshalAs(UnmanagedType.LPStr)]\r
-               public string internal_name;\r
+               public string name;\r
 \r
                /// char*\r
                [MarshalAs(UnmanagedType.LPStr)]\r
@@ -85,12 +80,12 @@ namespace HandBrake.Interop.HbLib
        public struct hb_encoder_s\r
        {\r
                [MarshalAs(UnmanagedType.LPStr)]\r
-               public string human_readable_name;\r
+               public string name;\r
 \r
                [MarshalAs(UnmanagedType.LPStr)]\r
                public string short_name;\r
 \r
-               public int encoder;\r
+               public int codec;\r
 \r
                public int muxers;\r
        }\r
index 23181e7fe38ce9f7eb8ba4d1ce09479a92b0ca84..ae7fcd704af7412ce4e1e385ecef05cbd5449191 100644 (file)
@@ -12,38 +12,42 @@ namespace HandBrake.Interop.HbLib
 {\r
        public partial class NativeConstants\r
        {\r
-               public const uint HB_ACODEC_MASK = 0x00FFFF00;\r
-               public const uint HB_ACODEC_FAAC = 0x00000100;\r
-               public const uint HB_ACODEC_LAME = 0x00000200;\r
-               public const uint HB_ACODEC_VORBIS = 0x00000400;\r
-               public const uint HB_ACODEC_AC3 = 0x00000800;\r
-               public const uint HB_ACODEC_LPCM = 0x00001000;\r
-               public const uint HB_ACODEC_DCA = 0x00002000;\r
-               public const uint HB_ACODEC_CA_AAC = 0x00004000;\r
-               public const uint HB_ACODEC_CA_HAAC = 0x00008000;\r
-               public const uint HB_ACODEC_FFAAC = 0x00010000;\r
-               public const uint HB_ACODEC_FFMPEG = 0x00020000;\r
-               public const uint HB_ACODEC_DCA_HD = 0x00040000;\r
-               public const uint HB_ACODEC_MP3 = 0x00080000;\r
-               public const uint HB_ACODEC_FFFLAC = 0x00100000;\r
-               public const uint HB_ACODEC_FDK_AAC = 0x00400000;\r
-               public const uint HB_ACODEC_FDK_HAAC = 0x00800000;\r
-               public const uint HB_ACODEC_FF_MASK = 0x00FF2000;\r
-               public const uint HB_ACODEC_PASS_FLAG = 0x40000000;\r
-               public const uint HB_ACODEC_PASS_MASK = (HB_ACODEC_MP3 | HB_ACODEC_FFAAC | HB_ACODEC_DCA_HD | HB_ACODEC_AC3 | HB_ACODEC_DCA);\r
-               public const uint HB_ACODEC_AUTO_PASS = (HB_ACODEC_PASS_MASK | HB_ACODEC_PASS_FLAG);\r
-               public const uint HB_ACODEC_MP3_PASS = (HB_ACODEC_MP3 | HB_ACODEC_PASS_FLAG);\r
-               public const uint HB_ACODEC_AAC_PASS = (HB_ACODEC_FFAAC | HB_ACODEC_PASS_FLAG);\r
-               public const uint HB_ACODEC_AC3_PASS = (HB_ACODEC_AC3 | HB_ACODEC_PASS_FLAG);\r
-               public const uint HB_ACODEC_DCA_PASS = (HB_ACODEC_DCA | HB_ACODEC_PASS_FLAG);\r
-               public const uint HB_ACODEC_DCA_HD_PASS = (HB_ACODEC_DCA_HD | HB_ACODEC_PASS_FLAG);\r
-               public const uint HB_ACODEC_ANY = (HB_ACODEC_MASK | HB_ACODEC_PASS_FLAG);\r
+        // Audio Encoders\r
+        public const uint  HB_ACODEC_MASK   =   0x00FFFF00;\r
+           public const uint HB_ACODEC_FAAC = 0x00000100;\r
+           public const uint HB_ACODEC_LAME = 0x00000200;\r
+           public const uint HB_ACODEC_VORBIS = 0x00000400;\r
+           public const uint HB_ACODEC_AC3 = 0x00000800;\r
+           public const uint HB_ACODEC_LPCM = 0x00001000;\r
+           public const uint HB_ACODEC_DCA = 0x00002000;\r
+           public const uint HB_ACODEC_CA_AAC = 0x00004000;\r
+           public const uint HB_ACODEC_CA_HAAC = 0x00008000;\r
+           public const uint HB_ACODEC_FFAAC = 0x00010000;\r
+           public const uint HB_ACODEC_FFMPEG = 0x00020000;\r
+           public const uint HB_ACODEC_DCA_HD = 0x00040000;\r
+           public const uint HB_ACODEC_MP3 = 0x00080000;\r
+           public const uint HB_ACODEC_FFFLAC = 0x00100000;\r
+           public const uint HB_ACODEC_FFFLAC24 = 0x00200000;\r
+           public const uint HB_ACODEC_FDK_AAC = 0x00400000;\r
+           public const uint HB_ACODEC_FDK_HAAC = 0x00800000;\r
+           public const uint HB_ACODEC_FF_MASK = 0x00FF2000;\r
+           public const uint HB_ACODEC_PASS_FLAG = 0x40000000;\r
+           public const uint HB_ACODEC_PASS_MASK = (HB_ACODEC_MP3 | HB_ACODEC_FFAAC | HB_ACODEC_DCA_HD | HB_ACODEC_AC3 | HB_ACODEC_DCA);\r
+           public const uint HB_ACODEC_AUTO_PASS = (HB_ACODEC_PASS_MASK | HB_ACODEC_PASS_FLAG);\r
+           public const uint HB_ACODEC_MP3_PASS = (HB_ACODEC_MP3 | HB_ACODEC_PASS_FLAG);\r
+           public const uint HB_ACODEC_AAC_PASS = (HB_ACODEC_FFAAC | HB_ACODEC_PASS_FLAG);\r
+           public const uint HB_ACODEC_AC3_PASS = (HB_ACODEC_AC3 | HB_ACODEC_PASS_FLAG);\r
+           public const uint HB_ACODEC_DCA_PASS = (HB_ACODEC_DCA | HB_ACODEC_PASS_FLAG);\r
+           public const uint HB_ACODEC_DCA_HD_PASS = (HB_ACODEC_DCA_HD | HB_ACODEC_PASS_FLAG);\r
+           public const uint HB_ACODEC_ANY = (HB_ACODEC_MASK | HB_ACODEC_PASS_FLAG);\r
 \r
+        // Subtitle Types\r
                public const int HB_SUBSTREAM_BD_TRUEHD = 0x72;\r
                public const int HB_SUBSTREAM_BD_AC3 = 0x76;\r
                public const int HB_SUBSTREAM_BD_DTSHD = 0x72;\r
                public const int HB_SUBSTREAM_BD_DTS = 0x71;\r
 \r
+        // Video Encoders\r
                public const int HB_VCODEC_MASK = 0x0000FF;\r
                public const int HB_VCODEC_X264 = 0x000001;\r
                public const int HB_VCODEC_THEORA = 0x000002;\r
@@ -52,9 +56,10 @@ namespace HandBrake.Interop.HbLib
                public const int HB_VCODEC_FFMPEG_MPEG2 = 0x000020;\r
                public const int HB_VCODEC_FFMPEG_MASK = 0x0000F0;\r
 \r
+        // Muxers\r
                public const int HB_MUX_MASK = 0xFF0000;\r
                public const int HB_MUX_MP4 = 0x010000;\r
-               public const int HB_MUX_MKV = 0x200000;\r
+               public const int HB_MUX_MKV = 0x100000;\r
 \r
                public const int HBTF_NO_IDR = 1 << 0;\r
 \r
index e9f08fe47baa2fdf1af0340019461a72ae767ec2..44f9e5ba8103e9d7e210b9ab39ba0c1eee0c38c9 100644 (file)
@@ -74,10 +74,6 @@ namespace HandBrake.Interop.HbLib
                /// int\r
                public int vbitrate;\r
 \r
-               public int pfr_vrate;\r
-\r
-               public int pfr_vrate_base;\r
-\r
                /// int\r
                public int vrate;\r
 \r
index 8bf68b2e16981beaab3f7b41978754d197bcabb3..bd58ec6a0f72f3c1d22edadb5c2dfb2b8fc9a4fc 100644 (file)
@@ -11,9 +11,11 @@ namespace HandBrake.Interop
 {\r
        using System;\r
        using System.Collections.Generic;\r
+       using System.Linq;\r
        using System.Runtime.InteropServices;\r
 \r
        using HandBrake.Interop.HbLib;\r
+       using Model.Encoding;\r
 \r
        /// <summary>\r
        /// Helper utilities for native interop.\r
@@ -91,7 +93,7 @@ namespace HandBrake.Interop
                        }\r
 \r
                        return result;\r
-               } \r
+               }\r
 \r
                /// <summary>\r
                /// Creats a new, empty native HandBrake list.\r
@@ -182,6 +184,42 @@ namespace HandBrake.Interop
                        return returnList;\r
                }\r
 \r
+               /// <summary>\r
+               /// Reads in a list of objects given an interator and a conversion function.\r
+               /// </summary>\r
+               /// <typeparam name="T1">The type of the struct given by the iterator.</typeparam>\r
+               /// <typeparam name="T2">The object type to convert to.</typeparam>\r
+               /// <param name="iterator">The iterator to use to build the list.</param>\r
+               /// <param name="converter">The converter to convert from the struct to the object.</param>\r
+               /// <returns>The list of objects.</returns>\r
+               public static List<T2> GetListFromIterator<T1, T2>(Func<IntPtr, IntPtr> iterator, Func<T1, T2> converter)\r
+               {\r
+                       return ReadStructureListFromIterator<T1>(iterator).Select(converter).ToList();\r
+               } \r
+\r
+               /// <summary>\r
+               /// Reads in a list of structs given an iterator.\r
+               /// </summary>\r
+               /// <typeparam name="T">The type of the struct.</typeparam>\r
+               /// <param name="iterator">The iterator to use to build the list.</param>\r
+               /// <returns>The list of structs.</returns>\r
+               public static List<T> ReadStructureListFromIterator<T>(Func<IntPtr, IntPtr> iterator)\r
+               {\r
+                       var structureList = new List<T>();\r
+                       IntPtr current = IntPtr.Zero;\r
+\r
+                       current = iterator(current);\r
+                       while (current != IntPtr.Zero)\r
+                       {\r
+                               T encoder = ReadStructure<T>(current);\r
+                               structureList.Add(encoder);\r
+\r
+                               current = iterator(current);\r
+                       }\r
+\r
+                       return structureList;\r
+               }\r
+\r
                /// <summary>\r
                /// Closes the given job.\r
                /// </summary>\r
index 9f877cd9bdb372ed4ff9dddaab110dadbf0f14e4..ebfefff0a2c17eeb9cb54e09abb7e276ace2a3cd 100644 (file)
@@ -17,30 +17,48 @@ namespace HandBrake.Interop.Model
        using HandBrake.Interop.Model.Encoding;\r
        using HandBrake.Interop.SourceData;\r
 \r
-    /// <summary>\r
-    /// The encoders.\r
-    /// </summary>\r
-    public static class Encoders\r
+       /// <summary>\r
+       /// The encoders.\r
+       /// </summary>\r
+       public static class Encoders\r
        {\r
-           /// <summary>\r
-           /// The audio encoders.\r
-           /// </summary>\r
-           private static List<HBAudioEncoder> audioEncoders;\r
-\r
-           /// <summary>\r
-           /// The video encoders.\r
-           /// </summary>\r
-           private static List<HBVideoEncoder> videoEncoders;\r
-\r
-           /// <summary>\r
-           /// The mixdowns.\r
-           /// </summary>\r
-           private static List<HBMixdown> mixdowns;\r
-\r
-           /// <summary>\r
-           /// The audio bitrates.\r
-           /// </summary>\r
-           private static List<int> audioBitrates; \r
+               /// <summary>\r
+               /// The audio encoders.\r
+               /// </summary>\r
+               private static List<HBAudioEncoder> audioEncoders;\r
+\r
+               /// <summary>\r
+               /// The video encoders.\r
+               /// </summary>\r
+               private static List<HBVideoEncoder> videoEncoders;\r
+\r
+               /// <summary>\r
+               /// Video framerates in pts.\r
+               /// </summary>\r
+               private static List<HBRate> videoFramerates; \r
+\r
+               /// <summary>\r
+               /// The mixdowns.\r
+               /// </summary>\r
+               private static List<HBMixdown> mixdowns;\r
+\r
+               /// <summary>\r
+               /// The audio bitrates.\r
+               /// </summary>\r
+               private static List<int> audioBitrates;\r
+\r
+               /// <summary>\r
+               /// Audio sample rates in Hz.\r
+               /// </summary>\r
+               private static List<HBRate> audioSampleRates; \r
+\r
+               /// <summary>\r
+               /// Initializes static members of the Encoders class.\r
+               /// </summary>\r
+               static Encoders()\r
+               {\r
+                       HandBrakeUtils.EnsureGlobalInit();\r
+               }\r
 \r
                /// <summary>\r
                /// Gets a list of supported audio encoders.\r
@@ -51,12 +69,7 @@ namespace HandBrake.Interop.Model
                        {\r
                                if (audioEncoders == null)\r
                                {\r
-                                       IntPtr encodersPtr = HBFunctions.hb_get_audio_encoders();\r
-                                       int encoderCount = HBFunctions.hb_get_audio_encoders_count();\r
-\r
-                                       audioEncoders = InteropUtilities.ConvertArray<hb_encoder_s>(encodersPtr, encoderCount)\r
-                                               .Select(Converters.NativeToAudioEncoder)\r
-                                               .ToList();\r
+                                       audioEncoders = InteropUtilities.GetListFromIterator<hb_encoder_s, HBAudioEncoder>(HBFunctions.hb_audio_encoder_get_next, Converters.NativeToAudioEncoder);\r
                                }\r
 \r
                                return audioEncoders;\r
@@ -72,18 +85,29 @@ namespace HandBrake.Interop.Model
                        {\r
                                if (videoEncoders == null)\r
                                {\r
-                                       IntPtr encodersPtr = HBFunctions.hb_get_video_encoders();\r
-                                       int encoderCount = HBFunctions.hb_get_video_encoders_count();\r
-\r
-                                       videoEncoders = InteropUtilities.ConvertArray<hb_encoder_s>(encodersPtr, encoderCount)\r
-                                               .Select(Converters.NativeToVideoEncoder)\r
-                                               .ToList();\r
+                                       videoEncoders = InteropUtilities.GetListFromIterator<hb_encoder_s, HBVideoEncoder>(HBFunctions.hb_video_encoder_get_next, Converters.NativeToVideoEncoder);\r
                                }\r
 \r
                                return videoEncoders;\r
                        }\r
                }\r
 \r
+               /// <summary>\r
+               /// Gets a list of supported video framerates (in pts).\r
+               /// </summary>\r
+               public static List<HBRate> VideoFramerates\r
+               {\r
+                       get\r
+                       {\r
+                               if (videoFramerates == null)\r
+                               {\r
+                                       videoFramerates = InteropUtilities.GetListFromIterator<hb_rate_s, HBRate>(HBFunctions.hb_video_framerate_get_next, Converters.NativeToRate);\r
+                               }\r
+\r
+                               return videoFramerates;\r
+                       }\r
+               } \r
+\r
                /// <summary>\r
                /// Gets a list of supported mixdowns.\r
                /// </summary>\r
@@ -93,12 +117,7 @@ namespace HandBrake.Interop.Model
                        {\r
                                if (mixdowns == null)\r
                                {\r
-                                       IntPtr mixdownsPtr = HBFunctions.hb_get_audio_mixdowns();\r
-                                       int mixdownsCount = HBFunctions.hb_get_audio_mixdowns_count();\r
-\r
-                                       mixdowns = InteropUtilities.ConvertArray<hb_mixdown_s>(mixdownsPtr, mixdownsCount)\r
-                                               .Select(Converters.NativeToMixdown)\r
-                                               .ToList();\r
+                                       mixdowns = InteropUtilities.GetListFromIterator<hb_mixdown_s, HBMixdown>(HBFunctions.hb_mixdown_get_next, Converters.NativeToMixdown);\r
                                }\r
 \r
                                return mixdowns;\r
@@ -114,18 +133,29 @@ namespace HandBrake.Interop.Model
                        {\r
                                if (audioBitrates == null)\r
                                {\r
-                                       IntPtr audioBitratesPtr = HBFunctions.hb_get_audio_bitrates();\r
-                                       int audioBitratesCount = HBFunctions.hb_get_audio_bitrates_count();\r
-\r
-                                       audioBitrates = InteropUtilities.ConvertArray<hb_rate_s>(audioBitratesPtr, audioBitratesCount)\r
-                                               .Select(b => b.rate)\r
-                                               .ToList();\r
+                                       audioBitrates = InteropUtilities.GetListFromIterator<hb_rate_s, int>(HBFunctions.hb_audio_bitrate_get_next, b => b.rate);\r
                                }\r
 \r
                                return audioBitrates;\r
                        }\r
                }\r
 \r
+               /// <summary>\r
+               /// Gets a list of supported audio sample rates (in Hz).\r
+               /// </summary>\r
+               public static List<HBRate> AudioSampleRates\r
+               {\r
+                       get\r
+                       {\r
+                               if (audioSampleRates == null)\r
+                               {\r
+                                       audioSampleRates = InteropUtilities.GetListFromIterator<hb_rate_s, HBRate>(HBFunctions.hb_audio_samplerate_get_next, Converters.NativeToRate);\r
+                               }\r
+\r
+                               return audioSampleRates;\r
+                       }\r
+               } \r
+\r
                /// <summary>\r
                /// Gets the audio encoder with the specified short name.\r
                /// </summary>\r
@@ -199,7 +229,7 @@ namespace HandBrake.Interop.Model
                /// <returns>A sanitized mixdown value.</returns>\r
                public static HBMixdown SanitizeMixdown(HBMixdown mixdown, HBAudioEncoder encoder, ulong layout)\r
                {\r
-                       int sanitizedMixdown = HBFunctions.hb_get_best_mixdown((uint)encoder.Id, layout, mixdown.Id);\r
+                       int sanitizedMixdown = HBFunctions.hb_mixdown_get_best((uint)encoder.Id, layout, mixdown.Id);\r
                        return Mixdowns.Single(m => m.Id == sanitizedMixdown);\r
                }\r
 \r
@@ -211,7 +241,7 @@ namespace HandBrake.Interop.Model
                /// <returns>The default mixdown for the given codec and channel layout.</returns>\r
                public static HBMixdown GetDefaultMixdown(HBAudioEncoder encoder, ulong layout)\r
                {\r
-                       int defaultMixdown = HBFunctions.hb_get_default_mixdown((uint)encoder.Id, layout);\r
+                       int defaultMixdown = HBFunctions.hb_mixdown_get_default((uint)encoder.Id, layout);\r
                        return Mixdowns.Single(m => m.Id == defaultMixdown);\r
                }\r
 \r
@@ -227,7 +257,7 @@ namespace HandBrake.Interop.Model
                        int low = 0;\r
                        int high = 0;\r
 \r
-                       HBFunctions.hb_get_audio_bitrate_limits((uint)encoder.Id, sampleRate, mixdown.Id, ref low, ref high);\r
+                       HBFunctions.hb_audio_bitrate_get_limits((uint)encoder.Id, sampleRate, mixdown.Id, ref low, ref high);\r
 \r
                        return new BitrateLimits { Low = low, High = high };\r
                }\r
@@ -242,7 +272,7 @@ namespace HandBrake.Interop.Model
                /// <returns>A sanitized audio bitrate.</returns>\r
                public static int SanitizeAudioBitrate(int audioBitrate, HBAudioEncoder encoder, int sampleRate, HBMixdown mixdown)\r
                {\r
-                       return HBFunctions.hb_get_best_audio_bitrate((uint)encoder.Id, audioBitrate, sampleRate, mixdown.Id);\r
+                       return HBFunctions.hb_audio_bitrate_get_best((uint)encoder.Id, audioBitrate, sampleRate, mixdown.Id);\r
                }\r
 \r
                /// <summary>\r
@@ -254,7 +284,7 @@ namespace HandBrake.Interop.Model
                /// <returns>The default bitrate for these parameters.</returns>\r
                public static int GetDefaultBitrate(HBAudioEncoder encoder, int sampleRate, HBMixdown mixdown)\r
                {\r
-                       return HBFunctions.hb_get_default_audio_bitrate((uint) encoder.Id, sampleRate, mixdown.Id);\r
+                       return HBFunctions.hb_audio_bitrate_get_default((uint) encoder.Id, sampleRate, mixdown.Id);\r
                }\r
 \r
                /// <summary>\r
@@ -266,7 +296,7 @@ namespace HandBrake.Interop.Model
                {\r
                        float low = 0, high = 0, granularity = 0;\r
                        int direction = 0;\r
-                       HBFunctions.hb_get_audio_quality_limits((uint)encoderId, ref low, ref high, ref granularity, ref direction);\r
+                       HBFunctions.hb_audio_quality_get_limits((uint)encoderId, ref low, ref high, ref granularity, ref direction);\r
 \r
                        return new RangeLimits\r
                        {\r
@@ -286,7 +316,7 @@ namespace HandBrake.Interop.Model
                {\r
                        float low = 0, high = 0, granularity = 0;\r
                        int direction = 0;\r
-                       HBFunctions.hb_get_audio_compression_limits((uint)encoderId, ref low, ref high, ref granularity, ref direction);\r
+                       HBFunctions.hb_audio_compression_get_limits((uint)encoderId, ref low, ref high, ref granularity, ref direction);\r
 \r
                        return new RangeLimits\r
                        {\r
index 8fb242ac60d608956c396c25f50bbdd6e4d21071..bc7b5bf208063c6c0ebc7548df8a625595c9575a 100644 (file)
@@ -11,48 +11,71 @@ namespace HandBrake.Interop.Model.Encoding
 {\r
     using System.ComponentModel.DataAnnotations;\r
 \r
+    using HandBrake.Interop.Attributes;\r
+\r
     /// <summary>\r
     /// The audio encoder.\r
     /// </summary>\r
     public enum AudioEncoder\r
     {\r
         [Display(Name = "AAC (faac)")]\r
-        Faac = 0,\r
+        [ShortName("faac")]\r
+        faac = 0,\r
 \r
-        [Display(Name = "AAC (ffmpeg)")]\r
+        [Display(Name = "AAC (avcodec)")]\r
+        [ShortName("av_aac")]\r
         ffaac,\r
 \r
-        [Display(Name = "MP3 (lame)")]\r
+        [Display(Name = "AAC (FDK)")]\r
+        [ShortName("fdk_aac")]\r
+        fdkaac,\r
+\r
+        [Display(Name = "HE-AAC (FDK)")]\r
+        [ShortName("fdk_haac")]\r
+        fdkheaac,\r
+\r
+        [Display(Name = "MP3")]\r
+        [ShortName("mp3")]\r
         Lame,\r
 \r
-        [Display(Name = "AC3 (ffmpeg)")]\r
+        [Display(Name = "AC3")]\r
+        [ShortName("ac3")]\r
         Ac3,\r
 \r
         [Display(Name = "Auto Passthru")]\r
+        [ShortName("copy")]\r
         Passthrough,\r
 \r
         [Display(Name = "AC3 Passthru")]\r
+        [ShortName("copy:ac3")]\r
         Ac3Passthrough,\r
 \r
         [Display(Name = "DTS Passthru")]\r
+        [ShortName("copy:dts")]\r
         DtsPassthrough,\r
 \r
         [Display(Name = "DTS-HD Passthru")]\r
+        [ShortName("copy:dtshd")]\r
         DtsHDPassthrough,\r
 \r
         [Display(Name = "AAC Passthru")]\r
+        [ShortName("copy:aac")]\r
         AacPassthru,\r
 \r
         [Display(Name = "MP3 Passthru")]\r
+        [ShortName("copy:mp3")]\r
         Mp3Passthru,\r
 \r
-        [Display(Name = "Vorbis (vorbis)")]\r
+        [Display(Name = "Vorbis")]\r
+        [ShortName("vorbis")]\r
         Vorbis,\r
 \r
-        [Display(Name = "FLAC (ffmpeg)")]\r
+        [Display(Name = "FLAC 16-bit")]\r
+        [ShortName("flac16")]\r
         ffflac,\r
 \r
-        [Display(Name = "FLAC (24-bit)")]\r
+        [Display(Name = "FLAC 24-bit")]\r
+        [ShortName("flac24")]\r
         ffflac24,\r
     }\r
 }\r
diff --git a/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/HBRate.cs b/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/HBRate.cs
new file mode 100644 (file)
index 0000000..2862574
--- /dev/null
@@ -0,0 +1,24 @@
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="HBRate.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
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrake.Interop.Model.Encoding\r
+{\r
+       /// <summary>\r
+       /// Represents a rate in HandBrake: audio sample rate or video framerate.\r
+       /// </summary>\r
+       public class HBRate\r
+       {\r
+               /// <summary>\r
+               /// Gets or sets the name to use for this rate.\r
+               /// </summary>\r
+               public string Name { get; set; }\r
+\r
+               /// <summary>\r
+               /// Gets or sets the raw rate.\r
+               /// </summary>\r
+               public int Rate { get; set; }\r
+       }\r
+}\r
index afdb831486b2240e626f97875c5e24f54097300a..b355d5038f558ba7f89c0e86826f58d86d33b937 100644 (file)
@@ -3,7 +3,7 @@
 //   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
-//   Defines the VideoEncoder type.\r
+//   The video encoder.\r
 // </summary>\r
 // --------------------------------------------------------------------------------------------------------------------\r
 \r
@@ -11,24 +11,30 @@ namespace HandBrake.Interop.Model.Encoding
 {\r
        using System.ComponentModel.DataAnnotations;\r
 \r
+       using HandBrake.Interop.Attributes;\r
+\r
     /// <summary>\r
     /// The video encoder.\r
     /// </summary>\r
     public enum VideoEncoder\r
        {\r
                [Display(Name = "H.264 (x264)")]\r
+        [ShortName("x264")]\r
                X264 = 0,\r
 \r
         [Display(Name = "H.264 (Intel QSV)")]\r
         QuickSync,\r
 \r
                [Display(Name = "MPEG-4 (FFmpeg)")]\r
+        [ShortName("mpeg4")]\r
                FFMpeg,\r
 \r
                [Display(Name = "MPEG-2 (FFmpeg)")]\r
+        [ShortName("mpeg2")]\r
                FFMpeg2,\r
 \r
                [Display(Name = "VP3 (Theora)")]\r
-               Theora,\r
+        [ShortName("theora")]\r
+               Theora\r
        }\r
 }\r
index 936eb0fa980ab5d598f850731990f00ce5a91841..2902f4f119c9514a8dd2777335fdaa0132ec0886 100644 (file)
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 // You can specify all the values or you can default the Build and Revision Numbers \r
 // by using the '*' as shown below:\r
 // [assembly: AssemblyVersion("1.0.*")]\r
-[assembly: AssemblyVersion("1.40.0.0")]\r
-[assembly: AssemblyFileVersion("1.40.0.0")]\r
+[assembly: AssemblyVersion("1.43.0.0")]\r
+[assembly: AssemblyFileVersion("1.43.0.0")]\r
index dce9473113c652477d6e829de43bbf01b53266d3..d24c9998bc8799f6ae5d725add7f528b4fad4fdf 100644 (file)
@@ -48,6 +48,6 @@ namespace HandBrake.Interop.SourceData
         /// <summary>\r
         /// The flac.\r
         /// </summary>\r
-        Flac\r
+        Flac,       \r
     }\r
 }
\ No newline at end of file
index 661ef7fe3473ebb60fa1000fc43af4fb18af8444..8edc537fcca0230bde4c7e388f570ba819b2a311 100644 (file)
@@ -52,8 +52,6 @@ namespace HandBrakeWPF.Commands
 \r
         #region Implemented Interfaces\r
 \r
-        #region ICommand\r
-\r
         /// <summary>\r
         /// The can execute.\r
         /// </summary>\r
@@ -80,7 +78,5 @@ namespace HandBrakeWPF.Commands
         }\r
 \r
         #endregion\r
-\r
-        #endregion\r
     }\r
 }
\ No newline at end of file
index f4e805957500cb0e31341dba683dc084ec68d878..bd7aeffca7e6bd252caa958d38f628acae14ad7b 100644 (file)
@@ -70,14 +70,10 @@ namespace HandBrakeWPF.Converters.Audio
                 int samplerate = this.GetBestSampleRate(track);\r
                 int srShift = this.GetSamplerateShift(samplerate);\r
                 int lfeCount = this.GetLowFreqChannelCount(track.MixDown);\r
-                int channels = this.GetChannelCount(track.MixDown) - lfeCount;\r
+                int channels = this.GetDiscreteChannelCount(track.MixDown) - lfeCount;\r
 \r
                 switch (track.Encoder)\r
                 {\r
-                    case AudioEncoder.Faac:\r
-                        low = (channels + lfeCount) * 32;\r
-                        max = (channels + lfeCount) * (192 >> srShift);\r
-                        break;\r
                     case AudioEncoder.ffaac:\r
                         low = ((channels + lfeCount) * 32);\r
                         max = ((channels + lfeCount) * ((192 + (64 * ((samplerate << srShift) >= 44100 ? 1 : 0))) >> srShift));\r
@@ -101,8 +97,17 @@ namespace HandBrakeWPF.Converters.Audio
                     case AudioEncoder.Mp3Passthru:\r
                     case AudioEncoder.Passthrough:\r
                     case AudioEncoder.ffflac:\r
+                    case AudioEncoder.ffflac24:\r
                         max = 1536; // Since we don't care, just set it to the max.\r
                         break;\r
+                    case AudioEncoder.fdkaac:\r
+                        low = channels * samplerate * 2 / 3000;\r
+                        max = channels * samplerate * 6 / 1000;\r
+                        break;\r
+                    case AudioEncoder.fdkheaac:\r
+                        low = (channels * (12 + (4 * (samplerate >= 44100 ? 1 : 0))));\r
+                        max = (channels - (channels > 2 ? 1 : 0)) * (48 + (16 * (samplerate >= 22050 ? 1 : 0)));\r
+                        break;\r
                     default:\r
                         max = 768;\r
                         break;\r
@@ -132,7 +137,7 @@ namespace HandBrakeWPF.Converters.Audio
         /// <returns>\r
         /// The System.Int32.\r
         /// </returns>\r
-        private int GetChannelCount(Mixdown mixdown)\r
+        private int GetDiscreteChannelCount(Mixdown mixdown)\r
         {\r
             switch (mixdown)\r
             {\r
@@ -228,6 +233,10 @@ namespace HandBrakeWPF.Converters.Audio
             {\r
                 // AC-3 < 32 kHz suffers from poor hardware compatibility\r
                 bestSamplerate = 32000;\r
+            } \r
+            else if ((samplerate < 16000) && (track.Encoder == AudioEncoder.fdkheaac))\r
+            {\r
+                bestSamplerate = 16000;\r
             }\r
             else\r
             {\r
index 1db7a7c0a3411b5e1a04ff597721e0c232f662ab..27cb2e5dec7b6096a18a23fd1cda2a7f6c3cc040 100644 (file)
@@ -51,6 +51,8 @@ namespace HandBrakeWPF.Converters.Audio
                 List<AudioEncoder> encoders = EnumHelper<AudioEncoder>.GetEnumList().ToList();\r
                 EncodeTask task = values[1] as EncodeTask;\r
 \r
+                encoders.Remove(AudioEncoder.faac);\r
+\r
                 if (task != null && task.OutputFormat != OutputFormat.Mkv)\r
                 {\r
                     encoders.Remove(AudioEncoder.Vorbis);\r
index 85ee06fb78d8e98772f756e45202cbd93cc25fed..83535814b9269071c8865c6d034b4d161592e48d 100644 (file)
     <Compile Include="Converters\Video\VideoEncoderConverter.cs" />\r
     <Compile Include="Helpers\GrayscaleImage.cs" />\r
     <Compile Include="Helpers\GrowlCommunicator.cs" />\r
+    <Compile Include="Helpers\AppStyleHelper.cs" />\r
     <Compile Include="Model\OptionsTab.cs" />\r
     <Compile Include="Model\SelectionTitle.cs" />\r
     <Compile Include="Services\EncodeServiceWrapper.cs" />\r
   <ItemGroup>\r
     <Content Include="defaultsettings.xml">\r
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
+      <SubType>Designer</SubType>\r
     </Content>\r
     <Resource Include="Views\Images\add40.png" />\r
     <Resource Include="Views\Images\add.png" />\r
diff --git a/win/CS/HandBrakeWPF/Helpers/AppStyleHelper.cs b/win/CS/HandBrakeWPF/Helpers/AppStyleHelper.cs
new file mode 100644 (file)
index 0000000..9b67f97
--- /dev/null
@@ -0,0 +1,37 @@
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="AppStyleHelper.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
+//   Defines the AppStyleHelper type.\r
+// </summary>\r
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrakeWPF.Helpers\r
+{\r
+    using System.Windows;\r
+\r
+    using Caliburn.Micro;\r
+\r
+    using HandBrake.ApplicationServices.Services.Interfaces;\r
+\r
+    /// <summary>\r
+    /// The AppStyle Helper.\r
+    /// </summary>\r
+    public class AppStyleHelper\r
+    {\r
+        /// <summary>\r
+        /// Gets a value indicating whether use system colours.\r
+        /// </summary>\r
+        public static bool UseSystemColours\r
+        {\r
+            get\r
+            {\r
+                IUserSettingService userSettingService = IoC.Get<IUserSettingService>();\r
+                bool useSystemColours = userSettingService.GetUserSetting<bool>(UserSettingConstants.UseSystemColours);\r
+\r
+                return useSystemColours || SystemParameters.HighContrast;\r
+            }\r
+        }\r
+    }\r
+}\r
index f0b80984961a0f9ab0f5820d1be2e4fa967eddb3..4be52964e12820c30c0db20629cfc9c546923ff9 100644 (file)
@@ -55,5 +55,10 @@ namespace HandBrakeWPF.Model
         /// Gets or sets the tag.\r
         /// </summary>\r
         public object Tag { get; set; }\r
+\r
+        /// <summary>\r
+        /// Gets or sets the input gesture text.\r
+        /// </summary>\r
+        public string InputGestureText { get; set; }\r
     }\r
 }\r
index b01134b91421f703c6696e743d3854a3230b30d0..b9ce40b0cf9a447fc24b2dbbc68a15e74635bf26 100644 (file)
@@ -236,6 +236,11 @@ namespace HandBrakeWPF
         /// </summary>\r
         public const string ShowPresetPanel = "ShowPresetPanel";\r
 \r
+        /// <summary>\r
+        /// The use system colours.\r
+        /// </summary>\r
+        public const string UseSystemColours = "UseSystemColours";\r
+\r
         #endregion\r
     }\r
 }
\ No newline at end of file
index c7fcbd0ae3ce97217d57b12c01b3c70fd66df5ad..81ac6a688dd2f78a231b730e843f72d647b0bca2 100644 (file)
@@ -922,6 +922,8 @@ namespace HandBrakeWPF.ViewModels
             }\r
         }\r
 \r
+        public int ProgressPercentage { get; set; }\r
+\r
         #endregion\r
 \r
         #region Load and Shutdown Handling\r
@@ -936,7 +938,11 @@ namespace HandBrakeWPF.ViewModels
             // Perform an update check if required\r
             this.updateService.PerformStartupUpdateCheck(this.HandleUpdateCheckResults);\r
 \r
+            // Show or Hide the Preset Panel.\r
+            this.IsPresetPanelShowing = this.userSettingService.GetUserSetting<bool>(UserSettingConstants.ShowPresetPanel);\r
+\r
             // Setup the presets.\r
+            this.presetService.Load();\r
             if (this.presetService.CheckIfPresetsAreOutOfDate())\r
                 if (!this.userSettingService.GetUserSetting<bool>(UserSettingConstants.PresetNotification))\r
                     this.errorService.ShowMessageBox("HandBrake has determined your built-in presets are out of date... These presets will now be updated." + Environment.NewLine +\r
@@ -951,9 +957,6 @@ namespace HandBrakeWPF.ViewModels
             // Populate the Source menu with drives.\r
             this.SourceMenu = new BindingList<SourceMenuItem>(this.GenerateSourceMenu());\r
 \r
-            // Show or Hide the Preset Panel.\r
-            this.IsPresetPanelShowing = this.userSettingService.GetUserSetting<bool>(UserSettingConstants.ShowPresetPanel);\r
-\r
             // Log Cleaning\r
             if (userSettingService.GetUserSetting<bool>(UserSettingConstants.ClearOldLogs))\r
             {\r
@@ -1910,6 +1913,8 @@ namespace HandBrakeWPF.ViewModels
                         }\r
 \r
                         lastEncodePercentage = percent;\r
+                        this.ProgressPercentage = percent;\r
+                        this.NotifyOfPropertyChange(() => ProgressPercentage);\r
                     }\r
                     else\r
                     {\r
@@ -2016,14 +2021,16 @@ namespace HandBrakeWPF.ViewModels
                 Image = new Image { Source = new BitmapImage(new Uri("pack://application:,,,/HandBrake;component/Views/Images/folder.png")), Width = 16, Height = 16 },\r
                 Text = "Open Folder",\r
                 Command = new SourceMenuCommand(this.FolderScan),\r
-                IsDrive = false\r
+                IsDrive = false,\r
+                InputGestureText = "Ctrl + R"\r
             };\r
             SourceMenuItem fileScan = new SourceMenuItem\r
             {\r
                 Image = new Image { Source = new BitmapImage(new Uri("pack://application:,,,/HandBrake;component/Views/Images/Movies.png")), Width = 16, Height = 16 },\r
                 Text = "Open File",\r
                 Command = new SourceMenuCommand(this.FileScan),\r
-                IsDrive = false\r
+                IsDrive = false,\r
+                InputGestureText = "Ctrl + F"\r
             };\r
 \r
             SourceMenuItem titleSpecific = new SourceMenuItem { Text = "Title Specific Scan" };\r
index dc9f6806b9e47e7ae93c406b4d6ccab6598e03a5..e1376363a8428e1cb1fb8f723f2f262300dd5a9a 100644 (file)
@@ -358,6 +358,11 @@ namespace HandBrakeWPF.ViewModels
         /// </summary>\r
         private bool removePunctuation;\r
 \r
+        /// <summary>\r
+        /// The use system colours for styles.\r
+        /// </summary>\r
+        private bool useSystemColoursForStyles;\r
+\r
         #endregion\r
 \r
         #region Constructors and Destructors\r
@@ -604,6 +609,23 @@ namespace HandBrakeWPF.ViewModels
                 this.NotifyOfPropertyChange("WhenDoneOptions");\r
             }\r
         }\r
+\r
+        /// <summary>\r
+        /// Gets or sets a value indicating whether use system colours.\r
+        /// </summary>\r
+        public bool UseSystemColoursForStylesForStyles\r
+        {\r
+            get\r
+            {\r
+                return this.useSystemColoursForStyles;\r
+            }\r
+            set\r
+            {\r
+                this.useSystemColoursForStyles = value;\r
+                this.NotifyOfPropertyChange(() => UseSystemColoursForStylesForStyles);\r
+            }\r
+        }\r
+\r
         #endregion\r
 \r
         #region Output Files\r
@@ -1514,6 +1536,7 @@ namespace HandBrakeWPF.ViewModels
             this.SendFileTo = Path.GetFileNameWithoutExtension(this.userSettingService.GetUserSetting<string>(UserSettingConstants.SendFileTo)) ?? string.Empty;\r
             this.SendFileToPath = this.userSettingService.GetUserSetting<string>(UserSettingConstants.SendFileTo) ?? string.Empty;\r
             this.Arguments = this.userSettingService.GetUserSetting<string>(UserSettingConstants.SendFileToArgs) ?? string.Empty;\r
+            this.UseSystemColoursForStylesForStyles = this.userSettingService.GetUserSetting<bool>(UserSettingConstants.UseSystemColours);\r
 \r
             // #############################\r
             // Output Settings\r
@@ -1850,6 +1873,7 @@ namespace HandBrakeWPF.ViewModels
             this.userSettingService.SetUserSetting(UserSettingConstants.SendFileTo, this.SendFileToPath);\r
             this.userSettingService.SetUserSetting(UserSettingConstants.SendFile, this.SendFileAfterEncode);\r
             this.userSettingService.SetUserSetting(UserSettingConstants.SendFileToArgs, this.Arguments);\r
+            this.userSettingService.SetUserSetting(UserSettingConstants.UseSystemColours, this.UseSystemColoursForStylesForStyles);\r
 \r
             /* Output Files */\r
             this.userSettingService.SetUserSetting(UserSettingConstants.AutoNaming, this.AutomaticallyNameFiles);\r
index a64378a494798a443035eda14b3aeae654705dd0..39fee77fd1858b62cc61f1f86905fde97672b236 100644 (file)
@@ -15,6 +15,7 @@ namespace HandBrakeWPF.ViewModels
 \r
     using HandBrake.ApplicationServices.Services.Interfaces;\r
 \r
+    using HandBrakeWPF.Helpers;\r
     using HandBrakeWPF.Model;\r
     using HandBrakeWPF.Services.Interfaces;\r
     using HandBrakeWPF.ViewModels.Interfaces;\r
index 5d07e23219dd793bfef8048a4213482c7653eaa6..60e152a10e8a27af1333249d57d9a70a2dd91261 100644 (file)
@@ -1142,7 +1142,6 @@ namespace HandBrakeWPF.ViewModels
                 width = 720;\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
index f1766741e933fd51a28d0c6615fd4bc3e84e0a5c..7a13881dcffe017abfbf6bae94ae8937f3d3ee39 100644 (file)
@@ -13,6 +13,7 @@ namespace HandBrakeWPF.ViewModels
 \r
     using HandBrake.ApplicationServices.Services.Interfaces;\r
 \r
+    using HandBrakeWPF.Helpers;\r
     using HandBrakeWPF.ViewModels.Interfaces;\r
 \r
     /// <summary>\r
@@ -64,6 +65,17 @@ namespace HandBrakeWPF.ViewModels
             }\r
         }\r
 \r
+        /// <summary>\r
+        /// Gets a value indicating whether use system colours.\r
+        /// </summary>\r
+        public bool UseSystemColours\r
+        {\r
+            get\r
+            {\r
+                return AppStyleHelper.UseSystemColours;\r
+            }\r
+        }\r
+\r
         /// <summary>\r
         /// Gets or sets WindowManager.\r
         /// </summary>\r
index 28d17d776e1f9ecd629080bf7c2783ec94984158..c71f718583e06ba3d829f218d9843cd837271fa8 100644 (file)
@@ -12,7 +12,8 @@
              xmlns:dropButton="clr-namespace:HandBrakeWPF.Controls.DropButton"\r
              d:DesignHeight="170"\r
              d:DesignWidth="616"\r
-             mc:Ignorable="d">\r
+             mc:Ignorable="d"\r
+             x:Name="audioTab">\r
 \r
     <UserControl.Resources>\r
         <Conveters:EnumComboConverter x:Key="enumComboConverter" />\r
 \r
         <ListBox Grid.Row="2"\r
                  Margin="10,10,10,10"\r
-                 Background="LightGray"\r
                  dd:DragDrop.DropHandler="{Binding}"\r
                  dd:DragDrop.IsDragSource="True"\r
                  dd:DragDrop.IsDropTarget="True"\r
                  ItemsSource="{Binding Task.AudioTracks}"\r
                  SelectionMode="Extended">\r
+            <ListBox.Style>\r
+                <Style TargetType="ListBox">\r
+                    <Style.Triggers>\r
+                        <DataTrigger Binding="{Binding UseSystemColours}" Value="False">\r
+                            <Setter Property="Background" Value="LightGray" />\r
+                        </DataTrigger>\r
+                    </Style.Triggers>\r
+                </Style>\r
+            </ListBox.Style>\r
+            \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.Triggers>\r
+                        <DataTrigger Binding="{Binding DataContext.UseSystemColours, ElementName=audioTab}" Value="False">\r
+                            <Setter Property="Background" Value="WhiteSmoke" />\r
+                        </DataTrigger>\r
+                    </Style.Triggers>\r
                 </Style>\r
             </ListBox.ItemContainerStyle>\r
 \r
index fd95a5b53b985161b2668873776eecd6c60d6d40..67ac70c21cfc82679e20584cbb21a5d8a8b0f90e 100644 (file)
@@ -7,7 +7,6 @@
         xmlns:Micro="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro"\r
              xmlns:attachedProperties="clr-namespace:HandBrakeWPF.AttachedProperties"\r
              AllowDrop="True"\r
-        Background="#FFF0F0F0"\r
         FontSize="11"\r
         Micro:Message.Attach="[Event Loaded] = [Action Load]"\r
         SnapsToDevicePixels="True"\r
@@ -22,8 +21,7 @@
         </i:EventTrigger>\r
     </i:Interaction.Triggers>\r
 \r
-    <UserControl.Resources>\r
-\r
+    <UserControl.Resources>       \r
         <Style TargetType="Button">\r
             <Setter Property="FontWeight" Value="Bold" />\r
             <Setter Property="Padding" Value="5,1" />\r
         <Style TargetType="ListBoxItem">\r
             <Setter Property="Padding" Value="0,2,0,2" />\r
             <Style.Triggers>\r
-                <DataTrigger Binding="{Binding IsBuildIn}" Value="True">\r
+                <MultiDataTrigger>\r
+                    <MultiDataTrigger.Conditions>\r
+                        <Condition Binding="{Binding IsBuildIn}" Value="True" />\r
+                        <Condition Binding="{Binding DataContext.UseSystemColours, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" Value="False" />\r
+                    </MultiDataTrigger.Conditions>\r
                     <Setter Property="Foreground" Value="DarkBlue" />\r
-                </DataTrigger>\r
+                </MultiDataTrigger>\r
+                <!--<DataTrigger Binding="{Binding IsBuildIn}" Value="True">\r
+                    <Setter Property="Foreground" Value="DarkBlue" />\r
+                </DataTrigger>-->\r
                 <Trigger Property="IsSelected" Value="True">\r
                     <Setter Property="FontWeight" Value="Bold"/>\r
                     <Setter Property="Background" Value="Transparent"/>\r
                   HorizontalAlignment="Stretch"\r
                   VerticalAlignment="Top"\r
                   >\r
-                <MenuItem Header="File">\r
-                    <MenuItem Header="Cancel Scan" Command="{Binding CancelScanCommand}" />\r
+                <MenuItem Header="_File">\r
+                    <MenuItem Header="_Cancel Scan" Command="{Binding CancelScanCommand}" />\r
                     <Separator />\r
-                    <MenuItem Header="Exit" Micro:Message.Attach="[Event Click] = [Action ExitApplication]" />\r
+                    <MenuItem Header="_Exit" Micro:Message.Attach="[Event Click] = [Action ExitApplication]"  InputGestureText="Alt + F4" />\r
                 </MenuItem>\r
 \r
-                <MenuItem Header="Tools">\r
-                    <MenuItem Header="Show Queue" Micro:Message.Attach="[Event Click] = [Action OpenQueueWindow]">\r
+                <MenuItem Header="_Tools">\r
+                    <MenuItem Header="_Show Queue" Micro:Message.Attach="[Event Click] = [Action OpenQueueWindow]" InputGestureText="Ctrl + Q">\r
                         <MenuItem.Icon>\r
                             <Image Width="16" Source="Images/Queue_Small.png" />\r
                         </MenuItem.Icon>\r
                     </MenuItem>\r
-                    <MenuItem Header="Activity Log" Micro:Message.Attach="[Event Click] = [Action OpenLogWindow]">\r
+                    <MenuItem Header="_Activity Log" Micro:Message.Attach="[Event Click] = [Action OpenLogWindow]"  InputGestureText="Ctrl + L">\r
                         <MenuItem.Icon>\r
                             <Image Width="16" Source="Images/Output_Small.png" />\r
                         </MenuItem.Icon>\r
                     </MenuItem>\r
                     <Separator />\r
-                    <MenuItem Header="Options" Micro:Message.Attach="[Event Click] = [Action OpenOptionsWindow]">\r
+                    <MenuItem Header="_Options" Micro:Message.Attach="[Event Click] = [Action OpenOptionsWindow]">\r
                         <MenuItem.Icon>\r
                             <Image Width="16" Source="Images/Pref_Small.png" />\r
                         </MenuItem.Icon>\r
                 </MenuItem>\r
 \r
 \r
-                <MenuItem Header="Presets" x:Name="presetMenu">\r
-                    <MenuItem Header="Presets" ItemsSource="{Binding Presets}">\r
+                <MenuItem Header="_Presets" x:Name="presetMenu">\r
+                    <MenuItem Header="_Presets" ItemsSource="{Binding Presets}">\r
                         <MenuItem.ItemContainerStyle>\r
                             <Style TargetType="MenuItem">\r
                                 <Setter Property="Tag" Value="{Binding}" />\r
                         </MenuItem.ItemContainerStyle>\r
                     </MenuItem>\r
                     <Separator />\r
-                    <MenuItem Header="Import" Micro:Message.Attach="[Event Click] = [Action PresetImport]" />\r
-                    <MenuItem Header="Export" Micro:Message.Attach="[Event Click] = [Action PresetExport]" />\r
+                    <MenuItem Header="_Import" Micro:Message.Attach="[Event Click] = [Action PresetImport]" />\r
+                    <MenuItem Header="_Export" Micro:Message.Attach="[Event Click] = [Action PresetExport]" />\r
                     <Separator />\r
-                    <MenuItem Header="Set Current as Default" Micro:Message.Attach="[Event Click] = [Action PresetSetDefault]" />\r
-                    <MenuItem Header="Reset Built-In Presets" Micro:Message.Attach="[Event Click] = [Action PresetReset]" />\r
+                    <MenuItem Header="_Set Current as Default" Micro:Message.Attach="[Event Click] = [Action PresetSetDefault]" />\r
+                    <MenuItem Header="_Reset Built-In Presets" Micro:Message.Attach="[Event Click] = [Action PresetReset]" />\r
                     <Separator />\r
                     <MenuItem IsCheckable="True" x:Name="showPresetPanelMenuItem" IsChecked="{Binding IsPresetPanelShowing}">\r
                         <MenuItem.Style>\r
                             <Style TargetType="MenuItem">\r
                                 <Style.Triggers>\r
                                     <DataTrigger Binding="{Binding IsChecked, ElementName=showPresetPanelMenuItem}" Value="True">\r
-                                        <Setter Property="Header" Value="Hide Preset Panel"/>\r
+                                        <Setter Property="Header" Value="_Hide Preset Panel"/>\r
                                     </DataTrigger>\r
                                     <DataTrigger Binding="{Binding IsChecked, ElementName=showPresetPanelMenuItem}" Value="False">\r
-                                        <Setter Property="Header" Value="Show Preset Panel"/>\r
+                                        <Setter Property="Header" Value="S_how Preset Panel"/>\r
                                     </DataTrigger>\r
                                 </Style.Triggers>\r
                             </Style>\r
                     </MenuItem>\r
                 </MenuItem>\r
 \r
-                <MenuItem Header="Help">\r
-                    <MenuItem Header="HandBrake User Guide (HTTP)" Micro:Message.Attach="[Event Click] = [Action LaunchHelp]">\r
+                <MenuItem Header="_Help">\r
+                    <MenuItem Header="_HandBrake User Guide (HTTP)" Micro:Message.Attach="[Event Click] = [Action LaunchHelp]">\r
                         <MenuItem.Icon>\r
                             <Image Width="16" Height="16"  Source="Images/information.png" />\r
                         </MenuItem.Icon>\r
                     </MenuItem>\r
                     <Separator />\r
-                    <MenuItem Header="Check for Updates" Micro:Message.Attach="[Event Click] = [Action CheckForUpdates]" />\r
+                    <MenuItem Header="_Check for Updates" Micro:Message.Attach="[Event Click] = [Action CheckForUpdates]" />\r
                     <Separator />\r
-                    <MenuItem Header="About..." Micro:Message.Attach="[Event Click] = [Action OpenAboutApplication]" />\r
+                    <MenuItem Header="_About..." Micro:Message.Attach="[Event Click] = [Action OpenAboutApplication]" />\r
                 </MenuItem>\r
 \r
-                <MenuItem Header="Debug" Visibility="{Binding ShowDebugMenu, Converter={StaticResource boolToVisConverter}}" >\r
-                    <MenuItem Header="Show CLI Equiv" Micro:Message.Attach="[Event Click] = [Action ShowCliQuery]" />\r
-                    <MenuItem Header="Debug Scan Log" Micro:Message.Attach="[Event Click] = [Action DebugScanLog]" />\r
+                <MenuItem Header="_Debug" Visibility="{Binding ShowDebugMenu, Converter={StaticResource boolToVisConverter}}" >\r
+                    <MenuItem Header="_Show CLI Equiv" Micro:Message.Attach="[Event Click] = [Action ShowCliQuery]" />\r
+                    <MenuItem Header="_Debug Scan Log" Micro:Message.Attach="[Event Click] = [Action DebugScanLog]" />\r
                 </MenuItem>\r
             </Menu>\r
 \r
                         <MenuItem.ItemContainerStyle>\r
                             <Style TargetType="{x:Type MenuItem}">\r
                                 <Setter Property="Header" Value="{Binding Text}" />\r
-                                <Setter Property="MenuItem.Command" Value="{Binding Command}"/>\r
-                                <Setter Property="MenuItem.CommandParameter" Value="123"/>\r
+                                <Setter Property="Command" Value="{Binding Command}"/>\r
                                 <Setter Property="ItemsSource" Value="{Binding Children}" />\r
                                 <Setter Property="Icon" Value="{Binding Image}" />\r
+                                <Setter Property="InputGestureText" Value="{Binding InputGestureText}" />\r
                             </Style>\r
                         </MenuItem.ItemContainerStyle>\r
                     </MenuItem>\r
                       VerticalAlignment="Stretch"\r
                       Header="Presets"\r
                       Margin="0,0,0,5"\r
-                      Background="White"\r
-                      Visibility="{Binding IsPresetPanelShowing, Converter={StaticResource boolToVisConverter}}"\r
-                      >\r
+                      Visibility="{Binding IsPresetPanelShowing, Converter={StaticResource boolToVisConverter}}">\r
+                      \r
                 <Grid>\r
                     <Grid.RowDefinitions>\r
                         <RowDefinition Height="*" />\r
                               />\r
 \r
         <!--  Status Bar  -->\r
-        <StatusBar Grid.Row="2"\r
-                   Grid.ColumnSpan="2"\r
-                   Height="32"\r
-                   Margin="0"\r
-                   VerticalAlignment="Bottom"\r
-                   Padding="0"\r
-                   >\r
+        <StatusBar Grid.Row="2" Grid.ColumnSpan="2" MinHeight="32" >\r
+\r
+            <ProgressBar Value="{Binding ProgressPercentage}" Visibility="{Binding IsEncoding, Converter={StaticResource boolToVisConverter}}"\r
+                         Width="100" Height="18" VerticalAlignment="Center"/>\r
             <Label VerticalAlignment="Center"\r
-                   Content="{Binding Path=ProgramStatusLabel}"\r
-                   FontSize="11"\r
-                   Padding="0,0,0,5"\r
-                   />\r
+                   Content="{Binding Path=ProgramStatusLabel}" />\r
 \r
         </StatusBar>\r
     </Grid>\r
index dcf9994c8b8f497f4a10c0209f964a6b1c16e0ee..64d7389ad6bca0b4efa2d957bb87790d97938bd8 100644 (file)
@@ -4,7 +4,7 @@
               xmlns:Options="clr-namespace:HandBrakeWPF.Converters.Options"\r
               xmlns:dd="clr-namespace:GongSolutions.Wpf.DragDrop;assembly=GongSolutions.Wpf.DragDrop"\r
               xmlns:Converters="clr-namespace:HandBrakeWPF.Converters" xmlns:local="clr-namespace:HandBrakeWPF.Model"\r
-              Background="White">\r
+              Style="{StaticResource whiteUserControlStyle}">\r
 \r
     <UserControl.Resources>\r
         <Style TargetType="Button">\r
 \r
                         </StackPanel>\r
                     </StackPanel>\r
+\r
+\r
+                    <StackPanel Orientation="Vertical" Margin="0,0,0,20">\r
+\r
+                        <TextBlock Text="User Interface" Grid.Column="0" FontSize="14" Margin="0,0,0,10"/>\r
+\r
+                        <StackPanel Orientation="Vertical" Grid.Column="1" Margin="20,0,0,0">\r
+\r
+                            <CheckBox Content="Always use System Colours (Requires Restart)"\r
+                                      ToolTip="Note: This option will always be on for systems with a High Contrast Theme selected." IsChecked="{Binding UseSystemColoursForStylesForStyles}" />\r
+\r
+                        </StackPanel>\r
+                    </StackPanel>\r
                 </StackPanel>\r
 \r
                 <StackPanel Name="Output" Orientation="Vertical" Margin="10,10,0,0"\r
index d3df53451a9adc96617685fdb421fd3c7e09b390..65efca4cebfde5676bed53d2b218f854078d1e21 100644 (file)
                                 <ColumnDefinition Width="Auto" />\r
                             </Grid.ColumnDefinitions>\r
 \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
-                                                            Converter={StaticResource queueStatusVisConverter}}">\r
+                            <Button Visibility="{Binding Status, Converter={StaticResource queueStatusVisConverter}}"\r
+                                    Grid.Row="0" Grid.Column="0" Margin="0,5,0,0">\r
+                                <Button.Template>\r
+                                    <ControlTemplate>\r
+                                        <Image Width="20"  \r
+                                               Height="20" VerticalAlignment="Center"\r
+                                               Source="Images/Refresh.ico"\r
+                                               ToolTip="Reset job status to Waiting.">\r
+                                        </Image>\r
+                                    </ControlTemplate>\r
+                                </Button.Template>\r
                                 <i:Interaction.Triggers>\r
-                                    <i:EventTrigger EventName="MouseDown">\r
+                                    <i:EventTrigger EventName="Click">\r
                                         <cal:ActionMessage MethodName="RetryJob">\r
                                             <cal:Parameter Value="{Binding}" />\r
                                         </cal:ActionMessage>\r
                                     </i:EventTrigger>\r
                                 </i:Interaction.Triggers>\r
-                            </Image>\r
-\r
-                            <Image Width="20" Grid.Row="0" Grid.Column="1"\r
-                                       Height="20"\r
-                                       Margin="10,5,0,0"\r
-                                       Source="Images/Options24.png"\r
-                                       ToolTip="Edit this Job">\r
+                            </Button>\r
+\r
+                            <Button Grid.Row="0" Grid.Column="1" Margin="10,5,0,0">\r
+                                <Button.Template>\r
+                                    <ControlTemplate>\r
+                                        <Image Width="20" \r
+                                               Height="20" VerticalAlignment="Center"\r
+                                               Source="Images/Options24.png"\r
+                                               ToolTip="Reset job status to Waiting.">\r
+                                        </Image>\r
+                                    </ControlTemplate>\r
+                                </Button.Template>\r
                                 <i:Interaction.Triggers>\r
-                                    <i:EventTrigger EventName="MouseDown">\r
+                                    <i:EventTrigger EventName="Click">\r
                                         <cal:ActionMessage MethodName="EditJob">\r
                                             <cal:Parameter Value="{Binding}" />\r
                                         </cal:ActionMessage>\r
                                     </i:EventTrigger>\r
                                 </i:Interaction.Triggers>\r
-                            </Image>\r
-\r
-                            <Image Width="20"  Grid.Row="0" Grid.Column="2"\r
-                                       Height="20"\r
-                                       Margin="10,5,0,0"\r
-                                       Source="Images/delete.png"\r
-                                       ToolTip="Remove this Job">\r
+                            </Button>\r
+\r
+                            <Button Grid.Row="0" Grid.Column="2" Margin="10,5,0,0">\r
+                                <Button.Template>\r
+                                    <ControlTemplate>\r
+                                        <Image Width="20" \r
+                                               Height="20" VerticalAlignment="Center" \r
+                                               Source="Images/delete.png"\r
+                                               ToolTip="Reset job status to Waiting.">\r
+                                        </Image>\r
+                                    </ControlTemplate>\r
+                                </Button.Template>\r
                                 <i:Interaction.Triggers>\r
-                                    <i:EventTrigger EventName="MouseDown">\r
+                                    <i:EventTrigger EventName="Click">\r
                                         <cal:ActionMessage MethodName="RemoveJob">\r
                                             <cal:Parameter Value="{Binding}" />\r
                                         </cal:ActionMessage>\r
                                     </i:EventTrigger>\r
                                 </i:Interaction.Triggers>\r
-                            </Image>\r
+                            </Button>\r
 \r
 \r
                         </Grid>\r
index d719b16fd121541ddbdf0eb49cc73646c7a42a51..ae8d26747b7c12088329a13de13cc415c8dfe304 100644 (file)
@@ -2,17 +2,18 @@
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"\r
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"\r
         xmlns:Data="clr-namespace:System.Windows.Data;assembly=PresentationFramework"\r
-        xmlns:Converters="clr-namespace:HandBrakeWPF.Converters" Title="{Data:Binding Path=WindowTitle}"\r
+        xmlns:Converters="clr-namespace:HandBrakeWPF.Converters"\r
+        Title="{Data:Binding Path=WindowTitle}"\r
         Width="1015"\r
         Height="670"\r
         MinWidth="750"\r
         MinHeight="670"\r
         AllowDrop="True"\r
-        Background="#FFF0F0F0"\r
         SnapsToDevicePixels="True"\r
         UseLayoutRounding="True"\r
         WindowStartupLocation="CenterScreen"\r
         TextOptions.TextFormattingMode="Display"\r
+        Style="{StaticResource mainWindowStyle}"\r
         >\r
     <Window.Resources>\r
         <Converters:BooleanToVisibilityConverter x:Key="boolToVisConverter" />\r
index 88624c5dfd8c0f3b464b6fdf6cd1ef7a29d3aab4..1fd0b7e9474be4b8b82e30c34aba44a168b0d752 100644 (file)
@@ -1,12 +1,37 @@
 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"\r
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">\r
 \r
+    <Style x:Key="mainWindowStyle" TargetType="Window">\r
+        <Style.Triggers>\r
+            <DataTrigger Binding="{Binding UseSystemColours}" Value="False">\r
+                <Setter Property="Background" Value="#FFF0F0F0" />\r
+            </DataTrigger>\r
+        </Style.Triggers>\r
+    </Style>\r
+\r
+    <Style x:Key="whiteUserControlStyle" TargetType="UserControl">\r
+        <Style.Triggers>\r
+            <DataTrigger Binding="{Binding UseSystemColours}" Value="False">\r
+                <Setter Property="Background" Value="White" />\r
+            </DataTrigger>\r
+        </Style.Triggers>\r
+    </Style>\r
+\r
     <Style x:Key="{x:Type StatusBar}" TargetType="{x:Type StatusBar}">\r
         <Setter Property="SnapsToDevicePixels" Value="True"/>\r
         <Setter Property="Template">\r
             <Setter.Value>\r
                 <ControlTemplate TargetType="{x:Type StatusBar}">\r
-                    <Border Background="#FAFAFA" Padding="1">\r
+                    <Border Padding="1">\r
+                        <Border.Style>\r
+                            <Style TargetType="Border">\r
+                                <Style.Triggers>\r
+                                    <DataTrigger Binding="{Binding UseSystemColours}" Value="False">\r
+                                        <Setter Property="Background" Value="#FAFAFA" />\r
+                                    </DataTrigger>\r
+                                </Style.Triggers>\r
+                            </Style>\r
+                        </Border.Style>\r
                         <ItemsPresenter Margin="0" />\r
                     </Border>\r
                 </ControlTemplate>\r
         </Setter>\r
     </Style>\r
 \r
+    <Style TargetType="{x:Type GroupBox}">\r
+        <Style.Triggers>\r
+            <DataTrigger Binding="{Binding UseSystemColours}" Value="False">\r
+                <Setter Property="Background" Value="White" />\r
+            </DataTrigger>\r
+        </Style.Triggers>\r
+    </Style>\r
+\r
     <Style TargetType="{x:Type ComboBox}">\r
         <Setter Property="MinHeight" Value="22"/>\r
         <Setter Property="Margin" Value="0,2,0,2" />\r
index 2eeb5dfdfb3965bb281516e847982368bddd31b4..b6a90b98f2506394b59d93c7c32325e52bb7761a 100644 (file)
@@ -7,12 +7,12 @@
              xmlns:dd="clr-namespace:GongSolutions.Wpf.DragDrop;assembly=GongSolutions.Wpf.DragDrop"\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
              xmlns:dropButton="clr-namespace:HandBrakeWPF.Controls.DropButton"\r
              d:DesignHeight="153"\r
              d:DesignWidth="319"\r
-             mc:Ignorable="d">\r
+             mc:Ignorable="d"\r
+             x:Name="subTab">\r
     <UserControl.Resources>\r
         <Converters:BooleanToVisibilityConverter x:Key="booleanToVisConverter" />\r
     </UserControl.Resources>\r
 \r
         <ListBox Grid.Row="2"\r
                  Margin="10,10,10,10"\r
-                 Background="LightGray"\r
                  dd:DragDrop.DropHandler="{Binding}"\r
                  dd:DragDrop.IsDragSource="True"\r
                  dd:DragDrop.IsDropTarget="True"\r
                  ItemsSource="{Binding Task.SubtitleTracks}"\r
                  SelectionMode="Extended">\r
+            <ListBox.Style>\r
+                <Style TargetType="ListBox">\r
+                    <Style.Triggers>\r
+                        <DataTrigger Binding="{Binding UseSystemColours}" Value="False">\r
+                            <Setter Property="Background" Value="LightGray" />\r
+                        </DataTrigger>\r
+                    </Style.Triggers>\r
+                </Style>\r
+            </ListBox.Style>\r
+            \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.Triggers>\r
+                        <DataTrigger Binding="{Binding DataContext.UseSystemColours, ElementName=subTab}" Value="False">\r
+                            <Setter Property="Background" Value="WhiteSmoke" />\r
+                        </DataTrigger>\r
+                    </Style.Triggers>\r
                 </Style>\r
             </ListBox.ItemContainerStyle>\r
 \r
index 7ba21e1036bd40143055956d383bb5141ffa404b..30eebc778fa9520b9d0e627ac8df16ffc13b4f2a 100644 (file)
       <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>UseSystemColours</string>\r
+    </key>\r
+    <value>\r
+      <anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" d4p1:type="q1:boolean" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">false</anyType>\r
+    </value>\r
+  </item>\r
 </dictionary>
\ No newline at end of file
index 297f4bf28060b1b9de34d53951ca758e0d767d62..e46d7093dce5aaae8d67a060a138e830da8f187d 100644 (file)
             Gets a flag enumeration indicating the current state of the SHIFT, CTRL, and ALT keys, as well as the state of the mouse buttons.\r
             </summary>\r
         </member>\r
+        <member name="P:GongSolutions.Wpf.DragDrop.IDropInfo.NotHandled">\r
+            <summary>\r
+            Indicates if the drop info should be handled by itself (useful for child elements)\r
+            </summary>\r
+        </member>\r
         <member name="T:GongSolutions.Wpf.DragDrop.DropInfo">\r
             <summary>\r
             Holds information about a the target of a drag drop operation.\r
index 3e9615082e957635a35ca6f5b107928e1509293d..395aac56db91a32682db5d9928f3a58052ee7058 100644 (file)
Binary files a/win/CS/libraries/WPFDragDrop/GongSolutions.Wpf.DragDrop.dll and b/win/CS/libraries/WPFDragDrop/GongSolutions.Wpf.DragDrop.dll differ
index 997730460e5dac0910dc4f6de37527397194fe4f..5b01a61e87e05f43b24547c4ce4ce363702c6547 100644 (file)
Binary files a/win/CS/libraries/WPFDragDrop/GongSolutions.Wpf.DragDrop.pdb and b/win/CS/libraries/WPFDragDrop/GongSolutions.Wpf.DragDrop.pdb differ