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

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

Add audio eraser effect filter in libaudiohal

Remove eraser effect without audio_eraser_effect

Flag: com.android.media.audio.audio_eraser_effect
Bug: 367667349
Test: Build
Change-Id: Ia77fa36bcfb6e9d710e19f9ca0242a22bf5697ad
parent 65881cf0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -206,6 +206,7 @@ cc_defaults {
    shared_libs: [
        "android.hardware.common-V2-ndk",
        "android.hardware.common.fmq-V1-ndk",
        "com.android.media.audio-aconfig-cc",
        "libaudio_aidl_conversion_common_cpp",
        "libaudio_aidl_conversion_common_ndk",
        "libaudio_aidl_conversion_common_ndk_cpp",
+25 −0
Original line number Diff line number Diff line
@@ -25,10 +25,12 @@
#include <error/expected_utils.h>
#include <aidl/android/media/audio/common/AudioStreamType.h>
#include <android/binder_manager.h>
#include <com_android_media_audio.h>
#include <media/AidlConversionCppNdk.h>
#include <media/AidlConversionEffect.h>
#include <system/audio.h>
#include <system/audio_aidl_utils.h>
#include <system/audio_effects/effect_uuid.h>
#include <utils/Log.h>

#include "AidlUtils.h"
@@ -68,6 +70,7 @@ EffectsFactoryHalAidl::EffectsFactoryHalAidl(std::shared_ptr<IFactory> effectsFa
          std::vector<Descriptor> list;
          if (mFactory) {
              mFactory->queryEffects(std::nullopt, std::nullopt, std::nullopt, &list).isOk();
              filterHalDescriptors(list);
          }
          return list;
      }()),
@@ -180,6 +183,11 @@ status_t EffectsFactoryHalAidl::createEffect(const effect_uuid_t* uuid, int32_t

    AudioUuid aidlUuid =
            VALUE_OR_RETURN_STATUS(::aidl::android::legacy2aidl_audio_uuid_t_AudioUuid(*uuid));
    if (!com_android_media_audio_audio_eraser_effect() && isAudioEraser(aidlUuid)) {
        ALOGE("%s Audio eraser effect not supported yet", __func__);
        return BAD_VALUE;
    }

    std::shared_ptr<IEffect> aidlEffect;
    // Use EffectProxy interface instead of IFactory to create
    const bool isProxy = isProxyEffect(aidlUuid);
@@ -367,6 +375,23 @@ std::shared_ptr<const effectsConfig::Processings> EffectsFactoryHalAidl::getProc
    return 0;
}


bool EffectsFactoryHalAidl::isAudioEraser(const AudioUuid& uuid) {
    return uuid == getEffectTypeUuidEraser();
}

void EffectsFactoryHalAidl::filterHalDescriptors(std::vector<Descriptor>& descs) {
    if (!com_android_media_audio_audio_eraser_effect()) {
        descs.erase(std::remove_if(descs.begin(), descs.end(),
                                   [](const Descriptor& desc) {
                                       return isAudioEraser(desc.common.id.type);
                                   }),
                    descs.end());
    }

    return;
}

} // namespace effect

// When a shared library is built from a static library, even explicit
+5 −0
Original line number Diff line number Diff line
@@ -94,6 +94,11 @@ class EffectsFactoryHalAidl final : public EffectsFactoryHalInterface {
            std::vector<effect_descriptor_t>* descriptors);

    bool isProxyEffect(const aidl::android::media::audio::common::AudioUuid& uuid) const;

    static bool isAudioEraser(const aidl::android::media::audio::common::AudioUuid& uuid);

    // filter out descriptors which can not supported by the framework
    static void filterHalDescriptors(std::vector<Descriptor>& descs);
};

} // namespace effect