diff options
author | Wei Jia <wjia@google.com> | 2014-10-08 18:44:45 -0700 |
---|---|---|
committer | Wei Jia <wjia@google.com> | 2014-10-09 11:16:31 -0700 |
commit | 49966fff32b27f8821ebe280f25688b3c4f5f73f (patch) | |
tree | 7266302dc6bb2851a53e91f47c6fcf8548ae1e1a /media/libmediaplayerservice | |
parent | c4da004d4baef8cc4a631058549216c8d2383824 (diff) | |
download | frameworks_av-49966fff32b27f8821ebe280f25688b3c4f5f73f.zip frameworks_av-49966fff32b27f8821ebe280f25688b3c4f5f73f.tar.gz frameworks_av-49966fff32b27f8821ebe280f25688b3c4f5f73f.tar.bz2 |
NuPlayerRenderer: adjust anchor time correctly for video only case.
Bug: 17922171
Change-Id: I4c7e9e7f5ab96d3675d012ae30f78ef945394103
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp | 19 | ||||
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h | 1 |
2 files changed, 19 insertions, 1 deletions
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<AMessage> &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; |