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
diff --git a/media/codec2/sfplugin/C2OMXNode.cpp b/media/codec2/sfplugin/C2OMXNode.cpp
index ab73245..3a7af10 100644
--- a/media/codec2/sfplugin/C2OMXNode.cpp
+++ b/media/codec2/sfplugin/C2OMXNode.cpp
@@ -392,6 +392,8 @@
if (err != OK) {
(void)fd0.release();
(void)fd1.release();
+ native_handle_close(handle);
+ native_handle_delete(handle);
return UNKNOWN_ERROR;
}
block = _C2BlockFactory::CreateGraphicBlock(alloc);
diff --git a/media/codec2/sfplugin/Codec2Buffer.cpp b/media/codec2/sfplugin/Codec2Buffer.cpp
index fc4ee51..34e6a88 100644
--- a/media/codec2/sfplugin/Codec2Buffer.cpp
+++ b/media/codec2/sfplugin/Codec2Buffer.cpp
@@ -713,6 +713,8 @@
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);