Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 /*
0003  * Media Bus API header
0004  *
0005  * Copyright (C) 2009, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
0006  *
0007  * This program is free software; you can redistribute it and/or modify
0008  * it under the terms of the GNU General Public License version 2 as
0009  * published by the Free Software Foundation.
0010  */
0011 
0012 #ifndef __LINUX_MEDIA_BUS_FORMAT_H
0013 #define __LINUX_MEDIA_BUS_FORMAT_H
0014 
0015 /*
0016  * These bus formats uniquely identify data formats on the data bus. Format 0
0017  * is reserved, MEDIA_BUS_FMT_FIXED shall be used by host-client pairs, where
0018  * the data format is fixed. Additionally, "2X8" means that one pixel is
0019  * transferred in two 8-bit samples, "BE" or "LE" specify in which order those
0020  * samples are transferred over the bus: "LE" means that the least significant
0021  * bits are transferred first, "BE" means that the most significant bits are
0022  * transferred first, and "PADHI" and "PADLO" define which bits - low or high,
0023  * in the incomplete high byte, are filled with padding bits.
0024  *
0025  * The bus formats are grouped by type, bus_width, bits per component, samples
0026  * per pixel and order of subsamples. Numerical values are sorted using generic
0027  * numerical sort order (8 thus comes before 10).
0028  *
0029  * As their value can't change when a new bus format is inserted in the
0030  * enumeration, the bus formats are explicitly given a numerical value. The next
0031  * free values for each category are listed below, update them when inserting
0032  * new pixel codes.
0033  */
0034 
0035 #define MEDIA_BUS_FMT_FIXED         0x0001
0036 
0037 /* RGB - next is    0x1022 */
0038 #define MEDIA_BUS_FMT_RGB444_1X12       0x1016
0039 #define MEDIA_BUS_FMT_RGB444_2X8_PADHI_BE   0x1001
0040 #define MEDIA_BUS_FMT_RGB444_2X8_PADHI_LE   0x1002
0041 #define MEDIA_BUS_FMT_RGB555_2X8_PADHI_BE   0x1003
0042 #define MEDIA_BUS_FMT_RGB555_2X8_PADHI_LE   0x1004
0043 #define MEDIA_BUS_FMT_RGB565_1X16       0x1017
0044 #define MEDIA_BUS_FMT_BGR565_2X8_BE     0x1005
0045 #define MEDIA_BUS_FMT_BGR565_2X8_LE     0x1006
0046 #define MEDIA_BUS_FMT_RGB565_2X8_BE     0x1007
0047 #define MEDIA_BUS_FMT_RGB565_2X8_LE     0x1008
0048 #define MEDIA_BUS_FMT_RGB666_1X18       0x1009
0049 #define MEDIA_BUS_FMT_RBG888_1X24       0x100e
0050 #define MEDIA_BUS_FMT_RGB666_1X24_CPADHI    0x1015
0051 #define MEDIA_BUS_FMT_RGB666_1X7X3_SPWG     0x1010
0052 #define MEDIA_BUS_FMT_BGR888_1X24       0x1013
0053 #define MEDIA_BUS_FMT_BGR888_3X8        0x101b
0054 #define MEDIA_BUS_FMT_GBR888_1X24       0x1014
0055 #define MEDIA_BUS_FMT_RGB888_1X24       0x100a
0056 #define MEDIA_BUS_FMT_RGB888_2X12_BE        0x100b
0057 #define MEDIA_BUS_FMT_RGB888_2X12_LE        0x100c
0058 #define MEDIA_BUS_FMT_RGB888_3X8        0x101c
0059 #define MEDIA_BUS_FMT_RGB888_3X8_DELTA      0x101d
0060 #define MEDIA_BUS_FMT_RGB888_1X7X4_SPWG     0x1011
0061 #define MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA    0x1012
0062 #define MEDIA_BUS_FMT_RGB666_1X30_CPADLO    0x101e
0063 #define MEDIA_BUS_FMT_RGB888_1X30_CPADLO    0x101f
0064 #define MEDIA_BUS_FMT_ARGB8888_1X32     0x100d
0065 #define MEDIA_BUS_FMT_RGB888_1X32_PADHI     0x100f
0066 #define MEDIA_BUS_FMT_RGB101010_1X30        0x1018
0067 #define MEDIA_BUS_FMT_RGB666_1X36_CPADLO    0x1020
0068 #define MEDIA_BUS_FMT_RGB888_1X36_CPADLO    0x1021
0069 #define MEDIA_BUS_FMT_RGB121212_1X36        0x1019
0070 #define MEDIA_BUS_FMT_RGB161616_1X48        0x101a
0071 
0072 /* YUV (including grey) - next is   0x202e */
0073 #define MEDIA_BUS_FMT_Y8_1X8            0x2001
0074 #define MEDIA_BUS_FMT_UV8_1X8           0x2015
0075 #define MEDIA_BUS_FMT_UYVY8_1_5X8       0x2002
0076 #define MEDIA_BUS_FMT_VYUY8_1_5X8       0x2003
0077 #define MEDIA_BUS_FMT_YUYV8_1_5X8       0x2004
0078 #define MEDIA_BUS_FMT_YVYU8_1_5X8       0x2005
0079 #define MEDIA_BUS_FMT_UYVY8_2X8         0x2006
0080 #define MEDIA_BUS_FMT_VYUY8_2X8         0x2007
0081 #define MEDIA_BUS_FMT_YUYV8_2X8         0x2008
0082 #define MEDIA_BUS_FMT_YVYU8_2X8         0x2009
0083 #define MEDIA_BUS_FMT_Y10_1X10          0x200a
0084 #define MEDIA_BUS_FMT_Y10_2X8_PADHI_LE      0x202c
0085 #define MEDIA_BUS_FMT_UYVY10_2X10       0x2018
0086 #define MEDIA_BUS_FMT_VYUY10_2X10       0x2019
0087 #define MEDIA_BUS_FMT_YUYV10_2X10       0x200b
0088 #define MEDIA_BUS_FMT_YVYU10_2X10       0x200c
0089 #define MEDIA_BUS_FMT_Y12_1X12          0x2013
0090 #define MEDIA_BUS_FMT_UYVY12_2X12       0x201c
0091 #define MEDIA_BUS_FMT_VYUY12_2X12       0x201d
0092 #define MEDIA_BUS_FMT_YUYV12_2X12       0x201e
0093 #define MEDIA_BUS_FMT_YVYU12_2X12       0x201f
0094 #define MEDIA_BUS_FMT_Y14_1X14          0x202d
0095 #define MEDIA_BUS_FMT_UYVY8_1X16        0x200f
0096 #define MEDIA_BUS_FMT_VYUY8_1X16        0x2010
0097 #define MEDIA_BUS_FMT_YUYV8_1X16        0x2011
0098 #define MEDIA_BUS_FMT_YVYU8_1X16        0x2012
0099 #define MEDIA_BUS_FMT_YDYUYDYV8_1X16        0x2014
0100 #define MEDIA_BUS_FMT_UYVY10_1X20       0x201a
0101 #define MEDIA_BUS_FMT_VYUY10_1X20       0x201b
0102 #define MEDIA_BUS_FMT_YUYV10_1X20       0x200d
0103 #define MEDIA_BUS_FMT_YVYU10_1X20       0x200e
0104 #define MEDIA_BUS_FMT_VUY8_1X24         0x2024
0105 #define MEDIA_BUS_FMT_YUV8_1X24         0x2025
0106 #define MEDIA_BUS_FMT_UYYVYY8_0_5X24        0x2026
0107 #define MEDIA_BUS_FMT_UYVY12_1X24       0x2020
0108 #define MEDIA_BUS_FMT_VYUY12_1X24       0x2021
0109 #define MEDIA_BUS_FMT_YUYV12_1X24       0x2022
0110 #define MEDIA_BUS_FMT_YVYU12_1X24       0x2023
0111 #define MEDIA_BUS_FMT_YUV10_1X30        0x2016
0112 #define MEDIA_BUS_FMT_UYYVYY10_0_5X30       0x2027
0113 #define MEDIA_BUS_FMT_AYUV8_1X32        0x2017
0114 #define MEDIA_BUS_FMT_UYYVYY12_0_5X36       0x2028
0115 #define MEDIA_BUS_FMT_YUV12_1X36        0x2029
0116 #define MEDIA_BUS_FMT_YUV16_1X48        0x202a
0117 #define MEDIA_BUS_FMT_UYYVYY16_0_5X48       0x202b
0118 
0119 /* Bayer - next is  0x3021 */
0120 #define MEDIA_BUS_FMT_SBGGR8_1X8        0x3001
0121 #define MEDIA_BUS_FMT_SGBRG8_1X8        0x3013
0122 #define MEDIA_BUS_FMT_SGRBG8_1X8        0x3002
0123 #define MEDIA_BUS_FMT_SRGGB8_1X8        0x3014
0124 #define MEDIA_BUS_FMT_SBGGR10_ALAW8_1X8     0x3015
0125 #define MEDIA_BUS_FMT_SGBRG10_ALAW8_1X8     0x3016
0126 #define MEDIA_BUS_FMT_SGRBG10_ALAW8_1X8     0x3017
0127 #define MEDIA_BUS_FMT_SRGGB10_ALAW8_1X8     0x3018
0128 #define MEDIA_BUS_FMT_SBGGR10_DPCM8_1X8     0x300b
0129 #define MEDIA_BUS_FMT_SGBRG10_DPCM8_1X8     0x300c
0130 #define MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8     0x3009
0131 #define MEDIA_BUS_FMT_SRGGB10_DPCM8_1X8     0x300d
0132 #define MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_BE  0x3003
0133 #define MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_LE  0x3004
0134 #define MEDIA_BUS_FMT_SBGGR10_2X8_PADLO_BE  0x3005
0135 #define MEDIA_BUS_FMT_SBGGR10_2X8_PADLO_LE  0x3006
0136 #define MEDIA_BUS_FMT_SBGGR10_1X10      0x3007
0137 #define MEDIA_BUS_FMT_SGBRG10_1X10      0x300e
0138 #define MEDIA_BUS_FMT_SGRBG10_1X10      0x300a
0139 #define MEDIA_BUS_FMT_SRGGB10_1X10      0x300f
0140 #define MEDIA_BUS_FMT_SBGGR12_1X12      0x3008
0141 #define MEDIA_BUS_FMT_SGBRG12_1X12      0x3010
0142 #define MEDIA_BUS_FMT_SGRBG12_1X12      0x3011
0143 #define MEDIA_BUS_FMT_SRGGB12_1X12      0x3012
0144 #define MEDIA_BUS_FMT_SBGGR14_1X14      0x3019
0145 #define MEDIA_BUS_FMT_SGBRG14_1X14      0x301a
0146 #define MEDIA_BUS_FMT_SGRBG14_1X14      0x301b
0147 #define MEDIA_BUS_FMT_SRGGB14_1X14      0x301c
0148 #define MEDIA_BUS_FMT_SBGGR16_1X16      0x301d
0149 #define MEDIA_BUS_FMT_SGBRG16_1X16      0x301e
0150 #define MEDIA_BUS_FMT_SGRBG16_1X16      0x301f
0151 #define MEDIA_BUS_FMT_SRGGB16_1X16      0x3020
0152 
0153 /* JPEG compressed formats - next is    0x4002 */
0154 #define MEDIA_BUS_FMT_JPEG_1X8          0x4001
0155 
0156 /* Vendor specific formats - next is    0x5002 */
0157 
0158 /* S5C73M3 sensor specific interleaved UYVY and JPEG */
0159 #define MEDIA_BUS_FMT_S5C_UYVY_JPEG_1X8     0x5001
0160 
0161 /* HSV - next is    0x6002 */
0162 #define MEDIA_BUS_FMT_AHSV8888_1X32     0x6001
0163 
0164 /*
0165  * This format should be used when the same driver handles
0166  * both sides of the link and the bus format is a fixed
0167  * metadata format that is not configurable from userspace.
0168  * Width and height will be set to 0 for this format.
0169  */
0170 #define MEDIA_BUS_FMT_METADATA_FIXED        0x7001
0171 
0172 #endif /* __LINUX_MEDIA_BUS_FORMAT_H */