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

Commit 13084621 authored by Eric Laurent's avatar Eric Laurent
Browse files

audioflinger: fix invalidateTracks() on offload thread

Commit 05317d29 introduced a regression causing a systematic flush
on offload output thread when invalidateTracks() is called even if
no track is using the stream type specified.

Bug: 28786996
Change-Id: Iee393ee8b1093c40647235bd35f4a6fa9b62937a
parent 78d4d1e4
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -2659,18 +2659,20 @@ void AudioFlinger::PlaybackThread::cacheParameters_l()
    }
}

void AudioFlinger::PlaybackThread::invalidateTracks_l(audio_stream_type_t streamType)
bool AudioFlinger::PlaybackThread::invalidateTracks_l(audio_stream_type_t streamType)
{
    ALOGV("MixerThread::invalidateTracks() mixer %p, streamType %d, mTracks.size %zu",
            this,  streamType, mTracks.size());

    bool trackMatch = false;
    size_t size = mTracks.size();
    for (size_t i = 0; i < size; i++) {
        sp<Track> t = mTracks[i];
        if (t->streamType() == streamType && t->isExternalTrack()) {
            t->invalidate();
            trackMatch = true;
        }
    }
    return trackMatch;
}

void AudioFlinger::PlaybackThread::invalidateTracks(audio_stream_type_t streamType)
@@ -5429,8 +5431,9 @@ void AudioFlinger::OffloadThread::flushHw_l()
void AudioFlinger::OffloadThread::invalidateTracks(audio_stream_type_t streamType)
{
    Mutex::Autolock _l(mLock);
    if (PlaybackThread::invalidateTracks_l(streamType)) {
        mFlushPending = true;
    PlaybackThread::invalidateTracks_l(streamType);
    }
}

// ----------------------------------------------------------------------------
+1 −1
Original line number Diff line number Diff line
@@ -613,7 +613,7 @@ public:
                virtual bool     isValidSyncEvent(const sp<SyncEvent>& event) const;

                // called with AudioFlinger lock held
                        void     invalidateTracks_l(audio_stream_type_t streamType);
                        bool     invalidateTracks_l(audio_stream_type_t streamType);
                virtual void     invalidateTracks(audio_stream_type_t streamType);

    virtual     size_t      frameCount() const { return mNormalFrameCount; }