]> Git Repo - linux.git/blob - drivers/media/platform/raspberrypi/pisp_be/pisp_be_formats.h
Linux 6.14-rc3
[linux.git] / drivers / media / platform / raspberrypi / pisp_be / pisp_be_formats.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * PiSP Back End driver image format definitions.
4  *
5  * Copyright (c) 2021-2024 Raspberry Pi Ltd
6  */
7
8 #ifndef _PISP_BE_FORMATS_
9 #define _PISP_BE_FORMATS_
10
11 #include <linux/bits.h>
12 #include <linux/videodev2.h>
13
14 #define PISPBE_MAX_PLANES       3
15 #define P3(x)                   ((x) * 8)
16
17 struct pisp_be_format {
18         unsigned int fourcc;
19         unsigned int align;
20         unsigned int bit_depth;
21         /* 0P3 factor for plane sizing */
22         unsigned int plane_factor[PISPBE_MAX_PLANES];
23         unsigned int num_planes;
24         unsigned int colorspace_mask;
25         enum v4l2_colorspace colorspace_default;
26 };
27
28 #define V4L2_COLORSPACE_MASK(colorspace) BIT(colorspace)
29
30 #define V4L2_COLORSPACE_MASK_JPEG       \
31         V4L2_COLORSPACE_MASK(V4L2_COLORSPACE_JPEG)
32 #define V4L2_COLORSPACE_MASK_SMPTE170M  \
33         V4L2_COLORSPACE_MASK(V4L2_COLORSPACE_SMPTE170M)
34 #define V4L2_COLORSPACE_MASK_REC709     \
35         V4L2_COLORSPACE_MASK(V4L2_COLORSPACE_REC709)
36 #define V4L2_COLORSPACE_MASK_SRGB       \
37         V4L2_COLORSPACE_MASK(V4L2_COLORSPACE_SRGB)
38 #define V4L2_COLORSPACE_MASK_RAW        \
39         V4L2_COLORSPACE_MASK(V4L2_COLORSPACE_RAW)
40
41 /*
42  * All three colour spaces SRGB, SMPTE170M and REC709 are fundamentally sRGB
43  * underneath (as near as makes no difference to us), just with different YCbCr
44  * encodings. Therefore the ISP can generate sRGB on its main output and any of
45  * the others on its low resolution output. Applications should, when using both
46  * outputs, program the colour spaces on them to be the same, matching whatever
47  * is requested for the low resolution output, even if the main output is
48  * producing an RGB format. In turn this requires us to allow all these colour
49  * spaces for every YUV/RGB output format.
50  */
51 #define V4L2_COLORSPACE_MASK_ALL_SRGB (V4L2_COLORSPACE_MASK_JPEG        | \
52                                        V4L2_COLORSPACE_MASK_SRGB        | \
53                                        V4L2_COLORSPACE_MASK_SMPTE170M   | \
54                                        V4L2_COLORSPACE_MASK_REC709)
55
56 static const struct pisp_be_format supported_formats[] = {
57         /* Single plane YUV formats */
58         {
59                 .fourcc             = V4L2_PIX_FMT_YUV420,
60                 /* 128 alignment to ensure U/V planes are 64 byte aligned. */
61                 .align              = 128,
62                 .bit_depth          = 8,
63                 .plane_factor       = { P3(1), P3(0.25), P3(0.25) },
64                 .num_planes         = 1,
65                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
66                 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
67         },
68         {
69                 .fourcc             = V4L2_PIX_FMT_YVU420,
70                 /* 128 alignment to ensure U/V planes are 64 byte aligned. */
71                 .align              = 128,
72                 .bit_depth          = 8,
73                 .plane_factor       = { P3(1), P3(0.25), P3(0.25) },
74                 .num_planes         = 1,
75                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
76                 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
77         },
78         {
79                 .fourcc             = V4L2_PIX_FMT_NV12,
80                 .align              = 32,
81                 .bit_depth          = 8,
82                 .plane_factor       = { P3(1), P3(0.5) },
83                 .num_planes         = 1,
84                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
85                 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
86         },
87         {
88                 .fourcc             = V4L2_PIX_FMT_NV21,
89                 .align              = 32,
90                 .bit_depth          = 8,
91                 .plane_factor       = { P3(1), P3(0.5) },
92                 .num_planes         = 1,
93                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
94                 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
95         },
96         {
97                 .fourcc             = V4L2_PIX_FMT_YUYV,
98                 .align              = 64,
99                 .bit_depth          = 16,
100                 .plane_factor       = { P3(1) },
101                 .num_planes         = 1,
102                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
103                 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
104         },
105         {
106                 .fourcc             = V4L2_PIX_FMT_UYVY,
107                 .align              = 64,
108                 .bit_depth          = 16,
109                 .plane_factor       = { P3(1) },
110                 .num_planes         = 1,
111                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
112                 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
113         },
114         {
115                 .fourcc             = V4L2_PIX_FMT_YVYU,
116                 .align              = 64,
117                 .bit_depth          = 16,
118                 .plane_factor       = { P3(1) },
119                 .num_planes         = 1,
120                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
121                 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
122         },
123         {
124                 .fourcc             = V4L2_PIX_FMT_VYUY,
125                 .align              = 64,
126                 .bit_depth          = 16,
127                 .plane_factor       = { P3(1) },
128                 .num_planes         = 1,
129                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
130                 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
131         },
132         /* Multiplane YUV formats */
133         {
134                 .fourcc             = V4L2_PIX_FMT_YUV420M,
135                 .align              = 64,
136                 .bit_depth          = 8,
137                 .plane_factor       = { P3(1), P3(0.25), P3(0.25) },
138                 .num_planes         = 3,
139                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
140                 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
141         },
142         {
143                 .fourcc             = V4L2_PIX_FMT_NV12M,
144                 .align              = 32,
145                 .bit_depth          = 8,
146                 .plane_factor       = { P3(1), P3(0.5) },
147                 .num_planes         = 2,
148                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
149                 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
150         },
151         {
152                 .fourcc             = V4L2_PIX_FMT_NV21M,
153                 .align              = 32,
154                 .bit_depth          = 8,
155                 .plane_factor       = { P3(1), P3(0.5) },
156                 .num_planes         = 2,
157                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
158                 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
159         },
160         {
161                 .fourcc             = V4L2_PIX_FMT_YVU420M,
162                 .align              = 64,
163                 .bit_depth          = 8,
164                 .plane_factor       = { P3(1), P3(0.25), P3(0.25) },
165                 .num_planes         = 3,
166                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
167                 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
168         },
169         {
170                 .fourcc             = V4L2_PIX_FMT_YUV422M,
171                 .align              = 64,
172                 .bit_depth          = 8,
173                 .plane_factor       = { P3(1), P3(0.5), P3(0.5) },
174                 .num_planes         = 3,
175                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
176                 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
177         },
178         {
179                 .fourcc             = V4L2_PIX_FMT_YVU422M,
180                 .align              = 64,
181                 .bit_depth          = 8,
182                 .plane_factor       = { P3(1), P3(0.5), P3(0.5) },
183                 .num_planes         = 3,
184                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
185                 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
186         },
187         {
188                 .fourcc             = V4L2_PIX_FMT_YUV444M,
189                 .align              = 64,
190                 .bit_depth          = 8,
191                 .plane_factor       = { P3(1), P3(1), P3(1) },
192                 .num_planes         = 3,
193                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
194                 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
195         },
196         {
197                 .fourcc             = V4L2_PIX_FMT_YVU444M,
198                 .align              = 64,
199                 .bit_depth          = 8,
200                 .plane_factor       = { P3(1), P3(1), P3(1) },
201                 .num_planes         = 3,
202                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
203                 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
204         },
205         /* RGB formats */
206         {
207                 .fourcc             = V4L2_PIX_FMT_RGB24,
208                 .align              = 32,
209                 .bit_depth          = 24,
210                 .plane_factor       = { P3(1.0) },
211                 .num_planes         = 1,
212                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
213                 .colorspace_default = V4L2_COLORSPACE_SRGB,
214         },
215         {
216                 .fourcc             = V4L2_PIX_FMT_BGR24,
217                 .align              = 32,
218                 .bit_depth          = 24,
219                 .plane_factor       = { P3(1.0) },
220                 .num_planes         = 1,
221                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
222                 .colorspace_default = V4L2_COLORSPACE_SRGB,
223         },
224         {
225                 .fourcc             = V4L2_PIX_FMT_XBGR32,
226                 .align              = 64,
227                 .bit_depth          = 32,
228                 .plane_factor       = { P3(1.0) },
229                 .num_planes         = 1,
230                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
231                 .colorspace_default = V4L2_COLORSPACE_SRGB,
232         },
233         {
234                 .fourcc             = V4L2_PIX_FMT_RGBX32,
235                 .align              = 64,
236                 .bit_depth          = 32,
237                 .plane_factor       = { P3(1.0) },
238                 .num_planes         = 1,
239                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
240                 .colorspace_default = V4L2_COLORSPACE_SRGB,
241         },
242         {
243                 .fourcc             = V4L2_PIX_FMT_RGB48,
244                 .align              = 64,
245                 .bit_depth          = 48,
246                 .plane_factor       = { P3(1.0) },
247                 .num_planes         = 1,
248                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
249                 .colorspace_default = V4L2_COLORSPACE_SRGB,
250         },
251         {
252                 .fourcc             = V4L2_PIX_FMT_BGR48,
253                 .align              = 64,
254                 .bit_depth          = 48,
255                 .plane_factor       = { P3(1.0) },
256                 .num_planes         = 1,
257                 .colorspace_mask    = V4L2_COLORSPACE_MASK_ALL_SRGB,
258                 .colorspace_default = V4L2_COLORSPACE_SRGB,
259         },
260         /* Bayer formats - 8-bit */
261         {
262                 .fourcc             = V4L2_PIX_FMT_SRGGB8,
263                 .bit_depth          = 8,
264                 .align              = 32,
265                 .plane_factor       = { P3(1.0) },
266                 .num_planes         = 1,
267                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
268                 .colorspace_default = V4L2_COLORSPACE_RAW,
269         },
270         {
271                 .fourcc             = V4L2_PIX_FMT_SBGGR8,
272                 .bit_depth          = 8,
273                 .align              = 32,
274                 .plane_factor       = { P3(1.0) },
275                 .num_planes         = 1,
276                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
277                 .colorspace_default = V4L2_COLORSPACE_RAW,
278         },
279         {
280                 .fourcc             = V4L2_PIX_FMT_SGRBG8,
281                 .bit_depth          = 8,
282                 .align              = 32,
283                 .plane_factor       = { P3(1.0) },
284                 .num_planes         = 1,
285                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
286                 .colorspace_default = V4L2_COLORSPACE_RAW,
287         },
288         {
289                 .fourcc             = V4L2_PIX_FMT_SGBRG8,
290                 .bit_depth          = 8,
291                 .align              = 32,
292                 .plane_factor       = { P3(1.0) },
293                 .num_planes         = 1,
294                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
295                 .colorspace_default = V4L2_COLORSPACE_RAW,
296         },
297         /* Bayer formats - 16-bit */
298         {
299                 .fourcc             = V4L2_PIX_FMT_SRGGB16,
300                 .bit_depth          = 16,
301                 .align              = 32,
302                 .plane_factor       = { P3(1.0) },
303                 .num_planes         = 1,
304                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
305                 .colorspace_default = V4L2_COLORSPACE_RAW,
306         },
307         {
308                 .fourcc             = V4L2_PIX_FMT_SBGGR16,
309                 .bit_depth          = 16,
310                 .align              = 32,
311                 .plane_factor       = { P3(1.0) },
312                 .num_planes         = 1,
313                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
314                 .colorspace_default = V4L2_COLORSPACE_RAW,
315         },
316         {
317                 .fourcc             = V4L2_PIX_FMT_SGRBG16,
318                 .bit_depth          = 16,
319                 .align              = 32,
320                 .plane_factor       = { P3(1.0) },
321                 .num_planes         = 1,
322                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
323                 .colorspace_default = V4L2_COLORSPACE_RAW,
324         },
325         {
326                 .fourcc             = V4L2_PIX_FMT_SGBRG16,
327                 .bit_depth          = 16,
328                 .align              = 32,
329                 .plane_factor       = { P3(1.0) },
330                 .num_planes         = 1,
331                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
332                 .colorspace_default = V4L2_COLORSPACE_RAW,
333         },
334         {
335                 /* Bayer formats unpacked to 16bpp */
336                 /* 10 bit */
337                 .fourcc             = V4L2_PIX_FMT_SRGGB10,
338                 .bit_depth          = 16,
339                 .align              = 32,
340                 .plane_factor       = { P3(1.0) },
341                 .num_planes         = 1,
342                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
343                 .colorspace_default = V4L2_COLORSPACE_RAW,
344         },
345         {
346                 .fourcc             = V4L2_PIX_FMT_SBGGR10,
347                 .bit_depth          = 16,
348                 .align              = 32,
349                 .plane_factor       = { P3(1.0) },
350                 .num_planes         = 1,
351                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
352                 .colorspace_default = V4L2_COLORSPACE_RAW,
353         },
354         {
355                 .fourcc             = V4L2_PIX_FMT_SGRBG10,
356                 .bit_depth          = 16,
357                 .align              = 32,
358                 .plane_factor       = { P3(1.0) },
359                 .num_planes         = 1,
360                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
361                 .colorspace_default = V4L2_COLORSPACE_RAW,
362         },
363         {
364                 .fourcc             = V4L2_PIX_FMT_SGBRG10,
365                 .bit_depth          = 16,
366                 .align              = 32,
367                 .plane_factor       = { P3(1.0) },
368                 .num_planes         = 1,
369                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
370                 .colorspace_default = V4L2_COLORSPACE_RAW,
371         },
372         {
373                 /* 12 bit */
374                 .fourcc             = V4L2_PIX_FMT_SRGGB12,
375                 .bit_depth          = 16,
376                 .align              = 32,
377                 .plane_factor       = { P3(1.0) },
378                 .num_planes         = 1,
379                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
380                 .colorspace_default = V4L2_COLORSPACE_RAW,
381         },
382         {
383                 .fourcc             = V4L2_PIX_FMT_SBGGR12,
384                 .bit_depth          = 16,
385                 .align              = 32,
386                 .plane_factor       = { P3(1.0) },
387                 .num_planes         = 1,
388                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
389                 .colorspace_default = V4L2_COLORSPACE_RAW,
390         },
391         {
392                 .fourcc             = V4L2_PIX_FMT_SGRBG12,
393                 .bit_depth          = 16,
394                 .align              = 32,
395                 .plane_factor       = { P3(1.0) },
396                 .num_planes         = 1,
397                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
398                 .colorspace_default = V4L2_COLORSPACE_RAW,
399         },
400         {
401                 .fourcc             = V4L2_PIX_FMT_SGBRG12,
402                 .bit_depth          = 16,
403                 .align              = 32,
404                 .plane_factor       = { P3(1.0) },
405                 .num_planes         = 1,
406                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
407                 .colorspace_default = V4L2_COLORSPACE_RAW,
408         },
409         {
410                 /* 14 bit */
411                 .fourcc             = V4L2_PIX_FMT_SRGGB14,
412                 .bit_depth          = 16,
413                 .align              = 32,
414                 .plane_factor       = { P3(1.0) },
415                 .num_planes         = 1,
416                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
417                 .colorspace_default = V4L2_COLORSPACE_RAW,
418         },
419         {
420                 .fourcc             = V4L2_PIX_FMT_SBGGR14,
421                 .bit_depth          = 16,
422                 .align              = 32,
423                 .plane_factor       = { P3(1.0) },
424                 .num_planes         = 1,
425                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
426                 .colorspace_default = V4L2_COLORSPACE_RAW,
427         },
428         {
429                 .fourcc             = V4L2_PIX_FMT_SGRBG14,
430                 .bit_depth          = 16,
431                 .align              = 32,
432                 .plane_factor       = { P3(1.0) },
433                 .num_planes         = 1,
434                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
435                 .colorspace_default = V4L2_COLORSPACE_RAW,
436         },
437         {
438                 .fourcc             = V4L2_PIX_FMT_SGBRG14,
439                 .bit_depth          = 16,
440                 .align              = 32,
441                 .plane_factor       = { P3(1.0) },
442                 .num_planes         = 1,
443                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
444                 .colorspace_default = V4L2_COLORSPACE_RAW,
445         },
446         /* Bayer formats - 16-bit PiSP Compressed */
447         {
448                 .fourcc             = V4L2_PIX_FMT_PISP_COMP1_BGGR,
449                 .bit_depth          = 8,
450                 .align              = 32,
451                 .plane_factor       = { P3(1.0) },
452                 .num_planes         = 1,
453                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
454                 .colorspace_default = V4L2_COLORSPACE_RAW,
455         },
456         {
457                 .fourcc             = V4L2_PIX_FMT_PISP_COMP1_RGGB,
458                 .bit_depth          = 8,
459                 .align              = 32,
460                 .plane_factor       = { P3(1.0) },
461                 .num_planes         = 1,
462                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
463                 .colorspace_default = V4L2_COLORSPACE_RAW,
464         },
465         {
466                 .fourcc             = V4L2_PIX_FMT_PISP_COMP1_GRBG,
467                 .bit_depth          = 8,
468                 .align              = 32,
469                 .plane_factor       = { P3(1.0) },
470                 .num_planes         = 1,
471                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
472                 .colorspace_default = V4L2_COLORSPACE_RAW,
473         },
474         {
475                 .fourcc             = V4L2_PIX_FMT_PISP_COMP1_GBRG,
476                 .bit_depth          = 8,
477                 .align              = 32,
478                 .plane_factor       = { P3(1.0) },
479                 .num_planes         = 1,
480                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
481                 .colorspace_default = V4L2_COLORSPACE_RAW,
482         },
483         /* Greyscale Formats */
484         {
485                 .fourcc         = V4L2_PIX_FMT_GREY,
486                 .bit_depth      = 8,
487                 .align          = 32,
488                 .num_planes     = 1,
489                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
490                 .colorspace_default = V4L2_COLORSPACE_RAW,
491         },
492         {
493                 .fourcc         = V4L2_PIX_FMT_Y16,
494                 .bit_depth      = 16,
495                 .align          = 32,
496                 .plane_factor   = { P3(1.0) },
497                 .num_planes     = 1,
498                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
499                 .colorspace_default = V4L2_COLORSPACE_RAW,
500         },
501         {
502                 .fourcc         = V4L2_PIX_FMT_PISP_COMP1_MONO,
503                 .bit_depth      = 8,
504                 .align          = 32,
505                 .plane_factor   = { P3(1.0) },
506                 .num_planes     = 1,
507                 .colorspace_mask    = V4L2_COLORSPACE_MASK_RAW,
508                 .colorspace_default = V4L2_COLORSPACE_RAW,
509         },
510 };
511
512 static const struct pisp_be_format meta_out_supported_formats[] = {
513         /* Configuration buffer format. */
514         {
515                 .fourcc             = V4L2_META_FMT_RPI_BE_CFG,
516         },
517 };
518
519 #endif /* _PISP_BE_FORMATS_ */
This page took 0.070534 seconds and 4 git commands to generate.