summaryrefslogtreecommitdiff
path: root/GrallocHAL/src/mali_gralloc_buffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'GrallocHAL/src/mali_gralloc_buffer.h')
-rw-r--r--GrallocHAL/src/mali_gralloc_buffer.h426
1 files changed, 0 insertions, 426 deletions
diff --git a/GrallocHAL/src/mali_gralloc_buffer.h b/GrallocHAL/src/mali_gralloc_buffer.h
deleted file mode 100644
index a163d1a..0000000
--- a/GrallocHAL/src/mali_gralloc_buffer.h
+++ /dev/null
@@ -1,426 +0,0 @@
-/*
- * Copyright (C) 2017-2020 ARM Limited. All rights reserved.
- *
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef MALI_GRALLOC_BUFFER_H_
-#define MALI_GRALLOC_BUFFER_H_
-
-#include <stdint.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/mman.h>
-#include <cutils/native_handle.h>
-#include <string.h>
-#include <log/log.h>
-#include <inttypes.h>
-
-/* the max string size of GRALLOC_HARDWARE_GPU0 & GRALLOC_HARDWARE_FB0
- * 8 is big enough for "gpu0" & "fb0" currently
- */
-#define MALI_GRALLOC_HARDWARE_MAX_STR_LEN 8
-
-/* Define number of shared file descriptors. Not guaranteed to be constant for a private_handle_t object
- * as fds that do not get initialized may instead be treated as integers.
- */
-
-#define NUM_INTS_IN_PRIVATE_HANDLE ((sizeof(struct private_handle_t) - sizeof(native_handle)) / sizeof(int))
-
-#define SZ_4K 0x00001000
-#define SZ_2M 0x00200000
-
-/*
- * Maximum number of pixel format planes.
- * Plane [0]: Single plane formats (inc. RGB, YUV) and Y
- * Plane [1]: U/V, UV
- * Plane [2]: V/U
- */
-#define MAX_PLANES 3
-
-#ifdef __cplusplus
-#define DEFAULT_INITIALIZER(x) = x
-#else
-#define DEFAULT_INITIALIZER(x)
-#endif
-
-typedef struct plane_info {
-
- /*
- * Offset to plane (in bytes),
- * from the start of the allocation.
- */
- int64_t offset;
-
- uint32_t fd_idx;
- uint64_t size;
-
- /*
- * Byte Stride: number of bytes between two vertically adjacent
- * pixels in given plane. This can be mathematically described by:
- *
- * byte_stride = ALIGN((alloc_width * bpp)/8, alignment)
- *
- * where,
- *
- * alloc_width: width of plane in pixels (c.f. pixel_stride)
- * bpp: average bits per pixel
- * alignment (in bytes): dependent upon pixel format and usage
- *
- * For uncompressed allocations, byte_stride might contain additional
- * padding beyond the alloc_width. For AFBC, alignment is zero.
- */
- uint32_t byte_stride;
-
- /*
- * Dimensions of plane (in pixels).
- *
- * For single plane formats, pixels equates to luma samples.
- * For multi-plane formats, pixels equates to the number of sample sites
- * for the corresponding plane, even if subsampled.
- *
- * AFBC compressed formats: requested width/height are rounded-up
- * to a whole AFBC superblock/tile (next superblock at minimum).
- * Uncompressed formats: dimensions typically match width and height
- * but might require pixel stride alignment.
- *
- * See 'byte_stride' for relationship between byte_stride and alloc_width.
- *
- * Any crop rectangle defined by GRALLOC_ARM_BUFFER_ATTR_CROP_RECT must
- * be wholly within the allocation dimensions. The crop region top-left
- * will be relative to the start of allocation.
- */
- uint32_t alloc_width;
- uint32_t alloc_height;
-} plane_info_t;
-
-struct private_handle_t;
-
-#ifndef __cplusplus
-/* C99 with pedantic don't allow anonymous unions which is used in below struct
- * Disable pedantic for C for this struct only.
- */
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wpedantic"
-#endif
-
-#ifdef __cplusplus
-struct private_handle_t : public native_handle
-{
-private:
- /* Having a default constructor makes sure that we zero out the padding
- * which prevents data leak. */
- private_handle_t() = default;
-
-public:
-
-#else
-struct private_handle_t
-{
- struct native_handle nativeHandle;
-#endif
-
-#ifdef __cplusplus
- /* Never intended to be used from C code */
- enum
- {
- PRIV_FLAGS_USES_2PRIVATE_DATA = 1U << 4,
- PRIV_FLAGS_USES_3PRIVATE_DATA = 1U << 5,
- };
-
- enum
- {
- LOCK_STATE_WRITE = 1 << 31,
- LOCK_STATE_MAPPED = 1 << 30,
- LOCK_STATE_READ_MASK = 0x3FFFFFFF
- };
-#endif
-
- /*
- * Shared file descriptor for dma_buf sharing. This must be the first element in the
- * structure so that binder knows where it is and can properly share it between
- * processes.
- * DO NOT MOVE THIS ELEMENT!
- */
- union {
- int fds[5];
- };
-
- // ints
- int magic DEFAULT_INITIALIZER(sMagic);
- int flags DEFAULT_INITIALIZER(0);
-
- int fd_count DEFAULT_INITIALIZER(1);
-
- /*
- * Input properties.
- *
- * req_format: Pixel format, base + private modifiers.
- * width/height: Buffer dimensions.
- * producer/consumer_usage: Buffer usage (indicates IP)
- */
- int width DEFAULT_INITIALIZER(0);
- int height DEFAULT_INITIALIZER(0);
- int req_format DEFAULT_INITIALIZER(0);
- uint64_t producer_usage DEFAULT_INITIALIZER(0);
- uint64_t consumer_usage DEFAULT_INITIALIZER(0);
-
- /*
- * DEPRECATED members.
- * Equivalent information can be obtained from other fields:
- *
- * - 'internal_format' --> alloc_format
- * - 'stride' (pixel stride) ~= plane_info[0].alloc_width
- * - 'byte_stride' ~= plane_info[0].byte_stride
- * - 'internalWidth' ~= plane_info[0].alloc_width
- * - 'internalHeight' ~= plane_info[0].alloc_height
- *
- * '~=' (approximately equal) is used because the fields were either previously
- * incorrectly populated by gralloc or the meaning has slightly changed.
- *
- * NOTE: 'stride' values sometimes vary significantly from plane_info[0].alloc_width.
- */
- int stride DEFAULT_INITIALIZER(0);
-
- /*
- * Allocation properties.
- *
- * alloc_format: Pixel format (base + modifiers). NOTE: base might differ from requested
- * format (req_format) where fallback to single-plane format was required.
- * plane_info: Per plane allocation information.
- * size: Total bytes allocated for buffer (inc. all planes, layers. etc.).
- * layer_count: Number of layers allocated to buffer.
- * All layers are the same size (in bytes).
- * Multi-layers supported in v1.0, where GRALLOC1_CAPABILITY_LAYERED_BUFFERS is enabled.
- * Layer size: 'size' / 'layer_count'.
- * Layer (n) offset: n * ('size' / 'layer_count'), n=0 for the first layer.
- *
- */
- uint64_t alloc_format DEFAULT_INITIALIZER(0);
- plane_info_t plane_info[MAX_PLANES] DEFAULT_INITIALIZER({});
- uint32_t layer_count DEFAULT_INITIALIZER(0);
-
- uint64_t backing_store_id DEFAULT_INITIALIZER(0x0);
- int cpu_read DEFAULT_INITIALIZER(0); /**< Buffer is locked for CPU read when non-zero. */
- int cpu_write DEFAULT_INITIALIZER(0); /**< Buffer is locked for CPU write when non-zero. */
- int allocating_pid DEFAULT_INITIALIZER(0);
- int remote_pid DEFAULT_INITIALIZER(-1);
- int ref_count DEFAULT_INITIALIZER(0);
- // locally mapped shared attribute area
-
- int ion_handles[3];
- uint64_t bases[3];
- uint64_t alloc_sizes[3];
-
- void *attr_base __attribute__((aligned (8))) DEFAULT_INITIALIZER(nullptr);
- off_t offset __attribute__((aligned (8))) DEFAULT_INITIALIZER(0);
-
- /* Size of the attribute shared region in bytes. */
- uint64_t attr_size __attribute__((aligned (8))) DEFAULT_INITIALIZER(0);
-
- uint64_t reserved_region_size DEFAULT_INITIALIZER(0);
-
- uint64_t imapper_version DEFAULT_INITIALIZER(0);
-
-#ifdef __cplusplus
- /*
- * We track the number of integers in the structure. There are 16 unconditional
- * integers (magic - pid, yuv_info, fd and offset). Note that the fd element is
- * considered an int not an fd because it is not intended to be used outside the
- * surface flinger process. The GRALLOC_ARM_NUM_INTS variable is used to track the
- * number of integers that are conditionally included. Similar considerations apply
- * to the number of fds.
- */
- static const int sMagic = 0x3141592;
-
- private_handle_t(
- int _flags,
- uint64_t _alloc_sizes[3],
- uint64_t _consumer_usage, uint64_t _producer_usage,
- int _fds[5], int _fd_count,
- int _req_format, uint64_t _alloc_format,
- int _width, int _height, int _stride,
- uint64_t _layer_count, plane_info_t _plane_info[MAX_PLANES])
- : private_handle_t()
- {
- flags = _flags;
- fd_count = _fd_count;
- width = _width;
- height = _height;
- req_format = _req_format;
- producer_usage = _producer_usage;
- consumer_usage = _consumer_usage;
- stride = _stride;
- alloc_format = _alloc_format;
- layer_count = _layer_count;
- allocating_pid = getpid();
- ref_count = 1;
- version = sizeof(native_handle);
- set_numfds(fd_count);
- memcpy(plane_info, _plane_info, sizeof(plane_info_t) * MAX_PLANES);
-
- if (_fds)
- memcpy(fds, _fds, sizeof(fds));
-
- if (_alloc_sizes)
- memcpy(alloc_sizes, _alloc_sizes, sizeof(alloc_sizes));
-
- memset(bases, 0, sizeof(bases));
- memset(ion_handles, 0, sizeof(ion_handles));
- }
-
- ~private_handle_t()
- {
- magic = 0;
- }
-
- /* Set the number of allocated fds in the handle to n*/
- void set_numfds(int n)
- {
- int total_ints =
- (sizeof(struct private_handle_t) - sizeof(native_handle)) / sizeof(int);
-
- numFds = n;
- numInts = total_ints - n;
- }
-
- /* Increments number of allocated fds in the handle by n */
- int incr_numfds(int n)
- {
- numFds += n;
- numInts -= n;
-
- return numFds;
- }
-
- static int validate(const native_handle *h)
- {
- const private_handle_t *hnd = (const private_handle_t *)h;
- if (!h || h->version != sizeof(native_handle) || hnd->magic != sMagic ||
- h->numFds + h->numInts != NUM_INTS_IN_PRIVATE_HANDLE)
- {
- return -EINVAL;
- }
- return 0;
- }
-
- bool is_multi_plane() const
- {
- /* For multi-plane, the byte stride for the second plane will always be non-zero. */
- return (plane_info[1].byte_stride != 0);
- }
-
- uint64_t get_usage() const
- {
- return producer_usage | consumer_usage;
- }
-
- int get_share_attr_fd_index() const
- {
- /* share_attr can be at idx 1 to 4 */
- if (fd_count <= 0 || fd_count > 4)
- return -1;
-
- return fd_count;
- }
-
- int get_share_attr_fd() const
- {
- int idx = get_share_attr_fd_index();
-
- if (idx <= 0)
- return -1;
-
- return fds[idx];
- }
-
- void set_share_attr_fd(int fd)
- {
- int idx = get_share_attr_fd_index();
-
- if (idx <= 0)
- return;
-
- fds[idx] = fd;
- }
-
- void close_share_attr_fd()
- {
- int fd = get_share_attr_fd();
-
- if (fd < 0)
- return;
-
- close(fd);
- }
-
- void dump(const char *str) const
- {
- ALOGE("[%s] "
- "numInts(%d) numFds(%d) fd_count(%d) "
- "fd(%d %d %d %d %d) "
- "flags(%d) "
- "wh(%d %d) "
- "req_format(%#x) alloc_format(%#" PRIx64 ") "
- "usage_pc(0x%" PRIx64 " 0x%" PRIx64 ") "
- "stride(%d) "
- "psize(%" PRIu64 ") byte_stride(%d) internal_wh(%d %d) "
- "psize1(%" PRIu64 ") byte_stride1(%d) internal_wh1(%d %d) "
- "psize2(%" PRIu64 ") byte_stride2(%d) internal_wh2(%d %d) "
- "alloc_format(0x%" PRIx64 ") "
- "alloc_sizes(%" PRIu64 " %" PRIu64 " %" PRIu64 ") "
- "layer_count(%d) "
- "bases(%p %p %p %p) "
- "\n",
- str,
- numInts, numFds, fd_count,
- fds[0], fds[1], fds[2], fds[3], fds[4],
- flags,
- width, height,
- req_format, alloc_format,
- producer_usage, consumer_usage,
- stride,
- plane_info[0].size, plane_info[0].byte_stride, plane_info[0].alloc_width, plane_info[0].alloc_height,
- plane_info[1].size, plane_info[1].byte_stride, plane_info[1].alloc_width, plane_info[1].alloc_height,
- plane_info[2].size, plane_info[2].byte_stride, plane_info[2].alloc_width, plane_info[2].alloc_height,
- alloc_format,
- alloc_sizes[0], alloc_sizes[1], alloc_sizes[2],
- layer_count,
- (void*)bases[0], (void*)bases[1], (void*)bases[2], attr_base
- );
- }
-
- int get_alloc_format() const
- {
- return (int)(alloc_format & 0x00000000ffffffffULL);
- }
-
- static private_handle_t *dynamicCast(const native_handle *in)
- {
- if (validate(in) == 0)
- {
- return (private_handle_t *)in;
- }
-
- return NULL;
- }
-#endif
-};
-#ifndef __cplusplus
-/* Restore previous diagnostic for pedantic */
-#pragma GCC diagnostic pop
-#endif
-
-#endif /* MALI_GRALLOC_BUFFER_H_ */