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

Commit 6ab33981 authored by Eric Laurent's avatar Eric Laurent Committed by Android Git Automerger
Browse files

am 610255e8: Merge "audioflinger: pause HW A/V sync output when AudioTrack...

am 610255e8: Merge "audioflinger: pause HW A/V sync output when AudioTrack underruns" into lmp-mr1-dev

* commit '610255e8':
  audioflinger: pause HW A/V sync output when AudioTrack underruns
parents 9fc2f470 610255e8
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -4083,6 +4083,10 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::DirectOutputThread::prep
                track->mRetryCount = kMaxTrackRetriesDirect;
                mActiveTrack = t;
                mixerStatus = MIXER_TRACKS_READY;
                if (usesHwAvSync() && mHwPaused) {
                    doHwResume = true;
                    mHwPaused = false;
                }
            }
        } else {
            // clear effect chain input buffer if the last active track started underruns
@@ -4111,9 +4115,6 @@ 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);
@@ -4130,6 +4131,10 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::DirectOutputThread::prep
                    android_atomic_or(CBLK_DISABLED, &cblk->mFlags);
                } else if (last) {
                    mixerStatus = MIXER_TRACKS_ENABLED;
                    if (usesHwAvSync() && !mHwPaused && !mStandby) {
                        doHwPause = true;
                        mHwPaused = true;
                    }
                }
            }
        }
@@ -4192,7 +4197,7 @@ void AudioFlinger::DirectOutputThread::threadLoop_mix()
void AudioFlinger::DirectOutputThread::threadLoop_sleepTime()
{
    // do not write to HAL when paused
    if (mHwPaused) {
    if (mHwPaused || (usesHwAvSync() && mStandby)) {
        sleepTime = idleSleepTime;
        return;
    }
@@ -4237,7 +4242,7 @@ bool AudioFlinger::DirectOutputThread::shouldStandby_l()
        trackPaused = mTracks[mTracks.size() - 1]->isPaused();
    }

    return !mStandby && !trackPaused;
    return !mStandby && !(trackPaused || (usesHwAvSync() && mHwPaused));
}

// getTrackName_l() must be called with ThreadBase::mLock held
+3 −0
Original line number Diff line number Diff line
@@ -710,6 +710,9 @@ protected:
                                   audio_patch_handle_t *handle);
    virtual     status_t    releaseAudioPatch_l(const audio_patch_handle_t handle);

                bool        usesHwAvSync() const { return (mType == DIRECT) && (mOutput != NULL) &&
                                                (mOutput->flags & AUDIO_OUTPUT_FLAG_HW_AV_SYNC); }

private:

    friend class AudioFlinger;      // for numerous