audio: Enhance latency and tuning in voice call with hearing aid
1. Reduce microphone latency in voice call
2. Use specific acdb tuning
Bug: 120869034
Test: manual audio test
Change-Id: Ifabd1ce2cce5bb4285cc33cd792070c0c3b20f1a
Signed-off-by: juyuchen <juyuchen@google.com>
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index f03356b..7596e3b 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -293,6 +293,7 @@
[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO] = "speaker-safe-and-bt-sco",
[SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB] = "speaker-and-bt-sco-wb",
[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_WB] = "speaker-safe-and-bt-sco-wb",
+ [SND_DEVICE_OUT_VOICE_HEARING_AID] = "hearing-aid",
/* Capture sound devices */
[SND_DEVICE_IN_HANDSET_MIC] = "handset-mic",
@@ -372,6 +373,7 @@
[SND_DEVICE_IN_CAMCORDER_SELFIE_PORTRAIT] = "camcorder-mic",
[SND_DEVICE_IN_SPEAKER_QMIC_NS] = "quad-mic",
[SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS] = "quad-mic",
+ [SND_DEVICE_IN_VOICE_HEARING_AID] = "hearing-aid-mic",
};
static struct audio_effect_config \
@@ -444,6 +446,7 @@
[SND_DEVICE_OUT_SPEAKER_PROTECTED] = 124,
[SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED] = 101,
[SND_DEVICE_OUT_VOICE_SPEAKER_HFP] = ACDB_ID_VOICE_SPEAKER,
+ [SND_DEVICE_OUT_VOICE_HEARING_AID] = 45,
[SND_DEVICE_IN_HANDSET_MIC] = 4,
[SND_DEVICE_IN_HANDSET_MIC_AEC] = 106,
@@ -521,6 +524,7 @@
[SND_DEVICE_IN_CAMCORDER_SELFIE_PORTRAIT] = 61,
[SND_DEVICE_IN_SPEAKER_QMIC_NS] = 129,
[SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS] = 129,
+ [SND_DEVICE_IN_VOICE_HEARING_AID] = 44,
};
// Platform specific backend bit width table
@@ -579,6 +583,7 @@
{TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_PROTECTED)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED)},
{TO_NAME_INDEX(SND_DEVICE_OUT_USB_HEADSET_SPEC)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_HEARING_AID)},
/* in */
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_MIC)},
@@ -655,6 +660,8 @@
{TO_NAME_INDEX(SND_DEVICE_IN_CAMCORDER_SELFIE_LANDSCAPE)},
{TO_NAME_INDEX(SND_DEVICE_IN_CAMCORDER_SELFIE_INVERT_LANDSCAPE)},
{TO_NAME_INDEX(SND_DEVICE_IN_CAMCORDER_SELFIE_PORTRAIT)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_VOICE_HEARING_AID)},
+
/* For legacy xml file parsing */
{TO_NAME_INDEX(SND_DEVICE_IN_CAMCORDER_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_QMIC_NS)},
@@ -1285,6 +1292,7 @@
backend_tag_table[SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP] = strdup("speaker-and-bt-a2dp");
backend_tag_table[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_A2DP] = strdup("speaker-safe-and-bt-a2dp");
backend_tag_table[SND_DEVICE_OUT_USB_HEADSET_SPEC] = strdup("usb-headset");
+ backend_tag_table[SND_DEVICE_OUT_VOICE_HEARING_AID] = strdup("hearing-aid");
hw_interface_table[SND_DEVICE_OUT_HANDSET] = strdup("SLIMBUS_0_RX");
hw_interface_table[SND_DEVICE_OUT_SPEAKER] = strdup("SLIMBUS_0_RX");
@@ -1333,6 +1341,11 @@
hw_interface_table[SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB] = strdup("SLIMBUS_0_RX-and-SEC_AUX_PCM_RX");
hw_interface_table[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO] = strdup("QUAT_TDM_RX_0-and-SLIMBUS_7_RX"),
hw_interface_table[SND_DEVICE_OUT_SPEAKER_SAFE_AND_BT_SCO_WB] = strdup("QUAT_TDM_RX_0-and-SLIMBUS_7_RX"),
+ /* So far, primary hal doesn't support hearing aid device.
+ Need snd_device to route voice call and use specific acdb tuning.
+ Also, BT_RX is a virtual port to indicate bluetooth hearing aid. */
+ hw_interface_table[SND_DEVICE_OUT_VOICE_HEARING_AID] = strdup("BT_RX"),
+
hw_interface_table[SND_DEVICE_IN_USB_HEADSET_MIC] = strdup("USB_AUDIO_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_USB_HEADSET_MIC] = strdup("USB_AUDIO_TX");
hw_interface_table[SND_DEVICE_IN_USB_HEADSET_MIC_AEC] = strdup("USB_AUDIO_TX");
@@ -1400,6 +1413,8 @@
hw_interface_table[SND_DEVICE_IN_CAMCORDER_SELFIE_LANDSCAPE] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_CAMCORDER_SELFIE_INVERT_LANDSCAPE] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_CAMCORDER_SELFIE_PORTRAIT] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_VOICE_HEARING_AID] = strdup("SLIMBUS_0_TX");
+
my_data->max_mic_count = PLATFORM_DEFAULT_MIC_COUNT;
}
@@ -2893,8 +2908,11 @@
snd_device = SND_DEVICE_OUT_VOICE_HANDSET_TMUS;
else
snd_device = SND_DEVICE_OUT_VOICE_HANDSET;
- } else if (devices & AUDIO_DEVICE_OUT_TELEPHONY_TX)
+ } else if (devices & AUDIO_DEVICE_OUT_TELEPHONY_TX) {
snd_device = SND_DEVICE_OUT_VOICE_TX;
+ } else if (devices & AUDIO_DEVICE_OUT_HEARING_AID) {
+ snd_device = SND_DEVICE_OUT_VOICE_HEARING_AID;
+ }
if (snd_device != SND_DEVICE_NONE) {
goto exit;
@@ -3186,6 +3204,8 @@
snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC;
}
}
+ } else if (out_device & AUDIO_DEVICE_OUT_HEARING_AID) {
+ snd_device = SND_DEVICE_IN_VOICE_HEARING_AID;
}
} else if (source == AUDIO_SOURCE_CAMCORDER) {
if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC ||
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index a885f27..578867d 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -106,6 +106,7 @@
SND_DEVICE_OUT_VOICE_USB_HEADSET,
/* Specific snd_devices */
SND_DEVICE_OUT_USB_HEADSET_SPEC,
+ SND_DEVICE_OUT_VOICE_HEARING_AID,
SND_DEVICE_OUT_END,
/*
@@ -192,6 +193,7 @@
SND_DEVICE_IN_CAMCORDER_SELFIE_PORTRAIT,
SND_DEVICE_IN_SPEAKER_QMIC_NS,
SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS,
+ SND_DEVICE_IN_VOICE_HEARING_AID,
SND_DEVICE_IN_END,
SND_DEVICE_MAX = SND_DEVICE_IN_END,