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

Commit aabbd921 authored by Eric Laurent's avatar Eric Laurent Committed by Android (Google) Code Review
Browse files

Merge "audioflinger: several device effects fixes"

parents ac4e638b 76c89f3d
Loading
Loading
Loading
Loading
+30 −3
Original line number Diff line number Diff line
@@ -3258,6 +3258,8 @@ status_t AudioFlinger::DeviceEffectProxy::checkPort(const PatchPanel::Patch& pat
        } else {
            mHalEffect->setDevices({mDevice});
        }
        mHalEffect->configure();

        *handle = new EffectHandle(mHalEffect, nullptr, nullptr, 0 /*priority*/,
                                   mNotifyFramesProcessed);
        status = (*handle)->initCheck();
@@ -3306,15 +3308,22 @@ status_t AudioFlinger::DeviceEffectProxy::checkPort(const PatchPanel::Patch& pat
}

void AudioFlinger::DeviceEffectProxy::onReleasePatch(audio_patch_handle_t patchHandle) {
    sp<EffectHandle> effect;
    {
        Mutex::Autolock _l(mProxyLock);
        if (mEffectHandles.find(patchHandle) != mEffectHandles.end()) {
            effect = mEffectHandles.at(patchHandle);
            mEffectHandles.erase(patchHandle);
        }
    }
}


size_t AudioFlinger::DeviceEffectProxy::removeEffect(const sp<EffectModule>& effect)
{
    Mutex::Autolock _l(mProxyLock);
    if (effect == mHalEffect) {
        mHalEffect->release_l();
        mHalEffect.clear();
        mDevicePort.id = AUDIO_PORT_HANDLE_NONE;
    }
@@ -3462,7 +3471,7 @@ status_t AudioFlinger::DeviceEffectProxy::ProxyCallback::removeEffectFromHal(
    if (proxy == nullptr) {
        return NO_INIT;
    }
    return proxy->addEffectToHal(effect);
    return proxy->removeEffectFromHal(effect);
}

bool AudioFlinger::DeviceEffectProxy::ProxyCallback::isOutput() const {
@@ -3514,4 +3523,22 @@ uint32_t AudioFlinger::DeviceEffectProxy::ProxyCallback::outChannelCount() const
    return proxy->channelCount();
}

void AudioFlinger::DeviceEffectProxy::ProxyCallback::onEffectEnable(
        const sp<EffectBase>& effectBase) {
    sp<EffectModule> effect = effectBase->asEffectModule();
    if (effect == nullptr) {
        return;
    }
    effect->start();
}

void AudioFlinger::DeviceEffectProxy::ProxyCallback::onEffectDisable(
        const sp<EffectBase>& effectBase) {
    sp<EffectModule> effect = effectBase->asEffectModule();
    if (effect == nullptr) {
        return;
    }
    effect->stop();
}

} // namespace android
+2 −2
Original line number Diff line number Diff line
@@ -766,8 +766,8 @@ private:
        void resetVolume() override {}
        product_strategy_t strategy() const override  { return static_cast<product_strategy_t>(0); }
        int32_t activeTrackCnt() const override { return 0; }
        void onEffectEnable(const sp<EffectBase>& effect __unused) override {}
        void onEffectDisable(const sp<EffectBase>& effect __unused) override {}
        void onEffectEnable(const sp<EffectBase>& effect __unused) override;
        void onEffectDisable(const sp<EffectBase>& effect __unused) override;

        wp<EffectChain> chain() const override { return nullptr; }