]> granicus.if.org Git - handbrake/commitdiff
WinGui: Initial commit supporting separated interlace detection. Not tested yet.
authorsr55 <sr55.hb@outlook.com>
Thu, 10 Mar 2016 20:44:49 +0000 (20:44 +0000)
committerJohn Stebbins <jstebbins.hb@gmail.com>
Fri, 11 Mar 2016 21:14:30 +0000 (14:14 -0700)
win/CS/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj
win/CS/HandBrake.ApplicationServices/Interop/HbLib/hb_filter_ids.cs
win/CS/HandBrake.ApplicationServices/Interop/Json/Presets/HBPreset.cs
win/CS/HandBrake.ApplicationServices/Interop/Model/Encoding/CombDetect.cs [new file with mode: 0644]
win/CS/HandBrakeWPF/Converters/EnumComboConverter.cs
win/CS/HandBrakeWPF/Services/Encode/Factories/EncodeFactory.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
win/CS/HandBrakeWPF/Views/Styles/Styles.xaml

index 60f7a7b9d523344435608ff19275f2628466c5fb..c6fddcfb7356b31f0c326565728c0daaaa3323aa 100644 (file)
     <Compile Include="Interop\Json\Encode\SubtitleTrack.cs" />\r
     <Compile Include="Interop\Json\Encode\Video.cs" />\r
     <Compile Include="Interop\Factories\AnamorphicFactory.cs" />\r
+    <Compile Include="Interop\Model\Encoding\CombDetect.cs" />\r
     <Compile Include="Interop\Model\Encoding\DeinterlaceFilter.cs" />\r
     <Compile Include="Interop\Model\Encoding\HBPresetTune.cs" />\r
     <Compile Include="Properties\AssemblyInfo.cs" />\r
index d4164ede6433c48aa71c119ce4ad4a1ca3c72a4b..76059fe8b7265c444714aa35021b6c803764b967 100644 (file)
@@ -9,23 +9,36 @@ namespace HandBrake.ApplicationServices.Interop.HbLib
 {\r
     public enum hb_filter_ids\r
     {\r
-        HB_FILTER_QSV_PRE = 1, // for QSV - important to have before other filters \r
+        HB_FILTER_INVALID = 0,\r
+        // for QSV - important to have before other filters\r
+        HB_FILTER_FIRST = 1,\r
+        HB_FILTER_QSV_PRE = 1,\r
+\r
         // First, filters that may change the framerate (drop or dup frames)\r
         HB_FILTER_DETELECINE,\r
+        HB_FILTER_COMB_DETECT,\r
         HB_FILTER_DECOMB,\r
         HB_FILTER_DEINTERLACE,\r
         HB_FILTER_VFR,\r
         // Filters that must operate on the original source image are next\r
         HB_FILTER_DEBLOCK,\r
-        HB_FILTER_HQDN3D,\r
+        HB_FILTER_DENOISE,\r
+        HB_FILTER_HQDN3D = HB_FILTER_DENOISE,\r
         HB_FILTER_NLMEANS,\r
         HB_FILTER_RENDER_SUB,\r
         HB_FILTER_CROP_SCALE,\r
-        // Finally filters that don't care what order they are in,\r
-        // except that they must be after the above filters\r
         HB_FILTER_ROTATE,\r
         HB_FILTER_GRAYSCALE,\r
-        HB_FILTER_QSV_POST, // for QSV - important to have as a last one \r
-        HB_FILTER_QSV,  // default MSDK VPP filter \r
+        HB_FILTER_PAD,\r
+\r
+        // Finally filters that don't care what order they are in,\r
+        // except that they must be after the above filters\r
+        HB_FILTER_AVFILTER,\r
+\r
+        // for QSV - important to have as a last one\r
+        HB_FILTER_QSV_POST,\r
+        // default MSDK VPP filter\r
+        HB_FILTER_QSV,\r
+        HB_FILTER_LAST = HB_FILTER_QSV\r
     }\r
 }\r
index 260b559604efa96449ab5c606d2997f3eacf04d3..7e1e94697d8b3bec976ddb6366b6fb21afcfb3fb 100644 (file)
@@ -126,6 +126,16 @@ namespace HandBrake.ApplicationServices.Interop.Json.Presets
         /// </summary>\r
         public string PictureDeinterlaceFilter { get; set; }\r
 \r
+        /// <summary>\r
+        /// Gets or sets the picture comb detect preset.\r
+        /// </summary>\r
+        public string PictureCombDetectPreset { get; set; }\r
+\r
+        /// <summary>\r
+        /// Gets or sets the picture comb detect custom.\r
+        /// </summary>\r
+        public string PictureCombDetectCustom { get; set; }\r
+\r
         /// <summary>\r
         /// Gets or sets the picture deinterlace preset.\r
         /// </summary>\r
diff --git a/win/CS/HandBrake.ApplicationServices/Interop/Model/Encoding/CombDetect.cs b/win/CS/HandBrake.ApplicationServices/Interop/Model/Encoding/CombDetect.cs
new file mode 100644 (file)
index 0000000..d98d0d2
--- /dev/null
@@ -0,0 +1,34 @@
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="CombDetect.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 CombDetect type.
+// </summary>
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrake.ApplicationServices.Interop.Model.Encoding
+{
+    using HandBrake.ApplicationServices.Attributes;
+
+    /// <summary>
+    /// The CombDetect Type.
+    /// </summary>
+    public enum CombDetect
+    {
+        [ShortName("off")]
+        Off,
+
+        [ShortName("custom")]
+        Custom,
+
+        [ShortName("default")]
+        Default,
+
+        [ShortName("permissive")]
+        LessSensitive,
+
+        [ShortName("fast")]
+        Fast
+    }
+}
index b154c4dce610eed5f8d661af71a5c60d642f0d6b..a25cd1100410178fb01090b18899e9328ebcff0f 100644 (file)
@@ -15,7 +15,6 @@ namespace HandBrakeWPF.Converters
     using System;\r
 \r
     using HandBrake.ApplicationServices.Model;\r
-    using HandBrake.ApplicationServices.Utilities;\r
     using HandBrake.ApplicationServices.Interop.Model.Encoding;\r
 \r
     using HandBrakeWPF.Services.Queue.Model;\r
@@ -95,6 +94,10 @@ namespace HandBrakeWPF.Converters
             {\r
                 return EnumHelper<DeinterlaceFilter>.GetEnumDisplayValues(typeof(DeinterlaceFilter));\r
             }\r
+            if (value is IEnumerable<CombDetect>)\r
+            {\r
+                return EnumHelper<CombDetect>.GetEnumDisplayValues(typeof(CombDetect));\r
+            }\r
 \r
             // Single Items\r
             if (targetType == typeof(VideoEncoder) || value.GetType() == typeof(VideoEncoder))\r
@@ -145,6 +148,10 @@ namespace HandBrakeWPF.Converters
             {\r
                 return EnumHelper<DeinterlaceFilter>.GetDisplay((DeinterlaceFilter)value);\r
             }\r
+            if (targetType == typeof(CombDetect) || value.GetType() == typeof(CombDetect))\r
+            {\r
+                return EnumHelper<CombDetect>.GetDisplay((CombDetect)value);\r
+            }\r
 \r
             return null;\r
         }\r
@@ -215,6 +222,10 @@ namespace HandBrakeWPF.Converters
                 return EnumHelper<DeinterlaceFilter>.GetValue(value.ToString());\r
             }\r
 \r
+            if (targetType == typeof(CombDetect) || value.GetType() == typeof(CombDetect))\r
+            {\r
+                return EnumHelper<CombDetect>.GetValue(value.ToString());\r
+            }\r
             return null;\r
         }\r
     }\r
index 6304c4af3af9141ef3833ef7c6298295345dd031..5167e72180bb0b00146e1b2bc338d2026f1a798a 100644 (file)
@@ -435,6 +435,19 @@ namespace HandBrakeWPF.Services.Encode.Factories
                 filter.FilterList.Add(filterItem);
             }
 
+            if (job.DeinterlaceFilter == DeinterlaceFilter.Decomb || job.DeinterlaceFilter == DeinterlaceFilter.Yadif)
+            {
+                if (job.CombDetect != CombDetect.Off)
+                {
+                    IntPtr settingsPtr = HBFunctions.hb_generate_filter_settings_json((int)hb_filter_ids.HB_FILTER_COMB_DETECT, EnumHelper<CombDetect>.GetShortName(job.CombDetect), null, job.CustomCombDetect);
+                    string unparsedJson = Marshal.PtrToStringAnsi(settingsPtr);
+                    JToken settings = JObject.Parse(unparsedJson);
+
+                    Filter filterItem = new Filter { ID = (int)hb_filter_ids.HB_FILTER_COMB_DETECT, Settings = settings };
+                    filter.FilterList.Add(filterItem);
+                }    
+            }
+
             // Denoise
             if (job.Denoise != Denoise.Off)
             {
index 0ae588bc7ecb2787aee88b9357fc2a0eee0ea62e..71af5cc0d2080c5f64967738b23f04b0a9b7dfd9 100644 (file)
@@ -297,11 +297,21 @@ namespace HandBrakeWPF.Services.Encode.Model
         /// </summary>
         public Decomb Decomb { get; set; }
 
+        /// <summary>
+        /// Gets or sets the comb detect.
+        /// </summary>
+        public CombDetect CombDetect { get; set; }
+
         /// <summary>
         /// Gets or sets CustomDecomb.
         /// </summary>
         public string CustomDecomb { get; set; }
 
+        /// <summary>
+        /// Gets or sets the custom comb detect.
+        /// </summary>
+        public string CustomCombDetect { get; set; }
+
         /// <summary>
         /// Gets or sets Detelecine.
         /// </summary>
index a92a67adbf1cb21aec503ca449d6775148e116f3..046e51d5ba375926f66eefb6b4e74a07d037da21 100644 (file)
@@ -173,9 +173,35 @@ namespace HandBrakeWPF.Services.Presets.Factories
                 }\r
             }\r
 \r
+            if (preset.Task.DeinterlaceFilter == DeinterlaceFilter.Yadif || preset.Task.DeinterlaceFilter == DeinterlaceFilter.Decomb)\r
+            {\r
+                switch (importedPreset.PictureCombDetectPreset)\r
+                {\r
+                    case "off":\r
+                        preset.Task.CombDetect = CombDetect.Off;\r
+                        break;\r
+                    case "custom":\r
+                        preset.Task.CombDetect = CombDetect.Custom;\r
+                        break;\r
+                    case "default":\r
+                        preset.Task.CombDetect = CombDetect.Default;\r
+                        break;\r
+                    case "permissive":\r
+                        preset.Task.CombDetect = CombDetect.LessSensitive;\r
+                        break;\r
+                    case "fast":\r
+                        preset.Task.CombDetect = CombDetect.Fast;\r
+                        break;\r
+                    default:\r
+                        preset.Task.CombDetect = CombDetect.Off;\r
+                        break;\r
+                }\r
+            }\r
+\r
             preset.Task.CustomDeinterlace = importedPreset.PictureDetelecineCustom;\r
             preset.Task.CustomDenoise = importedPreset.PictureDenoiseCustom;\r
             preset.Task.CustomDetelecine = importedPreset.PictureDetelecineCustom;\r
+            preset.Task.CustomCombDetect = importedPreset.PictureCombDetectCustom;\r
 \r
             switch (importedPreset.PictureDetelecine)\r
             {\r
@@ -579,6 +605,8 @@ namespace HandBrakeWPF.Services.Presets.Factories
             preset.PictureDenoiseTune = EnumHelper<DenoiseTune>.GetShortName(export.Task.DenoiseTune);\r
             preset.PictureDetelecine = EnumHelper<Detelecine>.GetShortName(export.Task.Detelecine);\r
             preset.PictureDetelecineCustom = export.Task.CustomDetelecine;\r
+            preset.PictureCombDetectPreset = EnumHelper<CombDetect>.GetShortName(export.Task.CombDetect);\r
+            preset.PictureCombDetectCustom = export.Task.CustomCombDetect;\r
 \r
             // Video\r
             preset.VideoEncoder = EnumHelper<VideoEncoder>.GetShortName(export.Task.VideoEncoder);\r
index 4dd88f6be6f1dcca3a71f3729e6f64d1c11681bf..7cb50ac3709633d25f5e0e958a7bc70e66a7665e 100644 (file)
@@ -215,6 +215,17 @@ namespace HandBrakeWPF.ViewModels
             }\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
@@ -256,6 +267,48 @@ namespace HandBrakeWPF.ViewModels
             }\r
         }\r
 \r
+        public CombDetect SelectedCombDetectPreset\r
+        {\r
+            get\r
+            {\r
+                return this.CurrentTask.CombDetect;\r
+            }\r
+\r
+            set\r
+            {\r
+                this.CurrentTask.CombDetect = value;\r
+                this.NotifyOfPropertyChange(() => this.SelectedCombDetectPreset);\r
+\r
+                // Show / Hide the Custom Control\r
+                this.NotifyOfPropertyChange(() => this.ShowCombDetectCustom);\r
+            }\r
+        }\r
+\r
+        /// <summary>\r
+        /// Show the CombDetect Custom Box.\r
+        /// </summary>\r
+        public bool ShowCombDetectCustom\r
+        {\r
+            get\r
+            {\r
+                return this.SelectedCombDetectPreset == CombDetect.Custom;\r
+            }\r
+        }\r
+\r
+        public string CustomCombDetect\r
+        {\r
+            get\r
+            {\r
+                return this.CurrentTask.CustomCombDetect;\r
+            }\r
+\r
+            set\r
+            {\r
+                this.CurrentTask.CustomCombDetect = value;\r
+                this.NotifyOfPropertyChange(() => this.CustomCombDetect);\r
+            }\r
+        }\r
+\r
         /// <summary>\r
         /// Gets or sets SelectedDecomb.\r
         /// </summary>\r
index 494adae51f0a3aef8e362d1856ef8cc001c409b9..d40567fccb369af0bcbb7ccf8e93a6318127651d 100644 (file)
@@ -10,7 +10,6 @@
     <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
                          Visibility="{Binding ShowDetelecineCustom, Converter={StaticResource boolToVisConverter}}"/>\r
 \r
                 <!-- Deinterlace -->\r
-                <TextBlock Text="{x:Static Properties:ResourcesUI.FiltersView_Deinterlace}" Grid.Row="1" Grid.Column="0" Margin="0,0,0,10" />\r
-                <StackPanel Grid.Row="1" Grid.Column="1" >\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
 \r
                     <ComboBox Width="120" ItemsSource="{Binding DeinterlaceFilterOptions, Converter={StaticResource boolComboConverter}}" HorizontalAlignment="Left"\r
-                          SelectedItem="{Binding SelectedDeinterlaceFilter, Converter={StaticResource boolComboConverter}}" Margin="0,0,0,10"  />\r
+                          SelectedItem="{Binding SelectedDeinterlaceFilter, Converter={StaticResource boolComboConverter}}"  />\r
                     \r
                 </StackPanel>\r
 \r
-                <StackPanel Orientation="Horizontal" Grid.Row="1" Grid.Column="2">\r
-                    <TextBlock Text="Preset:" VerticalAlignment="Center" Margin="0,0,5,10" Visibility="{Binding IsDeinterlaceDecomb, Converter={StaticResource boolToVisConverter}}"  />\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}}" Margin="0,0,0,10"     />\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}}"  />\r
+                    </StackPanel>\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}}" Margin="0,0,0,10"   />\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" />\r
 \r
-                    <TextBlock Text="Custom:" VerticalAlignment="Center" Margin="5,0,5,10" Visibility="{Binding ShowDeinterlaceDecombCustom, Converter={StaticResource boolToVisConverter}}" />\r
-                    <TextBox Width="120" Text="{Binding CustomDecomb, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" HorizontalAlignment="Left"\r
-                             Visibility="{Binding ShowDecombCustom, Converter={StaticResource boolToVisConverter}}" Margin="0,0,0,10"  />\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" />\r
+                    </StackPanel>\r
 \r
-                    <TextBox Width="120" Text="{Binding CustomDeinterlace, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" HorizontalAlignment="Left"\r
-                             Visibility="{Binding ShowDeinterlaceCustom, Converter={StaticResource boolToVisConverter}}" Margin="0,0,0,10"  />\r
-                </StackPanel>\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}}"\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"  />\r
+                </Grid>\r
 \r
               \r
 \r
 \r
                     <StackPanel Orientation="Horizontal" Visibility="{Binding ShowDenoiseCustom, Converter={StaticResource boolToVisConverter}}">\r
                         <TextBlock Text="{x:Static Properties:ResourcesUI.FiltersView_Custom}" Margin="5,0,5,0" />\r
-                        <TextBox Width="120" Margin="0" Text="{Binding CustomDenoise, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" />\r
+                        <TextBox Width="120" Margin="0" Text="{Binding CustomDenoise, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" MinHeight="22" />\r
                     </StackPanel>\r
 \r
                 </StackPanel>\r
index 2478190006aa4ee2d662f00fa0ad8044e9a347f6..3b4b0eeb9e1ad19b5601308a102ebd4f6f951f22 100644 (file)
     <Style TargetType="{x:Type TextBlock}">\r
         <Setter Property="VerticalAlignment" Value="Center"/>\r
     </Style>\r
+    \r
+    <Style TargetType="{x:Type TextBox}">\r
+        <Setter Property="VerticalContentAlignment" Value="Center"/>\r
+    </Style>\r
 \r
     <Style TargetType="{x:Type Button}">\r
         <Setter Property="MinHeight" Value="22"/>\r