@@ -856,41 +856,155 @@ void video_closest_frmival(const struct device *dev, enum video_endpoint_id ep,
856
856
*
857
857
* The full color information is spread over multiple pixels.
858
858
*
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
+ *
859
865
* @{
860
866
*/
861
867
862
868
/**
863
869
* @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 | ...
866
872
* @endverbatim
867
873
*/
868
874
#define VIDEO_PIX_FMT_BGGR8 VIDEO_FOURCC('B', 'A', '8', '1')
869
875
870
876
/**
871
877
* @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 | ...
874
880
* @endverbatim
875
881
*/
876
882
#define VIDEO_PIX_FMT_GBRG8 VIDEO_FOURCC('G', 'B', 'R', 'G')
877
883
878
884
/**
879
885
* @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 | ...
882
888
* @endverbatim
883
889
*/
884
890
#define VIDEO_PIX_FMT_GRBG8 VIDEO_FOURCC('G', 'R', 'B', 'G')
885
891
886
892
/**
887
893
* @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 | ...
890
896
* @endverbatim
891
897
*/
892
898
#define VIDEO_PIX_FMT_RGGB8 VIDEO_FOURCC('R', 'G', 'G', 'B')
893
899
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
+
894
1008
/**
895
1009
* @}
896
1010
*/
@@ -994,7 +1108,26 @@ static inline unsigned int video_bits_per_pixel(uint32_t pixfmt)
994
1108
case VIDEO_PIX_FMT_GBRG8 :
995
1109
case VIDEO_PIX_FMT_GRBG8 :
996
1110
case VIDEO_PIX_FMT_RGGB8 :
1111
+ case VIDEO_PIX_FMT_Y8 :
997
1112
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 ;
998
1131
case VIDEO_PIX_FMT_RGB565 :
999
1132
case VIDEO_PIX_FMT_YUYV :
1000
1133
return 16 ;
0 commit comments