summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorHaynes Mathew George <hgeorge@codeaurora.org>2014-01-11 13:03:57 -0800
committerEric Laurent <elaurent@google.com>2014-02-06 11:47:57 -0800
commit0f02f265123b7ef2fd6ac09ff70cde26eb5559ad (patch)
tree0f342f9de0606439ead920a5372cc4f9604b86da /services
parent7ca6e73bed1d2e1a928104feb6e9ae92953bfff5 (diff)
downloadframeworks_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.cpp5
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;