diff options
author | Andreas Huber <andih@google.com> | 2011-09-16 15:09:22 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2011-09-16 15:19:59 -0700 |
commit | 3fe62150fa3dd6d25cb84aad80bc9e27ddd16c45 (patch) | |
tree | 4d969afd449d31381899275bf9b9fa2a87f9a24e /media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp | |
parent | 078cfcf7cce9185ec7559910d08b0bc02bfc88a3 (diff) | |
download | frameworks_av-3fe62150fa3dd6d25cb84aad80bc9e27ddd16c45.zip frameworks_av-3fe62150fa3dd6d25cb84aad80bc9e27ddd16c45.tar.gz frameworks_av-3fe62150fa3dd6d25cb84aad80bc9e27ddd16c45.tar.bz2 |
In order to recover from video lagging behind audio, drop avc frames
that are not referenced by other frames before feeding them into the decoder.
Change-Id: I822190af8f8329567bff8da1ea23136d0a765481
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp index 3b3fca2..07e347e 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp @@ -47,7 +47,8 @@ NuPlayer::Renderer::Renderer( mHasVideo(false), mSyncQueues(false), mPaused(false), - mLastPositionUpdateUs(-1ll) { + mLastPositionUpdateUs(-1ll), + mVideoLateByUs(0ll) { } NuPlayer::Renderer::~Renderer() { @@ -357,22 +358,26 @@ void NuPlayer::Renderer::onDrainVideoQueue() { mVideoQueue.erase(mVideoQueue.begin()); entry = NULL; + + mVideoLateByUs = 0ll; + + notifyPosition(); return; } -#if 0 int64_t mediaTimeUs; CHECK(entry->mBuffer->meta()->findInt64("timeUs", &mediaTimeUs)); int64_t realTimeUs = mediaTimeUs - mAnchorTimeMediaUs + mAnchorTimeRealUs; - int64_t lateByUs = ALooper::GetNowUs() - realTimeUs; + mVideoLateByUs = ALooper::GetNowUs() - realTimeUs; - if (lateByUs > 40000) { - LOGI("video late by %lld us (%.2f secs)", lateByUs, lateByUs / 1E6); + bool tooLate = (mVideoLateByUs > 40000); + + if (tooLate) { + LOGV("video late by %lld us (%.2f secs)", lateByUs, lateByUs / 1E6); } else { LOGV("rendering video at media time %.2f secs", mediaTimeUs / 1E6); } -#endif entry->mNotifyConsumed->setInt32("render", true); entry->mNotifyConsumed->post(); @@ -604,6 +609,7 @@ void NuPlayer::Renderer::notifyPosition() { sp<AMessage> notify = mNotify->dup(); notify->setInt32("what", kWhatPosition); notify->setInt64("positionUs", positionUs); + notify->setInt64("videoLateByUs", mVideoLateByUs); notify->post(); } |