media: VideoEncoderTest: set input buffer size for playback

Bug: 18921559
Change-Id: I228df533ed7dc54476b6b213f3e4cb4e129deb7e
diff --git a/tests/tests/media/src/android/media/cts/VideoEncoderTest.java b/tests/tests/media/src/android/media/cts/VideoEncoderTest.java
index 08564f6..7b777a2 100644
--- a/tests/tests/media/src/android/media/cts/VideoEncoderTest.java
+++ b/tests/tests/media/src/android/media/cts/VideoEncoderTest.java
@@ -62,6 +62,7 @@
     class VideoStorage {
         private LinkedList<Pair<ByteBuffer, BufferInfo>> mStream;
         private MediaFormat mFormat;
+        private int mInputBufferSize;
 
         public VideoStorage() {
             mStream = new LinkedList<Pair<ByteBuffer, BufferInfo>>();
@@ -73,7 +74,9 @@
 
         public void addBuffer(ByteBuffer buffer, BufferInfo info) {
             ByteBuffer savedBuffer = ByteBuffer.allocate(info.size);
-            savedBuffer.put(buffer);
+            if (info.size > mInputBufferSize) {
+                mInputBufferSize = info.size;
+            }
             BufferInfo savedInfo = new BufferInfo();
             savedInfo.set(0, savedBuffer.position(), info.presentationTimeUs, info.flags);
             mStream.addLast(Pair.create(savedBuffer, savedInfo));
@@ -96,7 +99,16 @@
                     if (it.hasNext()) {
                         Pair<ByteBuffer, BufferInfo> el = it.next();
                         el.first.clear();
-                        codec.getInputBuffer(ix).put(el.first);
+                        try {
+                            codec.getInputBuffer(ix).put(el.first);
+                        } catch (java.nio.BufferOverflowException e) {
+                            Log.e(TAG, "cannot fit " + el.first.limit()
+                                    + "-byte encoded buffer into "
+                                    + codec.getInputBuffer(ix).remaining()
+                                    + "-byte input buffer of " + codec.getName()
+                                    + " configured for " + codec.getInputFormat());
+                            throw e;
+                        }
                         BufferInfo info = el.second;
                         codec.queueInputBuffer(
                                 ix, 0, info.size, info.presentationTimeUs, info.flags);
@@ -110,6 +122,7 @@
                     Log.i(TAG, "got output format " + format);
                 }
             });
+            mFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, mInputBufferSize);
             decoder.configure(mFormat, surface, null /* crypto */, 0 /* flags */);
             decoder.start();
             synchronized (condition) {