From 981081c729ef869f72ab291d588954b75e4c4a90 Mon Sep 17 00:00:00 2001 From: Chih-Yu Huang <akahuang@google.com> Date: Mon, 8 Nov 2021 14:08:02 +0900 Subject: [PATCH] plugin_store: split getDmabufId() function to dedicated file Currently, getDmabufId() is placed at C2VdqBqBlockPool.h. However, the header file already has many dependencies. The caller of getDmabufId() would need to add many unnecessary dependency libraries. This CL splits the method to a dedicated file to reduce this issue. Bug: 205501954 Test: m -j32 Change-Id: Ie7e366ddf77ceec105cbacf6d16e6b6dc3a58198 --- plugin_store/Android.bp | 1 + plugin_store/C2VdaBqBlockPool.cpp | 18 +---------- plugin_store/DmabufHelpers.cpp | 32 +++++++++++++++++++ .../plugin_store/C2VdaBqBlockPool.h | 4 --- .../v4l2_codec2/plugin_store/DmabufHelpers.h | 20 ++++++++++++ 5 files changed, 54 insertions(+), 21 deletions(-) create mode 100644 plugin_store/DmabufHelpers.cpp create mode 100644 plugin_store/include/v4l2_codec2/plugin_store/DmabufHelpers.h diff --git a/plugin_store/Android.bp b/plugin_store/Android.bp index c6f313c..621cbfc 100644 --- a/plugin_store/Android.bp +++ b/plugin_store/Android.bp @@ -18,6 +18,7 @@ cc_library_shared { srcs: [ "C2VdaBqBlockPool.cpp", "C2VdaPooledBlockPool.cpp", + "DmabufHelpers.cpp", "H2BGraphicBufferProducer.cpp", "V4L2PluginStore.cpp", "VendorAllocatorLoader.cpp", diff --git a/plugin_store/C2VdaBqBlockPool.cpp b/plugin_store/C2VdaBqBlockPool.cpp index 4a4198f..8271d81 100644 --- a/plugin_store/C2VdaBqBlockPool.cpp +++ b/plugin_store/C2VdaBqBlockPool.cpp @@ -9,9 +9,6 @@ #include <errno.h> #include <string.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <unistd.h> #include <chrono> #include <mutex> @@ -27,6 +24,7 @@ #include <log/log.h> #include <ui/BufferQueueDefs.h> +#include <v4l2_codec2/plugin_store/DmabufHelpers.h> #include <v4l2_codec2/plugin_store/H2BGraphicBufferProducer.h> #include <v4l2_codec2/plugin_store/V4L2AllocatorId.h> @@ -54,20 +52,6 @@ using ::android::BufferQueueDefs::NUM_BUFFER_SLOTS; using ::android::hardware::Return; using HProducerListener = ::android::hardware::graphics::bufferqueue::V2_0::IProducerListener; -std::optional<unique_id_t> getDmabufId(int dmabufFd) { - struct stat sb {}; - if (fstat(dmabufFd, &sb) != 0) { - return std::nullopt; - } - - if (sb.st_size == 0) { - ALOGE("Dma-buf size is 0. Please check your kernel is v5.3+"); - return std::nullopt; - } - - return static_cast<unique_id_t>(sb.st_ino); -} - static c2_status_t asC2Error(status_t err) { switch (err) { case OK: diff --git a/plugin_store/DmabufHelpers.cpp b/plugin_store/DmabufHelpers.cpp new file mode 100644 index 0000000..4441d66 --- /dev/null +++ b/plugin_store/DmabufHelpers.cpp @@ -0,0 +1,32 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +//#define LOG_NDEBUG 0 +#define LOG_TAG "DmabufHelpers" + +#include <v4l2_codec2/plugin_store/DmabufHelpers.h> + +#include <sys/stat.h> +#include <sys/types.h> +#include <unistd.h> + +#include <log/log.h> + +namespace android { + +std::optional<unique_id_t> getDmabufId(int dmabufFd) { + struct stat sb {}; + if (fstat(dmabufFd, &sb) != 0) { + return std::nullopt; + } + + if (sb.st_size == 0) { + ALOGE("Dma-buf size is 0. Please check your kernel is v5.3+"); + return std::nullopt; + } + + return static_cast<unique_id_t>(sb.st_ino); +} + +} // namespace android diff --git a/plugin_store/include/v4l2_codec2/plugin_store/C2VdaBqBlockPool.h b/plugin_store/include/v4l2_codec2/plugin_store/C2VdaBqBlockPool.h index fe66410..fde6299 100644 --- a/plugin_store/include/v4l2_codec2/plugin_store/C2VdaBqBlockPool.h +++ b/plugin_store/include/v4l2_codec2/plugin_store/C2VdaBqBlockPool.h @@ -16,10 +16,6 @@ namespace android { -// We use the value of dma-buf inode as the unique ID of the graphic buffers. -using unique_id_t = uint32_t; -std::optional<unique_id_t> getDmabufId(int dmabufFd); - /** * The BufferQueue-backed block pool design which supports to request arbitrary count of graphic * buffers from IGBP, and use this buffer set among codec component and client. diff --git a/plugin_store/include/v4l2_codec2/plugin_store/DmabufHelpers.h b/plugin_store/include/v4l2_codec2/plugin_store/DmabufHelpers.h new file mode 100644 index 0000000..dd38fee --- /dev/null +++ b/plugin_store/include/v4l2_codec2/plugin_store/DmabufHelpers.h @@ -0,0 +1,20 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ANDROID_V4L2_CODEC2_PLUGIN_STORE_DMABUF_HELPERS_H +#define ANDROID_V4L2_CODEC2_PLUGIN_STORE_DMABUF_HELPERS_H + +#include <inttypes.h> + +#include <optional> + +namespace android { + +// We use the value of dma-buf inode as the unique ID of the graphic buffers. +using unique_id_t = uint32_t; +std::optional<unique_id_t> getDmabufId(int dmabufFd); + +} // namespace android + +#endif // ANDROID_V4L2_CODEC2_PLUGIN_STORE_DMABUF_HELPERS_H -- GitLab