From 1e25ef808f5e6a29d2a889213f4b42cf58ecdc29 Mon Sep 17 00:00:00 2001 From: Mikhail Naganov Date: Wed, 23 Aug 2023 14:11:42 -0700 Subject: [PATCH] audio: Make IConfig.getSurroundSound default implementation more robust In the case when there is a problem with the legacy APM XML file, the converter provides a default surround sound config. However, the default implementation of IConfig::getSurroundSoundConfig did not take an advantage of that, and was returning an empty config, which is not accepted by VTS. Also, improve logging messages: clarify the situation when no readable audio policy XML file found, and use outer functions name for lambdas. Bug: 293978054 Test: atest VtsHalAudioCoreTargetTest Change-Id: Iae069a0498009605ef5ededb9c9112efab08548a --- audio/aidl/default/Config.cpp | 18 +++++++++--------- .../default/include/core-impl/XmlConverter.h | 12 +++++++++--- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/audio/aidl/default/Config.cpp b/audio/aidl/default/Config.cpp index d1023da6f5..308200abf6 100644 --- a/audio/aidl/default/Config.cpp +++ b/audio/aidl/default/Config.cpp @@ -27,12 +27,11 @@ using aidl::android::media::audio::common::AudioHalEngineConfig; namespace aidl::android::hardware::audio::core { ndk::ScopedAStatus Config::getSurroundSoundConfig(SurroundSoundConfig* _aidl_return) { + static const auto& func = __func__; static const SurroundSoundConfig surroundSoundConfig = [this]() { - SurroundSoundConfig surroundCfg; - if (mAudioPolicyConverter.getStatus() == ::android::OK) { - surroundCfg = mAudioPolicyConverter.getSurroundSoundConfig(); - } else { - LOG(WARNING) << __func__ << mAudioPolicyConverter.getError(); + SurroundSoundConfig surroundCfg = mAudioPolicyConverter.getSurroundSoundConfig(); + if (mAudioPolicyConverter.getStatus() != ::android::OK) { + LOG(WARNING) << func << ": " << mAudioPolicyConverter.getError(); } return surroundCfg; }(); @@ -42,21 +41,22 @@ ndk::ScopedAStatus Config::getSurroundSoundConfig(SurroundSoundConfig* _aidl_ret } ndk::ScopedAStatus Config::getEngineConfig(AudioHalEngineConfig* _aidl_return) { + static const auto& func = __func__; static const AudioHalEngineConfig returnEngCfg = [this]() { AudioHalEngineConfig engConfig; if (mEngConfigConverter.getStatus() == ::android::OK) { engConfig = mEngConfigConverter.getAidlEngineConfig(); } else { - LOG(INFO) << __func__ << mEngConfigConverter.getError(); + LOG(INFO) << func << ": " << mEngConfigConverter.getError(); if (mAudioPolicyConverter.getStatus() == ::android::OK) { engConfig = mAudioPolicyConverter.getAidlEngineConfig(); } else { - LOG(WARNING) << __func__ << mAudioPolicyConverter.getError(); + LOG(WARNING) << func << ": " << mAudioPolicyConverter.getError(); } } // Logging full contents of the config is an overkill, just provide statistics. - LOG(DEBUG) << "getEngineConfig: number of strategies parsed: " - << engConfig.productStrategies.size() + LOG(DEBUG) << func + << ": number of strategies parsed: " << engConfig.productStrategies.size() << ", default strategy: " << engConfig.defaultProductStrategyId << ", number of volume groups parsed: " << engConfig.volumeGroups.size(); return engConfig; diff --git a/audio/aidl/default/include/core-impl/XmlConverter.h b/audio/aidl/default/include/core-impl/XmlConverter.h index a68a6fdde9..383ea24836 100644 --- a/audio/aidl/default/include/core-impl/XmlConverter.h +++ b/audio/aidl/default/include/core-impl/XmlConverter.h @@ -53,10 +53,16 @@ class XmlConverter { const ::android::status_t& status) { std::string errorMessage; if (status != ::android::OK) { - if (!isReadableConfigFile) { - errorMessage = "Could not read requested config file:" + configFilePath; + if (configFilePath.empty()) { + errorMessage = "No audio configuration files found"; + } else if (!isReadableConfigFile) { + errorMessage = std::string("Could not read requested XML config file: \"") + .append(configFilePath) + .append("\""); } else { - errorMessage = "Invalid config file: " + configFilePath; + errorMessage = std::string("Invalid XML config file: \"") + .append(configFilePath) + .append("\""); } } return errorMessage;