blob: 52bd59e7ab6619a10d6934fc23412160683c94b1 [file] [log] [blame]
/*
* 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 */