NuPlayerRenderer: update max media time when audio EOS is reached.
This allows the just scheduled video frame to be rendered when its timestamp
is larger than max audio media time.
Test: media post-submit tests passed
Bug: 67854291
Bug: 65204641
Change-Id: Iadee5690b8895b1d9be3fdefcafe3535837d12e8
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index de2c6db..cc7f688 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -110,6 +110,7 @@
mAnchorTimeMediaUs(-1),
mAnchorNumFramesWritten(-1),
mVideoLateByUs(0ll),
+ mNextVideoTimeMediaUs(-1),
mHasAudio(false),
mHasVideo(false),
mNotifyCompleteAudio(false),
@@ -301,6 +302,7 @@
mMediaClock->clearAnchor();
mVideoLateByUs = 0;
+ mNextVideoTimeMediaUs = -1;
mSyncQueues = false;
}
@@ -1277,9 +1279,10 @@
mAnchorTimeMediaUs = mediaTimeUs;
}
}
+ mNextVideoTimeMediaUs = mediaTimeUs + 100000;
if (!mHasAudio) {
// smooth out videos >= 10fps
- mMediaClock->updateMaxTimeMedia(mediaTimeUs + 100000);
+ mMediaClock->updateMaxTimeMedia(mNextVideoTimeMediaUs);
}
if (!mVideoSampleReceived || mediaTimeUs < mAudioFirstAnchorTimeMediaUs) {
@@ -1411,6 +1414,13 @@
// Video might outlive audio. Clear anchor to enable video only case.
mAnchorTimeMediaUs = -1;
mHasAudio = false;
+ if (mNextVideoTimeMediaUs >= 0) {
+ int64_t mediaUs = 0;
+ mMediaClock->getMediaTime(ALooper::GetNowUs(), &mediaUs);
+ if (mNextVideoTimeMediaUs > mediaUs) {
+ mMediaClock->updateMaxTimeMedia(mNextVideoTimeMediaUs);
+ }
+ }
}
}
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h
index 567f8f1..a047975 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h
@@ -177,6 +177,7 @@
int64_t mAnchorTimeMediaUs;
int64_t mAnchorNumFramesWritten;
int64_t mVideoLateByUs;
+ int64_t mNextVideoTimeMediaUs;
bool mHasAudio;
bool mHasVideo;