blob: 9c4c6618459960fadafa30a18918936f0fee871a [file] [log] [blame]
Sam Protsenkoce268502023-09-08 19:45:36 -05001/*
2 * Copyright@ Samsung Electronics Co. LTD
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15*/
16
17#ifndef _EXYNOS_FORMAT_H_
18#define _EXYNOS_FORMAT_H_
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
24enum {
25 /* HAL_PIXEL_FORMAT_YCbCr_422_P = 0x100, */
26 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_P_M = 0x101, /* HAL_PIXEL_FORMAT_YCbCr_420_P */
27 /* HAL_PIXEL_FORMAT_YCbCr_420_I = 0x102, */
28 HAL_PIXEL_FORMAT_EXYNOS_CbYCrY_422_I = 0x103, /* HAL_PIXEL_FORMAT_CbYCrY_422_I */
29 /* HAL_PIXEL_FORMAT_CbYCrY_420_I = 0x104, */
30 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M = 0x105, /* HAL_PIXEL_FORMAT_YCbCr_420_SP */
31 HAL_PIXEL_FORMAT_EXYNOS_YCrCb_422_SP = 0x106, /* HAL_PIXEL_FORMAT_YCrCb_422_SP */
32 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_TILED= 0x107, /* HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED */
33 HAL_PIXEL_FORMAT_EXYNOS_ARGB_8888 = 0x108, /* HAL_PIXEL_FORMAT_CUSTOM_ARGB_8888 */
34 // support custom format for zero copy
35 /* HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP = 0x110 */
36 /* HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP = 0x111, */
37 /* HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED = 0x112, */
38 /* HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP = 0x113, */
39 /* HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP = 0x114, */
40 /* HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I = 0x115, */
41 HAL_PIXEL_FORMAT_EXYNOS_YCrCb_422_I = 0x116, /* HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I */
42 /* HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I = 0x117, */
43 HAL_PIXEL_FORMAT_EXYNOS_CrYCbY_422_I = 0x118, /* HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I */
44 /* HAL_PIXEL_FORMAT_CUSTOM_CbYCr_422_I = 0x11B, */
45
46 HAL_PIXEL_FORMAT_EXYNOS_YV12_M = 0x11C, /* HAL_PIXEL_FORMAT_EXYNOS_YV12 */
47 HAL_PIXEL_FORMAT_EXYNOS_YCrCb_420_SP_M = 0x11D, /* HAL_PIXEL_FORMAT_EXYNOS_YCrCb_420_SP */
48 HAL_PIXEL_FORMAT_EXYNOS_YCrCb_420_SP_M_FULL = 0x11E, /* HAL_PIXEL_FORMAT_EXYNOS_YCrCb_420_SP_FULL */
49
50 /* newly added formats */
51 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_P = 0x11F,
52 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP = 0x120,
53
54 /* EXYNOS_YCbCr_420_SP_M w/ private data buffer */
55 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_PRIV = 0x121,
56
57 /* contiguous(single fd) custom formats */
58 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_PN = 0x122,
59 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN = 0x123,
60 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_TILED = 0x124,
61
62 /* 10-bit format (8bit + separated 2bit) w/ private data buffer */
63 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_S10B = 0x125,
64
65 /* 10-bit contiguous(single fd, 8bit + separated 2bit) custom formats */
66 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_S10B = 0x126,
67
68 /* 10-bit format (2 fd, 10bit, 2x byte) custom formats */
69 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_P010_M = 0x127,
70
71 /* YUV 4:2:2 planar, Y/Cb/Cr */
72 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_422_P = 0x128,
73
74 /* 8/10-bit contiguous(single fd) custom formats configured in SBWC formats */
75 HAL_PIXEL_FORMAT_EXYNOS_420_SPN_SBWC_DECOMP = 0x129, /* similar as HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN */
76 HAL_PIXEL_FORMAT_EXYNOS_P010_N_SBWC_DECOMP = 0x12A, /* similar as HAL_PIXEL_FORMAT_YCBCR_P010 */
77
78 /* SBWC format */
79 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_SBWC = 0x130,
80 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_SBWC = 0x131,
81
82 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_10B_SBWC = 0x132,
83 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_10B_SBWC = 0x133,
84
85 HAL_PIXEL_FORMAT_EXYNOS_YCrCb_420_SP_M_SBWC = 0x134,
86 HAL_PIXEL_FORMAT_EXYNOS_YCrCb_420_SP_M_10B_SBWC = 0x135,
87
88 /* SBWC 256B formats */
89 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_256_SBWC = 0x136,
90 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_10B_256_SBWC = 0x137,
91
92 /* SBWC Lossy formats */
93 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_SBWC_L50 = 0x140,
94 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_SBWC_L75 = 0x141,
95 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_SBWC_L50 = 0x150,
96 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_SBWC_L75 = 0x151,
97
98 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_10B_SBWC_L40 = 0x160,
99 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_10B_SBWC_L60 = 0x161,
100 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M_10B_SBWC_L80 = 0x162,
101 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_10B_SBWC_L40 = 0x170,
102 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_10B_SBWC_L60 = 0x171,
103 HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SPN_10B_SBWC_L80 = 0x172,
104
105 /* SBWC Lossy v2.7 formats 32/64 align*/
106 HAL_PIXEL_FORMAT_EXYNOS_420_SP_M_32_SBWC_L = 0x180,
107 HAL_PIXEL_FORMAT_EXYNOS_420_SP_M_64_SBWC_L = 0x181,
108 HAL_PIXEL_FORMAT_EXYNOS_420_SPN_32_SBWC_L = 0x182,
109 HAL_PIXEL_FORMAT_EXYNOS_420_SPN_64_SBWC_L = 0x183,
110 HAL_PIXEL_FORMAT_EXYNOS_420_SP_M_10B_32_SBWC_L = 0x184,
111 HAL_PIXEL_FORMAT_EXYNOS_420_SP_M_10B_64_SBWC_L = 0x185,
112 HAL_PIXEL_FORMAT_EXYNOS_420_SPN_10B_32_SBWC_L = 0x186,
113 HAL_PIXEL_FORMAT_EXYNOS_420_SPN_10B_64_SBWC_L = 0x187,
114
115 HAL_PIXEL_FORMAT_EXYNOS_MAX
116};
117
118/* for backward compatibility */
119#define HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP HAL_PIXEL_FORMAT_EXYNOS_YCbCr_420_SP_M
120#define HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP HAL_PIXEL_FORMAT_EXYNOS_YCrCb_420_SP_M
121
122// Gamut (colorspace range)
123enum {
124 HAL_PIXEL_GAMUT_DEFAULT = 0,
125 // Values range 0-255
126 HAL_PIXEL_GAMUT_WIDE_8,
127 // Values range 16-235
128 HAL_PIXEL_GAMUT_NARROW_8
129};
130
131// Chromaticities (colorspace parameters)
132enum {
133 HAL_PIXEL_CHROMA_DEFAULT = 0,
134 // BT.601 "Standard Definition" color space
135 HAL_PIXEL_CHROMA_BT601_8,
136 // BT.709 "High Definition" color space
137 HAL_PIXEL_CHROMA_BT709_8
138};
139
140struct ADDRS {
141 unsigned int addr_y;
142 unsigned int addr_cbcr;
143 unsigned int buf_idx;
144 unsigned int reserved;
145};
146
147/* 12 Y/CbCr 4:2:0 64x32 macroblocks */
148#define V4L2_PIX_FMT_NV12T v4l2_fourcc('T', 'V', '1', '2')
149
150#define ALIGN_UP(x, a) (((x) + (a) - 1) & ~((a) - 1))
151#define ALIGN_DOWN(x, a) ((x) - (x % a))
152#ifndef ALIGN
153#define ALIGN(x, a) ALIGN_UP(x, a)
154#endif
155#ifndef ALIGN_TO_32B
156#define ALIGN_TO_32B(x) ((((x) + (1 << 5) - 1) >> 5) << 5)
157#endif
158#ifndef ALIGN_TO_128B
159#define ALIGN_TO_128B(x) ((((x) + (1 << 7) - 1) >> 7) << 7)
160#endif
161#ifndef ALIGN_TO_8KB
162#define ALIGN_TO_8KB(x) ((((x) + (1 << 13) - 1) >> 13) << 13)
163#endif
164
165#define GET_32BPP_FRAME_SIZE(w, h) (((w) * (h)) << 2)
166#define GET_24BPP_FRAME_SIZE(w, h) (((w) * (h)) * 3)
167#define GET_16BPP_FRAME_SIZE(w, h) (((w) * (h)) << 1)
168
169/*
170 * Convert hal_pixel_format to v4l2_pixel_format.
171 *
172 * @param hal_pixel_format
173 * hal_pixel_format[in]
174 *
175 * @return
176 * v4l2_pixel_format
177 */
178int HAL_PIXEL_FORMAT_2_V4L2_PIX(
179 int hal_pixel_format);
180
181/*
182 * Convert v4l2_pixel_format to hal_pixel_format.
183 *
184 * @param v4l2_pixel_format
185 * v4l2_pixel_format[in]
186 *
187 * @return
188 * hal_pixel_format
189 */
190int V4L2_PIX_2_HAL_PIXEL_FORMAT(
191 int v4l2_pixel_format);
192
193/*
194 * Get frame_size of hal_pixel_format.
195 *
196 * @param hal_pixel_format
197 * hal_pixel_format[in]
198 *
199 * @param width
200 * width[in]
201 *
202 * @param height
203 * height[in]
204 *
205 * @return
206 * frame_size
207 */
208unsigned int FRAME_SIZE(
209 int hal_pixel_format,
210 int width,
211 int height);
212
213int PLANAR_FRAME_SIZE(
214 int hal_pixel_format,
215 int width,
216 int height,
217 unsigned int *luma_size,
218 unsigned int *chroma_size);
219
220int NUM_PLANES(int hal_pixel_format);
221
222
223/*
224 * Get bpp and plane of v4l2_pixel_format.
225 *
226 * @param v4l2_pixel_format
227 * v4l2_pixel_format[in]
228 *
229 * @param bpp
230 * address of bpp[out]
231 *
232 * @param planes
233 * address of planes[out]
234 *
235 * @return
236 * error code
237 */
238int V4L2_PIX_2_YUV_INFO(
239 unsigned int v4l2_pixel_format,
240 unsigned int *bpp,
241 unsigned int *planes);
242
243/*
244 * Get bpp of v4l2_pixel_format.
245 *
246 * @param v4l2_pixel_format
247 * v4l2_pixel_format[in]
248 *
249 * @return
250 * bpp
251 */
252int get_yuv_bpp(
253 unsigned int v4l2_pixel_format);
254
255/*
256 * Get plane of v4l2_pixel_format.
257 *
258 * @param v4l2_pixel_format
259 * v4l2_pixel_format[in]
260 *
261 * @return
262 * num of plane
263 */
264int get_yuv_planes(
265 unsigned int v4l2_pixel_format);
266
267#ifdef __cplusplus
268}
269#endif
270
271#endif