342 lines
8.3 KiB
C
342 lines
8.3 KiB
C
|
/*
|
||
|
* linux-4.9/drivers/media/platform/sunxi-vfe/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.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* sunxi video front end common function
|
||
|
* Author:raymonxiu
|
||
|
*/
|
||
|
|
||
|
#include "bsp_common.h"
|
||
|
|
||
|
enum bus_pixeltype find_bus_type(enum bus_pixelcode code)
|
||
|
{
|
||
|
switch (code) {
|
||
|
case BUS_FMT_BGR565_2X8_BE:
|
||
|
case BUS_FMT_BGR565_2X8_LE:
|
||
|
case BUS_FMT_RGB565_2X8_BE:
|
||
|
case BUS_FMT_RGB565_2X8_LE:
|
||
|
case BUS_FMT_RGB565_16X1:
|
||
|
return BUS_FMT_RGB565;
|
||
|
case BUS_FMT_UYVY8_2X8:
|
||
|
case BUS_FMT_UYVY8_1X16:
|
||
|
case BUS_FMT_UYVY8_16X1:
|
||
|
case BUS_FMT_UYVY10_20X1:
|
||
|
return BUS_FMT_UYVY;
|
||
|
case BUS_FMT_VYUY8_2X8:
|
||
|
case BUS_FMT_VYUY8_1X16:
|
||
|
return BUS_FMT_VYUY;
|
||
|
case BUS_FMT_YUYV8_2X8:
|
||
|
case BUS_FMT_YUYV10_2X10:
|
||
|
case BUS_FMT_YUYV8_1X16:
|
||
|
case BUS_FMT_YUYV10_1X20:
|
||
|
return BUS_FMT_YUYV;
|
||
|
case BUS_FMT_YVYU8_2X8:
|
||
|
case BUS_FMT_YVYU10_2X10:
|
||
|
case BUS_FMT_YVYU8_1X16:
|
||
|
case BUS_FMT_YVYU10_1X20:
|
||
|
return BUS_FMT_YVYU;
|
||
|
case BUS_FMT_SBGGR8_1X8:
|
||
|
case BUS_FMT_SBGGR10_DPCM8_1X8:
|
||
|
case BUS_FMT_SBGGR10_1X10:
|
||
|
case BUS_FMT_SBGGR12_1X12:
|
||
|
case BUS_FMT_SBGGR8_8X1:
|
||
|
case BUS_FMT_SBGGR10_10X1:
|
||
|
case BUS_FMT_SBGGR12_12X1:
|
||
|
return BUS_FMT_SBGGR;
|
||
|
case BUS_FMT_SGBRG8_1X8:
|
||
|
case BUS_FMT_SGBRG10_DPCM8_1X8:
|
||
|
case BUS_FMT_SGBRG10_1X10:
|
||
|
case BUS_FMT_SGBRG12_1X12:
|
||
|
case BUS_FMT_SGBRG8_8X1:
|
||
|
case BUS_FMT_SGBRG10_10X1:
|
||
|
case BUS_FMT_SGBRG12_12X1:
|
||
|
return BUS_FMT_SGBRG;
|
||
|
case BUS_FMT_SGRBG8_1X8:
|
||
|
case BUS_FMT_SGRBG10_DPCM8_1X8:
|
||
|
case BUS_FMT_SGRBG10_1X10:
|
||
|
case BUS_FMT_SGRBG12_1X12:
|
||
|
case BUS_FMT_SGRBG8_8X1:
|
||
|
case BUS_FMT_SGRBG10_10X1:
|
||
|
case BUS_FMT_SGRBG12_12X1:
|
||
|
return BUS_FMT_SGRBG;
|
||
|
case BUS_FMT_SRGGB8_1X8:
|
||
|
case BUS_FMT_SRGGB10_DPCM8_1X8:
|
||
|
case BUS_FMT_SRGGB10_1X10:
|
||
|
case BUS_FMT_SRGGB12_1X12:
|
||
|
case BUS_FMT_SRGGB8_8X1:
|
||
|
case BUS_FMT_SRGGB10_10X1:
|
||
|
case BUS_FMT_SRGGB12_12X1:
|
||
|
return BUS_FMT_SRGGB;
|
||
|
case BUS_FMT_YUV8_1X24:
|
||
|
return BUS_FMT_Y_U_V;
|
||
|
case BUS_FMT_YY8_UYVY8_12X1:
|
||
|
case BUS_FMT_YY10_UYVY10_15X1:
|
||
|
return BUS_FMT_YY_UYVY;
|
||
|
default:
|
||
|
return BUS_FMT_UYVY;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
enum bit_width find_bus_width(enum bus_pixelcode code)
|
||
|
{
|
||
|
switch (code) {
|
||
|
case BUS_FMT_RGB565_16X1:
|
||
|
case BUS_FMT_UYVY8_16X1:
|
||
|
case BUS_FMT_UYVY10_20X1:
|
||
|
case BUS_FMT_SBGGR8_8X1:
|
||
|
case BUS_FMT_SBGGR10_10X1:
|
||
|
case BUS_FMT_SBGGR12_12X1:
|
||
|
case BUS_FMT_SGBRG8_8X1:
|
||
|
case BUS_FMT_SGBRG10_10X1:
|
||
|
case BUS_FMT_SGBRG12_12X1:
|
||
|
case BUS_FMT_SGRBG8_8X1:
|
||
|
case BUS_FMT_SGRBG10_10X1:
|
||
|
case BUS_FMT_SGRBG12_12X1:
|
||
|
case BUS_FMT_SRGGB8_8X1:
|
||
|
case BUS_FMT_SRGGB10_10X1:
|
||
|
case BUS_FMT_SRGGB12_12X1:
|
||
|
case BUS_FMT_YY8_UYVY8_12X1:
|
||
|
case BUS_FMT_YY10_UYVY10_15X1:
|
||
|
return W_1BIT;
|
||
|
case BUS_FMT_BGR565_2X8_BE:
|
||
|
case BUS_FMT_BGR565_2X8_LE:
|
||
|
case BUS_FMT_RGB565_2X8_BE:
|
||
|
case BUS_FMT_RGB565_2X8_LE:
|
||
|
case BUS_FMT_UYVY8_2X8:
|
||
|
case BUS_FMT_VYUY8_2X8:
|
||
|
case BUS_FMT_YUYV8_2X8:
|
||
|
case BUS_FMT_YVYU8_2X8:
|
||
|
case BUS_FMT_SBGGR8_1X8:
|
||
|
case BUS_FMT_SBGGR10_DPCM8_1X8:
|
||
|
case BUS_FMT_SGBRG8_1X8:
|
||
|
case BUS_FMT_SGBRG10_DPCM8_1X8:
|
||
|
case BUS_FMT_SGRBG8_1X8:
|
||
|
case BUS_FMT_SGRBG10_DPCM8_1X8:
|
||
|
case BUS_FMT_SRGGB8_1X8:
|
||
|
case BUS_FMT_SRGGB10_DPCM8_1X8:
|
||
|
return W_8BIT;
|
||
|
case BUS_FMT_YUYV10_2X10:
|
||
|
case BUS_FMT_YVYU10_2X10:
|
||
|
case BUS_FMT_SBGGR10_1X10:
|
||
|
case BUS_FMT_SGBRG10_1X10:
|
||
|
case BUS_FMT_SGRBG10_1X10:
|
||
|
case BUS_FMT_SRGGB10_1X10:
|
||
|
return W_10BIT;
|
||
|
case BUS_FMT_SBGGR12_1X12:
|
||
|
case BUS_FMT_SGBRG12_1X12:
|
||
|
case BUS_FMT_SGRBG12_1X12:
|
||
|
case BUS_FMT_SRGGB12_1X12:
|
||
|
return W_12BIT;
|
||
|
case BUS_FMT_UYVY8_1X16:
|
||
|
case BUS_FMT_VYUY8_1X16:
|
||
|
case BUS_FMT_YUYV8_1X16:
|
||
|
case BUS_FMT_YVYU8_1X16:
|
||
|
return W_16BIT;
|
||
|
case BUS_FMT_YVYU10_1X20:
|
||
|
case BUS_FMT_YUYV10_1X20:
|
||
|
return W_20BIT;
|
||
|
case BUS_FMT_YUV8_1X24:
|
||
|
return W_24BIT;
|
||
|
default:
|
||
|
return W_8BIT;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
enum bit_width find_bus_precision(enum bus_pixelcode code)
|
||
|
{
|
||
|
switch (code) {
|
||
|
case BUS_FMT_RGB565_16X1:
|
||
|
case BUS_FMT_BGR565_2X8_BE:
|
||
|
case BUS_FMT_BGR565_2X8_LE:
|
||
|
case BUS_FMT_RGB565_2X8_BE:
|
||
|
case BUS_FMT_RGB565_2X8_LE:
|
||
|
case BUS_FMT_SBGGR8_8X1:
|
||
|
case BUS_FMT_SGBRG8_8X1:
|
||
|
case BUS_FMT_SGRBG8_8X1:
|
||
|
case BUS_FMT_SRGGB8_8X1:
|
||
|
case BUS_FMT_SBGGR8_1X8:
|
||
|
case BUS_FMT_SGBRG8_1X8:
|
||
|
case BUS_FMT_SGRBG8_1X8:
|
||
|
case BUS_FMT_SRGGB8_1X8:
|
||
|
case BUS_FMT_SBGGR10_DPCM8_1X8:
|
||
|
case BUS_FMT_SGBRG10_DPCM8_1X8:
|
||
|
case BUS_FMT_SGRBG10_DPCM8_1X8:
|
||
|
case BUS_FMT_SRGGB10_DPCM8_1X8:
|
||
|
case BUS_FMT_UYVY8_16X1:
|
||
|
case BUS_FMT_UYVY8_2X8:
|
||
|
case BUS_FMT_VYUY8_2X8:
|
||
|
case BUS_FMT_YUYV8_2X8:
|
||
|
case BUS_FMT_YVYU8_2X8:
|
||
|
case BUS_FMT_UYVY8_1X16:
|
||
|
case BUS_FMT_VYUY8_1X16:
|
||
|
case BUS_FMT_YUYV8_1X16:
|
||
|
case BUS_FMT_YVYU8_1X16:
|
||
|
case BUS_FMT_YUV8_1X24:
|
||
|
case BUS_FMT_YY8_UYVY8_12X1:
|
||
|
return W_8BIT;
|
||
|
case BUS_FMT_SBGGR10_10X1:
|
||
|
case BUS_FMT_SGBRG10_10X1:
|
||
|
case BUS_FMT_SGRBG10_10X1:
|
||
|
case BUS_FMT_SRGGB10_10X1:
|
||
|
case BUS_FMT_SBGGR10_1X10:
|
||
|
case BUS_FMT_SGBRG10_1X10:
|
||
|
case BUS_FMT_SGRBG10_1X10:
|
||
|
case BUS_FMT_SRGGB10_1X10:
|
||
|
case BUS_FMT_YUYV10_2X10:
|
||
|
case BUS_FMT_YVYU10_2X10:
|
||
|
case BUS_FMT_YVYU10_1X20:
|
||
|
case BUS_FMT_YUYV10_1X20:
|
||
|
case BUS_FMT_UYVY10_20X1:
|
||
|
case BUS_FMT_YY10_UYVY10_15X1:
|
||
|
return W_10BIT;
|
||
|
case BUS_FMT_SBGGR12_12X1:
|
||
|
case BUS_FMT_SGBRG12_12X1:
|
||
|
case BUS_FMT_SGRBG12_12X1:
|
||
|
case BUS_FMT_SRGGB12_12X1:
|
||
|
case BUS_FMT_SBGGR12_1X12:
|
||
|
case BUS_FMT_SGBRG12_1X12:
|
||
|
case BUS_FMT_SGRBG12_1X12:
|
||
|
case BUS_FMT_SRGGB12_1X12:
|
||
|
return W_12BIT;
|
||
|
default:
|
||
|
return W_8BIT;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
enum pixel_fmt_type find_pixel_fmt_type(enum pixel_fmt code)
|
||
|
{
|
||
|
switch (code) {
|
||
|
case PIX_FMT_RGB565:
|
||
|
return RGB565;
|
||
|
case PIX_FMT_RGB888:
|
||
|
return RGB888;
|
||
|
case PIX_FMT_PRGB888:
|
||
|
return PRGB888;
|
||
|
case PIX_FMT_YUYV:
|
||
|
case PIX_FMT_YVYU:
|
||
|
case PIX_FMT_UYVY:
|
||
|
case PIX_FMT_VYUY:
|
||
|
return YUV422_INTLVD;
|
||
|
case PIX_FMT_YUV422P_8:
|
||
|
case PIX_FMT_YVU422P_8:
|
||
|
return YUV422_PL;
|
||
|
case PIX_FMT_YUV420P_8:
|
||
|
case PIX_FMT_YVU420P_8:
|
||
|
return YUV420_PL;
|
||
|
case PIX_FMT_YUV420SP_8:
|
||
|
case PIX_FMT_YVU420SP_8:
|
||
|
case PIX_FMT_YUV420SP_10:
|
||
|
case PIX_FMT_YVU420SP_10:
|
||
|
return YUV420_SPL;
|
||
|
case PIX_FMT_YUV422SP_8:
|
||
|
case PIX_FMT_YVU422SP_8:
|
||
|
case PIX_FMT_YUV422SP_10:
|
||
|
case PIX_FMT_YVU422SP_10:
|
||
|
return YUV422_SPL;
|
||
|
case PIX_FMT_YUV420MB_8:
|
||
|
case PIX_FMT_YVU420MB_8:
|
||
|
return YUV420_MB;
|
||
|
case PIX_FMT_YUV422MB_8:
|
||
|
case PIX_FMT_YVU422MB_8:
|
||
|
return YUV422_MB;
|
||
|
case PIX_FMT_SBGGR_8:
|
||
|
case PIX_FMT_SGBRG_8:
|
||
|
case PIX_FMT_SGRBG_8:
|
||
|
case PIX_FMT_SRGGB_8:
|
||
|
case PIX_FMT_SBGGR_10:
|
||
|
case PIX_FMT_SGBRG_10:
|
||
|
case PIX_FMT_SGRBG_10:
|
||
|
case PIX_FMT_SRGGB_10:
|
||
|
case PIX_FMT_SBGGR_12:
|
||
|
case PIX_FMT_SGBRG_12:
|
||
|
case PIX_FMT_SGRBG_12:
|
||
|
case PIX_FMT_SRGGB_12:
|
||
|
return BAYER_RGB;
|
||
|
default:
|
||
|
return BAYER_RGB;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
enum pixel_fmt pix_fmt_v4l2_to_common(unsigned int pix_fmt)
|
||
|
{
|
||
|
switch (pix_fmt) {
|
||
|
case V4L2_PIX_FMT_RGB565:
|
||
|
return PIX_FMT_RGB565;
|
||
|
case V4L2_PIX_FMT_RGB24:
|
||
|
return PIX_FMT_RGB888;
|
||
|
case V4L2_PIX_FMT_RGB32:
|
||
|
return PIX_FMT_PRGB888;
|
||
|
case V4L2_PIX_FMT_YUYV:
|
||
|
return PIX_FMT_YUYV;
|
||
|
case V4L2_PIX_FMT_YVYU:
|
||
|
return PIX_FMT_YVYU;
|
||
|
case V4L2_PIX_FMT_UYVY:
|
||
|
return PIX_FMT_UYVY;
|
||
|
case V4L2_PIX_FMT_VYUY:
|
||
|
return PIX_FMT_VYUY;
|
||
|
case V4L2_PIX_FMT_YUV422P:
|
||
|
return PIX_FMT_YUV422P_8;
|
||
|
case V4L2_PIX_FMT_YUV420:
|
||
|
return PIX_FMT_YUV420P_8;
|
||
|
case V4L2_PIX_FMT_YVU420:
|
||
|
return PIX_FMT_YVU420P_8;
|
||
|
case V4L2_PIX_FMT_NV12:
|
||
|
return PIX_FMT_YUV420SP_8;
|
||
|
case V4L2_PIX_FMT_NV21:
|
||
|
return PIX_FMT_YVU420SP_8;
|
||
|
case V4L2_PIX_FMT_NV16:
|
||
|
return PIX_FMT_YUV422SP_8;
|
||
|
case V4L2_PIX_FMT_NV61:
|
||
|
return PIX_FMT_YVU422SP_8;
|
||
|
case V4L2_PIX_FMT_SBGGR8:
|
||
|
return PIX_FMT_SBGGR_8;
|
||
|
case V4L2_PIX_FMT_SGBRG8:
|
||
|
return PIX_FMT_SGBRG_8;
|
||
|
case V4L2_PIX_FMT_SGRBG8:
|
||
|
return PIX_FMT_SGRBG_8;
|
||
|
case V4L2_PIX_FMT_SRGGB8:
|
||
|
return PIX_FMT_SRGGB_8;
|
||
|
case V4L2_PIX_FMT_SBGGR10:
|
||
|
return PIX_FMT_SBGGR_10;
|
||
|
case V4L2_PIX_FMT_SGBRG10:
|
||
|
return PIX_FMT_SGBRG_10;
|
||
|
case V4L2_PIX_FMT_SGRBG10:
|
||
|
return PIX_FMT_SGRBG_10;
|
||
|
case V4L2_PIX_FMT_SRGGB10:
|
||
|
return PIX_FMT_SRGGB_10;
|
||
|
case V4L2_PIX_FMT_SBGGR12:
|
||
|
return PIX_FMT_SBGGR_12;
|
||
|
case V4L2_PIX_FMT_SGBRG12:
|
||
|
return PIX_FMT_SGBRG_12;
|
||
|
case V4L2_PIX_FMT_SGRBG12:
|
||
|
return PIX_FMT_SGRBG_12;
|
||
|
case V4L2_PIX_FMT_SRGGB12:
|
||
|
return PIX_FMT_SRGGB_12;
|
||
|
#ifdef CONFIG_ARCH_SUN3IW1P1
|
||
|
case V4L2_PIX_FMT_HM12:
|
||
|
return PIX_FMT_YUV420MB_8;
|
||
|
#endif
|
||
|
default:
|
||
|
return PIX_FMT_SBGGR_8;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
enum field field_fmt_v4l2_to_common(enum v4l2_field field)
|
||
|
{
|
||
|
return (enum field)field;
|
||
|
}
|
||
|
|