Skip to content

Commit 0bf605d

Browse files
authored
Check for nil channel layout (sbooth#486)
1 parent ce36cb2 commit 0bf605d

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

Sources/CSFBAudioEngine/Encoders/SFBMonkeysAudioEncoder.mm

+1-1
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ - (AVAudioFormat *)processingFormatForSourceFormat:(AVAudioFormat *)sourceFormat
231231
AudioChannelBitmap channelBitmap = 0;
232232
UInt32 propertySize = sizeof(channelBitmap);
233233
AudioChannelLayoutTag layoutTag = sourceFormat.channelLayout.layoutTag;
234-
result = AudioFormatGetProperty(kAudioFormatProperty_BitmapForLayoutTag, sizeof(layoutTag), &layoutTag, &propertySize, &channelBitmap);
234+
OSStatus result = AudioFormatGetProperty(kAudioFormatProperty_BitmapForLayoutTag, sizeof(layoutTag), &layoutTag, &propertySize, &channelBitmap);
235235
if(result == noErr) {
236236
AudioChannelLayout acl = {
237237
.mChannelLayoutTag = kAudioChannelLayoutTag_UseChannelBitmap,

Sources/CSFBAudioEngine/Encoders/SFBWavPackEncoder.m

+16-14
Original file line numberDiff line numberDiff line change
@@ -102,21 +102,23 @@ - (AVAudioFormat *)processingFormatForSourceFormat:(AVAudioFormat *)sourceFormat
102102
// Use WAVFORMATEX channel order
103103
AVAudioChannelLayout *channelLayout = nil;
104104

105-
AudioChannelBitmap channelBitmap = 0;
106-
UInt32 propertySize = sizeof(channelBitmap);
107-
AudioChannelLayoutTag layoutTag = sourceFormat.channelLayout.layoutTag;
108-
OSStatus result = AudioFormatGetProperty(kAudioFormatProperty_BitmapForLayoutTag, sizeof(layoutTag), &layoutTag, &propertySize, &channelBitmap);
109-
if(result == noErr) {
110-
AudioChannelLayout acl = {
111-
.mChannelLayoutTag = kAudioChannelLayoutTag_UseChannelBitmap,
112-
.mChannelBitmap = channelBitmap,
113-
.mNumberChannelDescriptions = 0
114-
};
115-
channelLayout = [[AVAudioChannelLayout alloc] initWithLayout:&acl];
105+
if(sourceFormat.channelLayout != nil) {
106+
AudioChannelBitmap channelBitmap = 0;
107+
UInt32 propertySize = sizeof(channelBitmap);
108+
AudioChannelLayoutTag layoutTag = sourceFormat.channelLayout.layoutTag;
109+
OSStatus result = AudioFormatGetProperty(kAudioFormatProperty_BitmapForLayoutTag, sizeof(layoutTag), &layoutTag, &propertySize, &channelBitmap);
110+
if(result == noErr) {
111+
AudioChannelLayout acl = {
112+
.mChannelLayoutTag = kAudioChannelLayoutTag_UseChannelBitmap,
113+
.mChannelBitmap = channelBitmap,
114+
.mNumberChannelDescriptions = 0
115+
};
116+
channelLayout = [[AVAudioChannelLayout alloc] initWithLayout:&acl];
117+
}
118+
// TODO: Use WavPack channel identities as a fallback?
119+
else
120+
os_log_info(gSFBAudioEncoderLog, "AudioFormatGetProperty(kAudioFormatProperty_BitmapForLayoutTag), layoutTag = %d failed: %d '%{public}.4s'", layoutTag, result, SFBCStringForOSType(result));
116121
}
117-
// TODO: Use WavPack channel identities as a fallback?
118-
else
119-
os_log_info(gSFBAudioEncoderLog, "AudioFormatGetProperty(kAudioFormatProperty_BitmapForLayoutTag), layoutTag = %d failed: %d '%{public}.4s'", layoutTag, result, SFBCStringForOSType(result));
120122

121123
return [[AVAudioFormat alloc] initWithStreamDescription:&streamDescription channelLayout:channelLayout];
122124
}

0 commit comments

Comments
 (0)