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

Commit 8d6489a3 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 panther_hwasan-userdebug and boot, play audio
Test: atest audiopolicy_tests
Test: flash to Pixel t and test with audio effect enabled
Change-Id: I5d57fd2457f1e928ba011ea803fe9a7fc8259bb0
parent ec503f69
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",
    ],
@@ -287,15 +288,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",
+23 −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(nullptr /* TODO: add AIDL implementation */) {
    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,19 @@ bool EffectsFactoryHalAidl::isProxyEffect(const AudioUuid& uuid) const {
    return 0 != mUuidProxyMap.count(uuid);
}

std::shared_ptr<const effectsConfig::Processings> EffectsFactoryHalAidl::getProcessings() const {
    return mEffectProcessings;
}

::android::error::Result<size_t> EffectsFactoryHalAidl::getSkippedElements() const {
    if (!mEffectProcessings) {
        return ::android::base::unexpected(BAD_VALUE);
    }

    // Only return 0 for AIDL, because the AIDL interface doesn't aware of configuration file
    return 0;
}

} // namespace effect

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

    detail::AudioHalVersionInfo getHalVersion() const override;

    std::shared_ptr<const effectsConfig::Processings> getProcessings() const override;

    ::android::error::Result<size_t> getSkippedElements() const override;

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

    std::mutex mLock;
    uint64_t mEffectIdCounter GUARDED_BY(mLock) = 0;  // Align with HIDL (0 is INVALID_ID)
+18 −4
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,9 +79,11 @@ EffectDescriptorCache::QueryResult EffectDescriptorCache::queryAllDescriptors(
}

EffectsFactoryHalHidl::EffectsFactoryHalHidl(sp<IEffectsFactory> effectsFactory)
        : EffectConversionHelperHidl("EffectsFactory"), mCache(new EffectDescriptorCache) {
    ALOG_ASSERT(effectsFactory != nullptr, "Provided IEffectsFactory service is NULL");
    mEffectsFactory = std::move(effectsFactory);
    : EffectConversionHelperHidl("EffectsFactory"),
      mEffectsFactory(std::move(effectsFactory)),
      mCache(new EffectDescriptorCache),
      mParsingResult(effectsConfig::parse()) {
    ALOG_ASSERT(mEffectsFactory != nullptr, "Provided IEffectsFactory service is NULL");
}

status_t EffectsFactoryHalHidl::queryNumberEffects(uint32_t *pNumEffects) {
@@ -228,6 +231,17 @@ AudioHalVersionInfo EffectsFactoryHalHidl::getHalVersion() const {
    return AudioHalVersionInfo(AudioHalVersionInfo::Type::HIDL, MAJOR_VERSION, MINOR_VERSION);
}

std::shared_ptr<const effectsConfig::Processings> EffectsFactoryHalHidl::getProcessings() const {
    return mParsingResult.parsedConfig;
}

::android::error::Result<size_t> EffectsFactoryHalHidl::getSkippedElements() const {
    if (!mParsingResult.parsedConfig) {
        return ::android::base::unexpected(BAD_VALUE);
    }
    return mParsingResult.nbSkippedElement;
}

} // namespace effect

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