summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorpmehendale <pmehendale@nvidia.com>2011-01-06 14:43:49 -0800
committerJames Dong <jdong@google.com>2011-01-07 16:14:40 -0800
commit28f939db9d4dee1e8b59459e4b722fd19f2930f9 (patch)
tree82597f4e194bb3f012aff2ff6f5f9525c0ba0599 /media
parent2c602e6a66469c9fcd8bc4d7d64aa24134dad8d9 (diff)
downloadframeworks_base-28f939db9d4dee1e8b59459e4b722fd19f2930f9.zip
frameworks_base-28f939db9d4dee1e8b59459e4b722fd19f2930f9.tar.gz
frameworks_base-28f939db9d4dee1e8b59459e4b722fd19f2930f9.tar.bz2
Awesomeplayer : Frame dropping logic change
Changed late frame drop policy, now we are dropping only 1 in 8, late (> 40ms) frames. Dropping every late frame result in lot of noticible pauses, usually with peaky bitrate activity these pauses become more prominant. Dropping few frames is still required to allow overall playback chain, to regain the performance. Experimentally decided to drop Max one late frame in 8. Change-Id: If20848d619a76aaf8179b1e5c3155610e3bc85fd
Diffstat (limited to 'media')
-rw-r--r--media/libstagefright/AwesomePlayer.cpp18
-rw-r--r--media/libstagefright/include/AwesomePlayer.h1
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;