1*f0687c8aSRaman Tenneti #include <map>
2*f0687c8aSRaman Tenneti
3*f0687c8aSRaman Tenneti #include <kms++/pixelformats.h>
4*f0687c8aSRaman Tenneti
5*f0687c8aSRaman Tenneti using namespace std;
6*f0687c8aSRaman Tenneti
7*f0687c8aSRaman Tenneti namespace kms
8*f0687c8aSRaman Tenneti {
9*f0687c8aSRaman Tenneti static const map<PixelFormat, PixelFormatInfo> format_info_array = {
10*f0687c8aSRaman Tenneti /* YUV packed */
11*f0687c8aSRaman Tenneti { PixelFormat::UYVY, {
12*f0687c8aSRaman Tenneti PixelColorType::YUV,
13*f0687c8aSRaman Tenneti 1,
14*f0687c8aSRaman Tenneti { { 16, 2, 1 } },
15*f0687c8aSRaman Tenneti } },
16*f0687c8aSRaman Tenneti { PixelFormat::YUYV, {
17*f0687c8aSRaman Tenneti PixelColorType::YUV,
18*f0687c8aSRaman Tenneti 1,
19*f0687c8aSRaman Tenneti { { 16, 2, 1 } },
20*f0687c8aSRaman Tenneti } },
21*f0687c8aSRaman Tenneti { PixelFormat::YVYU, {
22*f0687c8aSRaman Tenneti PixelColorType::YUV,
23*f0687c8aSRaman Tenneti 1,
24*f0687c8aSRaman Tenneti { { 16, 2, 1 } },
25*f0687c8aSRaman Tenneti } },
26*f0687c8aSRaman Tenneti { PixelFormat::VYUY, {
27*f0687c8aSRaman Tenneti PixelColorType::YUV,
28*f0687c8aSRaman Tenneti 1,
29*f0687c8aSRaman Tenneti { { 16, 2, 1 } },
30*f0687c8aSRaman Tenneti } },
31*f0687c8aSRaman Tenneti /* YUV semi-planar */
32*f0687c8aSRaman Tenneti { PixelFormat::NV12, {
33*f0687c8aSRaman Tenneti PixelColorType::YUV,
34*f0687c8aSRaman Tenneti 2,
35*f0687c8aSRaman Tenneti { {
36*f0687c8aSRaman Tenneti 8,
37*f0687c8aSRaman Tenneti 1,
38*f0687c8aSRaman Tenneti 1,
39*f0687c8aSRaman Tenneti },
40*f0687c8aSRaman Tenneti { 8, 2, 2 } },
41*f0687c8aSRaman Tenneti } },
42*f0687c8aSRaman Tenneti { PixelFormat::NV21, {
43*f0687c8aSRaman Tenneti PixelColorType::YUV,
44*f0687c8aSRaman Tenneti 2,
45*f0687c8aSRaman Tenneti { {
46*f0687c8aSRaman Tenneti 8,
47*f0687c8aSRaman Tenneti 1,
48*f0687c8aSRaman Tenneti 1,
49*f0687c8aSRaman Tenneti },
50*f0687c8aSRaman Tenneti { 8, 2, 2 } },
51*f0687c8aSRaman Tenneti } },
52*f0687c8aSRaman Tenneti { PixelFormat::NV16, {
53*f0687c8aSRaman Tenneti PixelColorType::YUV,
54*f0687c8aSRaman Tenneti 2,
55*f0687c8aSRaman Tenneti { {
56*f0687c8aSRaman Tenneti 8,
57*f0687c8aSRaman Tenneti 1,
58*f0687c8aSRaman Tenneti 1,
59*f0687c8aSRaman Tenneti },
60*f0687c8aSRaman Tenneti { 8, 2, 1 } },
61*f0687c8aSRaman Tenneti } },
62*f0687c8aSRaman Tenneti { PixelFormat::NV61, {
63*f0687c8aSRaman Tenneti PixelColorType::YUV,
64*f0687c8aSRaman Tenneti 2,
65*f0687c8aSRaman Tenneti { {
66*f0687c8aSRaman Tenneti 8,
67*f0687c8aSRaman Tenneti 1,
68*f0687c8aSRaman Tenneti 1,
69*f0687c8aSRaman Tenneti },
70*f0687c8aSRaman Tenneti { 8, 2, 1 } },
71*f0687c8aSRaman Tenneti } },
72*f0687c8aSRaman Tenneti /* YUV planar */
73*f0687c8aSRaman Tenneti { PixelFormat::YUV420, {
74*f0687c8aSRaman Tenneti PixelColorType::YUV,
75*f0687c8aSRaman Tenneti 3,
76*f0687c8aSRaman Tenneti { {
77*f0687c8aSRaman Tenneti 8,
78*f0687c8aSRaman Tenneti 1,
79*f0687c8aSRaman Tenneti 1,
80*f0687c8aSRaman Tenneti },
81*f0687c8aSRaman Tenneti { 8, 2, 2 },
82*f0687c8aSRaman Tenneti { 8, 2, 2 } },
83*f0687c8aSRaman Tenneti } },
84*f0687c8aSRaman Tenneti { PixelFormat::YVU420, {
85*f0687c8aSRaman Tenneti PixelColorType::YUV,
86*f0687c8aSRaman Tenneti 3,
87*f0687c8aSRaman Tenneti { {
88*f0687c8aSRaman Tenneti 8,
89*f0687c8aSRaman Tenneti 1,
90*f0687c8aSRaman Tenneti 1,
91*f0687c8aSRaman Tenneti },
92*f0687c8aSRaman Tenneti { 8, 2, 2 },
93*f0687c8aSRaman Tenneti { 8, 2, 2 } },
94*f0687c8aSRaman Tenneti } },
95*f0687c8aSRaman Tenneti { PixelFormat::YUV422, {
96*f0687c8aSRaman Tenneti PixelColorType::YUV,
97*f0687c8aSRaman Tenneti 3,
98*f0687c8aSRaman Tenneti { {
99*f0687c8aSRaman Tenneti 8,
100*f0687c8aSRaman Tenneti 1,
101*f0687c8aSRaman Tenneti 1,
102*f0687c8aSRaman Tenneti },
103*f0687c8aSRaman Tenneti { 8, 2, 1 },
104*f0687c8aSRaman Tenneti { 8, 2, 1 } },
105*f0687c8aSRaman Tenneti } },
106*f0687c8aSRaman Tenneti { PixelFormat::YVU422, {
107*f0687c8aSRaman Tenneti PixelColorType::YUV,
108*f0687c8aSRaman Tenneti 3,
109*f0687c8aSRaman Tenneti { {
110*f0687c8aSRaman Tenneti 8,
111*f0687c8aSRaman Tenneti 1,
112*f0687c8aSRaman Tenneti 1,
113*f0687c8aSRaman Tenneti },
114*f0687c8aSRaman Tenneti { 8, 2, 1 },
115*f0687c8aSRaman Tenneti { 8, 2, 1 } },
116*f0687c8aSRaman Tenneti } },
117*f0687c8aSRaman Tenneti { PixelFormat::YUV444, {
118*f0687c8aSRaman Tenneti PixelColorType::YUV,
119*f0687c8aSRaman Tenneti 3,
120*f0687c8aSRaman Tenneti { {
121*f0687c8aSRaman Tenneti 8,
122*f0687c8aSRaman Tenneti 1,
123*f0687c8aSRaman Tenneti 1,
124*f0687c8aSRaman Tenneti },
125*f0687c8aSRaman Tenneti { 8, 1, 1 },
126*f0687c8aSRaman Tenneti { 8, 1, 1 } },
127*f0687c8aSRaman Tenneti } },
128*f0687c8aSRaman Tenneti { PixelFormat::YVU444, {
129*f0687c8aSRaman Tenneti PixelColorType::YUV,
130*f0687c8aSRaman Tenneti 3,
131*f0687c8aSRaman Tenneti { {
132*f0687c8aSRaman Tenneti 8,
133*f0687c8aSRaman Tenneti 1,
134*f0687c8aSRaman Tenneti 1,
135*f0687c8aSRaman Tenneti },
136*f0687c8aSRaman Tenneti { 8, 1, 1 },
137*f0687c8aSRaman Tenneti { 8, 1, 1 } },
138*f0687c8aSRaman Tenneti } },
139*f0687c8aSRaman Tenneti /* RGB8 */
140*f0687c8aSRaman Tenneti { PixelFormat::RGB332, {
141*f0687c8aSRaman Tenneti PixelColorType::RGB,
142*f0687c8aSRaman Tenneti 1,
143*f0687c8aSRaman Tenneti { { 8, 1, 1 } },
144*f0687c8aSRaman Tenneti } },
145*f0687c8aSRaman Tenneti /* RGB16 */
146*f0687c8aSRaman Tenneti { PixelFormat::RGB565, {
147*f0687c8aSRaman Tenneti PixelColorType::RGB,
148*f0687c8aSRaman Tenneti 1,
149*f0687c8aSRaman Tenneti { { 16, 1, 1 } },
150*f0687c8aSRaman Tenneti } },
151*f0687c8aSRaman Tenneti { PixelFormat::BGR565, {
152*f0687c8aSRaman Tenneti PixelColorType::RGB,
153*f0687c8aSRaman Tenneti 1,
154*f0687c8aSRaman Tenneti { { 16, 1, 1 } },
155*f0687c8aSRaman Tenneti } },
156*f0687c8aSRaman Tenneti { PixelFormat::XRGB4444, {
157*f0687c8aSRaman Tenneti PixelColorType::RGB,
158*f0687c8aSRaman Tenneti 1,
159*f0687c8aSRaman Tenneti { { 16, 1, 1 } },
160*f0687c8aSRaman Tenneti } },
161*f0687c8aSRaman Tenneti { PixelFormat::XRGB1555, {
162*f0687c8aSRaman Tenneti PixelColorType::RGB,
163*f0687c8aSRaman Tenneti 1,
164*f0687c8aSRaman Tenneti { { 16, 1, 1 } },
165*f0687c8aSRaman Tenneti } },
166*f0687c8aSRaman Tenneti { PixelFormat::ARGB4444, {
167*f0687c8aSRaman Tenneti PixelColorType::RGB,
168*f0687c8aSRaman Tenneti 1,
169*f0687c8aSRaman Tenneti { { 16, 1, 1 } },
170*f0687c8aSRaman Tenneti } },
171*f0687c8aSRaman Tenneti { PixelFormat::ARGB1555, {
172*f0687c8aSRaman Tenneti PixelColorType::RGB,
173*f0687c8aSRaman Tenneti 1,
174*f0687c8aSRaman Tenneti { { 16, 1, 1 } },
175*f0687c8aSRaman Tenneti } },
176*f0687c8aSRaman Tenneti /* RGB24 */
177*f0687c8aSRaman Tenneti { PixelFormat::RGB888, {
178*f0687c8aSRaman Tenneti PixelColorType::RGB,
179*f0687c8aSRaman Tenneti 1,
180*f0687c8aSRaman Tenneti { { 24, 1, 1 } },
181*f0687c8aSRaman Tenneti } },
182*f0687c8aSRaman Tenneti { PixelFormat::BGR888, {
183*f0687c8aSRaman Tenneti PixelColorType::RGB,
184*f0687c8aSRaman Tenneti 1,
185*f0687c8aSRaman Tenneti { { 24, 1, 1 } },
186*f0687c8aSRaman Tenneti } },
187*f0687c8aSRaman Tenneti /* RGB32 */
188*f0687c8aSRaman Tenneti { PixelFormat::XRGB8888, {
189*f0687c8aSRaman Tenneti PixelColorType::RGB,
190*f0687c8aSRaman Tenneti 1,
191*f0687c8aSRaman Tenneti { { 32, 1, 1 } },
192*f0687c8aSRaman Tenneti } },
193*f0687c8aSRaman Tenneti { PixelFormat::XBGR8888, {
194*f0687c8aSRaman Tenneti PixelColorType::RGB,
195*f0687c8aSRaman Tenneti 1,
196*f0687c8aSRaman Tenneti { { 32, 1, 1 } },
197*f0687c8aSRaman Tenneti } },
198*f0687c8aSRaman Tenneti { PixelFormat::RGBX8888, {
199*f0687c8aSRaman Tenneti PixelColorType::RGB,
200*f0687c8aSRaman Tenneti 1,
201*f0687c8aSRaman Tenneti { { 32, 1, 1 } },
202*f0687c8aSRaman Tenneti } },
203*f0687c8aSRaman Tenneti { PixelFormat::BGRX8888, {
204*f0687c8aSRaman Tenneti PixelColorType::RGB,
205*f0687c8aSRaman Tenneti 1,
206*f0687c8aSRaman Tenneti { { 32, 1, 1 } },
207*f0687c8aSRaman Tenneti } },
208*f0687c8aSRaman Tenneti
209*f0687c8aSRaman Tenneti { PixelFormat::ARGB8888, {
210*f0687c8aSRaman Tenneti PixelColorType::RGB,
211*f0687c8aSRaman Tenneti 1,
212*f0687c8aSRaman Tenneti { { 32, 1, 1 } },
213*f0687c8aSRaman Tenneti } },
214*f0687c8aSRaman Tenneti { PixelFormat::ABGR8888, {
215*f0687c8aSRaman Tenneti PixelColorType::RGB,
216*f0687c8aSRaman Tenneti 1,
217*f0687c8aSRaman Tenneti { { 32, 1, 1 } },
218*f0687c8aSRaman Tenneti } },
219*f0687c8aSRaman Tenneti { PixelFormat::RGBA8888, {
220*f0687c8aSRaman Tenneti PixelColorType::RGB,
221*f0687c8aSRaman Tenneti 1,
222*f0687c8aSRaman Tenneti { { 32, 1, 1 } },
223*f0687c8aSRaman Tenneti } },
224*f0687c8aSRaman Tenneti { PixelFormat::BGRA8888, {
225*f0687c8aSRaman Tenneti PixelColorType::RGB,
226*f0687c8aSRaman Tenneti 1,
227*f0687c8aSRaman Tenneti { { 32, 1, 1 } },
228*f0687c8aSRaman Tenneti } },
229*f0687c8aSRaman Tenneti
230*f0687c8aSRaman Tenneti { PixelFormat::XRGB2101010, {
231*f0687c8aSRaman Tenneti PixelColorType::RGB,
232*f0687c8aSRaman Tenneti 1,
233*f0687c8aSRaman Tenneti { { 32, 1, 1 } },
234*f0687c8aSRaman Tenneti } },
235*f0687c8aSRaman Tenneti { PixelFormat::XBGR2101010, {
236*f0687c8aSRaman Tenneti PixelColorType::RGB,
237*f0687c8aSRaman Tenneti 1,
238*f0687c8aSRaman Tenneti { { 32, 1, 1 } },
239*f0687c8aSRaman Tenneti } },
240*f0687c8aSRaman Tenneti { PixelFormat::RGBX1010102, {
241*f0687c8aSRaman Tenneti PixelColorType::RGB,
242*f0687c8aSRaman Tenneti 1,
243*f0687c8aSRaman Tenneti { { 32, 1, 1 } },
244*f0687c8aSRaman Tenneti } },
245*f0687c8aSRaman Tenneti { PixelFormat::BGRX1010102, {
246*f0687c8aSRaman Tenneti PixelColorType::RGB,
247*f0687c8aSRaman Tenneti 1,
248*f0687c8aSRaman Tenneti { { 32, 1, 1 } },
249*f0687c8aSRaman Tenneti } },
250*f0687c8aSRaman Tenneti
251*f0687c8aSRaman Tenneti { PixelFormat::ARGB2101010, {
252*f0687c8aSRaman Tenneti PixelColorType::RGB,
253*f0687c8aSRaman Tenneti 1,
254*f0687c8aSRaman Tenneti { { 32, 1, 1 } },
255*f0687c8aSRaman Tenneti } },
256*f0687c8aSRaman Tenneti { PixelFormat::ABGR2101010, {
257*f0687c8aSRaman Tenneti PixelColorType::RGB,
258*f0687c8aSRaman Tenneti 1,
259*f0687c8aSRaman Tenneti { { 32, 1, 1 } },
260*f0687c8aSRaman Tenneti } },
261*f0687c8aSRaman Tenneti { PixelFormat::RGBA1010102, {
262*f0687c8aSRaman Tenneti PixelColorType::RGB,
263*f0687c8aSRaman Tenneti 1,
264*f0687c8aSRaman Tenneti { { 32, 1, 1 } },
265*f0687c8aSRaman Tenneti } },
266*f0687c8aSRaman Tenneti { PixelFormat::BGRA1010102, {
267*f0687c8aSRaman Tenneti PixelColorType::RGB,
268*f0687c8aSRaman Tenneti 1,
269*f0687c8aSRaman Tenneti { { 32, 1, 1 } },
270*f0687c8aSRaman Tenneti } },
271*f0687c8aSRaman Tenneti };
272*f0687c8aSRaman Tenneti
get_pixel_format_info(PixelFormat format)273*f0687c8aSRaman Tenneti const struct PixelFormatInfo& get_pixel_format_info(PixelFormat format)
274*f0687c8aSRaman Tenneti {
275*f0687c8aSRaman Tenneti if (!format_info_array.count(format))
276*f0687c8aSRaman Tenneti throw invalid_argument("get_pixel_format_info: Unsupported pixelformat");
277*f0687c8aSRaman Tenneti
278*f0687c8aSRaman Tenneti return format_info_array.at(format);
279*f0687c8aSRaman Tenneti }
280*f0687c8aSRaman Tenneti
281*f0687c8aSRaman Tenneti } // namespace kms
282