]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blame - drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_frame_format.h
Merge remote-tracking branch 'asoc/topic/pcm512x' into asoc-next
[mirror_ubuntu-focal-kernel.git] / drivers / staging / media / atomisp / pci / atomisp2 / css2400 / ia_css_frame_format.h
CommitLineData
a49d2536
AC
1/*
2 * Support for Intel Camera Imaging ISP subsystem.
3 * Copyright (c) 2015, Intel Corporation.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms and conditions of the GNU General Public License,
7 * version 2, as published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 */
14
15#ifndef __IA_CSS_FRAME_FORMAT_H
16#define __IA_CSS_FRAME_FORMAT_H
17
d929fb4e 18/* @file
a49d2536
AC
19 * This file contains information about formats supported in the ISP
20 */
21
d929fb4e 22/* Frame formats, some of these come from fourcc.org, others are
a49d2536
AC
23 better explained by video4linux2. The NV11 seems to be described only
24 on MSDN pages, but even those seem to be gone now.
25 Frames can come in many forms, the main categories are RAW, RGB and YUV
26 (or YCbCr). The YUV frames come in 4 flavors, determined by how the U and V
27 values are subsampled:
28 1. YUV420: hor = 2, ver = 2
29 2. YUV411: hor = 4, ver = 1
30 3. YUV422: hor = 2, ver = 1
31 4. YUV444: hor = 1, ver = 1
32
33 Warning: not all frame formats are supported as input or output to/from ISP.
34 Some of these formats are therefore not defined in the output table module.
35 Modifications in below frame format enum can require modifications in the
36 output table module.
37
38 Warning2: Throughout the CSS code assumptions are made on the order
39 of formats in this enumeration type, or some sort of copy is maintained.
40 The following files are identified:
41 - FileSupport.h
42 - css/isp/kernels/fc/fc_1.0/formats.isp.c
43 - css/isp/kernels/output/output_1.0/output_table.isp.c
44 - css/isp/kernels/output/sc_output_1.0/formats.hive.c
45 - css/isp/modes/interface/isp_formats.isp.h
46 - css/bxt_sandbox/psyspoc/interface/ia_css_pg_info.h
47 - css/bxt_sandbox/psysapi/data/interface/ia_css_program_group_data.h
48 - css/bxt_sandbox/isysapi/interface/ia_css_isysapi_fw_types.h
49*/
50enum ia_css_frame_format {
d929fb4e
MCC
51 IA_CSS_FRAME_FORMAT_NV11 = 0, /** 12 bit YUV 411, Y, UV plane */
52 IA_CSS_FRAME_FORMAT_NV12, /** 12 bit YUV 420, Y, UV plane */
53 IA_CSS_FRAME_FORMAT_NV12_16, /** 16 bit YUV 420, Y, UV plane */
54 IA_CSS_FRAME_FORMAT_NV12_TILEY, /** 12 bit YUV 420, Intel proprietary tiled format, TileY */
55 IA_CSS_FRAME_FORMAT_NV16, /** 16 bit YUV 422, Y, UV plane */
56 IA_CSS_FRAME_FORMAT_NV21, /** 12 bit YUV 420, Y, VU plane */
57 IA_CSS_FRAME_FORMAT_NV61, /** 16 bit YUV 422, Y, VU plane */
58 IA_CSS_FRAME_FORMAT_YV12, /** 12 bit YUV 420, Y, V, U plane */
59 IA_CSS_FRAME_FORMAT_YV16, /** 16 bit YUV 422, Y, V, U plane */
60 IA_CSS_FRAME_FORMAT_YUV420, /** 12 bit YUV 420, Y, U, V plane */
61 IA_CSS_FRAME_FORMAT_YUV420_16, /** yuv420, 16 bits per subpixel */
62 IA_CSS_FRAME_FORMAT_YUV422, /** 16 bit YUV 422, Y, U, V plane */
63 IA_CSS_FRAME_FORMAT_YUV422_16, /** yuv422, 16 bits per subpixel */
64 IA_CSS_FRAME_FORMAT_UYVY, /** 16 bit YUV 422, UYVY interleaved */
65 IA_CSS_FRAME_FORMAT_YUYV, /** 16 bit YUV 422, YUYV interleaved */
66 IA_CSS_FRAME_FORMAT_YUV444, /** 24 bit YUV 444, Y, U, V plane */
67 IA_CSS_FRAME_FORMAT_YUV_LINE, /** Internal format, 2 y lines followed
a49d2536 68 by a uvinterleaved line */
d929fb4e
MCC
69 IA_CSS_FRAME_FORMAT_RAW, /** RAW, 1 plane */
70 IA_CSS_FRAME_FORMAT_RGB565, /** 16 bit RGB, 1 plane. Each 3 sub
a49d2536
AC
71 pixels are packed into one 16 bit
72 value, 5 bits for R, 6 bits for G
73 and 5 bits for B. */
d929fb4e
MCC
74 IA_CSS_FRAME_FORMAT_PLANAR_RGB888, /** 24 bit RGB, 3 planes */
75 IA_CSS_FRAME_FORMAT_RGBA888, /** 32 bit RGBA, 1 plane, A=Alpha
a49d2536 76 (alpha is unused) */
d929fb4e
MCC
77 IA_CSS_FRAME_FORMAT_QPLANE6, /** Internal, for advanced ISP */
78 IA_CSS_FRAME_FORMAT_BINARY_8, /** byte stream, used for jpeg. For
a49d2536
AC
79 frames of this type, we set the
80 height to 1 and the width to the
81 number of allocated bytes. */
d929fb4e
MCC
82 IA_CSS_FRAME_FORMAT_MIPI, /** MIPI frame, 1 plane */
83 IA_CSS_FRAME_FORMAT_RAW_PACKED, /** RAW, 1 plane, packed */
84 IA_CSS_FRAME_FORMAT_CSI_MIPI_YUV420_8, /** 8 bit per Y/U/V.
a49d2536
AC
85 Y odd line; UYVY
86 interleaved even line */
d929fb4e 87 IA_CSS_FRAME_FORMAT_CSI_MIPI_LEGACY_YUV420_8, /** Legacy YUV420. UY odd
a49d2536 88 line; VY even line */
d929fb4e 89 IA_CSS_FRAME_FORMAT_CSI_MIPI_YUV420_10 /** 10 bit per Y/U/V. Y odd
a49d2536
AC
90 line; UYVY interleaved
91 even line */
92};
93
94/* NOTE: IA_CSS_FRAME_FORMAT_NUM was purposely defined outside of enum type ia_css_frame_format, */
95/* because of issues this would cause with the Clockwork code checking tool. */
96#define IA_CSS_FRAME_FORMAT_NUM (IA_CSS_FRAME_FORMAT_CSI_MIPI_YUV420_10 + 1)
97
d929fb4e 98/* Number of valid output frame formats for ISP **/
a49d2536
AC
99#define IA_CSS_FRAME_OUT_FORMAT_NUM (IA_CSS_FRAME_FORMAT_RGBA888 + 1)
100
101#endif /* __IA_CSS_FRAME_FORMAT_H */