do not use paused postition if it's not available
bug: 18896133
bug: 18996505
Change-Id: I1e24fabe3fe8f2275b1ccc0df100cb2c4ba2264b
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index 2ea6d70..53dfa48 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -68,7 +68,7 @@
mNotifyCompleteVideo(false),
mSyncQueues(false),
mPaused(false),
- mPausePositionMediaTimeUs(0),
+ mPausePositionMediaTimeUs(-1),
mVideoSampleReceived(false),
mVideoRenderingStarted(false),
mVideoRenderingStartGeneration(0),
@@ -200,7 +200,7 @@
// Called either with mLock acquired or on renderer's thread.
bool NuPlayer::Renderer::getCurrentPositionIfPaused_l(int64_t *mediaUs) {
- if (!mPaused) {
+ if (!mPaused || mPausePositionMediaTimeUs < 0ll) {
return false;
}
*mediaUs = mPausePositionMediaTimeUs;
@@ -1222,6 +1222,12 @@
if (getCurrentPositionFromAnchor(
¤tPositionUs, ALooper::GetNowUs()) == OK) {
mPausePositionMediaTimeUs = currentPositionUs;
+ } else {
+ // Set paused position to -1 (unavailabe) if we don't have anchor time
+ // This could happen if client does a seekTo() immediately followed by
+ // pause(). Renderer will be flushed with anchor time cleared. We don't
+ // want to leave stale value in mPausePositionMediaTimeUs.
+ mPausePositionMediaTimeUs = -1;
}
{
Mutex::Autolock autoLock(mLock);