1f5fbb83fSMauro Carvalho Chehab /* SPDX-License-Identifier: GPL-2.0 */
29d4fa1a1SMauro Carvalho Chehab /*
39d4fa1a1SMauro Carvalho Chehab  * Support for Intel Camera Imaging ISP subsystem.
49d4fa1a1SMauro Carvalho Chehab  * Copyright (c) 2015, Intel Corporation.
59d4fa1a1SMauro Carvalho Chehab  *
69d4fa1a1SMauro Carvalho Chehab  * This program is free software; you can redistribute it and/or modify it
79d4fa1a1SMauro Carvalho Chehab  * under the terms and conditions of the GNU General Public License,
89d4fa1a1SMauro Carvalho Chehab  * version 2, as published by the Free Software Foundation.
99d4fa1a1SMauro Carvalho Chehab  *
109d4fa1a1SMauro Carvalho Chehab  * This program is distributed in the hope it will be useful, but WITHOUT
119d4fa1a1SMauro Carvalho Chehab  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
129d4fa1a1SMauro Carvalho Chehab  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
139d4fa1a1SMauro Carvalho Chehab  * more details.
149d4fa1a1SMauro Carvalho Chehab  */
159d4fa1a1SMauro Carvalho Chehab 
169d4fa1a1SMauro Carvalho Chehab #ifndef __IA_CSS_FRAME_FORMAT_H
179d4fa1a1SMauro Carvalho Chehab #define __IA_CSS_FRAME_FORMAT_H
189d4fa1a1SMauro Carvalho Chehab 
199d4fa1a1SMauro Carvalho Chehab /* @file
209d4fa1a1SMauro Carvalho Chehab  * This file contains information about formats supported in the ISP
219d4fa1a1SMauro Carvalho Chehab  */
229d4fa1a1SMauro Carvalho Chehab 
239d4fa1a1SMauro Carvalho Chehab /* Frame formats, some of these come from fourcc.org, others are
249d4fa1a1SMauro Carvalho Chehab    better explained by video4linux2. The NV11 seems to be described only
259d4fa1a1SMauro Carvalho Chehab    on MSDN pages, but even those seem to be gone now.
269d4fa1a1SMauro Carvalho Chehab    Frames can come in many forms, the main categories are RAW, RGB and YUV
279d4fa1a1SMauro Carvalho Chehab    (or YCbCr). The YUV frames come in 4 flavors, determined by how the U and V
289d4fa1a1SMauro Carvalho Chehab    values are subsampled:
299d4fa1a1SMauro Carvalho Chehab    1. YUV420: hor = 2, ver = 2
309d4fa1a1SMauro Carvalho Chehab    2. YUV411: hor = 4, ver = 1
319d4fa1a1SMauro Carvalho Chehab    3. YUV422: hor = 2, ver = 1
329d4fa1a1SMauro Carvalho Chehab    4. YUV444: hor = 1, ver = 1
339d4fa1a1SMauro Carvalho Chehab 
349d4fa1a1SMauro Carvalho Chehab   Warning: not all frame formats are supported as input or output to/from ISP.
359d4fa1a1SMauro Carvalho Chehab     Some of these formats are therefore not defined in the output table module.
369d4fa1a1SMauro Carvalho Chehab     Modifications in below frame format enum can require modifications in the
379d4fa1a1SMauro Carvalho Chehab     output table module.
389d4fa1a1SMauro Carvalho Chehab 
399d4fa1a1SMauro Carvalho Chehab   Warning2: Throughout the CSS code assumptions are made on the order
409d4fa1a1SMauro Carvalho Chehab 	of formats in this enumeration type, or some sort of copy is maintained.
419d4fa1a1SMauro Carvalho Chehab 	The following files are identified:
429d4fa1a1SMauro Carvalho Chehab 	- FileSupport.h
439d4fa1a1SMauro Carvalho Chehab 	- css/isp/kernels/fc/fc_1.0/formats.isp.c
449d4fa1a1SMauro Carvalho Chehab 	- css/isp/kernels/output/output_1.0/output_table.isp.c
459d4fa1a1SMauro Carvalho Chehab 	- css/isp/kernels/output/sc_output_1.0/formats.hive.c
469d4fa1a1SMauro Carvalho Chehab 	- css/isp/modes/interface/isp_formats.isp.h
479d4fa1a1SMauro Carvalho Chehab 	- css/bxt_sandbox/psyspoc/interface/ia_css_pg_info.h
489d4fa1a1SMauro Carvalho Chehab 	- css/bxt_sandbox/psysapi/data/interface/ia_css_program_group_data.h
499d4fa1a1SMauro Carvalho Chehab 	- css/bxt_sandbox/isysapi/interface/ia_css_isysapi_fw_types.h
509d4fa1a1SMauro Carvalho Chehab */
519d4fa1a1SMauro Carvalho Chehab enum ia_css_frame_format {
529d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_NV11 = 0,   /** 12 bit YUV 411, Y, UV plane */
539d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_NV12,       /** 12 bit YUV 420, Y, UV plane */
549d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_NV12_16,    /** 16 bit YUV 420, Y, UV plane */
559d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_NV12_TILEY, /** 12 bit YUV 420, Intel proprietary tiled format, TileY */
569d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_NV16,       /** 16 bit YUV 422, Y, UV plane */
579d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_NV21,       /** 12 bit YUV 420, Y, VU plane */
589d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_NV61,       /** 16 bit YUV 422, Y, VU plane */
599d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_YV12,       /** 12 bit YUV 420, Y, V, U plane */
609d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_YV16,       /** 16 bit YUV 422, Y, V, U plane */
619d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_YUV420,     /** 12 bit YUV 420, Y, U, V plane */
629d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_YUV420_16,  /** yuv420, 16 bits per subpixel */
639d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_YUV422,     /** 16 bit YUV 422, Y, U, V plane */
649d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_YUV422_16,  /** yuv422, 16 bits per subpixel */
659d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_UYVY,       /** 16 bit YUV 422, UYVY interleaved */
669d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_YUYV,       /** 16 bit YUV 422, YUYV interleaved */
679d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_YUV444,     /** 24 bit YUV 444, Y, U, V plane */
689d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_YUV_LINE,   /** Internal format, 2 y lines followed
699d4fa1a1SMauro Carvalho Chehab 					     by a uvinterleaved line */
709d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_RAW,	/** RAW, 1 plane */
719d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_RGB565,     /** 16 bit RGB, 1 plane. Each 3 sub
729d4fa1a1SMauro Carvalho Chehab 					     pixels are packed into one 16 bit
739d4fa1a1SMauro Carvalho Chehab 					     value, 5 bits for R, 6 bits for G
749d4fa1a1SMauro Carvalho Chehab 					     and 5 bits for B. */
759d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_PLANAR_RGB888, /** 24 bit RGB, 3 planes */
769d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_RGBA888,	/** 32 bit RGBA, 1 plane, A=Alpha
779d4fa1a1SMauro Carvalho Chehab 					     (alpha is unused) */
789d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_QPLANE6, /** Internal, for advanced ISP */
799d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_BINARY_8,	/** byte stream, used for jpeg. For
809d4fa1a1SMauro Carvalho Chehab 					     frames of this type, we set the
819d4fa1a1SMauro Carvalho Chehab 					     height to 1 and the width to the
829d4fa1a1SMauro Carvalho Chehab 					     number of allocated bytes. */
839d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_MIPI,	/** MIPI frame, 1 plane */
849d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_RAW_PACKED, /** RAW, 1 plane, packed */
859d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_CSI_MIPI_YUV420_8,	      /** 8 bit per Y/U/V.
869d4fa1a1SMauro Carvalho Chehab 							   Y odd line; UYVY
879d4fa1a1SMauro Carvalho Chehab 							   interleaved even line */
889d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_CSI_MIPI_LEGACY_YUV420_8, /** Legacy YUV420. UY odd
899d4fa1a1SMauro Carvalho Chehab 							   line; VY even line */
909d4fa1a1SMauro Carvalho Chehab 	IA_CSS_FRAME_FORMAT_CSI_MIPI_YUV420_10       /** 10 bit per Y/U/V. Y odd
919d4fa1a1SMauro Carvalho Chehab 							   line; UYVY interleaved
929d4fa1a1SMauro Carvalho Chehab 							   even line */
939d4fa1a1SMauro Carvalho Chehab };
949d4fa1a1SMauro Carvalho Chehab 
959d4fa1a1SMauro Carvalho Chehab /* NOTE: IA_CSS_FRAME_FORMAT_NUM was purposely defined outside of enum type ia_css_frame_format, */
969d4fa1a1SMauro Carvalho Chehab /*       because of issues this would cause with the Clockwork code checking tool.               */
979d4fa1a1SMauro Carvalho Chehab #define IA_CSS_FRAME_FORMAT_NUM (IA_CSS_FRAME_FORMAT_CSI_MIPI_YUV420_10 + 1)
989d4fa1a1SMauro Carvalho Chehab 
999d4fa1a1SMauro Carvalho Chehab /* Number of valid output frame formats for ISP **/
1009d4fa1a1SMauro Carvalho Chehab #define IA_CSS_FRAME_OUT_FORMAT_NUM	(IA_CSS_FRAME_FORMAT_RGBA888 + 1)
1019d4fa1a1SMauro Carvalho Chehab 
1029d4fa1a1SMauro Carvalho Chehab #endif /* __IA_CSS_FRAME_FORMAT_H */
103