diff options
-rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 18 | ||||
-rw-r--r-- | media/libstagefright/include/AwesomePlayer.h | 1 |
2 files changed, 13 insertions, 6 deletions
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index b350daf..914e409 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -52,6 +52,7 @@ #include "include/LiveSession.h" #define USE_SURFACE_ALLOC 1 +#define FRAME_DROP_FREQ 7 namespace android { @@ -1255,7 +1256,7 @@ void AwesomePlayer::onVideoEvent() { if (mFlags & FIRST_FRAME) { mFlags &= ~FIRST_FRAME; - + mSinceLastDropped = 0; mTimeSourceDeltaUs = ts->getRealTimeUs() - timeUs; } @@ -1283,12 +1284,16 @@ void AwesomePlayer::onVideoEvent() { if (latenessUs > 40000) { // We're more than 40ms late. LOGV("we're late by %lld us (%.2f secs)", latenessUs, latenessUs / 1E6); + if ( mSinceLastDropped > FRAME_DROP_FREQ) + { + LOGV("we're late by %lld us (%.2f secs) dropping one after %d frames", latenessUs, latenessUs / 1E6, mSinceLastDropped); + mSinceLastDropped = 0; + mVideoBuffer->release(); + mVideoBuffer = NULL; - mVideoBuffer->release(); - mVideoBuffer = NULL; - - postVideoEvent_l(); - return; + postVideoEvent_l(); + return; + } } if (latenessUs < -10000) { @@ -1305,6 +1310,7 @@ void AwesomePlayer::onVideoEvent() { } if (mVideoRenderer != NULL) { + mSinceLastDropped++; mVideoRenderer->render(mVideoBuffer); } diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h index 0c67432..17b83c1 100644 --- a/media/libstagefright/include/AwesomePlayer.h +++ b/media/libstagefright/include/AwesomePlayer.h @@ -151,6 +151,7 @@ private: uint32_t mFlags; uint32_t mExtractorFlags; + uint32_t mSinceLastDropped; int64_t mTimeSourceDeltaUs; int64_t mVideoTimeUs; |