aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVova Sharaienko <sharaienko@google.com>2021-11-18 19:23:44 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-11-18 19:23:44 +0000
commit9cb7cb3ffba46830d6b560f50f36f408948e3403 (patch)
tree9a66cb90115fcca2d6add714639f8fb532f3e3a3
parent9574400ab592a54a0c895d590d927a28d6c3bcba (diff)
parent6100b431a26ccdffd79b4477bc1a884a1a63d80f (diff)
downloadv4l2_codec2-9cb7cb3ffba46830d6b560f50f36f408948e3403.tar.gz
Merge "Use dma-buf inode number as buffer unique id am: 53f82c27d5" into sc-v2-dev-plus-aosp
-rw-r--r--plugin_store/Android.bp1
-rw-r--r--plugin_store/C2VdaBqBlockPool.cpp18
-rw-r--r--plugin_store/include/v4l2_codec2/plugin_store/C2VdaBqBlockPool.h4
3 files changed, 21 insertions, 2 deletions
diff --git a/plugin_store/Android.bp b/plugin_store/Android.bp
index 621cbfc..c6f313c 100644
--- a/plugin_store/Android.bp
+++ b/plugin_store/Android.bp
@@ -18,7 +18,6 @@ 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 8271d81..4a4198f 100644
--- a/plugin_store/C2VdaBqBlockPool.cpp
+++ b/plugin_store/C2VdaBqBlockPool.cpp
@@ -9,6 +9,9 @@
#include <errno.h>
#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
#include <chrono>
#include <mutex>
@@ -24,7 +27,6 @@
#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>
@@ -52,6 +54,20 @@ 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/include/v4l2_codec2/plugin_store/C2VdaBqBlockPool.h b/plugin_store/include/v4l2_codec2/plugin_store/C2VdaBqBlockPool.h
index fde6299..fe66410 100644
--- a/plugin_store/include/v4l2_codec2/plugin_store/C2VdaBqBlockPool.h
+++ b/plugin_store/include/v4l2_codec2/plugin_store/C2VdaBqBlockPool.h
@@ -16,6 +16,10 @@
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.