MTP host: Fix problems reading large data packets

Fixes problem reading large thumbnails via PTP

Bug: 4065217

Change-Id: I643672512829c93ab0827091f39103dbb1918071
Signed-off-by: Mike Lockwood <lockwood@android.com>
diff --git a/media/mtp/MtpDataPacket.cpp b/media/mtp/MtpDataPacket.cpp
index 801edb0..0b0c80d 100644
--- a/media/mtp/MtpDataPacket.cpp
+++ b/media/mtp/MtpDataPacket.cpp
@@ -28,7 +28,7 @@
 namespace android {
 
 MtpDataPacket::MtpDataPacket()
-    :   MtpPacket(512),
+    :   MtpPacket(16384),   // MAX_USBFS_BUFFER_SIZE
         mOffset(MTP_CONTAINER_HEADER_SIZE)
 {
 }
@@ -399,10 +399,10 @@
     if (length >= MTP_CONTAINER_HEADER_SIZE) {
         // look at the length field to see if the data spans multiple packets
         uint32_t totalLength = MtpPacket::getUInt32(MTP_CONTAINER_LENGTH_OFFSET);
+        allocate(totalLength);
         while (totalLength > length) {
-            allocate(length + mAllocationIncrement);
             request->buffer = mBuffer + length;
-            request->buffer_length = mAllocationIncrement;
+            request->buffer_length = totalLength - length;
             int ret = transfer(request);
             if (ret >= 0)
                 length += ret;