]> granicus.if.org Git - handbrake/commitdiff
WinGui: Simplify the Deinterlace / Decomb / Interlace Detection Tab and associated...
authorsr55 <sr55.hb@outlook.com>
Sun, 8 Jul 2018 17:23:50 +0000 (18:23 +0100)
committersr55 <sr55.hb@outlook.com>
Sun, 8 Jul 2018 17:23:50 +0000 (18:23 +0100)
win/CS/HandBrake.Interop/HandBrake.Interop.csproj
win/CS/HandBrake.Interop/Interop/Model/Encoding/Decomb.cs [deleted file]
win/CS/HandBrake.Interop/Interop/Model/Encoding/Deinterlace.cs [deleted file]
win/CS/HandBrake.Interop/Interop/Model/Encoding/HBPresetTune.cs
win/CS/HandBrakeWPF/Converters/EnumComboConverter.cs
win/CS/HandBrakeWPF/Services/Encode/Factories/EncodeTaskFactory.cs
win/CS/HandBrakeWPF/Services/Encode/Model/EncodeTask.cs
win/CS/HandBrakeWPF/Services/Presets/Factories/JsonPresetFactory.cs
win/CS/HandBrakeWPF/ViewModels/FiltersViewModel.cs
win/CS/HandBrakeWPF/Views/FiltersView.xaml

index f7e9aa9b69c4702c22528fdfd63cd002a2793a05..f279c91237ce4b02cdba409c1c91406da6d2ba00 100644 (file)
     <Compile Include="Interop\Json\State\TaskState.cs" />
     <Compile Include="Interop\Model\Encoding\CombDetect.cs" />
     <Compile Include="Interop\Model\Encoding\DeinterlaceFilter.cs" />
+    <Compile Include="Interop\Model\Encoding\Denoise.cs" />
+    <Compile Include="Interop\Model\Encoding\Detelecine.cs" />
     <Compile Include="Interop\Model\Encoding\HBPresetTune.cs" />
     <Compile Include="Interop\Model\Encoding\Sharpen.cs" />
     <Compile Include="Interop\Model\Preview\RawPreviewData.cs" />
     <Compile Include="Interop\Model\Cropping.cs" />
     <Compile Include="Interop\Model\Encoding\Anamorphic.cs" />
     <Compile Include="Interop\Model\Encoding\Container.cs" />
-    <Compile Include="Interop\Model\Encoding\Decomb.cs" />
-    <Compile Include="Interop\Model\Encoding\Deinterlace.cs" />
-    <Compile Include="Interop\Model\Encoding\Denoise.cs" />
-    <Compile Include="Interop\Model\Encoding\Detelecine.cs" />
     <Compile Include="Interop\Model\Encoding\HBAudioEncoder.cs" />
     <Compile Include="Interop\Model\Encoding\HBContainer.cs" />
     <Compile Include="Interop\Model\Encoding\HBMixdown.cs" />
diff --git a/win/CS/HandBrake.Interop/Interop/Model/Encoding/Decomb.cs b/win/CS/HandBrake.Interop/Interop/Model/Encoding/Decomb.cs
deleted file mode 100644 (file)
index 1fe70b4..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-// --------------------------------------------------------------------------------------------------------------------
-// <copyright file="Decomb.cs" company="HandBrake Project (http://handbrake.fr)">
-//   This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
-// </copyright>
-// <summary>
-//   Defines the Decomb type.
-// </summary>
-// --------------------------------------------------------------------------------------------------------------------
-
-namespace HandBrake.Interop.Interop.Model.Encoding
-{
-    using HandBrake.Interop.Attributes;
-
-    /// <summary>
-    /// The decomb.
-    /// </summary>
-    public enum Decomb
-    {
-        [ShortName("default")]
-        Default,
-
-        [ShortName("bob")]
-        Bob,
-
-        [ShortName("custom")]
-        Custom,
-
-        [ShortName("eedi2")]
-        EEDI2,
-
-        [ShortName("eedi2bob")]
-        EEDI2Bob
-    }
-}
diff --git a/win/CS/HandBrake.Interop/Interop/Model/Encoding/Deinterlace.cs b/win/CS/HandBrake.Interop/Interop/Model/Encoding/Deinterlace.cs
deleted file mode 100644 (file)
index 07c519a..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-// --------------------------------------------------------------------------------------------------------------------
-// <copyright file="Deinterlace.cs" company="HandBrake Project (http://handbrake.fr)">
-//   This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
-// </copyright>
-// <summary>
-//   Defines the Deinterlace type.
-// </summary>
-// --------------------------------------------------------------------------------------------------------------------
-
-namespace HandBrake.Interop.Interop.Model.Encoding
-{
-    using HandBrake.Interop.Attributes;
-
-    /// <summary>
-    /// The deinterlace.
-    /// </summary>
-    public enum Deinterlace
-    {
-        [ShortName("custom")]
-        Custom,
-
-        [ShortName("default")]
-        Default,
-
-        [ShortName("skip-spatial")]
-        SkipSpatialCheck,
-
-        [ShortName("bob")]
-        Bob
-    }
-}
index 2954128d779115c99950fb24bc66815b00cc306b..8f62b30ac4b0529fbcaeff46b544aebcf611c976 100644 (file)
@@ -3,40 +3,44 @@
 //   This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
 // </copyright>
 // <summary>
-//   Defines the HBPresetTune type.
+//    An object represetning the key and name of a Filter Preset or Tune option.
 // </summary>
 // --------------------------------------------------------------------------------------------------------------------
 
 namespace HandBrake.Interop.Interop.Model.Encoding
 {
-    /// <summary>
-    /// The hb preset tune.
-    /// </summary>
     public class HBPresetTune
     {
-        /// <summary>
-        /// Initializes a new instance of the <see cref="HBPresetTune"/> class. 
-        /// </summary>
-        /// <param name="name">
-        /// The name.
-        /// </param>
-        /// <param name="shortName">
-        /// The short Name.
-        /// </param>
+        public HBPresetTune()
+        {
+        }
+
         public HBPresetTune(string name, string shortName)
         {
             this.Name = name;
             this.ShortName = shortName;
         }
 
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        public string Name { get; private set; }
+        public string Name { get; set; }
+
+        public string ShortName { get; set; }
+
+        public override bool Equals(object obj)
+        {
+            if (ReferenceEquals(null, obj)) return false;
+            if (ReferenceEquals(this, obj)) return true;
+            if (obj.GetType() != this.GetType()) return false;
+            return this.Equals((HBPresetTune)obj);
+        }
+
+        public override int GetHashCode()
+        {
+            return this.ShortName != null ? this.ShortName.GetHashCode() : 0;
+        }
 
-        /// <summary>
-        /// Gets the short name.
-        /// </summary>
-        public string ShortName { get; private set; }
+        protected bool Equals(HBPresetTune other)
+        {
+            return string.Equals(this.ShortName, other.ShortName);
+        }
     }
 }
index ff6f71156ff7f37055fa7366a070ff3c764fe875..644417b261e2ab69efe6af60e85a8a177fa382dd 100644 (file)
@@ -59,14 +59,6 @@ namespace HandBrakeWPF.Converters
             {\r
                 return EnumHelper<PresetPictureSettingsMode>.GetEnumDisplayValues(typeof(PresetPictureSettingsMode));\r
             }\r
-            if (value is IEnumerable<Decomb>)\r
-            {\r
-                return EnumHelper<Decomb>.GetEnumDisplayValues(typeof(Decomb));\r
-            }\r
-            if (value is IEnumerable<Deinterlace>)\r
-            {\r
-                return EnumHelper<Deinterlace>.GetEnumDisplayValues(typeof(Deinterlace));\r
-            }\r
             if (value is IEnumerable<Detelecine>)\r
             {\r
                 return EnumHelper<Detelecine>.GetEnumDisplayValues(typeof(Detelecine));\r
@@ -105,18 +97,10 @@ namespace HandBrakeWPF.Converters
             {\r
                 return EnumHelper<PresetPictureSettingsMode>.GetDisplay((PresetPictureSettingsMode)value);\r
             }\r
-            if (targetType == typeof(Deinterlace) || value.GetType() == typeof(Deinterlace))\r
-            {\r
-                return EnumHelper<Deinterlace>.GetDisplay((Deinterlace)value);\r
-            }\r
             if (targetType == typeof(Detelecine) || value.GetType() == typeof(Detelecine))\r
             {\r
                 return EnumHelper<Detelecine>.GetDisplay((Detelecine)value);\r
             }\r
-            if (targetType == typeof(Decomb) || value.GetType() == typeof(Decomb))\r
-            {\r
-                return EnumHelper<Decomb>.GetDisplay((Decomb)value);\r
-            }\r
             if (targetType == typeof(Denoise) || value.GetType() == typeof(Denoise))\r
             {\r
                 return EnumHelper<Denoise>.GetDisplay((Denoise)value);\r
@@ -187,14 +171,6 @@ namespace HandBrakeWPF.Converters
             {\r
                 return EnumHelper<Denoise>.GetValue(value.ToString());\r
             }\r
-            if (targetType == typeof(Decomb) || value.GetType() == typeof(Decomb))\r
-            {\r
-                return EnumHelper<Decomb>.GetValue(value.ToString());\r
-            }\r
-            if (targetType == typeof(Deinterlace) || value.GetType() == typeof(Deinterlace))\r
-            {\r
-                return EnumHelper<Deinterlace>.GetValue(value.ToString());\r
-            }\r
             if (targetType == typeof(Detelecine) || value.GetType() == typeof(Detelecine))\r
             {\r
                 return EnumHelper<Detelecine>.GetValue(value.ToString());\r
index cd21d7b47ef5460b69ca9aec21b8b5affd23f7db..e938f8b5a6fcbbc148fea1a2f87e627b05c05fe9 100644 (file)
@@ -426,7 +426,7 @@ namespace HandBrakeWPF.Services.Encode.Factories
             // Deinterlace
             if (job.DeinterlaceFilter == DeinterlaceFilter.Yadif)
             {
-                IntPtr settingsPtr = HBFunctions.hb_generate_filter_settings_json((int)hb_filter_ids.HB_FILTER_DEINTERLACE, EnumHelper<Deinterlace>.GetShortName(job.Deinterlace),  null, job.CustomDeinterlace);
+                IntPtr settingsPtr = HBFunctions.hb_generate_filter_settings_json((int)hb_filter_ids.HB_FILTER_DEINTERLACE, job.DeinterlacePreset?.ShortName,  null, job.CustomDeinterlaceSettings);
                 string unparsedJson = Marshal.PtrToStringAnsi(settingsPtr);
                 if (!string.IsNullOrEmpty(unparsedJson))
                 {
@@ -440,7 +440,7 @@ namespace HandBrakeWPF.Services.Encode.Factories
             // Decomb
             if (job.DeinterlaceFilter == DeinterlaceFilter.Decomb)
             {
-                IntPtr settingsPtr = HBFunctions.hb_generate_filter_settings_json((int)hb_filter_ids.HB_FILTER_DECOMB, EnumHelper<Decomb>.GetShortName(job.Decomb), null, job.CustomDecomb);
+                IntPtr settingsPtr = HBFunctions.hb_generate_filter_settings_json((int)hb_filter_ids.HB_FILTER_DECOMB, job.DeinterlacePreset?.ShortName, null, job.CustomDeinterlaceSettings);
                 string unparsedJson = Marshal.PtrToStringAnsi(settingsPtr);
                 if (!string.IsNullOrEmpty(unparsedJson))
                 {
index c40c6c0b9b4000666e0a585a0a9aa4735dee9072..a57b2e43b00f68e9c3ff5ab4b085f4d1c02cd40d 100644 (file)
@@ -90,15 +90,13 @@ namespace HandBrakeWPF.Services.Encode.Model
             this.AlignAVStart = task.AlignAVStart;
             this.ChapterMarkersFilePath = task.ChapterMarkersFilePath;
             this.Cropping = new Cropping(task.Cropping);
-            this.CustomDecomb = task.CustomDecomb;
-            this.CustomDeinterlace = task.CustomDeinterlace;
+            this.CustomDeinterlaceSettings = task.CustomDeinterlaceSettings;
             this.CustomDenoise = task.CustomDenoise;
             this.CustomDetelecine = task.CustomDetelecine;
             this.CustomCombDetect = task.CustomCombDetect;
             this.CombDetect = task.CombDetect;
             this.Deblock = task.Deblock;
-            this.Decomb = task.Decomb;
-            this.Deinterlace = task.Deinterlace;
+            this.DeinterlacePreset = task.DeinterlacePreset;
             this.DeinterlaceFilter = task.DeinterlaceFilter;
             this.Denoise = task.Denoise;
             this.DenoisePreset = task.DenoisePreset;
@@ -297,17 +295,7 @@ namespace HandBrakeWPF.Services.Encode.Model
         /// <summary>
         /// Gets or sets Deinterlace.
         /// </summary>
-        public Deinterlace Deinterlace { get; set; }
-
-        /// <summary>
-        /// Gets or sets CustomDeinterlace.
-        /// </summary>
-        public string CustomDeinterlace { get; set; }
-
-        /// <summary>
-        /// Gets or sets Decomb.
-        /// </summary>
-        public Decomb Decomb { get; set; }
+        public HBPresetTune DeinterlacePreset { get; set; }
 
         /// <summary>
         /// Gets or sets the comb detect.
@@ -317,7 +305,7 @@ namespace HandBrakeWPF.Services.Encode.Model
         /// <summary>
         /// Gets or sets CustomDecomb.
         /// </summary>
-        public string CustomDecomb { get; set; }
+        public string CustomDeinterlaceSettings { get; set; }
 
         /// <summary>
         /// Gets or sets the custom comb detect.
index cdb815d32577f7bf9a9229de4bdc2ed580404701..3f86e1aa5b84c4e79a6e102eececd73b89853917 100644 (file)
@@ -136,77 +136,30 @@ namespace HandBrakeWPF.Services.Presets.Factories
             switch (importedPreset.PictureDeinterlaceFilter)\r
             {\r
                 case "decomb":\r
-                    preset.Task.Decomb = Decomb.Default;\r
-                    preset.Task.Deinterlace = Deinterlace.Default;\r
                     preset.Task.DeinterlaceFilter = DeinterlaceFilter.Decomb;\r
                     break;\r
                 case "yadif":\r
-                    preset.Task.Decomb = Decomb.Default;\r
-                    preset.Task.Deinterlace = Deinterlace.Default;\r
                     preset.Task.DeinterlaceFilter = DeinterlaceFilter.Yadif;\r
                     break;\r
                 default:\r
-                    preset.Task.Decomb = Decomb.Default;\r
-                    preset.Task.Deinterlace = Deinterlace.Default;\r
                     preset.Task.DeinterlaceFilter = DeinterlaceFilter.Off;\r
                     break;\r
             }\r
 \r
             if (preset.Task.DeinterlaceFilter == DeinterlaceFilter.Decomb)\r
             {\r
-                switch (importedPreset.PictureDeinterlacePreset)\r
-                {\r
-                    case "custom":\r
-                        preset.Task.Decomb = Decomb.Custom;\r
-                        break;\r
-                    case "default":\r
-                        preset.Task.Decomb = Decomb.Default;\r
-                        break;\r
-                    case "bob":\r
-                        preset.Task.Decomb = Decomb.Bob;\r
-                        break;\r
-                    case "eedi2":\r
-                        preset.Task.Decomb = Decomb.EEDI2;\r
-                        break;\r
-                    case "eedi2bob":\r
-                        preset.Task.Decomb = Decomb.EEDI2Bob;\r
-                        break;\r
-                    default:\r
-                        preset.Task.Decomb = Decomb.Default;\r
-                        break;\r
-                }\r
-\r
-                if (preset.Task.Decomb == Decomb.Custom)\r
-                {\r
-                    preset.Task.CustomDecomb = importedPreset.PictureDeinterlaceCustom;\r
-                }\r
+                List<HBPresetTune> filterPresets = HandBrakeFilterHelpers.GetFilterPresets((int)hb_filter_ids.HB_FILTER_DECOMB);\r
+                HBPresetTune presetTune = filterPresets.FirstOrDefault(f => f.ShortName == importedPreset.PictureDeinterlacePreset);\r
+                preset.Task.DeinterlacePreset = presetTune ?? new HBPresetTune("Default", "default");\r
+                preset.Task.CustomDeinterlaceSettings = importedPreset.PictureDeinterlaceCustom;\r
             }\r
 \r
             if (preset.Task.DeinterlaceFilter == DeinterlaceFilter.Yadif)\r
             {\r
-                switch (importedPreset.PictureDeinterlacePreset)\r
-                {\r
-                    case "custom":\r
-                        preset.Task.Deinterlace = Deinterlace.Custom;\r
-                        break;\r
-                    case "bob":\r
-                        preset.Task.Deinterlace = Deinterlace.Bob;\r
-                        break;\r
-                    case "skip-spatial":\r
-                        preset.Task.Deinterlace = Deinterlace.SkipSpatialCheck;\r
-                        break;\r
-                    case "default":\r
-                        preset.Task.Deinterlace = Deinterlace.Default;\r
-                        break;\r
-                    default:\r
-                        preset.Task.Deinterlace = Deinterlace.Default;\r
-                        break;\r
-                }\r
-\r
-                if (preset.Task.Deinterlace == Deinterlace.Custom)\r
-                {\r
-                    preset.Task.CustomDeinterlace = importedPreset.PictureDeinterlaceCustom;\r
-                }\r
+                List<HBPresetTune> filterPresets = HandBrakeFilterHelpers.GetFilterPresets((int)hb_filter_ids.HB_FILTER_DEINTERLACE);\r
+                HBPresetTune presetTune = filterPresets.FirstOrDefault(f => f.ShortName == importedPreset.PictureDeinterlacePreset);\r
+                preset.Task.DeinterlacePreset = presetTune ?? new HBPresetTune("Default", "default");\r
+                preset.Task.CustomDeinterlaceSettings = importedPreset.PictureDeinterlaceCustom;\r
             }\r
 \r
             if (preset.Task.DeinterlaceFilter == DeinterlaceFilter.Yadif || preset.Task.DeinterlaceFilter == DeinterlaceFilter.Decomb)\r
@@ -650,12 +603,8 @@ namespace HandBrakeWPF.Services.Presets.Factories
             preset.PictureDeinterlaceFilter = export.Task.DeinterlaceFilter == DeinterlaceFilter.Decomb\r
                 ? "decomb"\r
                 : export.Task.DeinterlaceFilter == DeinterlaceFilter.Yadif ? "yadif" : "off";\r
-            preset.PictureDeinterlacePreset = export.Task.DeinterlaceFilter == DeinterlaceFilter.Decomb\r
-                ? EnumHelper<Decomb>.GetShortName(export.Task.Decomb)\r
-                : export.Task.DeinterlaceFilter == DeinterlaceFilter.Yadif ? EnumHelper<Deinterlace>.GetShortName(export.Task.Deinterlace) : string.Empty;\r
-            preset.PictureDeinterlaceCustom = export.Task.DeinterlaceFilter == DeinterlaceFilter.Decomb\r
-                ? export.Task.CustomDecomb\r
-                : export.Task.DeinterlaceFilter == DeinterlaceFilter.Yadif ? export.Task.CustomDeinterlace : string.Empty;\r
+            preset.PictureDeinterlacePreset = export.Task.DeinterlacePreset?.ShortName;\r
+            preset.PictureDeinterlaceCustom = export.Task.CustomDeinterlaceSettings;\r
 \r
             preset.PictureCombDetectPreset = EnumHelper<CombDetect>.GetShortName(export.Task.CombDetect);\r
             preset.PictureCombDetectCustom = export.Task.CustomCombDetect;\r
index 86df91094e46a5c0252ededf52c54f5513773b00..8d2c47e87a219884b68cc6297c7437fe503b2826 100644 (file)
@@ -69,42 +69,6 @@ namespace HandBrakeWPF.ViewModels
         /// </summary>\r
         public EncodeTask CurrentTask { get; private set; }\r
 \r
-        /// <summary>\r
-        /// Gets or sets CustomDecomb.\r
-        /// </summary>\r
-        public string CustomDecomb\r
-        {\r
-            get\r
-            {\r
-                return this.CurrentTask.CustomDecomb;\r
-            }\r
-\r
-            set\r
-            {\r
-                this.CurrentTask.CustomDecomb = value;\r
-                this.NotifyOfPropertyChange(() => this.CustomDecomb);\r
-                this.OnTabStatusChanged(null);\r
-            }\r
-        }\r
-\r
-        /// <summary>\r
-        /// Gets or sets CustomDeinterlace.\r
-        /// </summary>\r
-        public string CustomDeinterlace\r
-        {\r
-            get\r
-            {\r
-                return this.CurrentTask.CustomDeinterlace;\r
-            }\r
-\r
-            set\r
-            {\r
-                this.CurrentTask.CustomDeinterlace = value;\r
-                this.NotifyOfPropertyChange(() => this.CustomDeinterlace);\r
-                this.OnTabStatusChanged(null);\r
-            }\r
-        }\r
-\r
         /// <summary>\r
         /// Gets or sets CustomDenoise.\r
         /// </summary>\r
@@ -141,17 +105,6 @@ namespace HandBrakeWPF.ViewModels
             }\r
         }\r
 \r
-        /// <summary>\r
-        /// Gets DeInterlaceOptions.\r
-        /// </summary>\r
-        public IEnumerable<Deinterlace> DeInterlaceOptions\r
-        {\r
-            get\r
-            {\r
-                return EnumHelper<Deinterlace>.GetEnumList();\r
-            }\r
-        }\r
-\r
         /// <summary>\r
         /// Gets DeblockText.\r
         /// </summary>\r
@@ -182,17 +135,6 @@ namespace HandBrakeWPF.ViewModels
             }\r
         }\r
 \r
-        /// <summary>\r
-        /// Gets DecombOptions.\r
-        /// </summary>\r
-        public IEnumerable<Decomb> DecombOptions\r
-        {\r
-            get\r
-            {\r
-                return EnumHelper<Decomb>.GetEnumList();\r
-            }\r
-        }\r
-\r
         /// <summary>\r
         /// Gets DenoiseOptions.\r
         /// </summary>\r
@@ -215,28 +157,6 @@ namespace HandBrakeWPF.ViewModels
             }\r
         }\r
 \r
-        /// <summary>\r
-        /// Gets DeinterlaceFilterOptions.\r
-        /// </summary>\r
-        public IEnumerable<DeinterlaceFilter> DeinterlaceFilterOptions\r
-        {\r
-            get\r
-            {\r
-                return EnumHelper<DeinterlaceFilter>.GetEnumList();\r
-            }\r
-        }\r
-\r
-        /// <summary>\r
-        /// Comb Detection Presets\r
-        /// </summary>\r
-        public IEnumerable<CombDetect> CombDetectPresets\r
-        {\r
-            get\r
-            {\r
-                return EnumHelper<CombDetect>.GetEnumList();\r
-            }\r
-        }\r
-\r
         /// <summary>\r
         /// Gets or sets a value indicating whether Grayscale.\r
         /// </summary>\r
@@ -255,31 +175,24 @@ namespace HandBrakeWPF.ViewModels
             }\r
         }\r
 \r
+        #region Interlace Detection\r
+\r
         /// <summary>\r
-        /// Gets or sets SelectedDeInterlace.\r
+        /// Comb Detection Presets\r
         /// </summary>\r
-        public Deinterlace SelectedDeInterlace\r
+        public IEnumerable<CombDetect> CombDetectPresets\r
         {\r
             get\r
             {\r
-                return this.CurrentTask.Deinterlace;\r
-            }\r
-\r
-            set\r
-            {\r
-                this.CurrentTask.Deinterlace = value;\r
-                this.NotifyOfPropertyChange(() => this.SelectedDeInterlace);\r
-\r
-                if (value != Deinterlace.Custom) this.CustomDeinterlace = string.Empty;\r
-\r
-                // Show / Hide the Custom Control\r
-                this.NotifyOfPropertyChange(() => this.ShowDecombCustom);\r
-                this.NotifyOfPropertyChange(() => this.ShowDeinterlaceCustom);\r
-                this.NotifyOfPropertyChange(() => this.ShowDeinterlaceDecombCustom);\r
-                this.OnTabStatusChanged(null);\r
+                return EnumHelper<CombDetect>.GetEnumList();\r
             }\r
         }\r
 \r
+        /// <summary>\r
+        /// Show the CombDetect Custom Box.\r
+        /// </summary>\r
+        public bool ShowCombDetectCustom => this.SelectedCombDetectPreset == CombDetect.Custom;\r
+\r
         /// <summary>\r
         /// Gets or sets the selected comb detect preset.\r
         /// </summary>\r
@@ -303,11 +216,6 @@ namespace HandBrakeWPF.ViewModels
             }\r
         }\r
 \r
-        /// <summary>\r
-        /// Show the CombDetect Custom Box.\r
-        /// </summary>\r
-        public bool ShowCombDetectCustom => this.SelectedCombDetectPreset == CombDetect.Custom;\r
-\r
         /// <summary>\r
         /// Gets or sets the custom comb detect.\r
         /// </summary>\r
@@ -326,57 +234,103 @@ namespace HandBrakeWPF.ViewModels
             }\r
         }\r
 \r
-        /// <summary>\r
-        /// Gets or sets SelectedDecomb.\r
-        /// </summary>\r
-        public Decomb SelectedDecomb\r
+        #endregion\r
+\r
+        #region Deinterlace and Decomb\r
+\r
+        public IEnumerable<DeinterlaceFilter> DeinterlaceFilterOptions => EnumHelper<DeinterlaceFilter>.GetEnumList();\r
+\r
+        public DeinterlaceFilter SelectedDeinterlaceFilter\r
         {\r
             get\r
             {\r
-                return this.CurrentTask.Decomb;\r
+                return this.deinterlaceFilter;\r
             }\r
 \r
             set\r
             {\r
-                this.CurrentTask.Decomb = value;\r
-                this.NotifyOfPropertyChange(() => this.SelectedDecomb);\r
+                if (value == this.deinterlaceFilter)\r
+                {\r
+                    return;\r
+                }\r
 \r
-                if (value != Decomb.Custom) this.CustomDecomb = string.Empty;\r
+                this.deinterlaceFilter = value;\r
+                this.CurrentTask.DeinterlaceFilter = value;\r
 \r
-                // Show / Hide the Custom Control\r
-                this.NotifyOfPropertyChange(() => this.ShowDecombCustom);\r
-                this.NotifyOfPropertyChange(() => this.ShowDeinterlaceCustom);\r
-                this.NotifyOfPropertyChange(() => this.ShowDeinterlaceDecombCustom);\r
+                this.NotifyOfPropertyChange(() => this.SelectedDeinterlaceFilter);\r
+                this.NotifyOfPropertyChange(() => this.ShowCustomDeinterlace);\r
+                this.NotifyOfPropertyChange(() => this.DeinterlacePresets);\r
+                this.NotifyOfPropertyChange(() => this.IsDeinterlaceEnabled);\r
+\r
+                if (!this.DeinterlacePresets.Contains(this.SelectedDeInterlacePreset))\r
+                {\r
+                    this.SelectedDeInterlacePreset = this.DeinterlacePresets.FirstOrDefault(p => p.ShortName == "default");\r
+                }\r
+               \r
                 this.OnTabStatusChanged(null);\r
             }\r
         }\r
 \r
-        /// <summary>\r
-        /// Gets or sets SelectedDenoise.\r
-        /// </summary>\r
-        public Denoise SelectedDenoise\r
+        public IEnumerable<HBPresetTune> DeinterlacePresets\r
         {\r
             get\r
             {\r
-                return this.CurrentTask.Denoise;\r
+                switch (this.SelectedDeinterlaceFilter)\r
+                {\r
+                    case DeinterlaceFilter.Yadif:\r
+                        return new BindingList<HBPresetTune>(HandBrakeFilterHelpers.GetFilterPresets((int)hb_filter_ids.HB_FILTER_DEINTERLACE));\r
+                    case DeinterlaceFilter.Decomb:\r
+                        return new BindingList<HBPresetTune>(HandBrakeFilterHelpers.GetFilterPresets((int)hb_filter_ids.HB_FILTER_DECOMB));\r
+                    default:\r
+                        return new BindingList<HBPresetTune>();\r
+                }\r
+            }\r
+        }\r
+\r
+        public HBPresetTune SelectedDeInterlacePreset\r
+        {\r
+            get\r
+            {\r
+                return this.CurrentTask.DeinterlacePreset;\r
             }\r
 \r
             set\r
             {\r
-                this.CurrentTask.Denoise = value;\r
-                this.NotifyOfPropertyChange(() => this.SelectedDenoise);\r
+                this.CurrentTask.DeinterlacePreset = value;\r
+                this.NotifyOfPropertyChange(() => this.SelectedDeInterlacePreset);\r
+\r
+                if (value?.ShortName == "custom") this.CustomDeinterlaceSettings = string.Empty;\r
 \r
                 // Show / Hide the Custom Control\r
-                this.NotifyOfPropertyChange(() => this.ShowDenoiseCustom);\r
+                this.NotifyOfPropertyChange(() => this.ShowCustomDeinterlace);\r
+                this.OnTabStatusChanged(null);\r
+            }\r
+        }\r
+        \r
+        public bool IsDeinterlaceEnabled => this.CurrentTask.DeinterlaceFilter != DeinterlaceFilter.Off;\r
 \r
-                this.SelectedDenoisePreset = this.CurrentTask.Denoise == Denoise.hqdn3d ? DenoisePreset.Weak : DenoisePreset.Ultralight; // Default so we don't have an invalid preset.\r
+        public bool ShowCustomDeinterlace => this.IsDeinterlaceEnabled && this.CurrentTask.DeinterlacePreset?.ShortName == "custom";\r
 \r
-                this.NotifyOfPropertyChange(() => this.ShowDenoiseOptions);\r
-                this.NotifyOfPropertyChange(() => this.ShowDenoiseTune);\r
+        /// <summary>\r
+        /// Gets or sets CustomDecomb.\r
+        /// </summary>\r
+        public string CustomDeinterlaceSettings\r
+        {\r
+            get\r
+            {\r
+                return this.CurrentTask.CustomDeinterlaceSettings;\r
+            }\r
+\r
+            set\r
+            {\r
+                this.CurrentTask.CustomDeinterlaceSettings = value;\r
+                this.NotifyOfPropertyChange(() => this.CustomDeinterlaceSettings);\r
                 this.OnTabStatusChanged(null);\r
             }\r
         }\r
 \r
+        #endregion\r
+\r
         /// <summary>\r
         /// Gets or sets SelectedDetelecine.\r
         /// </summary>\r
@@ -399,76 +353,40 @@ namespace HandBrakeWPF.ViewModels
             }\r
         }\r
 \r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether ShowDecombCustom.\r
-        /// </summary>\r
-        public bool ShowDecombCustom => this.SelectedDeinterlaceFilter == DeinterlaceFilter.Decomb && this.SelectedDecomb == Decomb.Custom;\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether ShowDeinterlaceDecombCustom.\r
-        /// </summary>\r
-        public bool ShowDeinterlaceDecombCustom => (this.SelectedDeinterlaceFilter == DeinterlaceFilter.Decomb && this.SelectedDecomb == Decomb.Custom) || (this.SelectedDeinterlaceFilter == DeinterlaceFilter.Yadif && this.SelectedDeInterlace == Deinterlace.Custom);\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether ShowDelelecineCustom.\r
-        /// </summary>\r
-        public bool ShowDeinterlaceCustom => this.SelectedDeinterlaceFilter == DeinterlaceFilter.Yadif && this.SelectedDeInterlace == Deinterlace.Custom;\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether ShowDenoiseCustom.\r
-        /// </summary>\r
-        public bool ShowDenoiseCustom => this.CurrentTask.DenoisePreset == DenoisePreset.Custom;\r
-\r
         /// <summary>\r
         /// Gets or sets a value indicating whether ShowDetelecineCustom.\r
         /// </summary>\r
         public bool ShowDetelecineCustom => this.CurrentTask.Detelecine == Detelecine.Custom;\r
 \r
+\r
+        #region Denoise\r
+\r
         /// <summary>\r
-        /// Gets or sets the selected deinterlace filter mode.\r
+        /// Gets or sets SelectedDenoise.\r
         /// </summary>\r
-        public DeinterlaceFilter SelectedDeinterlaceFilter\r
+        public Denoise SelectedDenoise\r
         {\r
             get\r
             {\r
-                return this.deinterlaceFilter;\r
+                return this.CurrentTask.Denoise;\r
             }\r
+\r
             set\r
             {\r
-                if (value == this.deinterlaceFilter)\r
-                {\r
-                    return;\r
-                }\r
+                this.CurrentTask.Denoise = value;\r
+                this.NotifyOfPropertyChange(() => this.SelectedDenoise);\r
 \r
-                this.deinterlaceFilter = value;\r
-                this.CurrentTask.DeinterlaceFilter = value;\r
+                // Show / Hide the Custom Control\r
+                this.NotifyOfPropertyChange(() => this.ShowDenoiseCustom);\r
 \r
-                this.NotifyOfPropertyChange(() => this.SelectedDeinterlaceFilter);\r
-                this.NotifyOfPropertyChange(() => this.IsDeinterlaceMode);\r
-                this.NotifyOfPropertyChange(() => this.IsDecombMode);\r
-                this.NotifyOfPropertyChange(() => this.IsDeinterlaceDecomb);\r
-                this.NotifyOfPropertyChange(() => this.ShowDecombCustom);\r
-                this.NotifyOfPropertyChange(() => this.ShowDeinterlaceCustom);\r
-                this.NotifyOfPropertyChange(() => this.ShowDeinterlaceDecombCustom);\r
+                this.SelectedDenoisePreset = this.CurrentTask.Denoise == Denoise.hqdn3d ? DenoisePreset.Weak : DenoisePreset.Ultralight; // Default so we don't have an invalid preset.\r
+\r
+                this.NotifyOfPropertyChange(() => this.ShowDenoiseOptions);\r
+                this.NotifyOfPropertyChange(() => this.ShowDenoiseTune);\r
                 this.OnTabStatusChanged(null);\r
             }\r
         }\r
 \r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether is deinterlace mode.\r
-        /// </summary>\r
-        public bool IsDeinterlaceMode => this.deinterlaceFilter == DeinterlaceFilter.Yadif;\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether is decomb mode.\r
-        /// </summary>\r
-        public bool IsDecombMode => this.deinterlaceFilter == DeinterlaceFilter.Decomb;\r
-\r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether is deinterlace or decomb mode.\r
-        /// </summary>\r
-        public bool IsDeinterlaceDecomb => this.SelectedDeinterlaceFilter != DeinterlaceFilter.Off;\r
-\r
         /// <summary>\r
         /// Gets or sets the selected denoise tune.\r
         /// </summary>\r
@@ -514,46 +432,20 @@ namespace HandBrakeWPF.ViewModels
         /// <summary>\r
         /// Gets the denoise presets.\r
         /// </summary>\r
-        public IEnumerable<DenoisePreset> DenoisePresets\r
-        {\r
-            get\r
-            {\r
-                return EnumHelper<DenoisePreset>.GetEnumList();\r
-            }\r
-        }\r
+        public IEnumerable<DenoisePreset> DenoisePresets => EnumHelper<DenoisePreset>.GetEnumList();\r
 \r
         /// <summary>\r
         /// Gets the denoise tunes.\r
         /// </summary>\r
-        public IEnumerable<DenoiseTune> DenoiseTunes\r
-        {\r
-            get\r
-            {\r
-                return EnumHelper<DenoiseTune>.GetEnumList();\r
-            }\r
-        }\r
+        public IEnumerable<DenoiseTune> DenoiseTunes => EnumHelper<DenoiseTune>.GetEnumList();\r
 \r
-        /// <summary>\r
-        /// Gets a value indicating whether show denoise options.\r
-        /// </summary>\r
-        public bool ShowDenoiseOptions\r
-        {\r
-            get\r
-            {\r
-                return this.SelectedDenoise != Denoise.Off;\r
-            }\r
-        }\r
+        public bool ShowDenoiseOptions => this.SelectedDenoise != Denoise.Off;\r
 \r
-        /// <summary>\r
-        /// Gets a value indicating whether show denoise tune.\r
-        /// </summary>\r
-        public bool ShowDenoiseTune\r
-        {\r
-            get\r
-            {\r
-                return this.SelectedDenoise == Denoise.NLMeans && this.SelectedDenoisePreset != DenoisePreset.Custom;\r
-            }\r
-        }\r
+        public bool ShowDenoiseTune => this.SelectedDenoise == Denoise.NLMeans && this.SelectedDenoisePreset != DenoisePreset.Custom;\r
+\r
+        public bool ShowDenoiseCustom => this.CurrentTask.DenoisePreset == DenoisePreset.Custom;\r
+\r
+        #endregion\r
 \r
         /// <summary>\r
         /// The rotation options.\r
@@ -727,20 +619,8 @@ namespace HandBrakeWPF.ViewModels
                 this.SelectedDenoise = preset.Task.Denoise;\r
                 this.SelectedDetelecine = preset.Task.Detelecine;\r
 \r
-                this.SelectedDecomb = preset.Task.Decomb;\r
-                this.SelectedDeInterlace = preset.Task.Deinterlace;\r
-                if (preset.Task.DeinterlaceFilter == DeinterlaceFilter.Yadif)\r
-                {\r
-                    this.SelectedDeinterlaceFilter = DeinterlaceFilter.Yadif;\r
-                }\r
-                else if (preset.Task.DeinterlaceFilter == DeinterlaceFilter.Decomb)\r
-                {\r
-                    this.SelectedDeinterlaceFilter = DeinterlaceFilter.Decomb;\r
-                }\r
-                else\r
-                {\r
-                    this.SelectedDeinterlaceFilter = DeinterlaceFilter.Off;\r
-                }\r
+                this.SelectedDeinterlaceFilter = preset.Task.DeinterlaceFilter;\r
+                this.SelectedDeInterlacePreset = preset.Task.DeinterlacePreset;\r
 \r
                 this.SelectedCombDetectPreset = preset.Task.CombDetect;\r
 \r
@@ -756,9 +636,8 @@ namespace HandBrakeWPF.ViewModels
                 this.CustomSharpen = preset.Task.SharpenCustom;\r
 \r
                 // Custom Values\r
-                this.CustomDecomb = preset.Task.CustomDecomb;\r
+                this.CustomDeinterlaceSettings = preset.Task.CustomDeinterlaceSettings;\r
                 this.CustomCombDetect = preset.Task.CustomCombDetect;\r
-                this.CustomDeinterlace = preset.Task.CustomDeinterlace;\r
                 this.CustomDetelecine = preset.Task.CustomDetelecine;\r
                 this.CustomDenoise = preset.Task.CustomDenoise;\r
 \r
@@ -769,8 +648,7 @@ namespace HandBrakeWPF.ViewModels
             {\r
                 // Default everything to off\r
                 this.SelectedDenoise = Denoise.Off;\r
-                this.SelectedDecomb = Decomb.Default;\r
-                this.SelectedDeInterlace = Deinterlace.Default;\r
+                this.SelectedDeinterlaceFilter = DeinterlaceFilter.Off;\r
                 this.SelectedDetelecine = Detelecine.Off;\r
                 this.Grayscale = false;\r
                 this.DeblockValue = 0;\r
@@ -791,8 +669,8 @@ namespace HandBrakeWPF.ViewModels
             this.CurrentTask = task;\r
 \r
             this.NotifyOfPropertyChange(() => this.SelectedDenoise);\r
-            this.NotifyOfPropertyChange(() => this.SelectedDecomb);\r
-            this.NotifyOfPropertyChange(() => this.SelectedDeInterlace);\r
+            this.NotifyOfPropertyChange(() => this.SelectedDeinterlaceFilter);\r
+            this.NotifyOfPropertyChange(() => this.SelectedDeInterlacePreset);\r
             this.NotifyOfPropertyChange(() => this.SelectedDetelecine);\r
             this.NotifyOfPropertyChange(() => this.Grayscale);\r
             this.NotifyOfPropertyChange(() => this.DeblockValue);\r
@@ -805,24 +683,18 @@ namespace HandBrakeWPF.ViewModels
             this.NotifyOfPropertyChange(() => this.FlipVideo);\r
             this.NotifyOfPropertyChange(() => this.SelectedRotation);\r
 \r
-            this.NotifyOfPropertyChange(() => this.CustomDecomb);\r
-            this.NotifyOfPropertyChange(() => this.CustomDeinterlace);\r
+            this.NotifyOfPropertyChange(() => this.CustomDeinterlaceSettings);\r
             this.NotifyOfPropertyChange(() => this.CustomDetelecine);\r
             this.NotifyOfPropertyChange(() => this.CustomDenoise);\r
             this.NotifyOfPropertyChange(() => this.CustomSharpen);\r
             this.NotifyOfPropertyChange(() => this.CustomCombDetect);\r
 \r
-            this.NotifyOfPropertyChange(() => this.IsDeinterlaceMode);\r
-            this.NotifyOfPropertyChange(() => this.IsDecombMode);\r
-            this.NotifyOfPropertyChange(() => this.IsDeinterlaceDecomb);\r
 \r
             this.NotifyOfPropertyChange(() => this.ShowDenoiseOptions);\r
             this.NotifyOfPropertyChange(() => this.ShowDenoiseCustom);\r
             this.NotifyOfPropertyChange(() => this.ShowDenoiseTune);\r
-            this.NotifyOfPropertyChange(() => this.ShowDecombCustom);\r
+            this.NotifyOfPropertyChange(() => this.ShowCustomDeinterlace);\r
             this.NotifyOfPropertyChange(() => this.ShowCombDetectCustom);\r
-            this.NotifyOfPropertyChange(() => this.ShowDeinterlaceDecombCustom);\r
-            this.NotifyOfPropertyChange(() => this.ShowDeinterlaceCustom);\r
             this.NotifyOfPropertyChange(() => this.ShowDetelecineCustom);       \r
             this.NotifyOfPropertyChange(() => this.ShowSharpenCustom);\r
             this.NotifyOfPropertyChange(() => this.ShowSharpenOptions);\r
@@ -846,12 +718,12 @@ namespace HandBrakeWPF.ViewModels
                 return false;\r
             }\r
 \r
-            if (preset.Task.Deinterlace != this.SelectedDeInterlace)\r
+            if (preset.Task.DeinterlacePreset != this.SelectedDeInterlacePreset)\r
             {\r
                 return false;\r
             }\r
 \r
-            if (preset.Task.Decomb != this.SelectedDecomb)\r
+            if (preset.Task.CustomDeinterlaceSettings != this.CustomDeinterlaceSettings)\r
             {\r
                 return false;\r
             }\r
@@ -861,16 +733,6 @@ namespace HandBrakeWPF.ViewModels
                 return false;\r
             }\r
 \r
-            if ((preset.Task.CustomDecomb ?? string.Empty) != (this.CustomDecomb ?? string.Empty))\r
-            {\r
-                return false;\r
-            }\r
-\r
-            if ((preset.Task.CustomDeinterlace ?? string.Empty) != (this.CustomDeinterlace ?? string.Empty))\r
-            {\r
-                return false;\r
-            }\r
-\r
             if ((preset.Task.CustomCombDetect ?? string.Empty) != (this.CustomCombDetect ?? string.Empty))\r
             {\r
                 return false;\r
index 3dbc38ea566f90195a7b8661a0290bff02e3cbeb..7c323869f149c1cc3ac289deb3b6c5eac09efd43 100644 (file)
@@ -40,6 +40,7 @@
                     <RowDefinition Height="Auto" />\r
                     <RowDefinition Height="Auto" />\r
                     <RowDefinition Height="Auto" />\r
+                    <RowDefinition Height="Auto" />\r
                 </Grid.RowDefinitions>\r
 \r
                 <Grid.ColumnDefinitions>\r
                 <TextBox Width="120" Grid.Row="0" Grid.Column="2" Margin="0,0,0,10" Text="{Binding CustomDetelecine, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left"\r
                          Visibility="{Binding ShowDetelecineCustom, Converter={StaticResource boolToVisConverter}}"/>\r
 \r
-                <!-- Deinterlace -->\r
-                <TextBlock Text="{x:Static Properties:ResourcesUI.FiltersView_Deinterlace}" VerticalAlignment="Center" Grid.Row="1" Grid.Column="0" Margin="0,0,0,10" />\r
-                <StackPanel Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" Margin="0,0,0,10">\r
+                <!-- Interlace Detection -->\r
+                <TextBlock Text="Interlace Detection:" VerticalAlignment="Center" Margin="0,0,5,0" Grid.Row="1"  />\r
+\r
+                <ComboBox Width="120" Grid.Row="1" Grid.Column="1" ItemsSource="{Binding CombDetectPresets, Converter={StaticResource boolComboConverter}}" HorizontalAlignment="Left" VerticalAlignment="Center"\r
+                          SelectedItem="{Binding SelectedCombDetectPreset, Converter={StaticResource boolComboConverter}}" ToolTip="{x:Static Properties:ResourcesTooltips.FilterView_InterlaceDetection}"\r
+                          VerticalContentAlignment="Center"/>\r
+\r
+                <StackPanel Orientation="Horizontal" Grid.Row="1" Grid.Column="2">\r
+                <TextBlock Text="Custom:" VerticalAlignment="Center" Margin="0,0,5,0" Visibility="{Binding ShowCombDetectCustom, Converter={StaticResource boolToVisConverter}}" />\r
+                <TextBox Width="120" Text="{Binding CustomCombDetect, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" HorizontalAlignment="Left"\r
+                         Visibility="{Binding ShowCombDetectCustom, Converter={StaticResource boolToVisConverter}}" MinHeight="22" ToolTip="{x:Static Properties:ResourcesTooltips.FilterView_InterlaceDetectionCustom}"  />\r
+                </StackPanel>\r
 \r
+                <!-- Deinterlace -->\r
+                <TextBlock Text="{x:Static Properties:ResourcesUI.FiltersView_Deinterlace}" VerticalAlignment="Center" Grid.Row="2" Grid.Column="0" Margin="0,0,0,10" />\r
+                <StackPanel Grid.Row="2" Grid.Column="1" VerticalAlignment="Center" Margin="0,0,0,10">\r
                     <ComboBox Width="120" ItemsSource="{Binding DeinterlaceFilterOptions, Converter={StaticResource boolComboConverter}}" HorizontalAlignment="Left"\r
                           SelectedItem="{Binding SelectedDeinterlaceFilter, Converter={StaticResource boolComboConverter}}" ToolTip="{x:Static Properties:ResourcesTooltips.FilterView_Deinterlace}"  />\r
-                    \r
                 </StackPanel>\r
 \r
-                <Grid Grid.Row="1" Grid.Column="2" Margin="0,0,0,10">\r
-                    <Grid.RowDefinitions>\r
-                        <RowDefinition />\r
-                        <RowDefinition />\r
-                    </Grid.RowDefinitions>\r
-                    \r
-                    <Grid.ColumnDefinitions>\r
-                        <ColumnDefinition Width="Auto" />\r
-                        <ColumnDefinition />\r
-                        <ColumnDefinition Width="15"/>\r
-                        <ColumnDefinition Width="Auto" />\r
-                        <ColumnDefinition />\r
-                    </Grid.ColumnDefinitions>\r
-\r
-               \r
-                    <TextBlock Text="Preset:" VerticalAlignment="Center" Margin="0,0,5,0" Grid.Column="0" Grid.Row="0"  Visibility="{Binding IsDeinterlaceDecomb, Converter={StaticResource boolToVisConverter}}"  />\r
-                    <StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal">\r
-                        <ComboBox Width="120" ItemsSource="{Binding DecombOptions, Converter={StaticResource boolComboConverter}}" HorizontalAlignment="Left" VerticalAlignment="Center"\r
-                                  SelectedItem="{Binding SelectedDecomb, Converter={StaticResource boolComboConverter}}"\r
-                                  Visibility="{Binding IsDecombMode, Converter={StaticResource boolToVisConverter}}"  />\r
-\r
-                        <ComboBox Width="120" ItemsSource="{Binding DeInterlaceOptions, Converter={StaticResource boolComboConverter}}"  HorizontalAlignment="Left" VerticalAlignment="Center"\r
-                                  SelectedItem="{Binding SelectedDeInterlace, Converter={StaticResource boolComboConverter}}"\r
-                                  Visibility="{Binding IsDeinterlaceMode, Converter={StaticResource boolToVisConverter}}" ToolTip="{x:Static Properties:ResourcesTooltips.FilterView_DeinterlacePreset}" />\r
-                    </StackPanel>\r
-\r
-                    <TextBlock Text="Custom:" VerticalAlignment="Center" Margin="0,0,5,0" Grid.Column="0" Grid.Row="1"  Visibility="{Binding ShowDeinterlaceDecombCustom, Converter={StaticResource boolToVisConverter}}" />\r
-                    <StackPanel Grid.Row="1" Grid.Column="1" Orientation="Horizontal">\r
-                        <TextBox Width="120" Text="{Binding CustomDecomb, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" HorizontalAlignment="Left"\r
-                             Visibility="{Binding ShowDecombCustom, Converter={StaticResource boolToVisConverter}}" Margin="0,5,0,0" MinHeight="22" ToolTip="{x:Static Properties:ResourcesTooltips.FilterView_DeinterlaceCustom}" />\r
-\r
-                        <TextBox Width="120" Text="{Binding CustomDeinterlace, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" HorizontalAlignment="Left"\r
-                             Visibility="{Binding ShowDeinterlaceCustom, Converter={StaticResource boolToVisConverter}}" Margin="0,5,0,0" MinHeight="22" ToolTip="{x:Static Properties:ResourcesTooltips.FilterView_DeinterlaceCustom}" />\r
-                    </StackPanel>\r
+                <StackPanel Grid.Row="2" Grid.Column="2" Orientation="Horizontal" Margin="0,0,0,10">\r
+                    <TextBlock Text="Preset:" VerticalAlignment="Center" Margin="0,0,5,0" Visibility="{Binding IsDeinterlaceEnabled, Converter={StaticResource boolToVisConverter}}"  />\r
+                    <ComboBox Width="120" ItemsSource="{Binding DeinterlacePresets}" HorizontalAlignment="Left" VerticalAlignment="Center"\r
+                              SelectedItem="{Binding SelectedDeInterlacePreset}" DisplayMemberPath="Name" Visibility="{Binding IsDeinterlaceEnabled, Converter={StaticResource boolToVisConverter}}" />\r
 \r
-                    <TextBlock Text="Interlace Detection:" VerticalAlignment="Center" Margin="0,0,5,0" Grid.Column="3" Grid.Row="0"  Visibility="{Binding IsDeinterlaceDecomb, Converter={StaticResource boolToVisConverter}}"  />\r
-                    <TextBlock Text="Custom:" VerticalAlignment="Center" Margin="0,0,5,0" Grid.Column="3" Grid.Row="1"  Visibility="{Binding ShowCombDetectCustom, Converter={StaticResource boolToVisConverter}}" />\r
-\r
-                    <ComboBox Width="120" Grid.Row="0" Grid.Column="4" ItemsSource="{Binding CombDetectPresets, Converter={StaticResource boolComboConverter}}" HorizontalAlignment="Left" VerticalAlignment="Center"\r
-                              SelectedItem="{Binding SelectedCombDetectPreset, Converter={StaticResource boolComboConverter}}" ToolTip="{x:Static Properties:ResourcesTooltips.FilterView_InterlaceDetection}"\r
-                              Visibility="{Binding IsDeinterlaceDecomb, Converter={StaticResource boolToVisConverter}}"/>\r
-                    <TextBox Width="120" Grid.Row="1" Grid.Column="4" Text="{Binding CustomCombDetect, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" HorizontalAlignment="Left"\r
-                             Visibility="{Binding ShowCombDetectCustom, Converter={StaticResource boolToVisConverter}}" Margin="0,5,0,0" MinHeight="22" ToolTip="{x:Static Properties:ResourcesTooltips.FilterView_InterlaceDetectionCustom}"  />\r
-                </Grid>\r
+                    <TextBlock Text="Custom:" VerticalAlignment="Center" Margin="5,0,5,0"  Visibility="{Binding ShowCustomDeinterlace, Converter={StaticResource boolToVisConverter}}" />\r
+                    <TextBox Width="120" Text="{Binding CustomDeinterlaceSettings, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" HorizontalAlignment="Left"\r
+                             Visibility="{Binding ShowCustomDeinterlace, Converter={StaticResource boolToVisConverter}}" MinHeight="22" ToolTip="{x:Static Properties:ResourcesTooltips.FilterView_DeinterlaceCustom}" />\r
+                </StackPanel>\r
 \r
-              \r
 \r
-                \r
                 <!-- Denoise -->\r
                 <TextBlock Text="{x:Static Properties:ResourcesUI.FiltersView_Denoise}" Grid.Row="3" Grid.Column="0" Margin="0,0,0,10"/>\r
                 <ComboBox Width="120" Grid.Row="3" ItemsSource="{Binding DenoiseOptions, Converter={StaticResource boolComboConverter}}" \r