hal: Add support for ssr audio feature
Update audio HAL to support surround sound recording (5.1 channels)
Change-Id: I5b24340251b55ad5c602f2de0a0b4c7672ba729b
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index a101cfb..abda10c 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -774,7 +774,7 @@
{
if (format != AUDIO_FORMAT_PCM_16_BIT) return -EINVAL;
- if ((channel_count < 1) || (channel_count > 2)) return -EINVAL;
+ if ((channel_count < 1) || (channel_count > 6)) return -EINVAL;
switch (sample_rate) {
case 8000:
@@ -1223,7 +1223,10 @@
}
if (in->pcm) {
- ret = pcm_read(in->pcm, buffer, bytes);
+ if (audio_extn_ssr_get_enabled() && popcount(in->channel_mask) == 6)
+ ret = audio_extn_ssr_read(stream, buffer, bytes);
+ else
+ ret = pcm_read(in->pcm, buffer, bytes);
}
/*
@@ -1610,14 +1613,19 @@
/* Update config params with the requested sample rate and channels */
in->usecase = USECASE_AUDIO_RECORD;
in->config = pcm_config_audio_capture;
- in->config.channels = channel_count;
in->config.rate = config->sample_rate;
- frame_size = audio_stream_frame_size((struct audio_stream *)in);
- buffer_size = get_input_buffer_size(config->sample_rate,
- config->format,
- channel_count);
- in->config.period_size = buffer_size / frame_size;
+ if (audio_extn_ssr_get_enabled()&& channel_count == 6) {
+ if(audio_extn_ssr_init(adev, in))
+ ALOGE("%s: audio_extn_ssr_init failed", __func__);
+ } else {
+ in->config.channels = channel_count;
+ frame_size = audio_stream_frame_size((struct audio_stream *)in);
+ buffer_size = get_input_buffer_size(config->sample_rate,
+ config->format,
+ channel_count);
+ in->config.period_size = buffer_size / frame_size;
+ }
*stream_in = &in->stream;
ALOGV("%s: exit", __func__);
@@ -1632,9 +1640,13 @@
static void adev_close_input_stream(struct audio_hw_device *dev,
struct audio_stream_in *stream)
{
+ struct stream_in *in = (struct stream_in *)stream;
ALOGV("%s", __func__);
in_standby(&stream->common);
+ if (audio_extn_ssr_get_enabled() && (popcount(in->channel_mask) == 6)) {
+ audio_extn_ssr_deinit();
+ }
free(stream);
return;