From cd83dfa87c292664caaaea38a6baa893ec2c0b69 Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Sat, 15 Feb 2025 19:58:03 -0800 Subject: [PATCH] Audio: Unify playback setup of the converter This code was being duplicated across three different playback functions which basically did most of the same things. Signed-off-by: Christopher Snowhill --- Audio/Chain/BufferChain.m | 42 ++++++++++++--------------------------- 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/Audio/Chain/BufferChain.m b/Audio/Chain/BufferChain.m index 688abe2ff..0ba716c0b 100644 --- a/Audio/Chain/BufferChain.m +++ b/Audio/Chain/BufferChain.m @@ -100,18 +100,7 @@ if(![inputNode openWithSource:source]) return NO; - NSDictionary *properties = [inputNode properties]; - - AudioStreamBasicDescription inputFormat = [inputNode nodeFormat]; - uint32_t inputChannelConfig = 0; - if([properties valueForKey:@"channelConfig"]) - inputChannelConfig = [[properties valueForKey:@"channelConfig"] unsignedIntValue]; - - outputFormat.mChannelsPerFrame = inputFormat.mChannelsPerFrame; - outputFormat.mBytesPerFrame = ((outputFormat.mBitsPerChannel + 7) / 8) * outputFormat.mChannelsPerFrame; - outputFormat.mBytesPerPacket = outputFormat.mBytesPerFrame * outputFormat.mFramesPerPacket; - - if(![converterNode setupWithInputFormat:inputFormat withInputConfig:inputChannelConfig outputFormat:outputFormat isLossless:[[properties valueForKey:@"encoding"] isEqualToString:@"lossless"]]) + if(![self initConverter:outputFormat]) return NO; [self initDownmixer]; @@ -133,19 +122,7 @@ if(![inputNode openWithDecoder:[i decoder]]) return NO; - NSDictionary *properties = [inputNode properties]; - - AudioStreamBasicDescription inputFormat = [inputNode nodeFormat]; - uint32_t inputChannelConfig = 0; - if([properties valueForKey:@"channelConfig"]) - inputChannelConfig = [[properties valueForKey:@"channelConfig"] unsignedIntValue]; - - outputFormat.mChannelsPerFrame = inputFormat.mChannelsPerFrame; - outputFormat.mBytesPerFrame = ((outputFormat.mBitsPerChannel + 7) / 8) * outputFormat.mChannelsPerFrame; - outputFormat.mBytesPerPacket = outputFormat.mBytesPerFrame * outputFormat.mFramesPerPacket; - - DLog(@"Input Properties: %@", properties); - if(![converterNode setupWithInputFormat:inputFormat withInputConfig:inputChannelConfig outputFormat:outputFormat isLossless:[[properties objectForKey:@"encoding"] isEqualToString:@"lossless"]]) + if(![self initConverter:outputFormat]) return NO; [self initDownmixer]; @@ -169,6 +146,16 @@ if(![inputNode openWithDecoder:decoder]) return NO; + if(![self initConverter:outputFormat]) + return NO; + [self initDownmixer]; + + [self setRGInfo:rgi]; + + return YES; +} + +- (BOOL)initConverter:(AudioStreamBasicDescription)outputFormat { NSDictionary *properties = [inputNode properties]; DLog(@"Input Properties: %@", properties); @@ -182,11 +169,8 @@ outputFormat.mBytesPerFrame = ((outputFormat.mBitsPerChannel + 7) / 8) * outputFormat.mChannelsPerFrame; outputFormat.mBytesPerPacket = outputFormat.mBytesPerFrame * outputFormat.mFramesPerPacket; - if(![converterNode setupWithInputFormat:inputFormat withInputConfig:inputChannelConfig outputFormat:outputFormat isLossless:[[properties objectForKey:@"encoding"] isEqualToString:@"lossless"]]) + if(![converterNode setupWithInputFormat:inputFormat withInputConfig:inputChannelConfig outputFormat:outputFormat isLossless:[[properties valueForKey:@"encoding"] isEqualToString:@"lossless"]]) return NO; - [self initDownmixer]; - - [self setRGInfo:rgi]; return YES; }