diff options
author | Eric Laurent <elaurent@google.com> | 2014-02-07 17:03:39 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-02-07 17:03:39 +0000 |
commit | f74f213c0cd0612101e00a73704429dac1a92fe3 (patch) | |
tree | fb6e1719072d94be8180d6d3c54929e6e5053a2c | |
parent | d9a4783985203c759ddcca784798ef395668fe05 (diff) | |
parent | 4c6a433d74d5ae8b9bc0557207e3ced43bf34a25 (diff) | |
download | frameworks_av-f74f213c0cd0612101e00a73704429dac1a92fe3.zip frameworks_av-f74f213c0cd0612101e00a73704429dac1a92fe3.tar.gz frameworks_av-f74f213c0cd0612101e00a73704429dac1a92fe3.tar.bz2 |
Merge "AudioFlinger: Offload track transition fix"
-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 4deea9a..9bf59d8 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(); |