]> granicus.if.org Git - handbrake/commitdiff
WinGui: Change the default behaviour for the WinGui to automatically use fallback...
authorsr55 <sr55.hb@outlook.com>
Wed, 22 Mar 2017 21:16:21 +0000 (21:16 +0000)
committersr55 <sr55.hb@outlook.com>
Wed, 22 Mar 2017 21:16:21 +0000 (21:16 +0000)
win/CS/HandBrakeWPF/Model/Audio/AudioBehaviourModes.cs
win/CS/HandBrakeWPF/Services/Encode/Factories/EncodeFactory.cs
win/CS/HandBrakeWPF/Services/Encode/Model/Models/AudioEncoder.cs
win/CS/HandBrakeWPF/Services/Encode/Model/Models/AudioTrack.cs
win/CS/HandBrakeWPF/ViewModels/AudioViewModel.cs

index 3a3847b85b9b906d6bc339fc5ca8a70fb7c1f6d5..0977334f6bfc9acf13995b549117d2844c4f01d2 100644 (file)
@@ -9,8 +9,6 @@
 \r
 namespace HandBrakeWPF.Model.Audio\r
 {\r
-    using System.ComponentModel.DataAnnotations;\r
-\r
     using HandBrake.ApplicationServices.Attributes;\r
 \r
     /// <summary>\r
index 30aa9906d58aa9a5eb0dfd4a1a6b8c72e68ad7da..6647b7fdfcb5f16101678574e124903fd50c2c1b 100644 (file)
@@ -348,6 +348,12 @@ namespace HandBrakeWPF.Services.Encode.Factories
                 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));
index 2dd42c190d79c8e50d1d1c48d188c921cc15f993..2d659bd398fa3c0a2df9f7e07d9488fbac2743c7 100644 (file)
@@ -9,8 +9,6 @@
 
 namespace HandBrakeWPF.Services.Encode.Model.Models
 {
-    using System.ComponentModel.DataAnnotations;
-
     using HandBrake.ApplicationServices.Attributes;
 
     /// <summary>
index bf5ea27d48baaee4be55e725f0dca9a6324d787a..6dede959d31799233c2f89575ce2aa3adb24bb1e 100644 (file)
@@ -14,6 +14,7 @@ namespace HandBrakeWPF.Services.Encode.Model.Models
     using System.ComponentModel;
     using System.Globalization;
     using System.Linq;
+    using System.Security;
 
     using HandBrake.ApplicationServices.Interop;
     using HandBrake.ApplicationServices.Interop.Model;
@@ -102,14 +103,27 @@ namespace HandBrakeWPF.Services.Encode.Model.Models
         /// <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;
index 1381fcca0a93e36addecb6a36477362a56ed5ec5..c90c9add35314ee85f5b6f15716b32851db0a20f 100644 (file)
@@ -338,12 +338,12 @@ namespace HandBrakeWPF.ViewModels
                             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
@@ -395,7 +395,7 @@ namespace HandBrakeWPF.ViewModels
             // 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