From 49966fff32b27f8821ebe280f25688b3c4f5f73f Mon Sep 17 00:00:00 2001 From: Wei Jia Date: Wed, 8 Oct 2014 18:44:45 -0700 Subject: NuPlayerRenderer: adjust anchor time correctly for video only case. Bug: 17922171 Change-Id: I4c7e9e7f5ab96d3675d012ae30f78ef945394103 --- .../nuplayer/NuPlayerRenderer.cpp | 19 ++++++++++++++++++- .../libmediaplayerservice/nuplayer/NuPlayerRenderer.h | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) (limited to 'media') diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp index d6bf1de..e5c64f6 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp @@ -72,6 +72,7 @@ NuPlayer::Renderer::Renderer( mHasVideo(false), mSyncQueues(false), mPaused(false), + mPauseStartedTimeRealUs(-1), mVideoSampleReceived(false), mVideoRenderingStarted(false), mVideoRenderingStartGeneration(0), @@ -574,7 +575,9 @@ void NuPlayer::Renderer::postDrainVideoQueue() { if (!mHasAudio) { mAnchorTimeMediaUs = mediaTimeUs; mAnchorTimeRealUs = nowUs; - notifyPosition(); + if (!mPaused || mVideoSampleReceived) { + notifyPosition(); + } } realTimeUs = nowUs; } else { @@ -645,6 +648,10 @@ void NuPlayer::Renderer::onDrainVideoQueue() { } } else { mVideoLateByUs = 0ll; + if (!mHasAudio && !mVideoSampleReceived) { + mAnchorTimeMediaUs = -1; + mAnchorTimeRealUs = -1; + } } entry->mNotifyConsumed->setInt64("timestampNs", realTimeUs * 1000ll); @@ -830,6 +837,9 @@ void NuPlayer::Renderer::onFlush(const sp &msg) { { Mutex::Autolock autoLock(mLock); syncQueuesDone_l(); + if (!mHasAudio) { + mPauseStartedTimeRealUs = -1; + } } ALOGV("flushing %s", audio ? "audio" : "video"); @@ -980,6 +990,9 @@ void NuPlayer::Renderer::onPause() { ++mVideoQueueGeneration; prepareForMediaRenderingStart(); mPaused = true; + if (!mHasAudio) { + mPauseStartedTimeRealUs = ALooper::GetNowUs(); + } } mDrainAudioQueuePending = false; @@ -1008,6 +1021,10 @@ void NuPlayer::Renderer::onResume() { Mutex::Autolock autoLock(mLock); mPaused = false; + if (!mHasAudio && mPauseStartedTimeRealUs != -1) { + mAnchorTimeRealUs += ALooper::GetNowUs() - mPauseStartedTimeRealUs; + mPauseStartedTimeRealUs = -1; + } if (!mAudioQueue.empty()) { postDrainAudioQueue_l(); diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h index 4237902..d27c238 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h @@ -130,6 +130,7 @@ private: bool mSyncQueues; bool mPaused; + int64_t mPauseStartedTimeRealUs; bool mVideoSampleReceived; bool mVideoRenderingStarted; int32_t mVideoRenderingStartGeneration; -- cgit v1.1