Merge "MediaCodec: change onError cb to return CodecException"
diff --git a/include/media/stagefright/MediaCodec.h b/include/media/stagefright/MediaCodec.h
index 046496c..a0ff997 100644
--- a/include/media/stagefright/MediaCodec.h
+++ b/include/media/stagefright/MediaCodec.h
@@ -279,7 +279,7 @@
 
     void onInputBufferAvailable();
     void onOutputBufferAvailable();
-    void onError(int32_t actionCode, status_t err);
+    void onError(status_t err, int32_t actionCode, const char *detail = NULL);
     void onOutputFormatChanged();
 
     status_t onSetParameters(const sp<AMessage> &params);
diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp
index f286659..24fd7ad 100644
--- a/media/libstagefright/MediaCodec.cpp
+++ b/media/libstagefright/MediaCodec.cpp
@@ -664,7 +664,7 @@
                             cancelPendingDequeueOperations();
 
                             if (mFlags & kFlagIsAsync) {
-                                onError(0, omxError);
+                                onError(omxError, 0);
                             }
                             setState(UNINITIALIZED);
                             break;
@@ -678,7 +678,7 @@
                             postActivityNotificationIfPossible();
 
                             if (mFlags & kFlagIsAsync) {
-                                onError(0, omxError);
+                                onError(omxError, 0);
                             }
                             setState(UNINITIALIZED);
                             break;
@@ -1916,12 +1916,16 @@
     }
 }
 
-void MediaCodec::onError(int32_t actionCode, status_t err) {
+void MediaCodec::onError(status_t err, int32_t actionCode, const char *detail) {
     if (mCallback != NULL) {
         sp<AMessage> msg = mCallback->dup();
         msg->setInt32("callbackID", CB_ERROR);
-        msg->setInt32("actionCode", actionCode);
         msg->setInt32("err", err);
+        msg->setInt32("actionCode", actionCode);
+
+        if (detail != NULL) {
+            msg->setString("detail", detail);
+        }
 
         msg->post();
     }