+++ /dev/null
-/*
- * Copyright 2015 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 ANDROID_HARDWARE_GRALLOC1_H
-#define ANDROID_HARDWARE_GRALLOC1_H
-
-#include <hardware/hardware.h>
-#include <system/window.h>
-
-__BEGIN_DECLS
-
-#define GRALLOC_MODULE_API_VERSION_1_0 HARDWARE_MODULE_API_VERSION(1, 0)
-#define GRALLOC_HARDWARE_MODULE_ID "gralloc"
-
-/*
- * Enums
- */
-
-typedef enum {
- GRALLOC1_CAPABILITY_INVALID = 0,
-
- /* If this capability is supported, then the outBuffers parameter to
- * allocate may be NULL, which instructs the device to report whether the
- * given allocation is possible or not. */
- GRALLOC1_CAPABILITY_TEST_ALLOCATE = 1,
-} gralloc1_capability_t;
-
-typedef enum {
- GRALLOC1_CONSUMER_USAGE_NONE = 0,
- GRALLOC1_CONSUMER_USAGE_CPU_READ_NEVER = 0,
- /* 1ULL << 0 */
- GRALLOC1_CONSUMER_USAGE_CPU_READ = 1ULL << 1,
- GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN = 1ULL << 2 |
- GRALLOC1_CONSUMER_USAGE_CPU_READ,
- /* 1ULL << 3 */
- /* 1ULL << 4 */
- /* 1ULL << 5 */
- /* 1ULL << 6 */
- /* 1ULL << 7 */
- GRALLOC1_CONSUMER_USAGE_GPU_TEXTURE = 1ULL << 8,
- /* 1ULL << 9 */
- /* 1ULL << 10 */
- GRALLOC1_CONSUMER_USAGE_HWCOMPOSER = 1ULL << 11,
- GRALLOC1_CONSUMER_USAGE_CLIENT_TARGET = 1ULL << 12,
- /* 1ULL << 13 */
- /* 1ULL << 14 */
- GRALLOC1_CONSUMER_USAGE_CURSOR = 1ULL << 15,
- GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER = 1ULL << 16,
- /* 1ULL << 17 */
- GRALLOC1_CONSUMER_USAGE_CAMERA = 1ULL << 18,
- /* 1ULL << 19 */
- GRALLOC1_CONSUMER_USAGE_RENDERSCRIPT = 1ULL << 20,
-
- /* Indicates that the consumer may attach buffers to their end of the
- * BufferQueue, which means that the producer may never have seen a given
- * dequeued buffer before. May be ignored by the gralloc device. */
- GRALLOC1_CONSUMER_USAGE_FOREIGN_BUFFERS = 1ULL << 21,
-
- /* 1ULL << 22 */
- /* 1ULL << 23 */
- /* 1ULL << 24 */
- /* 1ULL << 25 */
- /* 1ULL << 26 */
- /* 1ULL << 27 */
-
- /* Bits reserved for implementation-specific usage flags */
- GRALLOC1_CONSUMER_USAGE_PRIVATE_0 = 1ULL << 28,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_1 = 1ULL << 29,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_2 = 1ULL << 30,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_3 = 1ULL << 31,
-
- /* 1ULL << 32 */
- /* 1ULL << 33 */
- /* 1ULL << 34 */
- /* 1ULL << 35 */
- /* 1ULL << 36 */
- /* 1ULL << 37 */
- /* 1ULL << 38 */
- /* 1ULL << 39 */
- /* 1ULL << 40 */
- /* 1ULL << 41 */
- /* 1ULL << 42 */
- /* 1ULL << 43 */
- /* 1ULL << 44 */
- /* 1ULL << 45 */
- /* 1ULL << 46 */
- /* 1ULL << 47 */
-
- /* Bits reserved for implementation-specific usage flags */
- GRALLOC1_CONSUMER_USAGE_PRIVATE_19 = 1ULL << 48,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_18 = 1ULL << 49,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_17 = 1ULL << 50,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_16 = 1ULL << 51,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_15 = 1ULL << 52,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_14 = 1ULL << 53,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_13 = 1ULL << 54,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_12 = 1ULL << 55,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_11 = 1ULL << 56,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_10 = 1ULL << 57,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_9 = 1ULL << 58,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_8 = 1ULL << 59,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_7 = 1ULL << 60,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_6 = 1ULL << 61,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_5 = 1ULL << 62,
- GRALLOC1_CONSUMER_USAGE_PRIVATE_4 = 1ULL << 63,
-} gralloc1_consumer_usage_t;
-
-typedef enum {
- GRALLOC1_FUNCTION_INVALID = 0,
- GRALLOC1_FUNCTION_CREATE_DESCRIPTOR = 1,
- GRALLOC1_FUNCTION_DESTROY_DESCRIPTOR = 2,
- GRALLOC1_FUNCTION_SET_CONSUMER_USAGE = 3,
- GRALLOC1_FUNCTION_SET_DIMENSIONS = 4,
- GRALLOC1_FUNCTION_SET_FORMAT = 5,
- GRALLOC1_FUNCTION_SET_PRODUCER_USAGE = 6,
- GRALLOC1_FUNCTION_GET_BACKING_STORE = 7,
- GRALLOC1_FUNCTION_GET_CONSUMER_USAGE = 8,
- GRALLOC1_FUNCTION_GET_DIMENSIONS = 9,
- GRALLOC1_FUNCTION_GET_FORMAT = 10,
- GRALLOC1_FUNCTION_GET_PRODUCER_USAGE = 11,
- GRALLOC1_FUNCTION_GET_STRIDE = 12,
- GRALLOC1_FUNCTION_ALLOCATE = 13,
- GRALLOC1_FUNCTION_RETAIN = 14,
- GRALLOC1_FUNCTION_RELEASE = 15,
- GRALLOC1_FUNCTION_GET_NUM_FLEX_PLANES = 16,
- GRALLOC1_FUNCTION_LOCK = 17,
- GRALLOC1_FUNCTION_LOCK_FLEX = 18,
- GRALLOC1_FUNCTION_UNLOCK = 19,
-} gralloc1_function_descriptor_t;
-
-typedef enum {
- GRALLOC1_ERROR_NONE = 0,
- GRALLOC1_ERROR_BAD_DESCRIPTOR = 1,
- GRALLOC1_ERROR_BAD_HANDLE = 2,
- GRALLOC1_ERROR_BAD_VALUE = 3,
- GRALLOC1_ERROR_NOT_SHARED = 4,
- GRALLOC1_ERROR_NO_RESOURCES = 5,
- GRALLOC1_ERROR_UNDEFINED = 6,
- GRALLOC1_ERROR_UNSUPPORTED = 7,
-} gralloc1_error_t;
-
-typedef enum {
- GRALLOC1_PRODUCER_USAGE_NONE = 0,
- GRALLOC1_PRODUCER_USAGE_CPU_WRITE_NEVER = 0,
- /* 1ULL << 0 */
- GRALLOC1_PRODUCER_USAGE_CPU_READ = 1ULL << 1,
- GRALLOC1_PRODUCER_USAGE_CPU_READ_OFTEN = 1ULL << 2 |
- GRALLOC1_PRODUCER_USAGE_CPU_READ,
- /* 1ULL << 3 */
- /* 1ULL << 4 */
- GRALLOC1_PRODUCER_USAGE_CPU_WRITE = 1ULL << 5,
- GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN = 1ULL << 6 |
- GRALLOC1_PRODUCER_USAGE_CPU_WRITE,
- /* 1ULL << 7 */
- /* 1ULL << 8 */
- GRALLOC1_PRODUCER_USAGE_GPU_RENDER_TARGET = 1ULL << 9,
- /* 1ULL << 10 */
- /* 1ULL << 11 */
- /* 1ULL << 12 */
- /* 1ULL << 13 */
-
- /* The consumer must have a hardware-protected path to an external display
- * sink for this buffer. If a hardware-protected path is not available, then
- * do not attempt to display this buffer. */
- GRALLOC1_PRODUCER_USAGE_PROTECTED = 1ULL << 14,
-
- /* 1ULL << 15 */
- /* 1ULL << 16 */
- GRALLOC1_PRODUCER_USAGE_CAMERA = 1ULL << 17,
- /* 1ULL << 18 */
- /* 1ULL << 19 */
- /* 1ULL << 20 */
- /* 1ULL << 21 */
- GRALLOC1_PRODUCER_USAGE_VIDEO_DECODER = 1ULL << 22,
- /* 1ULL << 23 */
- /* 1ULL << 24 */
- /* 1ULL << 25 */
- /* 1ULL << 26 */
- /* 1ULL << 27 */
-
- /* Bits reserved for implementation-specific usage flags */
- GRALLOC1_PRODUCER_USAGE_PRIVATE_0 = 1ULL << 28,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_1 = 1ULL << 29,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_2 = 1ULL << 30,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_3 = 1ULL << 31,
-
- /* 1ULL << 32 */
- /* 1ULL << 33 */
- /* 1ULL << 34 */
- /* 1ULL << 35 */
- /* 1ULL << 36 */
- /* 1ULL << 37 */
- /* 1ULL << 38 */
- /* 1ULL << 39 */
- /* 1ULL << 40 */
- /* 1ULL << 41 */
- /* 1ULL << 42 */
- /* 1ULL << 43 */
- /* 1ULL << 44 */
- /* 1ULL << 45 */
- /* 1ULL << 46 */
- /* 1ULL << 47 */
-
- /* Bits reserved for implementation-specific usage flags */
- GRALLOC1_PRODUCER_USAGE_PRIVATE_19 = 1ULL << 48,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_18 = 1ULL << 49,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_17 = 1ULL << 50,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_16 = 1ULL << 51,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_15 = 1ULL << 52,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_14 = 1ULL << 53,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_13 = 1ULL << 54,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_12 = 1ULL << 55,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_11 = 1ULL << 56,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_10 = 1ULL << 57,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_9 = 1ULL << 58,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_8 = 1ULL << 59,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_7 = 1ULL << 60,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_6 = 1ULL << 61,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_5 = 1ULL << 62,
- GRALLOC1_PRODUCER_USAGE_PRIVATE_4 = 1ULL << 63,
-} gralloc1_producer_usage_t;
-
-/*
- * Typedefs
- */
-
-typedef void (*gralloc1_function_pointer_t)();
-
-typedef uint64_t gralloc1_backing_store_t;
-typedef uint64_t gralloc1_buffer_descriptor_t;
-
-/*
- * Device Struct
- */
-
-typedef struct gralloc1_device {
- /* Must be the first member of this struct, since a pointer to this struct
- * will be generated by casting from a hw_device_t* */
- struct hw_device_t common;
-
- /* getCapabilities(..., outCount, outCapabilities)
- *
- * Provides a list of capabilities (described in the definition of
- * gralloc1_capability_t above) supported by this device. This list must not
- * change after the device has been loaded.
- *
- * Parameters:
- * outCount - if outCapabilities was NULL, the number of capabilities
- * which would have been returned; if outCapabilities was not NULL,
- * the number of capabilities returned, which must not exceed the
- * value stored in outCount prior to the call
- * outCapabilities - a list of capabilities supported by this device; may
- * be NULL, in which case this function must write into outCount the
- * number of capabilities which would have been written into
- * outCapabilities
- */
- void (*getCapabilities)(struct gralloc1_device* device, uint32_t* outCount,
- int32_t* /*gralloc1_capability_t*/ outCapabilities);
-
- /* getFunction(..., descriptor)
- *
- * Returns a function pointer which implements the requested description.
- *
- * Parameters:
- * descriptor - the function to return
- *
- * Returns either a function pointer implementing the requested descriptor
- * or NULL if the described function is not supported by this device.
- */
- gralloc1_function_pointer_t (*getFunction)(struct gralloc1_device* device,
- int32_t /*gralloc1_function_descriptor_t*/ descriptor);
-} gralloc1_device_t;
-
-static inline int gralloc1_open(const struct hw_module_t* module,
- gralloc1_device_t** device) {
- return module->methods->open(module, GRALLOC_HARDWARE_MODULE_ID,
- (struct hw_device_t**) device);
-}
-
-static inline int gralloc1_close(gralloc1_device_t* device) {
- return device->common.close(&device->common);
-}
-
-/*
- * Buffer descriptor lifecycle functions
- *
- * All of these functions take as their first parameter a device pointer, so
- * this parameter is omitted from the described parameter lists.
- */
-
-/* createDescriptor(..., outDescriptor)
- * Function descriptor: GRALLOC1_FUNCTION_CREATE_DESCRIPTOR
- * Must be provided by all gralloc1 devices
- *
- * Creates a new, empty buffer descriptor.
- *
- * Parameters:
- * outDescriptor - the new buffer descriptor
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_NO_RESOURCES - no more descriptors can currently be created
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_CREATE_DESCRIPTOR)(
- gralloc1_device_t* device, gralloc1_buffer_descriptor_t* outDescriptor);
-
-/* destroyDescriptor(..., descriptor)
- * Function descriptor: GRALLOC1_FUNCTION_DESTROY_DESCRIPTOR
- * Must be provided by all gralloc1 devices
- *
- * Destroys an existing buffer descriptor.
- *
- * Parameters:
- * descriptor - the buffer descriptor to destroy
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_DESCRIPTOR - descriptor does not refer to a valid
- * buffer descriptor
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_DESTROY_DESCRIPTOR)(
- gralloc1_device_t* device, gralloc1_buffer_descriptor_t descriptor);
-
-/*
- * Buffer descriptor modification functions
- *
- * All of these functions take as their first two parameters a device pointer
- * and a buffer descriptor, so these parameters are omitted from the described
- * parameter lists.
- */
-
-/* setConsumerUsage(..., usage)
- * Function descriptor: GRALLOC1_FUNCTION_SET_CONSUMER_USAGE
- * Must be provided by all gralloc1 devices
- *
- * Sets the desired consumer usage flags of the buffer.
- *
- * Valid usage flags can be found in the definition of gralloc1_consumer_usage_t
- * above.
- *
- * Parameters:
- * usage - the desired consumer usage flags
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_DESCRIPTOR - the buffer descriptor is invalid
- * GRALLOC1_ERROR_BAD_VALUE - an invalid usage flag was passed in
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_SET_CONSUMER_USAGE)(
- gralloc1_device_t* device, gralloc1_buffer_descriptor_t descriptor,
- uint64_t /*gralloc1_consumer_usage_t*/ usage);
-
-/* setDimensions(..., width, height)
- * Function descriptor: GRALLOC1_FUNCTION_SET_DIMENSIONS
- * Must be provided by all gralloc1 devices
- *
- * Sets the desired width and height of the buffer in pixels.
- *
- * The width specifies how many columns of pixels should be in the allocated
- * buffer, but does not necessarily represent the offset in columns between the
- * same column in adjacent rows. If this offset is required, consult getStride
- * below.
- *
- * The height specifies how many rows of pixels should be in the allocated
- * buffer.
- *
- * Parameters:
- * width - the desired width in pixels
- * height - the desired height in pixels
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_DESCRIPTOR - the buffer descriptor is invalid
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_SET_DIMENSIONS)(
- gralloc1_device_t* device, gralloc1_buffer_descriptor_t descriptor,
- uint32_t width, uint32_t height);
-
-/* setFormat(..., format)
- * Function descriptor: GRALLOC1_FUNCTION_SET_FORMAT
- * Must be provided by all gralloc1 devices
- *
- * Sets the desired format of the buffer.
- *
- * The valid formats can be found in the HAL_PIXEL_FORMAT_* enum in
- * system/graphics.h.
- *
- * Parameters:
- * format - the desired format
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_DESCRIPTOR - the buffer descriptor is invalid
- * GRALLOC1_ERROR_BAD_VALUE - format is invalid
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_SET_FORMAT)(
- gralloc1_device_t* device, gralloc1_buffer_descriptor_t descriptor,
- int32_t format);
-
-/* setProducerUsage(..., usage)
- * Function descriptor: GRALLOC1_FUNCTION_SET_PRODUCER_USAGE
- * Must be provided by all gralloc1 devices
- *
- * Sets the desired producer usage flags of the buffer.
- *
- * Valid usage flags can be found in the definition of gralloc1_producer_usage_t
- * above.
- *
- * Parameters:
- * usage - the desired producer usage flags
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_DESCRIPTOR - the buffer descriptor is invalid
- * GRALLOC1_ERROR_BAD_VALUE - an invalid usage flag was passed in
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_SET_PRODUCER_USAGE)(
- gralloc1_device_t* device, gralloc1_buffer_descriptor_t descriptor,
- uint64_t /*gralloc1_producer_usage_t*/ usage);
-
-/*
- * Buffer handle query functions
- *
- * All of these functions take as their first two parameters a device pointer
- * and a buffer handle, so these parameters are omitted from the described
- * parameter lists.
- *
- * [1] Currently many of these functions may return GRALLOC1_ERROR_UNSUPPORTED,
- * which means that the device is not able to retrieve the requested information
- * from the buffer. This is necessary to enable a smooth transition from earlier
- * versions of the gralloc HAL, but gralloc1 implementers are strongly
- * discouraged from returning this value, as future versions of the platform
- * code will require all of these functions to succeed given a valid handle.
- */
-
-/* getBackingStore(..., outStore)
- * Function descriptor: GRALLOC1_FUNCTION_GET_BACKING_STORE
- * Must be provided by all gralloc1 devices
- *
- * Gets a value that uniquely identifies the backing store of the given buffer.
- *
- * Buffers which share a backing store should return the same value from this
- * function. If the buffer is present in more than one process, the backing
- * store value for that buffer is not required to be the same in every process.
- *
- * Parameters:
- * outStore - the backing store identifier for this buffer
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid
- * GRALLOC1_ERROR_UNSUPPORTED - the device is unable to retrieve the
- * backing store identifier from the buffer; see note [1] in this
- * section's header for more information
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_GET_BACKING_STORE)(
- gralloc1_device_t* device, buffer_handle_t buffer,
- gralloc1_backing_store_t* outStore);
-
-/* getConsumerUsage(..., outUsage)
- * Function descriptor: GRALLOC1_FUNCTION_GET_CONSUMER_USAGE
- * Must be provided by all gralloc1 devices
- *
- * Gets the consumer usage flags which were used to allocate this buffer.
- *
- * Usage flags can be found in the definition of gralloc1_consumer_usage_t above
- *
- * Parameters:
- * outUsage - the consumer usage flags used to allocate this buffer; must be
- * non-NULL
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid
- * GRALLOC1_ERROR_UNSUPPORTED - the device is unable to retrieve the
- * dimensions from the buffer; see note [1] in this section's header for
- * more information
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_GET_CONSUMER_USAGE)(
- gralloc1_device_t* device, buffer_handle_t buffer,
- uint64_t* /*gralloc1_consumer_usage_t*/ outUsage);
-
-/* getDimensions(..., outWidth, outHeight)
- * Function descriptor: GRALLOC1_FUNCTION_GET_DIMENSIONS
- * Must be provided by all gralloc1 devices
- *
- * Gets the width and height of the buffer in pixels.
- *
- * See setDimensions for more information about these values.
- *
- * Parameters:
- * outWidth - the width of the buffer in pixels, must be non-NULL
- * outHeight - the height of the buffer in pixels, must be non-NULL
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid
- * GRALLOC1_ERROR_UNSUPPORTED - the device is unable to retrieve the
- * dimensions from the buffer; see note [1] in this section's header for
- * more information
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_GET_DIMENSIONS)(
- gralloc1_device_t* device, buffer_handle_t buffer, uint32_t* outWidth,
- uint32_t* outHeight);
-
-/* getFormat(..., outFormat)
- * Function descriptor: GRALLOC1_FUNCTION_GET_FORMAT
- * Must be provided by all gralloc1 devices
- *
- * Gets the format of the buffer.
- *
- * The valid formats can be found in the HAL_PIXEL_FORMAT_* enum in
- * system/graphics.h.
- *
- * Parameters:
- * outFormat - the format of the buffer; must be non-NULL
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid
- * GRALLOC1_ERROR_UNSUPPORTED - the device is unable to retrieve the format
- * from the buffer; see note [1] in this section's header for more
- * information
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_GET_FORMAT)(
- gralloc1_device_t* device, buffer_handle_t descriptor,
- int32_t* outFormat);
-
-/* getProducerUsage(..., outUsage)
- * Function descriptor: GRALLOC1_FUNCTION_GET_PRODUCER_USAGE
- * Must be provided by all gralloc1 devices
- *
- * Gets the producer usage flags which were used to allocate this buffer.
- *
- * Usage flags can be found in the definition of gralloc1_producer_usage_t above
- *
- * Parameters:
- * outUsage - the producer usage flags used to allocate this buffer; must be
- * non-NULL
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid
- * GRALLOC1_ERROR_UNSUPPORTED - the device is unable to retrieve the usage
- * from the buffer; see note [1] in this section's header for more
- * information
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_GET_PRODUCER_USAGE)(
- gralloc1_device_t* device, buffer_handle_t buffer,
- uint64_t* /*gralloc1_producer_usage_t*/ outUsage);
-
-/* getStride(..., outStride)
- * Function descriptor: GRALLOC1_FUNCTION_GET_STRIDE
- * Must be provided by all gralloc1 devices
- *
- * Gets the stride of the buffer in pixels.
- *
- * The stride is the offset in pixel-sized elements between the same column in
- * two adjacent rows of pixels. This may not be equal to the width of the
- * buffer.
- *
- * Parameters:
- * outStride - the stride in pixels; must be non-NULL
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid
- * GRALLOC1_ERROR_UNDEFINED - the notion of a stride is not meaningful for
- * this format
- * GRALLOC1_ERROR_UNSUPPORTED - the device is unable to retrieve the stride
- * from the descriptor; see note [1] in this section's header for more
- * information
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_GET_STRIDE)(
- gralloc1_device_t* device, buffer_handle_t buffer, uint32_t* outStride);
-
-/*
- * Buffer management functions
- */
-
-/* allocate(..., numDescriptors, descriptors, outBuffers)
- * Function descriptor: GRALLOC1_FUNCTION_ALLOCATE
- * Must be provided by all gralloc1 devices
- *
- * Attempts to allocate a number of buffers sharing a backing store.
- *
- * Each buffer will correspond to one of the descriptors passed into the
- * function. If the device is unable to share the backing store between the
- * buffers, it should attempt to allocate the buffers with different backing
- * stores and return GRALLOC1_ERROR_NOT_SHARED if it is successful.
- *
- * If this call is successful, the client is responsible for freeing the
- * buffer_handle_t using release() when it is finished with the buffer. It is
- * not necessary to call retain() on the returned buffers, as they must have a
- * reference added by the device before returning.
- *
- * If GRALLOC1_CAPABILITY_TEST_ALLOCATE is supported by this device, outBuffers
- * may be NULL. In this case, the device must not attempt to allocate any
- * buffers, but instead must return either GRALLOC1_ERROR_NONE if such an
- * allocation is possible (ignoring potential resource contention which might
- * lead to a GRALLOC1_ERROR_NO_RESOURCES error), GRALLOC1_ERROR_NOT_SHARED if
- * the buffers can be allocated, but cannot share a backing store, or
- * GRALLOC1_ERROR_UNSUPPORTED if one or more of the descriptors can never be
- * allocated by the device.
- *
- * Parameters:
- * numDescriptors - the number of buffer descriptors, which must also be equal
- * to the size of the outBuffers array
- * descriptors - the buffer descriptors to attempt to allocate
- * outBuffers - the allocated buffers; must be non-NULL unless the device
- * supports GRALLOC1_CAPABILITY_TEST_ALLOCATE (see above), and must not be
- * modified by the device if allocation is unsuccessful
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_DESCRIPTOR - one of the descriptors does not refer to a
- * valid buffer descriptor
- * GRALLOC1_ERROR_NOT_SHARED - allocation was successful, but required more
- * than one backing store to satisfy all of the buffer descriptors
- * GRALLOC1_ERROR_NO_RESOURCES - allocation failed because one or more of the
- * backing stores could not be created at this time (but this allocation
- * might succeed at a future time)
- * GRALLOC1_ERROR_UNSUPPORTED - one or more of the descriptors can never be
- * satisfied by the device
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_ALLOCATE)(
- gralloc1_device_t* device, uint32_t numDescriptors,
- const gralloc1_buffer_descriptor_t* descriptors,
- buffer_handle_t* outBuffers);
-
-/* retain(..., buffer)
- * Function descriptor: GRALLOC1_FUNCTION_RETAIN
- * Must be provided by all gralloc1 devices
- *
- * Adds a reference to the given buffer.
- *
- * This function must be called when a buffer_handle_t is received from a remote
- * process to prevent the buffer's data from being freed when the remote process
- * releases the buffer. It may also be called to increase the reference count if
- * two components in the same process want to interact with the buffer
- * independently.
- *
- * Parameters:
- * buffer - the buffer to which a reference should be added
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid
- * GRALLOC1_ERROR_NO_RESOURCES - it is not possible to add a reference to this
- * buffer at this time
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_RETAIN)(
- gralloc1_device_t* device, buffer_handle_t buffer);
-
-/* release(..., buffer)
- * Function descriptor: GRALLOC1_FUNCTION_RELEASE
- * Must be provided by all gralloc1 devices
- *
- * Removes a reference from the given buffer.
- *
- * If no references remain, the buffer should be freed. When the last buffer
- * referring to a particular backing store is freed, that backing store should
- * also be freed.
- *
- * Parameters:
- * buffer - the buffer from which a reference should be removed
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_RELEASE)(
- gralloc1_device_t* device, buffer_handle_t buffer);
-
-/*
- * Buffer access functions
- *
- * All of these functions take as their first parameter a device pointer, so
- * this parameter is omitted from the described parameter lists.
- */
-
-typedef struct gralloc1_rect {
- int32_t left;
- int32_t top;
- int32_t width;
- int32_t height;
-} gralloc1_rect_t;
-
-/* getNumFlexPlanes(..., buffer, outNumPlanes)
- * Function descriptor: GRALLOC1_FUNCTION_GET_NUM_FLEX_PLANES
- * Must be provided by all gralloc1 devices
- *
- * Returns the number of flex layout planes which are needed to represent the
- * given buffer. This may be used to efficiently allocate only as many plane
- * structures as necessary before calling into lockFlex.
- *
- * If the given buffer cannot be locked as a flex format, this function may
- * return GRALLOC1_ERROR_UNSUPPORTED (as lockFlex would).
- *
- * Parameters:
- * buffer - the buffers for which the number of planes should be queried
- * outNumPlanes - the number of flex planes required to describe the given
- * buffer; must be non-NULL
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid
- * GRALLOC1_ERROR_UNSUPPORTED - the buffer's format cannot be represented in a
- * flex layout
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_GET_NUM_FLEX_PLANES)(
- gralloc1_device_t* device, buffer_handle_t buffer,
- uint32_t* outNumPlanes);
-
-/* lock(..., buffer, producerUsage, consumerUsage, accessRegion, outData,
- * acquireFence)
- * Function descriptor: GRALLOC1_FUNCTION_LOCK
- * Must be provided by all gralloc1 devices
- *
- * Locks the given buffer for the specified CPU usage.
- *
- * Exactly one of producerUsage and consumerUsage must be *_USAGE_NONE. The
- * usage which is not *_USAGE_NONE must be one of the *_USAGE_CPU_* values, as
- * applicable. Locking a buffer for a non-CPU usage is not supported.
- *
- * Locking the same buffer simultaneously from multiple threads is permitted,
- * but if any of the threads attempt to lock the buffer for writing, the
- * behavior is undefined, except that it must not cause process termination or
- * block the client indefinitely. Leaving the buffer content in an indeterminate
- * state or returning an error are both acceptable.
- *
- * The client must not modify the content of the buffer outside of accessRegion,
- * and the device need not guarantee that content outside of accessRegion is
- * valid for reading. The result of reading or writing outside of accessRegion
- * is undefined, except that it must not cause process termination.
- *
- * outData must be a non-NULL pointer, the contents of which which will be
- * filled with a pointer to the locked buffer memory. This address will
- * represent the top-left corner of the entire buffer, even if accessRegion does
- * not begin at the top-left corner.
- *
- * acquireFence is a file descriptor referring to a acquire sync fence object,
- * which will be signaled when it is safe for the device to access the contents
- * of the buffer (prior to locking). If it is already safe to access the buffer
- * contents, -1 may be passed instead.
- *
- * Parameters:
- * buffer - the buffer to lock
- * producerUsage - the producer usage flags to request; either this or
- * consumerUsage must be GRALLOC1_*_USAGE_NONE, and the other must be a
- * CPU usage
- * consumerUsage - the consumer usage flags to request; either this or
- * producerUsage must be GRALLOC1_*_USAGE_NONE, and the other must be a
- * CPU usage
- * accessRegion - the portion of the buffer that the client intends to access;
- * must be non-NULL
- * outData - will be filled with a CPU-accessible pointer to the buffer data;
- * must be non-NULL
- * acquireFence - a sync fence file descriptor as described above
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid
- * GRALLOC1_ERROR_BAD_VALUE - neither or both of producerUsage and
- * consumerUsage were GRALLOC1_*_USAGE_NONE, or the usage which was not
- * *_USAGE_NONE was not a CPU usage
- * GRALLOC1_ERROR_NO_RESOURCES - the buffer cannot be locked at this time, but
- * locking may succeed at a future time
- * GRALLOC1_ERROR_UNSUPPORTED - the buffer cannot be locked with the given
- * usage, and any future attempts at locking will also fail
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_LOCK)(
- gralloc1_device_t* device, buffer_handle_t buffer,
- uint64_t /*gralloc1_producer_usage_t*/ producerUsage,
- uint64_t /*gralloc1_consumer_usage_t*/ consumerUsage,
- const gralloc1_rect_t* accessRegion, void** outData,
- int32_t acquireFence);
-
-/* lockFlex(..., buffer, producerUsage, consumerUsage, accessRegion,
- * outFlexLayout, outAcquireFence)
- * Function descriptor: GRALLOC1_FUNCTION_LOCK_FLEX
- * Must be provided by all gralloc1 devices
- *
- * This is largely the same as lock(), except that instead of returning a
- * pointer directly to the buffer data, it returns an android_flex_layout
- * struct describing how to access the data planes.
- *
- * This function must work on buffers with HAL_PIXEL_FORMAT_YCbCr_*_888 if
- * supported by the device, as well as with any other formats requested by
- * multimedia codecs when they are configured with a flexible-YUV-compatible
- * color format.
- *
- * This function may also be called on buffers of other formats, including
- * non-YUV formats, but if the buffer format is not compatible with a flexible
- * representation, it may return GRALLOC1_ERROR_UNSUPPORTED.
- *
- * Parameters:
- * buffer - the buffer to lock
- * producerUsage - the producer usage flags to request; either this or
- * consumerUsage must be GRALLOC1_*_USAGE_NONE, and the other must be a
- * CPU usage
- * consumerUsage - the consumer usage flags to request; either this or
- * producerUsage must be GRALLOC1_*_USAGE_NONE, and the other must be a
- * CPU usage
- * accessRegion - the portion of the buffer that the client intends to access;
- * must be non-NULL
- * outFlexLayout - will be filled with the description of the planes in the
- * buffer
- * acquireFence - a sync fence file descriptor as described in lock()
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid
- * GRALLOC1_ERROR_BAD_VALUE - neither or both of producerUsage and
- * consumerUsage were *_USAGE_NONE, or the usage which was not
- * *_USAGE_NONE was not a CPU usage
- * GRALLOC1_ERROR_NO_RESOURCES - the buffer cannot be locked at this time, but
- * locking may succeed at a future time
- * GRALLOC1_ERROR_UNSUPPORTED - the buffer cannot be locked with the given
- * usage, and any future attempts at locking will also fail
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_LOCK_FLEX
- gralloc1_device_t* device, buffer_handle_t buffer,
- uint64_t /*gralloc1_producer_usage_t*/ producerUsage,
- uint64_t /*gralloc1_consumer_usage_t*/ consumerUsage,
- const gralloc1_rect_t* accessRegion,
- struct android_flex_layout* outFlexLayout, int32_t acquireFence);
-
-/* unlock(..., buffer, releaseFence)
- * Function descriptor: GRALLOC1_FUNCTION_UNLOCK
- * Must be provided by all gralloc1 devices
- *
- * This function indicates to the device that the client will be done with the
- * buffer when releaseFence signals.
- *
- * outReleaseFence will be filled with a file descriptor referring to a release
- * sync fence object, which will be signaled when it is safe to access the
- * contents of the buffer (after the buffer has been unlocked). If it is already
- * safe to access the buffer contents, then -1 may be returned instead.
- *
- * This function is used to unlock both buffers locked by lock() and those
- * locked by lockFlex().
- *
- * Parameters:
- * buffer - the buffer to unlock
- * outReleaseFence - a sync fence file descriptor as described above
- *
- * Returns GRALLOC1_ERROR_NONE or one of the following errors:
- * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid
- */
-typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_UNLOCK)(
- gralloc1_device_t* device, buffer_handle_t buffer,
- int32_t* outReleaseFence);
-
-__END_DECLS
-
-#endif