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

Commit 36f99424 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "AudioFlinger: Check Effect HAL version for device effect compatibility"

parents 8243e247 9289bde5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ using namespace ::android::hardware::audio::effect::CPP_VERSION;

EffectsFactoryHalHidl::EffectsFactoryHalHidl(sp<IEffectsFactory> effectsFactory)
        : ConversionHelperHidl("EffectsFactory") {
    ALOG_ASSERT(effectsFactory != nullptr, "Provided IDevicesFactory service is NULL");
    ALOG_ASSERT(effectsFactory != nullptr, "Provided IEffectsFactory service is NULL");
    mEffectsFactory = effectsFactory;
}

+2 −0
Original line number Diff line number Diff line
@@ -54,6 +54,8 @@ class EffectsFactoryHalHidl : public EffectsFactoryHalInterface, public Conversi

    virtual status_t dumpEffects(int fd);

    virtual float getHalVersion() { return MAJOR_VERSION + (float)MINOR_VERSION / 10; }

    status_t allocateBuffer(size_t size, sp<EffectBufferHalInterface>* buffer) override;
    status_t mirrorBuffer(void* external, size_t size,
                          sp<EffectBufferHalInterface>* buffer) override;
+2 −0
Original line number Diff line number Diff line
@@ -46,6 +46,8 @@ class EffectsFactoryHalInterface : public RefBase

    virtual status_t dumpEffects(int fd) = 0;

    virtual float getHalVersion() = 0;

    static sp<EffectsFactoryHalInterface> create();

    virtual status_t allocateBuffer(size_t size, sp<EffectBufferHalInterface>* buffer) = 0;
+12 −3
Original line number Diff line number Diff line
@@ -117,10 +117,19 @@ sp<AudioFlinger::EffectHandle> AudioFlinger::DeviceEffectManager::createEffect_l

status_t AudioFlinger::DeviceEffectManager::checkEffectCompatibility(
        const effect_descriptor_t *desc) {
    sp<EffectsFactoryHalInterface> effectsFactory = mAudioFlinger.getEffectsFactory();
    if (effectsFactory == nullptr) {
        return BAD_VALUE;
    }

    static const float sMinDeviceEffectHalVersion = 6.0;
    float halVersion = effectsFactory->getHalVersion();

    if ((desc->flags & EFFECT_FLAG_TYPE_MASK) != EFFECT_FLAG_TYPE_PRE_PROC
        && (desc->flags & EFFECT_FLAG_TYPE_MASK) != EFFECT_FLAG_TYPE_POST_PROC) {
        ALOGW("%s() non pre/post processing device effect %s", __func__, desc->name);
    if (((desc->flags & EFFECT_FLAG_TYPE_MASK) != EFFECT_FLAG_TYPE_PRE_PROC
            && (desc->flags & EFFECT_FLAG_TYPE_MASK) != EFFECT_FLAG_TYPE_POST_PROC)
            || halVersion < sMinDeviceEffectHalVersion) {
        ALOGW("%s() non pre/post processing device effect %s or incompatible API version %f",
                __func__, desc->name, halVersion);
        return BAD_VALUE;
    }