From 4d619807beefecf51a32393fe8a787e4e08e0867 Mon Sep 17 00:00:00 2001 From: sr55 Date: Sun, 29 Oct 2017 21:47:28 +0000 Subject: [PATCH] WinGui: Improve the behaviour of the quality slider when changing video encoder. It now updates correctly. By default it will not change value unless out of bounds. at which point it'll choose the mid-point as a default and the user can adjust as necessary. --- .../HandBrakeWPF/ViewModels/VideoViewModel.cs | 59 +++++++++++-------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/win/CS/HandBrakeWPF/ViewModels/VideoViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/VideoViewModel.cs index 467d275c7..2c1df3fdb 100644 --- a/win/CS/HandBrakeWPF/ViewModels/VideoViewModel.cs +++ b/win/CS/HandBrakeWPF/ViewModels/VideoViewModel.cs @@ -506,11 +506,23 @@ namespace HandBrakeWPF.ViewModels this.Task.VideoEncoder = value; this.NotifyOfPropertyChange(() => this.SelectedVideoEncoder); - HandleEncoderChange(this.Task.VideoEncoder); + this.HandleEncoderChange(this.Task.VideoEncoder); + this.HandleRFChange(); } } } + private void HandleRFChange() + { + double displayRF = this.DisplayRF; + if (displayRF > this.QualityMax || displayRF < this.QualityMin) + { + displayRF = this.qualityMax / 2; + } + + this.SetRF(displayRF); + } + /// /// Gets or sets a value indicating whether ShowPeakFramerate. /// @@ -923,8 +935,6 @@ namespace HandBrakeWPF.ViewModels this.ShowPeakFramerate = true; break; } - - this.SetRF(preset.Task.Quality); this.TwoPass = preset.Task.TwoPass; this.TurboFirstPass = preset.Task.TurboFirstPass; @@ -933,29 +943,28 @@ namespace HandBrakeWPF.ViewModels this.NotifyOfPropertyChange(() => this.Task); - if (preset.Task != null) - { - this.HandleEncoderChange(preset.Task.VideoEncoder); + this.HandleEncoderChange(preset.Task.VideoEncoder); + this.SetQualitySliderBounds(); + this.SetRF(preset.Task.Quality); - HBVideoEncoder encoder = HandBrakeEncoderHelpers.VideoEncoders.FirstOrDefault(s => s.ShortName == EnumHelper.GetShortName(preset.Task.VideoEncoder)); - if (encoder != null) + HBVideoEncoder encoder = HandBrakeEncoderHelpers.VideoEncoders.FirstOrDefault(s => s.ShortName == EnumHelper.GetShortName(preset.Task.VideoEncoder)); + if (encoder != null) + { + if (preset.Task.VideoEncoder == VideoEncoder.X264 || preset.Task.VideoEncoder == VideoEncoder.X264_10 + || preset.Task.VideoEncoder == VideoEncoder.X265 || preset.Task.VideoEncoder == VideoEncoder.X265_10 || preset.Task.VideoEncoder == VideoEncoder.X265_12 + || preset.Task.VideoEncoder == VideoEncoder.QuickSync || preset.Task.VideoEncoder == VideoEncoder.QuickSyncH265 || preset.Task.VideoEncoder == VideoEncoder.QuickSyncH26510b) { - if (preset.Task.VideoEncoder == VideoEncoder.X264 || preset.Task.VideoEncoder == VideoEncoder.X264_10 - || preset.Task.VideoEncoder == VideoEncoder.X265 || preset.Task.VideoEncoder == VideoEncoder.X265_10 || preset.Task.VideoEncoder == VideoEncoder.X265_12 - || preset.Task.VideoEncoder == VideoEncoder.QuickSync || preset.Task.VideoEncoder == VideoEncoder.QuickSyncH265 || preset.Task.VideoEncoder == VideoEncoder.QuickSyncH26510b) - { - this.VideoLevel = preset.Task.VideoLevel != null ? preset.Task.VideoLevel.Clone() : this.VideoLevels.FirstOrDefault(); - this.VideoProfile = preset.Task.VideoProfile != null ? preset.Task.VideoProfile.Clone() : this.VideoProfiles.FirstOrDefault(); - this.VideoPresetValue = preset.Task.VideoPreset != null ? this.VideoPresets.IndexOf(preset.Task.VideoPreset) : 0; - this.FastDecode = preset.Task.VideoTunes != null && preset.Task.VideoTunes.Contains(VideoTune.FastDecode); - this.VideoTune = (preset.Task.VideoTunes != null && preset.Task.VideoTunes.Any() ? preset.Task.VideoTunes.FirstOrDefault(t => !Equals(t, VideoTune.FastDecode)) : this.VideoTunes.FirstOrDefault()) - ?? VideoTune.None; - } + this.VideoLevel = preset.Task.VideoLevel != null ? preset.Task.VideoLevel.Clone() : this.VideoLevels.FirstOrDefault(); + this.VideoProfile = preset.Task.VideoProfile != null ? preset.Task.VideoProfile.Clone() : this.VideoProfiles.FirstOrDefault(); + this.VideoPresetValue = preset.Task.VideoPreset != null ? this.VideoPresets.IndexOf(preset.Task.VideoPreset) : 0; + this.FastDecode = preset.Task.VideoTunes != null && preset.Task.VideoTunes.Contains(VideoTune.FastDecode); + this.VideoTune = (preset.Task.VideoTunes != null && preset.Task.VideoTunes.Any() ? preset.Task.VideoTunes.FirstOrDefault(t => !Equals(t, VideoTune.FastDecode)) : this.VideoTunes.FirstOrDefault()) + ?? VideoTune.None; } - - this.ExtraArguments = preset.Task.ExtraAdvancedArguments; - this.UseAdvancedTab = this.IsAdvancedTabOptionEnabled && preset.Task.ShowAdvancedTab; } + + this.ExtraArguments = preset.Task.ExtraAdvancedArguments; + this.UseAdvancedTab = this.IsAdvancedTabOptionEnabled && preset.Task.ShowAdvancedTab; } /// @@ -967,6 +976,7 @@ namespace HandBrakeWPF.ViewModels public void UpdateTask(EncodeTask task) { this.Task = task; + this.SetQualitySliderBounds(); this.SetRF(task.Quality); this.ShowPeakFramerate = this.IsPeakFramerate; @@ -1236,9 +1246,8 @@ namespace HandBrakeWPF.ViewModels /// private void SetRF(double? quality) { - double cqStep = userSettingService.GetUserSetting(UserSettingConstants.X264Step); + double cqStep = this.userSettingService.GetUserSetting(UserSettingConstants.X264Step); double rfValue = 0; - this.SetQualitySliderBounds(); switch (this.SelectedVideoEncoder) { case VideoEncoder.FFMpeg: @@ -1420,7 +1429,7 @@ namespace HandBrakeWPF.ViewModels this.NotifyOfPropertyChange(() => SelectedFramerate); this.UseAdvancedTab = false; } - + // Cleanup Extra Arguments // Load the cached arguments. Saves the user from resetting when switching encoders. string result; -- 2.40.0