Merge "media: further resource cleanup for async release" into rvc-dev am: 275248ddfe am: 46bc5d070e am: 50d0b096cb

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11795061

Change-Id: Ia4b601c067542a691748e58cb81c2f1142b0baae
This commit is contained in:
TreeHugger Robot
2020-06-09 18:01:14 +00:00
committed by Automerger Merge Worker
2 changed files with 14 additions and 4 deletions

View File

@@ -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();
}

View File

@@ -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;