Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d10f0e43 authored by François Gaffie's avatar François Gaffie
Browse files

Revert^2 audiopolicy: cap engine: fallback on default configuration



As default engine, allow to fallback on default config if the Cap Engine
could not find its top configuration file.

Bug: 379596346
Test: atest audiorouting_tests
atest audiosystem_tests
atest audiopolicy_tests
(with lunch target aosp_cf_x86_64_only_phone and
 aosp_cf_x86_64_auto migrated on cap engine)

Change-Id: I601d95e02677c2ae82f2d03ec0b0d7fd2e3eb65a
Signed-off-by: default avatarFrançois Gaffie <francois.gaffie@ampere.cars>
parent 07d755f6
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -178,6 +178,8 @@ public:

    void updateDeviceSelectionCache() override;

    engineConfig::ParsingResult parseAndSetDefaultConfiguration();

protected:
    DeviceVector getPreferredAvailableDevicesForProductStrategy(
        const DeviceVector& availableOutputDevices, product_strategy_t strategy) const;
+13 −4
Original line number Diff line number Diff line
@@ -125,6 +125,18 @@ std::string EngineBase::getProductStrategyName(product_strategy_t id) const {
    return "";
}

engineConfig::ParsingResult EngineBase::parseAndSetDefaultConfiguration() {
    mProductStrategies.clear();
    mVolumeGroups.clear();
    engineConfig::Config config = gDefaultEngineConfig;
    android::status_t ret = engineConfig::parseLegacyVolumes(config.volumeGroups);
    if (ret != NO_ERROR) {
        ALOGD("%s: No legacy volume group found, using default music group", __FUNCTION__);
        config.volumeGroups = gDefaultVolumeGroups;
    }
    return processParsingResult({std::make_unique<engineConfig::Config>(config), 1});
}

engineConfig::ParsingResult EngineBase::loadAudioPolicyEngineConfig(
        const media::audio::common::AudioHalEngineConfig& aidlConfig, bool)
{
@@ -154,10 +166,7 @@ engineConfig::ParsingResult EngineBase::loadAudioPolicyEngineConfig(
            engineConfig::parse(filePath.c_str(), isConfigurable) : engineConfig::ParsingResult{};
    if (result.parsedConfig == nullptr) {
        ALOGD("%s: No configuration found, using default matching phone experience.", __FUNCTION__);
        engineConfig::Config config = gDefaultEngineConfig;
        android::status_t ret = engineConfig::parseLegacyVolumes(config.volumeGroups);
        result = {std::make_unique<engineConfig::Config>(config),
                  static_cast<size_t>(ret == NO_ERROR ? 0 : 1)};
        return parseAndSetDefaultConfiguration();
    } else {
        // Append for internal use only volume groups (e.g. rerouting/patch)
        result.parsedConfig->volumeGroups.insert(
+13 −1
Original line number Diff line number Diff line
@@ -183,11 +183,23 @@ const engineConfig::VolumeGroups gSystemVolumeGroups = {
    }
};

const engineConfig::VolumeGroups gDefaultVolumeGroups = {
    {"AUDIO_STREAM_MUSIC", 0, 15,
     {
        {"DEVICE_CATEGORY_SPEAKER", {{0,0}, {100, 15}}},
        {"DEVICE_CATEGORY_HEADSET", {{0,0}, {100, 15}}},
        {"DEVICE_CATEGORY_EARPIECE", {{0,0}, {100, 15}}},
        {"DEVICE_CATEGORY_EXT_MEDIA", {{0,0}, {100, 15}}},
        {"DEVICE_CATEGORY_HEARING_AID", {{0,0}, {100, 15}}},
     }
    },
};

const engineConfig::Config gDefaultEngineConfig = {
    1.0,
    gOrderedStrategies,
    {},
    {},
    {}
    {},
};
} // namespace android
+1 −0
Original line number Diff line number Diff line
@@ -309,6 +309,7 @@ volume_group_t ProductStrategyMap::getDefaultVolumeGroup() const

void ProductStrategyMap::initialize()
{
    mDefaultStrategy = PRODUCT_STRATEGY_NONE;
    mDefaultStrategy = getDefault();
    ALOG_ASSERT(mDefaultStrategy != PRODUCT_STRATEGY_NONE, "No default product strategy found");
}
+8 −6
Original line number Diff line number Diff line
@@ -99,9 +99,10 @@ status_t Engine::loadFromHalConfigWithFallback(
    };
    loadCriteria(capResult.parsedConfig->capCriteria);
    std::string error;
    if (mPolicyParameterMgr == nullptr || mPolicyParameterMgr->start(error) != NO_ERROR) {
        ALOGE("%s: could not start Policy PFW: %s", __FUNCTION__, error.c_str());
        return NO_INIT;
    if (mPolicyParameterMgr->start(error) != NO_ERROR) {
        ALOGE("%s: could not start Policy PFW: %s, fallback on default", __func__ , error.c_str());
        auto result = parseAndSetDefaultConfiguration();
        return result.nbSkippedElement == 0 ? NO_ERROR : BAD_VALUE;
    }
    return mPolicyParameterMgr->setConfiguration(capResult);
#endif
@@ -112,9 +113,10 @@ status_t Engine::loadFromXmlConfigWithFallback(const std::string& xmlFilePath)
    mPolicyParameterMgr = new ParameterManagerWrapper(/* useLegacyVendorFile= */ true);
    status_t status = loadWithFallback(xmlFilePath);
    std::string error;
    if (mPolicyParameterMgr == nullptr || mPolicyParameterMgr->start(error) != NO_ERROR) {
        ALOGE("%s: could not start Policy PFW: %s", __FUNCTION__, error.c_str());
        return NO_INIT;
    if (mPolicyParameterMgr->start(error) != NO_ERROR) {
        ALOGE("%s: could not start Policy PFW: %s, fallback on default", __func__ , error.c_str());
        auto result = parseAndSetDefaultConfiguration();
        return result.nbSkippedElement == 0 ? NO_ERROR : BAD_VALUE;
    }
    return status;
}
Loading