@@ -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