hal: Add support for voip record low-latency
Add support for voip record low-latency path if app requests
for audio record with fast flag.
Change-Id: I2152a796cdb8c29142315c23cad7ec32f771f6b3
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 0594b7b..374e9f8 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -399,6 +399,7 @@
[USECASE_AUDIO_PLAYBACK_VOIP] = "audio-playback-voip",
[USECASE_AUDIO_RECORD_VOIP] = "audio-record-voip",
+ [USECASE_AUDIO_RECORD_VOIP_LOW_LATENCY] = "audio-record-voip-low-latency",
/* For Interactive Audio Streams */
[USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM1] = "audio-interactive-stream1",
[USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM2] = "audio-interactive-stream2",
@@ -549,6 +550,7 @@
int dir = 0;
switch (uc_id) {
case USECASE_AUDIO_RECORD_LOW_LATENCY:
+ case USECASE_AUDIO_RECORD_VOIP_LOW_LATENCY:
dir = 1;
case USECASE_AUDIO_PLAYBACK_ULL:
break;
@@ -3735,7 +3737,8 @@
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
if ((usecase->type == PCM_CAPTURE &&
- usecase->id != USECASE_AUDIO_RECORD_VOIP)
+ usecase->id != USECASE_AUDIO_RECORD_VOIP &&
+ usecase->id != USECASE_AUDIO_RECORD_VOIP_LOW_LATENCY)
|| usecase == uc_info)
continue;
@@ -9428,7 +9431,10 @@
(flags & AUDIO_INPUT_FLAG_FAST) != 0) {
is_low_latency = true;
#if LOW_LATENCY_CAPTURE_USE_CASE
- in->usecase = USECASE_AUDIO_RECORD_LOW_LATENCY;
+ if ((flags & AUDIO_INPUT_FLAG_VOIP_TX) != 0)
+ in->usecase = USECASE_AUDIO_RECORD_VOIP_LOW_LATENCY;
+ else
+ in->usecase = USECASE_AUDIO_RECORD_LOW_LATENCY;
#endif
in->realtime = may_use_noirq_mode(adev, in->usecase, in->flags);
if (!in->realtime) {
@@ -9509,6 +9515,10 @@
in->config = pcm_config_afe_proxy_record;
in->config.rate = config->sample_rate;
in->af_period_multiplier = 1;
+ } else if (in->realtime) {
+ in->config = pcm_config_audio_capture_rt;
+ in->config.format = pcm_format_from_audio_format(config->format);
+ in->af_period_multiplier = af_period_multiplier;
} else if (in->source == AUDIO_SOURCE_VOICE_COMMUNICATION &&
in->flags & AUDIO_INPUT_FLAG_VOIP_TX &&
(config->sample_rate == 8000 ||