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

Commit 35d0371c authored by Shunkai Yao's avatar Shunkai Yao Committed by Automerger Merge Worker
Browse files

Merge "Effect AIDL: Refactor effect capability with Range implementation" am:...

Merge "Effect AIDL: Refactor effect capability with Range implementation" am: dab56ccf am: d5d22608

Original change: https://android-review.googlesource.com/c/platform/frameworks/av/+/2433192



Change-Id: I4ce480707226ec1e68d7b257a7ad5d06e55540cd
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 250b74d9 d5d22608
Loading
Loading
Loading
Loading
+6 −4
Original line number Original line Diff line number Diff line
@@ -24,6 +24,7 @@
#include <media/AidlConversionNdk.h>
#include <media/AidlConversionNdk.h>
#include <media/AidlConversionEffect.h>
#include <media/AidlConversionEffect.h>
#include <media/audiohal/AudioEffectUuid.h>
#include <media/audiohal/AudioEffectUuid.h>
#include <system/audio_effects/aidl_effects_utils.h>
#include <system/audio_effects/effect_bassboost.h>
#include <system/audio_effects/effect_bassboost.h>


#include <utils/Log.h>
#include <utils/Log.h>
@@ -37,6 +38,7 @@ using ::aidl::android::convertIntegral;
using ::aidl::android::aidl_utils::statusTFromBinderStatus;
using ::aidl::android::aidl_utils::statusTFromBinderStatus;
using ::aidl::android::hardware::audio::effect::BassBoost;
using ::aidl::android::hardware::audio::effect::BassBoost;
using ::aidl::android::hardware::audio::effect::Parameter;
using ::aidl::android::hardware::audio::effect::Parameter;
using ::aidl::android::hardware::audio::effect::Range;
using ::android::status_t;
using ::android::status_t;
using utils::EffectParamReader;
using utils::EffectParamReader;
using utils::EffectParamWriter;
using utils::EffectParamWriter;
@@ -89,10 +91,10 @@ status_t AidlConversionBassBoost::getParameter(EffectParamWriter& param) {
            return param.writeToValue(&value);
            return param.writeToValue(&value);
        }
        }
        case BASSBOOST_PARAM_STRENGTH_SUPPORTED: {
        case BASSBOOST_PARAM_STRENGTH_SUPPORTED: {
            uint16_t value;
            // an invalid range indicates not setting support for this parameter
            const auto& cap =
            uint16_t value =
                    VALUE_OR_RETURN_STATUS(aidl::android::UNION_GET(mDesc.capability, bassBoost));
                    ::aidl::android::hardware::audio::effect::isRangeValid<Range::Tag::bassBoost>(
            value = VALUE_OR_RETURN_STATUS(convertIntegral<uint32_t>(cap.strengthSupported));
                            BassBoost::strengthPm, mDesc.capability);
            return param.writeToValue(&value);
            return param.writeToValue(&value);
        }
        }
        default: {
        default: {
+0 −2
Original line number Original line Diff line number Diff line
@@ -147,8 +147,6 @@ status_t AidlConversionDp::getParameter(EffectParamWriter& param) {
                                                          DynamicsProcessing::inputGain);
                                                          DynamicsProcessing::inputGain);
            RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mEffect->getParameter(id, &aidlParam)));
            RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mEffect->getParameter(id, &aidlParam)));


            DynamicsProcessing::Capability cap =
                    mDesc.capability.get<Capability::dynamicsProcessing>();
            std::vector<DynamicsProcessing::InputGain> gains =
            std::vector<DynamicsProcessing::InputGain> gains =
                    VALUE_OR_RETURN_STATUS(aidl::android::GET_PARAMETER_SPECIFIC_FIELD(
                    VALUE_OR_RETURN_STATUS(aidl::android::GET_PARAMETER_SPECIFIC_FIELD(
                            aidlParam, DynamicsProcessing, dynamicsProcessing,
                            aidlParam, DynamicsProcessing, dynamicsProcessing,
+30 −4
Original line number Original line Diff line number Diff line
@@ -59,8 +59,34 @@ extern "C" binder_exception_t queryEffect(const AudioUuid* in_impl_uuid, Descrip
namespace aidl::android::hardware::audio::effect {
namespace aidl::android::hardware::audio::effect {


const std::string DynamicsProcessingImpl::kEffectName = "DynamicsProcessing";
const std::string DynamicsProcessingImpl::kEffectName = "DynamicsProcessing";
const DynamicsProcessing::Capability DynamicsProcessingImpl::kCapability = {.minCutOffFreq = 220,

                                                                            .maxCutOffFreq = 20000};
const DynamicsProcessing::EqBandConfig DynamicsProcessingImpl::kEqBandConfigMin =
        DynamicsProcessing::EqBandConfig({.channel = 0,
                                          .band = 0,
                                          .enable = false,
                                          .cutoffFrequencyHz = 220,
                                          .gainDb = std::numeric_limits<float>::min()});
const DynamicsProcessing::EqBandConfig DynamicsProcessingImpl::kEqBandConfigMax =
        DynamicsProcessing::EqBandConfig({.channel = std::numeric_limits<int>::max(),
                                          .band = std::numeric_limits<int>::max(),
                                          .enable = true,
                                          .cutoffFrequencyHz = 20000,
                                          .gainDb = std::numeric_limits<float>::max()});
const Range::DynamicsProcessingRange DynamicsProcessingImpl::kPreEqBandRange = {
        .min = DynamicsProcessing::make<DynamicsProcessing::preEqBand>(
                {DynamicsProcessingImpl::kEqBandConfigMin}),
        .max = DynamicsProcessing::make<DynamicsProcessing::preEqBand>(
                {DynamicsProcessingImpl::kEqBandConfigMax})};
const Range::DynamicsProcessingRange DynamicsProcessingImpl::kPostEqBandRange = {
        .min = DynamicsProcessing::make<DynamicsProcessing::postEqBand>(
                {DynamicsProcessingImpl::kEqBandConfigMin}),
        .max = DynamicsProcessing::make<DynamicsProcessing::postEqBand>(
                {DynamicsProcessingImpl::kEqBandConfigMax})};
const Range DynamicsProcessingImpl::kRange =
        Range::make<Range::dynamicsProcessing>({DynamicsProcessingImpl::kPreEqBandRange});

const Capability DynamicsProcessingImpl::kCapability = {.range = {DynamicsProcessingImpl::kRange}};

const Descriptor DynamicsProcessingImpl::kDescriptor = {
const Descriptor DynamicsProcessingImpl::kDescriptor = {
        .common = {.id = {.type = kDynamicsProcessingTypeUUID,
        .common = {.id = {.type = kDynamicsProcessingTypeUUID,
                          .uuid = kDynamicsProcessingImplUUID,
                          .uuid = kDynamicsProcessingImplUUID,
@@ -70,8 +96,7 @@ const Descriptor DynamicsProcessingImpl::kDescriptor = {
                             .volume = Flags::Volume::CTRL},
                             .volume = Flags::Volume::CTRL},
                   .name = DynamicsProcessingImpl::kEffectName,
                   .name = DynamicsProcessingImpl::kEffectName,
                   .implementor = "The Android Open Source Project"},
                   .implementor = "The Android Open Source Project"},
        .capability = Capability::make<Capability::dynamicsProcessing>(
        .capability = DynamicsProcessingImpl::kCapability};
                DynamicsProcessingImpl::kCapability)};


ndk::ScopedAStatus DynamicsProcessingImpl::open(const Parameter::Common& common,
ndk::ScopedAStatus DynamicsProcessingImpl::open(const Parameter::Common& common,
                                                const std::optional<Parameter::Specific>& specific,
                                                const std::optional<Parameter::Specific>& specific,
@@ -138,6 +163,7 @@ ndk::ScopedAStatus DynamicsProcessingImpl::setParameterSpecific(
    RETURN_IF(!mContext, EX_NULL_POINTER, "nullContext");
    RETURN_IF(!mContext, EX_NULL_POINTER, "nullContext");


    auto& param = specific.get<Parameter::Specific::dynamicsProcessing>();
    auto& param = specific.get<Parameter::Specific::dynamicsProcessing>();
    // TODO: check range here, dynamicsProcessing need customized method for nested parameters.
    auto tag = param.getTag();
    auto tag = param.getTag();


    switch (tag) {
    switch (tag) {
+6 −1
Original line number Original line Diff line number Diff line
@@ -28,7 +28,7 @@ class DynamicsProcessingImpl final : public EffectImpl {
  public:
  public:
    static const std::string kEffectName;
    static const std::string kEffectName;
    static const Descriptor kDescriptor;
    static const Descriptor kDescriptor;
    static const DynamicsProcessing::Capability kCapability;
    static const Capability kCapability;


    DynamicsProcessingImpl() { LOG(DEBUG) << __func__; }
    DynamicsProcessingImpl() { LOG(DEBUG) << __func__; }
    ~DynamicsProcessingImpl() {
    ~DynamicsProcessingImpl() {
@@ -52,6 +52,11 @@ class DynamicsProcessingImpl final : public EffectImpl {
    std::string getEffectName() override { return kEffectName; }
    std::string getEffectName() override { return kEffectName; }


  private:
  private:
    static const DynamicsProcessing::EqBandConfig kEqBandConfigMin;
    static const DynamicsProcessing::EqBandConfig kEqBandConfigMax;
    static const Range::DynamicsProcessingRange kPreEqBandRange;
    static const Range::DynamicsProcessingRange kPostEqBandRange;
    static const Range kRange;
    std::shared_ptr<DynamicsProcessingContext> mContext;
    std::shared_ptr<DynamicsProcessingContext> mContext;
    ndk::ScopedAStatus getParameterDynamicsProcessing(const DynamicsProcessing::Tag& tag,
    ndk::ScopedAStatus getParameterDynamicsProcessing(const DynamicsProcessing::Tag& tag,
                                                      Parameter::Specific* specific);
                                                      Parameter::Specific* specific);
+5 −11
Original line number Original line Diff line number Diff line
@@ -420,24 +420,18 @@ bool DynamicsProcessingContext::validateEngineConfig(
           validateStageEnablement(engine.postEqStage) && validateStageEnablement(engine.mbcStage);
           validateStageEnablement(engine.postEqStage) && validateStageEnablement(engine.mbcStage);
}
}


inline bool DynamicsProcessingContext::validateCutoffFrequency(float freq) {
    return freq >= DynamicsProcessingImpl::kCapability.minCutOffFreq &&
            freq <= DynamicsProcessingImpl::kCapability.maxCutOffFreq;
}

bool DynamicsProcessingContext::validateEqBandConfig(const DynamicsProcessing::EqBandConfig& band,
bool DynamicsProcessingContext::validateEqBandConfig(const DynamicsProcessing::EqBandConfig& band,
                                                     int maxChannel, int maxBand) {
                                                     int maxChannel, int maxBand) {
    return validateChannel(band.channel, maxChannel) && validateBand(band.band, maxBand) &&
    return validateChannel(band.channel, maxChannel) && validateBand(band.band, maxBand);
           validateCutoffFrequency(band.cutoffFrequencyHz);
}
}


bool DynamicsProcessingContext::validateMbcBandConfig(const DynamicsProcessing::MbcBandConfig& band,
bool DynamicsProcessingContext::validateMbcBandConfig(const DynamicsProcessing::MbcBandConfig& band,
                                                      int maxChannel, int maxBand) {
                                                      int maxChannel, int maxBand) {
    return validateChannel(band.channel, maxChannel) && validateBand(band.band, maxBand) &&
    return validateChannel(band.channel, maxChannel) && validateBand(band.band, maxBand) &&
           validateCutoffFrequency(band.cutoffFrequencyHz) && validateTime(band.attackTimeMs) &&
           validateTime(band.attackTimeMs) && validateTime(band.releaseTimeMs) &&
           validateTime(band.releaseTimeMs) && validateRatio(band.ratio) &&
           validateRatio(band.ratio) && validateBandDb(band.thresholdDb) &&
           validateBandDb(band.thresholdDb) && validateBandDb(band.kneeWidthDb) &&
           validateBandDb(band.kneeWidthDb) && validateBandDb(band.noiseGateThresholdDb) &&
           validateBandDb(band.noiseGateThresholdDb) && validateRatio(band.expanderRatio);
           validateRatio(band.expanderRatio);
}
}


bool DynamicsProcessingContext::validateLimiterConfig(
bool DynamicsProcessingContext::validateLimiterConfig(
Loading