diff options
author | Eric Laurent <elaurent@google.com> | 2015-01-07 16:02:57 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-01-07 16:02:57 +0000 |
commit | 81879df8dc51df4d8a3880349e9e1e6b5e3cebfb (patch) | |
tree | 920af202ad4576e997a540bfc98479aa97b2a0e2 /services/audioflinger/Threads.cpp | |
parent | 197f84845ccea9319a1589b85edeb2dcf56b81b3 (diff) | |
parent | 69158e3e7b565a5ca131a2efaa9b76615ca80cbb (diff) | |
download | frameworks_av-81879df8dc51df4d8a3880349e9e1e6b5e3cebfb.zip frameworks_av-81879df8dc51df4d8a3880349e9e1e6b5e3cebfb.tar.gz frameworks_av-81879df8dc51df4d8a3880349e9e1e6b5e3cebfb.tar.bz2 |
am 69158e3e: am 6ab33981: am 610255e8: Merge "audioflinger: pause HW A/V sync output when AudioTrack underruns" into lmp-mr1-dev
* commit '69158e3e7b565a5ca131a2efaa9b76615ca80cbb':
audioflinger: pause HW A/V sync output when AudioTrack underruns
Diffstat (limited to 'services/audioflinger/Threads.cpp')
-rw-r--r-- | services/audioflinger/Threads.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index a7ee38b..2200b6e 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -4167,6 +4167,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 @@ -4195,9 +4199,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); @@ -4214,6 +4215,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; + } } } } @@ -4276,7 +4281,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; } @@ -4321,7 +4326,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 |