diff --git a/media/libmedia/ICrypto.cpp b/media/libmedia/ICrypto.cpp
index d51fe01..3452e5c 100644
--- a/media/libmedia/ICrypto.cpp
+++ b/media/libmedia/ICrypto.cpp
@@ -20,7 +20,9 @@
 
 #include <binder/Parcel.h>
 #include <media/ICrypto.h>
+#include <media/stagefright/MediaErrors.h>
 #include <media/stagefright/foundation/ADebug.h>
+#include <media/stagefright/foundation/AString.h>
 
 namespace android {
 
@@ -96,7 +98,8 @@
             CryptoPlugin::Mode mode,
             const void *srcPtr,
             const CryptoPlugin::SubSample *subSamples, size_t numSubSamples,
-            void *dstPtr) {
+            void *dstPtr,
+            AString *errorDetailMsg) {
         Parcel data, reply;
         data.writeInterfaceToken(ICrypto::getInterfaceDescriptor());
         data.writeInt32(secure);
@@ -135,6 +138,10 @@
 
         status_t result = reply.readInt32();
 
+        if (result >= ERROR_DRM_VENDOR_MIN && result <= ERROR_DRM_VENDOR_MAX) {
+            errorDetailMsg->setTo(reply.readCString());
+        }
+
         if (result != OK) {
             return result;
         }
@@ -251,6 +258,8 @@
                 dstPtr = malloc(totalSize);
             }
 
+            AString errorDetailMsg;
+
             status_t err = decrypt(
                     secure,
                     key,
@@ -258,10 +267,16 @@
                     mode,
                     srcData,
                     subSamples, numSubSamples,
-                    dstPtr);
+                    dstPtr,
+                    &errorDetailMsg);
 
             reply->writeInt32(err);
 
+            if (err >= ERROR_DRM_VENDOR_MIN
+                    && err <= ERROR_DRM_VENDOR_MAX) {
+                reply->writeCString(errorDetailMsg.c_str());
+            }
+
             if (!secure) {
                 if (err == OK) {
                     reply->write(dstPtr, totalSize);
