From 063ea0ad05daabe7ac6c5d7bdee57e08ddeeb5ae Mon Sep 17 00:00:00 2001 From: Wonsik Kim Date: Thu, 27 Feb 2020 12:37:44 -0800 Subject: [PATCH] media: lazy MediaCodec.release() Bug: 129008570 Test: atest CtsMediaTestCases -- --module-arg CtsMediaTestCases:size:small Test: ResourceManagerService_test Change-Id: Ieb4c0b2e1506e10e2987cc41150dd7ad186bb500 --- media/jni/android_media_MediaCodec.cpp | 14 ++++++++++++-- media/jni/android_media_MediaCodec.h | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp index 893e51654b682..737c95d73e6c4 100644 --- a/media/jni/android_media_MediaCodec.cpp +++ b/media/jni/android_media_MediaCodec.cpp @@ -242,6 +242,13 @@ void JMediaCodec::release() { }); } +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 @@ -1124,7 +1131,10 @@ static sp getMediaCodec(JNIEnv *env, jobject thiz) { } static void android_media_MediaCodec_release(JNIEnv *env, jobject thiz) { - setMediaCodec(env, thiz, NULL); + sp codec = getMediaCodec(env, thiz); + if (codec != NULL) { + codec->releaseAsync(); + } } static void throwCodecException(JNIEnv *env, status_t err, int32_t actionCode, const char *msg) { @@ -2797,7 +2807,7 @@ static void android_media_MediaCodec_native_setup( static void android_media_MediaCodec_native_finalize( JNIEnv *env, jobject thiz) { - android_media_MediaCodec_release(env, thiz); + setMediaCodec(env, thiz, NULL); } // MediaCodec.LinearBlock diff --git a/media/jni/android_media_MediaCodec.h b/media/jni/android_media_MediaCodec.h index 8899fee7a73d2..400ce1bc98e76 100644 --- a/media/jni/android_media_MediaCodec.h +++ b/media/jni/android_media_MediaCodec.h @@ -61,6 +61,7 @@ struct JMediaCodec : public AHandler { void registerSelf(); void release(); + void releaseAsync(); status_t enableOnFrameRenderedListener(jboolean enable);