Merge "Fix race condition in linearblock release between TIS and MediaCodec" am: 49467f1cdf am: 409784587c
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1563873 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: I275c220f840dd3683ecdc8f59c8eae05e24295e0
This commit is contained in:
@@ -169,8 +169,9 @@ static fields_t gFields;
|
|||||||
static int IP_V4_LENGTH = 4;
|
static int IP_V4_LENGTH = 4;
|
||||||
static int IP_V6_LENGTH = 16;
|
static int IP_V6_LENGTH = 16;
|
||||||
|
|
||||||
void DestroyCallback(const C2Buffer * /* buf */, void *arg) {
|
void DestroyCallback(const C2Buffer * buf, void *arg) {
|
||||||
android::sp<android::MediaEvent> event = (android::MediaEvent *)arg;
|
android::sp<android::MediaEvent> event = (android::MediaEvent *)arg;
|
||||||
|
android::Mutex::Autolock autoLock(event->mLock);
|
||||||
if (event->mLinearBlockObj != NULL) {
|
if (event->mLinearBlockObj != NULL) {
|
||||||
JNIEnv *env = android::AndroidRuntime::getJNIEnv();
|
JNIEnv *env = android::AndroidRuntime::getJNIEnv();
|
||||||
env->DeleteWeakGlobalRef(event->mLinearBlockObj);
|
env->DeleteWeakGlobalRef(event->mLinearBlockObj);
|
||||||
@@ -179,6 +180,7 @@ void DestroyCallback(const C2Buffer * /* buf */, void *arg) {
|
|||||||
|
|
||||||
event->mAvHandleRefCnt--;
|
event->mAvHandleRefCnt--;
|
||||||
event->finalize();
|
event->finalize();
|
||||||
|
event->decStrong(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace android {
|
namespace android {
|
||||||
@@ -369,6 +371,7 @@ jobject MediaEvent::getLinearBlock() {
|
|||||||
pC2Buffer->setInfo(info);
|
pC2Buffer->setInfo(info);
|
||||||
}
|
}
|
||||||
pC2Buffer->registerOnDestroyNotify(&DestroyCallback, this);
|
pC2Buffer->registerOnDestroyNotify(&DestroyCallback, this);
|
||||||
|
incStrong(pC2Buffer.get());
|
||||||
jobject linearBlock =
|
jobject linearBlock =
|
||||||
env->NewObject(
|
env->NewObject(
|
||||||
env->FindClass("android/media/MediaCodec$LinearBlock"),
|
env->FindClass("android/media/MediaCodec$LinearBlock"),
|
||||||
@@ -3646,6 +3649,7 @@ static jobject android_media_tv_Tuner_media_event_get_linear_block(
|
|||||||
ALOGD("Failed get MediaEvent");
|
ALOGD("Failed get MediaEvent");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
android::Mutex::Autolock autoLock(mediaEventSp->mLock);
|
||||||
|
|
||||||
return mediaEventSp->getLinearBlock();
|
return mediaEventSp->getLinearBlock();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user