WinGui: Adding support for Nlmeans to the front-end. Plist keys still tbd.
authorsr55 <sr55.hb@outlook.com>
Sat, 5 Jul 2014 14:37:53 +0000 (14:37 +0000)
committersr55 <sr55.hb@outlook.com>
Sat, 5 Jul 2014 14:37:53 +0000 (14:37 +0000)
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@6227 b64f7644-9d1e-0410-96f1-a4d463321fa5

17 files changed:
win/CS/HandBrake.ApplicationServices/Factories/PlistPresetFactory.cs
win/CS/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj
win/CS/HandBrake.ApplicationServices/Model/EncodeTask.cs
win/CS/HandBrake.ApplicationServices/Utilities/PlistUtility.cs
win/CS/HandBrake.ApplicationServices/Utilities/QueryGeneratorUtility.cs
win/CS/HandBrake.ApplicationServices/Utilities/QueryParserUtility.cs
win/CS/HandBrake.Interop/HandBrakeInterop/HandBrakeInstance.cs
win/CS/HandBrake.Interop/HandBrakeInterop/HandBrakeInterop.csproj
win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/Denoise.cs
win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/DenoisePreset.cs [new file with mode: 0644]
win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/DenoiseTune.cs [new file with mode: 0644]
win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/EncodingProfile.cs
win/CS/HandBrake.Server/HandBrake.Server.csproj
win/CS/HandBrakeWPF/Converters/Filters/DenoisePresetConverter.cs [new file with mode: 0644]
win/CS/HandBrakeWPF/HandBrakeWPF.csproj
win/CS/HandBrakeWPF/ViewModels/FiltersViewModel.cs
win/CS/HandBrakeWPF/Views/FiltersView.xaml

index e6b59c31de1616a0e69c41d39d1b73210917320e..8f7e84e6c34c73f1cf7bca51d72757c5f73ebb18 100644 (file)
@@ -161,6 +161,12 @@ namespace HandBrake.ApplicationServices.Factories
                 case "PictureDenoise":\r
                     preset.Task.Denoise = (Denoise)kvp.Value;\r
                     break;\r
+                case "DenoisePreset":\r
+                    preset.Task.DenoisePreset = (DenoisePreset)kvp.Value; // TODO to be confirmed.\r
+                    break;\r
+                case "DenoiseTune":\r
+                    preset.Task.DenoiseTune = (DenoiseTune)kvp.Value; // TODO to be confirmed.\r
+                    break;\r
                 case "PictureDenoiseCustom":\r
                     preset.Task.CustomDenoise = kvp.Value;\r
                     break;\r
index 39596c2220b0011eb32d537ca086e71c3ea21a79..0f082f0f3584a57567a4deceb2d1329abdd654eb 100644 (file)
@@ -35,6 +35,7 @@
     <PlatformTarget>x64</PlatformTarget>\r
     <OutputPath>bin\Debug\</OutputPath>\r
     <DefineConstants>TRACE;DEBUG</DefineConstants>\r
+    <UseVSHostingProcess>true</UseVSHostingProcess>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">\r
     <PlatformTarget>x64</PlatformTarget>\r
index 6a519a38281dcabb49fb4b228252cdb67a27a1ed..be719701b47b1b91f446b676919cdcaf2951fa09 100644 (file)
@@ -98,6 +98,8 @@ namespace HandBrake.ApplicationServices.Model
             this.Decomb = task.Decomb;\r
             this.Deinterlace = task.Deinterlace;\r
             this.Denoise = task.Denoise;\r
+            this.DenoisePreset = task.DenoisePreset;\r
+            this.DenoiseTune = task.DenoiseTune;\r
             this.Destination = task.Destination;\r
             this.Detelecine = task.Detelecine;\r
             this.DisplayWidth = task.DisplayWidth;\r
@@ -313,6 +315,16 @@ namespace HandBrake.ApplicationServices.Model
         /// </summary>\r
         public Denoise Denoise { get; set; }\r
 \r
+        /// <summary>\r
+        /// Gets or sets the denoise preset.\r
+        /// </summary>\r
+        public DenoisePreset DenoisePreset { get; set; }\r
+\r
+        /// <summary>\r
+        /// Gets or sets the denoise tune.\r
+        /// </summary>\r
+        public DenoiseTune DenoiseTune { get; set; }\r
+\r
         /// <summary>\r
         /// Gets or sets CustomDenoise.\r
         /// </summary>\r
index 7448f4bc5eef78f82f719c315995bf5844ce63ef..9c6713b30c0a959281396f651379151392b48cac 100644 (file)
@@ -199,28 +199,67 @@ namespace HandBrake.ApplicationServices.Utilities
                     break;\r
             }\r
 \r
-            switch (parsed.Denoise)\r
+\r
+            if (parsed.Denoise == Denoise.hqdn3d)\r
             {\r
-                case Denoise.Off:\r
-                    AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "0");\r
-                    AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty);\r
-                    break;\r
-                case Denoise.Weak:\r
-                    AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "2");\r
-                    AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty);\r
-                    break;\r
-                case Denoise.Medium:\r
-                    AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "3");\r
-                    AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty);\r
-                    break;\r
-                case Denoise.Strong:\r
-                    AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "4");\r
-                    AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty);\r
-                    break;\r
-                case Denoise.Custom:\r
-                    AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "1");\r
-                    AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", parsed.CustomDenoise);\r
-                    break;\r
+                switch (parsed.DenoisePreset)\r
+                {\r
+                    case DenoisePreset.Weak:\r
+                        AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "2");\r
+                        AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty);\r
+                        break;\r
+                    case DenoisePreset.Medium:\r
+                        AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "3");\r
+                        AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty);\r
+                        break;\r
+                    case DenoisePreset.Strong:\r
+                        AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "4");\r
+                        AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", string.Empty);\r
+                        break;\r
+                    case DenoisePreset.Custom:\r
+                        AddEncodeElement(xmlWriter, "PictureDenoise", "integer", "1");\r
+                        AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", parsed.CustomDenoise);\r
+                        break;\r
+                }\r
+            }\r
+\r
+            // These keys are still TBD.   TODO Update these\r
+            if (parsed.Denoise == Denoise.NlMeans)\r
+            {\r
+                switch (parsed.DenoisePreset)\r
+                {\r
+                    case DenoisePreset.Ultralight:\r
+                        AddEncodeElement(xmlWriter, "DenoisePreset", "integer", "1");\r
+                        break;\r
+                    case DenoisePreset.Light:\r
+                        AddEncodeElement(xmlWriter, "DenoisePreset", "integer", "2");\r
+                        break;\r
+                    case DenoisePreset.Medium:\r
+                        AddEncodeElement(xmlWriter, "DenoisePreset", "integer", "3");\r
+                        break;\r
+                    case DenoisePreset.Strong:\r
+                        AddEncodeElement(xmlWriter, "DenoisePreset", "integer", "4");\r
+                        break;\r
+                }\r
+\r
+                switch (parsed.DenoiseTune)\r
+                {\r
+                    case DenoiseTune.None:\r
+                        AddEncodeElement(xmlWriter, "DenoiseTune", "integer", "0");\r
+                        break;\r
+                    case DenoiseTune.Animation:\r
+                        AddEncodeElement(xmlWriter, "DenoiseTune", "integer", "1");\r
+                        break;\r
+                    case DenoiseTune.Film:\r
+                        AddEncodeElement(xmlWriter, "DenoiseTune", "integer", "2");\r
+                        break;\r
+                    case DenoiseTune.Grain:\r
+                        AddEncodeElement(xmlWriter, "DenoiseTune", "integer", "3");\r
+                        break;\r
+                    case DenoiseTune.HighMotion:\r
+                        AddEncodeElement(xmlWriter, "DenoiseTune", "integer", "4");\r
+                        break;\r
+                }\r
             }\r
 \r
             int detelecine = 0;\r
index 8fe7cd3ac901a3138d5063e37b5e34936b034706..0466610587654742fdac454baa889b8ca67f88ec 100644 (file)
@@ -372,23 +372,65 @@ namespace HandBrake.ApplicationServices.Utilities
                     break;\r
             }\r
 \r
-            switch (task.Denoise) // Denoise\r
+            if (task.Denoise == Denoise.hqdn3d)\r
             {\r
-                case Denoise.Weak:\r
-                    query += " --denoise=\"weak\"";\r
-                    break;\r
-                case Denoise.Medium:\r
-                    query += " --denoise=\"medium\"";\r
-                    break;\r
-                case Denoise.Strong:\r
-                    query += " --denoise=\"strong\"";\r
-                    break;\r
-                case Denoise.Custom:\r
-                    query += string.Format(" --denoise=\"{0}\"", task.CustomDenoise);\r
-                    break;\r
-                default:\r
-                    query += string.Empty;\r
-                    break;\r
+                switch (task.DenoisePreset) // Denoise\r
+                {\r
+                    case DenoisePreset.Weak:\r
+                        query += " --denoise=\"weak\"";\r
+                        break;\r
+                    case DenoisePreset.Medium:\r
+                        query += " --denoise=\"medium\"";\r
+                        break;\r
+                    case DenoisePreset.Strong:\r
+                        query += " --denoise=\"strong\"";\r
+                        break;\r
+                    case DenoisePreset.Custom:\r
+                        query += string.Format(" --denoise=\"{0}\"", task.CustomDenoise);\r
+                        break;\r
+                }\r
+            }\r
+\r
+            // NL Means\r
+            if (task.Denoise == Denoise.NlMeans)\r
+            {\r
+                switch (task.DenoisePreset) // Denoise\r
+                {\r
+                    case DenoisePreset.Light:\r
+                        query += " --nlmeans=\"light\"";\r
+                        break;\r
+                    case DenoisePreset.Ultralight:\r
+                        query += " --nlmeans=\"ultralight\"";\r
+                        break;\r
+                    case DenoisePreset.Medium:\r
+                        query += " --nlmeans=\"medium\"";\r
+                        break;\r
+                    case DenoisePreset.Strong:\r
+                        query += " --nlmeans=\"strong\"";\r
+                        break;\r
+                    default:\r
+                        query += string.Empty;\r
+                        break;\r
+                }\r
+\r
+                switch (task.DenoiseTune)\r
+                {\r
+                    case DenoiseTune.Animation:\r
+                        query += " --nlmeans-tune=\"animation\"";\r
+                        break;\r
+                    case DenoiseTune.Film:\r
+                        query += " --nlmeans-tune=\"film\"";\r
+                        break;\r
+                    case DenoiseTune.Grain:\r
+                        query += " --nlmeans-tune=\"grain\"";\r
+                        break;\r
+                    case DenoiseTune.HighMotion:\r
+                        query += " --nlmeans-tune=\"highmotion\"";\r
+                        break;\r
+                    default:\r
+                        query += string.Empty;\r
+                        break;\r
+                }\r
             }\r
 \r
             if (task.Deblock > 4)\r
index 2b39c74a54bca3dc5f8e61ad452e07f31a05dd5c..b3619c7dd1cd6006984ab96f64504ecc3b10d65b 100644 (file)
@@ -77,6 +77,8 @@ namespace HandBrake.ApplicationServices.Utilities
             Match decombValue = Regex.Match(input, @" --decomb=([a-zA-Z0-9.:""\\]*)");\r
             Match deinterlace = Regex.Match(input, @"--deinterlace=\""([a-zA-Z0-9.:]*)\""");\r
             Match denoise = Regex.Match(input, @"--denoise=\""([a-zA-Z0-9.:]*)\""");\r
+            Match nlmeans = Regex.Match(input, @"--nlmeans=\""([a-zA-Z0-9.:]*)\""");\r
+            Match nlmeansTune = Regex.Match(input, @"--nlmeans-tune=\""([a-zA-Z0-9.:]*)\""");\r
             Match deblock = Regex.Match(input, @"--deblock=([0-9:]*)");\r
             Match detelecine = Regex.Match(input, @"--detelecine");\r
             Match detelecineValue = Regex.Match(input, @" --detelecine=\""([a-zA-Z0-9.:]*)\""");\r
@@ -273,24 +275,64 @@ namespace HandBrake.ApplicationServices.Utilities
                 parsed.Denoise = Denoise.Off;\r
                 if (denoise.Success)\r
                 {\r
+                    parsed.Denoise = Denoise.hqdn3d;\r
                     switch (denoise.ToString().Replace("--denoise=", string.Empty).Replace("\"", string.Empty))\r
                     {\r
                         case "weak":\r
-                            parsed.Denoise = Denoise.Weak;\r
+                            parsed.DenoisePreset = DenoisePreset.Weak;\r
                             break;\r
                         case "medium":\r
-                            parsed.Denoise = Denoise.Medium;\r
+                            parsed.DenoisePreset = DenoisePreset.Medium;\r
                             break;\r
                         case "strong":\r
-                            parsed.Denoise = Denoise.Strong;\r
+                            parsed.DenoisePreset = DenoisePreset.Strong;\r
                             break;\r
                         default:\r
-                            parsed.Denoise = Denoise.Custom;\r
+                            parsed.DenoisePreset = DenoisePreset.Custom;\r
                             parsed.CustomDenoise = denoise.ToString().Replace("--denoise=", string.Empty).Replace("\"", string.Empty);\r
                             break;\r
                     }\r
                 }\r
 \r
+                if (nlmeans.Success)\r
+                {\r
+                    parsed.Denoise = Denoise.NlMeans;\r
+                    switch (nlmeans.ToString().Replace("--nlmeans=", string.Empty).Replace("\"", string.Empty))\r
+                    {\r
+                        case "ultralight":\r
+                            parsed.DenoisePreset = DenoisePreset.Ultralight;\r
+                            break;\r
+                        case "light":\r
+                            parsed.DenoisePreset = DenoisePreset.Light;\r
+                            break;\r
+                        case "medium":\r
+                            parsed.DenoisePreset = DenoisePreset.Medium;\r
+                            break;\r
+                        case "strong":\r
+                            parsed.DenoisePreset = DenoisePreset.Strong;\r
+                            break;\r
+                    }\r
+\r
+                    if (nlmeansTune.Success)\r
+                    {\r
+                        switch (nlmeansTune.ToString().Replace("--nlmeans-tune=", string.Empty).Replace("\"", string.Empty))\r
+                        {\r
+                            case "animation":\r
+                                parsed.DenoiseTune = DenoiseTune.Animation;\r
+                                break;\r
+                            case "film":\r
+                                parsed.DenoiseTune = DenoiseTune.Film;\r
+                                break;\r
+                            case "grain":\r
+                                parsed.DenoiseTune = DenoiseTune.Grain;\r
+                                break;\r
+                            case "highmotion":\r
+                                parsed.DenoiseTune = DenoiseTune.HighMotion;\r
+                                break;\r
+                        }                      \r
+                    }\r
+                }\r
+\r
                 parsed.Deblock = 0;\r
                 if (deblock.Success)\r
                 {\r
index 597e8cbe7fd4a30d834713dba9f10776fbe3ace8..0e484794c5372548599d7ee2e3beab97207f1320 100644 (file)
@@ -1213,24 +1213,26 @@ namespace HandBrake.Interop
             if (profile.Denoise != Denoise.Off)\r
             {\r
                 string settings = null;\r
-                switch (profile.Denoise)\r
+                switch (profile.DenoisePreset)\r
                 {\r
-                    case Denoise.Weak:\r
+                    case DenoisePreset.Weak:\r
                         settings = "2:1:1:2:3:3";\r
                         break;\r
-                    case Denoise.Medium:\r
+                    case DenoisePreset.Medium:\r
                         settings = "3:2:2:2:3:3";\r
                         break;\r
-                    case Denoise.Strong:\r
+                    case DenoisePreset.Strong:\r
                         settings = "7:7:7:5:5:5";\r
                         break;\r
-                    case Denoise.Custom:\r
+                    case DenoisePreset.Custom:\r
                         settings = profile.CustomDenoise;\r
                         break;\r
+                        // TODO Add new Presets.\r
                     default:\r
                         break;\r
                 }\r
 \r
+                // TODO Add Tunes\r
                 this.AddFilter(filterList, (int)hb_filter_ids.HB_FILTER_DENOISE, settings, allocatedMemory);\r
             }\r
 \r
index 720f64395d89b43739a6c884c55bbe975023cdf5..a1f1b076b15e0d89d8e14dc260548300a8d55042 100644 (file)
@@ -50,6 +50,7 @@
     <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>\r
     <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>\r
     <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>\r
+    <UseVSHostingProcess>true</UseVSHostingProcess>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">\r
     <OutputPath>bin\x64\Release\</OutputPath>\r
     <Compile Include="HbLib\NativeConstants.cs" />\r
     <Compile Include="Interfaces\IHandBrakeInstance.cs" />\r
     <Compile Include="Helpers\InteropUtilities.cs" />\r
+    <Compile Include="Model\Encoding\DenoisePreset.cs" />\r
+    <Compile Include="Model\Encoding\DenoiseTune.cs" />\r
     <Compile Include="Model\Encoding\PictureRotation.cs" />\r
     <Compile Include="Model\Encoding\x265\x265Preset.cs" />\r
     <Compile Include="Model\Encoding\x265\x265Profile.cs" />\r
index a2ab0f0a43280bd7df7b46cf3804568a052bf41d..500547a24816a1945bdb90f4f4ed908b232c753a 100644 (file)
@@ -15,9 +15,7 @@ namespace HandBrake.Interop.Model.Encoding
     public enum Denoise\r
        {\r
                Off = 0,\r
-               Weak = 2,\r
-               Medium = 3,\r
-               Strong = 4,\r
-               Custom = 1\r
+        hqdn3d = 1,\r
+               NlMeans = 2,\r
        }\r
 }\r
diff --git a/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/DenoisePreset.cs b/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/DenoisePreset.cs
new file mode 100644 (file)
index 0000000..b266350
--- /dev/null
@@ -0,0 +1,37 @@
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="DenoisePreset.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 DenoisePreset type.\r
+// </summary>\r
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrake.Interop.Model.Encoding\r
+{\r
+    using System.ComponentModel.DataAnnotations;\r
+\r
+    /// <summary>\r
+    /// The denoise preset.\r
+    /// </summary>\r
+    public enum DenoisePreset\r
+    {\r
+        [Display(Name = "Weak")]\r
+        Weak = 0,\r
+\r
+        [Display(Name = "Medium")]\r
+        Medium,\r
+\r
+        [Display(Name = "Strong")]\r
+        Strong,\r
+\r
+        [Display(Name = "Custom")]\r
+        Custom,\r
+\r
+        [Display(Name = "Ultralight")] // NLMeans only\r
+        Ultralight,\r
+\r
+        [Display(Name = "Light")] // NLMeans only\r
+        Light,\r
+    }\r
+}\r
diff --git a/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/DenoiseTune.cs b/win/CS/HandBrake.Interop/HandBrakeInterop/Model/Encoding/DenoiseTune.cs
new file mode 100644 (file)
index 0000000..35b5843
--- /dev/null
@@ -0,0 +1,34 @@
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="DenoiseTune.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 DenoiseTune type.\r
+// </summary>\r
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrake.Interop.Model.Encoding\r
+{\r
+    using System.ComponentModel.DataAnnotations;\r
+\r
+    /// <summary>\r
+    /// The denoise tune.\r
+    /// </summary>\r
+    public enum DenoiseTune\r
+    {\r
+        [Display(Name = "None")]\r
+        None = 0,\r
+\r
+        [Display(Name = "Film")]\r
+        Film,\r
+\r
+        [Display(Name = "Grain")]\r
+        Grain,\r
+\r
+        [Display(Name = "High Motion")]\r
+        HighMotion,\r
+\r
+        [Display(Name = "Animation")]\r
+        Animation,\r
+    }\r
+}\r
index 2dea5624bd88b86ef9f16649079ff30aa748815b..834ef5576014b984392ee3175ee27da79b87d44b 100644 (file)
@@ -184,6 +184,16 @@ namespace HandBrake.Interop.Model.Encoding
         /// </summary>\r
         public Denoise Denoise { get; set; }\r
 \r
+        /// <summary>\r
+        /// Gets or sets the denoise preset.\r
+        /// </summary>\r
+        public DenoisePreset DenoisePreset { get; set; }\r
+\r
+        /// <summary>\r
+        /// Gets or sets the denoise tune.\r
+        /// </summary>\r
+        public DenoiseTune DenoiseTune { get; set; }\r
+\r
         /// <summary>\r
         /// Gets or sets the custom denoise.\r
         /// </summary>\r
index 7e202d4c22a3e6cbd5e3048281ac6635cee9cd53..98f2548d5cecd6a980a441b4620773ace88f709f 100644 (file)
@@ -36,6 +36,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">\r
     <PlatformTarget>x64</PlatformTarget>\r
     <OutputPath>bin\Debug\</OutputPath>\r
+    <UseVSHostingProcess>true</UseVSHostingProcess>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">\r
     <PlatformTarget>x64</PlatformTarget>\r
diff --git a/win/CS/HandBrakeWPF/Converters/Filters/DenoisePresetConverter.cs b/win/CS/HandBrakeWPF/Converters/Filters/DenoisePresetConverter.cs
new file mode 100644 (file)
index 0000000..bb0ec1b
--- /dev/null
@@ -0,0 +1,86 @@
+// --------------------------------------------------------------------------------------------------------------------\r
+// <copyright file="DenoisePresetConverter.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 DenoisePresetConverter type.\r
+// </summary>\r
+// --------------------------------------------------------------------------------------------------------------------\r
+\r
+namespace HandBrakeWPF.Converters.Filters\r
+{\r
+    using System;\r
+    using System.Collections.Generic;\r
+    using System.Globalization;\r
+    using System.Linq;\r
+    using System.Windows.Data;\r
+\r
+    using HandBrake.Interop.Model.Encoding;\r
+\r
+    /// <summary>\r
+    /// The denoise preset converter.\r
+    /// </summary>\r
+    public class DenoisePresetConverter : IMultiValueConverter\r
+    {\r
+        /// <summary>\r
+        /// The convert.\r
+        /// </summary>\r
+        /// <param name="values">\r
+        /// The values.\r
+        /// </param>\r
+        /// <param name="targetType">\r
+        /// The target type.\r
+        /// </param>\r
+        /// <param name="parameter">\r
+        /// The parameter.\r
+        /// </param>\r
+        /// <param name="culture">\r
+        /// The culture.\r
+        /// </param>\r
+        /// <returns>\r
+        /// The <see cref="object"/>.\r
+        /// </returns>\r
+        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\r
+        {\r
+            if (values.Any() && values.Count() == 2)\r
+            {\r
+                Denoise denoiseChoice = (Denoise)values[1];\r
+\r
+                if (denoiseChoice == Denoise.hqdn3d)\r
+                {\r
+                    return new List<DenoisePreset> { DenoisePreset.Weak, DenoisePreset.Medium, DenoisePreset.Strong, DenoisePreset.Custom };\r
+                }\r
+\r
+                if (denoiseChoice == Denoise.NlMeans)\r
+                {\r
+                    return new List<DenoisePreset> { DenoisePreset.Ultralight, DenoisePreset.Light, DenoisePreset.Medium, DenoisePreset.Strong };\r
+                } \r
+            }\r
+\r
+            return Enumerable.Empty<DenoisePreset>();\r
+        }\r
+\r
+        /// <summary>\r
+        /// The convert back. Not used\r
+        /// </summary>\r
+        /// <param name="value">\r
+        /// The value.\r
+        /// </param>\r
+        /// <param name="targetTypes">\r
+        /// The target types.\r
+        /// </param>\r
+        /// <param name="parameter">\r
+        /// The parameter.\r
+        /// </param>\r
+        /// <param name="culture">\r
+        /// The culture.\r
+        /// </param>\r
+        /// <returns>\r
+        /// The Nothing. Not used\r
+        /// </returns>\r
+        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\r
+        {\r
+            throw new NotImplementedException();\r
+        }\r
+    }\r
+}\r
index 64752b39d35d791f02878e0fe4fa322c981a9040..dcd4a42bbfb8565b3122c69299cfadda85689e4a 100644 (file)
@@ -62,6 +62,7 @@
     <ErrorReport>prompt</ErrorReport>\r
     <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>\r
     <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>\r
+    <UseVSHostingProcess>true</UseVSHostingProcess>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">\r
     <OutputPath>bin\Release\</OutputPath>\r
     <Compile Include="Constants.cs" />\r
     <Compile Include="Controls\SplitButton\SplitMenuButton.cs" />\r
     <Compile Include="Converters\Audio\AudioBehaviourConverter.cs" />\r
+    <Compile Include="Converters\Filters\DenoisePresetConverter.cs" />\r
     <Compile Include="Converters\Subtitles\SubtitleBehaviourConverter.cs" />\r
     <Compile Include="Converters\Video\ScalingConverter.cs" />\r
     <Compile Include="Helpers\FileHelper.cs" />\r
index e5d825ba4ac476a6b80b5cedd0b135a0c8ee9f0a..70921b23f9d061f9c35d83dad0f96492fa18ad22 100644 (file)
 namespace HandBrakeWPF.ViewModels\r
 {\r
     using System.Collections.Generic;\r
+    using System.Globalization;\r
 \r
     using Caliburn.Micro;\r
 \r
     using HandBrake.ApplicationServices.Model;\r
     using HandBrake.ApplicationServices.Parsing;\r
-    using HandBrake.ApplicationServices.Services.Interfaces;\r
     using HandBrake.ApplicationServices.Utilities;\r
     using HandBrake.Interop.Model.Encoding;\r
 \r
@@ -145,7 +145,7 @@ namespace HandBrakeWPF.ViewModels
         {\r
             get\r
             {\r
-                return this.DeblockValue == 4 ? "Off" : this.DeblockValue.ToString();\r
+                return this.DeblockValue == 4 ? "Off" : this.DeblockValue.ToString(CultureInfo.InvariantCulture);\r
             }\r
         }\r
 \r
@@ -295,8 +295,13 @@ namespace HandBrakeWPF.ViewModels
                 this.NotifyOfPropertyChange(() => this.SelectedDenoise);\r
 \r
                 // Show / Hide the Custom Control\r
-                this.ShowDenoiseCustom = this.CurrentTask.Denoise == Denoise.Custom;\r
+                this.ShowDenoiseCustom = this.CurrentTask.Denoise == Denoise.hqdn3d && this.CurrentTask.DenoisePreset == DenoisePreset.Custom;\r
                 this.NotifyOfPropertyChange(() => this.ShowDenoiseCustom);\r
+\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
             }\r
         }\r
 \r
@@ -378,6 +383,90 @@ namespace HandBrakeWPF.ViewModels
         /// </summary>\r
         public string DeinterlaceControlText { get; set; }\r
 \r
+        /// <summary>\r
+        /// Gets or sets the selected denoise tune.\r
+        /// </summary>\r
+        public DenoiseTune SelectedDenoiseTune\r
+        {\r
+            get\r
+            {\r
+                return this.CurrentTask.DenoiseTune;\r
+            }\r
+\r
+            set\r
+            {\r
+                this.CurrentTask.DenoiseTune = value;\r
+                this.NotifyOfPropertyChange(() => this.SelectedDenoiseTune);\r
+            }\r
+        }\r
+\r
+        /// <summary>\r
+        /// Gets or sets the selected denoise preset.\r
+        /// </summary>\r
+        public DenoisePreset SelectedDenoisePreset\r
+        {\r
+            get\r
+            {\r
+                return this.CurrentTask.DenoisePreset;\r
+            }\r
+\r
+            set\r
+            {\r
+                this.CurrentTask.DenoisePreset = value;\r
+                this.NotifyOfPropertyChange(() => this.SelectedDenoisePreset);\r
+\r
+                // Show / Hide the Custom Control\r
+                this.ShowDenoiseCustom = this.CurrentTask.Denoise == Denoise.hqdn3d && this.CurrentTask.DenoisePreset == DenoisePreset.Custom;\r
+                this.NotifyOfPropertyChange(() => this.ShowDenoiseCustom);\r
+                this.NotifyOfPropertyChange(() => this.ShowDenoiseOptions);\r
+                this.NotifyOfPropertyChange(() => this.ShowDenoiseTune);\r
+            }\r
+        }\r
+\r
+        /// <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
+\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
+\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
+\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;\r
+            }\r
+        }\r
+\r
         #endregion\r
 \r
         #region Implemented Interfaces\r
@@ -406,6 +495,8 @@ namespace HandBrakeWPF.ViewModels
                 this.SelectedDetelecine = preset.Task.Detelecine;\r
                 this.Grayscale = preset.Task.Grayscale;\r
                 this.DeblockValue = preset.Task.Deblock == 0 ? 4 : preset.Task.Deblock;\r
+                this.SelectedDenoisePreset = preset.Task.DenoisePreset;\r
+                this.SelectedDenoiseTune = preset.Task.DenoiseTune;\r
 \r
                 // Custom Values\r
                 this.CustomDecomb = preset.Task.CustomDecomb;\r
index ed5993def3a232958826a477a9054879d4104699..70488d5da842f58240d10742c2ef34db57102bc4 100644 (file)
@@ -3,11 +3,14 @@
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"\r
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" \r
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"\r
-             xmlns:Converters="clr-namespace:HandBrakeWPF.Converters" mc:Ignorable="d" >\r
+             xmlns:Converters="clr-namespace:HandBrakeWPF.Converters"\r
+             xmlns:filters="clr-namespace:HandBrakeWPF.Converters.Filters"\r
+             mc:Ignorable="d" >\r
     <UserControl.Resources>\r
         <Converters:BooleanToVisibilityConverter x:Key="boolToVisConverter" />\r
         <Converters:EnumComboConverter x:Key="boolComboConverter" />\r
         <Converters:InverseBooleanConverter x:Key="inverseBooleanConverter" />\r
+        <filters:DenoisePresetConverter x:Key="DenoisePresetConverter" />\r
     </UserControl.Resources>\r
 \r
     <Grid>\r
@@ -45,7 +48,7 @@
                 <ComboBox Width="120" Grid.Row="0" ItemsSource="{Binding DetelecineOptions, Converter={StaticResource boolComboConverter}}" \r
                           SelectedItem="{Binding SelectedDetelecine, Converter={StaticResource boolComboConverter}}" Grid.Column="1" Margin="0,0,0,10"\r
                           HorizontalAlignment="Left"/>\r
-                <TextBox Width="120" Grid.Row="0" Grid.Column="2" Margin="0,0,0,10" Text="{Binding CustomDetelecine}"\r
+                <TextBox Width="120" Grid.Row="0" Grid.Column="2" Margin="0,0,0,10" Text="{Binding CustomDetelecine}" HorizontalAlignment="Left"\r
                          Visibility="{Binding ShowDetelecineCustom, Converter={StaticResource boolToVisConverter}}"/>\r
 \r
                 <TextBlock Text="{Binding DeinterlaceControlText}" Grid.Row="1" Grid.Column="0" Margin="0,0,0,10" VerticalAlignment="Top"/>\r
@@ -53,7 +56,7 @@
                     <StackPanel Orientation="Horizontal">\r
                         <RadioButton GroupName="Interlace" Content="Deinterlace" IsChecked="{Binding IsDeinterlaceMode}" />\r
                         <RadioButton GroupName="Interlace" Content="Decomb" Margin="10,0,0,0" IsChecked="{Binding IsDeinterlaceMode, Converter={StaticResource inverseBooleanConverter}}" />\r
-                    </StackPanel> \r
+                    </StackPanel>\r
 \r
                     <ComboBox Width="120" ItemsSource="{Binding DecombOptions, Converter={StaticResource boolComboConverter}}" HorizontalAlignment="Left"\r
                           SelectedItem="{Binding SelectedDecomb, Converter={StaticResource boolComboConverter}}" Margin="0,0,0,10"\r
                               Visibility="{Binding IsDeinterlaceMode, Converter={StaticResource boolToVisConverter}}" />\r
                 </StackPanel>\r
 \r
-                <TextBox Width="120" Grid.Row="1" Grid.Column="2" Text="{Binding CustomDecomb}" VerticalAlignment="Top"\r
+                <TextBox Width="120" Grid.Row="1" Grid.Column="2" Text="{Binding CustomDecomb}" VerticalAlignment="Top" HorizontalAlignment="Left"\r
                          Visibility="{Binding ShowDecombCustom, Converter={StaticResource boolToVisConverter}}" />\r
 \r
-                <TextBox Width="120" Grid.Row="1" Grid.Column="2" Text="{Binding CustomDeinterlace}" VerticalAlignment="Top"\r
+                <TextBox Width="120" Grid.Row="1" Grid.Column="2" Text="{Binding CustomDeinterlace}" VerticalAlignment="Top" HorizontalAlignment="Left"\r
                          Visibility="{Binding ShowDeinterlaceCustom, Converter={StaticResource boolToVisConverter}}" />\r
 \r
                 <TextBlock Text="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
-                          SelectedItem="{Binding SelectedDenoise, Converter={StaticResource boolComboConverter}}" Grid.Column="1" Margin="0,0,0,10"\r
-                          HorizontalAlignment="Left"/>\r
-                <TextBox Width="120" Grid.Row="3" Grid.Column="2" Margin="0,0,0,10" Text="{Binding CustomDenoise}"\r
-                         Visibility="{Binding ShowDenoiseCustom, Converter={StaticResource boolToVisConverter}}" />\r
+                          SelectedItem="{Binding SelectedDenoise, Converter={StaticResource boolComboConverter}}" Grid.Column="1"\r
+                          HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0,0,0,10" />\r
+\r
+                <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Grid.Row="3" Grid.Column="2" Margin="0,0,0,10" \r
+                            Visibility="{Binding ShowDenoiseOptions, Converter={StaticResource boolToVisConverter}}">\r
+                    <TextBlock Text="Preset: " Margin="5,0,5,0" />\r
+                    <ComboBox SelectedItem="{Binding SelectedDenoisePreset}" \r
+                              MinWidth="100"  HorizontalAlignment="Center" VerticalAlignment="Center">\r
+                        <ComboBox.ItemsSource>\r
+                            <MultiBinding Converter="{StaticResource DenoisePresetConverter}">\r
+                                <Binding Path="DenoisePresets" />\r
+                                <Binding Path="SelectedDenoise" />\r
+                            </MultiBinding>\r
+                        </ComboBox.ItemsSource>\r
+                    </ComboBox>\r
+\r
+                    <StackPanel Orientation="Horizontal" Visibility="{Binding ShowDenoiseTune, Converter={StaticResource boolToVisConverter}}">\r
+                        <TextBlock Text="Tune: " Margin="5,0,5,0" />\r
+                        <ComboBox ItemsSource="{Binding DenoiseTunes}" SelectedItem="{Binding SelectedDenoiseTune}" MinWidth="100"\r
+                          Visibility="{Binding ShowDenoiseTunes, Converter={StaticResource boolToVisConverter}}" VerticalAlignment="Center" />\r
+                    </StackPanel>\r
+\r
+                    <StackPanel Orientation="Horizontal" Visibility="{Binding ShowDenoiseCustom, Converter={StaticResource boolToVisConverter}}">\r
+                        <TextBlock Text="Custom: " Margin="5,0,5,0" />\r
+                        <TextBox Width="120" Margin="0" Text="{Binding CustomDenoise}" VerticalAlignment="Center" />\r
+                    </StackPanel>\r
+\r
+                </StackPanel>\r
 \r
                 <TextBlock Text="Deblock:" Grid.Row="4" Grid.Column="0" Margin="0,0,0,10"/>\r
                 <Slider Width="120" Value="{Binding DeblockValue}" TickPlacement="BottomRight" Minimum="4" Maximum="15" Grid.Row="4" Grid.Column="1" Margin="0,0,0,10"\r
             </Grid>\r
 \r
         </StackPanel>\r
-        \r
+\r
     </Grid>\r
 </UserControl>\r