diff options
author | Haynes Mathew George <hgeorge@codeaurora.org> | 2014-01-15 12:31:39 -0800 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2014-02-06 11:49:51 -0800 |
commit | 4c6a433d74d5ae8b9bc0557207e3ced43bf34a25 (patch) | |
tree | d0447045cdae870c774e1b1f617916f059eeaf0f /services/audioflinger | |
parent | 7844f679be8d94c5cdf017f53754cb68ee2f00da (diff) | |
download | frameworks_av-4c6a433d74d5ae8b9bc0557207e3ced43bf34a25.zip frameworks_av-4c6a433d74d5ae8b9bc0557207e3ced43bf34a25.tar.gz frameworks_av-4c6a433d74d5ae8b9bc0557207e3ced43bf34a25.tar.bz2 |
AudioFlinger: Offload track transition fix
Trigger state changes in OffloadThread on adding a new offload track.
Bug: 12530661
Change-Id: I95b62764c7ac041d470702e86b951f812eb0e70f
Diffstat (limited to 'services/audioflinger')
-rw-r--r-- | services/audioflinger/Threads.cpp | 23 | ||||
-rw-r--r-- | services/audioflinger/Threads.h | 3 |
2 files changed, 21 insertions, 5 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index cecb3dc..7de688e 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -1490,9 +1490,7 @@ status_t AudioFlinger::PlaybackThread::addTrack_l(const sp<Track>& track) status = NO_ERROR; } - ALOGV("signal playback thread"); - broadcast_l(); - + onAddNewTrack_l(); return status; } @@ -2758,6 +2756,12 @@ void AudioFlinger::PlaybackThread::threadLoop_standby() } } +void AudioFlinger::PlaybackThread::onAddNewTrack_l() +{ + ALOGV("signal playback thread"); + broadcast_l(); +} + void AudioFlinger::MixerThread::threadLoop_mix() { // obtain the presentation timestamp of the next output buffer @@ -4080,7 +4084,6 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::OffloadThread::prepareTr // seek when resuming. if (previousTrack->sessionId() != track->sessionId()) { previousTrack->invalidate(); - mFlushPending = true; } } } @@ -4223,6 +4226,18 @@ void AudioFlinger::OffloadThread::flushHw_l() } } +void AudioFlinger::OffloadThread::onAddNewTrack_l() +{ + sp<Track> previousTrack = mPreviousTrack.promote(); + sp<Track> latestTrack = mLatestActiveTrack.promote(); + + if (previousTrack != 0 && latestTrack != 0 && + (previousTrack->sessionId() != latestTrack->sessionId())) { + mFlushPending = true; + } + PlaybackThread::onAddNewTrack_l(); +} + // ---------------------------------------------------------------------------- AudioFlinger::DuplicatingThread::DuplicatingThread(const sp<AudioFlinger>& audioFlinger, diff --git a/services/audioflinger/Threads.h b/services/audioflinger/Threads.h index 19289d2..9682fa6 100644 --- a/services/audioflinger/Threads.h +++ b/services/audioflinger/Threads.h @@ -394,7 +394,7 @@ protected: virtual bool waitingAsyncCallback(); virtual bool waitingAsyncCallback_l(); virtual bool shouldStandby_l(); - + virtual void onAddNewTrack_l(); // ThreadBase virtuals virtual void preExit(); @@ -753,6 +753,7 @@ protected: virtual bool waitingAsyncCallback(); virtual bool waitingAsyncCallback_l(); virtual bool shouldStandby_l(); + virtual void onAddNewTrack_l(); private: void flushHw_l(); |