1/* 2 * Copyright 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef ANDROID_HARDWARE_GRALLOC1_H 18#define ANDROID_HARDWARE_GRALLOC1_H 19 20#include <hardware/hardware.h> 21#include <cutils/native_handle.h> 22 23__BEGIN_DECLS 24 25#define GRALLOC_MODULE_API_VERSION_1_0 HARDWARE_MODULE_API_VERSION(1, 0) 26#define GRALLOC_HARDWARE_MODULE_ID "gralloc" 27 28/* 29 * Enums 30 */ 31 32typedef enum { 33 GRALLOC1_CAPABILITY_INVALID = 0, 34 35 /* If this capability is supported, then the outBuffers parameter to 36 * allocate may be NULL, which instructs the device to report whether the 37 * given allocation is possible or not. */ 38 GRALLOC1_CAPABILITY_TEST_ALLOCATE = 1, 39 40 /* If this capability is supported, then the implementation supports 41 * allocating buffers with more than one image layer. */ 42 GRALLOC1_CAPABILITY_LAYERED_BUFFERS = 2, 43 44 /* If this capability is supported, then the implementation always closes 45 * and deletes a buffer handle whenever the last reference is removed. 46 * 47 * Supporting this capability is strongly recommended. It will become 48 * mandatory in future releases. */ 49 GRALLOC1_CAPABILITY_RELEASE_IMPLY_DELETE = 3, 50 51 GRALLOC1_LAST_CAPABILITY = 3, 52} gralloc1_capability_t; 53 54typedef enum { 55 GRALLOC1_CONSUMER_USAGE_NONE = 0, 56 GRALLOC1_CONSUMER_USAGE_CPU_READ_NEVER = 0, 57 /* 1ULL << 0 */ 58 GRALLOC1_CONSUMER_USAGE_CPU_READ = 1ULL << 1, 59 GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN = 1ULL << 2 | 60 GRALLOC1_CONSUMER_USAGE_CPU_READ, 61 /* 1ULL << 3 */ 62 /* 1ULL << 4 */ 63 /* 1ULL << 5 */ 64 /* 1ULL << 6 */ 65 /* 1ULL << 7 */ 66 GRALLOC1_CONSUMER_USAGE_GPU_TEXTURE = 1ULL << 8, 67 /* 1ULL << 9 */ 68 /* 1ULL << 10 */ 69 GRALLOC1_CONSUMER_USAGE_HWCOMPOSER = 1ULL << 11, 70 GRALLOC1_CONSUMER_USAGE_CLIENT_TARGET = 1ULL << 12, 71 /* 1ULL << 13 */ 72 /* 1ULL << 14 */ 73 GRALLOC1_CONSUMER_USAGE_CURSOR = 1ULL << 15, 74 GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER = 1ULL << 16, 75 /* 1ULL << 17 */ 76 GRALLOC1_CONSUMER_USAGE_CAMERA = 1ULL << 18, 77 /* 1ULL << 19 */ 78 GRALLOC1_CONSUMER_USAGE_RENDERSCRIPT = 1ULL << 20, 79 80 /* Indicates that the consumer may attach buffers to their end of the 81 * BufferQueue, which means that the producer may never have seen a given 82 * dequeued buffer before. May be ignored by the gralloc device. */ 83 GRALLOC1_CONSUMER_USAGE_FOREIGN_BUFFERS = 1ULL << 21, 84 85 /* 1ULL << 22 */ 86 GRALLOC1_CONSUMER_USAGE_GPU_DATA_BUFFER = 1ULL << 23, 87 /* 1ULL << 24 */ 88 /* 1ULL << 25 */ 89 /* 1ULL << 26 */ 90 /* 1ULL << 27 */ 91 92 /* Bits reserved for implementation-specific usage flags */ 93 GRALLOC1_CONSUMER_USAGE_PRIVATE_0 = 1ULL << 28, 94 GRALLOC1_CONSUMER_USAGE_PRIVATE_1 = 1ULL << 29, 95 GRALLOC1_CONSUMER_USAGE_PRIVATE_2 = 1ULL << 30, 96 GRALLOC1_CONSUMER_USAGE_PRIVATE_3 = 1ULL << 31, 97 98 /* 1ULL << 32 */ 99 /* 1ULL << 33 */ 100 /* 1ULL << 34 */ 101 /* 1ULL << 35 */ 102 /* 1ULL << 36 */ 103 /* 1ULL << 37 */ 104 /* 1ULL << 38 */ 105 /* 1ULL << 39 */ 106 /* 1ULL << 40 */ 107 /* 1ULL << 41 */ 108 /* 1ULL << 42 */ 109 /* 1ULL << 43 */ 110 /* 1ULL << 44 */ 111 /* 1ULL << 45 */ 112 /* 1ULL << 46 */ 113 /* 1ULL << 47 */ 114 115 /* Bits reserved for implementation-specific usage flags */ 116 GRALLOC1_CONSUMER_USAGE_PRIVATE_19 = 1ULL << 48, 117 GRALLOC1_CONSUMER_USAGE_PRIVATE_18 = 1ULL << 49, 118 GRALLOC1_CONSUMER_USAGE_PRIVATE_17 = 1ULL << 50, 119 GRALLOC1_CONSUMER_USAGE_PRIVATE_16 = 1ULL << 51, 120 GRALLOC1_CONSUMER_USAGE_PRIVATE_15 = 1ULL << 52, 121 GRALLOC1_CONSUMER_USAGE_PRIVATE_14 = 1ULL << 53, 122 GRALLOC1_CONSUMER_USAGE_PRIVATE_13 = 1ULL << 54, 123 GRALLOC1_CONSUMER_USAGE_PRIVATE_12 = 1ULL << 55, 124 GRALLOC1_CONSUMER_USAGE_PRIVATE_11 = 1ULL << 56, 125 GRALLOC1_CONSUMER_USAGE_PRIVATE_10 = 1ULL << 57, 126 GRALLOC1_CONSUMER_USAGE_PRIVATE_9 = 1ULL << 58, 127 GRALLOC1_CONSUMER_USAGE_PRIVATE_8 = 1ULL << 59, 128 GRALLOC1_CONSUMER_USAGE_PRIVATE_7 = 1ULL << 60, 129 GRALLOC1_CONSUMER_USAGE_PRIVATE_6 = 1ULL << 61, 130 GRALLOC1_CONSUMER_USAGE_PRIVATE_5 = 1ULL << 62, 131 GRALLOC1_CONSUMER_USAGE_PRIVATE_4 = 1ULL << 63, 132} gralloc1_consumer_usage_t; 133 134typedef enum { 135 GRALLOC1_FUNCTION_INVALID = 0, 136 GRALLOC1_FUNCTION_DUMP = 1, 137 GRALLOC1_FUNCTION_CREATE_DESCRIPTOR = 2, 138 GRALLOC1_FUNCTION_DESTROY_DESCRIPTOR = 3, 139 GRALLOC1_FUNCTION_SET_CONSUMER_USAGE = 4, 140 GRALLOC1_FUNCTION_SET_DIMENSIONS = 5, 141 GRALLOC1_FUNCTION_SET_FORMAT = 6, 142 GRALLOC1_FUNCTION_SET_PRODUCER_USAGE = 7, 143 GRALLOC1_FUNCTION_GET_BACKING_STORE = 8, 144 GRALLOC1_FUNCTION_GET_CONSUMER_USAGE = 9, 145 GRALLOC1_FUNCTION_GET_DIMENSIONS = 10, 146 GRALLOC1_FUNCTION_GET_FORMAT = 11, 147 GRALLOC1_FUNCTION_GET_PRODUCER_USAGE = 12, 148 GRALLOC1_FUNCTION_GET_STRIDE = 13, 149 GRALLOC1_FUNCTION_ALLOCATE = 14, 150 GRALLOC1_FUNCTION_RETAIN = 15, 151 GRALLOC1_FUNCTION_RELEASE = 16, 152 GRALLOC1_FUNCTION_GET_NUM_FLEX_PLANES = 17, 153 GRALLOC1_FUNCTION_LOCK = 18, 154 GRALLOC1_FUNCTION_LOCK_FLEX = 19, 155 GRALLOC1_FUNCTION_UNLOCK = 20, 156 GRALLOC1_FUNCTION_SET_LAYER_COUNT = 21, 157 GRALLOC1_FUNCTION_GET_LAYER_COUNT = 22, 158 GRALLOC1_FUNCTION_VALIDATE_BUFFER_SIZE = 23, 159 GRALLOC1_FUNCTION_GET_TRANSPORT_SIZE = 24, 160 GRALLOC1_FUNCTION_IMPORT_BUFFER = 25, 161 GRALLOC1_LAST_FUNCTION = 25, 162} gralloc1_function_descriptor_t; 163 164typedef enum { 165 GRALLOC1_ERROR_NONE = 0, 166 GRALLOC1_ERROR_BAD_DESCRIPTOR = 1, 167 GRALLOC1_ERROR_BAD_HANDLE = 2, 168 GRALLOC1_ERROR_BAD_VALUE = 3, 169 GRALLOC1_ERROR_NOT_SHARED = 4, 170 GRALLOC1_ERROR_NO_RESOURCES = 5, 171 GRALLOC1_ERROR_UNDEFINED = 6, 172 GRALLOC1_ERROR_UNSUPPORTED = 7, 173} gralloc1_error_t; 174 175typedef enum { 176 GRALLOC1_PRODUCER_USAGE_NONE = 0, 177 GRALLOC1_PRODUCER_USAGE_CPU_WRITE_NEVER = 0, 178 /* 1ULL << 0 */ 179 GRALLOC1_PRODUCER_USAGE_CPU_READ = 1ULL << 1, 180 GRALLOC1_PRODUCER_USAGE_CPU_READ_OFTEN = 1ULL << 2 | 181 GRALLOC1_PRODUCER_USAGE_CPU_READ, 182 /* 1ULL << 3 */ 183 /* 1ULL << 4 */ 184 GRALLOC1_PRODUCER_USAGE_CPU_WRITE = 1ULL << 5, 185 GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN = 1ULL << 6 | 186 GRALLOC1_PRODUCER_USAGE_CPU_WRITE, 187 /* 1ULL << 7 */ 188 /* 1ULL << 8 */ 189 GRALLOC1_PRODUCER_USAGE_GPU_RENDER_TARGET = 1ULL << 9, 190 /* 1ULL << 10 */ 191 /* 1ULL << 11 */ 192 /* 1ULL << 12 */ 193 /* 1ULL << 13 */ 194 195 /* The consumer must have a hardware-protected path to an external display 196 * sink for this buffer. If a hardware-protected path is not available, then 197 * do not attempt to display this buffer. */ 198 GRALLOC1_PRODUCER_USAGE_PROTECTED = 1ULL << 14, 199 200 /* 1ULL << 15 */ 201 /* 1ULL << 16 */ 202 GRALLOC1_PRODUCER_USAGE_CAMERA = 1ULL << 17, 203 /* 1ULL << 18 */ 204 /* 1ULL << 19 */ 205 /* 1ULL << 20 */ 206 /* 1ULL << 21 */ 207 GRALLOC1_PRODUCER_USAGE_VIDEO_DECODER = 1ULL << 22, 208 GRALLOC1_PRODUCER_USAGE_SENSOR_DIRECT_DATA = 1ULL << 23, 209 /* 1ULL << 24 */ 210 /* 1ULL << 25 */ 211 /* 1ULL << 26 */ 212 /* 1ULL << 27 */ 213 214 /* Bits reserved for implementation-specific usage flags */ 215 GRALLOC1_PRODUCER_USAGE_PRIVATE_0 = 1ULL << 28, 216 GRALLOC1_PRODUCER_USAGE_PRIVATE_1 = 1ULL << 29, 217 GRALLOC1_PRODUCER_USAGE_PRIVATE_2 = 1ULL << 30, 218 GRALLOC1_PRODUCER_USAGE_PRIVATE_3 = 1ULL << 31, 219 220 /* 1ULL << 32 */ 221 /* 1ULL << 33 */ 222 /* 1ULL << 34 */ 223 /* 1ULL << 35 */ 224 /* 1ULL << 36 */ 225 /* 1ULL << 37 */ 226 /* 1ULL << 38 */ 227 /* 1ULL << 39 */ 228 /* 1ULL << 40 */ 229 /* 1ULL << 41 */ 230 /* 1ULL << 42 */ 231 /* 1ULL << 43 */ 232 /* 1ULL << 44 */ 233 /* 1ULL << 45 */ 234 /* 1ULL << 46 */ 235 /* 1ULL << 47 */ 236 237 /* Bits reserved for implementation-specific usage flags */ 238 GRALLOC1_PRODUCER_USAGE_PRIVATE_19 = 1ULL << 48, 239 GRALLOC1_PRODUCER_USAGE_PRIVATE_18 = 1ULL << 49, 240 GRALLOC1_PRODUCER_USAGE_PRIVATE_17 = 1ULL << 50, 241 GRALLOC1_PRODUCER_USAGE_PRIVATE_16 = 1ULL << 51, 242 GRALLOC1_PRODUCER_USAGE_PRIVATE_15 = 1ULL << 52, 243 GRALLOC1_PRODUCER_USAGE_PRIVATE_14 = 1ULL << 53, 244 GRALLOC1_PRODUCER_USAGE_PRIVATE_13 = 1ULL << 54, 245 GRALLOC1_PRODUCER_USAGE_PRIVATE_12 = 1ULL << 55, 246 GRALLOC1_PRODUCER_USAGE_PRIVATE_11 = 1ULL << 56, 247 GRALLOC1_PRODUCER_USAGE_PRIVATE_10 = 1ULL << 57, 248 GRALLOC1_PRODUCER_USAGE_PRIVATE_9 = 1ULL << 58, 249 GRALLOC1_PRODUCER_USAGE_PRIVATE_8 = 1ULL << 59, 250 GRALLOC1_PRODUCER_USAGE_PRIVATE_7 = 1ULL << 60, 251 GRALLOC1_PRODUCER_USAGE_PRIVATE_6 = 1ULL << 61, 252 GRALLOC1_PRODUCER_USAGE_PRIVATE_5 = 1ULL << 62, 253 GRALLOC1_PRODUCER_USAGE_PRIVATE_4 = 1ULL << 63, 254} gralloc1_producer_usage_t; 255 256/* 257 * Typedefs 258 */ 259 260typedef void (*gralloc1_function_pointer_t)(); 261 262typedef uint64_t gralloc1_backing_store_t; 263typedef uint64_t gralloc1_buffer_descriptor_t; 264 265/* 266 * Device Struct 267 */ 268 269typedef struct gralloc1_device { 270 /* Must be the first member of this struct, since a pointer to this struct 271 * will be generated by casting from a hw_device_t* */ 272 struct hw_device_t common; 273 274 /* getCapabilities(..., outCount, outCapabilities) 275 * 276 * Provides a list of capabilities (described in the definition of 277 * gralloc1_capability_t above) supported by this device. This list must not 278 * change after the device has been loaded. 279 * 280 * Parameters: 281 * outCount - if outCapabilities was NULL, the number of capabilities 282 * which would have been returned; if outCapabilities was not NULL, 283 * the number of capabilities returned, which must not exceed the 284 * value stored in outCount prior to the call 285 * outCapabilities - a list of capabilities supported by this device; may 286 * be NULL, in which case this function must write into outCount the 287 * number of capabilities which would have been written into 288 * outCapabilities 289 */ 290 void (*getCapabilities)(struct gralloc1_device* device, uint32_t* outCount, 291 int32_t* /*gralloc1_capability_t*/ outCapabilities); 292 293 /* getFunction(..., descriptor) 294 * 295 * Returns a function pointer which implements the requested description. 296 * 297 * Parameters: 298 * descriptor - the function to return 299 * 300 * Returns either a function pointer implementing the requested descriptor 301 * or NULL if the described function is not supported by this device. 302 */ 303 gralloc1_function_pointer_t (*getFunction)(struct gralloc1_device* device, 304 int32_t /*gralloc1_function_descriptor_t*/ descriptor); 305} gralloc1_device_t; 306 307static inline int gralloc1_open(const struct hw_module_t* module, 308 gralloc1_device_t** device) { 309 return module->methods->open(module, GRALLOC_HARDWARE_MODULE_ID, 310 TO_HW_DEVICE_T_OPEN(device)); 311} 312 313static inline int gralloc1_close(gralloc1_device_t* device) { 314 return device->common.close(&device->common); 315} 316 317/* dump(..., outSize, outBuffer) 318 * Function descriptor: GRALLOC1_FUNCTION_DUMP 319 * Must be provided by all gralloc1 devices 320 * 321 * Retrieves implementation-defined debug information, which will be displayed 322 * during, for example, `dumpsys SurfaceFlinger`. 323 * 324 * If called with outBuffer == NULL, the device should store a copy of the 325 * desired output and return its length in bytes in outSize. If the device 326 * already has a stored copy, that copy should be purged and replaced with a 327 * fresh copy. 328 * 329 * If called with outBuffer != NULL, the device should copy its stored version 330 * of the output into outBuffer and store how many bytes of data it copied into 331 * outSize. Prior to this call, the client will have populated outSize with the 332 * maximum number of bytes outBuffer can hold. The device must not write more 333 * than this amount into outBuffer. If the device does not currently have a 334 * stored copy, then it should return 0 in outSize. 335 * 336 * Any data written into outBuffer need not be null-terminated. 337 * 338 * Parameters: 339 * outSize - if outBuffer was NULL, the number of bytes needed to copy the 340 * device's stored output; if outBuffer was not NULL, the number of bytes 341 * written into it, which must not exceed the value stored in outSize 342 * prior to the call; pointer will be non-NULL 343 * outBuffer - the buffer to write the dump output into; may be NULL as 344 * described above; data written into this buffer need not be 345 * null-terminated 346 */ 347typedef void (*GRALLOC1_PFN_DUMP)(gralloc1_device_t* device, uint32_t* outSize, 348 char* outBuffer); 349 350/* 351 * Buffer descriptor lifecycle functions 352 * 353 * All of these functions take as their first parameter a device pointer, so 354 * this parameter is omitted from the described parameter lists. 355 */ 356 357/* createDescriptor(..., outDescriptor) 358 * Function descriptor: GRALLOC1_FUNCTION_CREATE_DESCRIPTOR 359 * Must be provided by all gralloc1 devices 360 * 361 * Creates a new, empty buffer descriptor. 362 * 363 * Parameters: 364 * outDescriptor - the new buffer descriptor 365 * 366 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 367 * GRALLOC1_ERROR_NO_RESOURCES - no more descriptors can currently be created 368 */ 369typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_CREATE_DESCRIPTOR)( 370 gralloc1_device_t* device, gralloc1_buffer_descriptor_t* outDescriptor); 371 372/* destroyDescriptor(..., descriptor) 373 * Function descriptor: GRALLOC1_FUNCTION_DESTROY_DESCRIPTOR 374 * Must be provided by all gralloc1 devices 375 * 376 * Destroys an existing buffer descriptor. 377 * 378 * Parameters: 379 * descriptor - the buffer descriptor to destroy 380 * 381 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 382 * GRALLOC1_ERROR_BAD_DESCRIPTOR - descriptor does not refer to a valid 383 * buffer descriptor 384 */ 385typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_DESTROY_DESCRIPTOR)( 386 gralloc1_device_t* device, gralloc1_buffer_descriptor_t descriptor); 387 388/* 389 * Buffer descriptor modification functions 390 * 391 * All of these functions take as their first two parameters a device pointer 392 * and a buffer descriptor, so these parameters are omitted from the described 393 * parameter lists. 394 */ 395 396/* setConsumerUsage(..., usage) 397 * Function descriptor: GRALLOC1_FUNCTION_SET_CONSUMER_USAGE 398 * Must be provided by all gralloc1 devices 399 * 400 * Sets the desired consumer usage flags of the buffer. 401 * 402 * Valid usage flags can be found in the definition of gralloc1_consumer_usage_t 403 * above. 404 * 405 * Parameters: 406 * usage - the desired consumer usage flags 407 * 408 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 409 * GRALLOC1_ERROR_BAD_DESCRIPTOR - the buffer descriptor is invalid 410 * GRALLOC1_ERROR_BAD_VALUE - an invalid usage flag was passed in 411 */ 412typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_SET_CONSUMER_USAGE)( 413 gralloc1_device_t* device, gralloc1_buffer_descriptor_t descriptor, 414 uint64_t /*gralloc1_consumer_usage_t*/ usage); 415 416/* setDimensions(..., width, height) 417 * Function descriptor: GRALLOC1_FUNCTION_SET_DIMENSIONS 418 * Must be provided by all gralloc1 devices 419 * 420 * Sets the desired width and height of the buffer in pixels. 421 * 422 * The width specifies how many columns of pixels should be in the allocated 423 * buffer, but does not necessarily represent the offset in columns between the 424 * same column in adjacent rows. If this offset is required, consult getStride 425 * below. 426 * 427 * The height specifies how many rows of pixels should be in the allocated 428 * buffer. 429 * 430 * Parameters: 431 * width - the desired width in pixels 432 * height - the desired height in pixels 433 * 434 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 435 * GRALLOC1_ERROR_BAD_DESCRIPTOR - the buffer descriptor is invalid 436 */ 437typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_SET_DIMENSIONS)( 438 gralloc1_device_t* device, gralloc1_buffer_descriptor_t descriptor, 439 uint32_t width, uint32_t height); 440 441/* setFormat(..., format) 442 * Function descriptor: GRALLOC1_FUNCTION_SET_FORMAT 443 * Must be provided by all gralloc1 devices 444 * 445 * Sets the desired format of the buffer. 446 * 447 * The valid formats can be found in <system/graphics.h>. 448 * 449 * Parameters: 450 * format - the desired format 451 * 452 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 453 * GRALLOC1_ERROR_BAD_DESCRIPTOR - the buffer descriptor is invalid 454 * GRALLOC1_ERROR_BAD_VALUE - format is invalid 455 */ 456typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_SET_FORMAT)( 457 gralloc1_device_t* device, gralloc1_buffer_descriptor_t descriptor, 458 int32_t /*android_pixel_format_t*/ format); 459 460/* setLayerCount(..., layerCount) 461 * Function descriptor: GRALLOC1_FUNCTION_SET_LAYER_COUNT 462 * Must be provided by all gralloc1 devices that provide the 463 * GRALLOC1_CAPABILITY_LAYERED_BUFFERS capability. 464 * 465 * Sets the number of layers in the buffer. 466 * 467 * A buffer with multiple layers may be used as the backing store of an array 468 * texture. All layers of a buffer share the same characteristics (e.g., 469 * dimensions, format, usage). Devices that do not support 470 * GRALLOC1_CAPABILITY_LAYERED_BUFFERS must allocate only buffers with a single 471 * layer. 472 * 473 * Parameters: 474 * layerCount - the desired number of layers, must be non-zero 475 * 476 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 477 * GRALLOC1_ERROR_BAD_DESCRIPTOR - the buffer descriptor is invalid 478 * GRALLOC1_ERROR_BAD_VALUE - the layer count is invalid 479 */ 480typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_SET_LAYER_COUNT)( 481 gralloc1_device_t* device, gralloc1_buffer_descriptor_t descriptor, 482 uint32_t layerCount); 483 484/* setProducerUsage(..., usage) 485 * Function descriptor: GRALLOC1_FUNCTION_SET_PRODUCER_USAGE 486 * Must be provided by all gralloc1 devices 487 * 488 * Sets the desired producer usage flags of the buffer. 489 * 490 * Valid usage flags can be found in the definition of gralloc1_producer_usage_t 491 * above. 492 * 493 * Parameters: 494 * usage - the desired producer usage flags 495 * 496 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 497 * GRALLOC1_ERROR_BAD_DESCRIPTOR - the buffer descriptor is invalid 498 * GRALLOC1_ERROR_BAD_VALUE - an invalid usage flag was passed in 499 */ 500typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_SET_PRODUCER_USAGE)( 501 gralloc1_device_t* device, gralloc1_buffer_descriptor_t descriptor, 502 uint64_t /*gralloc1_producer_usage_t*/ usage); 503 504/* 505 * Buffer handle query functions 506 * 507 * All of these functions take as their first two parameters a device pointer 508 * and a buffer handle, so these parameters are omitted from the described 509 * parameter lists. 510 * 511 * [1] Currently many of these functions may return GRALLOC1_ERROR_UNSUPPORTED, 512 * which means that the device is not able to retrieve the requested information 513 * from the buffer. This is necessary to enable a smooth transition from earlier 514 * versions of the gralloc HAL, but gralloc1 implementers are strongly 515 * discouraged from returning this value, as future versions of the platform 516 * code will require all of these functions to succeed given a valid handle. 517 */ 518 519/* getBackingStore(..., outStore) 520 * Function descriptor: GRALLOC1_FUNCTION_GET_BACKING_STORE 521 * Must be provided by all gralloc1 devices 522 * 523 * Gets a value that uniquely identifies the backing store of the given buffer. 524 * 525 * Buffers which share a backing store should return the same value from this 526 * function. If the buffer is present in more than one process, the backing 527 * store value for that buffer is not required to be the same in every process. 528 * 529 * Parameters: 530 * outStore - the backing store identifier for this buffer 531 * 532 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 533 * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid 534 * GRALLOC1_ERROR_UNSUPPORTED - the device is unable to retrieve the 535 * backing store identifier from the buffer; see note [1] in this 536 * section's header for more information 537 */ 538typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_GET_BACKING_STORE)( 539 gralloc1_device_t* device, buffer_handle_t buffer, 540 gralloc1_backing_store_t* outStore); 541 542/* getConsumerUsage(..., outUsage) 543 * Function descriptor: GRALLOC1_FUNCTION_GET_CONSUMER_USAGE 544 * Must be provided by all gralloc1 devices 545 * 546 * Gets the consumer usage flags which were used to allocate this buffer. 547 * 548 * Usage flags can be found in the definition of gralloc1_consumer_usage_t above 549 * 550 * Parameters: 551 * outUsage - the consumer usage flags used to allocate this buffer; must be 552 * non-NULL 553 * 554 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 555 * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid 556 * GRALLOC1_ERROR_UNSUPPORTED - the device is unable to retrieve the 557 * dimensions from the buffer; see note [1] in this section's header for 558 * more information 559 */ 560typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_GET_CONSUMER_USAGE)( 561 gralloc1_device_t* device, buffer_handle_t buffer, 562 uint64_t* /*gralloc1_consumer_usage_t*/ outUsage); 563 564/* getDimensions(..., outWidth, outHeight) 565 * Function descriptor: GRALLOC1_FUNCTION_GET_DIMENSIONS 566 * Must be provided by all gralloc1 devices 567 * 568 * Gets the width and height of the buffer in pixels. 569 * 570 * See setDimensions for more information about these values. 571 * 572 * Parameters: 573 * outWidth - the width of the buffer in pixels, must be non-NULL 574 * outHeight - the height of the buffer in pixels, must be non-NULL 575 * 576 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 577 * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid 578 * GRALLOC1_ERROR_UNSUPPORTED - the device is unable to retrieve the 579 * dimensions from the buffer; see note [1] in this section's header for 580 * more information 581 */ 582typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_GET_DIMENSIONS)( 583 gralloc1_device_t* device, buffer_handle_t buffer, uint32_t* outWidth, 584 uint32_t* outHeight); 585 586/* getFormat(..., outFormat) 587 * Function descriptor: GRALLOC1_FUNCTION_GET_FORMAT 588 * Must be provided by all gralloc1 devices 589 * 590 * Gets the format of the buffer. 591 * 592 * The valid formats can be found in the HAL_PIXEL_FORMAT_* enum in 593 * system/graphics.h. 594 * 595 * Parameters: 596 * outFormat - the format of the buffer; must be non-NULL 597 * 598 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 599 * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid 600 * GRALLOC1_ERROR_UNSUPPORTED - the device is unable to retrieve the format 601 * from the buffer; see note [1] in this section's header for more 602 * information 603 */ 604typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_GET_FORMAT)( 605 gralloc1_device_t* device, buffer_handle_t descriptor, 606 int32_t* outFormat); 607 608/* getLayerCount(..., outLayerCount) 609 * Function descriptor: GRALLOC1_FUNCTION_GET_LAYER_COUNT 610 * Must be provided by all gralloc1 devices that provide the 611 * GRALLOC1_CAPABILITY_LAYERED_BUFFERS capability. 612 * 613 * Gets the number of layers of the buffer. 614 * 615 * See setLayerCount for more information about this value. 616 * 617 * Parameters: 618 * outLayerCount - the number of layers in the image, must be non-NULL 619 * 620 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 621 * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid 622 * GRALLOC1_ERROR_UNSUPPORTED - the device is unable to retrieve the 623 * layer count from the buffer; see note [1] in this section's header for 624 * more information 625 */ 626typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_GET_LAYER_COUNT)( 627 gralloc1_device_t* device, buffer_handle_t buffer, 628 uint32_t* outLayerCount); 629 630/* getProducerUsage(..., outUsage) 631 * Function descriptor: GRALLOC1_FUNCTION_GET_PRODUCER_USAGE 632 * Must be provided by all gralloc1 devices 633 * 634 * Gets the producer usage flags which were used to allocate this buffer. 635 * 636 * Usage flags can be found in the definition of gralloc1_producer_usage_t above 637 * 638 * Parameters: 639 * outUsage - the producer usage flags used to allocate this buffer; must be 640 * non-NULL 641 * 642 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 643 * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid 644 * GRALLOC1_ERROR_UNSUPPORTED - the device is unable to retrieve the usage 645 * from the buffer; see note [1] in this section's header for more 646 * information 647 */ 648typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_GET_PRODUCER_USAGE)( 649 gralloc1_device_t* device, buffer_handle_t buffer, 650 uint64_t* /*gralloc1_producer_usage_t*/ outUsage); 651 652/* getStride(..., outStride) 653 * Function descriptor: GRALLOC1_FUNCTION_GET_STRIDE 654 * Must be provided by all gralloc1 devices 655 * 656 * Gets the stride of the buffer in pixels. 657 * 658 * The stride is the offset in pixel-sized elements between the same column in 659 * two adjacent rows of pixels. This may not be equal to the width of the 660 * buffer. 661 * 662 * Parameters: 663 * outStride - the stride in pixels; must be non-NULL 664 * 665 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 666 * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid 667 * GRALLOC1_ERROR_UNDEFINED - the notion of a stride is not meaningful for 668 * this format 669 * GRALLOC1_ERROR_UNSUPPORTED - the device is unable to retrieve the stride 670 * from the descriptor; see note [1] in this section's header for more 671 * information 672 */ 673typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_GET_STRIDE)( 674 gralloc1_device_t* device, buffer_handle_t buffer, uint32_t* outStride); 675 676/* getTransportSize(..., outNumFds, outNumInts) 677 * Function descriptor: GRALLOC1_FUNCTION_GET_TRANSPORT_SIZE 678 * 679 * Get the transport size of a buffer. An imported buffer handle is a raw 680 * buffer handle with the process-local runtime data appended. This 681 * function, for example, allows a caller to omit the process-local 682 * runtime data at the tail when serializing the imported buffer handle. 683 * 684 * Note that a client might or might not omit the process-local runtime 685 * data when sending an imported buffer handle. The mapper must support 686 * both cases on the receiving end. 687 * 688 * Parameters: 689 * outNumFds - the number of file descriptors needed for transport 690 * outNumInts - the number of integers needed for transport 691 * 692 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 693 * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid 694 * GRALLOC1_ERROR_UNSUPPORTED - the device is unable to retrieve the numFds 695 * and numInts; see note [1] in this section's header for more information 696 */ 697typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_GET_TRANSPORT_SIZE)( 698 gralloc1_device_t* device, buffer_handle_t buffer, uint32_t *outNumFds, 699 uint32_t *outNumInts); 700 701typedef struct gralloc1_buffer_descriptor_info { 702 uint32_t width; 703 uint32_t height; 704 uint32_t layerCount; 705 int32_t /*android_pixel_format_t*/ format; 706 uint64_t producerUsage; 707 uint64_t consumerUsage; 708} gralloc1_buffer_descriptor_info_t; 709 710/* validateBufferSize(..., ) 711 * Function descriptor: GRALLOC1_FUNCTION_VALIDATE_BUFFER_SIZE 712 * 713 * Validate that the buffer can be safely accessed by a caller who assumes 714 * the specified descriptorInfo and stride. This must at least validate 715 * that the buffer size is large enough. Validating the buffer against 716 * individual buffer attributes is optional. 717 * 718 * Parameters: 719 * descriptor - specifies the attributes of the buffer 720 * stride - the buffer stride returned by IAllocator::allocate 721 * 722 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 723 * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid 724 * GRALLOC1_ERROR_BAD_VALUE - when buffer cannot be safely accessed 725 * GRALLOC1_ERROR_UNSUPPORTED - the device is unable to validate the buffer 726 * size; see note [1] in this section's header for more information 727 */ 728typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_VALIDATE_BUFFER_SIZE)( 729 gralloc1_device_t* device, buffer_handle_t buffer, 730 const gralloc1_buffer_descriptor_info_t* descriptorInfo, 731 uint32_t stride); 732 733/* 734 * Buffer management functions 735 */ 736 737/* allocate(..., numDescriptors, descriptors, outBuffers) 738 * Function descriptor: GRALLOC1_FUNCTION_ALLOCATE 739 * Must be provided by all gralloc1 devices 740 * 741 * Attempts to allocate a number of buffers sharing a backing store. 742 * 743 * Each buffer will correspond to one of the descriptors passed into the 744 * function. If the device is unable to share the backing store between the 745 * buffers, it should attempt to allocate the buffers with different backing 746 * stores and return GRALLOC1_ERROR_NOT_SHARED if it is successful. 747 * 748 * If this call is successful, the client is responsible for freeing the 749 * buffer_handle_t using release() when it is finished with the buffer. It is 750 * not necessary to call retain() on the returned buffers, as they must have a 751 * reference added by the device before returning. 752 * 753 * If GRALLOC1_CAPABILITY_TEST_ALLOCATE is supported by this device, outBuffers 754 * may be NULL. In this case, the device must not attempt to allocate any 755 * buffers, but instead must return either GRALLOC1_ERROR_NONE if such an 756 * allocation is possible (ignoring potential resource contention which might 757 * lead to a GRALLOC1_ERROR_NO_RESOURCES error), GRALLOC1_ERROR_NOT_SHARED if 758 * the buffers can be allocated, but cannot share a backing store, or 759 * GRALLOC1_ERROR_UNSUPPORTED if one or more of the descriptors can never be 760 * allocated by the device. 761 * 762 * Parameters: 763 * numDescriptors - the number of buffer descriptors, which must also be equal 764 * to the size of the outBuffers array 765 * descriptors - the buffer descriptors to attempt to allocate 766 * outBuffers - the allocated buffers; must be non-NULL unless the device 767 * supports GRALLOC1_CAPABILITY_TEST_ALLOCATE (see above), and must not be 768 * modified by the device if allocation is unsuccessful 769 * 770 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 771 * GRALLOC1_ERROR_BAD_DESCRIPTOR - one of the descriptors does not refer to a 772 * valid buffer descriptor 773 * GRALLOC1_ERROR_NOT_SHARED - allocation was successful, but required more 774 * than one backing store to satisfy all of the buffer descriptors 775 * GRALLOC1_ERROR_NO_RESOURCES - allocation failed because one or more of the 776 * backing stores could not be created at this time (but this allocation 777 * might succeed at a future time) 778 * GRALLOC1_ERROR_UNSUPPORTED - one or more of the descriptors can never be 779 * satisfied by the device 780 */ 781typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_ALLOCATE)( 782 gralloc1_device_t* device, uint32_t numDescriptors, 783 const gralloc1_buffer_descriptor_t* descriptors, 784 buffer_handle_t* outBuffers); 785 786/* importBuffer(..., rawHandle, outBuffer); 787 * Function descriptor: GRALLOC1_FUNCTION_IMPORT_BUFFER 788 * This function is optional for all gralloc1 devices. 789 * When supported, GRALLOC1_CAPABILITY_RELEASE_IMPLY_DELETE must also be 790 * supported. 791 * 792 * Explictly imports a buffer into a proccess. 793 * 794 * This function can be called in place of retain when a raw buffer handle is 795 * received by a remote process. Import producess a import handle that can 796 * be used to access the underlying graphic buffer. The new import handle has a 797 * ref count of 1. 798 * 799 * This function must at least validate the raw handle before creating the 800 * imported handle. It must also support importing the same raw handle 801 * multiple times to create multiple imported handles. The imported handle 802 * must be considered valid everywhere in the process. 803 * 804 * Parameters: 805 * rawHandle - the raw buffer handle to import 806 * outBuffer - a handle to the newly imported buffer 807 * 808 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 809 * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid 810 * GRALLOC1_ERROR_NO_RESOURCES - it is not possible to add a import to this 811 * buffer at this time 812 */ 813typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_IMPORT_BUFFER)( 814 gralloc1_device_t* device, const buffer_handle_t rawHandle, 815 buffer_handle_t* outBuffer); 816 817/* retain(..., buffer) 818 * Function descriptor: GRALLOC1_FUNCTION_RETAIN 819 * Must be provided by all gralloc1 devices 820 * 821 * Adds a reference to the given buffer. 822 * 823 * This function must be called when a buffer_handle_t is received from a remote 824 * process to prevent the buffer's data from being freed when the remote process 825 * releases the buffer. It may also be called to increase the reference count if 826 * two components in the same process want to interact with the buffer 827 * independently. 828 * 829 * Parameters: 830 * buffer - the buffer to which a reference should be added 831 * 832 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 833 * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid 834 * GRALLOC1_ERROR_NO_RESOURCES - it is not possible to add a reference to this 835 * buffer at this time 836 */ 837typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_RETAIN)( 838 gralloc1_device_t* device, buffer_handle_t buffer); 839 840/* release(..., buffer) 841 * Function descriptor: GRALLOC1_FUNCTION_RELEASE 842 * Must be provided by all gralloc1 devices 843 * 844 * Removes a reference from the given buffer. 845 * 846 * If no references remain, the buffer should be freed. When the last buffer 847 * referring to a particular backing store is freed, that backing store should 848 * also be freed. 849 * 850 * When GRALLOC1_CAPABILITY_RELEASE_IMPLY_DELETE is supported, 851 * native_handle_close and native_handle_delete must always be called by the 852 * implementation whenever the last reference is removed. Otherwise, a call 853 * to release() will be followed by native_handle_close and native_handle_delete 854 * by the caller when the buffer is not allocated locally through allocate(). 855 * 856 * Parameters: 857 * buffer - the buffer from which a reference should be removed 858 * 859 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 860 * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid 861 */ 862typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_RELEASE)( 863 gralloc1_device_t* device, buffer_handle_t buffer); 864 865/* 866 * Buffer access functions 867 * 868 * All of these functions take as their first parameter a device pointer, so 869 * this parameter is omitted from the described parameter lists. 870 */ 871 872typedef struct gralloc1_rect { 873 int32_t left; 874 int32_t top; 875 int32_t width; 876 int32_t height; 877} gralloc1_rect_t; 878 879/* getNumFlexPlanes(..., buffer, outNumPlanes) 880 * Function descriptor: GRALLOC1_FUNCTION_GET_NUM_FLEX_PLANES 881 * Must be provided by all gralloc1 devices 882 * 883 * Returns the number of flex layout planes which are needed to represent the 884 * given buffer. This may be used to efficiently allocate only as many plane 885 * structures as necessary before calling into lockFlex. 886 * 887 * If the given buffer cannot be locked as a flex format, this function may 888 * return GRALLOC1_ERROR_UNSUPPORTED (as lockFlex would). 889 * 890 * Parameters: 891 * buffer - the buffers for which the number of planes should be queried 892 * outNumPlanes - the number of flex planes required to describe the given 893 * buffer; must be non-NULL 894 * 895 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 896 * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid 897 * GRALLOC1_ERROR_UNSUPPORTED - the buffer's format cannot be represented in a 898 * flex layout 899 */ 900typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_GET_NUM_FLEX_PLANES)( 901 gralloc1_device_t* device, buffer_handle_t buffer, 902 uint32_t* outNumPlanes); 903 904/* lock(..., buffer, producerUsage, consumerUsage, accessRegion, outData, 905 * acquireFence) 906 * Function descriptor: GRALLOC1_FUNCTION_LOCK 907 * Must be provided by all gralloc1 devices 908 * 909 * Locks the given buffer for the specified CPU usage. 910 * 911 * Exactly one of producerUsage and consumerUsage must be *_USAGE_NONE. The 912 * usage which is not *_USAGE_NONE must be one of the *_USAGE_CPU_* values, as 913 * applicable. Locking a buffer for a non-CPU usage is not supported. 914 * 915 * Locking the same buffer simultaneously from multiple threads is permitted, 916 * but if any of the threads attempt to lock the buffer for writing, the 917 * behavior is undefined, except that it must not cause process termination or 918 * block the client indefinitely. Leaving the buffer content in an indeterminate 919 * state or returning an error are both acceptable. 920 * 921 * The client must not modify the content of the buffer outside of accessRegion, 922 * and the device need not guarantee that content outside of accessRegion is 923 * valid for reading. The result of reading or writing outside of accessRegion 924 * is undefined, except that it must not cause process termination. 925 * 926 * outData must be a non-NULL pointer, the contents of which which will be 927 * filled with a pointer to the locked buffer memory. This address will 928 * represent the top-left corner of the entire buffer, even if accessRegion does 929 * not begin at the top-left corner. 930 * 931 * acquireFence is a file descriptor referring to a acquire sync fence object, 932 * which will be signaled when it is safe for the device to access the contents 933 * of the buffer (prior to locking). If it is already safe to access the buffer 934 * contents, -1 may be passed instead. 935 * 936 * Parameters: 937 * buffer - the buffer to lock 938 * producerUsage - the producer usage flags to request; either this or 939 * consumerUsage must be GRALLOC1_*_USAGE_NONE, and the other must be a 940 * CPU usage 941 * consumerUsage - the consumer usage flags to request; either this or 942 * producerUsage must be GRALLOC1_*_USAGE_NONE, and the other must be a 943 * CPU usage 944 * accessRegion - the portion of the buffer that the client intends to access; 945 * must be non-NULL 946 * outData - will be filled with a CPU-accessible pointer to the buffer data; 947 * must be non-NULL 948 * acquireFence - a sync fence file descriptor as described above 949 * 950 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 951 * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid 952 * GRALLOC1_ERROR_BAD_VALUE - neither or both of producerUsage and 953 * consumerUsage were GRALLOC1_*_USAGE_NONE, or the usage which was not 954 * *_USAGE_NONE was not a CPU usage 955 * GRALLOC1_ERROR_NO_RESOURCES - the buffer cannot be locked at this time, but 956 * locking may succeed at a future time 957 * GRALLOC1_ERROR_UNSUPPORTED - the buffer cannot be locked with the given 958 * usage, and any future attempts at locking will also fail 959 */ 960typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_LOCK)( 961 gralloc1_device_t* device, buffer_handle_t buffer, 962 uint64_t /*gralloc1_producer_usage_t*/ producerUsage, 963 uint64_t /*gralloc1_consumer_usage_t*/ consumerUsage, 964 const gralloc1_rect_t* accessRegion, void** outData, 965 int32_t acquireFence); 966 967/* lockFlex(..., buffer, producerUsage, consumerUsage, accessRegion, 968 * outFlexLayout, outAcquireFence) 969 * Function descriptor: GRALLOC1_FUNCTION_LOCK_FLEX 970 * Must be provided by all gralloc1 devices 971 * 972 * This is largely the same as lock(), except that instead of returning a 973 * pointer directly to the buffer data, it returns an android_flex_layout 974 * struct describing how to access the data planes. 975 * 976 * This function must work on buffers with HAL_PIXEL_FORMAT_YCbCr_*_888 if 977 * supported by the device, as well as with any other formats requested by 978 * multimedia codecs when they are configured with a flexible-YUV-compatible 979 * color format. 980 * 981 * This function may also be called on buffers of other formats, including 982 * non-YUV formats, but if the buffer format is not compatible with a flexible 983 * representation, it may return GRALLOC1_ERROR_UNSUPPORTED. 984 * 985 * Parameters: 986 * buffer - the buffer to lock 987 * producerUsage - the producer usage flags to request; either this or 988 * consumerUsage must be GRALLOC1_*_USAGE_NONE, and the other must be a 989 * CPU usage 990 * consumerUsage - the consumer usage flags to request; either this or 991 * producerUsage must be GRALLOC1_*_USAGE_NONE, and the other must be a 992 * CPU usage 993 * accessRegion - the portion of the buffer that the client intends to access; 994 * must be non-NULL 995 * outFlexLayout - will be filled with the description of the planes in the 996 * buffer 997 * acquireFence - a sync fence file descriptor as described in lock() 998 * 999 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 1000 * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid 1001 * GRALLOC1_ERROR_BAD_VALUE - neither or both of producerUsage and 1002 * consumerUsage were *_USAGE_NONE, or the usage which was not 1003 * *_USAGE_NONE was not a CPU usage 1004 * GRALLOC1_ERROR_NO_RESOURCES - the buffer cannot be locked at this time, but 1005 * locking may succeed at a future time 1006 * GRALLOC1_ERROR_UNSUPPORTED - the buffer cannot be locked with the given 1007 * usage, and any future attempts at locking will also fail 1008 */ 1009typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_LOCK_FLEX)( 1010 gralloc1_device_t* device, buffer_handle_t buffer, 1011 uint64_t /*gralloc1_producer_usage_t*/ producerUsage, 1012 uint64_t /*gralloc1_consumer_usage_t*/ consumerUsage, 1013 const gralloc1_rect_t* accessRegion, 1014 struct android_flex_layout* outFlexLayout, int32_t acquireFence); 1015 1016/* unlock(..., buffer, releaseFence) 1017 * Function descriptor: GRALLOC1_FUNCTION_UNLOCK 1018 * Must be provided by all gralloc1 devices 1019 * 1020 * This function indicates to the device that the client will be done with the 1021 * buffer when releaseFence signals. 1022 * 1023 * outReleaseFence will be filled with a file descriptor referring to a release 1024 * sync fence object, which will be signaled when it is safe to access the 1025 * contents of the buffer (after the buffer has been unlocked). If it is already 1026 * safe to access the buffer contents, then -1 may be returned instead. 1027 * 1028 * This function is used to unlock both buffers locked by lock() and those 1029 * locked by lockFlex(). 1030 * 1031 * Parameters: 1032 * buffer - the buffer to unlock 1033 * outReleaseFence - a sync fence file descriptor as described above 1034 * 1035 * Returns GRALLOC1_ERROR_NONE or one of the following errors: 1036 * GRALLOC1_ERROR_BAD_HANDLE - the buffer handle is invalid 1037 */ 1038typedef int32_t /*gralloc1_error_t*/ (*GRALLOC1_PFN_UNLOCK)( 1039 gralloc1_device_t* device, buffer_handle_t buffer, 1040 int32_t* outReleaseFence); 1041 1042__END_DECLS 1043 1044#endif 1045