Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 957b67c8 authored by Hongguang's avatar Hongguang Committed by Hongguang Chen
Browse files

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
parent e48b49e3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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());
+2 −2
Original line number Diff line number Diff line
@@ -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;
        }
    }