/// <summary> /// Initializes a new instance of the <see cref="AdvancedViewModel"/> class. /// </summary> /// <param name="x264ViewModel"> /// The x 264 view model. /// </param> public AdvancedViewModel(IX264ViewModel x264ViewModel) { this.X264ViewModel = x264ViewModel; }
/// <summary> /// The handle encoder change. /// </summary> /// <param name="selectedEncoder"> /// The selected encoder. /// </param> private void HandleEncoderChange(VideoEncoder selectedEncoder) { if (selectedEncoder != VideoEncoder.X264) { this.UseAdvancedTab = false; } HBVideoEncoder encoder = HandBrakeEncoderHelpers.VideoEncoders.FirstOrDefault(s => s.ShortName == EnumHelper <VideoEncoder> .GetShortName(selectedEncoder)); if (encoder != null) { // Setup Profile this.VideoProfiles.Clear(); if (encoder.Profiles != null) { foreach (var item in encoder.Profiles) { this.VideoProfiles.Add(new VideoProfile(item, item)); } this.VideoProfile = this.VideoProfiles.FirstOrDefault(); } else { this.VideoProfile = null; } // Setup Tune this.VideoTunes.Clear(); if (encoder.Tunes != null) { this.VideoTunes.Add(VideoTune.None); foreach (var item in encoder.Tunes) { if (item != VideoTune.FastDecode.ShortName) { this.VideoTunes.Add(new VideoTune(item, item)); } } this.FastDecode = false; this.VideoTune = VideoTune.None; } else { this.FastDecode = false; this.VideoTune = VideoTune.None; } // Setup Levels this.VideoLevels.Clear(); if (encoder.Levels != null) { foreach (var item in encoder.Levels) { this.VideoLevels.Add(new VideoLevel(item, item)); } this.VideoLevel = this.VideoLevels.FirstOrDefault(); } else { this.VideoLevel = VideoLevel.Auto; } // Setup Presets. this.VideoPresets.Clear(); if (encoder.Presets != null) { foreach (var item in encoder.Presets) { this.VideoPresets.Add(new VideoPreset(item, item)); } this.VideoPresetMaxValue = encoder.Presets.Count - 1; int middlePreset = (int)Math.Round((decimal)(this.VideoPresetMaxValue / 2), 0); this.VideoPresetValue = middlePreset; } else { this.VideoPreset = null; } } // Tell the Advanced Panel off the change IX264ViewModel advancedViewModel = IoC.Get <IX264ViewModel>(); advancedViewModel.SetEncoder(this.Task.VideoEncoder); // Update the Quality Slider. Make sure the bounds are up to date with the users settings. this.SetQualitySliderBounds(); // Update control display this.UseAdvancedTab = selectedEncoder != VideoEncoder.QuickSync && selectedEncoder != VideoEncoder.QuickSyncH265 && this.UseAdvancedTab; this.DisplayOptimiseOptions = this.SelectedVideoEncoder == VideoEncoder.X264 || this.SelectedVideoEncoder == VideoEncoder.X264_10 || this.SelectedVideoEncoder == VideoEncoder.X265 || this.SelectedVideoEncoder == VideoEncoder.X265_10 || this.SelectedVideoEncoder == VideoEncoder.X265_12 || this.SelectedVideoEncoder == VideoEncoder.QuickSync || this.SelectedVideoEncoder == VideoEncoder.QuickSyncH265 || this.SelectedVideoEncoder == VideoEncoder.VP8 || this.SelectedVideoEncoder == VideoEncoder.VP9; this.DisplayNonQSVControls = this.SelectedVideoEncoder != VideoEncoder.QuickSync && this.SelectedVideoEncoder != VideoEncoder.QuickSyncH265; this.DisplayTurboFirstPass = selectedEncoder == VideoEncoder.X264 || selectedEncoder == VideoEncoder.X264_10 || selectedEncoder == VideoEncoder.X265 || selectedEncoder == VideoEncoder.X265_10 || selectedEncoder == VideoEncoder.X265_12; this.DisplayTuneControls = SelectedVideoEncoder == VideoEncoder.X264 || SelectedVideoEncoder == VideoEncoder.X264_10 || SelectedVideoEncoder == VideoEncoder.X265 || SelectedVideoEncoder == VideoEncoder.X265_10 || SelectedVideoEncoder == VideoEncoder.X265_12; this.DisplayLevelControl = SelectedVideoEncoder == VideoEncoder.X264 || SelectedVideoEncoder == VideoEncoder.X264_10 || this.SelectedVideoEncoder == VideoEncoder.QuickSync || this.SelectedVideoEncoder == VideoEncoder.QuickSyncH265; this.DisplayProfileControl = this.SelectedVideoEncoder == VideoEncoder.X264 || this.SelectedVideoEncoder == VideoEncoder.X264_10 || this.SelectedVideoEncoder == VideoEncoder.X265 || this.SelectedVideoEncoder == VideoEncoder.X265_10 || this.SelectedVideoEncoder == VideoEncoder.X265_12 || this.SelectedVideoEncoder == VideoEncoder.QuickSync || this.SelectedVideoEncoder == VideoEncoder.QuickSyncH265; // Refresh Display this.NotifyOfPropertyChange(() => this.Rfqp); this.NotifyOfPropertyChange(() => this.IsAdvancedTabOptionEnabled); this.NotifyOfPropertyChange(() => this.HighQualityLabel); // Handle some quicksync specific options. if (selectedEncoder == VideoEncoder.QuickSync || selectedEncoder == VideoEncoder.QuickSyncH265) { this.IsConstantFramerate = true; this.TwoPass = false; this.TurboFirstPass = false; this.Task.Framerate = null; this.NotifyOfPropertyChange(() => SelectedFramerate); this.UseAdvancedTab = false; } }