OSDN Git Service

mediaplayer: limit number of outstanding buffer requests
authorLajos Molnar <lajos@google.com>
Wed, 10 Sep 2014 03:08:39 +0000 (20:08 -0700)
committerLajos Molnar <lajos@google.com>
Wed, 10 Sep 2014 03:40:54 +0000 (20:40 -0700)
Bug: 14679336
Change-Id: I94a20ada30a9a25065329a85fc884d32d154d029

media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.cpp

index c9be0dd..ab7906a 100644 (file)
@@ -115,9 +115,12 @@ void NuPlayer::DecoderPassThrough::requestABuffer() {
     notify->post();
     mPendingBuffers++;
 
-    sp<AMessage> message = new AMessage(kWhatRequestABuffer, id());
-    message->setInt32("generation", mBufferGeneration);
-    message->post();
+    // pending buffers will already result in requestABuffer
+    if (mPendingBuffers < kMaxPendingBuffers) {
+        sp<AMessage> message = new AMessage(kWhatRequestABuffer, id());
+        message->setInt32("generation", mBufferGeneration);
+        message->post();
+    }
     return;
 }
 
@@ -155,9 +158,7 @@ void android::NuPlayer::DecoderPassThrough::onInputBufferFilled(
 void NuPlayer::DecoderPassThrough::onBufferConsumed(int32_t size) {
     mPendingBuffers--;
     mCachedBytes -= size;
-    sp<AMessage> message = new AMessage(kWhatRequestABuffer, id());
-    message->setInt32("generation", mBufferGeneration);
-    message->post();
+    requestABuffer();
 }
 
 void NuPlayer::DecoderPassThrough::onFlush() {