hal: enable low latency support for sample rates other than 48 KHz
Enable low latency playback and record support for 8, 16, 24 and
32 KHz sample rates.
Change-Id: I29114b0ef9ac0d41f455573b92bed777cf9cbe51
Signed-off-by: Kogara Naveen Kumar <quic_nkogara@quicinc.com>
diff --git a/configs/common_au/audio_policy_configuration.xml b/configs/common_au/audio_policy_configuration.xml
index bfb6362..4506c2d 100644
--- a/configs/common_au/audio_policy_configuration.xml
+++ b/configs/common_au/audio_policy_configuration.xml
@@ -77,6 +77,26 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="carplay_8k_sys" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_16k_sys" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="16000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_24k_sys" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="24000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_32k_sys" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="32000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_48k_sys" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="nav_guidance" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
@@ -296,7 +316,7 @@
<route type="mix" sink="Media Bus"
sources="media"/>
<route type="mix" sink="Sys Notification Bus"
- sources="sys_notification"/>
+ sources="sys_notification,carplay_8k_sys,carplay_16k_sys,carplay_24k_sys,carplay_32k_sys,carplay_48k_sys"/>
<route type="mix" sink="Nav Guidance Bus"
sources="nav_guidance"/>
<route type="mix" sink="Phone Bus"
diff --git a/configs/msmnile_au/audio_io_policy.conf b/configs/msmnile_au/audio_io_policy.conf
index 9f19dc3..fa01cf0 100644
--- a/configs/msmnile_au/audio_io_policy.conf
+++ b/configs/msmnile_au/audio_io_policy.conf
@@ -84,7 +84,7 @@
sys_notification {
flags AUDIO_OUTPUT_FLAG_SYS_NOTIFICATION
formats AUDIO_FORMAT_PCM_16_BIT
- sampling_rates 48000
+ sampling_rates 8000|16000|24000|32000|48000
bit_width 16
app_type 69937
}
@@ -98,7 +98,7 @@
phone {
flags AUDIO_OUTPUT_FLAG_PHONE
formats AUDIO_FORMAT_PCM_16_BIT
- sampling_rates 48000
+ sampling_rates 8000|16000|24000|32000|48000
bit_width 16
app_type 69936
}
diff --git a/configs/msmnile_au/audio_policy_configuration.xml b/configs/msmnile_au/audio_policy_configuration.xml
index e4533ac..8ee3020 100644
--- a/configs/msmnile_au/audio_policy_configuration.xml
+++ b/configs/msmnile_au/audio_policy_configuration.xml
@@ -78,6 +78,26 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="carplay_8k_sys" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_16k_sys" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="16000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_24k_sys" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="24000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_32k_sys" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="32000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_48k_sys" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="nav_guidance" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
@@ -433,7 +453,7 @@
<route type="mix" sink="Media Bus"
sources="media,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
<route type="mix" sink="Sys Notification Bus"
- sources="sys_notification,mmap_no_irq_out"/>
+ sources="sys_notification,mmap_no_irq_out,carplay_8k_sys,carplay_16k_sys,carplay_24k_sys,carplay_32k_sys,carplay_48k_sys"/>
<route type="mix" sink="Nav Guidance Bus"
sources="nav_guidance,mmap_no_irq_out"/>
<route type="mix" sink="Phone Bus"
diff --git a/configs/msmsteppe_au/audio_io_policy.conf b/configs/msmsteppe_au/audio_io_policy.conf
index e45b296..412c248 100644
--- a/configs/msmsteppe_au/audio_io_policy.conf
+++ b/configs/msmsteppe_au/audio_io_policy.conf
@@ -84,7 +84,7 @@
sys_notification {
flags AUDIO_OUTPUT_FLAG_SYS_NOTIFICATION
formats AUDIO_FORMAT_PCM_16_BIT
- sampling_rates 48000
+ sampling_rates 8000|16000|24000|32000|48000
bit_width 16
app_type 69937
}
@@ -98,7 +98,7 @@
phone {
flags AUDIO_OUTPUT_FLAG_PHONE
formats AUDIO_FORMAT_PCM_16_BIT
- sampling_rates 48000
+ sampling_rates 8000|16000|24000|32000|48000
bit_width 16
app_type 69936
}
diff --git a/configs/msmsteppe_au/audio_policy_configuration.xml b/configs/msmsteppe_au/audio_policy_configuration.xml
index ea6e0e3..c9974ba 100644
--- a/configs/msmsteppe_au/audio_policy_configuration.xml
+++ b/configs/msmsteppe_au/audio_policy_configuration.xml
@@ -78,6 +78,26 @@
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
+ <mixPort name="carplay_8k_sys" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_16k_sys" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="16000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_24k_sys" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="24000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_32k_sys" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="32000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+ <mixPort name="carplay_48k_sys" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
<mixPort name="nav_guidance" role="source">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
@@ -433,7 +453,7 @@
<route type="mix" sink="Media Bus"
sources="media,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
<route type="mix" sink="Sys Notification Bus"
- sources="sys_notification,mmap_no_irq_out"/>
+ sources="sys_notification,mmap_no_irq_out,carplay_8k_sys,carplay_16k_sys,carplay_24k_sys,carplay_32k_sys,carplay_48k_sys"/>
<route type="mix" sink="Nav Guidance Bus"
sources="nav_guidance,mmap_no_irq_out"/>
<route type="mix" sink="Phone Bus"
diff --git a/hal/audio_extn/auto_hal.c b/hal/audio_extn/auto_hal.c
old mode 100755
new mode 100644
index 977147c..6ee6859
--- a/hal/audio_extn/auto_hal.c
+++ b/hal/audio_extn/auto_hal.c
@@ -380,7 +380,26 @@
case CAR_AUDIO_STREAM_SYS_NOTIFICATION:
/* sys notification bus stream shares pcm device with low-latency */
out->usecase = USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION;
- out->config = pcm_config_system;
+ switch(out->sample_rate)
+ {
+ case 48000:
+ out->config=pcm_config_system_48KHz;
+ break;
+ case 32000:
+ out->config=pcm_config_system_32KHz;
+ break;
+ case 24000:
+ out->config=pcm_config_system_24KHz;
+ break;
+ case 16000:
+ out->config=pcm_config_system_16KHz;
+ break;
+ case 8000:
+ out->config=pcm_config_system_8KHz;
+ break;
+ default:
+ out->config=pcm_config_system_48KHz;
+ }
if (out->flags == AUDIO_OUTPUT_FLAG_NONE)
out->flags |= AUDIO_OUTPUT_FLAG_SYS_NOTIFICATION;
out->volume_l = out->volume_r = MAX_VOLUME_GAIN;
@@ -401,7 +420,26 @@
break;
case CAR_AUDIO_STREAM_PHONE:
out->usecase = USECASE_AUDIO_PLAYBACK_PHONE;
- out->config = pcm_config_system;
+ switch(out->sample_rate)
+ {
+ case 48000:
+ out->config=pcm_config_system_48KHz;
+ break;
+ case 32000:
+ out->config=pcm_config_system_32KHz;
+ break;
+ case 24000:
+ out->config=pcm_config_system_24KHz;
+ break;
+ case 16000:
+ out->config=pcm_config_system_16KHz;
+ break;
+ case 8000:
+ out->config=pcm_config_system_8KHz;
+ break;
+ default:
+ out->config=pcm_config_system_48KHz;
+ }
if (out->flags == AUDIO_OUTPUT_FLAG_NONE)
out->flags |= AUDIO_OUTPUT_FLAG_PHONE;
out->volume_l = out->volume_r = MAX_VOLUME_GAIN;
diff --git a/hal/audio_extn/auto_hal.h b/hal/audio_extn/auto_hal.h
index c1b3250..374e2ec 100644
--- a/hal/audio_extn/auto_hal.h
+++ b/hal/audio_extn/auto_hal.h
@@ -59,6 +59,57 @@
.avail_min = LOW_LATENCY_OUTPUT_PERIOD_SIZE / 4,
};
+struct pcm_config pcm_config_system_48KHz = {
+ .channels = 2,
+ .rate = 48000,
+ .period_size = 240,
+ .period_count = LOW_LATENCY_OUTPUT_PERIOD_COUNT,
+ .format = PCM_FORMAT_S16_LE,
+ .start_threshold = 240 / 4,
+ .stop_threshold = INT_MAX,
+ .avail_min = 240 / 4,
+};
+struct pcm_config pcm_config_system_32KHz = {
+ .channels = 2,
+ .rate = 32000,
+ .period_size = 160,
+ .period_count = LOW_LATENCY_OUTPUT_PERIOD_COUNT,
+ .format = PCM_FORMAT_S16_LE,
+ .start_threshold = 160 / 4,
+ .stop_threshold = INT_MAX,
+ .avail_min = 160 / 4,
+};
+struct pcm_config pcm_config_system_24KHz = {
+ .channels = 2,
+ .rate = 24000,
+ .period_size = 120,
+ .period_count = LOW_LATENCY_OUTPUT_PERIOD_COUNT,
+ .format = PCM_FORMAT_S16_LE,
+ .start_threshold = 120 / 4,
+ .stop_threshold = INT_MAX,
+ .avail_min = 120 / 4,
+};
+struct pcm_config pcm_config_system_16KHz = {
+ .channels = 2,
+ .rate = 16000,
+ .period_size = 80,
+ .period_count = LOW_LATENCY_OUTPUT_PERIOD_COUNT,
+ .format = PCM_FORMAT_S16_LE,
+ .start_threshold = 80 / 4,
+ .stop_threshold = INT_MAX,
+ .avail_min = 80 / 4,
+};
+struct pcm_config pcm_config_system_8KHz = {
+ .channels = 2,
+ .rate = 8000,
+ .period_size = 40,
+ .period_count = LOW_LATENCY_OUTPUT_PERIOD_COUNT,
+ .format = PCM_FORMAT_S16_LE,
+ .start_threshold = 40 / 4,
+ .stop_threshold = INT_MAX,
+ .avail_min = 40 / 4,
+};
+
static const audio_usecase_t bus_device_usecases[] = {
USECASE_AUDIO_PLAYBACK_MEDIA,
USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION,
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
old mode 100755
new mode 100644
index 756faf5..9a4a848
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -111,6 +111,11 @@
#define VNDK_FWK_LIB_PATH "/vendor/lib/libqti_vndfwk_detect.so"
#endif
+/* 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
+
typedef struct vndkfwk_s {
void *lib_handle;
int (*isVendorEnhancedFwk)(void);
@@ -750,6 +755,12 @@
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;
+ 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;
+ }
}
void audio_extn_utils_update_stream_output_app_type_cfg(void *platform,
@@ -838,6 +849,11 @@
app_type_cfg->app_type = platform_get_default_app_type(platform);
app_type_cfg->sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
app_type_cfg->bit_width = 16;
+ if (compare_device_type(devices, AUDIO_DEVICE_OUT_BUS) && (flags &
+ (audio_output_flags_t)AUDIO_OUTPUT_FLAG_FAST)) {
+ // Support low latency playback for different sample rates
+ app_type_cfg->sample_rate = sample_rate;
+ }
}
static bool audio_is_this_native_usecase(struct audio_usecase *uc)
@@ -1304,6 +1320,7 @@
{
char value[PROPERTY_VALUE_MAX] = {0};
int sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
+ int acdb_dev_id;
if ((usecase->type == PCM_PLAYBACK) && (usecase->stream.out != NULL)) {
property_get("vendor.audio.playback.mch.downsample",value,"");
@@ -1342,8 +1359,12 @@
usecase->stream.out->sample_rate == OUTPUT_SAMPLING_RATE_44100) ||
(usecase->stream.out->sample_rate < OUTPUT_SAMPLING_RATE_44100)) ||
(compare_device_type(&usecase->stream.out->device_list,AUDIO_DEVICE_OUT_SPEAKER))) {
- /* Reset to default if no native stream is active or default device is speaker*/
- usecase->stream.out->app_type_cfg.sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
+ 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)))) {
+ /* Reset to default if no native stream is active or default device is speaker*/
+ usecase->stream.out->app_type_cfg.sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
+ }
}
audio_extn_btsco_get_sample_rate(snd_device, &usecase->stream.out->app_type_cfg.sample_rate);
sample_rate = usecase->stream.out->app_type_cfg.sample_rate;
@@ -1378,6 +1399,15 @@
else
sample_rate = SAMPLE_RATE_8000;
}
+
+ /* 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)
+ */
+ 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);
+ }
} else if (usecase->type == TRANSCODE_LOOPBACK_RX) {
sample_rate = usecase->stream.inout->out_config.sample_rate;
}
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 9664b7e..beb7a69 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -314,6 +314,67 @@
.avail_min = ULL_PERIOD_SIZE, //1 ms
};
+struct pcm_config pcm_config_audio_capture_rt_48KHz = {
+ .channels = 2,
+ .rate = 48000,
+ .period_size = 48,
+ .period_count = 512,
+ .format = PCM_FORMAT_S16_LE,
+ .start_threshold = 0,
+ .stop_threshold = AFE_PROXY_RECORD_PERIOD_SIZE * AFE_PROXY_RECORD_PERIOD_COUNT,
+ .silence_threshold = 0,
+ .silence_size = 0,
+ .avail_min = 48, //1 ms
+};
+struct pcm_config pcm_config_audio_capture_rt_32KHz = {
+ .channels = 2,
+ .rate = 32000,
+ .period_size = 32,
+ .period_count = 512,
+ .format = PCM_FORMAT_S16_LE,
+ .start_threshold = 0,
+ .stop_threshold = AFE_PROXY_RECORD_PERIOD_SIZE * AFE_PROXY_RECORD_PERIOD_COUNT,
+ .silence_threshold = 0,
+ .silence_size = 0,
+ .avail_min = 32, //1 ms
+};
+struct pcm_config pcm_config_audio_capture_rt_24KHz = {
+ .channels = 2,
+ .rate = 24000,
+ .period_size = 24,
+ .period_count = 512,
+ .format = PCM_FORMAT_S16_LE,
+ .start_threshold = 0,
+ .stop_threshold = AFE_PROXY_RECORD_PERIOD_SIZE * AFE_PROXY_RECORD_PERIOD_COUNT,
+ .silence_threshold = 0,
+ .silence_size = 0,
+ .avail_min = 24, //1 ms
+};
+struct pcm_config pcm_config_audio_capture_rt_16KHz = {
+ .channels = 2,
+ .rate = 16000,
+ .period_size = 16,
+ .period_count = 512,
+ .format = PCM_FORMAT_S16_LE,
+ .start_threshold = 0,
+ .stop_threshold = AFE_PROXY_RECORD_PERIOD_SIZE * AFE_PROXY_RECORD_PERIOD_COUNT,
+ .silence_threshold = 0,
+ .silence_size = 0,
+ .avail_min = 16, //1 ms
+};
+struct pcm_config pcm_config_audio_capture_rt_8KHz = {
+ .channels = 2,
+ .rate = 8000,
+ .period_size = 8,
+ .period_count = 512,
+ .format = PCM_FORMAT_S16_LE,
+ .start_threshold = 0,
+ .stop_threshold = AFE_PROXY_RECORD_PERIOD_SIZE * AFE_PROXY_RECORD_PERIOD_COUNT,
+ .silence_threshold = 0,
+ .silence_size = 0,
+ .avail_min = 8, //1 ms
+};
+
struct pcm_config pcm_config_afe_proxy_record = {
.channels = AFE_PROXY_CHANNEL_COUNT,
.rate = AFE_PROXY_SAMPLING_RATE,
@@ -3114,7 +3175,11 @@
!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)) {
- usecase->stream.out->app_type_cfg.sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
+ 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;
+ }
}
}
enable_audio_route(adev, usecase);
@@ -4523,8 +4588,27 @@
uint32_t bytes_per_period_sample = 0;
size = (sample_rate * duration_ms) / 1000;
- if (is_low_latency)
- size = configured_low_latency_capture_period_size;
+ if (is_low_latency){
+ switch(sample_rate) {
+ case 48000:
+ size = 240;
+ break;
+ case 32000:
+ size = 160;
+ break;
+ case 24000:
+ size = 120;
+ break;
+ case 16000:
+ size = 80;
+ break;
+ case 8000:
+ size = 40;
+ break;
+ default:
+ size = 240;
+ }
+ }
bytes_per_period_sample = audio_bytes_per_sample(format) * channel_count;
size *= audio_bytes_per_sample(format) * channel_count;
@@ -9623,7 +9707,11 @@
}
}
- if (config->sample_rate == LOW_LATENCY_CAPTURE_SAMPLE_RATE &&
+ if ((config->sample_rate == 48000 ||
+ config->sample_rate == 32000 ||
+ config->sample_rate == 24000 ||
+ config->sample_rate == 16000 ||
+ config->sample_rate == 8000)&&
(flags & AUDIO_INPUT_FLAG_TIMESTAMP) == 0 &&
(flags & AUDIO_INPUT_FLAG_COMPRESS) == 0 &&
(flags & AUDIO_INPUT_FLAG_FAST) != 0) {
@@ -9647,7 +9735,26 @@
in->af_period_multiplier = 1;
} else {
// period size is left untouched for rt mode playback
- in->config = pcm_config_audio_capture_rt;
+ switch(config->sample_rate)
+ {
+ case 48000:
+ in->config = pcm_config_audio_capture_rt_48KHz;
+ break;
+ case 32000:
+ in->config = pcm_config_audio_capture_rt_32KHz;
+ break;
+ case 24000:
+ in->config = pcm_config_audio_capture_rt_24KHz;
+ break;
+ case 16000:
+ in->config = pcm_config_audio_capture_rt_16KHz;
+ break;
+ case 8000:
+ in->config = pcm_config_audio_capture_rt_8KHz;
+ break;
+ default:
+ in->config = pcm_config_audio_capture_rt_48KHz;
+ }
in->af_period_multiplier = af_period_multiplier;
}
}
@@ -9827,6 +9934,31 @@
}
}
}
+ if (in->realtime) {
+ switch(config->sample_rate)
+ {
+ case 48000:
+ in->config = pcm_config_audio_capture_rt_48KHz;
+ break;
+ case 32000:
+ in->config = pcm_config_audio_capture_rt_32KHz;
+ break;
+ case 24000:
+ in->config = pcm_config_audio_capture_rt_24KHz;
+ break;
+ case 16000:
+ in->config = pcm_config_audio_capture_rt_16KHz;
+ break;
+ case 8000:
+ in->config = pcm_config_audio_capture_rt_8KHz;
+ break;
+ default:
+ in->config = pcm_config_audio_capture_rt_48KHz;
+ }
+ in->config.format = pcm_format_from_audio_format(config->format);
+ in->af_period_multiplier = af_period_multiplier;
+ }
+
if (audio_extn_ssr_get_stream() != in)
in->config.channels = channel_count;