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;