Merge "audio: derive sound device for concurrent playback usecases"
diff --git a/configs/msm8937/msm8937.mk b/configs/msm8937/msm8937.mk
index b7a7a39..3d932b0 100644
--- a/configs/msm8937/msm8937.mk
+++ b/configs/msm8937/msm8937.mk
@@ -147,9 +147,9 @@
PRODUCT_PROPERTY_OVERRIDES += \
audio.deep_buffer.media=true
-#Default pcm audio sink buffer size in msec. This is used in calculating framecount
+#QC property used when calculating client heap size in audio flinger
PRODUCT_PROPERTY_OVERRIDES += \
-media.stagefright.audio.sink=280
+audio.heap.size.multiplier=7
#enable voice path for PCM VoIP by default
PRODUCT_PROPERTY_OVERRIDES += \
diff --git a/configs/msm8953/msm8953.mk b/configs/msm8953/msm8953.mk
index 3106942..96c9a5d 100644
--- a/configs/msm8953/msm8953.mk
+++ b/configs/msm8953/msm8953.mk
@@ -148,9 +148,9 @@
PRODUCT_PROPERTY_OVERRIDES += \
audio.deep_buffer.media=true
-#Default pcm audio sink buffer size in msec. This is used in calculating framecount
+#QC property used when calculating client heap size in audio flinger
PRODUCT_PROPERTY_OVERRIDES += \
-media.stagefright.audio.sink=280
+audio.heap.size.multiplier=7
#enable voice path for PCM VoIP by default
PRODUCT_PROPERTY_OVERRIDES += \
diff --git a/configs/msm8996/msm8996.mk b/configs/msm8996/msm8996.mk
index 5b240e9..6d3fa4b 100644
--- a/configs/msm8996/msm8996.mk
+++ b/configs/msm8996/msm8996.mk
@@ -143,9 +143,9 @@
PRODUCT_PROPERTY_OVERRIDES += \
audio.deep_buffer.media=true
-#Default pcm audio sink buffer size in msec. This is used in calculating framecount
+#QC property used when calculating client heap size in audio flinger
PRODUCT_PROPERTY_OVERRIDES += \
-media.stagefright.audio.sink=280
+audio.heap.size.multiplier=7
#enable voice path for PCM VoIP by default
PRODUCT_PROPERTY_OVERRIDES += \
diff --git a/configs/msmcobalt/audio_platform_info.xml b/configs/msmcobalt/audio_platform_info.xml
index a1bd9a1..a8bce46 100644
--- a/configs/msmcobalt/audio_platform_info.xml
+++ b/configs/msmcobalt/audio_platform_info.xml
@@ -28,6 +28,9 @@
<acdb_ids>
<device name="SND_DEVICE_OUT_SPEAKER" acdb_id="15"/>
<device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" acdb_id="124"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_QMIC_FLUENCE" acdb_id="131"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_TMIC" acdb_id="131"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE" acdb_id="132"/>
</acdb_ids>
<bit_width_configs>
<device name="SND_DEVICE_OUT_SPEAKER" bit_width="24"/>
diff --git a/configs/msmcobalt/msmcobalt.mk b/configs/msmcobalt/msmcobalt.mk
index 12a922c..bdc3bf2 100644
--- a/configs/msmcobalt/msmcobalt.mk
+++ b/configs/msmcobalt/msmcobalt.mk
@@ -152,9 +152,9 @@
PRODUCT_PROPERTY_OVERRIDES += \
audio.deep_buffer.media=true
-#Default pcm audio sink buffer size in msec. This is used in calculating framecount
+#QC property used when calculating client heap size in audio flinger
PRODUCT_PROPERTY_OVERRIDES += \
-media.stagefright.audio.sink=280
+audio.heap.size.multiplier=7
#enable voice path for PCM VoIP by default
PRODUCT_PROPERTY_OVERRIDES += \
diff --git a/configs/msmfalcon/msmfalcon.mk b/configs/msmfalcon/msmfalcon.mk
index 554f32b..509c159 100644
--- a/configs/msmfalcon/msmfalcon.mk
+++ b/configs/msmfalcon/msmfalcon.mk
@@ -137,9 +137,9 @@
PRODUCT_PROPERTY_OVERRIDES += \
audio.deep_buffer.media=true
-#Default pcm audio sink buffer size in msec. This is used in calculating framecount
+#QC property used when calculating client heap size in audio flinger
PRODUCT_PROPERTY_OVERRIDES += \
-media.stagefright.audio.sink=280
+audio.heap.size.multiplier=7
#enable voice path for PCM VoIP by default
PRODUCT_PROPERTY_OVERRIDES += \
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index 9542fbd..eb3213c 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -666,6 +666,18 @@
if ((24 == usecase->stream.out->bit_width) &&
(usecase->stream.out->devices & AUDIO_DEVICE_OUT_SPEAKER)) {
usecase->stream.out->app_type_cfg.sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
+ } else if ((snd_device == SND_DEVICE_OUT_HDMI ||
+ snd_device == SND_DEVICE_OUT_USB_HEADSET ||
+ snd_device == SND_DEVICE_OUT_DISPLAY_PORT) &&
+ (usecase->stream.out->sample_rate >= OUTPUT_SAMPLING_RATE_44100)) {
+ /*
+ * To best utlize DSP, check if the stream sample rate is supported/multiple of
+ * configured device sample rate, if not update the COPP rate to be equal to the
+ * device sample rate, else open COPP at stream sample rate
+ */
+ platform_check_and_update_copp_sample_rate(adev->platform, snd_device,
+ usecase->stream.out->sample_rate,
+ &usecase->stream.out->app_type_cfg.sample_rate);
} else if ((snd_device != SND_DEVICE_OUT_HEADPHONES_44_1 &&
usecase->stream.out->sample_rate == OUTPUT_SAMPLING_RATE_44100) ||
(usecase->stream.out->sample_rate < OUTPUT_SAMPLING_RATE_44100)) {
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index fe533ac..f2a1ce4 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -5016,6 +5016,29 @@
return ret;
}
+void platform_check_and_update_copp_sample_rate(void* platform, snd_device_t snd_device,
+ unsigned int stream_sr, int* sample_rate)
+{
+ struct platform_data* my_data = (struct platform_data *)platform;
+ int backend_idx = platform_get_backend_index(snd_device);
+ int device_sr = my_data->current_backend_cfg[backend_idx].sample_rate;
+ /*Check if device SR is multiple of 8K or 11.025 Khz
+ *check if the stream SR is multiple of same base, if not set
+ *copp sample rate equal to device sample rate.
+ */
+ if (!(((sample_rate_multiple(device_sr, SAMPLE_RATE_8000)) &&
+ (sample_rate_multiple(stream_sr, SAMPLE_RATE_8000))) ||
+ ((sample_rate_multiple(device_sr, SAMPLE_RATE_11025)) &&
+ (sample_rate_multiple(stream_sr, SAMPLE_RATE_11025))))) {
+ *sample_rate = device_sr;
+ } else
+ *sample_rate = stream_sr;
+
+ ALOGI("sn_device %d device sr %d stream sr %d copp sr %d", snd_device, device_sr, stream_sr
+, *sample_rate);
+
+}
+
int platform_get_edid_info(void *platform)
{
struct platform_data *my_data = (struct platform_data *)platform;
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 697888e..324d5dc 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -5300,6 +5300,32 @@
return fragment_size;
}
+void platform_check_and_update_copp_sample_rate(void* platform, snd_device_t snd_device,
+ unsigned int stream_sr, int* sample_rate)
+{
+ struct platform_data* my_data = (struct platform_data *)platform;
+ int backend_idx = platform_get_backend_index(snd_device);
+ int device_sr = my_data->current_backend_cfg[backend_idx].sample_rate;
+ /*
+ *Check if device SR is multiple of 8K or 11.025 Khz
+ *check if the stream SR is multiple of same base, if yes
+ *then have copp SR equal to stream SR, this ensures that
+ *post processing happens at stream SR, else have
+ *copp SR equal to device SR.
+ */
+ if (!(((sample_rate_multiple(device_sr, SAMPLE_RATE_8000)) &&
+ (sample_rate_multiple(stream_sr, SAMPLE_RATE_8000))) ||
+ ((sample_rate_multiple(device_sr, SAMPLE_RATE_11025)) &&
+ (sample_rate_multiple(stream_sr, SAMPLE_RATE_11025))))) {
+ *sample_rate = device_sr;
+ } else
+ *sample_rate = stream_sr;
+
+ ALOGI("sn_device %d device sr %d stream sr %d copp sr %d", snd_device, device_sr, stream_sr
+, *sample_rate);
+
+}
+
void platform_reset_edid_info(void *platform) {
ALOGV("%s:", __func__);
diff --git a/hal/platform_api.h b/hal/platform_api.h
index 6e50e72..d3cb23f 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -25,7 +25,9 @@
#define CODEC_BACKEND_DEFAULT_SAMPLE_RATE 48000
#define CODEC_BACKEND_DEFAULT_CHANNELS 2
#define CODEC_BACKEND_DEFAULT_TX_CHANNELS 1
-
+#define SAMPLE_RATE_8000 8000
+#define SAMPLE_RATE_11025 11025
+#define sample_rate_multiple(sr, base) ((sr % base)== 0?true:false)
enum {
NATIVE_AUDIO_MODE_SRC = 1,
@@ -187,4 +189,6 @@
unsigned char* platform_get_license(void* platform, int* size);
int platform_get_max_mic_count(void *platform);
+void platform_check_and_update_copp_sample_rate(void *platform, snd_device_t snd_device,
+ unsigned int stream_sr,int *sample_rate);
#endif // AUDIO_PLATFORM_API_H