From 4c6a433d74d5ae8b9bc0557207e3ced43bf34a25 Mon Sep 17 00:00:00 2001 From: Haynes Mathew George Date: Wed, 15 Jan 2014 12:31:39 -0800 Subject: AudioFlinger: Offload track transition fix Trigger state changes in OffloadThread on adding a new offload track. Bug: 12530661 Change-Id: I95b62764c7ac041d470702e86b951f812eb0e70f --- services/audioflinger/Threads.cpp | 23 +++++++++++++++++++---- services/audioflinger/Threads.h | 3 ++- 2 files changed, 21 insertions(+), 5 deletions(-) (limited to 'services') 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) 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 previousTrack = mPreviousTrack.promote(); + sp latestTrack = mLatestActiveTrack.promote(); + + if (previousTrack != 0 && latestTrack != 0 && + (previousTrack->sessionId() != latestTrack->sessionId())) { + mFlushPending = true; + } + PlaybackThread::onAddNewTrack_l(); +} + // ---------------------------------------------------------------------------- AudioFlinger::DuplicatingThread::DuplicatingThread(const sp& 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(); -- cgit v1.1