diff options
| author | 2020-06-09 17:41:01 +0000 | |
|---|---|---|
| committer | 2020-06-09 17:41:01 +0000 | |
| commit | 275248ddfe83f8349d291da06c7189c95c94a7e2 (patch) | |
| tree | c2ef43ad5c24374ea6b8c7b0cb94a8330c847fe2 | |
| parent | b2a9bb32afb6ad8a7313ddda2b52b13da367d8df (diff) | |
| parent | d4ce4e3074017a8db4611d80a6c0dc3192f1409b (diff) | |
Merge "media: further resource cleanup for async release" into rvc-dev
| -rw-r--r-- | media/jni/android_media_MediaCodec.cpp | 16 | ||||
| -rw-r--r-- | media/jni/android_media_MediaCodec.h | 2 |
2 files changed, 14 insertions, 4 deletions
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp index a03b24cbbcf6..f970b598d6f8 100644 --- a/media/jni/android_media_MediaCodec.cpp +++ b/media/jni/android_media_MediaCodec.cpp @@ -233,10 +233,12 @@ void JMediaCodec::release() { } void JMediaCodec::releaseAsync() { - if (mCodec != NULL) { - mCodec->releaseAsync(); - } - mInitStatus = NO_INIT; + std::call_once(mAsyncReleaseFlag, [this] { + if (mCodec != NULL) { + mCodec->releaseAsync(new AMessage(kWhatAsyncReleaseComplete, this)); + } + mInitStatus = NO_INIT; + }); } JMediaCodec::~JMediaCodec() { @@ -1084,6 +1086,12 @@ void JMediaCodec::onMessageReceived(const sp<AMessage> &msg) { handleFrameRenderedNotification(msg); break; } + case kWhatAsyncReleaseComplete: + { + mCodec.clear(); + mLooper->stop(); + break; + } default: TRESPASS(); } diff --git a/media/jni/android_media_MediaCodec.h b/media/jni/android_media_MediaCodec.h index 5c34341a86a1..a58f9a74b563 100644 --- a/media/jni/android_media_MediaCodec.h +++ b/media/jni/android_media_MediaCodec.h @@ -173,6 +173,7 @@ private: enum { kWhatCallbackNotify, kWhatFrameRendered, + kWhatAsyncReleaseComplete, }; jclass mClass; @@ -185,6 +186,7 @@ private: bool mGraphicOutput{false}; bool mHasCryptoOrDescrambler{false}; std::once_flag mReleaseFlag; + std::once_flag mAsyncReleaseFlag; sp<AMessage> mCallbackNotification; sp<AMessage> mOnFrameRenderedNotification; |