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
<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
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
/// </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
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
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
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
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
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
<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
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
--- /dev/null
+// --------------------------------------------------------------------------------------------------------------------\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
--- /dev/null
+// --------------------------------------------------------------------------------------------------------------------\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
/// </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
<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
--- /dev/null
+// --------------------------------------------------------------------------------------------------------------------\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
<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
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
{\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
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
/// </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
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
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
<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
<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