hal: Add support for 3-mic surround sound recording
Add support for stereo surround sound recording using 3 mics.
Change-Id: I741dd5507d72ac45dff8006d3875abe8dbdc2df2
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index a0f9206..5500ee3 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1057,6 +1057,10 @@
/* 2. Disable the tx device */
disable_snd_device(adev, uc_info->in_snd_device);
+ if (audio_extn_ssr_get_stream() == in) {
+ audio_extn_ssr_deinit();
+ }
+
list_remove(&uc_info->list);
free(uc_info);
@@ -2781,8 +2785,7 @@
adev->adm_request_focus(adev->adm_data, in->capture_handle);
if (in->pcm) {
- if (audio_extn_ssr_get_enabled() &&
- audio_channel_count_from_in_mask(in->channel_mask) == 6)
+ if (audio_extn_ssr_get_stream() == in)
ret = audio_extn_ssr_read(stream, buffer, bytes);
else if (audio_extn_compr_cap_usecase_supported(in->usecase))
ret = audio_extn_compr_cap_read(in, buffer, bytes);
@@ -3650,15 +3653,27 @@
in->config = pcm_config_afe_proxy_record;
in->config.channels = channel_count;
in->config.rate = config->sample_rate;
- } else if (channel_count == 6) {
- if(audio_extn_ssr_get_enabled()) {
- if(audio_extn_ssr_init(in)) {
- ALOGE("%s: audio_extn_ssr_init failed", __func__);
+ } else if (audio_extn_ssr_get_enabled() &&
+ ((channel_count == 2) || (channel_count == 6)) &&
+ ((AUDIO_SOURCE_MIC == source) || (AUDIO_SOURCE_CAMCORDER == source))) {
+ ALOGD("%s: Found SSR use case starting SSR lib with channel_count :%d",
+ __func__, channel_count);
+ if (audio_extn_ssr_init(in, channel_count)) {
+ ALOGE("%s: audio_extn_ssr_init failed", __func__);
+ if (channel_count == 2) {
+ ALOGD("%s: falling back to default record usecase", __func__);
+ in->config.channels = channel_count;
+ frame_size = audio_stream_in_frame_size(&in->stream);
+ buffer_size = get_input_buffer_size(config->sample_rate,
+ config->format,
+ channel_count,
+ is_low_latency);
+ in->config.period_size = buffer_size / frame_size;
+ } else {
+ ALOGD("%s: unable to start SSR record session for 6 channel input", __func__);
ret = -EINVAL;
goto err_open;
}
- } else {
- ALOGW("%s: surround sound recording is not supported", __func__);
}
} else if (audio_extn_compr_cap_enabled() &&
audio_extn_compr_cap_format_supported(config->format) &&
@@ -3717,8 +3732,7 @@
} else
in_standby(&stream->common);
- if (audio_extn_ssr_get_enabled() &&
- (audio_channel_count_from_in_mask(in->channel_mask) == 6)) {
+ if (audio_extn_ssr_get_stream() == in) {
audio_extn_ssr_deinit();
}