audio: platform: Support Ambisonic capture usecase in multi-record
Add changes to support ambisonic capture along with
other recording streams.
Change-Id: I5b4cedf2cc6812cdf2d38122e22d4fdfc7e49d0e
diff --git a/configs/sdm670/sdm670.mk b/configs/sdm670/sdm670.mk
index f84821a..93bcd73 100644
--- a/configs/sdm670/sdm670.mk
+++ b/configs/sdm670/sdm670.mk
@@ -137,7 +137,7 @@
##Ambisonic Capture
PRODUCT_PROPERTY_OVERRIDES += \
-persist.vendor.audio.ambisonic.capture=false
+persist.vendor.audio.ambisonic.capture=false \
persist.vendor.audio.ambisonic.auto.profile=false
##fluencetype can be "fluence" or "fluencepro" or "none"
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 10de9b6..96b817f 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -4289,13 +4289,14 @@
source == AUDIO_SOURCE_MIC)) {
snd_device = SND_DEVICE_IN_HANDSET_GENERIC_QMIC;
platform_set_echo_reference(adev, true, out_device);
- } else if (my_data->use_generic_handset == true && // system prop is enabled
- (my_data->ambisonic_capture == true) && // Enable Ambisonic capture
+ } else if (my_data->use_generic_handset == true && // System prop is enabled
+ (my_data->ambisonic_capture == true) && // Enable Ambisonic capture
(my_data->source_mic_type & SOURCE_QUAD_MIC) && // AND 4mic is available
- ((in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) || // AND device is buit-in or back mic
- (in_device & AUDIO_DEVICE_IN_BACK_MIC)) &&
- (source == AUDIO_SOURCE_MIC) && // AND source is MIC
- (int)channel_mask == (int)AUDIO_CHANNEL_INDEX_MASK_4) { // AND input channel is 4
+ ((in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) || // AND device is Built-in
+ (in_device & AUDIO_DEVICE_IN_BACK_MIC)) && // OR Back-mic
+ (source == AUDIO_SOURCE_MIC || // AND source is MIC for 16bit
+ source == AUDIO_SOURCE_UNPROCESSED || // OR unprocessed for 24bit
+ source == AUDIO_SOURCE_CAMCORDER)) { // OR camera usecase
snd_device = SND_DEVICE_IN_HANDSET_GENERIC_QMIC;
/* Below check is true only in LA build to set
ambisonic profile. In LE hal client will set profile
@@ -4304,6 +4305,19 @@
strlcpy(adev->active_input->profile, "record_ambisonic",
sizeof(adev->active_input->profile));
}
+
+ if (!strncmp(adev->active_input->profile, "record_ambisonic",
+ strlen("record_ambisonic"))) {
+ /* Validate input stream configuration for
+ Ambisonic capture.
+ */
+ if (((int)channel_mask != (int)AUDIO_CHANNEL_INDEX_MASK_4) ||
+ (adev->active_input->sample_rate != 48000)) {
+ snd_device = SND_DEVICE_NONE;
+ ALOGW("Unsupported Input configuration for ambisonic capture");
+ goto exit;
+ }
+ }
} else if (source == AUDIO_SOURCE_CAMCORDER) {
if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC ||
in_device & AUDIO_DEVICE_IN_BACK_MIC) {