summaryrefslogtreecommitdiffstats
path: root/services/audioflinger
diff options
context:
space:
mode:
authorHaynes Mathew George <hgeorge@codeaurora.org>2014-01-15 12:31:39 -0800
committerEric Laurent <elaurent@google.com>2014-02-06 11:49:51 -0800
commit4c6a433d74d5ae8b9bc0557207e3ced43bf34a25 (patch)
treed0447045cdae870c774e1b1f617916f059eeaf0f /services/audioflinger
parent7844f679be8d94c5cdf017f53754cb68ee2f00da (diff)
downloadframeworks_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.cpp23
-rw-r--r--services/audioflinger/Threads.h3
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();