namespace HandBrakeWPF.Model.Audio
{
using System.Collections.Generic;
+ using System.ComponentModel;
using System.Globalization;
using System.Linq;
using HandBrake.ApplicationServices.Interop;
private IEnumerable<double> encoderQualityValues;
private AudioEncoderRateType encoderRateType;
private double? quality;
+ private IEnumerable<HBMixdown> mixdowns;
/// <summary>
/// Initializes a new instance of the <see cref="AudioBehaviourTrack"/> class.
this.Bitrate = 160;
this.DRC = 0;
this.EncoderRateType = AudioEncoderRateType.Bitrate;
+
this.SetupLimits();
}
this.sampleRate = track.SampleRate;
this.Quality = track.Quality;
this.encoderRateType = track.EncoderRateType;
+
this.SetupLimits();
}
}
}
+ [JsonIgnore]
+ public IEnumerable<HBMixdown> Mixdowns
+ {
+ get
+ {
+ return this.mixdowns;
+ }
+ }
+
/// <summary>
/// Gets the quality compression values.
/// </summary>
{
this.SetupBitrateLimits();
this.SetupQualityCompressionLimits();
+ this.SetupMixdowns();
}
/// <summary>
this.NotifyOfPropertyChange(() => this.EncoderQualityValues);
}
+ /// <summary>
+ /// Restrict the available mixdowns to those that the enocder actually supports.
+ /// </summary>
+ private void SetupMixdowns()
+ {
+ this.mixdowns = new BindingList<HBMixdown>(HandBrakeEncoderHelpers.Mixdowns.ToList());
+
+ HBAudioEncoder audioEncoder = HandBrakeEncoderHelpers.GetAudioEncoder(EnumHelper<AudioEncoder>.GetShortName(this.Encoder));
+
+ BindingList<HBMixdown> mixdownList = new BindingList<HBMixdown>();
+ foreach (HBMixdown mixdown in HandBrakeEncoderHelpers.Mixdowns)
+ {
+ if (HandBrakeEncoderHelpers.MixdownHasCodecSupport(mixdown, audioEncoder))
+ {
+ mixdownList.Add(mixdown);
+ }
+ }
+
+ this.mixdowns = new BindingList<HBMixdown>(mixdownList);
+ this.NotifyOfPropertyChange(() => this.Mixdowns);
+
+ // If the mixdown isn't supported, downgrade it to the best available.
+ if (!this.Mixdowns.Contains(this.MixDown))
+ {
+ this.MixDown = this.Mixdowns.LastOrDefault();
+ }
+ }
+
/// <summary>
/// Set the default mixdown when the mixdown is null or "none"
/// </summary>
this.SelectedLangaugesToMove = new BindingList<string>();
this.AvailableLanguages = new BindingList<string>();
this.AudioEncoders = EnumHelper<AudioEncoder>.GetEnumList();
- this.Mixdowns = new BindingList<HBMixdown>(HandBrakeEncoderHelpers.Mixdowns.Where(m => m.ShortName != "none").ToList());
this.SampleRates = new ObservableCollection<string> { "Auto" };
foreach (var item in HandBrakeEncoderHelpers.AudioSampleRates)
/// </summary>
public IEnumerable<AudioEncoder> AudioEncoders { get; set; }
- /// <summary>
- /// Gets or sets AudioEncoders.
- /// </summary>
- public IEnumerable<HBMixdown> Mixdowns { get; set; }
-
/// <summary>
/// Gets or sets SampleRates.
/// </summary>
<TextBlock Grid.Row="0" Grid.Column="6" VerticalAlignment="Center" FontWeight="Bold" Text="{x:Static Properties:ResourcesUI.AudioView_Mixdown}"
Visibility="{Binding IsPassthru, Converter={StaticResource boolToVisConverter}, ConverterParameter=true}" />
<ComboBox Grid.Row="0" Grid.Column="7" Height="22" Width="120" Margin="5,0,5,0" HorizontalAlignment="Stretch"
- ItemsSource="{Binding DataContext.Mixdowns, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
+ ItemsSource="{Binding Mixdowns}"
SelectedItem="{Binding MixDown}"
DisplayMemberPath="DisplayName"
Visibility="{Binding IsPassthru, Converter={StaticResource boolToVisConverter}, ConverterParameter=true}" />