From cec7febc48ff76b293ace0cc12a6288f13f72293 Mon Sep 17 00:00:00 2001 From: Chong Zhang Date: Thu, 15 Jan 2015 11:22:24 -0800 Subject: do not use paused postition if it's not available bug: 18896133 bug: 18996505 Change-Id: I1e24fabe3fe8f2275b1ccc0df100cb2c4ba2264b --- media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 @@ NuPlayer::Renderer::Renderer( mNotifyCompleteVideo(false), mSyncQueues(false), mPaused(false), - mPausePositionMediaTimeUs(0), + mPausePositionMediaTimeUs(-1), mVideoSampleReceived(false), mVideoRenderingStarted(false), mVideoRenderingStartGeneration(0), @@ -200,7 +200,7 @@ status_t NuPlayer::Renderer::getCurrentPositionOnLooper( // 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 @@ void NuPlayer::Renderer::onPause() { 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); -- cgit v1.1