Merge "Align AIDL HAL config reporting with legacy" into main
diff --git a/media/libaudiohal/impl/DevicesFactoryHalAidl.cpp b/media/libaudiohal/impl/DevicesFactoryHalAidl.cpp
index f00b1a0..a8f9f7e 100644
--- a/media/libaudiohal/impl/DevicesFactoryHalAidl.cpp
+++ b/media/libaudiohal/impl/DevicesFactoryHalAidl.cpp
@@ -14,7 +14,10 @@
* limitations under the License.
*/
+#include <algorithm>
+#include <map>
#include <memory>
+#include <string>
#define LOG_TAG "DevicesFactoryHalAidl"
//#define LOG_NDEBUG 0
@@ -75,6 +78,21 @@
if (strcmp(instance, "default") == 0) instance = "primary";
static_cast<decltype(names)>(context)->push_back(instance);
});
+ std::sort(names->begin(), names->end(), [](const std::string& lhs,
+ const std::string& rhs) {
+ // This order corresponds to the canonical order of modules as specified in
+ // the reference 'audio_policy_configuration_7_0.xml' file.
+ static const std::map<std::string, int> kPriorities{
+ { "primary", 0 }, { "a2dp", 1 }, { "usb", 2 }, { "r_submix", 3 },
+ { "bluetooth", 4 }, { "hearing_aid", 5 }, { "msd", 6 }, { "stub", 7 }
+ };
+ auto lhsIt = kPriorities.find(lhs);
+ auto rhsIt = kPriorities.find(rhs);
+ if (lhsIt != kPriorities.end() && rhsIt != kPriorities.end()) {
+ return lhsIt->second < rhsIt->second;
+ }
+ return lhsIt != kPriorities.end();
+ });
return OK;
}
diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioPolicyConfig.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioPolicyConfig.cpp
index e214ae9..8c7a7de 100644
--- a/services/audiopolicy/common/managerdefinitions/src/AudioPolicyConfig.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/AudioPolicyConfig.cpp
@@ -89,7 +89,12 @@
if (aidlPort.ext.getTag() == AudioPortExt::mix) {
auto mixPort = sp<IOProfile>::make("", AUDIO_PORT_ROLE_NONE);
RETURN_STATUS_IF_ERROR(mixPort->readFromParcelable(fwPort));
- sortAudioProfiles(mixPort->getAudioProfiles());
+ auto& profiles = mixPort->getAudioProfiles();
+ if (profiles.empty()) {
+ profiles.add(AudioProfile::createFullDynamic(gDynamicFormat));
+ } else {
+ sortAudioProfiles(mixPort->getAudioProfiles());
+ }
mixPorts.add(mixPort);
ports.emplace(aidlPort.id, mixPort);
} else if (aidlPort.ext.getTag() == AudioPortExt::device) {