diff options
author | dynaflash <[email protected]> | 2011-07-19 15:28:24 +0000 |
---|---|---|
committer | dynaflash <[email protected]> | 2011-07-19 15:28:24 +0000 |
commit | 4c30ccadee5199d8c9bd0a4c4d38b50216cac409 (patch) | |
tree | c83e531d15b128b5907ef36ad0083558a50383e2 /macosx | |
parent | af8c57cdd80095f433a25b59194a7d16c9c70d36 (diff) |
MacGUI: Consolidate passthrough mixdowns.
- There's no need for one passthrough mixdown per passthrough codec.
- When using passthru, mixdown is set to "None".
- Patch by Rodeo ... Thanks!
- Fix a bug where we would sometimes attempt to modify a non-mutable NSDictionary, causing a crash.
- Fix by blindjimmy ... Thanks!
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@4121 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'macosx')
-rw-r--r-- | macosx/Controller.m | 3 | ||||
-rw-r--r-- | macosx/HBAudio.m | 27 | ||||
-rw-r--r-- | macosx/HBAudioController.m | 19 |
3 files changed, 23 insertions, 26 deletions
diff --git a/macosx/Controller.m b/macosx/Controller.m index d47adde10..484ab3865 100644 --- a/macosx/Controller.m +++ b/macosx/Controller.m @@ -4520,9 +4520,6 @@ bool one_burned = FALSE; [fVidEncoderPopUp selectItemAtIndex:0]; [self videoEncoderPopUpChanged:nil]; - /* changing the format may mean that we can / can't offer mono or 6ch, */ - /* so call audioTrackPopUpChanged for both audio tracks to update the mixdown popups */ - /* We call the method to properly enable/disable turbo 2 pass */ [self twoPassCheckboxChanged: sender]; /* We call method method to change UI to reflect whether a preset is used or not*/ diff --git a/macosx/HBAudio.m b/macosx/HBAudio.m index 706e8303b..d5169d11d 100644 --- a/macosx/HBAudio.m +++ b/macosx/HBAudio.m @@ -151,16 +151,8 @@ static NSMutableArray *masterBitRateArray = nil; masterMixdownArray = [[NSMutableArray alloc] init]; // knowingly leaked [masterMixdownArray addObject: [NSDictionary dictionaryWithObjectsAndKeys: - NSLocalizedString(@"AC3 Passthru", @"AC3 Passthru"), keyAudioMixdownName, - [NSNumber numberWithInt: HB_ACODEC_AC3_PASS], keyAudioMixdown, - nil]]; - [masterMixdownArray addObject: [NSDictionary dictionaryWithObjectsAndKeys: - NSLocalizedString(@"DTS Passthru", @"DTS Passthru"), keyAudioMixdownName, - [NSNumber numberWithInt: HB_ACODEC_DCA_PASS], keyAudioMixdown, - nil]]; - [masterMixdownArray addObject: [NSDictionary dictionaryWithObjectsAndKeys: - NSLocalizedString(@"DTS-HD Passthru", @"DTS-HD Passthru"), keyAudioMixdownName, - [NSNumber numberWithInt: HB_ACODEC_DCA_HD_PASS], keyAudioMixdown, + NSLocalizedString(@"None", @"None"), keyAudioMixdownName, + [NSNumber numberWithInt: 0], keyAudioMixdown, nil]]; for (i = 0; i < hb_audio_mixdowns_count; i++) { @@ -290,13 +282,13 @@ static NSMutableArray *masterBitRateArray = nil; // Basically with the way the mixdowns are stored, the assumption from the libhb point of view // currently is that all mixdowns from the best down to mono are supported. - if (currentMixdown <= theBestMixdown) + if (currentMixdown && currentMixdown <= theBestMixdown) { shouldAdd = YES; } - else if (0 == theBestMixdown && codecCodec == currentMixdown) + else if (0 == currentMixdown && (codecCodec & HB_ACODEC_PASS_FLAG)) { - // 0 means passthrough, add the current mixdown if it matches the passthrough codec + // "None" mixdown (passthru) shouldAdd = YES; } else @@ -310,12 +302,6 @@ static NSMutableArray *masterBitRateArray = nil; } } - if (0 == theDefaultMixdown) - { - // a mixdown of 0 means passthrough - theDefaultMixdown = codecCodec; - } - if (![self enabled]) { permittedMixdowns = nil; @@ -638,8 +624,9 @@ static NSMutableArray *masterBitRateArray = nil; if (retval) { int myMixdown = [[[self mixdown] objectForKey: keyAudioMixdown] intValue]; - if (myMixdown & HB_ACODEC_PASS_FLAG) + if (0 == myMixdown) { + // "None" mixdown (passthru) retval = NO; } } diff --git a/macosx/HBAudioController.m b/macosx/HBAudioController.m index cab0a3df0..c350a80ac 100644 --- a/macosx/HBAudioController.m +++ b/macosx/HBAudioController.m @@ -280,6 +280,9 @@ NSString *HBMixdownChangedNotification = @"HBMixdownChangedNotification"; while (nil != (dict = [enumerator nextObject])) { + // copy the dictionary since we may need to alter it + dict = [NSMutableDictionary dictionaryWithDictionary:dict]; + if ([self countOfAudioArray] < maximumNumberOfAllowedAudioTracks) { BOOL fallenBack = NO; @@ -288,19 +291,20 @@ NSString *HBMixdownChangedNotification = @"HBMixdownChangedNotification"; [self insertObject: newAudio inAudioArrayAtIndex: [self countOfAudioArray]]; [newAudio setVideoContainerTag: [self videoContainerTag]]; [newAudio setTrackFromIndex: trackIndex]; + key = [dict objectForKey: @"AudioEncoder"]; if (0 == aType && [[NSUserDefaults standardUserDefaults] boolForKey: @"UseCoreAudio"] && [key isEqualToString: @"AAC (faac)"]) { - key = @"AAC (CoreAudio)"; + [dict setObject: @"AAC (CoreAudio)" forKey: @"AudioEncoder"]; } if ([[NSUserDefaults standardUserDefaults] boolForKey: @"AC3PassthruDefaultsToAC3"] && [key isEqualToString: @"AC3 Passthru"]) { if (![newAudio setCodecFromName: key]) { - key = @"AC3"; + [dict setObject: @"AC3" forKey: @"AudioEncoder"]; fallenBack = YES; } } @@ -316,9 +320,18 @@ NSString *HBMixdownChangedNotification = @"HBMixdownChangedNotification"; [dict setObject:[NSNumber numberWithFloat:0.0] forKey:@"AudioTrackGainSlider"]; } + // map legacy passthru mixdowns + key = [dict objectForKey: @"AudioMixdown"]; + if ([key isEqualToString: @"AC3 Passthru"] || + [key isEqualToString: @"DTS Passthru"] || + [key isEqualToString: @"DTS-HD Passthru"]) + { + [dict setObject: @"None" forKey: @"AudioMixdown"]; + } + // If our preset wants us to support a codec that the track does not support, instead // of changing the codec we remove the audio instead. - if ([newAudio setCodecFromName: key]) + if ([newAudio setCodecFromName: [dict objectForKey: @"AudioEncoder"]]) { [newAudio setMixdownFromName: [dict objectForKey: @"AudioMixdown"]]; [newAudio setSampleRateFromName: [dict objectForKey: @"AudioSamplerate"]]; |