diff options
author | Valerie Hau <vhau@google.com> | 2019-04-17 13:14:28 -0700 |
---|---|---|
committer | Valerie Hau <vhau@google.com> | 2019-04-23 11:38:03 -0700 |
commit | 491378a3d400c45aa63290315d4a5ab8e773de33 (patch) | |
tree | 03de5ae0c68957fa3cd5630482fefe3cddbdf3ca | |
parent | 252fd9dfe83b621ae0cdcb279af0f6624aea05d6 (diff) | |
download | libhardware-491378a3d400c45aa63290315d4a5ab8e773de33.tar.gz |
Add validateBufferSize and getTransportSize to gralloc.h
Bug: 130669566
Test: build, boot
Change-Id: Ic141e1c6f16d0e3c1e81c2bc6c5170e30bc60f3f
-rw-r--r-- | include/hardware/gralloc.h | 32 | ||||
-rw-r--r-- | tests/hardware/struct-offset.cpp | 4 |
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); |