]> granicus.if.org Git - handbrake/commitdiff
WinGui: Improve the behaviour of the quality slider when changing video encoder....
authorsr55 <sr55.hb@outlook.com>
Sun, 29 Oct 2017 21:47:28 +0000 (21:47 +0000)
committersr55 <sr55.hb@outlook.com>
Sun, 29 Oct 2017 21:47:28 +0000 (21:47 +0000)
win/CS/HandBrakeWPF/ViewModels/VideoViewModel.cs

index 467d275c733453456954dbe53b0c35cf11232e1d..2c1df3fdbad06e4a6625a6fe90f2a4b6c31efb18 100644 (file)
@@ -506,11 +506,23 @@ namespace HandBrakeWPF.ViewModels
 \r
                     this.Task.VideoEncoder = value;\r
                     this.NotifyOfPropertyChange(() => this.SelectedVideoEncoder);\r
-                    HandleEncoderChange(this.Task.VideoEncoder);\r
+                    this.HandleEncoderChange(this.Task.VideoEncoder);\r
+                    this.HandleRFChange();\r
                 }\r
             }\r
         }\r
 \r
+        private void HandleRFChange()\r
+        {\r
+            double displayRF = this.DisplayRF;\r
+            if (displayRF > this.QualityMax || displayRF < this.QualityMin)\r
+            {\r
+                displayRF = this.qualityMax / 2;\r
+            }\r
+\r
+            this.SetRF(displayRF);\r
+        }\r
+\r
         /// <summary>\r
         /// Gets or sets a value indicating whether ShowPeakFramerate.\r
         /// </summary>\r
@@ -923,8 +935,6 @@ namespace HandBrakeWPF.ViewModels
                     this.ShowPeakFramerate = true;\r
                     break;\r
             }\r
-\r
-            this.SetRF(preset.Task.Quality);\r
          \r
             this.TwoPass = preset.Task.TwoPass;\r
             this.TurboFirstPass = preset.Task.TurboFirstPass;\r
@@ -933,29 +943,28 @@ namespace HandBrakeWPF.ViewModels
          \r
             this.NotifyOfPropertyChange(() => this.Task);\r
 \r
-            if (preset.Task != null)\r
-            {\r
-                this.HandleEncoderChange(preset.Task.VideoEncoder);\r
+            this.HandleEncoderChange(preset.Task.VideoEncoder);\r
+            this.SetQualitySliderBounds();\r
+            this.SetRF(preset.Task.Quality);\r
 \r
-                HBVideoEncoder encoder = HandBrakeEncoderHelpers.VideoEncoders.FirstOrDefault(s => s.ShortName == EnumHelper<VideoEncoder>.GetShortName(preset.Task.VideoEncoder));\r
-                if (encoder != null)\r
+            HBVideoEncoder encoder = HandBrakeEncoderHelpers.VideoEncoders.FirstOrDefault(s => s.ShortName == EnumHelper<VideoEncoder>.GetShortName(preset.Task.VideoEncoder));\r
+            if (encoder != null)\r
+            {\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 || preset.Task.VideoEncoder == VideoEncoder.QuickSyncH26510b)\r
                 {\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 || 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
-                        this.VideoPresetValue = preset.Task.VideoPreset != null ? this.VideoPresets.IndexOf(preset.Task.VideoPreset) : 0;\r
-                        this.FastDecode = preset.Task.VideoTunes != null && preset.Task.VideoTunes.Contains(VideoTune.FastDecode);\r
-                        this.VideoTune = (preset.Task.VideoTunes != null && preset.Task.VideoTunes.Any() ? preset.Task.VideoTunes.FirstOrDefault(t => !Equals(t, VideoTune.FastDecode)) : this.VideoTunes.FirstOrDefault())\r
-                                         ?? VideoTune.None;\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
+                    this.VideoPresetValue = preset.Task.VideoPreset != null ? this.VideoPresets.IndexOf(preset.Task.VideoPreset) : 0;\r
+                    this.FastDecode = preset.Task.VideoTunes != null && preset.Task.VideoTunes.Contains(VideoTune.FastDecode);\r
+                    this.VideoTune = (preset.Task.VideoTunes != null && preset.Task.VideoTunes.Any() ? preset.Task.VideoTunes.FirstOrDefault(t => !Equals(t, VideoTune.FastDecode)) : this.VideoTunes.FirstOrDefault())\r
+                                     ?? VideoTune.None;\r
                 }\r
-\r
-                this.ExtraArguments = preset.Task.ExtraAdvancedArguments;\r
-                this.UseAdvancedTab = this.IsAdvancedTabOptionEnabled && preset.Task.ShowAdvancedTab;\r
             }\r
+\r
+            this.ExtraArguments = preset.Task.ExtraAdvancedArguments;\r
+            this.UseAdvancedTab = this.IsAdvancedTabOptionEnabled && preset.Task.ShowAdvancedTab;\r
         }\r
 \r
         /// <summary>\r
@@ -967,6 +976,7 @@ namespace HandBrakeWPF.ViewModels
         public void UpdateTask(EncodeTask task)\r
         {\r
             this.Task = task;\r
+            this.SetQualitySliderBounds();\r
             this.SetRF(task.Quality);\r
 \r
             this.ShowPeakFramerate = this.IsPeakFramerate;\r
@@ -1236,9 +1246,8 @@ namespace HandBrakeWPF.ViewModels
         /// </param>\r
         private void SetRF(double? quality)\r
         {\r
-            double cqStep = userSettingService.GetUserSetting<double>(UserSettingConstants.X264Step);\r
+            double cqStep = this.userSettingService.GetUserSetting<double>(UserSettingConstants.X264Step);\r
             double rfValue = 0;\r
-            this.SetQualitySliderBounds();\r
             switch (this.SelectedVideoEncoder)\r
             {\r
                 case VideoEncoder.FFMpeg:\r
@@ -1420,7 +1429,7 @@ namespace HandBrakeWPF.ViewModels
                 this.NotifyOfPropertyChange(() => SelectedFramerate);\r
                 this.UseAdvancedTab = false;\r
             }\r
-\r
+            \r
             // Cleanup Extra Arguments\r
             // Load the cached arguments. Saves the user from resetting when switching encoders.\r
             string result;\r