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

Commit c0ac355a authored by Chih-Yu Huang's avatar Chih-Yu Huang Committed by Chih-yu Huang
Browse files

Close the handle returned by WrapNativeCodec2GrallocHandle()

WrapNativeCodec2GrallocHandle() creates a new native handle, and
clones the fd of the input native handle. The caller should explicitly
close and delete the returned native handle.

This CL updates the description of WrapNativeCodec2GrallocHandle(),
and calls native_handle_close() and native_handle_delete() if the
ownership of the returned handle is not transfered to
C2GraphicAllocation successfully.

Bug: 181541291
Test: android.media.cts.AdaptivePlaybackTest

Change-Id: I53726b61115a212675a199ddcd843df1fead948c
parent 047263a0
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -201,6 +201,8 @@ struct InputSurfaceConnection::Impl : public ComponentWrapper {
        c2_status_t err = mAllocator->priorGraphicAllocation(handle, &alloc);
        mAllocatorMutex.unlock();
        if (err != OK) {
            native_handle_close(handle);
            native_handle_delete(handle);
            return UNKNOWN_ERROR;
        }
        std::shared_ptr<C2GraphicBlock> block =
+2 −0
Original line number Diff line number Diff line
@@ -392,6 +392,8 @@ status_t C2OMXNode::emptyBuffer(
        if (err != OK) {
            (void)fd0.release();
            (void)fd1.release();
            native_handle_close(handle);
            native_handle_delete(handle);
            return UNKNOWN_ERROR;
        }
        block = _C2BlockFactory::CreateGraphicBlock(alloc);
+2 −0
Original line number Diff line number Diff line
@@ -713,6 +713,8 @@ std::shared_ptr<C2Buffer> GraphicMetadataBuffer::asC2Buffer() {
    c2_status_t err = mAlloc->priorGraphicAllocation(handle, &alloc);
    if (err != C2_OK) {
        ALOGD("Failed to wrap VideoNativeMetadata into C2GraphicAllocation");
        native_handle_close(handle);
        native_handle_delete(handle);
        return nullptr;
    }
    std::shared_ptr<C2GraphicBlock> block = _C2BlockFactory::CreateGraphicBlock(alloc);
+2 −1
Original line number Diff line number Diff line
@@ -37,7 +37,8 @@ native_handle_t *UnwrapNativeCodec2GrallocHandle(const C2Handle *const handle);
 * Wrap the gralloc handle and metadata into Codec2 handle recognized by
 * C2AllocatorGralloc.
 *
 * @return a new NON-OWNING C2Handle that must be deleted using native_handle_delete.
 * @return a new NON-OWNING C2Handle that must be closed and deleted using native_handle_close and
 * native_handle_delete.
 */
C2Handle *WrapNativeCodec2GrallocHandle(
        const native_handle_t *const handle,
+2 −0
Original line number Diff line number Diff line
@@ -364,6 +364,8 @@ private:
                std::shared_ptr<C2GraphicAllocation> alloc;
                c2_status_t err = mAllocator->priorGraphicAllocation(c2Handle, &alloc);
                if (err != C2_OK) {
                    native_handle_close(c2Handle);
                    native_handle_delete(c2Handle);
                    return err;
                }
                std::shared_ptr<C2BufferQueueBlockPoolData> poolData =