\r
namespace HandBrakeWPF.Model.Audio\r
{\r
- using System.ComponentModel.DataAnnotations;\r
-\r
using HandBrake.ApplicationServices.Attributes;\r
\r
/// <summary>\r
HBAudioEncoder encoder = HandBrakeEncoderHelpers.GetAudioEncoder(EnumHelper<AudioEncoder>.GetShortName(item.Encoder));
Validate.NotNull(encoder, "Unrecognized audio encoder:" + item.Encoder);
+ if (item.IsPassthru && (item.ScannedTrack.Codec & encoder.Id) == 0)
+ {
+ // We have an unsupported passthru. Rather than let libhb drop the track, switch it to the fallback.
+ encoder = HandBrakeEncoderHelpers.GetAudioEncoder(EnumHelper<AudioEncoder>.GetShortName(job.AllowedPassthruOptions.AudioEncoderFallback));
+ }
+
HBMixdown mixdown = HandBrakeEncoderHelpers.GetMixdown(item.MixDown);
HBRate sampleRate = HandBrakeEncoderHelpers.AudioSampleRates.FirstOrDefault(s => s.Name == item.SampleRate.ToString(CultureInfo.InvariantCulture));
namespace HandBrakeWPF.Services.Encode.Model.Models
{
- using System.ComponentModel.DataAnnotations;
-
using HandBrake.ApplicationServices.Attributes;
/// <summary>
using System.ComponentModel;
using System.Globalization;
using System.Linq;
+ using System.Security;
using HandBrake.ApplicationServices.Interop;
using HandBrake.ApplicationServices.Interop.Model;
/// <param name="track">
/// The Behavior track
/// </param>
- public AudioTrack(AudioBehaviourTrack track)
- {
+ /// <param name="sourceTrack">
+ /// The source track we are dealing with.
+ /// </param>
+ /// <param name="fallback">
+ /// An encoder to fall back to.
+ /// </param>
+ public AudioTrack(AudioBehaviourTrack track, Audio sourceTrack, AudioEncoder fallback)
+ {
+ AudioEncoder chosenEncoder = track.Encoder;
+ HBAudioEncoder encoderInfo = HandBrakeEncoderHelpers.GetAudioEncoder(EnumHelper<AudioEncoder>.GetShortName(track.Encoder));
+ if (track.IsPassthru && (sourceTrack.Codec & encoderInfo.Id) == 0)
+ {
+ chosenEncoder = fallback;
+ }
+
+ this.scannedTrack = sourceTrack;
this.drc = track.DRC;
- this.encoder = track.Encoder;
+ this.encoder = chosenEncoder;
this.gain = track.Gain;
this.mixDown = track.MixDown != null ? track.MixDown.ShortName : "dpl2";
this.sampleRate = track.SampleRate;
- this.scannedTrack = new Audio();
this.encoderRateType = track.EncoderRateType;
this.quality = track.Quality;
this.bitrate = track.Bitrate;
break;\r
case AudioTrackDefaultsMode.FirstTrack:\r
AudioBehaviourTrack template = this.AudioBehaviours.BehaviourTracks.FirstOrDefault();\r
- this.Task.AudioTracks.Add(template != null ? new AudioTrack(template) { ScannedTrack = track } : new AudioTrack { ScannedTrack = track });\r
+ this.Task.AudioTracks.Add(template != null ? new AudioTrack(template, track, this.Task.AllowedPassthruOptions.AudioEncoderFallback) : new AudioTrack { ScannedTrack = track });\r
break;\r
case AudioTrackDefaultsMode.AllTracks:\r
foreach (AudioBehaviourTrack tmpl in this.AudioBehaviours.BehaviourTracks)\r
{\r
- this.Task.AudioTracks.Add(tmpl != null ? new AudioTrack(tmpl) { ScannedTrack = track } : new AudioTrack { ScannedTrack = track });\r
+ this.Task.AudioTracks.Add(tmpl != null ? new AudioTrack(tmpl, track, this.Task.AllowedPassthruOptions.AudioEncoderFallback) : new AudioTrack { ScannedTrack = track });\r
}\r
\r
break;\r
// Step 3, Setup the tracks from the preset\r
foreach (AudioBehaviourTrack track in this.AudioBehaviours.BehaviourTracks)\r
{\r
- this.Task.AudioTracks.Add(new AudioTrack(track) { ScannedTrack = this.GetPreferredAudioTrack() });\r
+ this.Task.AudioTracks.Add(new AudioTrack(track, this.GetPreferredAudioTrack(), this.Task.AllowedPassthruOptions.AudioEncoderFallback));\r
}\r
\r
// Step 4, Handle the default selection behaviour.\r