summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValerie Hau <vhau@google.com>2019-04-17 13:14:28 -0700
committerValerie Hau <vhau@google.com>2019-04-23 11:38:03 -0700
commit491378a3d400c45aa63290315d4a5ab8e773de33 (patch)
tree03de5ae0c68957fa3cd5630482fefe3cddbdf3ca
parent252fd9dfe83b621ae0cdcb279af0f6624aea05d6 (diff)
downloadlibhardware-491378a3d400c45aa63290315d4a5ab8e773de33.tar.gz
Add validateBufferSize and getTransportSize to gralloc.h
Bug: 130669566 Test: build, boot Change-Id: Ic141e1c6f16d0e3c1e81c2bc6c5170e30bc60f3f
-rw-r--r--include/hardware/gralloc.h32
-rw-r--r--tests/hardware/struct-offset.cpp4
2 files changed, 34 insertions, 2 deletions
diff --git a/include/hardware/gralloc.h b/include/hardware/gralloc.h
index b4f7e5a4..10a153c0 100644
--- a/include/hardware/gralloc.h
+++ b/include/hardware/gralloc.h
@@ -314,8 +314,38 @@ typedef struct gralloc_module_t {
int l, int t, int w, int h,
struct android_ycbcr *ycbcr, int fenceFd);
+ /* getTransportSize(..., outNumFds, outNumInts)
+ * This function is mandatory on devices running IMapper2.1 or higher.
+ *
+ * Get the transport size of a buffer. An imported buffer handle is a raw
+ * buffer handle with the process-local runtime data appended. This
+ * function, for example, allows a caller to omit the process-local
+ * runtime data at the tail when serializing the imported buffer handle.
+ *
+ * Note that a client might or might not omit the process-local runtime
+ * data when sending an imported buffer handle. The mapper must support
+ * both cases on the receiving end.
+ */
+ int32_t (*getTransportSize)(
+ struct gralloc_module_t const* module, buffer_handle_t handle, uint32_t *outNumFds,
+ uint32_t *outNumInts);
+
+ /* validateBufferSize(..., w, h, format, usage, stride)
+ * This function is mandatory on devices running IMapper2.1 or higher.
+ *
+ * Validate that the buffer can be safely accessed by a caller who assumes
+ * the specified width, height, format, usage, and stride. This must at least validate
+ * that the buffer size is large enough. Validating the buffer against
+ * individual buffer attributes is optional.
+ */
+ int32_t (*validateBufferSize)(
+ struct gralloc_module_t const* device, buffer_handle_t handle,
+ uint32_t w, uint32_t h, int32_t format, int usage,
+ uint32_t stride);
+
/* reserved for future use */
- void* reserved_proc[3];
+ void* reserved_proc[1];
+
} gralloc_module_t;
/*****************************************************************************/
diff --git a/tests/hardware/struct-offset.cpp b/tests/hardware/struct-offset.cpp
index 0cf145a1..82411ada 100644
--- a/tests/hardware/struct-offset.cpp
+++ b/tests/hardware/struct-offset.cpp
@@ -185,7 +185,9 @@ void CheckOffsets(void) {
CHECK_MEMBER_AT(gralloc_module_t, lockAsync, 152, 296);
CHECK_MEMBER_AT(gralloc_module_t, unlockAsync, 156, 304);
CHECK_MEMBER_AT(gralloc_module_t, lockAsync_ycbcr, 160, 312);
- CHECK_MEMBER_AT(gralloc_module_t, reserved_proc, 164, 320);
+ CHECK_MEMBER_AT(gralloc_module_t, getTransportSize, 164, 320);
+ CHECK_MEMBER_AT(gralloc_module_t, validateBufferSize, 168, 328);
+ CHECK_MEMBER_AT(gralloc_module_t, reserved_proc, 172, 336);
CHECK_MEMBER_AT(alloc_device_t, common, 0, 0);
CHECK_MEMBER_AT(alloc_device_t, alloc, 64, 120);