Merge "NuPlayer: add audioDecoderStillNeeded." into lmp-dev
diff --git a/include/media/stagefright/MediaCodecSource.h b/include/media/stagefright/MediaCodecSource.h
index e1b2830..3629c8b 100644
--- a/include/media/stagefright/MediaCodecSource.h
+++ b/include/media/stagefright/MediaCodecSource.h
@@ -86,7 +86,7 @@
     void releaseEncoder();
     status_t feedEncoderInputBuffers();
     void scheduleDoMoreWork();
-    status_t doMoreWork();
+    status_t doMoreWork(int32_t numInput, int32_t numOutput);
     void suspend();
     void resume(int64_t skipFramesBeforeUs = -1ll);
     void signalEOS(status_t err = ERROR_END_OF_STREAM);
diff --git a/media/libstagefright/MediaCodecSource.cpp b/media/libstagefright/MediaCodecSource.cpp
index 27cd231..0fecda8 100644
--- a/media/libstagefright/MediaCodecSource.cpp
+++ b/media/libstagefright/MediaCodecSource.cpp
@@ -615,11 +615,11 @@
     return OK;
 }
 
-status_t MediaCodecSource::doMoreWork() {
-    status_t err;
+status_t MediaCodecSource::doMoreWork(int32_t numInput, int32_t numOutput) {
+    status_t err = OK;
 
     if (!(mFlags & FLAG_USE_SURFACE_INPUT)) {
-        for (;;) {
+        while (numInput-- > 0) {
             size_t bufferIndex;
             err = mEncoder->dequeueInputBuffer(&bufferIndex);
 
@@ -633,7 +633,7 @@
         feedEncoderInputBuffers();
     }
 
-    for (;;) {
+    while (numOutput-- > 0) {
         size_t bufferIndex;
         size_t offset;
         size_t size;
@@ -805,7 +805,16 @@
             break;
         }
 
-        status_t err = doMoreWork();
+        int32_t numInput, numOutput;
+
+        if (!msg->findInt32("input-buffers", &numInput)) {
+            numInput = INT32_MAX;
+        }
+        if (!msg->findInt32("output-buffers", &numOutput)) {
+            numOutput = INT32_MAX;
+        }
+
+        status_t err = doMoreWork(numInput, numOutput);
 
         if (err == OK) {
             scheduleDoMoreWork();