diff options
-rw-r--r-- | bufferinfo/BufferInfoGetter.cpp | 19 | ||||
-rw-r--r-- | bufferinfo/BufferInfoGetter.h | 4 |
2 files changed, 23 insertions, 0 deletions
diff --git a/bufferinfo/BufferInfoGetter.cpp b/bufferinfo/BufferInfoGetter.cpp index fcd0532..95c1a23 100644 --- a/bufferinfo/BufferInfoGetter.cpp +++ b/bufferinfo/BufferInfoGetter.cpp @@ -22,9 +22,14 @@ #include "BufferInfoMapperMetadata.h" #endif +#include <sys/stat.h> +#include <sys/types.h> +#include <unistd.h> #include <xf86drm.h> #include <xf86drmMode.h> +#include <mutex> + #include "utils/log.h" #include "utils/properties.h" @@ -48,6 +53,20 @@ BufferInfoGetter *BufferInfoGetter::GetInstance() { return inst.get(); } +std::optional<BufferUniqueId> BufferInfoGetter::GetUniqueId( + buffer_handle_t handle) { + struct stat sb {}; + if (fstat(handle->data[0], &sb) != 0) { + return {}; + } + + if (sb.st_size == 0) { + return {}; + } + + return static_cast<BufferUniqueId>(sb.st_ino); +} + int LegacyBufferInfoGetter::Init() { int ret = hw_get_module( GRALLOC_HARDWARE_MODULE_ID, diff --git a/bufferinfo/BufferInfoGetter.h b/bufferinfo/BufferInfoGetter.h index 667b5c1..5591296 100644 --- a/bufferinfo/BufferInfoGetter.h +++ b/bufferinfo/BufferInfoGetter.h @@ -31,6 +31,8 @@ namespace android { +using BufferUniqueId = uint64_t; + class BufferInfoGetter { public: virtual ~BufferInfoGetter() = default; @@ -38,6 +40,8 @@ class BufferInfoGetter { virtual auto GetBoInfo(buffer_handle_t handle) -> std::optional<BufferInfo> = 0; + virtual std::optional<BufferUniqueId> GetUniqueId(buffer_handle_t handle); + static BufferInfoGetter *GetInstance(); static bool IsDrmFormatRgb(uint32_t drm_format); |