diff options
author | Vova Sharaienko <sharaienko@google.com> | 2021-11-18 19:23:44 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-11-18 19:23:44 +0000 |
commit | 9cb7cb3ffba46830d6b560f50f36f408948e3403 (patch) | |
tree | 9a66cb90115fcca2d6add714639f8fb532f3e3a3 | |
parent | 9574400ab592a54a0c895d590d927a28d6c3bcba (diff) | |
parent | 6100b431a26ccdffd79b4477bc1a884a1a63d80f (diff) | |
download | v4l2_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.bp | 1 | ||||
-rw-r--r-- | plugin_store/C2VdaBqBlockPool.cpp | 18 | ||||
-rw-r--r-- | plugin_store/include/v4l2_codec2/plugin_store/C2VdaBqBlockPool.h | 4 |
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. |