Skip to content

Commit 2229400

Browse files
committed
drivers: video: formats: include bayer 10/12/14-bits formats
In addition to the 8-bit, introduce all the other bayer formats described by MIPI-CSI2 specification. The 8-bit bayer formats description is shortened to just 4 bytes like the other formats, to help intuition while comparing the different formats. Signed-off-by: Josuah Demangeon <[email protected]>
1 parent f289e47 commit 2229400

File tree

1 file changed

+141
-8
lines changed

1 file changed

+141
-8
lines changed

include/zephyr/drivers/video.h

+141-8
Original file line numberDiff line numberDiff line change
@@ -856,41 +856,155 @@ void video_closest_frmival(const struct device *dev, enum video_endpoint_id ep,
856856
*
857857
* The full color information is spread over multiple pixels.
858858
*
859+
* When the format includes more than 8-bit per pixel, a strategy becomes needed to pack
860+
* the bits over multiple bytes, as illustrated for each format.
861+
*
862+
* The number above the 'R', 'r', 'G', 'g', 'B', 'b' are hints about which pixel number the
863+
* following bits belong to.
864+
*
859865
* @{
860866
*/
861867

862868
/**
863869
* @verbatim
864-
* | Bbbbbbbb | Gggggggg | Bbbbbbbb | Gggggggg | Bbbbbbbb | Gggggggg | ...
865-
* | Gggggggg | Rrrrrrrr | Gggggggg | Rrrrrrrr | Gggggggg | Rrrrrrrr | ...
870+
* | Bbbbbbbb | Gggggggg | Bbbbbbbb | Gggggggg | ...
871+
* | Gggggggg | Rrrrrrrr | Gggggggg | Rrrrrrrr | ...
866872
* @endverbatim
867873
*/
868874
#define VIDEO_PIX_FMT_BGGR8 VIDEO_FOURCC('B', 'A', '8', '1')
869875

870876
/**
871877
* @verbatim
872-
* | Gggggggg | Bbbbbbbb | Gggggggg | Bbbbbbbb | Gggggggg | Bbbbbbbb | ...
873-
* | Rrrrrrrr | Gggggggg | Rrrrrrrr | Gggggggg | Rrrrrrrr | Gggggggg | ...
878+
* | Gggggggg | Bbbbbbbb | Gggggggg | Bbbbbbbb | ...
879+
* | Rrrrrrrr | Gggggggg | Rrrrrrrr | Gggggggg | ...
874880
* @endverbatim
875881
*/
876882
#define VIDEO_PIX_FMT_GBRG8 VIDEO_FOURCC('G', 'B', 'R', 'G')
877883

878884
/**
879885
* @verbatim
880-
* | Gggggggg | Rrrrrrrr | Gggggggg | Rrrrrrrr | Gggggggg | Rrrrrrrr | ...
881-
* | Bbbbbbbb | Gggggggg | Bbbbbbbb | Gggggggg | Bbbbbbbb | Gggggggg | ...
886+
* | Gggggggg | Rrrrrrrr | Gggggggg | Rrrrrrrr | ...
887+
* | Bbbbbbbb | Gggggggg | Bbbbbbbb | Gggggggg | ...
882888
* @endverbatim
883889
*/
884890
#define VIDEO_PIX_FMT_GRBG8 VIDEO_FOURCC('G', 'R', 'B', 'G')
885891

886892
/**
887893
* @verbatim
888-
* | Rrrrrrrr | Gggggggg | Rrrrrrrr | Gggggggg | Rrrrrrrr | Gggggggg | ...
889-
* | Gggggggg | Bbbbbbbb | Gggggggg | Bbbbbbbb | Gggggggg | Bbbbbbbb | ...
894+
* | Rrrrrrrr | Gggggggg | Rrrrrrrr | Gggggggg | ...
895+
* | Gggggggg | Bbbbbbbb | Gggggggg | Bbbbbbbb | ...
890896
* @endverbatim
891897
*/
892898
#define VIDEO_PIX_FMT_RGGB8 VIDEO_FOURCC('R', 'G', 'G', 'B')
893899

900+
/**
901+
* @verbatim
902+
* 0 1 2 3 0 1 2 3
903+
* | Bbbbbbbb | Gggggggg | Bbbbbbbb | Gggggggg | ggbbggbb | ...
904+
* | Gggggggg | Rrrrrrrr | Gggggggg | Rrrrrrrr | rrggrrgg | ...
905+
* @endverbatim
906+
*/
907+
#define VIDEO_PIX_FMT_SBGGR10P VIDEO_FOURCC('p', 'B', 'A', 'A')
908+
909+
/**
910+
* @verbatim
911+
* 0 1 2 3 0 1 2 3
912+
* | Gggggggg | Bbbbbbbb | Gggggggg | Bbbbbbbb | bbggbbgg | ...
913+
* | Rrrrrrrr | Gggggggg | Rrrrrrrr | Gggggggg | ggrrggrr | ...
914+
* @endverbatim
915+
*/
916+
#define VIDEO_PIX_FMT_SGBRG10P VIDEO_FOURCC('p', 'G', 'A', 'A')
917+
918+
/**
919+
* @verbatim
920+
* 0 1 2 3 0 1 2 3
921+
* | Gggggggg | Rrrrrrrr | Gggggggg | Rrrrrrrr | rrggrrgg | ...
922+
* | Bbbbbbbb | Gggggggg | Bbbbbbbb | Gggggggg | ggbbggbb | ...
923+
* @endverbatim
924+
*/
925+
#define VIDEO_PIX_FMT_SGRBG10P VIDEO_FOURCC('p', 'g', 'A', 'A')
926+
927+
/**
928+
* @verbatim
929+
* 0 1 2 3 0 1 2 3
930+
* | Rrrrrrrr | Gggggggg | Rrrrrrrr | Gggggggg | ggrrggrr | ...
931+
* | Gggggggg | Bbbbbbbb | Gggggggg | Bbbbbbbb | bbggbbgg | ...
932+
* @endverbatim
933+
*/
934+
#define VIDEO_PIX_FMT_SRGGB10P VIDEO_FOURCC('p', 'R', 'A', 'A')
935+
936+
/**
937+
* @verbatim
938+
* 0 1 1 0 2 3 3 2
939+
* | Bbbbbbbb | Gggggggg | ggggbbbb | Bbbbbbbb | Gggggggg | ggggbbbb | ...
940+
* | Gggggggg | Rrrrrrrr | rrrrgggg | Gggggggg | Rrrrrrrr | rrrrgggg | ...
941+
* @endverbatim
942+
*/
943+
#define VIDEO_PIX_FMT_SBGGR12P VIDEO_FOURCC('p', 'B', 'C', 'C')
944+
945+
/**
946+
* @verbatim
947+
* 0 1 1 0 2 3 3 2
948+
* | Gggggggg | Bbbbbbbb | bbbbgggg | Gggggggg | Bbbbbbbb | bbbbgggg | ...
949+
* | Rrrrrrrr | Gggggggg | ggggrrrr | Rrrrrrrr | Gggggggg | ggggrrrr | ...
950+
* @endverbatim
951+
*/
952+
#define VIDEO_PIX_FMT_SGBRG12P VIDEO_FOURCC('p', 'G', 'C', 'C')
953+
954+
/**
955+
* @verbatim
956+
* 0 1 1 0 2 3 3 2
957+
* | Gggggggg | Rrrrrrrr | rrrrgggg | Gggggggg | Rrrrrrrr | rrrrgggg | ...
958+
* | Bbbbbbbb | Gggggggg | ggggbbbb | Bbbbbbbb | Gggggggg | ggggbbbb | ...
959+
* @endverbatim
960+
*/
961+
#define VIDEO_PIX_FMT_SGRBG12P VIDEO_FOURCC('p', 'g', 'C', 'C')
962+
963+
/**
964+
* @verbatim
965+
* 0 1 1 0 2 3 3 2
966+
* | Rrrrrrrr | Gggggggg | ggggrrrr | Rrrrrrrr | Gggggggg | ggggrrrr | ...
967+
* | Gggggggg | Bbbbbbbb | bbbbgggg | Gggggggg | Bbbbbbbb | bbbbgggg | ...
968+
* @endverbatim
969+
*/
970+
#define VIDEO_PIX_FMT_SRGGB12P VIDEO_FOURCC('p', 'R', 'C', 'C')
971+
972+
/**
973+
* @verbatim
974+
* 0 1 2 3 1 0 2 1 3 2
975+
* | Bbbbbbbb | Gggggggg | Bbbbbbbb | Gggggggg | ggbbbbbb | bbbbgggg | ggggggbb | ...
976+
* | Gggggggg | Rrrrrrrr | Gggggggg | Rrrrrrrr | rrgggggg | ggggrrrr | rrrrrrgg | ...
977+
* @endverbatim
978+
*/
979+
#define VIDEO_PIX_FMT_SBGGR14P VIDEO_FOURCC('p', 'B', 'E', 'E')
980+
981+
/**
982+
* @verbatim
983+
* 0 1 2 3 1 0 2 1 3 2
984+
* | Gggggggg | Bbbbbbbb | Gggggggg | Bbbbbbbb | bbgggggg | ggggbbbb | bbbbbbgg | ...
985+
* | Rrrrrrrr | Gggggggg | Rrrrrrrr | Gggggggg | ggrrrrrr | rrrrgggg | ggggggrr | ...
986+
* @endverbatim
987+
*/
988+
#define VIDEO_PIX_FMT_SGBRG14P VIDEO_FOURCC('p', 'G', 'E', 'E')
989+
990+
/**
991+
* @verbatim
992+
* 0 1 2 3 1 0 2 1 3 2
993+
* | Gggggggg | Rrrrrrrr | Gggggggg | Rrrrrrrr | rrgggggg | ggggrrrr | rrrrrrgg | ...
994+
* | Bbbbbbbb | Gggggggg | Bbbbbbbb | Gggggggg | ggbbbbbb | bbbbgggg | ggggggbb | ...
995+
* @endverbatim
996+
*/
997+
#define VIDEO_PIX_FMT_SGRBG14P VIDEO_FOURCC('p', 'g', 'E', 'E')
998+
999+
/**
1000+
* @verbatim
1001+
* 0 1 2 3 1 0 2 1 3 2
1002+
* | Rrrrrrrr | Gggggggg | Rrrrrrrr | Gggggggg | ggrrrrrr | rrrrgggg | ggggggrr | ...
1003+
* | Gggggggg | Bbbbbbbb | Gggggggg | Bbbbbbbb | bbgggggg | ggggbbbb | bbbbbbgg | ...
1004+
* @endverbatim
1005+
*/
1006+
#define VIDEO_PIX_FMT_SRGGB14P VIDEO_FOURCC('p', 'R', 'E', 'E')
1007+
8941008
/**
8951009
* @}
8961010
*/
@@ -994,7 +1108,26 @@ static inline unsigned int video_bits_per_pixel(uint32_t pixfmt)
9941108
case VIDEO_PIX_FMT_GBRG8:
9951109
case VIDEO_PIX_FMT_GRBG8:
9961110
case VIDEO_PIX_FMT_RGGB8:
1111+
case VIDEO_PIX_FMT_Y8:
9971112
return 8;
1113+
case VIDEO_PIX_FMT_SBGGR10P:
1114+
case VIDEO_PIX_FMT_SGBRG10P:
1115+
case VIDEO_PIX_FMT_SGRBG10P:
1116+
case VIDEO_PIX_FMT_SRGGB10P:
1117+
case VIDEO_PIX_FMT_Y10P:
1118+
return 10;
1119+
case VIDEO_PIX_FMT_SBGGR12P:
1120+
case VIDEO_PIX_FMT_SGBRG12P:
1121+
case VIDEO_PIX_FMT_SGRBG12P:
1122+
case VIDEO_PIX_FMT_SRGGB12P:
1123+
case VIDEO_PIX_FMT_Y12P:
1124+
return 12;
1125+
case VIDEO_PIX_FMT_SBGGR14P:
1126+
case VIDEO_PIX_FMT_SGBRG14P:
1127+
case VIDEO_PIX_FMT_SGRBG14P:
1128+
case VIDEO_PIX_FMT_SRGGB14P:
1129+
case VIDEO_PIX_FMT_Y14P:
1130+
return 14;
9981131
case VIDEO_PIX_FMT_RGB565:
9991132
case VIDEO_PIX_FMT_YUYV:
10001133
return 16;

0 commit comments

Comments
 (0)