Fixed sample video corrupted in MediaCodec mode.

Change-Id: I50c5660072d40f6e297e58fd026ea04c89d6a70a
related-to-bug: 6732061
diff --git a/media/libmedia/ICrypto.cpp b/media/libmedia/ICrypto.cpp
index 3452e5c..2defc2d 100644
--- a/media/libmedia/ICrypto.cpp
+++ b/media/libmedia/ICrypto.cpp
@@ -91,7 +91,7 @@
         return reply.readInt32() != 0;
     }
 
-    virtual status_t decrypt(
+    virtual ssize_t decrypt(
             bool secure,
             const uint8_t key[16],
             const uint8_t iv[16],
@@ -136,21 +136,17 @@
 
         remote()->transact(DECRYPT, data, &reply);
 
-        status_t result = reply.readInt32();
+        ssize_t result = reply.readInt32();
 
         if (result >= ERROR_DRM_VENDOR_MIN && result <= ERROR_DRM_VENDOR_MAX) {
             errorDetailMsg->setTo(reply.readCString());
         }
 
-        if (result != OK) {
-            return result;
+        if (!secure && result >= 0) {
+            reply.read(dstPtr, result);
         }
 
-        if (!secure) {
-            reply.read(dstPtr, totalSize);
-        }
-
-        return OK;
+        return result;
     }
 
 private:
@@ -259,8 +255,7 @@
             }
 
             AString errorDetailMsg;
-
-            status_t err = decrypt(
+            ssize_t result = decrypt(
                     secure,
                     key,
                     iv,
@@ -270,18 +265,18 @@
                     dstPtr,
                     &errorDetailMsg);
 
-            reply->writeInt32(err);
+            reply->writeInt32(result);
 
-            if (err >= ERROR_DRM_VENDOR_MIN
-                    && err <= ERROR_DRM_VENDOR_MAX) {
+            if (result >= ERROR_DRM_VENDOR_MIN
+                && result <= ERROR_DRM_VENDOR_MAX) {
                 reply->writeCString(errorDetailMsg.c_str());
             }
 
             if (!secure) {
-                if (err == OK) {
-                    reply->write(dstPtr, totalSize);
+                if (result >= 0) {
+                    CHECK_LE(result, static_cast<ssize_t>(totalSize));
+                    reply->write(dstPtr, result);
                 }
-
                 free(dstPtr);
                 dstPtr = NULL;
             }