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

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

Merge "audioflinger: forward flush to direct output streams" into lmp-dev

parents c8c05d6a e659ef42
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -4042,6 +4042,9 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::DirectOutputThread::prep
                        track->mState = TrackBase::STOPPED;
                    }
                    if (track->isStopped()) {
                        if (track->mState == TrackBase::FLUSHED) {
                            flushHw_l();
                        }
                        track->reset();
                    }
                    tracksToRemove->add(track);
@@ -4214,6 +4217,12 @@ void AudioFlinger::DirectOutputThread::cacheParameters_l()
    }
}

void AudioFlinger::DirectOutputThread::flushHw_l()
{
    if (mOutput->stream->flush != NULL)
        mOutput->stream->flush(mOutput->stream);
}

// ----------------------------------------------------------------------------

AudioFlinger::AsyncCallbackThread::AsyncCallbackThread(
@@ -4581,7 +4590,7 @@ bool AudioFlinger::OffloadThread::waitingAsyncCallback()

void AudioFlinger::OffloadThread::flushHw_l()
{
    mOutput->stream->flush(mOutput->stream);
    DirectOutputThread::flushHw_l();
    // Flush anything still waiting in the mixbuffer
    mCurrentWriteLength = 0;
    mBytesRemaining = 0;
+2 −3
Original line number Diff line number Diff line
@@ -894,6 +894,7 @@ public:

    virtual     bool        checkForNewParameter_l(const String8& keyValuePair,
                                                   status_t& status);
    virtual     void        flushHw_l();

protected:
    virtual     int         getTrackName_l(audio_channel_mask_t channelMask,
@@ -929,6 +930,7 @@ public:
    OffloadThread(const sp<AudioFlinger>& audioFlinger, AudioStreamOut* output,
                        audio_io_handle_t id, uint32_t device);
    virtual                 ~OffloadThread() {};
    virtual     void        flushHw_l();

protected:
    // threadLoop snippets
@@ -940,9 +942,6 @@ protected:
    virtual     bool        shouldStandby_l();
    virtual     void        onAddNewTrack_l();

private:
                void        flushHw_l();

private:
    bool        mHwPaused;
    bool        mFlushPending;
+4 −0
Original line number Diff line number Diff line
@@ -824,6 +824,10 @@ void AudioFlinger::PlaybackThread::Track::flush()
            // remove from active track list, reset(), and trigger presentation complete
            if (playbackThread->mActiveTracks.indexOf(this) < 0) {
                reset();
                if (thread->type() == ThreadBase::DIRECT) {
                    DirectOutputThread *t = (DirectOutputThread *)playbackThread;
                    t->flushHw_l();
                }
            }
        }
        // Prevent flush being lost if the track is flushed and then resumed