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

Commit 13fffc9a authored by vivek mehta's avatar vivek mehta Committed by Linux Build Service Account
Browse files

libaudioflinger: avoid s/w effect processing in case of Direct PCM

- Check Direct PCM usecase with Offload
- do not process s/w effect when direct PCM is enabled

Change-Id: I2eb843b17558e60cf36daff0c5fbdf50dccf99ca
parent 1900a848
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -1125,7 +1125,8 @@ status_t AudioFlinger::EffectHandle::enable()
                t->broadcast_l();
            }
            if (!mEffect->isOffloadable()) {
                if (thread->type() == ThreadBase::OFFLOAD) {
                if (thread->type() == ThreadBase::OFFLOAD ||
                   (thread->type() == ThreadBase::DIRECT && thread->mIsDirectPcm)) {
                    PlaybackThread *t = (PlaybackThread *)thread.get();
                    t->invalidateTracks(AUDIO_STREAM_MUSIC);
                }
@@ -1162,7 +1163,8 @@ status_t AudioFlinger::EffectHandle::disable()
    sp<ThreadBase> thread = mEffect->thread().promote();
    if (thread != 0) {
        thread->checkSuspendOnEffectEnabled(mEffect, false, mEffect->sessionId());
        if (thread->type() == ThreadBase::OFFLOAD) {
        if ((thread->type() == ThreadBase::OFFLOAD) ||
            (thread->type() == ThreadBase::DIRECT && thread->mIsDirectPcm)){
            PlaybackThread *t = (PlaybackThread *)thread.get();
            Mutex::Autolock _l(t->mLock);
            t->broadcast_l();
@@ -1445,8 +1447,10 @@ void AudioFlinger::EffectChain::process_l()
            (mSessionId == AUDIO_SESSION_OUTPUT_STAGE);
    // never process effects when:
    // - on an OFFLOAD thread
    // - on DIRECT thread with directPcm flag enabled
    // - no more tracks are on the session and the effect tail has been rendered
    bool doProcess = (thread->type() != ThreadBase::OFFLOAD);
    bool doProcess = ((thread->type() != ThreadBase::OFFLOAD) &&
                      (!(thread->type() == ThreadBase::DIRECT && thread->mIsDirectPcm)));
    if (!isGlobalSession) {
        bool tracksOnSession = (trackCnt() != 0);

+3 −2
Original line number Diff line number Diff line
@@ -3095,7 +3095,8 @@ bool AudioFlinger::PlaybackThread::threadLoop()
            }

            // only process effects if we're going to write
            if (mSleepTimeUs == 0 && mType != OFFLOAD) {
            if (mSleepTimeUs == 0 && mType != OFFLOAD &&
                !(mType == DIRECT && mIsDirectPcm)) {
                for (size_t i = 0; i < effectChains.size(); i ++) {
                    effectChains[i]->process_l();
                }
@@ -3105,7 +3106,7 @@ bool AudioFlinger::PlaybackThread::threadLoop()
        // was read from audio track: process only updates effect state
        // and thus does have to be synchronized with audio writes but may have
        // to be called while waiting for async write callback
        if (mType == OFFLOAD) {
        if ((mType == OFFLOAD) || (mType == DIRECT && mIsDirectPcm)) {
            for (size_t i = 0; i < effectChains.size(); i ++) {
                effectChains[i]->process_l();
            }