diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp index 1183ca3b49777..d8705a7ce9ca1 100644 --- a/media/jni/android_media_MediaCodec.cpp +++ b/media/jni/android_media_MediaCodec.cpp @@ -1285,7 +1285,7 @@ static void throwCryptoException(JNIEnv *env, status_t err, const char *msg, CHECK(clazz.get() != NULL); jmethodID constructID = - env->GetMethodID(clazz.get(), "", "(ILjava/lang/String;)V"); + env->GetMethodID(clazz.get(), "", "(Ljava/lang/String;IIII)V"); CHECK(constructID != NULL); std::string defaultMsg = "Unknown Error"; @@ -1335,14 +1335,14 @@ static void throwCryptoException(JNIEnv *env, status_t err, const char *msg, break; } - std::string msgStr(msg != NULL ? msg : defaultMsg.c_str()); - if (crypto != NULL) { - msgStr = DrmUtils::GetExceptionMessage(err, msgStr.c_str(), crypto); - } - jstring msgObj = env->NewStringUTF(msgStr.c_str()); + std::string originalMsg(msg != NULL ? msg : defaultMsg.c_str()); + DrmStatus dStatus(err, originalMsg.c_str()); + std::string detailedMsg(DrmUtils::GetExceptionMessage(dStatus, defaultMsg.c_str(), crypto)); + jstring msgObj = env->NewStringUTF(detailedMsg.c_str()); jthrowable exception = - (jthrowable)env->NewObject(clazz.get(), constructID, jerr, msgObj); + (jthrowable)env->NewObject(clazz.get(), constructID, msgObj, jerr, + dStatus.getCdmErr(), dStatus.getOemErr(), dStatus.getContext()); env->Throw(exception); }