| 
														
															@@ -546,7 +546,7 @@ static void *aac_create(obs_data_t *settings, obs_encoder_t *encoder) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	UInt32 rate_control = kAudioCodecBitRateControlMode_Constant; 
														 | 
														
														 | 
														
															 	UInt32 rate_control = kAudioCodecBitRateControlMode_Constant; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	if (obs_data_get_bool(settings, "allow he-aac")) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	if (obs_data_get_bool(settings, "allow he-aac") && ca->channels != 3) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		ca->allowed_formats = &aac_formats; 
														 | 
														
														 | 
														
															 		ca->allowed_formats = &aac_formats; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	} else { 
														 | 
														
														 | 
														
															 	} else { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		ca->allowed_formats = &aac_lc_formats; 
														 | 
														
														 | 
														
															 		ca->allowed_formats = &aac_lc_formats; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -603,9 +603,15 @@ static void *aac_create(obs_data_t *settings, obs_encoder_t *encoder) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	/* 
														 | 
														
														 | 
														
															 	/* 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	 * Fix channel map differences between CoreAudio AAC, FFmpeg, Wav 
														 | 
														
														 | 
														
															 	 * Fix channel map differences between CoreAudio AAC, FFmpeg, Wav 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	 * New channel mappings below assume 4.1, 5.1, 7.1 resp. 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	 * New channel mappings below assume 2.1, 4.1, 5.1, 7.1 resp. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	 */ 
														 | 
														
														 | 
														
															 	 */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	if (ca->channels == 5) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	if (ca->channels == 3) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		SInt32 channelMap3[3] = {2, 0, 1}; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		AudioConverterSetProperty(ca->converter, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				kAudioConverterChannelMap, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				sizeof(channelMap3), channelMap3); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	} else if (ca->channels == 5) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		SInt32 channelMap5[5] = {2, 0, 1, 3, 4}; 
														 | 
														
														 | 
														
															 		SInt32 channelMap5[5] = {2, 0, 1, 3, 4}; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		AudioConverterSetProperty(ca->converter, 
														 | 
														
														 | 
														
															 		AudioConverterSetProperty(ca->converter, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				kAudioConverterChannelMap, 
														 | 
														
														 | 
														
															 				kAudioConverterChannelMap, 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -900,10 +906,9 @@ static bool aac_extra_data(void *data, uint8_t **extra_data, size_t *size) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 static asbd_builder fill_common_asbd_fields(asbd_builder builder, 
														 | 
														
														 | 
														
															 static asbd_builder fill_common_asbd_fields(asbd_builder builder, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		bool in=false) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		bool in=false, UInt32 channels=2) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 { 
														 | 
														
														 | 
														
															 { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	UInt32 bytes_per_frame = 8; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	UInt32 channels = 2; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	UInt32 bytes_per_frame = sizeof(float) * channels; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	UInt32 bits_per_channel = bytes_per_frame / channels * 8; 
														 | 
														
														 | 
														
															 	UInt32 bits_per_channel = bytes_per_frame / channels * 8; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	builder.channels_per_frame(channels); 
														 | 
														
														 | 
														
															 	builder.channels_per_frame(channels); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -931,9 +936,9 @@ static AudioStreamBasicDescription get_default_in_asbd() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		.asbd; 
														 | 
														
														 | 
														
															 		.asbd; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-static asbd_builder get_default_out_asbd_builder() 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+static asbd_builder get_default_out_asbd_builder(UInt32 channels) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 { 
														 | 
														
														 | 
														
															 { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	return fill_common_asbd_fields(asbd_builder()) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	return fill_common_asbd_fields(asbd_builder(), false, channels) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		.sample_rate(44100); 
														 | 
														
														 | 
														
															 		.sample_rate(44100); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -998,7 +1003,7 @@ static bool find_best_match(DStr &log, ca_encoder *ca, UInt32 bitrate, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		log_to_dstr(log, ca, "Trying %s (0x%x)\n", 
														 | 
														
														 | 
														
															 		log_to_dstr(log, ca, "Trying %s (0x%x)\n", 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				format_id_to_str(format_id), format_id); 
														 | 
														
														 | 
														
															 				format_id_to_str(format_id), format_id); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		auto out = get_default_out_asbd_builder() 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		auto out = get_default_out_asbd_builder(2) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			.format_id(format_id) 
														 | 
														
														 | 
														
															 			.format_id(format_id) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			.asbd; 
														 | 
														
														 | 
														
															 			.asbd; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -1229,6 +1234,11 @@ static vector<UInt32> get_bitrates(DStr &log, ca_encoder *ca, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		Float64 samplerate) 
														 | 
														
														 | 
														
															 		Float64 samplerate) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 { 
														 | 
														
														 | 
														
															 { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	vector<UInt32> bitrates; 
														 | 
														
														 | 
														
															 	vector<UInt32> bitrates; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	struct obs_audio_info aoi; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	int channels; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	obs_get_audio_info(&aoi); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	channels = get_audio_channels(aoi.speakers); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	auto handle_bitrate = [&](UInt32 bitrate) 
														 | 
														
														 | 
														
															 	auto handle_bitrate = [&](UInt32 bitrate) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	{ 
														 | 
														
														 | 
														
															 	{ 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -1263,7 +1273,7 @@ static vector<UInt32> get_bitrates(DStr &log, ca_encoder *ca, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				static_cast<uint32_t>(format_id), 
														 | 
														
														 | 
														
															 				static_cast<uint32_t>(format_id), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				samplerate); 
														 | 
														
														 | 
														
															 				samplerate); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		auto out = get_default_out_asbd_builder() 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		auto out = get_default_out_asbd_builder(channels) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			.format_id(format_id) 
														 | 
														
														 | 
														
															 			.format_id(format_id) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			.sample_rate(samplerate) 
														 | 
														
														 | 
														
															 			.sample_rate(samplerate) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			.asbd; 
														 | 
														
														 | 
														
															 			.asbd; 
														 |