diff options
| author | 2020-04-30 17:12:33 +0000 | |
|---|---|---|
| committer | 2020-04-30 17:12:33 +0000 | |
| commit | c8a654c21a9f3b248e5ee4a52af478e1cb9fcf9c (patch) | |
| tree | e03806f2d24dcace17a69893056b7d5172a5aec9 | |
| parent | 8e47f58e6bbeaa3f3f75d88562e7849202beea51 (diff) | |
| parent | 8966662d4b5ad1521ce402b327b6cda957617382 (diff) | |
Merge "RELAND: "media: lazy MediaCodec.release()"" into rvc-dev
| -rw-r--r-- | media/jni/android_media_MediaCodec.cpp | 14 | ||||
| -rw-r--r-- | 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 b2b707b00829..98e68b8b53f2 100644 --- a/media/jni/android_media_MediaCodec.cpp +++ b/media/jni/android_media_MediaCodec.cpp @@ -232,6 +232,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 @@ -1114,7 +1121,10 @@ static sp<JMediaCodec> getMediaCodec(JNIEnv *env, jobject thiz) { } 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_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 8899fee7a73d..400ce1bc98e7 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); |