Correct tuner native_handle handling.

*) releaseAvHandle
The fds in NativeHandle are owned by NativeHandle. They will be closed
in the NativeHandle's destructor. Because the native_handle_close is
called in MediaEvent, to avoid double close, the NativeHandle should be
duplicated.

*) getMediaEvent, handleAvShareMemory
The fds in NativeHandle would be closed in NativeHandle's destructor. To
keep using those fds, they should be duplicated.


Bug: 196232482
Test: atest android.media.tv.tuner.cts
Change-Id: I2b6c0d10d6896a192d7ff90119d4514d33eee72e
This commit is contained in:
Hongguang
2021-08-11 11:56:54 -07:00
committed by Hongguang Chen
parent e48b49e3f5
commit 957b67c84e
2 changed files with 3 additions and 3 deletions

View File

@@ -641,7 +641,7 @@ void FilterClientCallbackImpl::getMediaEvent(jobjectArray &arr, const int size,
if (mediaEvent.avMemory.fds.size() > 0 || mediaEvent.avDataId != 0) {
sp<MediaEvent> mediaEventSp =
new MediaEvent(mFilterClient, makeFromAidl(mediaEvent.avMemory),
new MediaEvent(mFilterClient, dupFromAidl(mediaEvent.avMemory),
mediaEvent.avDataId, dataLength + offset, obj);
mediaEventSp->mAvHandleRefCnt++;
env->SetLongField(obj, eventContext, (jlong)mediaEventSp.get());

View File

@@ -160,7 +160,7 @@ Result FilterClient::getId64Bit(int64_t& id) {
Result FilterClient::releaseAvHandle(native_handle_t* handle, uint64_t avDataId) {
if (mTunerFilter != nullptr) {
Status s = mTunerFilter->releaseAvHandle(makeToAidl(handle), avDataId);
Status s = mTunerFilter->releaseAvHandle(dupToAidl(handle), avDataId);
return ClientHelper::getServiceSpecificErrorCode(s);
}
@@ -308,7 +308,7 @@ void FilterClient::handleAvShareMemory() {
NativeHandle avMemory;
Status s = mTunerFilter->getAvSharedHandle(&avMemory, &size);
if (s.isOk()) {
mAvSharedHandle = native_handle_clone(makeFromAidl(avMemory));
mAvSharedHandle = dupFromAidl(avMemory);
mAvSharedMemSize = size;
}
}