audio: remove 5.1 channel mask if SSR is not supported
- remove 5.1 input channel mask if it cannot be
supported on a chipset variant.
Change-Id: Ifd5254da910e392a270067c36c31c5cfaa75f9fc
diff --git a/policy_hal/AudioPolicyManager.cpp b/policy_hal/AudioPolicyManager.cpp
index b0707d7..7d3d82e 100644
--- a/policy_hal/AudioPolicyManager.cpp
+++ b/policy_hal/AudioPolicyManager.cpp
@@ -1920,6 +1920,37 @@
mHdmiAudioEvent(false),
mPrevPhoneState(0)
{
+ char ssr_enabled[PROPERTY_VALUE_MAX] = {0};
+ bool prop_ssr_enabled = false;
+
+ if (property_get("ro.qc.sdk.audio.ssr", ssr_enabled, NULL)) {
+ prop_ssr_enabled = atoi(ssr_enabled) || !strncmp("true", ssr_enabled, 4);
+ }
+
+ for (size_t i = 0; i < mHwModules.size(); i++) {
+ ALOGV("Hw module %d", i);
+ for (size_t j = 0; j < mHwModules[i]->mInputProfiles.size(); j++) {
+ const sp<IOProfile> inProfile = mHwModules[i]->mInputProfiles[j];
+ ALOGV("Input profile ", j);
+ for (size_t k = 0; k < inProfile->mChannelMasks.size(); k++) {
+ audio_channel_mask_t channelMask =
+ inProfile->mChannelMasks.itemAt(k);
+ ALOGV("Channel Mask %x size %d", channelMask,
+ inProfile->mChannelMasks.size());
+ if (AUDIO_CHANNEL_IN_5POINT1 == channelMask) {
+ if (!prop_ssr_enabled) {
+ ALOGI("removing AUDIO_CHANNEL_IN_5POINT1 from"
+ " input profile as SSR(surround sound record)"
+ " is not supported on this chipset variant");
+ inProfile->mChannelMasks.removeItemsAt(k, 1);
+ ALOGV("Channel Mask size now %d",
+ inProfile->mChannelMasks.size());
+ }
+ }
+ }
+ }
+ }
+
#ifdef RECORD_PLAY_CONCURRENCY
mIsInputRequestOnProgress = false;
#endif