Merge "hal : Fix data initialization and input validation errors" into av-userspace.lnx.1.0-dev.1.0
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
old mode 100644
new mode 100755
index f18d4cf..d7a3169
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -2782,7 +2782,8 @@
if ((in->source == AUDIO_SOURCE_VOICE_COMMUNICATION) &&
(in->dev->mode == AUDIO_MODE_IN_COMMUNICATION) &&
(voice_extn_compress_voip_is_format_supported(in->format)) &&
- (in->config.rate == 8000 || in->config.rate == 16000) &&
+ (in->config.rate == 8000 || in->config.rate == 16000 ||
+ in->config.rate == 32000 || in->config.rate == 48000 ) &&
(audio_channel_count_from_in_mask(in->channel_mask) == 1)) {
err = voice_extn_compress_voip_open_input_stream(in);
if (err != 0) {
@@ -3786,7 +3787,8 @@
if ((in->source == AUDIO_SOURCE_VOICE_COMMUNICATION) &&
(in->dev->mode == AUDIO_MODE_IN_COMMUNICATION) &&
(voice_extn_compress_voip_is_format_supported(in->format)) &&
- (in->config.rate == 8000 || in->config.rate == 16000) &&
+ (in->config.rate == 8000 || in->config.rate == 16000 ||
+ in->config.rate == 32000 || in->config.rate == 48000) &&
(audio_channel_count_from_in_mask(in->channel_mask) == 1)) {
voice_extn_compress_voip_open_input_stream(in);
}
diff --git a/hal/voice_extn/compress_voip.c b/hal/voice_extn/compress_voip.c
index 61a7f3e..7404617 100644
--- a/hal/voice_extn/compress_voip.c
+++ b/hal/voice_extn/compress_voip.c
@@ -38,6 +38,8 @@
#define COMPRESS_VOIP_IO_BUF_SIZE_NB 320
#define COMPRESS_VOIP_IO_BUF_SIZE_WB 640
+#define COMPRESS_VOIP_IO_BUF_SIZE_SWB 1280
+#define COMPRESS_VOIP_IO_BUF_SIZE_FB 1920
struct pcm_config pcm_config_voip_nb = {
.channels = 1,
@@ -55,6 +57,22 @@
.format = PCM_FORMAT_S16_LE,
};
+struct pcm_config pcm_config_voip_swb = {
+ .channels = 1,
+ .rate = 32000, /* changed when the stream is opened */
+ .period_size = COMPRESS_VOIP_IO_BUF_SIZE_SWB/2,
+ .period_count = 10,
+ .format = PCM_FORMAT_S16_LE,
+};
+
+struct pcm_config pcm_config_voip_fb = {
+ .channels = 1,
+ .rate = 48000, /* changed when the stream is opened */
+ .period_size = COMPRESS_VOIP_IO_BUF_SIZE_FB/2,
+ .period_count = 10,
+ .format = PCM_FORMAT_S16_LE,
+};
+
struct voip_data {
struct pcm *pcm_rx;
struct pcm *pcm_tx;
@@ -467,15 +485,24 @@
int voice_extn_compress_voip_out_get_buffer_size(struct stream_out *out)
{
- if (out->config.rate == 16000)
+ if (out->config.rate == 48000)
+ return COMPRESS_VOIP_IO_BUF_SIZE_FB;
+ else if (out->config.rate== 32000)
+ return COMPRESS_VOIP_IO_BUF_SIZE_SWB;
+ else if (out->config.rate == 16000)
return COMPRESS_VOIP_IO_BUF_SIZE_WB;
else
return COMPRESS_VOIP_IO_BUF_SIZE_NB;
+
}
int voice_extn_compress_voip_in_get_buffer_size(struct stream_in *in)
{
- if (in->config.rate == 16000)
+ if (in->config.rate == 48000)
+ return COMPRESS_VOIP_IO_BUF_SIZE_FB;
+ else if (in->config.rate== 32000)
+ return COMPRESS_VOIP_IO_BUF_SIZE_SWB;
+ else if (in->config.rate == 16000)
return COMPRESS_VOIP_IO_BUF_SIZE_WB;
else
return COMPRESS_VOIP_IO_BUF_SIZE_NB;
@@ -570,7 +597,11 @@
out->supported_channel_masks[0] = AUDIO_CHANNEL_OUT_MONO;
out->channel_mask = AUDIO_CHANNEL_OUT_MONO;
out->usecase = USECASE_COMPRESS_VOIP_CALL;
- if (out->sample_rate == 16000)
+ if (out->sample_rate == 48000)
+ out->config = pcm_config_voip_fb;
+ else if (out->sample_rate == 32000)
+ out->config = pcm_config_voip_swb;
+ else if (out->sample_rate == 16000)
out->config = pcm_config_voip_wb;
else
out->config = pcm_config_voip_nb;
@@ -624,7 +655,11 @@
goto done;
in->usecase = USECASE_COMPRESS_VOIP_CALL;
- if (in->config.rate == 16000)
+ if (in->config.rate == 48000)
+ in->config = pcm_config_voip_fb;
+ else if (in->config.rate == 32000)
+ in->config = pcm_config_voip_swb;
+ else if (in->config.rate == 16000)
in->config = pcm_config_voip_wb;
else
in->config = pcm_config_voip_nb;
@@ -716,7 +751,8 @@
ret = voice_extn_compress_voip_is_format_supported(config->format);
if (ret) {
if ((popcount(config->channel_mask) == 1) &&
- (config->sample_rate == 8000 || config->sample_rate == 16000))
+ (config->sample_rate == 8000 || config->sample_rate == 16000 ||
+ config->sample_rate == 32000 || config->sample_rate == 48000))
ret = ((voip_data.sample_rate == 0) ? true:
(voip_data.sample_rate == config->sample_rate));
else
diff --git a/policy_hal/AudioPolicyManager.cpp b/policy_hal/AudioPolicyManager.cpp
index 661c0b5..6ba5fdd 100644
--- a/policy_hal/AudioPolicyManager.cpp
+++ b/policy_hal/AudioPolicyManager.cpp
@@ -1422,7 +1422,8 @@
if ((stream == AUDIO_STREAM_VOICE_CALL) &&
(channelMask == 1) &&
- (samplingRate == 8000 || samplingRate == 16000)) {
+ (samplingRate == 8000 || samplingRate == 16000 ||
+ samplingRate == 32000 || samplingRate == 48000)) {
// Allow Voip direct output only if:
// audio mode is MODE_IN_COMMUNCATION; AND
// voip output is not opened already; AND