/// <summary> /// Trigger a Notify Property Changed on the Task to force various UI elements to update. /// </summary> public void RefreshTask(OutputFormat format) { this.NotifyOfPropertyChange(() => this.Task); // Trigger UI Refresh if (format == OutputFormat.Mp4) { foreach (AudioTrack track in this.Task.AudioTracks.Where(track => track.Encoder == AudioEncoder.ffflac || track.Encoder == AudioEncoder.Vorbis)) { track.Encoder = AudioEncoder.ffaac; } } if (format == OutputFormat.WebM) { foreach (AudioTrack track in this.Task.AudioTracks.Where(track => track.Encoder != AudioEncoder.Vorbis && track.Encoder != AudioEncoder.Opus)) { track.Encoder = AudioEncoder.Vorbis; } } this.AudioDefaultsViewModel.RefreshTask(format); }
/// <summary> /// Gets a list of audio encoders OR returns the string name of an encoder depending on the input. /// </summary> /// <param name="values"> /// The values. /// </param> /// <param name="targetType"> /// The target type. /// </param> /// <param name="parameter"> /// The parameter. /// </param> /// <param name="culture"> /// The culture. /// </param> /// <returns> /// IEnumerable AudioEncoder or String encoder name. /// </returns> public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values.Count() >= 2) { List <AudioEncoder> encoders = EnumHelper <AudioEncoder> .GetEnumList().ToList(); OutputFormat outputFormat = OutputFormat.Mp4; if (values[1].GetType() == typeof(OutputFormat)) { outputFormat = (OutputFormat)values[1]; } else { EncodeTask task = values[1] as EncodeTask; if (task != null) { outputFormat = task.OutputFormat; } } encoders.Remove(AudioEncoder.None); // Assume we never want to show this. if (!HandBrakeEncoderHelpers.AudioEncoders.Any(a => a.ShortName.Contains("fdk"))) { encoders.Remove(AudioEncoder.fdkaac); encoders.Remove(AudioEncoder.fdkheaac); } if (!HandBrakeEncoderHelpers.AudioEncoders.Any(a => a.ShortName.Contains("ca_aac"))) { encoders.Remove(AudioEncoder.CaAac); encoders.Remove(AudioEncoder.CaHaac); } if (outputFormat == OutputFormat.Mp4) { encoders.Remove(AudioEncoder.Vorbis); encoders.Remove(AudioEncoder.ffflac); encoders.Remove(AudioEncoder.ffflac24); encoders.Remove(AudioEncoder.FlacPassthru); encoders.Remove(AudioEncoder.Opus); encoders.Remove(AudioEncoder.TrueHDPassthrough); } else if (outputFormat == OutputFormat.WebM) { encoders.RemoveAll(ae => !(ae.Equals(AudioEncoder.Vorbis) || ae.Equals(AudioEncoder.Opus))); } // Hide the Passthru options and show the "None" option if (parameter != null && parameter.ToString() == "True") { encoders.Remove(AudioEncoder.DtsHDPassthrough); encoders.Remove(AudioEncoder.DtsPassthrough); encoders.Remove(AudioEncoder.EAc3Passthrough); encoders.Remove(AudioEncoder.AacPassthru); encoders.Remove(AudioEncoder.Ac3Passthrough); encoders.Remove(AudioEncoder.Mp3Passthru); encoders.Remove(AudioEncoder.Mp2Passthru); encoders.Remove(AudioEncoder.Passthrough); encoders.Remove(AudioEncoder.TrueHDPassthrough); encoders.Remove(AudioEncoder.FlacPassthru); encoders.Add(AudioEncoder.None); } if (values.Length == 3) { encoders.Remove(AudioEncoder.Passthrough); // Auto passthru doesn't make sense on the main window. instead only show supported passthrus. Audio sourceTrack = values[2] as Audio; RemoveIfNotSupported(AudioEncoder.DtsHDPassthrough, sourceTrack, encoders); RemoveIfNotSupported(AudioEncoder.DtsPassthrough, sourceTrack, encoders); RemoveIfNotSupported(AudioEncoder.EAc3Passthrough, sourceTrack, encoders); RemoveIfNotSupported(AudioEncoder.AacPassthru, sourceTrack, encoders); RemoveIfNotSupported(AudioEncoder.Ac3Passthrough, sourceTrack, encoders); RemoveIfNotSupported(AudioEncoder.Mp3Passthru, sourceTrack, encoders); RemoveIfNotSupported(AudioEncoder.TrueHDPassthrough, sourceTrack, encoders); RemoveIfNotSupported(AudioEncoder.FlacPassthru, sourceTrack, encoders); RemoveIfNotSupported(AudioEncoder.Mp2Passthru, sourceTrack, encoders); } return(EnumHelper <AudioEncoder> .GetEnumDisplayValuesSubset(encoders)); } if (values.Any() && values.First() != DependencyProperty.UnsetValue) { return(EnumHelper <AudioEncoder> .GetDisplay((AudioEncoder)values[0])); } return(EnumHelper <AudioEncoder> .GetDisplay(AudioEncoder.ffaac)); }