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

Commit e3e403d4 authored by Shunkai Yao's avatar Shunkai Yao
Browse files

Move EffectsConfig loading in AudioPolicyEffects to libAudioHal

For HIDL, the EffectsConfig result based on config xml parsing.
For AIDL, the EffectsConfig result based on IFactory interface.

Bug: 261129656
Test: m on aosp_cf_x86_64_phone-userdebug and Pixel 6a
Test: atest audiopolicy_tests
Test: flash to Pixel 6a and test with audio effect enabled

Change-Id: I7ffecbf3e2557a74563f000b514f42c37ef9c4d4
parent edbcc177
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -74,6 +74,12 @@ cc_library_shared {
cc_library_headers {
    name: "libaudiohal_headers",

    header_libs: [
        "libeffectsconfig_headers",
    ],

    export_header_lib_headers: ["libeffectsconfig_headers"],

    export_include_dirs: ["include"],
}

+3 −1
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ cc_defaults {
        "android.hidl.allocator@1.0",
        "android.hidl.memory@1.0",
        "libaudiohal_deathhandler",
        "libeffectsconfig",
        "libhidlbase",
        "libhidlmemory",
    ],
@@ -281,15 +282,16 @@ cc_library_shared {
        "android.hardware.common.fmq-V1-ndk",
    ],
    shared_libs: [
        "libbinder_ndk",
        "libaudio_aidl_conversion_common_cpp",
        "libaudio_aidl_conversion_common_ndk",
        "libaudio_aidl_conversion_core_ndk",
        "libaudio_aidl_conversion_effect_ndk",
        "libaudioaidlcommon",
        "libbinder_ndk",
    ],
    header_libs: [
        "libaudio_system_headers",
        "libeffectsconfig_headers",
    ],
    cflags: [
        "-Wall",
+14 −6
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
//#define LOG_NDEBUG 0

#include <error/expected_utils.h>
#include <aidl/android/media/audio/common/AudioStreamType.h>
#include <android/binder_manager.h>
#include <media/AidlConversionCppNdk.h>
#include <media/AidlConversionEffect.h>
@@ -35,11 +36,13 @@
#include "EffectsFactoryHalAidl.h"

using ::aidl::android::legacy2aidl_audio_uuid_t_AudioUuid;
using aidl::android::aidl_utils::statusTFromBinderStatus;
using aidl::android::hardware::audio::effect::Descriptor;
using aidl::android::hardware::audio::effect::IFactory;
using aidl::android::media::audio::common::AudioUuid;
using android::detail::AudioHalVersionInfo;
using ::aidl::android::aidl_utils::statusTFromBinderStatus;
using ::aidl::android::hardware::audio::effect::Descriptor;
using ::aidl::android::hardware::audio::effect::IFactory;
using ::aidl::android::hardware::audio::effect::Processing;
using ::aidl::android::media::audio::common::AudioUuid;
using ::android::base::unexpected;
using ::android::detail::AudioHalVersionInfo;

namespace android {
namespace effect {
@@ -92,7 +95,8 @@ EffectsFactoryHalAidl::EffectsFactoryHalAidl(std::shared_ptr<IFactory> effectsFa
                       [](const Descriptor& desc) { return !desc.common.id.proxy.has_value(); });
          return list;
      }()),
      mEffectCount(mNonProxyDescList.size() + mProxyDescList.size()) {
      mEffectCount(mNonProxyDescList.size() + mProxyDescList.size()),
      mEffectProcessings(INVALID_EFFECT_PROCESSING) {
    ALOG_ASSERT(mFactory != nullptr, "Provided IEffectsFactory service is NULL");
    ALOGI("%s with %zu nonProxyEffects and %zu proxyEffects", __func__, mNonProxyDescList.size(),
          mProxyDescList.size());
@@ -269,6 +273,10 @@ bool EffectsFactoryHalAidl::isProxyEffect(const AudioUuid& uuid) const {
    return 0 != mUuidProxyMap.count(uuid);
}

const effectsConfig::EffectProcessings& EffectsFactoryHalAidl::getProcessings() const {
    return mEffectProcessings;
}

} // namespace effect

// When a shared library is built from a static library, even explicit
+4 −0
Original line number Diff line number Diff line
@@ -62,6 +62,8 @@ class EffectsFactoryHalAidl final : public EffectsFactoryHalInterface {

    detail::AudioHalVersionInfo getHalVersion() const override;

    const effectsConfig::EffectProcessings& getProcessings() const override;

  private:
    const std::shared_ptr<IFactory> mFactory;
    const detail::AudioHalVersionInfo mHalVersion;
@@ -77,6 +79,8 @@ class EffectsFactoryHalAidl final : public EffectsFactoryHalInterface {
    const std::vector<Descriptor> mNonProxyDescList;
    // total number of effects including proxy effects
    const size_t mEffectCount;
    // Query result and all processing from effect factory
    const effectsConfig::EffectProcessings mEffectProcessings;

    std::mutex mLock;
    uint64_t mEffectIdCounter GUARDED_BY(mLock) = 0;  // Align with HIDL (0 is INVALID_ID)
+17 −2
Original line number Diff line number Diff line
@@ -33,10 +33,11 @@

#include "android/media/AudioHalVersion.h"

using ::android::base::unexpected;
using ::android::detail::AudioHalVersionInfo;
using ::android::hardware::Return;
using ::android::hardware::audio::common::CPP_VERSION::implementation::UuidUtils;
using ::android::hardware::audio::effect::CPP_VERSION::implementation::EffectUtils;
using ::android::hardware::Return;

namespace android {
namespace effect {
@@ -78,7 +79,17 @@ EffectDescriptorCache::QueryResult EffectDescriptorCache::queryAllDescriptors(
}

EffectsFactoryHalHidl::EffectsFactoryHalHidl(sp<IEffectsFactory> effectsFactory)
        : EffectConversionHelperHidl("EffectsFactory"), mCache(new EffectDescriptorCache) {
    : EffectConversionHelperHidl("EffectsFactory"),
      mCache(new EffectDescriptorCache),
      mEffectProcessings([&]() -> effectsConfig::EffectProcessings {
          effectsConfig::EffectProcessings processings;
          const auto& parseResult = effectsConfig::parse();
          if (!parseResult.parsedConfig) {
              return INVALID_EFFECT_PROCESSING;
          }
          return {parseResult.nbSkippedElement, parseResult.parsedConfig->preprocess,
                  parseResult.parsedConfig->postprocess, parseResult.parsedConfig->deviceprocess};
      }()) {
    ALOG_ASSERT(effectsFactory != nullptr, "Provided IEffectsFactory service is NULL");
    mEffectsFactory = std::move(effectsFactory);
}
@@ -228,6 +239,10 @@ AudioHalVersionInfo EffectsFactoryHalHidl::getHalVersion() const {
    return AudioHalVersionInfo(AudioHalVersionInfo::Type::HIDL, MAJOR_VERSION, MINOR_VERSION);
}

const effectsConfig::EffectProcessings& EffectsFactoryHalHidl::getProcessings() const {
    return mEffectProcessings;
}

} // namespace effect

// When a shared library is built from a static library, even explicit
Loading