summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice
diff options
context:
space:
mode:
authorWei Jia <wjia@google.com>2014-10-10 00:30:58 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-10-10 00:30:59 +0000
commit185a295d4518878d5e2bca7b7c3e51df44492df1 (patch)
tree04769da6b39dae04105048d398c5a4f9915ea835 /media/libmediaplayerservice
parentaf238382e33a027494a53556e6104b7245e7213f (diff)
parent49966fff32b27f8821ebe280f25688b3c4f5f73f (diff)
downloadframeworks_av-185a295d4518878d5e2bca7b7c3e51df44492df1.zip
frameworks_av-185a295d4518878d5e2bca7b7c3e51df44492df1.tar.gz
frameworks_av-185a295d4518878d5e2bca7b7c3e51df44492df1.tar.bz2
Merge "NuPlayerRenderer: adjust anchor time correctly for video only case." into lmp-dev
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp19
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h1
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;