hal: Send custom config for sample rate
Send custom config related to sample rate for record, playback and
voip usecases for speaker, handset, speaker-mic, handset-mic and
wired headset devices.
Change-Id: I2eb53442e583bad5eb044071b8720a8a1b443346
diff --git a/hal/AudioStream.cpp b/hal/AudioStream.cpp
index 08d55fb..3d13f61 100644
--- a/hal/AudioStream.cpp
+++ b/hal/AudioStream.cpp
@@ -2234,6 +2234,32 @@
"hifi-filter_custom_key",
sizeof(mPalOutDevice[i].custom_config.custom_key));
}
+
+ if (((usecase_ == USECASE_AUDIO_PLAYBACK_VOIP) ||
+ (usecase_ == USECASE_AUDIO_PLAYBACK_DEEP_BUFFER) ||
+ (isOffloadUsecase())) &&
+ ((mPalOutDevice[i].id == PAL_DEVICE_OUT_SPEAKER) ||
+ (mPalOutDevice[i].id == PAL_DEVICE_OUT_HANDSET) ||
+ (mPalOutDevice[i].id == PAL_DEVICE_OUT_WIRED_HEADPHONE) ||
+ (mPalOutDevice[i].id == PAL_DEVICE_OUT_WIRED_HEADSET))) {
+ if (config_.sample_rate == 8000) {
+ strlcpy(mPalOutDevice[i].custom_config.custom_key, "8K",
+ sizeof(mPalOutDevice[i].custom_config.custom_key));
+ } else if (config_.sample_rate == 16000) {
+ strlcpy(mPalOutDevice[i].custom_config.custom_key, "16K",
+ sizeof(mPalOutDevice[i].custom_config.custom_key));
+ } else if (config_.sample_rate == 32000) {
+ strlcpy(mPalOutDevice[i].custom_config.custom_key, "32K",
+ sizeof(mPalOutDevice[i].custom_config.custom_key));
+ } else if (config_.sample_rate == 48000) {
+ strlcpy(mPalOutDevice[i].custom_config.custom_key, "48K",
+ sizeof(mPalOutDevice[i].custom_config.custom_key));
+ } else {
+ AHAL_DBG("No custom config to set for usecase %d for sr %d",
+ usecase_, config_.sample_rate);
+ }
+ AHAL_DBG("setting SR for usecase %d as %d", usecase_, config_.sample_rate);
+ }
}
mAndroidOutDevices = new_devices;
@@ -3506,6 +3532,31 @@
AHAL_INFO("Setting custom key as %s", mPalOutDevice[i].custom_config.custom_key);
}
+ if (((usecase_ == USECASE_AUDIO_PLAYBACK_VOIP) ||
+ (usecase_ == USECASE_AUDIO_PLAYBACK_DEEP_BUFFER) ||
+ (isOffloadUsecase())) &&
+ ((mPalOutDevice[i].id == PAL_DEVICE_OUT_SPEAKER) ||
+ (mPalOutDevice[i].id == PAL_DEVICE_OUT_HANDSET) ||
+ (mPalOutDevice[i].id == PAL_DEVICE_OUT_WIRED_HEADPHONE) ||
+ (mPalOutDevice[i].id == PAL_DEVICE_OUT_WIRED_HEADSET))) {
+ if (config_.sample_rate == 8000) {
+ strlcpy(mPalOutDevice[i].custom_config.custom_key, "8K",
+ sizeof(mPalOutDevice[i].custom_config.custom_key));
+ } else if (config_.sample_rate == 16000) {
+ strlcpy(mPalOutDevice[i].custom_config.custom_key, "16K",
+ sizeof(mPalOutDevice[i].custom_config.custom_key));
+ } else if (config_.sample_rate == 32000) {
+ strlcpy(mPalOutDevice[i].custom_config.custom_key, "32K",
+ sizeof(mPalOutDevice[i].custom_config.custom_key));
+ } else if (config_.sample_rate == 48000) {
+ strlcpy(mPalOutDevice[i].custom_config.custom_key, "48K",
+ sizeof(mPalOutDevice[i].custom_config.custom_key));
+ } else {
+ AHAL_DBG("No custom config to set for usecase %d for sr %d",
+ usecase_, config_.sample_rate);
+ }
+ AHAL_DBG("setting SR for usecase %d as %d", usecase_, config_.sample_rate);
+ }
}
if (flags & AUDIO_OUTPUT_FLAG_MMAP_NOIRQ) {
@@ -3990,6 +4041,30 @@
sizeof(mPalInDevice[i].custom_config.custom_key));
AHAL_INFO("Setting custom key as %s", mPalInDevice[i].custom_config.custom_key);
}
+
+ if (((usecase_ == USECASE_AUDIO_RECORD_VOIP) ||
+ (usecase_ == USECASE_AUDIO_RECORD)) &&
+ ((mPalInDevice[i].id == PAL_DEVICE_IN_HANDSET_MIC) ||
+ (mPalInDevice[i].id == PAL_DEVICE_IN_SPEAKER_MIC) ||
+ (mPalInDevice[i].id == PAL_DEVICE_IN_WIRED_HEADSET))) {
+ if (config_.sample_rate == 8000) {
+ strlcpy(mPalInDevice[i].custom_config.custom_key, "8K",
+ sizeof(mPalInDevice[i].custom_config.custom_key));
+ } else if (config_.sample_rate == 16000) {
+ strlcpy(mPalInDevice[i].custom_config.custom_key, "16K",
+ sizeof(mPalInDevice[i].custom_config.custom_key));
+ } else if (config_.sample_rate == 32000) {
+ strlcpy(mPalInDevice[i].custom_config.custom_key, "32K",
+ sizeof(mPalInDevice[i].custom_config.custom_key));
+ } else if (config_.sample_rate == 48000) {
+ strlcpy(mPalInDevice[i].custom_config.custom_key, "48K",
+ sizeof(mPalInDevice[i].custom_config.custom_key));
+ } else {
+ AHAL_DBG("No custom config to set for usecase %d for sr %d",
+ usecase_, config_.sample_rate);
+ }
+ AHAL_DBG("setting SR for usecase %d as %d", usecase_, config_.sample_rate);
+ }
}
mAndroidInDevices = new_devices;
@@ -4763,7 +4838,6 @@
}
for (int i = 0; i < mAndroidInDevices.size(); i++) {
- memset(mPalInDevice[i].custom_config.custom_key, 0, sizeof(mPalInDevice[i].custom_config.custom_key));
mPalInDevice[i].id = mPalInDeviceIds[i];
mPalInDevice[i].config.sample_rate = config->sample_rate;
mPalInDevice[i].config.bit_width = CODEC_BACKEND_DEFAULT_BIT_WIDTH;
@@ -4775,8 +4849,6 @@
mPalInDevice[i].address.card_id = adevice->usb_card_id_;
mPalInDevice[i].address.device_num = adevice->usb_dev_num_;
}
- strlcpy(mPalInDevice[i].custom_config.custom_key, "",
- sizeof(mPalInDevice[i].custom_config.custom_key));
/* HDR use case check */
if ((source_ == AUDIO_SOURCE_UNPROCESSED) &&
@@ -4790,15 +4862,47 @@
}
}
}
+ }
+
+ usecase_ = GetInputUseCase(flags, source);
+ for (int i = 0; i < mAndroidInDevices.size(); i++) {
+ memset(mPalInDevice[i].custom_config.custom_key, 0,
+ sizeof(mPalInDevice[i].custom_config.custom_key));
+
+ strlcpy(mPalInDevice[i].custom_config.custom_key, "",
+ sizeof(mPalInDevice[i].custom_config.custom_key));
if (source_ == AUDIO_SOURCE_CAMCORDER && adevice->cameraOrientation == CAMERA_DEFAULT) {
strlcpy(mPalInDevice[i].custom_config.custom_key, "camcorder_landscape",
sizeof(mPalInDevice[i].custom_config.custom_key));
AHAL_INFO("Setting custom key as %s", mPalInDevice[i].custom_config.custom_key);
}
+
+ if (((usecase_ == USECASE_AUDIO_RECORD_VOIP) ||
+ (usecase_ == USECASE_AUDIO_RECORD)) &&
+ ((mPalInDevice[i].id == PAL_DEVICE_IN_HANDSET_MIC) ||
+ (mPalInDevice[i].id == PAL_DEVICE_IN_SPEAKER_MIC) ||
+ (mPalInDevice[i].id == PAL_DEVICE_IN_WIRED_HEADSET))) {
+ if (config_.sample_rate == 8000) {
+ strlcpy(mPalInDevice[i].custom_config.custom_key, "8K",
+ sizeof(mPalInDevice[i].custom_config.custom_key));
+ } else if (config_.sample_rate == 16000) {
+ strlcpy(mPalInDevice[i].custom_config.custom_key, "16K",
+ sizeof(mPalInDevice[i].custom_config.custom_key));
+ } else if (config_.sample_rate == 32000) {
+ strlcpy(mPalInDevice[i].custom_config.custom_key, "32K",
+ sizeof(mPalInDevice[i].custom_config.custom_key));
+ } else if (config_.sample_rate == 48000) {
+ strlcpy(mPalInDevice[i].custom_config.custom_key, "48K",
+ sizeof(mPalInDevice[i].custom_config.custom_key));
+ } else {
+ AHAL_DBG("No custom config to set for usecase %d for sr %d",
+ usecase_, config_.sample_rate);
+ }
+ AHAL_DBG("setting SR for usecase %d as %d", usecase_, config_.sample_rate);
+ }
}
- usecase_ = GetInputUseCase(flags, source);
if (flags & AUDIO_INPUT_FLAG_MMAP_NOIRQ) {
stream_.get()->start = astream_in_mmap_noirq_start;
stream_.get()->stop = astream_in_mmap_noirq_stop;
diff --git a/hal/AudioStream.h b/hal/AudioStream.h
index 424631a..51f9e47 100644
--- a/hal/AudioStream.h
+++ b/hal/AudioStream.h
@@ -28,7 +28,7 @@
*
* Changes from Qualcomm Innovation Center are provided under the following license:
*
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2024, Qualcomm Innovation Center, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted (subject to the limitations in the
@@ -527,6 +527,23 @@
pal_device_id_t* mPalOutDeviceIds;
std::set<audio_devices_t> mAndroidOutDevices;
bool mInitialized;
+ bool isOffloadUsecase() {
+ int usecase = GetUseCase();
+ switch (usecase) {
+ case USECASE_AUDIO_PLAYBACK_OFFLOAD:
+ case USECASE_AUDIO_PLAYBACK_OFFLOAD2:
+ case USECASE_AUDIO_PLAYBACK_OFFLOAD3:
+ case USECASE_AUDIO_PLAYBACK_OFFLOAD4:
+ case USECASE_AUDIO_PLAYBACK_OFFLOAD5:
+ case USECASE_AUDIO_PLAYBACK_OFFLOAD6:
+ case USECASE_AUDIO_PLAYBACK_OFFLOAD7:
+ case USECASE_AUDIO_PLAYBACK_OFFLOAD8:
+ case USECASE_AUDIO_PLAYBACK_OFFLOAD9:
+ return true;
+ default:
+ return false;
+ }
+ }
public:
StreamOutPrimary(audio_io_handle_t handle,