| /* |
| * Copyright (C) 2014-2017 Intel Corporation |
| * |
| * 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. |
| */ |
| #define LOG_TAG "GfxLinuxGeneric" |
| |
| #include "Camera3GFXFormat.h" |
| #include "PlatformData.h" |
| #include "LogHelper.h" |
| |
| namespace cros { |
| namespace intel { |
| |
| /* Native handle int indices, as offsets on top of numFds. |
| * Keep this in synch with gralloc_priv.h, which is in cameralibs! |
| */ |
| enum NativeHandleIntIndices { |
| NATIVE_HANDLE_MAGIC = 0, |
| NATIVE_HANDLE_FLAGS, |
| NATIVE_HANDLE_SIZE, |
| NATIVE_HANDLE_OFFSET, |
| NATIVE_HANDLE_WIDTH, |
| NATIVE_HANDLE_HEIGHT, |
| NATIVE_HANDLE_STRIDE, |
| NATIVE_HANDLE_HALFORMAT, |
| NATIVE_HANDLE_USAGE, |
| /* insert here when updating */ |
| NATIVE_HANDLE_INT_MAX |
| }; |
| |
| int v4L2Fmt2GFXFmt(int v4l2Fmt) |
| { |
| int gfxFmt = -1; |
| |
| switch (v4l2Fmt) { |
| case V4L2_PIX_FMT_JPEG: |
| gfxFmt = HAL_PIXEL_FORMAT_BLOB; |
| break; |
| case V4L2_PIX_FMT_SBGGR8: |
| case V4L2_PIX_FMT_SRGGB8: |
| case V4L2_PIX_FMT_SGRBG8: |
| case V4L2_PIX_FMT_SRGGB10: |
| case V4L2_PIX_FMT_SGRBG10: |
| case V4L2_PIX_FMT_SGRBG12: |
| case V4L2_PIX_FMT_SBGGR10: |
| #ifdef V4L2_PIX_FMT_SBGGR10P |
| case V4L2_PIX_FMT_SBGGR10P: |
| #endif |
| #ifdef V4L2_PIX_FMT_SGBRG10P |
| case V4L2_PIX_FMT_SGBRG10P: |
| #endif |
| #ifdef V4L2_PIX_FMT_SGRBG10P |
| case V4L2_PIX_FMT_SGRBG10P: |
| #endif |
| #ifdef V4L2_PIX_FMT_SRGGB10P |
| case V4L2_PIX_FMT_SRGGB10P: |
| #endif |
| case V4L2_PIX_FMT_SBGGR12: |
| case V4L2_PIX_FMT_SGBRG12: |
| case V4L2_PIX_FMT_SRGGB12: |
| #ifdef V4L2_PIX_FMT_SGRBG12V32 |
| case V4L2_PIX_FMT_SGRBG12V32: |
| #endif |
| #ifdef V4L2_PIX_FMT_CIO2_SRGGB10 |
| case V4L2_PIX_FMT_CIO2_SRGGB10: |
| #endif |
| gfxFmt = HAL_PIXEL_FORMAT_RAW16; |
| break; |
| case V4L2_PIX_FMT_YVU420: |
| #ifdef V4L2_PIX_FMT_YUYV420_V32 |
| case V4L2_PIX_FMT_YUYV420_V32: |
| #endif |
| gfxFmt = HAL_PIXEL_FORMAT_YV12; |
| break; |
| case V4L2_PIX_FMT_IPU3_SBGGR10: |
| case V4L2_PIX_FMT_IPU3_SGBRG10: |
| case V4L2_PIX_FMT_IPU3_SGRBG10: |
| case V4L2_PIX_FMT_IPU3_SRGGB10: |
| gfxFmt = HAL_PIXEL_FORMAT_RAW10; |
| break; |
| case V4L2_META_FMT_IPU3_PARAMS: |
| case V4L2_META_FMT_IPU3_STAT_3A: |
| case V4L2_META_FMT_IPU3_STAT_DVS: |
| case V4L2_META_FMT_IPU3_STAT_LACE: |
| gfxFmt = HAL_PIXEL_FORMAT_RAW_OPAQUE; |
| break; |
| case V4L2_PIX_FMT_NV21: |
| gfxFmt = HAL_PIXEL_FORMAT_YCrCb_420_SP; |
| break; |
| case V4L2_PIX_FMT_NV12: |
| gfxFmt = HAL_PIXEL_FORMAT_NV12_LINEAR_CAMERA_INTEL; |
| break; |
| case V4L2_PIX_FMT_YUYV: |
| gfxFmt = HAL_PIXEL_FORMAT_YCbCr_422_I; |
| break; |
| default: |
| LOGE("%s: no gfx format for v4l2 0x%x, %s!", |
| __FUNCTION__, v4l2Fmt, |
| v4l2Fmt2Str(v4l2Fmt)); |
| break; |
| } |
| |
| return gfxFmt; |
| } |
| |
| int widthToStride(int fourcc, int width) |
| { |
| /** |
| * Raw format has special aligning requirements |
| */ |
| int stride = 0; |
| if (isBayerFormat(fourcc)) |
| return ALIGN128(width); |
| switch (fourcc) { |
| case V4L2_PIX_FMT_NV12: |
| case V4L2_PIX_FMT_NV21: |
| case V4L2_PIX_FMT_YVU420: |
| stride = ALIGN64(width); |
| break; |
| case V4L2_PIX_FMT_YUYV: |
| stride = ALIGN32(width); |
| break; |
| default: |
| stride = ALIGN64(width); |
| break; |
| } |
| return stride; |
| } |
| |
| } /* namespace intel */ |
| } /* namespace cros */ |