1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Broadcom BCM2835 ISP driver
5 * Copyright © 2019-2020 Raspberry Pi (Trading) Ltd.
7 * Author: Naushir Patuck (naush@raspberrypi.com)
11 #ifndef BCM2835_ISP_FMTS
12 #define BCM2835_ISP_FMTS
14 #include <linux/videodev2.h>
15 #include "vchiq-mmal/mmal-encodings.h"
17 struct bcm2835_isp_fmt {
20 int bytesperline_align;
22 int size_multiplier_x2;
24 enum v4l2_colorspace colorspace_default;
25 unsigned int step_size;
28 #define V4L2_COLORSPACE_MASK(colorspace) BIT(colorspace)
30 #define V4L2_COLORSPACE_MASK_JPEG V4L2_COLORSPACE_MASK(V4L2_COLORSPACE_JPEG)
31 #define V4L2_COLORSPACE_MASK_SMPTE170M V4L2_COLORSPACE_MASK(V4L2_COLORSPACE_SMPTE170M)
32 #define V4L2_COLORSPACE_MASK_REC709 V4L2_COLORSPACE_MASK(V4L2_COLORSPACE_REC709)
33 #define V4L2_COLORSPACE_MASK_SRGB V4L2_COLORSPACE_MASK(V4L2_COLORSPACE_SRGB)
34 #define V4L2_COLORSPACE_MASK_RAW V4L2_COLORSPACE_MASK(V4L2_COLORSPACE_RAW)
37 * The colour spaces we support for YUV outputs. SRGB features here because,
38 * once you assign the default transfer func and so on, it and JPEG effectively
41 #define V4L2_COLORSPACE_MASK_YUV (V4L2_COLORSPACE_MASK_JPEG | \
42 V4L2_COLORSPACE_MASK_SRGB | \
43 V4L2_COLORSPACE_MASK_SMPTE170M | \
44 V4L2_COLORSPACE_MASK_REC709)
46 static const struct bcm2835_isp_fmt supported_formats[] = {
49 .fourcc = V4L2_PIX_FMT_YUV420,
51 .bytesperline_align = 64,
52 .mmal_fmt = MMAL_ENCODING_I420,
53 .size_multiplier_x2 = 3,
54 .colorspace_mask = V4L2_COLORSPACE_MASK_YUV,
55 .colorspace_default = V4L2_COLORSPACE_JPEG,
58 .fourcc = V4L2_PIX_FMT_YVU420,
60 .bytesperline_align = 64,
61 .mmal_fmt = MMAL_ENCODING_YV12,
62 .size_multiplier_x2 = 3,
63 .colorspace_mask = V4L2_COLORSPACE_MASK_YUV,
64 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
67 .fourcc = V4L2_PIX_FMT_NV12,
69 .bytesperline_align = 32,
70 .mmal_fmt = MMAL_ENCODING_NV12,
71 .size_multiplier_x2 = 3,
72 .colorspace_mask = V4L2_COLORSPACE_MASK_YUV,
73 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
76 .fourcc = V4L2_PIX_FMT_NV21,
78 .bytesperline_align = 32,
79 .mmal_fmt = MMAL_ENCODING_NV21,
80 .size_multiplier_x2 = 3,
81 .colorspace_mask = V4L2_COLORSPACE_MASK_YUV,
82 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
85 .fourcc = V4L2_PIX_FMT_YUYV,
87 .bytesperline_align = 64,
88 .mmal_fmt = MMAL_ENCODING_YUYV,
89 .size_multiplier_x2 = 2,
90 .colorspace_mask = V4L2_COLORSPACE_MASK_YUV,
91 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
94 .fourcc = V4L2_PIX_FMT_UYVY,
96 .bytesperline_align = 64,
97 .mmal_fmt = MMAL_ENCODING_UYVY,
98 .size_multiplier_x2 = 2,
99 .colorspace_mask = V4L2_COLORSPACE_MASK_YUV,
100 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
103 .fourcc = V4L2_PIX_FMT_YVYU,
105 .bytesperline_align = 64,
106 .mmal_fmt = MMAL_ENCODING_YVYU,
107 .size_multiplier_x2 = 2,
108 .colorspace_mask = V4L2_COLORSPACE_MASK_YUV,
109 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
112 .fourcc = V4L2_PIX_FMT_VYUY,
114 .bytesperline_align = 64,
115 .mmal_fmt = MMAL_ENCODING_VYUY,
116 .size_multiplier_x2 = 2,
117 .colorspace_mask = V4L2_COLORSPACE_MASK_YUV,
118 .colorspace_default = V4L2_COLORSPACE_SMPTE170M,
122 .fourcc = V4L2_PIX_FMT_RGB24,
124 .bytesperline_align = 32,
125 .mmal_fmt = MMAL_ENCODING_RGB24,
126 .size_multiplier_x2 = 2,
127 .colorspace_mask = V4L2_COLORSPACE_MASK_SRGB,
128 .colorspace_default = V4L2_COLORSPACE_SRGB,
131 .fourcc = V4L2_PIX_FMT_RGB565,
133 .bytesperline_align = 32,
134 .mmal_fmt = MMAL_ENCODING_RGB16,
135 .size_multiplier_x2 = 2,
136 .colorspace_mask = V4L2_COLORSPACE_MASK_SRGB,
137 .colorspace_default = V4L2_COLORSPACE_SRGB,
140 .fourcc = V4L2_PIX_FMT_BGR24,
142 .bytesperline_align = 32,
143 .mmal_fmt = MMAL_ENCODING_BGR24,
144 .size_multiplier_x2 = 2,
145 .colorspace_mask = V4L2_COLORSPACE_MASK_SRGB,
146 .colorspace_default = V4L2_COLORSPACE_SRGB,
149 .fourcc = V4L2_PIX_FMT_XBGR32,
151 .bytesperline_align = 64,
152 .mmal_fmt = MMAL_ENCODING_BGRA,
153 .size_multiplier_x2 = 2,
154 .colorspace_mask = V4L2_COLORSPACE_MASK_SRGB,
155 .colorspace_default = V4L2_COLORSPACE_SRGB,
158 .fourcc = V4L2_PIX_FMT_RGBX32,
160 .bytesperline_align = 64,
161 .mmal_fmt = MMAL_ENCODING_RGBA,
162 .size_multiplier_x2 = 2,
163 .colorspace_mask = V4L2_COLORSPACE_MASK_SRGB,
164 .colorspace_default = V4L2_COLORSPACE_SRGB,
169 .fourcc = V4L2_PIX_FMT_SRGGB8,
171 .bytesperline_align = 32,
172 .mmal_fmt = MMAL_ENCODING_BAYER_SRGGB8,
173 .size_multiplier_x2 = 2,
174 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
175 .colorspace_default = V4L2_COLORSPACE_RAW,
178 .fourcc = V4L2_PIX_FMT_SBGGR8,
180 .bytesperline_align = 32,
181 .mmal_fmt = MMAL_ENCODING_BAYER_SBGGR8,
182 .size_multiplier_x2 = 2,
183 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
184 .colorspace_default = V4L2_COLORSPACE_RAW,
187 .fourcc = V4L2_PIX_FMT_SGRBG8,
189 .bytesperline_align = 32,
190 .mmal_fmt = MMAL_ENCODING_BAYER_SGRBG8,
191 .size_multiplier_x2 = 2,
192 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
193 .colorspace_default = V4L2_COLORSPACE_RAW,
196 .fourcc = V4L2_PIX_FMT_SGBRG8,
198 .bytesperline_align = 32,
199 .mmal_fmt = MMAL_ENCODING_BAYER_SGBRG8,
200 .size_multiplier_x2 = 2,
201 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
202 .colorspace_default = V4L2_COLORSPACE_RAW,
206 .fourcc = V4L2_PIX_FMT_SRGGB10P,
208 .bytesperline_align = 32,
209 .mmal_fmt = MMAL_ENCODING_BAYER_SRGGB10P,
210 .size_multiplier_x2 = 2,
211 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
212 .colorspace_default = V4L2_COLORSPACE_RAW,
215 .fourcc = V4L2_PIX_FMT_SBGGR10P,
217 .bytesperline_align = 32,
218 .mmal_fmt = MMAL_ENCODING_BAYER_SBGGR10P,
219 .size_multiplier_x2 = 2,
220 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
221 .colorspace_default = V4L2_COLORSPACE_RAW,
224 .fourcc = V4L2_PIX_FMT_SGRBG10P,
226 .bytesperline_align = 32,
227 .mmal_fmt = MMAL_ENCODING_BAYER_SGRBG10P,
228 .size_multiplier_x2 = 2,
229 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
230 .colorspace_default = V4L2_COLORSPACE_RAW,
233 .fourcc = V4L2_PIX_FMT_SGBRG10P,
235 .bytesperline_align = 32,
236 .mmal_fmt = MMAL_ENCODING_BAYER_SGBRG10P,
237 .size_multiplier_x2 = 2,
238 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
239 .colorspace_default = V4L2_COLORSPACE_RAW,
243 .fourcc = V4L2_PIX_FMT_SRGGB12P,
245 .bytesperline_align = 32,
246 .mmal_fmt = MMAL_ENCODING_BAYER_SRGGB12P,
247 .size_multiplier_x2 = 2,
248 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
249 .colorspace_default = V4L2_COLORSPACE_RAW,
252 .fourcc = V4L2_PIX_FMT_SBGGR12P,
254 .bytesperline_align = 32,
255 .mmal_fmt = MMAL_ENCODING_BAYER_SBGGR12P,
256 .size_multiplier_x2 = 2,
257 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
258 .colorspace_default = V4L2_COLORSPACE_RAW,
261 .fourcc = V4L2_PIX_FMT_SGRBG12P,
263 .bytesperline_align = 32,
264 .mmal_fmt = MMAL_ENCODING_BAYER_SGRBG12P,
265 .size_multiplier_x2 = 2,
266 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
267 .colorspace_default = V4L2_COLORSPACE_RAW,
270 .fourcc = V4L2_PIX_FMT_SGBRG12P,
272 .bytesperline_align = 32,
273 .mmal_fmt = MMAL_ENCODING_BAYER_SGBRG12P,
274 .size_multiplier_x2 = 2,
275 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
276 .colorspace_default = V4L2_COLORSPACE_RAW,
280 .fourcc = V4L2_PIX_FMT_SRGGB14P,
282 .bytesperline_align = 32,
283 .mmal_fmt = MMAL_ENCODING_BAYER_SRGGB14P,
284 .size_multiplier_x2 = 2,
285 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
286 .colorspace_default = V4L2_COLORSPACE_RAW,
289 .fourcc = V4L2_PIX_FMT_SBGGR14P,
291 .bytesperline_align = 32,
292 .mmal_fmt = MMAL_ENCODING_BAYER_SBGGR14P,
293 .size_multiplier_x2 = 2,
294 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
295 .colorspace_default = V4L2_COLORSPACE_RAW,
298 .fourcc = V4L2_PIX_FMT_SGRBG14P,
300 .bytesperline_align = 32,
301 .mmal_fmt = MMAL_ENCODING_BAYER_SGRBG14P,
302 .size_multiplier_x2 = 2,
303 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
304 .colorspace_default = V4L2_COLORSPACE_RAW,
307 .fourcc = V4L2_PIX_FMT_SGBRG14P,
309 .bytesperline_align = 32,
310 .mmal_fmt = MMAL_ENCODING_BAYER_SGBRG14P,
311 .size_multiplier_x2 = 2,
312 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
313 .colorspace_default = V4L2_COLORSPACE_RAW,
317 .fourcc = V4L2_PIX_FMT_SRGGB16,
319 .bytesperline_align = 32,
320 .mmal_fmt = MMAL_ENCODING_BAYER_SRGGB16,
321 .size_multiplier_x2 = 2,
322 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
323 .colorspace_default = V4L2_COLORSPACE_RAW,
326 .fourcc = V4L2_PIX_FMT_SBGGR16,
328 .bytesperline_align = 32,
329 .mmal_fmt = MMAL_ENCODING_BAYER_SBGGR16,
330 .size_multiplier_x2 = 2,
331 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
332 .colorspace_default = V4L2_COLORSPACE_RAW,
335 .fourcc = V4L2_PIX_FMT_SGRBG16,
337 .bytesperline_align = 32,
338 .mmal_fmt = MMAL_ENCODING_BAYER_SGRBG16,
339 .size_multiplier_x2 = 2,
340 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
341 .colorspace_default = V4L2_COLORSPACE_RAW,
344 .fourcc = V4L2_PIX_FMT_SGBRG16,
346 .bytesperline_align = 32,
347 .mmal_fmt = MMAL_ENCODING_BAYER_SGBRG16,
348 .size_multiplier_x2 = 2,
349 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
350 .colorspace_default = V4L2_COLORSPACE_RAW,
353 /* Bayer formats unpacked to 16bpp */
355 .fourcc = V4L2_PIX_FMT_SRGGB10,
357 .bytesperline_align = 32,
358 .mmal_fmt = MMAL_ENCODING_BAYER_SRGGB10,
359 .size_multiplier_x2 = 2,
360 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
361 .colorspace_default = V4L2_COLORSPACE_RAW,
364 .fourcc = V4L2_PIX_FMT_SBGGR10,
366 .bytesperline_align = 32,
367 .mmal_fmt = MMAL_ENCODING_BAYER_SBGGR10,
368 .size_multiplier_x2 = 2,
369 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
370 .colorspace_default = V4L2_COLORSPACE_RAW,
373 .fourcc = V4L2_PIX_FMT_SGRBG10,
375 .bytesperline_align = 32,
376 .mmal_fmt = MMAL_ENCODING_BAYER_SGRBG10,
377 .size_multiplier_x2 = 2,
378 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
379 .colorspace_default = V4L2_COLORSPACE_RAW,
382 .fourcc = V4L2_PIX_FMT_SGBRG10,
384 .bytesperline_align = 32,
385 .mmal_fmt = MMAL_ENCODING_BAYER_SGBRG10,
386 .size_multiplier_x2 = 2,
387 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
388 .colorspace_default = V4L2_COLORSPACE_RAW,
392 .fourcc = V4L2_PIX_FMT_SRGGB12,
394 .bytesperline_align = 32,
395 .mmal_fmt = MMAL_ENCODING_BAYER_SRGGB12,
396 .size_multiplier_x2 = 2,
397 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
398 .colorspace_default = V4L2_COLORSPACE_RAW,
401 .fourcc = V4L2_PIX_FMT_SBGGR12,
403 .bytesperline_align = 32,
404 .mmal_fmt = MMAL_ENCODING_BAYER_SBGGR12,
405 .size_multiplier_x2 = 2,
406 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
407 .colorspace_default = V4L2_COLORSPACE_RAW,
410 .fourcc = V4L2_PIX_FMT_SGRBG12,
412 .bytesperline_align = 32,
413 .mmal_fmt = MMAL_ENCODING_BAYER_SGRBG12,
414 .size_multiplier_x2 = 2,
415 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
416 .colorspace_default = V4L2_COLORSPACE_RAW,
419 .fourcc = V4L2_PIX_FMT_SGBRG12,
421 .bytesperline_align = 32,
422 .mmal_fmt = MMAL_ENCODING_BAYER_SGBRG12,
423 .size_multiplier_x2 = 2,
424 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
425 .colorspace_default = V4L2_COLORSPACE_RAW,
429 .fourcc = V4L2_PIX_FMT_SRGGB14,
431 .bytesperline_align = 32,
432 .mmal_fmt = MMAL_ENCODING_BAYER_SRGGB14,
433 .size_multiplier_x2 = 2,
434 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
435 .colorspace_default = V4L2_COLORSPACE_RAW,
438 .fourcc = V4L2_PIX_FMT_SBGGR14,
440 .bytesperline_align = 32,
441 .mmal_fmt = MMAL_ENCODING_BAYER_SBGGR14,
442 .size_multiplier_x2 = 2,
443 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
444 .colorspace_default = V4L2_COLORSPACE_RAW,
447 .fourcc = V4L2_PIX_FMT_SGRBG14,
449 .bytesperline_align = 32,
450 .mmal_fmt = MMAL_ENCODING_BAYER_SGRBG14,
451 .size_multiplier_x2 = 2,
452 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
453 .colorspace_default = V4L2_COLORSPACE_RAW,
456 .fourcc = V4L2_PIX_FMT_SGBRG14,
458 .bytesperline_align = 32,
459 .mmal_fmt = MMAL_ENCODING_BAYER_SGBRG14,
460 .size_multiplier_x2 = 2,
461 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
462 .colorspace_default = V4L2_COLORSPACE_RAW,
465 /* Monochrome MIPI formats */
467 .fourcc = V4L2_PIX_FMT_GREY,
469 .bytesperline_align = 32,
470 .mmal_fmt = MMAL_ENCODING_GREY,
471 .size_multiplier_x2 = 2,
472 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
473 .colorspace_default = V4L2_COLORSPACE_RAW,
477 .fourcc = V4L2_PIX_FMT_Y10P,
479 .bytesperline_align = 32,
480 .mmal_fmt = MMAL_ENCODING_Y10P,
481 .size_multiplier_x2 = 2,
482 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
483 .colorspace_default = V4L2_COLORSPACE_RAW,
487 .fourcc = V4L2_PIX_FMT_Y12P,
489 .bytesperline_align = 32,
490 .mmal_fmt = MMAL_ENCODING_Y12P,
491 .size_multiplier_x2 = 2,
492 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
493 .colorspace_default = V4L2_COLORSPACE_RAW,
497 .fourcc = V4L2_PIX_FMT_Y14P,
499 .bytesperline_align = 32,
500 .mmal_fmt = MMAL_ENCODING_Y14P,
501 .size_multiplier_x2 = 2,
502 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
503 .colorspace_default = V4L2_COLORSPACE_RAW,
507 .fourcc = V4L2_PIX_FMT_Y16,
509 .bytesperline_align = 32,
510 .mmal_fmt = MMAL_ENCODING_Y16,
511 .size_multiplier_x2 = 2,
512 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
513 .colorspace_default = V4L2_COLORSPACE_RAW,
516 /* 10 bit as 16bpp */
517 .fourcc = V4L2_PIX_FMT_Y10,
519 .bytesperline_align = 32,
520 .mmal_fmt = MMAL_ENCODING_Y10,
521 .size_multiplier_x2 = 2,
522 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
523 .colorspace_default = V4L2_COLORSPACE_RAW,
526 /* 12 bit as 16bpp */
527 .fourcc = V4L2_PIX_FMT_Y12,
529 .bytesperline_align = 32,
530 .mmal_fmt = MMAL_ENCODING_Y12,
531 .size_multiplier_x2 = 2,
532 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
533 .colorspace_default = V4L2_COLORSPACE_RAW,
536 /* 14 bit as 16bpp */
537 .fourcc = V4L2_PIX_FMT_Y14,
539 .bytesperline_align = 32,
540 .mmal_fmt = MMAL_ENCODING_Y14,
541 .size_multiplier_x2 = 2,
542 .colorspace_mask = V4L2_COLORSPACE_MASK_RAW,
543 .colorspace_default = V4L2_COLORSPACE_RAW,
546 .fourcc = V4L2_META_FMT_BCM2835_ISP_STATS,
547 .mmal_fmt = MMAL_ENCODING_BRCM_STATS,
548 /* The rest are not valid fields for stats. */