oleavr-rgl-a500-mini-linux-.../drivers/media/platform/sunxi-vin/utility/bsp_common.c
Ole André Vadla Ravnås 169c65d57e Initial commit
2022-05-07 01:01:45 +02:00

218 lines
6 KiB
C

/*
* linux-3.10/drivers/media/platform/sunxi-vin/utility/bsp_common.c
*
* Copyright (c) 2007-2017 Allwinnertech Co., Ltd.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
/*
******************************************************************************
*
* bsp_common.c
*
* Hawkview ISP - bsp_common.c module
*
* Copyright (c) 2015 by Allwinnertech Co., Ltd. http://www.allwinnertech.com
*
* Version Author Date Description
*
* 3.0 Yang Feng 2015/12/02 ISP Tuning Tools Support
*
******************************************************************************
*/
#include "bsp_common.h"
enum bus_pixeltype find_bus_type(enum v4l2_mbus_pixelcode code)
{
switch (code) {
case V4L2_MBUS_FMT_BGR565_2X8_BE:
case V4L2_MBUS_FMT_BGR565_2X8_LE:
case V4L2_MBUS_FMT_RGB565_2X8_BE:
case V4L2_MBUS_FMT_RGB565_2X8_LE:
return BUS_FMT_RGB565;
case V4L2_MBUS_FMT_UYVY8_2X8:
case V4L2_MBUS_FMT_UYVY8_1X16:
return BUS_FMT_UYVY;
case V4L2_MBUS_FMT_VYUY8_2X8:
case V4L2_MBUS_FMT_VYUY8_1X16:
return BUS_FMT_VYUY;
case V4L2_MBUS_FMT_YUYV8_2X8:
case V4L2_MBUS_FMT_YUYV10_2X10:
case V4L2_MBUS_FMT_YUYV8_1X16:
case V4L2_MBUS_FMT_YUYV10_1X20:
return BUS_FMT_YUYV;
case V4L2_MBUS_FMT_YVYU8_2X8:
case V4L2_MBUS_FMT_YVYU10_2X10:
case V4L2_MBUS_FMT_YVYU8_1X16:
case V4L2_MBUS_FMT_YVYU10_1X20:
return BUS_FMT_YVYU;
case V4L2_MBUS_FMT_SBGGR8_1X8:
case V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8:
case V4L2_MBUS_FMT_SBGGR10_1X10:
case V4L2_MBUS_FMT_SBGGR12_1X12:
return BUS_FMT_SBGGR;
case V4L2_MBUS_FMT_SGBRG8_1X8:
case V4L2_MBUS_FMT_SGBRG10_DPCM8_1X8:
case V4L2_MBUS_FMT_SGBRG10_1X10:
case V4L2_MBUS_FMT_SGBRG12_1X12:
return BUS_FMT_SGBRG;
case V4L2_MBUS_FMT_SGRBG8_1X8:
case V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8:
case V4L2_MBUS_FMT_SGRBG10_1X10:
case V4L2_MBUS_FMT_SGRBG12_1X12:
return BUS_FMT_SGRBG;
case V4L2_MBUS_FMT_SRGGB8_1X8:
case V4L2_MBUS_FMT_SRGGB10_DPCM8_1X8:
case V4L2_MBUS_FMT_SRGGB10_1X10:
case V4L2_MBUS_FMT_SRGGB12_1X12:
return BUS_FMT_SRGGB;
default:
return BUS_FMT_UYVY;
}
}
enum bit_width find_bus_width(enum v4l2_mbus_pixelcode code)
{
switch (code) {
case V4L2_MBUS_FMT_BGR565_2X8_BE:
case V4L2_MBUS_FMT_BGR565_2X8_LE:
case V4L2_MBUS_FMT_RGB565_2X8_BE:
case V4L2_MBUS_FMT_RGB565_2X8_LE:
case V4L2_MBUS_FMT_UYVY8_2X8:
case V4L2_MBUS_FMT_VYUY8_2X8:
case V4L2_MBUS_FMT_YUYV8_2X8:
case V4L2_MBUS_FMT_YVYU8_2X8:
case V4L2_MBUS_FMT_SBGGR8_1X8:
case V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8:
case V4L2_MBUS_FMT_SGBRG8_1X8:
case V4L2_MBUS_FMT_SGBRG10_DPCM8_1X8:
case V4L2_MBUS_FMT_SGRBG8_1X8:
case V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8:
case V4L2_MBUS_FMT_SRGGB8_1X8:
case V4L2_MBUS_FMT_SRGGB10_DPCM8_1X8:
return W_8BIT;
case V4L2_MBUS_FMT_YUYV10_2X10:
case V4L2_MBUS_FMT_YVYU10_2X10:
case V4L2_MBUS_FMT_SBGGR10_1X10:
case V4L2_MBUS_FMT_SGBRG10_1X10:
case V4L2_MBUS_FMT_SGRBG10_1X10:
case V4L2_MBUS_FMT_SRGGB10_1X10:
return W_10BIT;
case V4L2_MBUS_FMT_SBGGR12_1X12:
case V4L2_MBUS_FMT_SGBRG12_1X12:
case V4L2_MBUS_FMT_SGRBG12_1X12:
case V4L2_MBUS_FMT_SRGGB12_1X12:
return W_12BIT;
case V4L2_MBUS_FMT_UYVY8_1X16:
case V4L2_MBUS_FMT_VYUY8_1X16:
case V4L2_MBUS_FMT_YUYV8_1X16:
case V4L2_MBUS_FMT_YVYU8_1X16:
return W_16BIT;
case V4L2_MBUS_FMT_YVYU10_1X20:
case V4L2_MBUS_FMT_YUYV10_1X20:
return W_20BIT;
default:
return W_8BIT;
}
}
enum bit_width find_bus_precision(enum v4l2_mbus_pixelcode code)
{
switch (code) {
case V4L2_MBUS_FMT_BGR565_2X8_BE:
case V4L2_MBUS_FMT_BGR565_2X8_LE:
case V4L2_MBUS_FMT_RGB565_2X8_BE:
case V4L2_MBUS_FMT_RGB565_2X8_LE:
case V4L2_MBUS_FMT_SBGGR8_1X8:
case V4L2_MBUS_FMT_SGBRG8_1X8:
case V4L2_MBUS_FMT_SGRBG8_1X8:
case V4L2_MBUS_FMT_SRGGB8_1X8:
case V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8:
case V4L2_MBUS_FMT_SGBRG10_DPCM8_1X8:
case V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8:
case V4L2_MBUS_FMT_SRGGB10_DPCM8_1X8:
case V4L2_MBUS_FMT_UYVY8_2X8:
case V4L2_MBUS_FMT_VYUY8_2X8:
case V4L2_MBUS_FMT_YUYV8_2X8:
case V4L2_MBUS_FMT_YVYU8_2X8:
case V4L2_MBUS_FMT_UYVY8_1X16:
case V4L2_MBUS_FMT_VYUY8_1X16:
case V4L2_MBUS_FMT_YUYV8_1X16:
case V4L2_MBUS_FMT_YVYU8_1X16:
return W_8BIT;
case V4L2_MBUS_FMT_SBGGR10_1X10:
case V4L2_MBUS_FMT_SGBRG10_1X10:
case V4L2_MBUS_FMT_SGRBG10_1X10:
case V4L2_MBUS_FMT_SRGGB10_1X10:
case V4L2_MBUS_FMT_YUYV10_2X10:
case V4L2_MBUS_FMT_YVYU10_2X10:
case V4L2_MBUS_FMT_YVYU10_1X20:
case V4L2_MBUS_FMT_YUYV10_1X20:
return W_10BIT;
case V4L2_MBUS_FMT_SBGGR12_1X12:
case V4L2_MBUS_FMT_SGBRG12_1X12:
case V4L2_MBUS_FMT_SGRBG12_1X12:
case V4L2_MBUS_FMT_SRGGB12_1X12:
return W_12BIT;
default:
return W_8BIT;
}
}
enum pixel_fmt_type find_pixel_fmt_type(unsigned int pix_fmt)
{
switch (pix_fmt) {
case V4L2_PIX_FMT_RGB565:
return RGB565;
case V4L2_PIX_FMT_RGB24:
return RGB888;
case V4L2_PIX_FMT_RGB32:
return PRGB888;
case V4L2_PIX_FMT_YUYV:
case V4L2_PIX_FMT_YVYU:
case V4L2_PIX_FMT_UYVY:
case V4L2_PIX_FMT_VYUY:
return YUV422_INTLVD;
case V4L2_PIX_FMT_YUV422P:
return YUV422_PL;
case V4L2_PIX_FMT_YUV420:
case V4L2_PIX_FMT_YVU420:
case V4L2_PIX_FMT_YUV420M:
case V4L2_PIX_FMT_YVU420M:
return YUV420_PL;
case V4L2_PIX_FMT_NV12:
case V4L2_PIX_FMT_NV21:
case V4L2_PIX_FMT_NV12M:
case V4L2_PIX_FMT_NV21M:
return YUV420_SPL;
case V4L2_PIX_FMT_NV16:
case V4L2_PIX_FMT_NV61:
return YUV422_SPL;
case V4L2_PIX_FMT_SBGGR8:
case V4L2_PIX_FMT_SGBRG8:
case V4L2_PIX_FMT_SGRBG8:
case V4L2_PIX_FMT_SRGGB8:
case V4L2_PIX_FMT_SBGGR10:
case V4L2_PIX_FMT_SGBRG10:
case V4L2_PIX_FMT_SGRBG10:
case V4L2_PIX_FMT_SRGGB10:
case V4L2_PIX_FMT_SBGGR12:
case V4L2_PIX_FMT_SGBRG12:
case V4L2_PIX_FMT_SGRBG12:
case V4L2_PIX_FMT_SRGGB12:
return BAYER_RGB;
default:
return BAYER_RGB;
}
}