]> granicus.if.org Git - handbrake/commitdiff
MacGui: make it possible to set a audio defaults track settings when the selected...
authorDamiano Galassi <damiog@gmail.com>
Sat, 29 Oct 2016 16:48:07 +0000 (18:48 +0200)
committerDamiano Galassi <damiog@gmail.com>
Sat, 29 Oct 2016 16:48:07 +0000 (18:48 +0200)
macosx/HBAudioTrackPreset.m

index 0e2e66a4cb0f7c71dce3fdef7aa1e37dcc98758c..9d785744bc6a95c3378cb6828b8b15c3dcea3143 100644 (file)
@@ -13,6 +13,7 @@
 @interface HBAudioTrackPreset ()
 
 @property (nonatomic, readwrite) int container;
+@property (nonatomic, readwrite) int fallbackEncoder;
 
 @end
 
@@ -25,6 +26,7 @@
     {
         // defaults settings
         _encoder = HB_ACODEC_CA_AAC;
+        _fallbackEncoder = HB_ACODEC_INVALID;
         _container = HB_MUX_MKV;
         _sampleRate = 0;
         _bitRate = 160;
 
     if (!(self.undo.isUndoing || self.undo.isRedoing))
     {
+        [self validateFallbackEncoder];
         [self validateMixdown];
         [self validateSamplerate];
         [self validateBitrate];
     }
 }
 
+- (void)setFallbackEncoder:(int)fallbackEncoder
+{
+    if (fallbackEncoder != _fallbackEncoder)
+    {
+        [[self.undo prepareWithInvocationTarget:self] setFallbackEncoder:_fallbackEncoder];
+    }
+    _fallbackEncoder = fallbackEncoder;
+}
+
 - (void)setMixdown:(int)mixdown
 {
+    if (mixdown == HB_AMIXDOWN_NONE)
+    {
+        mixdown = hb_mixdown_get_default(self.encoderOrFallbackEncoder, 0);
+    }
+
     if (mixdown != _mixdown)
     {
         [[self.undo prepareWithInvocationTarget:self] setMixdown:_mixdown];
 #pragma mark Validation
 
 /**
- *  Validates the mixdown property.
+ If the encoder is a passthru, return its fallback if available
+ to make possible to set the fallback settings.
  */
+- (int)encoderOrFallbackEncoder
+{
+    return (self.fallbackEncoder != HB_ACODEC_INVALID) ? self.fallbackEncoder : self.encoder;
+}
+
+- (void)validateFallbackEncoder
+{
+    if (_encoder & HB_ACODEC_PASS_FLAG)
+    {
+        int fallbackEncoder =  hb_audio_encoder_get_fallback_for_passthru(_encoder);
+        self.fallbackEncoder = (fallbackEncoder != HB_ACODEC_INVALID) ? fallbackEncoder : HB_ACODEC_INVALID;
+    }
+    else
+    {
+        self.fallbackEncoder = HB_ACODEC_INVALID;
+    }
+}
+
 - (void)validateMixdown
 {
-    if (!hb_mixdown_has_codec_support(self.mixdown, self.encoder))
+    if (!hb_mixdown_has_codec_support(self.mixdown, self.encoderOrFallbackEncoder))
     {
-        self.mixdown = hb_mixdown_get_default(self.encoder, 0);
+        self.mixdown = hb_mixdown_get_default(self.encoderOrFallbackEncoder, 0);
     }
 }
 
 - (void)validateSamplerate
 {
-    if (self.encoder & HB_ACODEC_PASS_FLAG)
+    if (self.encoderOrFallbackEncoder & HB_ACODEC_PASS_FLAG)
     {
         self.sampleRate = 0; // Auto (same as source)
     }
     else if (self.sampleRate)
     {
-        self.sampleRate = hb_audio_samplerate_find_closest(self.sampleRate, self.encoder);
+        self.sampleRate = hb_audio_samplerate_find_closest(self.sampleRate, self.encoderOrFallbackEncoder);
     }
 }
 
 - (void)validateBitrate
 {
-    if (self.encoder & HB_ACODEC_PASS_FLAG)
+    if (self.encoderOrFallbackEncoder & HB_ACODEC_PASS_FLAG)
     {
         self.bitRate = -1;
     }
     else if (self.bitRate == -1) // switching from passthru
     {
-        self.bitRate = hb_audio_bitrate_get_default(self.encoder,
+        self.bitRate = hb_audio_bitrate_get_default(self.encoderOrFallbackEncoder,
                                                     self.sampleRate ? self.sampleRate : DEFAULT_SAMPLERATE,
                                                     self.mixdown);
     }
     else
     {
-        self.bitRate = hb_audio_bitrate_get_best(self.encoder, self.bitRate, self.sampleRate, self.mixdown);
+        self.bitRate = hb_audio_bitrate_get_best(self.encoderOrFallbackEncoder, self.bitRate, self.sampleRate, self.mixdown);
     }
 }
 
 {
     BOOL retval = YES;
 
-    int myCodecDefaultBitrate = hb_audio_bitrate_get_default(self.encoder, 0, 0);
+    int myCodecDefaultBitrate = hb_audio_bitrate_get_default(self.encoderOrFallbackEncoder, 0, 0);
     if (myCodecDefaultBitrate < 0)
     {
         retval = NO;
 {
     BOOL retval = YES;
 
-    if (self.encoder & HB_ACODEC_PASS_FLAG)
+    if (self.encoderOrFallbackEncoder & HB_ACODEC_PASS_FLAG)
     {
         retval = NO;
     }
          mixdown != NULL;
          mixdown  = hb_mixdown_get_next(mixdown))
     {
-        if (hb_mixdown_has_codec_support(mixdown->amixdown, self.encoder))
+        if (hb_mixdown_has_codec_support(mixdown->amixdown, self.encoderOrFallbackEncoder))
         {
             [mixdowns addObject:@(mixdown->name)];
         }
          audio_samplerate  = hb_audio_samplerate_get_next(audio_samplerate))
     {
         int rate = audio_samplerate->rate;
-        if (rate == hb_audio_samplerate_find_closest(rate, self.encoder))
+        if (rate == hb_audio_samplerate_find_closest(rate, self.encoderOrFallbackEncoder))
         {
             [sampleRates addObject:@(audio_samplerate->name)];
         }
     int minBitRate = 0;
     int maxBitRate = 0;
 
-    hb_audio_bitrate_get_limits(self.encoder, self.sampleRate, self.mixdown, &minBitRate, &maxBitRate);
+    hb_audio_bitrate_get_limits(self.encoderOrFallbackEncoder, self.sampleRate, self.mixdown, &minBitRate, &maxBitRate);
 
     NSMutableArray<NSString *> *bitRates = [[NSMutableArray alloc] init];
     for (const hb_rate_t *audio_bitrate = hb_audio_bitrate_get_next(NULL);
         [key isEqualToString:@"passThruDisabled"] ||
         [key isEqualToString:@"mixdownEnabled"])
     {
-        retval = [NSSet setWithObjects:@"encoder", nil];
+        retval = [NSSet setWithObjects:@"encoder", @"fallbackEncoder", nil];
     }
     else if ([key isEqualToString:@"mixdowns"])
     {
-        retval = [NSSet setWithObjects:@"encoder", nil];
+        retval = [NSSet setWithObjects:@"encoder", @"fallbackEncoder", nil];
     }
     else if ([key isEqualToString:@"sampleRates"])
     {
-        retval = [NSSet setWithObjects:@"encoder", @"mixdown", nil];
+        retval = [NSSet setWithObjects:@"encoder", @"fallbackEncoder", @"mixdown", nil];
     }
     else if ([key isEqualToString:@"bitRates"])
     {
-        retval = [NSSet setWithObjects:@"encoder", @"mixdown", @"sampleRate", nil];
+        retval = [NSSet setWithObjects:@"encoder", @"fallbackEncoder", @"mixdown", @"sampleRate", nil];
     }
     else
     {
     if (copy)
     {
         copy->_encoder = _encoder;
+        copy->_fallbackEncoder = _fallbackEncoder;
         copy->_mixdown = _mixdown;
         copy->_sampleRate = _sampleRate;
         copy->_bitRate = _bitRate;
 
     decodeInt(_container);
 
+    [self validateFallbackEncoder];
+
     return self;
 }