]> granicus.if.org Git - handbrake/commitdiff
WinGui: Add support in the UI for QSV 10bit H.265 encoder.
authorsr55 <sr55.hb@outlook.com>
Sun, 5 Mar 2017 19:48:35 +0000 (19:48 +0000)
committersr55 <sr55.hb@outlook.com>
Sun, 5 Mar 2017 19:48:46 +0000 (19:48 +0000)
win/CS/HandBrake.ApplicationServices/Interop/HbLib/NativeConstants.cs
win/CS/HandBrake.ApplicationServices/Interop/Model/Encoding/VideoEncoder.cs
win/CS/HandBrake.ApplicationServices/Utilities/SystemInfo.cs
win/CS/HandBrakeWPF/Converters/Video/VideoEncoderConverter.cs
win/CS/HandBrakeWPF/ViewModels/VideoViewModel.cs

index 787bb7c72e0992faf4b552636ba97d9f9777e976..bc593539f471bcb4cb4c9a633d32306a30094405 100644 (file)
@@ -48,6 +48,7 @@ namespace HandBrake.ApplicationServices.Interop.HbLib
         // VideoEncoders\r
         public const uint HB_VCODEC_QSV_H264 = 0x0000100;\r
         public const uint HB_VCODEC_QSV_H265 = 0x0000200;\r
+        public const uint HB_VCODEC_QSV_H265_10BIT = 0x0000400;\r
         public const uint HB_VCODEC_QSV_MASK = 0x0000F00;\r
 \r
         // Encode state\r
index 5fd693bfb33db0e1e2d88aa88ef545189c74a708..077b9a642cc405f7319a05f123f8b1a2ec413dea 100644 (file)
@@ -30,10 +30,6 @@ namespace HandBrake.ApplicationServices.Interop.Model.Encoding
         [ShortName("qsv_h264")]\r
         QuickSync,\r
 \r
-        [Display(Name = "H.265 (Intel QSV)")]\r
-        [ShortName("qsv_h265")]\r
-        QuickSyncH265,\r
-\r
         [Display(Name = "MPEG-4")]\r
         [ShortName("mpeg4")]\r
         FFMpeg,\r
@@ -58,6 +54,14 @@ namespace HandBrake.ApplicationServices.Interop.Model.Encoding
         [ShortName("x265_10bit")]\r
         X265_10,\r
 \r
+        [Display(Name = "H.265 (Intel QSV)")]\r
+        [ShortName("qsv_h265")]\r
+        QuickSyncH265,\r
+\r
+        [Display(Name = "H.265 10-bit (Intel QSV)")]\r
+        [ShortName("qsv_h265_10bit")]\r
+        QuickSyncH26510b,\r
+\r
         [Display(Name = "VP8")]\r
         [ShortName("VP8")]\r
         VP8,\r
index 8ccf04462ab7cef96768f5c753549a4be4662aa0..8966b5a8f7df490e09b7c69767767c4f44b85fc3 100644 (file)
@@ -74,5 +74,21 @@ namespace HandBrake.ApplicationServices.Utilities
                 }\r
             }\r
         }\r
+\r
+        public static bool IsQsvAvailableH26510bit\r
+        {\r
+            get\r
+            {\r
+                try\r
+                {\r
+                    return (HBFunctions.hb_qsv_available() & NativeConstants.HB_VCODEC_QSV_H265_10BIT) != 0;\r
+                }\r
+                catch (Exception)\r
+                {\r
+                    // Silent failure. Typically this means the dll hasn't been built with --enable-qsv\r
+                    return false;\r
+                }\r
+            }\r
+        }\r
     }\r
 }\r
index d0e7cf556760b5757dad8ede92e77a87d303e853..ca54837b6cf512687b52bb2d6aef87a4ed478fbe 100644 (file)
@@ -84,6 +84,11 @@ namespace HandBrakeWPF.Converters.Video
                 if (!SystemInfo.IsQsvAvailableH265)\r
                 {\r
                     encoders.Remove(VideoEncoder.QuickSyncH265);\r
+                    encoders.Remove(VideoEncoder.QuickSyncH26510b);\r
+                }\r
+                else if (!SystemInfo.IsQsvAvailableH26510bit)\r
+                {\r
+                    encoders.Remove(VideoEncoder.QuickSyncH26510b);\r
                 }\r
 \r
                 return EnumHelper<VideoEncoder>.GetEnumDisplayValuesSubset(encoders);\r
index d3da0f1c0b2f6ba5c72bca83be0627d68400c4e1..2b84f506ae6eb2e1867a7fe07723f27f972293ca 100644 (file)
@@ -343,6 +343,7 @@ namespace HandBrakeWPF.ViewModels
                         break;           \r
                     case VideoEncoder.QuickSync:\r
                     case VideoEncoder.QuickSyncH265:\r
+                    case VideoEncoder.QuickSyncH26510b:\r
                         rfValue = 51.0 - value;\r
                         rfValue = Math.Round(rfValue, 0);\r
                         this.Task.Quality = rfValue;\r
@@ -941,7 +942,7 @@ namespace HandBrakeWPF.ViewModels
                 {\r
                     if (preset.Task.VideoEncoder == VideoEncoder.X264 || preset.Task.VideoEncoder == VideoEncoder.X264_10 \r
                         || preset.Task.VideoEncoder == VideoEncoder.X265 || preset.Task.VideoEncoder == VideoEncoder.X265_10 || preset.Task.VideoEncoder == VideoEncoder.X265_12 \r
-                        || preset.Task.VideoEncoder == VideoEncoder.QuickSync || preset.Task.VideoEncoder == VideoEncoder.QuickSyncH265)\r
+                        || preset.Task.VideoEncoder == VideoEncoder.QuickSync || preset.Task.VideoEncoder == VideoEncoder.QuickSyncH265 || preset.Task.VideoEncoder == VideoEncoder.QuickSyncH26510b)\r
                     {\r
                         this.VideoLevel = preset.Task.VideoLevel != null ? preset.Task.VideoLevel.Clone() : this.VideoLevels.FirstOrDefault();\r
                         this.VideoProfile = preset.Task.VideoProfile != null ? preset.Task.VideoProfile.Clone() : this.VideoProfiles.FirstOrDefault();\r
@@ -1042,6 +1043,7 @@ namespace HandBrakeWPF.ViewModels
                     break;\r
                 case VideoEncoder.QuickSync:\r
                 case VideoEncoder.QuickSyncH265:\r
+                case VideoEncoder.QuickSyncH26510b:\r
                     this.QualityMin = 0;\r
                     this.QualityMax = 51;\r
                     break;\r
@@ -1169,6 +1171,7 @@ namespace HandBrakeWPF.ViewModels
                 case VideoEncoder.X264_10:\r
                 case VideoEncoder.QuickSync:\r
                 case VideoEncoder.QuickSyncH265:\r
+                case VideoEncoder.QuickSyncH26510b:\r
                     if (this.SelectedVideoEncoder == VideoEncoder.QuickSync || this.SelectedVideoEncoder == VideoEncoder.QuickSyncH265)\r
                     {\r
                         cqStep = 1;\r
@@ -1288,31 +1291,32 @@ namespace HandBrakeWPF.ViewModels
             this.SetQualitySliderBounds();\r
 \r
             // Update control display\r
-            this.UseAdvancedTab = selectedEncoder != VideoEncoder.QuickSync && selectedEncoder != VideoEncoder.QuickSyncH265 && this.UseAdvancedTab;\r
+            this.UseAdvancedTab = selectedEncoder != VideoEncoder.QuickSync && selectedEncoder != VideoEncoder.QuickSyncH265 && selectedEncoder != VideoEncoder.QuickSyncH26510b && this.UseAdvancedTab;\r
             this.DisplayOptimiseOptions = this.SelectedVideoEncoder == VideoEncoder.X264 || this.SelectedVideoEncoder == VideoEncoder.X264_10 ||\r
                                           this.SelectedVideoEncoder == VideoEncoder.X265 || this.SelectedVideoEncoder == VideoEncoder.X265_10 || this.SelectedVideoEncoder == VideoEncoder.X265_12 ||\r
-                                          this.SelectedVideoEncoder == VideoEncoder.QuickSync || this.SelectedVideoEncoder == VideoEncoder.QuickSyncH265 ||\r
+                                          this.SelectedVideoEncoder == VideoEncoder.QuickSync || this.SelectedVideoEncoder == VideoEncoder.QuickSyncH265 || this.SelectedVideoEncoder == VideoEncoder.QuickSyncH26510b ||\r
                                           this.SelectedVideoEncoder == VideoEncoder.VP8 || this.SelectedVideoEncoder == VideoEncoder.VP9;\r
-            this.DisplayNonQSVControls = this.SelectedVideoEncoder != VideoEncoder.QuickSync && this.SelectedVideoEncoder != VideoEncoder.QuickSyncH265;\r
+            this.DisplayNonQSVControls = this.SelectedVideoEncoder != VideoEncoder.QuickSync && this.SelectedVideoEncoder != VideoEncoder.QuickSyncH265 && this.SelectedVideoEncoder != VideoEncoder.QuickSyncH26510b;\r
             this.DisplayTurboFirstPass = selectedEncoder == VideoEncoder.X264 || selectedEncoder == VideoEncoder.X264_10 || \r
                                          selectedEncoder == VideoEncoder.X265 || selectedEncoder == VideoEncoder.X265_10 || selectedEncoder == VideoEncoder.X265_12;\r
             this.DisplayTuneControls = SelectedVideoEncoder == VideoEncoder.X264 || SelectedVideoEncoder == VideoEncoder.X264_10 || SelectedVideoEncoder == VideoEncoder.X265 || SelectedVideoEncoder == VideoEncoder.X265_10 || SelectedVideoEncoder == VideoEncoder.X265_12;\r
-            this.DisplayLevelControl = SelectedVideoEncoder == VideoEncoder.X264 || SelectedVideoEncoder == VideoEncoder.X264_10 || this.SelectedVideoEncoder == VideoEncoder.QuickSync || this.SelectedVideoEncoder == VideoEncoder.QuickSyncH265;\r
+            this.DisplayLevelControl = SelectedVideoEncoder == VideoEncoder.X264 || SelectedVideoEncoder == VideoEncoder.X264_10 || this.SelectedVideoEncoder == VideoEncoder.QuickSync || this.SelectedVideoEncoder == VideoEncoder.QuickSyncH265 || this.SelectedVideoEncoder == VideoEncoder.QuickSyncH26510b;\r
             this.DisplayProfileControl = this.SelectedVideoEncoder == VideoEncoder.X264\r
                                          || this.SelectedVideoEncoder == VideoEncoder.X264_10\r
                                          || this.SelectedVideoEncoder == VideoEncoder.X265\r
                                          || this.SelectedVideoEncoder == VideoEncoder.X265_10\r
                                          || this.SelectedVideoEncoder == VideoEncoder.X265_12\r
                                          || this.SelectedVideoEncoder == VideoEncoder.QuickSync\r
-                                         || this.SelectedVideoEncoder == VideoEncoder.QuickSyncH265;\r
-     \r
+                                         || this.SelectedVideoEncoder == VideoEncoder.QuickSyncH265\r
+                                         || this.SelectedVideoEncoder == VideoEncoder.QuickSyncH26510b;\r
+\r
             // Refresh Display\r
             this.NotifyOfPropertyChange(() => this.Rfqp);\r
             this.NotifyOfPropertyChange(() => this.IsAdvancedTabOptionEnabled);\r
             this.NotifyOfPropertyChange(() => this.HighQualityLabel);\r
 \r
             // Handle some quicksync specific options.\r
-            if (selectedEncoder == VideoEncoder.QuickSync || selectedEncoder == VideoEncoder.QuickSyncH265)\r
+            if (selectedEncoder == VideoEncoder.QuickSync || selectedEncoder == VideoEncoder.QuickSyncH265 || selectedEncoder == VideoEncoder.QuickSyncH26510b)\r
             {\r
                 this.IsConstantFramerate = true;\r
                 this.TwoPass = false;\r