Merge "Fix issue which Ion handle are free twice." am: d70c636ad4

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

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: If9aae1d357e0edc2c79270cc075a7bdbfbb0c104
This commit is contained in:
Treehugger Robot
2020-12-30 11:49:21 +00:00
committed by Automerger Merge Worker

View File

@@ -337,7 +337,10 @@ jobject MediaEvent::getLinearBlock() {
} }
mIonHandle = new C2HandleIon(dup(mAvHandle->data[0]), mDataLength); mIonHandle = new C2HandleIon(dup(mAvHandle->data[0]), mDataLength);
std::shared_ptr<C2LinearBlock> block = _C2BlockFactory::CreateLinearBlock(mIonHandle); std::shared_ptr<C2LinearBlock> block = _C2BlockFactory::CreateLinearBlock(mIonHandle);
if (block != nullptr) {
// CreateLinearBlock delete mIonHandle after it create block successfully.
// ToDo: coordinate who is response to delete mIonHandle
mIonHandle = NULL;
JNIEnv *env = AndroidRuntime::getJNIEnv(); JNIEnv *env = AndroidRuntime::getJNIEnv();
std::unique_ptr<JMediaCodecLinearBlock> context{new JMediaCodecLinearBlock}; std::unique_ptr<JMediaCodecLinearBlock> context{new JMediaCodecLinearBlock};
context->mBlock = block; context->mBlock = block;
@@ -364,6 +367,14 @@ jobject MediaEvent::getLinearBlock() {
mLinearBlockObj = env->NewWeakGlobalRef(linearBlock); mLinearBlockObj = env->NewWeakGlobalRef(linearBlock);
mAvHandleRefCnt++; mAvHandleRefCnt++;
return mLinearBlockObj; return mLinearBlockObj;
} else {
native_handle_close(const_cast<native_handle_t*>(
reinterpret_cast<const native_handle_t*>(mIonHandle)));
native_handle_delete(const_cast<native_handle_t*>(
reinterpret_cast<const native_handle_t*>(mIonHandle)));
mIonHandle = NULL;
return NULL;
}
} }
uint64_t MediaEvent::getAudioHandle() { uint64_t MediaEvent::getAudioHandle() {