summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2020-06-09 17:41:01 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-06-09 17:41:01 +0000
commit275248ddfe83f8349d291da06c7189c95c94a7e2 (patch)
treec2ef43ad5c24374ea6b8c7b0cb94a8330c847fe2
parentb2a9bb32afb6ad8a7313ddda2b52b13da367d8df (diff)
parentd4ce4e3074017a8db4611d80a6c0dc3192f1409b (diff)
Merge "media: further resource cleanup for async release" into rvc-dev
-rw-r--r--media/jni/android_media_MediaCodec.cpp16
-rw-r--r--media/jni/android_media_MediaCodec.h2
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;