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

Commit ea59ad4e authored by Andy Hung's avatar Andy Hung Committed by Automerger Merge Worker
Browse files

Effect: Configure effect after the buffer is set. am: 799c8d06

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

Change-Id: I8fc0aa4198c3a909c3fd405f40d02b01b4fba210
parents 89dfc64f 799c8d06
Loading
Loading
Loading
Loading
+5 −7
Original line number Original line Diff line number Diff line
@@ -953,11 +953,7 @@ status_t AudioFlinger::EffectModule::configure()
    // Auxiliary effect:
    // Auxiliary effect:
    //      accumulates in output buffer: input buffer != output buffer
    //      accumulates in output buffer: input buffer != output buffer
    // Therefore: accumulate <=> input buffer != output buffer
    // Therefore: accumulate <=> input buffer != output buffer
    if (mConfig.inputCfg.buffer.raw != mConfig.outputCfg.buffer.raw) {
    mConfig.outputCfg.accessMode = requiredEffectBufferAccessMode();
        mConfig.outputCfg.accessMode = EFFECT_BUFFER_ACCESS_ACCUMULATE;
    } else {
        mConfig.outputCfg.accessMode = EFFECT_BUFFER_ACCESS_WRITE;
    }
    mConfig.inputCfg.mask = EFFECT_CONFIG_ALL;
    mConfig.inputCfg.mask = EFFECT_CONFIG_ALL;
    mConfig.outputCfg.mask = EFFECT_CONFIG_ALL;
    mConfig.outputCfg.mask = EFFECT_CONFIG_ALL;
    mConfig.inputCfg.buffer.frameCount = callback->frameCount();
    mConfig.inputCfg.buffer.frameCount = callback->frameCount();
@@ -2340,8 +2336,10 @@ status_t AudioFlinger::EffectChain::addEffect_ll(const sp<EffectModule>& effect)
        // output buffer, otherwise to chain input buffer
        // output buffer, otherwise to chain input buffer
        if (idx_insert == size) {
        if (idx_insert == size) {
            if (idx_insert != 0) {
            if (idx_insert != 0) {
                // update channel mask before setting output buffer.
                mEffects[idx_insert - 1]->configure();
                mEffects[idx_insert - 1]->configure();
                mEffects[idx_insert-1]->setOutBuffer(mInBuffer);
                mEffects[idx_insert - 1]->setOutBuffer(mInBuffer); // set output buffer
                mEffects[idx_insert - 1]->updateAccessMode();      // reconfig if neeeded.
            }
            }
            effect->setOutBuffer(mOutBuffer);
            effect->setOutBuffer(mOutBuffer);
        } else {
        } else {
+12 −0
Original line number Original line Diff line number Diff line
@@ -254,6 +254,13 @@ public:
        return mOutBuffer != 0 ? reinterpret_cast<int16_t*>(mOutBuffer->ptr()) : NULL;
        return mOutBuffer != 0 ? reinterpret_cast<int16_t*>(mOutBuffer->ptr()) : NULL;
    }
    }


    // Updates the access mode if it is out of date.  May issue a new effect configure.
    void        updateAccessMode() {
                    if (requiredEffectBufferAccessMode() != mConfig.outputCfg.accessMode) {
                        configure();
                    }
                }

    status_t         setDevices(const AudioDeviceTypeAddrVector &devices);
    status_t         setDevices(const AudioDeviceTypeAddrVector &devices);
    status_t         setInputDevice(const AudioDeviceTypeAddr &device);
    status_t         setInputDevice(const AudioDeviceTypeAddr &device);
    status_t         setVolume(uint32_t *left, uint32_t *right, bool controller);
    status_t         setVolume(uint32_t *left, uint32_t *right, bool controller);
@@ -289,6 +296,11 @@ private:
    status_t stop_l();
    status_t stop_l();
    status_t removeEffectFromHal_l();
    status_t removeEffectFromHal_l();
    status_t sendSetAudioDevicesCommand(const AudioDeviceTypeAddrVector &devices, uint32_t cmdCode);
    status_t sendSetAudioDevicesCommand(const AudioDeviceTypeAddrVector &devices, uint32_t cmdCode);
    effect_buffer_access_e requiredEffectBufferAccessMode() const {
        return mConfig.inputCfg.buffer.raw == mConfig.outputCfg.buffer.raw
                ? EFFECT_BUFFER_ACCESS_WRITE : EFFECT_BUFFER_ACCESS_ACCUMULATE;
    }



    effect_config_t     mConfig;    // input and output audio configuration
    effect_config_t     mConfig;    // input and output audio configuration
    sp<EffectHalInterface> mEffectInterface; // Effect module HAL
    sp<EffectHalInterface> mEffectInterface; // Effect module HAL