38#include <score_plugin_gfx_export.h>
43namespace score::gfx::interop
90#define SCORE_VIDEO_PIXEL_FORMATS(X) \
94 X(BGRA8, 1, RGB, 1, 1, 1, 1, 4, true, NA, 256) \
95 X(RGBA8, 2, RGB, 1, 1, 1, 1, 4, true, NA, 256) \
96 X(ARGB8, 3, RGB, 1, 1, 1, 1, 4, true, NA, 256) \
97 X(ABGR8, 4, RGB, 1, 1, 1, 1, 4, true, NA, 256) \
98 X(RGB24, 5, RGB, 1, 1, 1, 1, 3, false, NA, 64) \
99 X(BGR24, 6, RGB, 1, 1, 1, 1, 3, false, NA, 64) \
100 X(BGRX8, 7, RGB, 1, 1, 1, 1, 4, false, NA, 256) \
101 X(RGBX8, 8, RGB, 1, 1, 1, 1, 4, false, NA, 256) \
102 X(XRGB8, 9, RGB, 1, 1, 1, 1, 4, false, NA, 256) \
103 X(XBGR8, 19, RGB, 1, 1, 1, 1, 4, false, NA, 256) \
111 X(R210, 10, RGB, 1, 1, 1, 64, 256, false, Big, 256) \
112 X(R12B, 11, RGB, 1, 1, 1, 2, 9, false, Big, 256) \
113 X(R12L, 12, RGB, 1, 1, 1, 2, 9, false, Little, 256) \
114 X(ARGB10, 13, RGB, 1, 1, 1, 1, 5, true, Little, 256) \
115 X(DPX10, 14, RGB, 1, 1, 1, 1, 4, false, Big, 256) \
116 X(DPX10LE, 15, RGB, 1, 1, 1, 1, 4, false, Little, 256) \
117 X(RGB12P, 16, RGB, 1, 1, 1, 2, 9, false, Little, 256) \
118 X(RGB48, 17, RGB, 1, 1, 1, 1, 6, false, Little, 256) \
119 X(RGB10, 18, RGB, 1, 1, 1, 1, 4, false, Little, 256) \
123 X(X2RGB10, 120, RGB, 1, 1, 1, 1, 4, false, Little, 256) \
124 X(X2BGR10, 121, RGB, 1, 1, 1, 1, 4, false, Little, 256) \
126 X(RGB332, 90, RGB, 1, 1, 1, 1, 1, false, NA, 64) \
127 X(RGB565, 91, RGB, 1, 1, 1, 1, 2, false, Little, 64) \
128 X(RGB565BE, 92, RGB, 1, 1, 1, 1, 2, false, Big, 64) \
129 X(RGB555, 93, RGB, 1, 1, 1, 1, 2, false, Little, 64) \
130 X(RGB555BE, 94, RGB, 1, 1, 1, 1, 2, false, Big, 64) \
131 X(ARGB1555, 95, RGB, 1, 1, 1, 1, 2, true, Little, 64) \
132 X(RGB444, 96, RGB, 1, 1, 1, 1, 2, false, Little, 64) \
133 X(ARGB4444, 97, RGB, 1, 1, 1, 1, 2, true, Little, 64) \
134 X(AYUV4444, 98, YUV, 1, 1, 1, 1, 2, true, Little, 64) \
135 X(AYUV1555, 99, YUV, 1, 1, 1, 1, 2, true, Little, 64) \
136 X(YUV565, 100, YUV, 1, 1, 1, 1, 2, false, Little, 64) \
138 X(UYVY422, 20, YUV, 1, 2, 1, 2, 4, false, NA, 256) \
139 X(YUYV422, 21, YUV, 1, 2, 1, 2, 4, false, NA, 256) \
140 X(YVYU422, 22, YUV, 1, 2, 1, 2, 4, false, NA, 256) \
141 X(VYUY422, 23, YUV, 1, 2, 1, 2, 4, false, NA, 256) \
145 X(V210, 30, YUV, 1, 2, 1, 48, 128, false, Little, 128) \
146 X(V216, 31, YUV, 1, 2, 1, 2, 8, false, Little, 256) \
149 X(Y210, 106, YUV, 1, 2, 1, 2, 8, false, Little, 256) \
150 X(Y216, 107, YUV, 1, 2, 1, 2, 8, false, Little, 256) \
152 X(NV12, 40, YUV, 2, 2, 2, 1, 1, false, NA, 256) \
153 X(P010, 41, YUV, 2, 2, 2, 1, 2, false, Little, 256) \
154 X(YUV420P, 42, YUV, 3, 2, 2, 1, 1, false, NA, 256) \
155 X(YUV420P10, 43, YUV, 3, 2, 2, 1, 2, false, Little, 256) \
156 X(NV21, 44, YUV, 2, 2, 2, 1, 1, false, NA, 256) \
157 X(YVU420P, 45, YUV, 3, 2, 2, 1, 1, false, NA, 256) \
159 X(P210, 50, YUV, 2, 2, 1, 1, 2, false, Little, 256) \
160 X(YUV422P, 51, YUV, 3, 2, 1, 1, 1, false, NA, 256) \
161 X(YUV422P10, 52, YUV, 3, 2, 1, 1, 2, false, Little, 256) \
162 X(NV16, 53, YUV, 2, 2, 1, 1, 1, false, NA, 256) \
163 X(NV61, 54, YUV, 2, 2, 1, 1, 1, false, NA, 256) \
164 X(YUV422P12, 55, YUV, 3, 2, 1, 1, 2, false, Little, 256) \
165 X(YUV422P16, 110, YUV, 3, 2, 1, 1, 2, false, Little, 256) \
166 X(YVU422P, 104, YUV, 3, 2, 1, 1, 1, false, NA, 256) \
167 X(P216, 108, YUV, 2, 2, 1, 1, 2, false, Little, 256) \
169 X(YUV411P, 101, YUV, 3, 4, 1, 1, 1, false, NA, 256) \
170 X(YUV410P, 102, YUV, 3, 4, 4, 1, 1, false, NA, 256) \
171 X(YVU410P, 103, YUV, 3, 4, 4, 1, 1, false, NA, 256) \
172 X(UYYVYY411, 105, YUV, 1, 4, 1, 4, 6, false, NA, 256) \
174 X(YUV444P, 60, YUV, 3, 1, 1, 1, 1, false, NA, 256) \
175 X(YUV444P10, 61, YUV, 3, 1, 1, 1, 2, false, Little, 256) \
176 X(YUV444P12, 62, YUV, 3, 1, 1, 1, 2, false, Little, 256) \
177 X(NV24, 63, YUV, 2, 1, 1, 1, 1, false, NA, 256) \
178 X(NV42, 64, YUV, 2, 1, 1, 1, 1, false, NA, 256) \
179 X(VUYA, 65, YUV, 1, 1, 1, 1, 4, true, NA, 256) \
180 X(VUYX, 66, YUV, 1, 1, 1, 1, 4, false, NA, 256) \
181 X(AYUV, 67, YUV, 1, 1, 1, 1, 4, true, NA, 256) \
182 X(XYUV, 68, YUV, 1, 1, 1, 1, 4, false, NA, 256) \
183 X(YUVA, 69, YUV, 1, 1, 1, 1, 4, true, NA, 256) \
184 X(YUVX, 73, YUV, 1, 1, 1, 1, 4, false, NA, 256) \
185 X(YUVA444P, 111, YUV, 4, 1, 1, 1, 1, true, NA, 256) \
186 X(P416, 109, YUV, 2, 1, 1, 1, 2, false, Little, 256) \
189 X(XV30, 112, YUV, 1, 1, 1, 1, 4, false, Little, 256) \
190 X(AYUV64, 113, YUV, 1, 1, 1, 1, 8, true, Little, 256) \
192 X(RGBA16, 70, RGB, 1, 1, 1, 1, 8, true, Little, 256) \
193 X(RGBA16F, 71, RGB, 1, 1, 1, 1, 8, true, Little, 256) \
194 X(RGBA32F, 72, RGB, 1, 1, 1, 1, 16, true, Little, 256) \
196 X(Mono8, 80, Grey, 1, 1, 1, 1, 1, false, NA, 64) \
197 X(Mono10, 81, Grey, 1, 1, 1, 1, 2, false, Little, 64) \
198 X(Mono12, 82, Grey, 1, 1, 1, 1, 2, false, Little, 64) \
199 X(Mono16, 83, Grey, 1, 1, 1, 1, 2, false, Little, 64) \
205 X(BayerRG8, 84, Bayer, 1, 1, 1, 1, 1, false, NA, 64) \
206 X(BayerRG12, 85, Bayer, 1, 1, 1, 1, 2, false, Little, 64) \
209 X(BayerBGGR8, 114, Bayer, 1, 1, 1, 1, 1, false, NA, 64) \
210 X(BayerGBRG8, 115, Bayer, 1, 1, 1, 1, 1, false, NA, 64) \
211 X(BayerGRBG8, 116, Bayer, 1, 1, 1, 1, 1, false, NA, 64) \
212 X(BayerRGGB8, 117, Bayer, 1, 1, 1, 1, 1, false, NA, 64) \
213 X(BayerBGGR16, 118, Bayer, 1, 1, 1, 1, 2, false, Little, 64) \
214 X(BayerRGGB16, 119, Bayer, 1, 1, 1, 1, 2, false, Little, 64) \
220 X(BayerBGGR10, 123, Bayer, 1, 1, 1, 1, 2, false, Little, 64) \
221 X(BayerGBRG10, 124, Bayer, 1, 1, 1, 1, 2, false, Little, 64) \
222 X(BayerGRBG10, 125, Bayer, 1, 1, 1, 1, 2, false, Little, 64) \
223 X(BayerRGGB10, 126, Bayer, 1, 1, 1, 1, 2, false, Little, 64) \
224 X(Mono16BE, 86, Grey, 1, 1, 1, 1, 2, false, Big, 64)
231#define SCORE_VPF_ENUM_ROW(Name, Value, ...) Name = Value,
232 SCORE_VIDEO_PIXEL_FORMATS(SCORE_VPF_ENUM_ROW)
233#undef SCORE_VPF_ENUM_ROW
239#define SCORE_VPF_COUNT_ROW(...) +1
240 return std::size_t(0 SCORE_VIDEO_PIXEL_FORMATS(SCORE_VPF_COUNT_ROW));
241#undef SCORE_VPF_COUNT_ROW
254 const char* name{
"unknown"};
257 uint8_t planeCount{1};
263 uint16_t blockBytes{};
265 ByteOrder byteOrder{ByteOrder::NA};
272 constexpr bool isPlanar() const noexcept {
return planeCount > 1; }
273 constexpr bool isYuv() const noexcept {
return colorModel == ColorModel::YUV; }
274 constexpr bool isRgb() const noexcept {
return colorModel == ColorModel::RGB; }
278 return colorModel == ColorModel::Grey || colorModel == ColorModel::Bayer;
281 constexpr bool valid() const noexcept {
return blockBytes != 0; }
286constexpr std::size_t
alignUp(std::size_t v, std::size_t a)
noexcept
288 return a <= 1 ? v : ((v + a - 1) / a) * a;
293SCORE_PLUGIN_GFX_EXPORT
294const VideoPixelFormatInfo& formatInfo(VideoPixelFormat f)
noexcept;
297SCORE_PLUGIN_GFX_EXPORT
298const char* formatName(VideoPixelFormat f)
noexcept;
308SCORE_PLUGIN_GFX_EXPORT
309VideoPixelFormat chromaSwappedTwin(VideoPixelFormat f)
noexcept;
313SCORE_PLUGIN_GFX_EXPORT
314const VideoPixelFormatInfo* allFormats(std::size_t& count)
noexcept;
317SCORE_PLUGIN_GFX_EXPORT
318std::size_t rowBytes(VideoPixelFormat f, uint32_t width)
noexcept;
322SCORE_PLUGIN_GFX_EXPORT
324alignedRowBytes(VideoPixelFormat f, uint32_t width, std::size_t alignment)
noexcept;
328SCORE_PLUGIN_GFX_EXPORT
329std::size_t defaultStride(VideoPixelFormat f, uint32_t width)
noexcept;
333SCORE_PLUGIN_GFX_EXPORT
335bytesPerFrame(VideoPixelFormat f, uint32_t width, uint32_t height)
noexcept;