summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/AudioPlayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'media/libstagefright/AudioPlayer.cpp')
-rw-r--r--media/libstagefright/AudioPlayer.cpp23
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;
}