diff options
Diffstat (limited to 'media/libstagefright/AudioPlayer.cpp')
-rw-r--r-- | media/libstagefright/AudioPlayer.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/media/libstagefright/AudioPlayer.cpp b/media/libstagefright/AudioPlayer.cpp index 00c749e..fcea848 100644 --- a/media/libstagefright/AudioPlayer.cpp +++ b/media/libstagefright/AudioPlayer.cpp @@ -309,6 +309,10 @@ size_t AudioPlayer::fillBuffer(void *data, size_t size) { return 0; } + bool postSeekComplete = false; + bool postEOS = false; + int64_t postEOSDelayUs = 0; + size_t size_done = 0; size_t size_remaining = size; while (size_remaining > 0) { @@ -335,7 +339,7 @@ size_t AudioPlayer::fillBuffer(void *data, size_t size) { mSeeking = false; if (mObserver) { - mObserver->postAudioSeekComplete(); + postSeekComplete = true; } } } @@ -387,7 +391,8 @@ size_t AudioPlayer::fillBuffer(void *data, size_t size) { numFramesPendingPlayout, timeToCompletionUs, timeToCompletionUs / 1E6); - mObserver->postAudioEOS(timeToCompletionUs + mLatencyUs); + postEOS = true; + postEOSDelayUs = timeToCompletionUs + mLatencyUs; } mReachedEOS = true; @@ -431,8 +436,18 @@ size_t AudioPlayer::fillBuffer(void *data, size_t size) { size_remaining -= copy; } - Mutex::Autolock autoLock(mLock); - mNumFramesPlayed += size_done / mFrameSize; + { + Mutex::Autolock autoLock(mLock); + mNumFramesPlayed += size_done / mFrameSize; + } + + if (postEOS) { + mObserver->postAudioEOS(postEOSDelayUs); + } + + if (postSeekComplete) { + mObserver->postAudioSeekComplete(); + } return size_done; } |