AudioPolicy: Add stereo spatialization support
Test: adb shell setprop persist.device_config.aconfig_flags.media_audio.com.android.media.audio.stereo_spatialization true
Test: adb shell pkill audioserver
Test: adb shell dumpsys media.audio_policy
Bug: 303920722
Change-Id: Icb91f84802e8cb62a5c93dcf339fcf51424dd78f
diff --git a/services/audiopolicy/managerdefault/Android.bp b/services/audiopolicy/managerdefault/Android.bp
index a1785da..b4f71ae 100644
--- a/services/audiopolicy/managerdefault/Android.bp
+++ b/services/audiopolicy/managerdefault/Android.bp
@@ -22,6 +22,7 @@
export_include_dirs: ["."],
shared_libs: [
+ "com.android.media.audio-aconfig-cc",
"libaudiofoundation",
"libaudiopolicycomponents",
"libcutils",
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index 7e11204..2e13178 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -41,6 +41,7 @@
#include <Serializer.h>
#include <android/media/audio/common/AudioPort.h>
+#include <com_android_media_audio.h>
#include <cutils/bitops.h>
#include <cutils/properties.h>
#include <media/AudioParameter.h>
@@ -5970,7 +5971,11 @@
// some positional channel masks and PCM format
if (config != nullptr && *config != AUDIO_CONFIG_INITIALIZER) {
- if (!audio_is_channel_mask_spatialized(config->channel_mask)) {
+ const bool channel_mask_spatialized =
+ com_android_media_audio_stereo_spatialization()
+ ? audio_channel_mask_contains_stereo(config->channel_mask)
+ : audio_is_channel_mask_spatialized(config->channel_mask);
+ if (!channel_mask_spatialized) {
return false;
}
if (!audio_is_linear_pcm(config->format)) {
diff --git a/services/audiopolicy/service/Spatializer.cpp b/services/audiopolicy/service/Spatializer.cpp
index 90418a5..d550fe5 100644
--- a/services/audiopolicy/service/Spatializer.cpp
+++ b/services/audiopolicy/service/Spatializer.cpp
@@ -394,7 +394,11 @@
return status;
}
for (const auto channelMask : channelMasks) {
- if (!audio_is_channel_mask_spatialized(channelMask)) {
+ const bool channel_mask_spatialized =
+ com_android_media_audio_stereo_spatialization()
+ ? audio_channel_mask_contains_stereo(channelMask)
+ : audio_is_channel_mask_spatialized(channelMask);
+ if (!channel_mask_spatialized) {
ALOGW("%s: ignoring channelMask:%#x", __func__, channelMask);
continue;
}
@@ -1239,6 +1243,10 @@
base::StringAppendF(&ss, "%sDisplayOrientation: %f\n", prefixSpace.c_str(),
mDisplayOrientation);
+ // 4. Show flag or property state.
+ base::StringAppendF(&ss, "%sStereo Spatialization: %s\n", prefixSpace.c_str(),
+ com_android_media_audio_stereo_spatialization() ? "true" : "false");
+
ss.append(prefixSpace + "CommandLog:\n");
ss += mLocalLog.dumpToString((prefixSpace + " ").c_str(), mMaxLocalLogLine);