RELAND: "media: lazy MediaCodec.release()"

Bug: 129008570
Test: atest CtsMediaTestCases -- --module-arg CtsMediaTestCases:size:small
Test: manual app test
Change-Id: I991d9dbf4acc00b0d205da5ea516c5866423e2e6
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index b2b707b..98e68b8 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -232,6 +232,13 @@
     });
 }
 
+void JMediaCodec::releaseAsync() {
+    if (mCodec != NULL) {
+        mCodec->releaseAsync();
+    }
+    mInitStatus = NO_INIT;
+}
+
 JMediaCodec::~JMediaCodec() {
     if (mLooper != NULL) {
         /* MediaCodec and looper should have been released explicitly already
@@ -1114,7 +1121,10 @@
 }
 
 static void android_media_MediaCodec_release(JNIEnv *env, jobject thiz) {
-    setMediaCodec(env, thiz, NULL);
+    sp<JMediaCodec> codec = getMediaCodec(env, thiz);
+    if (codec != NULL) {
+        codec->releaseAsync();
+    }
 }
 
 static void throwCodecException(JNIEnv *env, status_t err, int32_t actionCode, const char *msg) {
@@ -2889,7 +2899,7 @@
 
 static void android_media_MediaCodec_native_finalize(
         JNIEnv *env, jobject thiz) {
-    android_media_MediaCodec_release(env, thiz);
+    setMediaCodec(env, thiz, NULL);
 }
 
 // MediaCodec.LinearBlock