summaryrefslogtreecommitdiffstats
path: root/macosx/HBAudio.m
diff options
context:
space:
mode:
Diffstat (limited to 'macosx/HBAudio.m')
-rw-r--r--macosx/HBAudio.m95
1 files changed, 59 insertions, 36 deletions
diff --git a/macosx/HBAudio.m b/macosx/HBAudio.m
index 10522b3d3..6b9c7a558 100644
--- a/macosx/HBAudio.m
+++ b/macosx/HBAudio.m
@@ -274,7 +274,8 @@ static NSMutableArray *masterBitRateArray = nil;
// Select the proper one
if (shouldSetDefault)
{
- [self setMixdown: [permittedMixdowns dictionaryWithObject: [NSNumber numberWithInt: theDefaultMixdown] matchingKey: keyAudioMixdown]];
+ [self setMixdown: [permittedMixdowns dictionaryWithObject: [NSNumber numberWithInt: theDefaultMixdown]
+ matchingKey: keyAudioMixdown]];
}
if (![self mixdown] || ![permittedMixdowns containsObject: [self mixdown]])
@@ -295,7 +296,6 @@ static NSMutableArray *masterBitRateArray = nil;
unsigned int count = [masterBitRateArray count];
int trackInputBitRate = [[[self track] objectForKey: keyAudioInputBitrate] intValue];
- BOOL limitsToTrackInputBitRate = ([[codec objectForKey: keyAudioCodec] intValue] & HB_ACODEC_PASS_FLAG) ? YES : NO;
int theSampleRate = [[[self sampleRate] objectForKey: keyAudioSamplerate] intValue];
if (0 == theSampleRate) // this means Auto
@@ -308,45 +308,46 @@ static NSMutableArray *masterBitRateArray = nil;
hb_get_audio_bitrate_limits(ourCodec, theSampleRate, ourMixdown, &minBitRate, &maxBitRate);
int theDefaultBitRate = hb_get_default_audio_bitrate(ourCodec, theSampleRate, ourMixdown);
- for (unsigned int i = 0; i < count; i++)
- {
- dict = [masterBitRateArray objectAtIndex: i];
- currentBitRate = [[dict objectForKey: keyAudioBitrate] intValue];
-
- // First ensure the bitrate falls within range of the codec
- shouldAdd = (currentBitRate >= minBitRate && currentBitRate <= maxBitRate);
+ BOOL codecIsPassthru = ([[codec objectForKey: keyAudioCodec] intValue] & HB_ACODEC_PASS_FLAG) ? YES : NO;
+ BOOL codecIsLossless = (theDefaultBitRate == -1) ? YES : NO;
- // Now make sure the mixdown is not limiting us to the track input bitrate
- if (shouldAdd && limitsToTrackInputBitRate)
- {
- if (currentBitRate != trackInputBitRate)
- {
- shouldAdd = NO;
- }
- }
-
- if (shouldAdd)
+ if (codecIsPassthru)
+ {
+ NSDictionary *sourceBitRate = [masterBitRateArray dictionaryWithObject: [NSNumber numberWithInt: trackInputBitRate]
+ matchingKey: keyAudioBitrate];
+ if (!sourceBitRate)
{
- [permittedBitRates addObject: dict];
+ // the source bitrate isn't in the master array - create it
+ sourceBitRate = [NSDictionary dictionaryWithObjectsAndKeys:
+ [NSString stringWithFormat: @"%d", trackInputBitRate], keyAudioBitrateName,
+ [NSNumber numberWithInt: trackInputBitRate], keyAudioBitrate,
+ nil];
}
+ [permittedBitRates addObject: sourceBitRate];
}
-
- // There is a situation where we have a mixdown requirement to match the track input bit rate,
- // but it does not fall into the range the codec supports. Therefore, we force it here.
- if (limitsToTrackInputBitRate && 0 == [permittedBitRates count])
+ else if (codecIsLossless)
{
- NSDictionary *missingBitRate = [masterBitRateArray dictionaryWithObject: [NSNumber numberWithInt: trackInputBitRate] matchingKey: keyAudioBitrate];
- if (!missingBitRate)
+ NSDictionary *bitRateNotApplicable = [NSDictionary dictionaryWithObjectsAndKeys:
+ [NSString stringWithString: @"N/A"], keyAudioBitrateName,
+ [NSNumber numberWithInt: -1], keyAudioBitrate,
+ nil];
+ [permittedBitRates addObject: bitRateNotApplicable];
+ }
+ else
+ {
+ for (unsigned int i = 0; i < count; i++)
{
- // We are in an even worse situation where the requested bit rate does not even exist in the underlying
- // library of supported bitrates. Of course since this value is ignored we can freely make a bogus one
- // for the UI just to make the user a little more aware.
- missingBitRate = [NSDictionary dictionaryWithObjectsAndKeys:
- [NSString stringWithFormat: @"%d", trackInputBitRate], keyAudioBitrateName,
- [NSNumber numberWithInt: trackInputBitRate], keyAudioBitrate,
- nil];
+ dict = [masterBitRateArray objectAtIndex: i];
+ currentBitRate = [[dict objectForKey: keyAudioBitrate] intValue];
+
+ // First ensure the bitrate falls within range of the codec
+ shouldAdd = (currentBitRate >= minBitRate && currentBitRate <= maxBitRate);
+
+ if (shouldAdd)
+ {
+ [permittedBitRates addObject: dict];
+ }
}
- [permittedBitRates addObject: missingBitRate];
}
if (![self enabled])
@@ -479,7 +480,8 @@ static NSMutableArray *masterBitRateArray = nil;
- (void) setTrackFromIndex: (int) aValue
{
- [self setTrack: [self.controller.masterTrackArray dictionaryWithObject: [NSNumber numberWithInt: aValue] matchingKey: keyAudioTrackIndex]];
+ [self setTrack: [self.controller.masterTrackArray dictionaryWithObject: [NSNumber numberWithInt: aValue]
+ matchingKey: keyAudioTrackIndex]];
}
// This returns whether it is able to set the actual codec desired.
@@ -594,12 +596,29 @@ static NSMutableArray *masterBitRateArray = nil;
return retval;
}
+- (BOOL) bitrateEnabled
+
+{
+ BOOL retval = [self enabled];
+
+ if (retval)
+ {
+ int myCodecCodec = [[[self codec] objectForKey: keyAudioCodec] intValue];
+ int myCodecDefaultBitrate = hb_get_default_audio_bitrate(myCodecCodec, 0, 0);
+ if (myCodecDefaultBitrate < 0)
+ {
+ retval = NO;
+ }
+ }
+ return retval;
+}
+
- (BOOL) AC3Enabled
{
BOOL retval = [self enabled];
- if ( retval)
+ if (retval)
{
int myTrackCodec = [[[self track] objectForKey: keyAudioInputCodec] intValue];
int myCodecCodec = [[[self codec] objectForKey: keyAudioCodec] intValue];
@@ -644,6 +663,10 @@ static NSMutableArray *masterBitRateArray = nil;
{
retval = [NSSet setWithObjects: @"track", @"codec", nil];
}
+ else if ([key isEqualToString: @"bitrateEnabled"])
+ {
+ retval = [NSSet setWithObjects: @"track", @"codec", nil];
+ }
else if ([key isEqualToString: @"mixdownEnabled"])
{
retval = [NSSet setWithObjects: @"track", @"mixdown", nil];