diff options
author | Jean-Michel Trivi <jmtrivi@google.com> | 2011-08-25 17:41:46 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-08-25 17:41:46 -0700 |
commit | 8d9d585ce5b1aa284289a27dda048c6317b104e7 (patch) | |
tree | 5965c0970a4d18dfec1d9563ad702058a5e80b5b | |
parent | 24245683b9285b0b53c8900f088cf146000501c4 (diff) | |
parent | cd07594333cbe8b2c86c6609cce01a74d6cc33f8 (diff) | |
download | frameworks_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.h | 1 | ||||
-rw-r--r-- | media/libmedia/AudioTrack.cpp | 5 |
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; } |