WinGui: Fix Passthru fallback behaviour. If a specific passthru isn't possible. it will now fallback to the Passthru format encoder first, before using the fallback encoder.

This commit is contained in:
sr55 2022-09-29 21:35:19 +01:00
parent 8bde0be0a5
commit 3047c824c0
No known key found for this signature in database
GPG Key ID: 99C970F83E86C84B

View File

@ -92,34 +92,26 @@ namespace HandBrakeWPF.Services.Encode.Model.Models
public AudioTrack(AudioBehaviourTrack track, Audio sourceTrack, IList<HBAudioEncoder> passthruEncoders, HBAudioEncoder fallbackEncoder, OutputFormat container)
{
HBAudioEncoder chosenEncoder = track.Encoder;
if (track.IsPassthru && (sourceTrack.Codec & chosenEncoder.Id) == 0)
HBAudioEncoder validatedEncoder = track.Encoder;
if (track.IsPassthru)
{
chosenEncoder = fallbackEncoder;
int format = HandBrakeEncoderHelpers.GetContainer(EnumHelper<OutputFormat>.GetShortName(container)).Id;
int copyMask = checked((int)HandBrakeEncoderHelpers.BuildCopyMask(passthruEncoders ?? new List<HBAudioEncoder>()));
validatedEncoder = HandBrakeEncoderHelpers.GetAutoPassthruEncoder(sourceTrack.Codec, copyMask, fallbackEncoder.Id, format);
}
if (track.IsPassthru && chosenEncoder.ShortName == HBAudioEncoder.Passthru)
{
if (passthruEncoders != null)
{
int format = HandBrakeEncoderHelpers.GetContainer(EnumHelper<OutputFormat>.GetShortName(container)).Id;
int copyMask = checked((int)HandBrakeEncoderHelpers.BuildCopyMask(passthruEncoders));
HBAudioEncoder autoPassthruEncoderOption = HandBrakeEncoderHelpers.GetAutoPassthruEncoder(sourceTrack.Codec, copyMask, fallbackEncoder.Id, format);
chosenEncoder = autoPassthruEncoderOption;
}
}
this.scannedTrack = sourceTrack;
this.drc = track.DRC;
this.encoder = chosenEncoder;
this.encoder = validatedEncoder;
this.gain = track.Gain;
this.mixDown = track.MixDown != null ? track.MixDown.ShortName : "dpl2";
// If the mixdown isn't supported, downgrade it.
if (track.IsPassthru && track.MixDown != null && chosenEncoder != null && !HandBrakeEncoderHelpers.MixdownIsSupported(track.MixDown, chosenEncoder, sourceTrack.ChannelLayout))
if (track.IsPassthru && track.MixDown != null && validatedEncoder != null && !HandBrakeEncoderHelpers.MixdownIsSupported(track.MixDown, validatedEncoder, sourceTrack.ChannelLayout))
{
HBMixdown changedMixdown = HandBrakeEncoderHelpers.GetDefaultMixdown(chosenEncoder, (ulong)sourceTrack.ChannelLayout);
HBMixdown changedMixdown = HandBrakeEncoderHelpers.GetDefaultMixdown(validatedEncoder, (ulong)sourceTrack.ChannelLayout);
if (changedMixdown != null)
{
this.mixDown = changedMixdown.ShortName;