SmartAudio/lichee/linux-4.9/drivers/media/platform/sunxi-vfe/bsp_common.h

218 lines
5.6 KiB
C

/*
* linux-4.9/drivers/media/platform/sunxi-vfe/bsp_common.h
*
* 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 header
* included by vfe and csi/mipi/isp bsp
* Author:raymonxiu
*/
#ifndef __BSP_COMMON__H__
#define __BSP_COMMON__H__
#include <linux/videodev2.h>
/* #include <media/v4l2-mediabus.h> */
enum field {
FIELD_ANY = 0, /* driver can choose from none, top, bottom, interlaced depending on whatever it thinks is approximate */
FIELD_NONE = 1, /* this device has no fields ... */
FIELD_TOP = 2, /* top field only */
FIELD_BOTTOM = 3, /* bottom field only */
FIELD_INTERLACED = 4, /* both fields interlaced */
FIELD_SEQ_TB = 5, /* both fields sequential into one buffer, top-bottom order */
FIELD_SEQ_BT = 6, /* same as above + bottom-top order */
FIELD_ALTERNATE = 7, /* both fields alternating into separate buffers */
FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field first and the top field transmitted first */
FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field first and the bottom field is transmitted first */
};
enum bus_pixelcode {
BUS_FMT_FIXED = 0x0001,
/* RGB - next is 0x1009 */
BUS_FMT_RGB444_2X8_PADHI_BE = 0x1001,
BUS_FMT_RGB444_2X8_PADHI_LE = 0x1002,
BUS_FMT_RGB555_2X8_PADHI_BE = 0x1003,
BUS_FMT_RGB555_2X8_PADHI_LE = 0x1004,
BUS_FMT_BGR565_2X8_BE = 0x1005,
BUS_FMT_BGR565_2X8_LE = 0x1006,
BUS_FMT_RGB565_2X8_BE = 0x1007,
BUS_FMT_RGB565_2X8_LE = 0x1008,
BUS_FMT_RGB565_16X1 = 0x1009,
BUS_FMT_RGB888_24X1 = 0x100a,
/* YUV (including grey) - next is 0x2014 */
BUS_FMT_Y8_1X8 = 0x2001,
BUS_FMT_UYVY8_1_5X8 = 0x2002,
BUS_FMT_VYUY8_1_5X8 = 0x2003,
BUS_FMT_YUYV8_1_5X8 = 0x2004,
BUS_FMT_YVYU8_1_5X8 = 0x2005,
BUS_FMT_UYVY8_2X8 = 0x2006,
BUS_FMT_VYUY8_2X8 = 0x2007,
BUS_FMT_YUYV8_2X8 = 0x2008,
BUS_FMT_YVYU8_2X8 = 0x2009,
BUS_FMT_Y10_1X10 = 0x200a,
BUS_FMT_YUYV10_2X10 = 0x200b,
BUS_FMT_YVYU10_2X10 = 0x200c,
BUS_FMT_Y12_1X12 = 0x2013,
BUS_FMT_UYVY8_1X16 = 0x200f,
BUS_FMT_VYUY8_1X16 = 0x2010,
BUS_FMT_YUYV8_1X16 = 0x2011,
BUS_FMT_YVYU8_1X16 = 0x2012,
BUS_FMT_YUYV10_1X20 = 0x200d,
BUS_FMT_YVYU10_1X20 = 0x200e,
BUS_FMT_YUV8_1X24 = 0x2014,
BUS_FMT_UYVY8_16X1 = 0x2015,
BUS_FMT_UYVY10_20X1 = 0x2016,
BUS_FMT_YY8_UYVY8_12X1 = 0x2018,
BUS_FMT_YY10_UYVY10_15X1 = 0x2019,
/* Bayer - next is 0x3015 */
BUS_FMT_SBGGR8_1X8 = 0x3001,
BUS_FMT_SGBRG8_1X8 = 0x3013,
BUS_FMT_SGRBG8_1X8 = 0x3002,
BUS_FMT_SRGGB8_1X8 = 0x3014,
BUS_FMT_SBGGR10_DPCM8_1X8 = 0x300b,
BUS_FMT_SGBRG10_DPCM8_1X8 = 0x300c,
BUS_FMT_SGRBG10_DPCM8_1X8 = 0x3009,
BUS_FMT_SRGGB10_DPCM8_1X8 = 0x300d,
BUS_FMT_SBGGR10_2X8_PADHI_BE = 0x3003,
BUS_FMT_SBGGR10_2X8_PADHI_LE = 0x3004,
BUS_FMT_SBGGR10_2X8_PADLO_BE = 0x3005,
BUS_FMT_SBGGR10_2X8_PADLO_LE = 0x3006,
BUS_FMT_SBGGR10_1X10 = 0x3007,
BUS_FMT_SGBRG10_1X10 = 0x300e,
BUS_FMT_SGRBG10_1X10 = 0x300a,
BUS_FMT_SRGGB10_1X10 = 0x300f,
BUS_FMT_SBGGR12_1X12 = 0x3008,
BUS_FMT_SGBRG12_1X12 = 0x3010,
BUS_FMT_SGRBG12_1X12 = 0x3011,
BUS_FMT_SRGGB12_1X12 = 0x3012,
BUS_FMT_SBGGR8_8X1 = 0x3015,
BUS_FMT_SGBRG8_8X1 = 0x3016,
BUS_FMT_SGRBG8_8X1 = 0x3017,
BUS_FMT_SRGGB8_8X1 = 0x3018,
BUS_FMT_SBGGR10_10X1 = 0x3019,
BUS_FMT_SGBRG10_10X1 = 0x301a,
BUS_FMT_SGRBG10_10X1 = 0x301b,
BUS_FMT_SRGGB10_10X1 = 0x301c,
BUS_FMT_SBGGR12_12X1 = 0x301d,
BUS_FMT_SGBRG12_12X1 = 0x301e,
BUS_FMT_SGRBG12_12X1 = 0x301f,
BUS_FMT_SRGGB12_12X1 = 0x3020,
/* JPEG compressed formats - next is 0x4002 */
BUS_FMT_JPEG_1X8 = 0x4001,
};
enum bus_pixeltype {
BUS_FMT_RGB565,
BUS_FMT_RGB888,
BUS_FMT_Y_U_V,
BUS_FMT_YY_YUYV,
BUS_FMT_YY_YVYU,
BUS_FMT_YY_UYVY,
BUS_FMT_YY_VYUY,
BUS_FMT_YUYV,
BUS_FMT_YVYU,
BUS_FMT_UYVY,
BUS_FMT_VYUY,
BUS_FMT_SBGGR,
BUS_FMT_SGBRG,
BUS_FMT_SGRBG,
BUS_FMT_SRGGB,
};
enum pixel_fmt {
PIX_FMT_RGB565 = 0x0000,
PIX_FMT_RGB888,
PIX_FMT_PRGB888,
PIX_FMT_YUYV = 0x1000,
PIX_FMT_YVYU,
PIX_FMT_UYVY,
PIX_FMT_VYUY,
PIX_FMT_YUV422P_8 = 0x2000,
PIX_FMT_YVU422P_8,
PIX_FMT_YUV420P_8,
PIX_FMT_YVU420P_8,
PIX_FMT_YUV420SP_8 = 0x3000,
PIX_FMT_YVU420SP_8,
PIX_FMT_YUV422SP_8,
PIX_FMT_YVU422SP_8,
PIX_FMT_YUV420SP_10,
PIX_FMT_YVU420SP_10,
PIX_FMT_YUV422SP_10,
PIX_FMT_YVU422SP_10,
PIX_FMT_YUV420MB_8 = 0x4000,
PIX_FMT_YVU420MB_8,
PIX_FMT_YUV422MB_8,
PIX_FMT_YVU422MB_8,
PIX_FMT_SBGGR_8 = 0x5000,
PIX_FMT_SGBRG_8,
PIX_FMT_SGRBG_8,
PIX_FMT_SRGGB_8,
PIX_FMT_SBGGR_10,
PIX_FMT_SGBRG_10,
PIX_FMT_SGRBG_10,
PIX_FMT_SRGGB_10,
PIX_FMT_SBGGR_12,
PIX_FMT_SGBRG_12,
PIX_FMT_SGRBG_12,
PIX_FMT_SRGGB_12,
PIX_FMT_NONE = 0xffff,
};
enum pixel_fmt_type {
RGB565,
RGB888,
PRGB888,
YUV422_INTLVD,
YUV422_PL,
YUV422_SPL,
YUV422_MB,
YUV420_PL,
YUV420_SPL,
YUV420_MB,
BAYER_RGB,
};
enum bit_width {
W_1BIT,
W_2BIT,
W_4BIT,
W_6BIT,
W_8BIT,
W_10BIT,
W_12BIT,
W_14BIT,
W_16BIT,
W_20BIT,
W_24BIT,
W_32BIT,
};
extern enum bus_pixeltype find_bus_type(enum bus_pixelcode code);
extern enum bit_width find_bus_width(enum bus_pixelcode code);
extern enum bit_width find_bus_precision(enum bus_pixelcode code);
extern enum pixel_fmt_type find_pixel_fmt_type(enum pixel_fmt code);
extern enum pixel_fmt pix_fmt_v4l2_to_common(unsigned int pix_fmt);
extern enum field field_fmt_v4l2_to_common(enum v4l2_field field);
#endif /* __BSP_COMMON__H__ */