hal: Add support for compressed capture
- Add support for AMR-WB compressed capture.
Change-Id: Ief591c5d1ccc6f8afb408abfff447787ee7bd7aa
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 9b59e4a..873e5e2 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -105,6 +105,7 @@
[USECASE_AUDIO_PLAYBACK_MULTI_CH] = "multi-channel-playback",
[USECASE_AUDIO_PLAYBACK_OFFLOAD] = "compress-offload-playback",
[USECASE_AUDIO_RECORD] = "audio-record",
+ [USECASE_AUDIO_RECORD_COMPRESS] = "audio-record-compress",
[USECASE_AUDIO_RECORD_LOW_LATENCY] = "low-latency-record",
[USECASE_AUDIO_RECORD_FM_VIRTUAL] = "fm-virtual-record",
[USECASE_AUDIO_PLAYBACK_FM] = "play-fm",
@@ -741,7 +742,7 @@
struct audio_usecase *uc_info;
struct audio_device *adev = in->dev;
- in->usecase = platform_get_usecase_from_source(in->source);
+ in->usecase = platform_update_usecase_from_source(in->source,in->usecase);
ALOGV("%s: enter: usecase(%d)", __func__, in->usecase);
/* Check if source matches incall recording usecase criteria */
@@ -1126,7 +1127,8 @@
int ret = 0;
if ((format != AUDIO_FORMAT_PCM_16_BIT) &&
- !voice_extn_compress_voip_is_format_supported(format)) ret = -EINVAL;
+ !voice_extn_compress_voip_is_format_supported(format) &&
+ !audio_extn_compr_cap_format_supported(format)) ret = -EINVAL;
switch (channel_count) {
case 1:
@@ -1714,6 +1716,8 @@
if(in->usecase == USECASE_COMPRESS_VOIP_CALL)
return voice_extn_compress_voip_in_get_buffer_size(in);
+ else if(audio_extn_compr_cap_usecase_supported(in->usecase))
+ return audio_extn_compr_cap_get_buffer_size(in->config.format);
return in->config.period_size * audio_stream_frame_size(stream);
}
@@ -1865,6 +1869,8 @@
if (in->pcm) {
if (audio_extn_ssr_get_enabled() && popcount(in->channel_mask) == 6)
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);
else
ret = pcm_read(in->pcm, buffer, bytes);
}
@@ -2383,8 +2389,7 @@
__func__, ret);
goto err_open;
}
- }
- if (channel_count == 6) {
+ } else if (channel_count == 6) {
if(audio_extn_ssr_get_enabled()) {
if(audio_extn_ssr_init(adev, in)) {
ALOGE("%s: audio_extn_ssr_init failed", __func__);
@@ -2395,6 +2400,9 @@
ret = -EINVAL;
goto err_open;
}
+ } else if (audio_extn_compr_cap_enabled() &&
+ audio_extn_compr_cap_format_supported(config->format)) {
+ audio_extn_compr_cap_init(adev, in);
} else {
in->config.channels = channel_count;
frame_size = audio_stream_frame_size((struct audio_stream *)in);
@@ -2434,6 +2442,9 @@
}
free(stream);
+ if(audio_extn_compr_cap_enabled() &&
+ audio_extn_compr_cap_format_supported(in->config.format))
+ audio_extn_compr_cap_deinit();
return;
}