summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp
diff options
context:
space:
mode:
authorChong Zhang <chz@google.com>2014-08-13 13:48:10 -0700
committerChong Zhang <chz@google.com>2014-08-13 13:51:10 -0700
commitde01afbbc55ac9c5c23ec66154603f34217aed2c (patch)
tree5760148c6c4249771d269058289fba9694766344 /media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp
parente6e18e8de729316b3fac7733f9ebc7f1b3feba95 (diff)
downloadframeworks_av-de01afbbc55ac9c5c23ec66154603f34217aed2c.zip
frameworks_av-de01afbbc55ac9c5c23ec66154603f34217aed2c.tar.gz
frameworks_av-de01afbbc55ac9c5c23ec66154603f34217aed2c.tar.bz2
cache up to 200K bytes (instead of 10 buffers) in DecoderPassThrough
Bug: 16892521 Change-Id: I0e2da4134a37e632f9f2c29d1d27d8fded7a7863
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp')
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp
index eec6960..c9be0dd 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp
@@ -31,6 +31,7 @@
namespace android {
static const int kMaxPendingBuffers = 10;
+static const int kMaxCachedBytes = 200000;
NuPlayer::DecoderPassThrough::DecoderPassThrough(
const sp<AMessage> &notify)
@@ -39,6 +40,7 @@ NuPlayer::DecoderPassThrough::DecoderPassThrough(
mBufferGeneration(0),
mReachedEOS(true),
mPendingBuffers(0),
+ mCachedBytes(0),
mComponentName("pass through decoder") {
mDecoderLooper = new ALooper;
mDecoderLooper->setName("NuPlayerDecoderPassThrough");
@@ -78,6 +80,7 @@ bool NuPlayer::DecoderPassThrough::supportsSeamlessFormatChange(
void NuPlayer::DecoderPassThrough::onConfigure(const sp<AMessage> &format) {
ALOGV("[%s] onConfigure", mComponentName.c_str());
mPendingBuffers = 0;
+ mCachedBytes = 0;
mReachedEOS = false;
++mBufferGeneration;
@@ -96,7 +99,7 @@ bool NuPlayer::DecoderPassThrough::isStaleReply(const sp<AMessage> &msg) {
}
void NuPlayer::DecoderPassThrough::requestABuffer() {
- if (mPendingBuffers >= kMaxPendingBuffers || mReachedEOS) {
+ if (mCachedBytes >= kMaxCachedBytes || mReachedEOS) {
ALOGV("[%s] mReachedEOS=%d, max pending buffers(%d:%d)",
mComponentName.c_str(), (mReachedEOS ? 1 : 0),
mPendingBuffers, kMaxPendingBuffers);
@@ -136,8 +139,11 @@ void android::NuPlayer::DecoderPassThrough::onInputBufferFilled(
return;
}
+ mCachedBytes += buffer->size();
+
sp<AMessage> reply = new AMessage(kWhatBufferConsumed, id());
reply->setInt32("generation", mBufferGeneration);
+ reply->setInt32("size", buffer->size());
sp<AMessage> notify = mNotify->dup();
notify->setInt32("what", kWhatDrainThisBuffer);
@@ -146,8 +152,9 @@ void android::NuPlayer::DecoderPassThrough::onInputBufferFilled(
notify->post();
}
-void NuPlayer::DecoderPassThrough::onBufferConsumed() {
+void NuPlayer::DecoderPassThrough::onBufferConsumed(int32_t size) {
mPendingBuffers--;
+ mCachedBytes -= size;
sp<AMessage> message = new AMessage(kWhatRequestABuffer, id());
message->setInt32("generation", mBufferGeneration);
message->post();
@@ -160,6 +167,7 @@ void NuPlayer::DecoderPassThrough::onFlush() {
notify->setInt32("what", kWhatFlushCompleted);
notify->post();
mPendingBuffers = 0;
+ mCachedBytes = 0;
mReachedEOS = false;
}
@@ -205,7 +213,9 @@ void NuPlayer::DecoderPassThrough::onMessageReceived(const sp<AMessage> &msg) {
case kWhatBufferConsumed:
{
if (!isStaleReply(msg)) {
- onBufferConsumed();
+ int32_t size;
+ CHECK(msg->findInt32("size", &size));
+ onBufferConsumed(size);
}
break;
}