diff options
author | Haynes Mathew George <hgeorge@codeaurora.org> | 2014-01-11 13:03:57 -0800 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2014-02-06 11:47:57 -0800 |
commit | 0f02f265123b7ef2fd6ac09ff70cde26eb5559ad (patch) | |
tree | 0f342f9de0606439ead920a5372cc4f9604b86da /services | |
parent | 7ca6e73bed1d2e1a928104feb6e9ae92953bfff5 (diff) | |
download | frameworks_av-0f02f265123b7ef2fd6ac09ff70cde26eb5559ad.zip frameworks_av-0f02f265123b7ef2fd6ac09ff70cde26eb5559ad.tar.gz frameworks_av-0f02f265123b7ef2fd6ac09ff70cde26eb5559ad.tar.bz2 |
audioflinger: OffloadThread state fix
When switching from one offload session to another that
reuses the same offload output, audio HAL is paused & flushed in
preparation for the new track
OffloadThread must reset mHwPaused to allow proper state transitions
for the second track. In addition, Offload thread need not
explicitly call resume on HAL while handling a flush.
Bug: 12530661
Change-Id: I8173845e1782b5a8b372a82c7d337299a61e0efe
Diffstat (limited to 'services')
-rw-r--r-- | services/audioflinger/Threads.cpp | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index 24df473..00d14e8 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -4146,9 +4146,6 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::OffloadThread::prepareTr // if resume is received before pause is executed. if (!mStandby && (doHwPause || (mFlushPending && !mHwPaused && (count != 0)))) { mOutput->stream->pause(mOutput->stream); - if (!doHwPause) { - doHwResume = true; - } } if (mFlushPending) { flushHw_l(); @@ -4209,6 +4206,8 @@ void AudioFlinger::OffloadThread::flushHw_l() mBytesRemaining = 0; mPausedWriteLength = 0; mPausedBytesRemaining = 0; + mHwPaused = false; + if (mUseAsyncWrite) { // discard any pending drain or write ack by incrementing sequence mWriteAckSequence = (mWriteAckSequence + 2) & ~1; |