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