1 /* 2 * Copyright@ Samsung Electronics Co. LTD 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 __SAMSUNG_SYSLSI_SEC_COMMON_H__ 18 #define __SAMSUNG_SYSLSI_SEC_COMMON_H__ 19 20 //---------------------------------------------------------// 21 // Include 22 //---------------------------------------------------------// 23 24 #include <hardware/hardware.h> 25 #include "sec_format.h" 26 27 #ifdef __cplusplus 28 extern "C" { 29 #endif 30 31 #include <linux/videodev2.h> 32 33 #ifdef __cplusplus 34 } 35 #endif 36 37 //---------------------------------------------------------// 38 // Common structure // 39 //---------------------------------------------------------// 40 struct ADDRS { 41 unsigned int addr_y; 42 unsigned int addr_cbcr; 43 unsigned int buf_idx; 44 unsigned int reserved; 45 }; 46 47 //---------------------------------------------------------// 48 // Common function // 49 //---------------------------------------------------------// 50 inline int HAL_PIXEL_FORMAT_2_V4L2_PIX(int HAL_PIXEL_FORMAT) 51 { 52 int V4L2_PIX = -1; 53 54 switch (HAL_PIXEL_FORMAT) { 55 case HAL_PIXEL_FORMAT_RGBA_8888: 56 case HAL_PIXEL_FORMAT_RGBX_8888: 57 V4L2_PIX = V4L2_PIX_FMT_RGB32; 58 break; 59 60 case HAL_PIXEL_FORMAT_RGB_888: 61 V4L2_PIX = V4L2_PIX_FMT_RGB24; 62 break; 63 64 case HAL_PIXEL_FORMAT_RGB_565: 65 V4L2_PIX = V4L2_PIX_FMT_RGB565; 66 break; 67 68 case HAL_PIXEL_FORMAT_BGRA_8888: 69 //V4L2_PIX = V4L2_PIX_FMT_BGR32; // this is not proper on fimc. 70 V4L2_PIX = V4L2_PIX_FMT_RGB32; 71 break; 72 73 case HAL_PIXEL_FORMAT_RGBA_5551: 74 V4L2_PIX = V4L2_PIX_FMT_RGB555X; 75 break; 76 77 case HAL_PIXEL_FORMAT_RGBA_4444: 78 V4L2_PIX = V4L2_PIX_FMT_RGB444; 79 break; 80 81 case HAL_PIXEL_FORMAT_YV12: 82 case HAL_PIXEL_FORMAT_YCbCr_420_P: 83 V4L2_PIX = V4L2_PIX_FMT_YUV420; 84 break; 85 86 case HAL_PIXEL_FORMAT_YCbCr_422_SP: 87 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP: 88 V4L2_PIX = V4L2_PIX_FMT_NV61; 89 break; 90 91 case HAL_PIXEL_FORMAT_YCbCr_420_SP: 92 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP: 93 V4L2_PIX = V4L2_PIX_FMT_NV12; 94 break; 95 96 case HAL_PIXEL_FORMAT_YCbCr_422_I: 97 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I: 98 V4L2_PIX = V4L2_PIX_FMT_YUYV; 99 break; 100 101 case HAL_PIXEL_FORMAT_YCbCr_422_P: 102 V4L2_PIX = V4L2_PIX_FMT_YUV422P; 103 break; 104 105 case HAL_PIXEL_FORMAT_CbYCrY_422_I: 106 case HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I: 107 V4L2_PIX = V4L2_PIX_FMT_UYVY; 108 break; 109 110 case HAL_PIXEL_FORMAT_YCrCb_422_SP: 111 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP: 112 V4L2_PIX = V4L2_PIX_FMT_NV16; 113 break; 114 115 case HAL_PIXEL_FORMAT_YCrCb_420_SP: 116 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP: 117 V4L2_PIX = V4L2_PIX_FMT_NV21; 118 break; 119 120 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED: 121 V4L2_PIX = V4L2_PIX_FMT_NV12T; 122 break; 123 124 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I: 125 V4L2_PIX = V4L2_PIX_FMT_YVYU; 126 break; 127 128 case HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I: 129 V4L2_PIX = V4L2_PIX_FMT_VYUY; 130 break; 131 132 default: 133 ALOGE("%s::unmatched HAL_PIXEL_FORMAT color_space(0x%x)\n", 134 __func__, HAL_PIXEL_FORMAT); 135 break; 136 } 137 138 return V4L2_PIX; 139 } 140 141 inline int V4L2_PIX_2_HAL_PIXEL_FORMAT(int V4L2_PIX) 142 { 143 int HAL_PIXEL_FORMAT = -1; 144 145 switch (V4L2_PIX) { 146 case V4L2_PIX_FMT_RGB32: 147 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBA_8888; 148 //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBX_8888; 149 break; 150 151 case V4L2_PIX_FMT_RGB24: 152 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGB_888; 153 break; 154 155 case V4L2_PIX_FMT_RGB565: 156 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGB_565; 157 break; 158 159 case V4L2_PIX_FMT_BGR32: 160 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_BGRA_8888; 161 break; 162 163 case V4L2_PIX_FMT_RGB555X: 164 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBA_5551; 165 break; 166 167 case V4L2_PIX_FMT_RGB444: 168 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBA_4444; 169 break; 170 171 case V4L2_PIX_FMT_YUV420: 172 //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YV12; 173 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCbCr_420_P; 174 break; 175 176 case V4L2_PIX_FMT_NV16: 177 //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCrCb_422_SP; 178 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP; 179 break; 180 181 case V4L2_PIX_FMT_NV12: 182 //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCrCb_420_SP; 183 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP; 184 break; 185 186 case V4L2_PIX_FMT_YUYV: 187 //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCbCr_422_I; 188 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I; 189 break; 190 191 case V4L2_PIX_FMT_YUV422P: 192 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCbCr_422_P; 193 break; 194 195 case V4L2_PIX_FMT_UYVY: 196 //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CbYCrY_422_I; 197 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I; 198 break; 199 200 case V4L2_PIX_FMT_NV21: 201 //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCbCr_420_SP; 202 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP; 203 break; 204 205 case V4L2_PIX_FMT_NV12T: 206 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED; 207 break; 208 209 case V4L2_PIX_FMT_NV61: 210 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP; 211 break; 212 213 case V4L2_PIX_FMT_YVYU: 214 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I; 215 break; 216 217 case V4L2_PIX_FMT_VYUY: 218 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I; 219 break; 220 221 default: 222 ALOGE("%s::unmatched V4L2_PIX color_space(%d)\n", 223 __func__, V4L2_PIX); 224 break; 225 } 226 227 return HAL_PIXEL_FORMAT; 228 } 229 230 #define ALIGN_TO_32B(x) ((((x) + (1 << 5) - 1) >> 5) << 5) 231 #define ALIGN_TO_128B(x) ((((x) + (1 << 7) - 1) >> 7) << 7) 232 #define ALIGN_TO_8KB(x) ((((x) + (1 << 13) - 1) >> 13) << 13) 233 234 #define GET_32BPP_FRAME_SIZE(w, h) (((w) * (h)) << 2) 235 #define GET_24BPP_FRAME_SIZE(w, h) (((w) * (h)) * 3) 236 #define GET_16BPP_FRAME_SIZE(w, h) (((w) * (h)) << 1) 237 238 inline unsigned int FRAME_SIZE(int HAL_PIXEL_FORMAT, int w, int h) 239 { 240 unsigned int frame_size = 0; 241 unsigned int size = 0; 242 243 switch (HAL_PIXEL_FORMAT) { 244 // 16bpp 245 case HAL_PIXEL_FORMAT_RGB_565: 246 case HAL_PIXEL_FORMAT_RGBA_5551: 247 //case HAL_PIXEL_FORMAT_ARGB_1555: 248 //case HAL_PIXEL_FORMAT_BGRA_5551: 249 //case HAL_PIXEL_FORMAT_ABGR_1555: 250 251 //case HAL_PIXEL_FORMAT_RGBX_5551: 252 //case HAL_PIXEL_FORMAT_XRGB_1555: 253 //case HAL_PIXEL_FORMAT_BGRX_5551: 254 //case HAL_PIXEL_FORMAT_XBGR_1555: 255 256 case HAL_PIXEL_FORMAT_RGBA_4444: 257 //case HAL_PIXEL_FORMAT_ARGB_4444: 258 //case HAL_PIXEL_FORMAT_BGRA_4444: 259 //case HAL_PIXEL_FORMAT_ABGR_4444: 260 261 //case HAL_PIXEL_FORMAT_RGBX_4444: 262 //case HAL_PIXEL_FORMAT_XRGB_4444: 263 //case HAL_PIXEL_FORMAT_BGRX_4444: 264 //case HAL_PIXEL_FORMAT_XBGR_4444: 265 frame_size = GET_16BPP_FRAME_SIZE(w, h); 266 break; 267 268 // 24bpp 269 case HAL_PIXEL_FORMAT_RGB_888: 270 frame_size = GET_24BPP_FRAME_SIZE(w, h); 271 break; 272 273 // 32bpp 274 case HAL_PIXEL_FORMAT_RGBA_8888: 275 //case HAL_PIXEL_FORMAT_ARGB_8888: 276 case HAL_PIXEL_FORMAT_BGRA_8888: 277 //case HAL_PIXEL_FORMAT_ABGR_8888: 278 279 case HAL_PIXEL_FORMAT_RGBX_8888: 280 //case HAL_PIXEL_FORMAT_XRGB_8888: 281 //case HAL_PIXEL_FORMAT_BGRX_8888: 282 //case HAL_PIXEL_FORMAT_XBGR_8888: 283 frame_size = GET_32BPP_FRAME_SIZE(w, h); 284 break; 285 286 // 12bpp 287 case HAL_PIXEL_FORMAT_YV12: 288 case HAL_PIXEL_FORMAT_YCrCb_420_SP: 289 case HAL_PIXEL_FORMAT_YCbCr_420_P: 290 case HAL_PIXEL_FORMAT_YCbCr_420_I: 291 case HAL_PIXEL_FORMAT_CbYCrY_420_I: 292 case HAL_PIXEL_FORMAT_YCbCr_420_SP: 293 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP: 294 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP: 295 size = w * h; 296 // frame_size = width * height * 3 / 2; 297 // sw5771.park : very curious... 298 // frame_size = size + ((size / 4) * 2); 299 frame_size = size + ((size >> 2) << 1); 300 break; 301 302 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED: 303 frame_size = ALIGN_TO_8KB(ALIGN_TO_128B(w) * ALIGN_TO_32B(h)) 304 + ALIGN_TO_8KB(ALIGN_TO_128B(w) * ALIGN_TO_32B(h >> 1)); 305 break; 306 307 // 16bpp 308 case HAL_PIXEL_FORMAT_YCbCr_422_SP: 309 case HAL_PIXEL_FORMAT_YCbCr_422_I: 310 case HAL_PIXEL_FORMAT_YCbCr_422_P: 311 case HAL_PIXEL_FORMAT_CbYCrY_422_I: 312 case HAL_PIXEL_FORMAT_YCrCb_422_SP: 313 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP: 314 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP: 315 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I: 316 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I: 317 case HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I: 318 case HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I: 319 frame_size = GET_16BPP_FRAME_SIZE(w, h); 320 break; 321 322 default: 323 ALOGD("%s::no matching source colorformat(0x%x), w(%d), h(%d) fail\n", 324 __func__, HAL_PIXEL_FORMAT, w, h); 325 break; 326 } 327 328 return frame_size; 329 } 330 331 #endif //__SAMSUNG_SYSLSI_SEC_COMMON_H__ 332