File Index
Files and directories
Sign in
FILE

pisp_be_formats.h

File preview with syntax highlighting.

linux-6.19.14/drivers/media/platform/raspberrypi/pisp_be/pisp_be_formats.h C
  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
 17struct 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
 56static 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
512static 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_ */
~/ Read-only file preview.