Merge "media: further resource cleanup for async release" into rvc-dev am: 275248ddfe am: 46bc5d070e am: 50d0b096cb am: 86bbd07325
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11795061 Change-Id: I076593827131a1592a2efec203c6e7d39d0074d5
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user