1 // Copyright 2018 The Android Open Source Project 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either expresso or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 #pragma once 15 16 typedef enum { 17 HAL_PIXEL_FORMAT_RGBA_8888 = 1, 18 HAL_PIXEL_FORMAT_RGBX_8888 = 2, 19 HAL_PIXEL_FORMAT_RGB_888 = 3, 20 HAL_PIXEL_FORMAT_RGB_565 = 4, 21 HAL_PIXEL_FORMAT_BGRA_8888 = 5, 22 HAL_PIXEL_FORMAT_RGBA_1010102 = 43, // 0x2B 23 HAL_PIXEL_FORMAT_RGBA_FP16 = 22, // 0x16 24 HAL_PIXEL_FORMAT_YV12 = 842094169, // 0x32315659 25 HAL_PIXEL_FORMAT_Y8 = 538982489, // 0x20203859 26 HAL_PIXEL_FORMAT_Y16 = 540422489, // 0x20363159 27 HAL_PIXEL_FORMAT_RAW16 = 32, // 0x20 28 HAL_PIXEL_FORMAT_RAW10 = 37, // 0x25 29 HAL_PIXEL_FORMAT_RAW12 = 38, // 0x26 30 HAL_PIXEL_FORMAT_RAW_OPAQUE = 36, // 0x24 31 HAL_PIXEL_FORMAT_BLOB = 33, // 0x21 32 HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED = 34, // 0x22 33 HAL_PIXEL_FORMAT_YCBCR_420_888 = 35, // 0x23 34 HAL_PIXEL_FORMAT_YCBCR_422_888 = 39, // 0x27 35 HAL_PIXEL_FORMAT_YCBCR_444_888 = 40, // 0x28 36 HAL_PIXEL_FORMAT_FLEX_RGB_888 = 41, // 0x29 37 HAL_PIXEL_FORMAT_FLEX_RGBA_8888 = 42, // 0x2A 38 HAL_PIXEL_FORMAT_YCBCR_422_SP = 16, // 0x10 39 HAL_PIXEL_FORMAT_YCRCB_420_SP = 17, // 0x11 40 HAL_PIXEL_FORMAT_YCBCR_422_I = 20, // 0x14 41 HAL_PIXEL_FORMAT_JPEG = 256, // 0x100 42 } android_pixel_format_t; 43 44 enum { 45 /* buffer is never read in software */ 46 GRALLOC_USAGE_SW_READ_NEVER = 0x00000000U, 47 /* buffer is rarely read in software */ 48 GRALLOC_USAGE_SW_READ_RARELY = 0x00000002U, 49 /* buffer is often read in software */ 50 GRALLOC_USAGE_SW_READ_OFTEN = 0x00000003U, 51 /* mask for the software read values */ 52 GRALLOC_USAGE_SW_READ_MASK = 0x0000000FU, 53 54 /* buffer is never written in software */ 55 GRALLOC_USAGE_SW_WRITE_NEVER = 0x00000000U, 56 /* buffer is rarely written in software */ 57 GRALLOC_USAGE_SW_WRITE_RARELY = 0x00000020U, 58 /* buffer is often written in software */ 59 GRALLOC_USAGE_SW_WRITE_OFTEN = 0x00000030U, 60 /* mask for the software write values */ 61 GRALLOC_USAGE_SW_WRITE_MASK = 0x000000F0U, 62 63 /* buffer will be used as an OpenGL ES texture */ 64 GRALLOC_USAGE_HW_TEXTURE = 0x00000100U, 65 /* buffer will be used as an OpenGL ES render target */ 66 GRALLOC_USAGE_HW_RENDER = 0x00000200U, 67 /* buffer will be used by the 2D hardware blitter */ 68 GRALLOC_USAGE_HW_2D = 0x00000400U, 69 /* buffer will be used by the HWComposer HAL module */ 70 GRALLOC_USAGE_HW_COMPOSER = 0x00000800U, 71 /* buffer will be used with the framebuffer device */ 72 GRALLOC_USAGE_HW_FB = 0x00001000U, 73 74 /* buffer should be displayed full-screen on an external display when 75 * possible */ 76 GRALLOC_USAGE_EXTERNAL_DISP = 0x00002000U, 77 78 /* Must have a hardware-protected path to external display sink for 79 * this buffer. If a hardware-protected path is not available, then 80 * either don't composite only this buffer (preferred) to the 81 * external sink, or (less desirable) do not route the entire 82 * composition to the external sink. */ 83 GRALLOC_USAGE_PROTECTED = 0x00004000U, 84 85 /* buffer may be used as a cursor */ 86 GRALLOC_USAGE_CURSOR = 0x00008000U, 87 88 /* buffer will be used with the HW video encoder */ 89 GRALLOC_USAGE_HW_VIDEO_ENCODER = 0x00010000U, 90 /* buffer will be written by the HW camera pipeline */ 91 GRALLOC_USAGE_HW_CAMERA_WRITE = 0x00020000U, 92 /* buffer will be read by the HW camera pipeline */ 93 GRALLOC_USAGE_HW_CAMERA_READ = 0x00040000U, 94 /* buffer will be used as part of zero-shutter-lag queue */ 95 GRALLOC_USAGE_HW_CAMERA_ZSL = 0x00060000U, 96 /* mask for the camera access values */ 97 GRALLOC_USAGE_HW_CAMERA_MASK = 0x00060000U, 98 /* mask for the software usage bit-mask */ 99 GRALLOC_USAGE_HW_MASK = 0x00071F00U, 100 101 /* buffer will be used as a RenderScript Allocation */ 102 GRALLOC_USAGE_RENDERSCRIPT = 0x00100000U, 103 104 /* Set by the consumer to indicate to the producer that they may attach a 105 * buffer that they did not detach from the BufferQueue. Will be filtered 106 * out by GRALLOC_USAGE_ALLOC_MASK, so gralloc modules will not need to 107 * handle this flag. */ 108 GRALLOC_USAGE_FOREIGN_BUFFERS = 0x00200000U, 109 110 /* Mask of all flags which could be passed to a gralloc module for buffer 111 * allocation. Any flags not in this mask do not need to be handled by 112 * gralloc modules. */ 113 GRALLOC_USAGE_ALLOC_MASK = ~(GRALLOC_USAGE_FOREIGN_BUFFERS), 114 115 /* implementation-specific private usage flags */ 116 GRALLOC_USAGE_PRIVATE_0 = 0x10000000U, 117 GRALLOC_USAGE_PRIVATE_1 = 0x20000000U, 118 GRALLOC_USAGE_PRIVATE_2 = 0x40000000U, 119 GRALLOC_USAGE_PRIVATE_3 = 0x80000000U, 120 GRALLOC_USAGE_PRIVATE_MASK = 0xF0000000U, 121 }; 122 123 typedef enum { 124 GRALLOC1_CONSUMER_USAGE_NONE = 0, 125 GRALLOC1_CONSUMER_USAGE_CPU_READ_NEVER = 0, 126 /* 1ULL << 0 */ 127 GRALLOC1_CONSUMER_USAGE_CPU_READ = 1ULL << 1, 128 GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN = 1ULL << 2 | 129 GRALLOC1_CONSUMER_USAGE_CPU_READ, 130 /* 1ULL << 3 */ 131 /* 1ULL << 4 */ 132 /* 1ULL << 5 */ 133 /* 1ULL << 6 */ 134 /* 1ULL << 7 */ 135 GRALLOC1_CONSUMER_USAGE_GPU_TEXTURE = 1ULL << 8, 136 /* 1ULL << 9 */ 137 /* 1ULL << 10 */ 138 GRALLOC1_CONSUMER_USAGE_HWCOMPOSER = 1ULL << 11, 139 GRALLOC1_CONSUMER_USAGE_CLIENT_TARGET = 1ULL << 12, 140 /* 1ULL << 13 */ 141 /* 1ULL << 14 */ 142 GRALLOC1_CONSUMER_USAGE_CURSOR = 1ULL << 15, 143 GRALLOC1_CONSUMER_USAGE_VIDEO_ENCODER = 1ULL << 16, 144 /* 1ULL << 17 */ 145 GRALLOC1_CONSUMER_USAGE_CAMERA = 1ULL << 18, 146 /* 1ULL << 19 */ 147 GRALLOC1_CONSUMER_USAGE_RENDERSCRIPT = 1ULL << 20, 148 149 /* Indicates that the consumer may attach buffers to their end of the 150 * BufferQueue, which means that the producer may never have seen a given 151 * dequeued buffer before. May be ignored by the gralloc device. */ 152 GRALLOC1_CONSUMER_USAGE_FOREIGN_BUFFERS = 1ULL << 21, 153 154 /* 1ULL << 22 */ 155 GRALLOC1_CONSUMER_USAGE_GPU_DATA_BUFFER = 1ULL << 23, 156 /* 1ULL << 24 */ 157 /* 1ULL << 25 */ 158 /* 1ULL << 26 */ 159 /* 1ULL << 27 */ 160 161 /* Bits reserved for implementation-specific usage flags */ 162 GRALLOC1_CONSUMER_USAGE_PRIVATE_0 = 1ULL << 28, 163 GRALLOC1_CONSUMER_USAGE_PRIVATE_1 = 1ULL << 29, 164 GRALLOC1_CONSUMER_USAGE_PRIVATE_2 = 1ULL << 30, 165 GRALLOC1_CONSUMER_USAGE_PRIVATE_3 = 1ULL << 31, 166 167 /* 1ULL << 32 */ 168 /* 1ULL << 33 */ 169 /* 1ULL << 34 */ 170 /* 1ULL << 35 */ 171 /* 1ULL << 36 */ 172 /* 1ULL << 37 */ 173 /* 1ULL << 38 */ 174 /* 1ULL << 39 */ 175 /* 1ULL << 40 */ 176 /* 1ULL << 41 */ 177 /* 1ULL << 42 */ 178 /* 1ULL << 43 */ 179 /* 1ULL << 44 */ 180 /* 1ULL << 45 */ 181 /* 1ULL << 46 */ 182 /* 1ULL << 47 */ 183 184 /* Bits reserved for implementation-specific usage flags */ 185 GRALLOC1_CONSUMER_USAGE_PRIVATE_19 = 1ULL << 48, 186 GRALLOC1_CONSUMER_USAGE_PRIVATE_18 = 1ULL << 49, 187 GRALLOC1_CONSUMER_USAGE_PRIVATE_17 = 1ULL << 50, 188 GRALLOC1_CONSUMER_USAGE_PRIVATE_16 = 1ULL << 51, 189 GRALLOC1_CONSUMER_USAGE_PRIVATE_15 = 1ULL << 52, 190 GRALLOC1_CONSUMER_USAGE_PRIVATE_14 = 1ULL << 53, 191 GRALLOC1_CONSUMER_USAGE_PRIVATE_13 = 1ULL << 54, 192 GRALLOC1_CONSUMER_USAGE_PRIVATE_12 = 1ULL << 55, 193 GRALLOC1_CONSUMER_USAGE_PRIVATE_11 = 1ULL << 56, 194 GRALLOC1_CONSUMER_USAGE_PRIVATE_10 = 1ULL << 57, 195 GRALLOC1_CONSUMER_USAGE_PRIVATE_9 = 1ULL << 58, 196 GRALLOC1_CONSUMER_USAGE_PRIVATE_8 = 1ULL << 59, 197 GRALLOC1_CONSUMER_USAGE_PRIVATE_7 = 1ULL << 60, 198 GRALLOC1_CONSUMER_USAGE_PRIVATE_6 = 1ULL << 61, 199 GRALLOC1_CONSUMER_USAGE_PRIVATE_5 = 1ULL << 62, 200 GRALLOC1_CONSUMER_USAGE_PRIVATE_4 = 1ULL << 63, 201 } gralloc1_consumer_usage_t; 202 203 typedef enum { 204 GRALLOC1_PRODUCER_USAGE_NONE = 0, 205 GRALLOC1_PRODUCER_USAGE_CPU_WRITE_NEVER = 0, 206 /* 1ULL << 0 */ 207 GRALLOC1_PRODUCER_USAGE_CPU_READ = 1ULL << 1, 208 GRALLOC1_PRODUCER_USAGE_CPU_READ_OFTEN = 1ULL << 2 | 209 GRALLOC1_PRODUCER_USAGE_CPU_READ, 210 /* 1ULL << 3 */ 211 /* 1ULL << 4 */ 212 GRALLOC1_PRODUCER_USAGE_CPU_WRITE = 1ULL << 5, 213 GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN = 1ULL << 6 | 214 GRALLOC1_PRODUCER_USAGE_CPU_WRITE, 215 /* 1ULL << 7 */ 216 /* 1ULL << 8 */ 217 GRALLOC1_PRODUCER_USAGE_GPU_RENDER_TARGET = 1ULL << 9, 218 /* 1ULL << 10 */ 219 /* 1ULL << 11 */ 220 /* 1ULL << 12 */ 221 /* 1ULL << 13 */ 222 223 /* The consumer must have a hardware-protected path to an external display 224 * sink for this buffer. If a hardware-protected path is not available, then 225 * do not attempt to display this buffer. */ 226 GRALLOC1_PRODUCER_USAGE_PROTECTED = 1ULL << 14, 227 228 /* 1ULL << 15 */ 229 /* 1ULL << 16 */ 230 GRALLOC1_PRODUCER_USAGE_CAMERA = 1ULL << 17, 231 /* 1ULL << 18 */ 232 /* 1ULL << 19 */ 233 /* 1ULL << 20 */ 234 /* 1ULL << 21 */ 235 GRALLOC1_PRODUCER_USAGE_VIDEO_DECODER = 1ULL << 22, 236 GRALLOC1_PRODUCER_USAGE_SENSOR_DIRECT_DATA = 1ULL << 23, 237 /* 1ULL << 24 */ 238 /* 1ULL << 25 */ 239 /* 1ULL << 26 */ 240 /* 1ULL << 27 */ 241 242 /* Bits reserved for implementation-specific usage flags */ 243 GRALLOC1_PRODUCER_USAGE_PRIVATE_0 = 1ULL << 28, 244 GRALLOC1_PRODUCER_USAGE_PRIVATE_1 = 1ULL << 29, 245 GRALLOC1_PRODUCER_USAGE_PRIVATE_2 = 1ULL << 30, 246 GRALLOC1_PRODUCER_USAGE_PRIVATE_3 = 1ULL << 31, 247 248 /* 1ULL << 32 */ 249 /* 1ULL << 33 */ 250 /* 1ULL << 34 */ 251 /* 1ULL << 35 */ 252 /* 1ULL << 36 */ 253 /* 1ULL << 37 */ 254 /* 1ULL << 38 */ 255 /* 1ULL << 39 */ 256 /* 1ULL << 40 */ 257 /* 1ULL << 41 */ 258 /* 1ULL << 42 */ 259 /* 1ULL << 43 */ 260 /* 1ULL << 44 */ 261 /* 1ULL << 45 */ 262 /* 1ULL << 46 */ 263 /* 1ULL << 47 */ 264 265 /* Bits reserved for implementation-specific usage flags */ 266 GRALLOC1_PRODUCER_USAGE_PRIVATE_19 = 1ULL << 48, 267 GRALLOC1_PRODUCER_USAGE_PRIVATE_18 = 1ULL << 49, 268 GRALLOC1_PRODUCER_USAGE_PRIVATE_17 = 1ULL << 50, 269 GRALLOC1_PRODUCER_USAGE_PRIVATE_16 = 1ULL << 51, 270 GRALLOC1_PRODUCER_USAGE_PRIVATE_15 = 1ULL << 52, 271 GRALLOC1_PRODUCER_USAGE_PRIVATE_14 = 1ULL << 53, 272 GRALLOC1_PRODUCER_USAGE_PRIVATE_13 = 1ULL << 54, 273 GRALLOC1_PRODUCER_USAGE_PRIVATE_12 = 1ULL << 55, 274 GRALLOC1_PRODUCER_USAGE_PRIVATE_11 = 1ULL << 56, 275 GRALLOC1_PRODUCER_USAGE_PRIVATE_10 = 1ULL << 57, 276 GRALLOC1_PRODUCER_USAGE_PRIVATE_9 = 1ULL << 58, 277 GRALLOC1_PRODUCER_USAGE_PRIVATE_8 = 1ULL << 59, 278 GRALLOC1_PRODUCER_USAGE_PRIVATE_7 = 1ULL << 60, 279 GRALLOC1_PRODUCER_USAGE_PRIVATE_6 = 1ULL << 61, 280 GRALLOC1_PRODUCER_USAGE_PRIVATE_5 = 1ULL << 62, 281 GRALLOC1_PRODUCER_USAGE_PRIVATE_4 = 1ULL << 63, 282 } gralloc1_producer_usage_t;