audio-hal: automotive LL capture usecase changes blocking with flag
Blocking automotive changes with defined auto flag.
Change-Id: I2cb960f8ec732fefa99991530d4852341cf9701c
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index 6c97447..174e43f 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -111,10 +111,12 @@
#define VNDK_FWK_LIB_PATH "/vendor/lib/libqti_vndfwk_detect.so"
#endif
+#ifdef PLATFORM_AUTO
/* 24 KHz ECNR support */
#define ECNS_USE_CASE_ACDB_DEV_ID 95
#define ECNS_UNSUPPORTED_CAPTURE_SAMPLE_RATE_FOR_ADM 24000
#define ECNS_SUPPORTED_CAPTURE_SAMPLE_RATE_FOR_ADM 48000
+#endif
typedef struct vndkfwk_s {
void *lib_handle;
@@ -756,12 +758,14 @@
app_type_cfg->app_type = platform_get_default_app_type_v2(platform, PCM_CAPTURE);
app_type_cfg->sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
app_type_cfg->bit_width = 16;
+#ifdef PLATFORM_AUTO
if ((flags & AUDIO_INPUT_FLAG_TIMESTAMP) == 0 &&
(flags & AUDIO_INPUT_FLAG_COMPRESS) == 0 &&
(flags & AUDIO_INPUT_FLAG_FAST) != 0) {
// Support low latency record for different sample rates
app_type_cfg->sample_rate = sample_rate;
}
+#endif
}
void audio_extn_utils_update_stream_output_app_type_cfg(void *platform,
@@ -1321,7 +1325,9 @@
{
char value[PROPERTY_VALUE_MAX] = {0};
int sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
+#ifdef PLATFORM_AUTO
int acdb_dev_id;
+#endif
if ((usecase->type == PCM_PLAYBACK) && (usecase->stream.out != NULL)) {
property_get("vendor.audio.playback.mch.downsample",value,"");
@@ -1404,11 +1410,13 @@
/* ECNR module in DSP does not support 24 KHz sample rate. As a workaround,
run ADM at 48 KHz when ECNR is enabled in ACDB topology (e.g. device id = 95)
*/
+#ifdef PLATFORM_AUTO
acdb_dev_id = platform_get_snd_device_acdb_id(snd_device);
if (sample_rate == ECNS_UNSUPPORTED_CAPTURE_SAMPLE_RATE_FOR_ADM && acdb_dev_id == ECNS_USE_CASE_ACDB_DEV_ID) {
sample_rate = ECNS_SUPPORTED_CAPTURE_SAMPLE_RATE_FOR_ADM;
ALOGD("%s: update sample rate from 24K to 48K to support ECNR in PCM_CAPTURE, sample_rate=%d",__func__,sample_rate);
}
+#endif
} else if (usecase->type == TRANSCODE_LOOPBACK_RX) {
sample_rate = usecase->stream.inout->out_config.sample_rate;
}
@@ -2817,6 +2825,7 @@
int ret = -EINVAL;
uint64_t time = 0;
struct snd_pcm_prsnt_position prsnt_position;
+ memset(&prsnt_position, 0, sizeof(struct snd_pcm_prsnt_position));
ALOGV("%s:: Quering DSP position with clock id %d",__func__, clock_id);
prsnt_position.clock_id = clock_id;
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 9aaeb81..2407cfc 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -715,11 +715,17 @@
if (!adev->adm_set_config)
return;
-
+#ifdef PLATFORM_AUTO
if (out->realtime || (out->flags & AUDIO_OUTPUT_FLAG_SYS_NOTIFICATION))
adev->adm_set_config(adev->adm_data,
out->handle,
out->pcm, &out->config);
+#else
+ if (out->realtime)
+ adev->adm_set_config(adev->adm_data,
+ out->handle,
+ out->pcm, &out->config);
+#endif
}
static void register_in_stream(struct stream_in *in)
@@ -3265,11 +3271,15 @@
!audio_is_true_native_stream_active(adev)) &&
usecase->stream.out->sample_rate == OUTPUT_SAMPLING_RATE_44100) ||
(usecase->stream.out->sample_rate < OUTPUT_SAMPLING_RATE_44100)) {
+#ifdef PLATFORM_AUTO
if (!(compare_device_type(&usecase->device_list, AUDIO_DEVICE_OUT_BUS) && ((usecase->stream.out->flags &
(audio_output_flags_t)AUDIO_OUTPUT_FLAG_SYS_NOTIFICATION) || (usecase->stream.out->flags &
(audio_output_flags_t)AUDIO_OUTPUT_FLAG_PHONE)))) {
usecase->stream.out->app_type_cfg.sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
}
+#else
+ usecase->stream.out->app_type_cfg.sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
+#endif
}
}
enable_audio_route(adev, usecase);
@@ -4692,6 +4702,9 @@
size = (sample_rate * duration_ms) / 1000;
if (is_low_latency){
+#ifndef PLATFORM_AUTO
+ size = configured_low_latency_capture_period_size;
+#else
switch(sample_rate) {
case 48000:
size = 240;
@@ -4711,6 +4724,7 @@
default:
size = 240;
}
+#endif
}
bytes_per_period_sample = audio_bytes_per_sample(format) * channel_count;
@@ -9916,7 +9930,7 @@
goto err_open;
}
}
-
+#ifdef PLATFORM_AUTO
if ((config->sample_rate == 48000 ||
config->sample_rate == 32000 ||
config->sample_rate == 24000 ||
@@ -9924,7 +9938,14 @@
config->sample_rate == 8000)&&
(flags & AUDIO_INPUT_FLAG_TIMESTAMP) == 0 &&
(flags & AUDIO_INPUT_FLAG_COMPRESS) == 0 &&
- (flags & AUDIO_INPUT_FLAG_FAST) != 0) {
+ (flags & AUDIO_INPUT_FLAG_FAST) != 0)
+#else
+ if (config->sample_rate == LOW_LATENCY_CAPTURE_SAMPLE_RATE &&
+ (flags & AUDIO_INPUT_FLAG_TIMESTAMP) == 0 &&
+ (flags & AUDIO_INPUT_FLAG_COMPRESS) == 0 &&
+ (flags & AUDIO_INPUT_FLAG_FAST) != 0)
+#endif
+{
is_low_latency = true;
#if LOW_LATENCY_CAPTURE_USE_CASE
if ((flags & AUDIO_INPUT_FLAG_VOIP_TX) != 0)
@@ -9945,6 +9966,7 @@
in->af_period_multiplier = 1;
} else {
// period size is left untouched for rt mode playback
+#ifdef PLATFORM_AUTO
switch(config->sample_rate)
{
case 48000:
@@ -9965,6 +9987,9 @@
default:
in->config = pcm_config_audio_capture_rt_48KHz;
}
+#else
+ in->config = pcm_config_audio_capture_rt_48KHz;
+#endif
in->af_period_multiplier = af_period_multiplier;
}
}
@@ -10058,6 +10083,7 @@
in->config.rate = config->sample_rate;
in->af_period_multiplier = 1;
} else if (in->realtime) {
+#ifdef PLATFORM_AUTO
switch(config->sample_rate)
{
case 48000:
@@ -10080,7 +10106,10 @@
}
in->config.format = pcm_format_from_audio_format(config->format);
in->af_period_multiplier = af_period_multiplier;
- } else {
+#else
+ in->config = pcm_config_audio_capture_rt_48KHz;
+#endif
+} else {
int ret_val;
pthread_mutex_lock(&adev->lock);
ret_val = audio_extn_check_and_set_multichannel_usecase(adev,