audio: added support for dual mic capture

Added support for simultaneous capture of front and back mic.

Added device definitions for dual mic config for voice recognition use
case: no pre processing enabled.

stream->channels() reports actual channel mask instead of recontructing
it from channel count.

TODO: check if ACDB settings copied from single mic voice recognition
are correct.

Change-Id: I41282d0af5deb256ef68ec17ee34f5aae7807a6f
diff --git a/alsa_sound/AudioHardwareALSA.cpp b/alsa_sound/AudioHardwareALSA.cpp
index 4050777..508418c 100644
--- a/alsa_sound/AudioHardwareALSA.cpp
+++ b/alsa_sound/AudioHardwareALSA.cpp
@@ -779,6 +779,7 @@
           else
               alsa_handle.format = *format;
           alsa_handle.channels = VOIP_DEFAULT_CHANNEL_MODE;
+          alsa_handle.channelMask = AUDIO_CHANNEL_IN_MONO;
           alsa_handle.sampleRate = *sampleRate;
           alsa_handle.latency = VOIP_PLAYBACK_LATENCY;
           alsa_handle.rxHandle = 0;
@@ -857,6 +858,8 @@
         } else {
             alsa_handle.channels = AudioSystem::popCount(*channels);
         }
+        alsa_handle.channelMask = *channels;
+
         if (6 == alsa_handle.channels) {
             alsa_handle.bufferSize = DEFAULT_MULTI_CHANNEL_BUF_SIZE;
         } else {
@@ -916,6 +919,7 @@
       alsa_handle.handle = 0;
       alsa_handle.format = SNDRV_PCM_FORMAT_S16_LE;
       alsa_handle.channels = DEFAULT_CHANNEL_MODE;
+      alsa_handle.channelMask = AUDIO_CHANNEL_OUT_STEREO;
       alsa_handle.sampleRate = DEFAULT_SAMPLING_RATE;
       alsa_handle.latency = PLAYBACK_LATENCY;
       alsa_handle.rxHandle = 0;
@@ -1014,6 +1018,7 @@
     alsa_handle.handle = 0;
     alsa_handle.format = SNDRV_PCM_FORMAT_S16_LE;
     alsa_handle.channels = DEFAULT_CHANNEL_MODE;
+    alsa_handle.channelMask = AUDIO_CHANNEL_OUT_STEREO;
     alsa_handle.sampleRate = DEFAULT_SAMPLING_RATE;
     alsa_handle.latency = VOICE_LATENCY;
     alsa_handle.rxHandle = 0;
@@ -1142,6 +1147,7 @@
           else
               alsa_handle.format = *format;
            alsa_handle.channels = VOIP_DEFAULT_CHANNEL_MODE;
+           alsa_handle.channelMask = AUDIO_CHANNEL_IN_MONO;
            alsa_handle.sampleRate = *sampleRate;
            alsa_handle.latency = VOIP_RECORD_LATENCY;
            alsa_handle.rxHandle = 0;
@@ -1209,6 +1215,7 @@
         alsa_handle.handle = 0;
         alsa_handle.format = SNDRV_PCM_FORMAT_S16_LE;
         alsa_handle.channels = VOICE_CHANNEL_MODE;
+        alsa_handle.channelMask = AUDIO_CHANNEL_IN_MONO;
         alsa_handle.sampleRate = android::AudioRecord::DEFAULT_SAMPLE_RATE;
         alsa_handle.latency = RECORD_LATENCY;
         alsa_handle.rxHandle = 0;
@@ -1307,8 +1314,10 @@
 #ifdef QCOM_SSR_ENABLED
                        | AudioSystem::CHANNEL_IN_5POINT1
 #endif
-                       ));
-            ALOGV("updated channel info: channels=%d", it->channels);
+                       | AUDIO_CHANNEL_IN_FRONT_BACK));
+            it->channelMask = *channels;
+            ALOGV("updated channel info: channels=%d channelMask %08x",
+                  it->channels, it->channelMask);
         }
         if (devices == AudioSystem::DEVICE_IN_VOICE_CALL){
            /* Add current devices info to devices to do route */
@@ -1336,7 +1345,6 @@
                 mALSADevice->route(&(*it), devices, mode());
             }
         }
-
         if(!strcmp(it->useCase, SND_USE_CASE_VERB_HIFI_REC) ||
            !strcmp(it->useCase, SND_USE_CASE_VERB_HIFI_LOWLATENCY_REC) ||
 #ifdef QCOM_FM_ENABLED
@@ -1444,6 +1452,7 @@
         alsa_handle.handle = 0;
         alsa_handle.format = SNDRV_PCM_FORMAT_S16_LE;
         alsa_handle.channels = DEFAULT_CHANNEL_MODE;
+        alsa_handle.channelMask = AUDIO_CHANNEL_OUT_STEREO;
         alsa_handle.sampleRate = DEFAULT_SAMPLING_RATE;
         alsa_handle.latency = VOICE_LATENCY;
         alsa_handle.rxHandle = 0;
@@ -1539,6 +1548,7 @@
     alsa_handle.handle = 0;
     alsa_handle.format = SNDRV_PCM_FORMAT_S16_LE;
     alsa_handle.channels = VOICE_CHANNEL_MODE;
+    alsa_handle.channelMask = AUDIO_CHANNEL_IN_MONO;
     alsa_handle.sampleRate = VOICE_SAMPLING_RATE;
     alsa_handle.latency = VOICE_LATENCY;
     alsa_handle.rxHandle = 0;