// Copyright 2018 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 expresso or implied. // See the License for the specific language governing permissions and // limitations under the License. #pragma once typedef enum { HAL_PIXEL_FORMAT_RGBA_8888 = 1, HAL_PIXEL_FORMAT_RGBX_8888 = 2, HAL_PIXEL_FORMAT_RGB_888 = 3, HAL_PIXEL_FORMAT_RGB_565 = 4, HAL_PIXEL_FORMAT_BGRA_8888 = 5, HAL_PIXEL_FORMAT_RGBA_1010102 = 43, // 0x2B HAL_PIXEL_FORMAT_RGBA_FP16 = 22, // 0x16 HAL_PIXEL_FORMAT_YV12 = 842094169, // 0x32315659 HAL_PIXEL_FORMAT_Y8 = 538982489, // 0x20203859 HAL_PIXEL_FORMAT_Y16 = 540422489, // 0x20363159 HAL_PIXEL_FORMAT_RAW16 = 32, // 0x20 HAL_PIXEL_FORMAT_RAW10 = 37, // 0x25 HAL_PIXEL_FORMAT_RAW12 = 38, // 0x26 HAL_PIXEL_FORMAT_RAW_OPAQUE = 36, // 0x24 HAL_PIXEL_FORMAT_BLOB = 33, // 0x21 HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED = 34, // 0x22 HAL_PIXEL_FORMAT_YCBCR_420_888 = 35, // 0x23 HAL_PIXEL_FORMAT_YCBCR_422_888 = 39, // 0x27 HAL_PIXEL_FORMAT_YCBCR_444_888 = 40, // 0x28 HAL_PIXEL_FORMAT_FLEX_RGB_888 = 41, // 0x29 HAL_PIXEL_FORMAT_FLEX_RGBA_8888 = 42, // 0x2A HAL_PIXEL_FORMAT_YCBCR_422_SP = 16, // 0x10 HAL_PIXEL_FORMAT_YCRCB_420_SP = 17, // 0x11 HAL_PIXEL_FORMAT_YCBCR_422_I = 20, // 0x14 HAL_PIXEL_FORMAT_JPEG = 256, // 0x100 } android_pixel_format_t; enum { /* buffer is never read in software */ GRALLOC_USAGE_SW_READ_NEVER = 0x00000000U, /* buffer is rarely read in software */ GRALLOC_USAGE_SW_READ_RARELY = 0x00000002U, /* buffer is often read in software */ GRALLOC_USAGE_SW_READ_OFTEN = 0x00000003U, /* mask for the software read values */ GRALLOC_USAGE_SW_READ_MASK = 0x0000000FU, /* buffer is never written in software */ GRALLOC_USAGE_SW_WRITE_NEVER = 0x00000000U, /* buffer is rarely written in software */ GRALLOC_USAGE_SW_WRITE_RARELY = 0x00000020U, /* buffer is often written in software */ GRALLOC_USAGE_SW_WRITE_OFTEN = 0x00000030U, /* mask for the software write values */ GRALLOC_USAGE_SW_WRITE_MASK = 0x000000F0U, /* buffer will be used as an OpenGL ES texture */ GRALLOC_USAGE_HW_TEXTURE = 0x00000100U, /* buffer will be used as an OpenGL ES render target */ GRALLOC_USAGE_HW_RENDER = 0x00000200U, /* buffer will be used by the 2D hardware blitter */ GRALLOC_USAGE_HW_2D = 0x00000400U, /* buffer will be used by the HWComposer HAL module */ GRALLOC_USAGE_HW_COMPOSER = 0x00000800U, /* buffer will be used with the framebuffer device */ GRALLOC_USAGE_HW_FB = 0x00001000U, /* buffer should be displayed full-screen on an external display when * possible */ GRALLOC_USAGE_EXTERNAL_DISP = 0x00002000U, /* Must have a hardware-protected path to external display sink for * this buffer. If a hardware-protected path is not available, then * either don't composite only this buffer (preferred) to the * external sink, or (less desirable) do not route the entire * composition to the external sink. */ GRALLOC_USAGE_PROTECTED = 0x00004000U, /* buffer may be used as a cursor */ GRALLOC_USAGE_CURSOR = 0x00008000U, /* buffer will be used with the HW video encoder */ GRALLOC_USAGE_HW_VIDEO_ENCODER = 0x00010000U, /* buffer will be written by the HW camera pipeline */ GRALLOC_USAGE_HW_CAMERA_WRITE = 0x00020000U, /* buffer will be read by the HW camera pipeline */ GRALLOC_USAGE_HW_CAMERA_READ = 0x00040000U, /* buffer will be used as part of zero-shutter-lag queue */ GRALLOC_USAGE_HW_CAMERA_ZSL = 0x00060000U, /* mask for the camera access values */ GRALLOC_USAGE_HW_CAMERA_MASK = 0x00060000U, /* mask for the software usage bit-mask */ GRALLOC_USAGE_HW_MASK = 0x00071F00U, /* buffer will be used as a RenderScript Allocation */ GRALLOC_USAGE_RENDERSCRIPT = 0x00100000U, /* Set by the consumer to indicate to the producer that they may attach a * buffer that they did not detach from the BufferQueue. Will be filtered * out by GRALLOC_USAGE_ALLOC_MASK, so gralloc modules will not need to * handle this flag. */ GRALLOC_USAGE_FOREIGN_BUFFERS = 0x00200000U, /* Mask of all flags which could be passed to a gralloc module for buffer * allocation. Any flags not in this mask do not need to be handled by * gralloc modules. */ GRALLOC_USAGE_ALLOC_MASK = ~(GRALLOC_USAGE_FOREIGN_BUFFERS), /* implementation-specific private usage flags */ GRALLOC_USAGE_PRIVATE_0 = 0x10000000U, GRALLOC_USAGE_PRIVATE_1 = 0x20000000U, GRALLOC_USAGE_PRIVATE_2 = 0x40000000U, GRALLOC_USAGE_PRIVATE_3 = 0x80000000U, GRALLOC_USAGE_PRIVATE_MASK = 0xF0000000U, }; 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 */ GRALLOC1_CONSUMER_USAGE_GPU_DATA_BUFFER = 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_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, GRALLOC1_PRODUCER_USAGE_SENSOR_DIRECT_DATA = 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;