summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Michel Trivi <jmtrivi@google.com>2011-08-25 17:41:46 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-08-25 17:41:46 -0700
commit8d9d585ce5b1aa284289a27dda048c6317b104e7 (patch)
tree5965c0970a4d18dfec1d9563ad702058a5e80b5b
parent24245683b9285b0b53c8900f088cf146000501c4 (diff)
parentcd07594333cbe8b2c86c6609cce01a74d6cc33f8 (diff)
downloadframeworks_av-8d9d585ce5b1aa284289a27dda048c6317b104e7.zip
frameworks_av-8d9d585ce5b1aa284289a27dda048c6317b104e7.tar.gz
frameworks_av-8d9d585ce5b1aa284289a27dda048c6317b104e7.tar.bz2
Merge "Bug 4364249 Play position is 0 after flushing AudioTrack"
-rw-r--r--include/media/AudioTrack.h1
-rw-r--r--media/libmedia/AudioTrack.cpp5
2 files changed, 5 insertions, 1 deletions
diff --git a/include/media/AudioTrack.h b/include/media/AudioTrack.h
index df30e8c..923518d 100644
--- a/include/media/AudioTrack.h
+++ b/include/media/AudioTrack.h
@@ -481,6 +481,7 @@ private:
bool mMarkerReached;
uint32_t mNewPosition;
uint32_t mUpdatePeriod;
+ bool mFlushed; // FIXME will be made obsolete by making flush() synchronous
uint32_t mFlags;
int mSessionId;
int mAuxEffectId;
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index 3949c39..cecedb5 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -259,6 +259,7 @@ status_t AudioTrack::set(
mMarkerReached = false;
mNewPosition = 0;
mUpdatePeriod = 0;
+ mFlushed = false;
mFlags = flags;
AudioSystem::acquireAudioSessionId(mSessionId);
@@ -337,6 +338,7 @@ void AudioTrack::start()
audio_track_cblk_t* cblk = mCblk;
if (mActive == 0) {
+ mFlushed = false;
mActive = 1;
mNewPosition = cblk->server + mUpdatePeriod;
cblk->lock.lock();
@@ -437,6 +439,7 @@ void AudioTrack::flush_l()
mUpdatePeriod = 0;
if (!mActive) {
+ mFlushed = true;
mAudioTrack->flush();
// Release AudioTrack callback thread in case it was waiting for new buffers
// in AudioTrack::obtainBuffer()
@@ -655,7 +658,7 @@ status_t AudioTrack::getPosition(uint32_t *position)
{
if (position == 0) return BAD_VALUE;
AutoMutex lock(mLock);
- *position = mCblk->server;
+ *position = mFlushed ? 0 : mCblk->server;
return NO_ERROR;
}