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) {