9#ifndef GP_CONVERT_GEN_H
10#define GP_CONVERT_GEN_H
33#define GP_PIXEL_RGB888_TO_RGB101010_OFFSET(p1, o1, p2, o2) do { \
34 GP_SET_BITS(20+o2, 10, p2,\
35 GP_SCALE_VAL_8_10(GP_GET_BITS(16+o1, 8, p1))); \
36 GP_SET_BITS(10+o2, 10, p2,\
37 GP_SCALE_VAL_8_10(GP_GET_BITS(8+o1, 8, p1))); \
38 GP_SET_BITS(0+o2, 10, p2,\
39 GP_SCALE_VAL_8_10(GP_GET_BITS(0+o1, 8, p1))); \
43#define GP_PIXEL_RGB888_TO_RGB101010(p1, p2) \
44 GP_PIXEL_RGB888_TO_RGB101010_OFFSET(p1, 0, p2, 0)
53#define GP_PIXEL_RGB101010_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
54 GP_SET_BITS(16+o2, 8, p2,\
55 GP_SCALE_VAL_10_8(GP_GET_BITS(20+o1, 10, p1))); \
56 GP_SET_BITS(8+o2, 8, p2,\
57 GP_SCALE_VAL_10_8(GP_GET_BITS(10+o1, 10, p1))); \
58 GP_SET_BITS(0+o2, 8, p2,\
59 GP_SCALE_VAL_10_8(GP_GET_BITS(0+o1, 10, p1))); \
63#define GP_PIXEL_RGB101010_TO_RGB888(p1, p2) \
64 GP_PIXEL_RGB101010_TO_RGB888_OFFSET(p1, 0, p2, 0)
73#define GP_PIXEL_RGB888_TO_xRGB8888_OFFSET(p1, o1, p2, o2) do { \
74 GP_SET_BITS(16+o2, 8, p2,\
75 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1))); \
76 GP_SET_BITS(8+o2, 8, p2,\
77 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1))); \
78 GP_SET_BITS(0+o2, 8, p2,\
79 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
83#define GP_PIXEL_RGB888_TO_xRGB8888(p1, p2) \
84 GP_PIXEL_RGB888_TO_xRGB8888_OFFSET(p1, 0, p2, 0)
93#define GP_PIXEL_xRGB8888_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
94 GP_SET_BITS(16+o2, 8, p2,\
95 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1))); \
96 GP_SET_BITS(8+o2, 8, p2,\
97 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1))); \
98 GP_SET_BITS(0+o2, 8, p2,\
99 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
103#define GP_PIXEL_xRGB8888_TO_RGB888(p1, p2) \
104 GP_PIXEL_xRGB8888_TO_RGB888_OFFSET(p1, 0, p2, 0)
113#define GP_PIXEL_RGB888_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
114 GP_SET_BITS(24+o2, 8, p2,\
115 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1))); \
116 GP_SET_BITS(16+o2, 8, p2,\
117 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1))); \
118 GP_SET_BITS(8+o2, 8, p2,\
119 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
120 GP_SET_BITS(0+o2, 8, p2, 0xff); \
124#define GP_PIXEL_RGB888_TO_RGBA8888(p1, p2) \
125 GP_PIXEL_RGB888_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
134#define GP_PIXEL_RGB888_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
135 GP_SET_BITS(16+o2, 8, p2,\
136 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1))); \
137 GP_SET_BITS(8+o2, 8, p2,\
138 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1))); \
139 GP_SET_BITS(0+o2, 8, p2,\
140 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
144#define GP_PIXEL_RGB888_TO_RGB888(p1, p2) \
145 GP_PIXEL_RGB888_TO_RGB888_OFFSET(p1, 0, p2, 0)
154#define GP_PIXEL_RGB888_TO_BGR888_OFFSET(p1, o1, p2, o2) do { \
155 GP_SET_BITS(16+o2, 8, p2,\
156 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
157 GP_SET_BITS(8+o2, 8, p2,\
158 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1))); \
159 GP_SET_BITS(0+o2, 8, p2,\
160 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1))); \
164#define GP_PIXEL_RGB888_TO_BGR888(p1, p2) \
165 GP_PIXEL_RGB888_TO_BGR888_OFFSET(p1, 0, p2, 0)
174#define GP_PIXEL_BGR888_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
175 GP_SET_BITS(16+o2, 8, p2,\
176 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
177 GP_SET_BITS(8+o2, 8, p2,\
178 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1))); \
179 GP_SET_BITS(0+o2, 8, p2,\
180 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1))); \
184#define GP_PIXEL_BGR888_TO_RGB888(p1, p2) \
185 GP_PIXEL_BGR888_TO_RGB888_OFFSET(p1, 0, p2, 0)
194#define GP_PIXEL_RGB888_TO_RGB555_OFFSET(p1, o1, p2, o2) do { \
195 GP_SET_BITS(10+o2, 5, p2,\
196 GP_SCALE_VAL_8_5(GP_GET_BITS(16+o1, 8, p1))); \
197 GP_SET_BITS(5+o2, 5, p2,\
198 GP_SCALE_VAL_8_5(GP_GET_BITS(8+o1, 8, p1))); \
199 GP_SET_BITS(0+o2, 5, p2,\
200 GP_SCALE_VAL_8_5(GP_GET_BITS(0+o1, 8, p1))); \
204#define GP_PIXEL_RGB888_TO_RGB555(p1, p2) \
205 GP_PIXEL_RGB888_TO_RGB555_OFFSET(p1, 0, p2, 0)
214#define GP_PIXEL_RGB555_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
215 GP_SET_BITS(16+o2, 8, p2,\
216 GP_SCALE_VAL_5_8(GP_GET_BITS(10+o1, 5, p1))); \
217 GP_SET_BITS(8+o2, 8, p2,\
218 GP_SCALE_VAL_5_8(GP_GET_BITS(5+o1, 5, p1))); \
219 GP_SET_BITS(0+o2, 8, p2,\
220 GP_SCALE_VAL_5_8(GP_GET_BITS(0+o1, 5, p1))); \
224#define GP_PIXEL_RGB555_TO_RGB888(p1, p2) \
225 GP_PIXEL_RGB555_TO_RGB888_OFFSET(p1, 0, p2, 0)
234#define GP_PIXEL_RGB888_TO_RGB565_BE_OFFSET(p1, o1, p2, o2) do { \
235 GP_SET_BITS(11+o2, 5, p2,\
236 GP_SCALE_VAL_8_5(GP_GET_BITS(16+o1, 8, p1))); \
237 GP_SET_BITS(5+o2, 6, p2,\
238 GP_SCALE_VAL_8_6(GP_GET_BITS(8+o1, 8, p1))); \
239 GP_SET_BITS(0+o2, 5, p2,\
240 GP_SCALE_VAL_8_5(GP_GET_BITS(0+o1, 8, p1))); \
244#define GP_PIXEL_RGB888_TO_RGB565_BE(p1, p2) \
245 GP_PIXEL_RGB888_TO_RGB565_BE_OFFSET(p1, 0, p2, 0)
254#define GP_PIXEL_RGB565_BE_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
255 GP_SET_BITS(16+o2, 8, p2,\
256 GP_SCALE_VAL_5_8(GP_GET_BITS(11+o1, 5, p1))); \
257 GP_SET_BITS(8+o2, 8, p2,\
258 GP_SCALE_VAL_6_8(GP_GET_BITS(5+o1, 6, p1))); \
259 GP_SET_BITS(0+o2, 8, p2,\
260 GP_SCALE_VAL_5_8(GP_GET_BITS(0+o1, 5, p1))); \
264#define GP_PIXEL_RGB565_BE_TO_RGB888(p1, p2) \
265 GP_PIXEL_RGB565_BE_TO_RGB888_OFFSET(p1, 0, p2, 0)
274#define GP_PIXEL_RGB888_TO_RGB565_LE_OFFSET(p1, o1, p2, o2) do { \
275 GP_SET_BITS(11+o2, 5, p2,\
276 GP_SCALE_VAL_8_5(GP_GET_BITS(16+o1, 8, p1))); \
277 GP_SET_BITS(5+o2, 6, p2,\
278 GP_SCALE_VAL_8_6(GP_GET_BITS(8+o1, 8, p1))); \
279 GP_SET_BITS(0+o2, 5, p2,\
280 GP_SCALE_VAL_8_5(GP_GET_BITS(0+o1, 8, p1))); \
284#define GP_PIXEL_RGB888_TO_RGB565_LE(p1, p2) \
285 GP_PIXEL_RGB888_TO_RGB565_LE_OFFSET(p1, 0, p2, 0)
294#define GP_PIXEL_RGB565_LE_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
295 GP_SET_BITS(16+o2, 8, p2,\
296 GP_SCALE_VAL_5_8(GP_GET_BITS(11+o1, 5, p1))); \
297 GP_SET_BITS(8+o2, 8, p2,\
298 GP_SCALE_VAL_6_8(GP_GET_BITS(5+o1, 6, p1))); \
299 GP_SET_BITS(0+o2, 8, p2,\
300 GP_SCALE_VAL_5_8(GP_GET_BITS(0+o1, 5, p1))); \
304#define GP_PIXEL_RGB565_LE_TO_RGB888(p1, p2) \
305 GP_PIXEL_RGB565_LE_TO_RGB888_OFFSET(p1, 0, p2, 0)
314#define GP_PIXEL_RGB888_TO_RGB666_OFFSET(p1, o1, p2, o2) do { \
315 GP_SET_BITS(12+o2, 6, p2,\
316 GP_SCALE_VAL_8_6(GP_GET_BITS(16+o1, 8, p1))); \
317 GP_SET_BITS(6+o2, 6, p2,\
318 GP_SCALE_VAL_8_6(GP_GET_BITS(8+o1, 8, p1))); \
319 GP_SET_BITS(0+o2, 6, p2,\
320 GP_SCALE_VAL_8_6(GP_GET_BITS(0+o1, 8, p1))); \
324#define GP_PIXEL_RGB888_TO_RGB666(p1, p2) \
325 GP_PIXEL_RGB888_TO_RGB666_OFFSET(p1, 0, p2, 0)
334#define GP_PIXEL_RGB666_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
335 GP_SET_BITS(16+o2, 8, p2,\
336 GP_SCALE_VAL_6_8(GP_GET_BITS(12+o1, 6, p1))); \
337 GP_SET_BITS(8+o2, 8, p2,\
338 GP_SCALE_VAL_6_8(GP_GET_BITS(6+o1, 6, p1))); \
339 GP_SET_BITS(0+o2, 8, p2,\
340 GP_SCALE_VAL_6_8(GP_GET_BITS(0+o1, 6, p1))); \
344#define GP_PIXEL_RGB666_TO_RGB888(p1, p2) \
345 GP_PIXEL_RGB666_TO_RGB888_OFFSET(p1, 0, p2, 0)
354#define GP_PIXEL_RGB888_TO_RGB332_OFFSET(p1, o1, p2, o2) do { \
355 GP_SET_BITS(5+o2, 3, p2,\
356 GP_SCALE_VAL_8_3(GP_GET_BITS(16+o1, 8, p1))); \
357 GP_SET_BITS(2+o2, 3, p2,\
358 GP_SCALE_VAL_8_3(GP_GET_BITS(8+o1, 8, p1))); \
359 GP_SET_BITS(0+o2, 2, p2,\
360 GP_SCALE_VAL_8_2(GP_GET_BITS(0+o1, 8, p1))); \
364#define GP_PIXEL_RGB888_TO_RGB332(p1, p2) \
365 GP_PIXEL_RGB888_TO_RGB332_OFFSET(p1, 0, p2, 0)
374#define GP_PIXEL_RGB332_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
375 GP_SET_BITS(16+o2, 8, p2,\
376 GP_SCALE_VAL_3_8(GP_GET_BITS(5+o1, 3, p1))); \
377 GP_SET_BITS(8+o2, 8, p2,\
378 GP_SCALE_VAL_3_8(GP_GET_BITS(2+o1, 3, p1))); \
379 GP_SET_BITS(0+o2, 8, p2,\
380 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1))); \
384#define GP_PIXEL_RGB332_TO_RGB888(p1, p2) \
385 GP_PIXEL_RGB332_TO_RGB888_OFFSET(p1, 0, p2, 0)
394#define GP_PIXEL_RGB888_TO_CMYK8888_OFFSET(p1, o1, p2, o2) do { \
395 gp_pixel gp_r = GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1)); \
396 gp_pixel gp_g = GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1)); \
397 gp_pixel gp_b = GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1)); \
398 gp_pixel gp_k = GP_MAX3(gp_r, gp_g, gp_b); \
399 GP_SET_BITS(0+o2, 8, p2, GP_SCALE_VAL_8_8((gp_k - gp_r))); \
400 GP_SET_BITS(8+o2, 8, p2, GP_SCALE_VAL_8_8((gp_k - gp_g))); \
401 GP_SET_BITS(16+o2, 8, p2, GP_SCALE_VAL_8_8((gp_k - gp_b))); \
402 GP_SET_BITS(24+o2, 8, p2, GP_SCALE_VAL_8_8(255 - gp_k)); \
406#define GP_PIXEL_RGB888_TO_CMYK8888(p1, p2) \
407 GP_PIXEL_RGB888_TO_CMYK8888_OFFSET(p1, 0, p2, 0)
416#define GP_PIXEL_CMYK8888_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
417 GP_SET_BITS(16+o2, 8, p2,\
418 ((0xff * (0xff - GP_GET_BITS(24+o1, 8, p1)) * \
419 (0xff - GP_GET_BITS(0+o1, 8, p1)))) / (0xff * 0xff) \
421 GP_SET_BITS(8+o2, 8, p2,\
422 ((0xff * (0xff - GP_GET_BITS(24+o1, 8, p1)) * \
423 (0xff - GP_GET_BITS(8+o1, 8, p1)))) / (0xff * 0xff) \
425 GP_SET_BITS(0+o2, 8, p2,\
426 ((0xff * (0xff - GP_GET_BITS(24+o1, 8, p1)) * \
427 (0xff - GP_GET_BITS(16+o1, 8, p1)))) / (0xff * 0xff) \
432#define GP_PIXEL_CMYK8888_TO_RGB888(p1, p2) \
433 GP_PIXEL_CMYK8888_TO_RGB888_OFFSET(p1, 0, p2, 0)
442#define GP_PIXEL_RGB888_TO_G1_DB_OFFSET(p1, o1, p2, o2) do { \
443 GP_SET_BITS(0+o2, 1, p2, ( \
444 GP_SCALE_VAL_8_1(GP_GET_BITS(16+o1, 8, p1)) + \
445 GP_SCALE_VAL_8_1(GP_GET_BITS(8+o1, 8, p1)) + \
446 GP_SCALE_VAL_8_1(GP_GET_BITS(0+o1, 8, p1)) + \
451#define GP_PIXEL_RGB888_TO_G1_DB(p1, p2) \
452 GP_PIXEL_RGB888_TO_G1_DB_OFFSET(p1, 0, p2, 0)
461#define GP_PIXEL_G1_DB_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
462 GP_SET_BITS(16+o2, 8, p2,\
463 GP_SCALE_VAL_1_8(GP_GET_BITS(0+o1, 1, p1))); \
464 GP_SET_BITS(8+o2, 8, p2,\
465 GP_SCALE_VAL_1_8(GP_GET_BITS(0+o1, 1, p1))); \
466 GP_SET_BITS(0+o2, 8, p2,\
467 GP_SCALE_VAL_1_8(GP_GET_BITS(0+o1, 1, p1))); \
471#define GP_PIXEL_G1_DB_TO_RGB888(p1, p2) \
472 GP_PIXEL_G1_DB_TO_RGB888_OFFSET(p1, 0, p2, 0)
481#define GP_PIXEL_RGB888_TO_G2_DB_OFFSET(p1, o1, p2, o2) do { \
482 GP_SET_BITS(0+o2, 2, p2, ( \
483 GP_SCALE_VAL_8_2(GP_GET_BITS(16+o1, 8, p1)) + \
484 GP_SCALE_VAL_8_2(GP_GET_BITS(8+o1, 8, p1)) + \
485 GP_SCALE_VAL_8_2(GP_GET_BITS(0+o1, 8, p1)) + \
490#define GP_PIXEL_RGB888_TO_G2_DB(p1, p2) \
491 GP_PIXEL_RGB888_TO_G2_DB_OFFSET(p1, 0, p2, 0)
500#define GP_PIXEL_G2_DB_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
501 GP_SET_BITS(16+o2, 8, p2,\
502 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1))); \
503 GP_SET_BITS(8+o2, 8, p2,\
504 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1))); \
505 GP_SET_BITS(0+o2, 8, p2,\
506 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1))); \
510#define GP_PIXEL_G2_DB_TO_RGB888(p1, p2) \
511 GP_PIXEL_G2_DB_TO_RGB888_OFFSET(p1, 0, p2, 0)
520#define GP_PIXEL_RGB888_TO_G4_DB_OFFSET(p1, o1, p2, o2) do { \
521 GP_SET_BITS(0+o2, 4, p2, ( \
522 GP_SCALE_VAL_8_4(GP_GET_BITS(16+o1, 8, p1)) + \
523 GP_SCALE_VAL_8_4(GP_GET_BITS(8+o1, 8, p1)) + \
524 GP_SCALE_VAL_8_4(GP_GET_BITS(0+o1, 8, p1)) + \
529#define GP_PIXEL_RGB888_TO_G4_DB(p1, p2) \
530 GP_PIXEL_RGB888_TO_G4_DB_OFFSET(p1, 0, p2, 0)
539#define GP_PIXEL_G4_DB_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
540 GP_SET_BITS(16+o2, 8, p2,\
541 GP_SCALE_VAL_4_8(GP_GET_BITS(0+o1, 4, p1))); \
542 GP_SET_BITS(8+o2, 8, p2,\
543 GP_SCALE_VAL_4_8(GP_GET_BITS(0+o1, 4, p1))); \
544 GP_SET_BITS(0+o2, 8, p2,\
545 GP_SCALE_VAL_4_8(GP_GET_BITS(0+o1, 4, p1))); \
549#define GP_PIXEL_G4_DB_TO_RGB888(p1, p2) \
550 GP_PIXEL_G4_DB_TO_RGB888_OFFSET(p1, 0, p2, 0)
559#define GP_PIXEL_RGB888_TO_G1_UB_OFFSET(p1, o1, p2, o2) do { \
560 GP_SET_BITS(0+o2, 1, p2, ( \
561 GP_SCALE_VAL_8_1(GP_GET_BITS(16+o1, 8, p1)) + \
562 GP_SCALE_VAL_8_1(GP_GET_BITS(8+o1, 8, p1)) + \
563 GP_SCALE_VAL_8_1(GP_GET_BITS(0+o1, 8, p1)) + \
568#define GP_PIXEL_RGB888_TO_G1_UB(p1, p2) \
569 GP_PIXEL_RGB888_TO_G1_UB_OFFSET(p1, 0, p2, 0)
578#define GP_PIXEL_G1_UB_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
579 GP_SET_BITS(16+o2, 8, p2,\
580 GP_SCALE_VAL_1_8(GP_GET_BITS(0+o1, 1, p1))); \
581 GP_SET_BITS(8+o2, 8, p2,\
582 GP_SCALE_VAL_1_8(GP_GET_BITS(0+o1, 1, p1))); \
583 GP_SET_BITS(0+o2, 8, p2,\
584 GP_SCALE_VAL_1_8(GP_GET_BITS(0+o1, 1, p1))); \
588#define GP_PIXEL_G1_UB_TO_RGB888(p1, p2) \
589 GP_PIXEL_G1_UB_TO_RGB888_OFFSET(p1, 0, p2, 0)
598#define GP_PIXEL_RGB888_TO_G2_UB_OFFSET(p1, o1, p2, o2) do { \
599 GP_SET_BITS(0+o2, 2, p2, ( \
600 GP_SCALE_VAL_8_2(GP_GET_BITS(16+o1, 8, p1)) + \
601 GP_SCALE_VAL_8_2(GP_GET_BITS(8+o1, 8, p1)) + \
602 GP_SCALE_VAL_8_2(GP_GET_BITS(0+o1, 8, p1)) + \
607#define GP_PIXEL_RGB888_TO_G2_UB(p1, p2) \
608 GP_PIXEL_RGB888_TO_G2_UB_OFFSET(p1, 0, p2, 0)
617#define GP_PIXEL_G2_UB_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
618 GP_SET_BITS(16+o2, 8, p2,\
619 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1))); \
620 GP_SET_BITS(8+o2, 8, p2,\
621 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1))); \
622 GP_SET_BITS(0+o2, 8, p2,\
623 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1))); \
627#define GP_PIXEL_G2_UB_TO_RGB888(p1, p2) \
628 GP_PIXEL_G2_UB_TO_RGB888_OFFSET(p1, 0, p2, 0)
637#define GP_PIXEL_RGB888_TO_G4_UB_OFFSET(p1, o1, p2, o2) do { \
638 GP_SET_BITS(0+o2, 4, p2, ( \
639 GP_SCALE_VAL_8_4(GP_GET_BITS(16+o1, 8, p1)) + \
640 GP_SCALE_VAL_8_4(GP_GET_BITS(8+o1, 8, p1)) + \
641 GP_SCALE_VAL_8_4(GP_GET_BITS(0+o1, 8, p1)) + \
646#define GP_PIXEL_RGB888_TO_G4_UB(p1, p2) \
647 GP_PIXEL_RGB888_TO_G4_UB_OFFSET(p1, 0, p2, 0)
656#define GP_PIXEL_G4_UB_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
657 GP_SET_BITS(16+o2, 8, p2,\
658 GP_SCALE_VAL_4_8(GP_GET_BITS(0+o1, 4, p1))); \
659 GP_SET_BITS(8+o2, 8, p2,\
660 GP_SCALE_VAL_4_8(GP_GET_BITS(0+o1, 4, p1))); \
661 GP_SET_BITS(0+o2, 8, p2,\
662 GP_SCALE_VAL_4_8(GP_GET_BITS(0+o1, 4, p1))); \
666#define GP_PIXEL_G4_UB_TO_RGB888(p1, p2) \
667 GP_PIXEL_G4_UB_TO_RGB888_OFFSET(p1, 0, p2, 0)
676#define GP_PIXEL_RGB888_TO_G8_OFFSET(p1, o1, p2, o2) do { \
677 GP_SET_BITS(0+o2, 8, p2, ( \
678 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1)) + \
679 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1)) + \
680 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1)) + \
685#define GP_PIXEL_RGB888_TO_G8(p1, p2) \
686 GP_PIXEL_RGB888_TO_G8_OFFSET(p1, 0, p2, 0)
695#define GP_PIXEL_RGB888_TO_GA88_OFFSET(p1, o1, p2, o2) do { \
696 GP_SET_BITS(0+o2, 8, p2, ( \
697 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1)) + \
698 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1)) + \
699 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1)) + \
701 GP_SET_BITS(8+o2, 8, p2, 0xff); \
705#define GP_PIXEL_RGB888_TO_GA88(p1, p2) \
706 GP_PIXEL_RGB888_TO_GA88_OFFSET(p1, 0, p2, 0)
715#define GP_PIXEL_GA88_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
716 GP_SET_BITS(16+o2, 8, p2,\
717 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
718 GP_SET_BITS(8+o2, 8, p2,\
719 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
720 GP_SET_BITS(0+o2, 8, p2,\
721 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
725#define GP_PIXEL_GA88_TO_RGB888(p1, p2) \
726 GP_PIXEL_GA88_TO_RGB888_OFFSET(p1, 0, p2, 0)
735#define GP_PIXEL_RGB888_TO_G16_OFFSET(p1, o1, p2, o2) do { \
736 GP_SET_BITS(0+o2, 16, p2, ( \
737 GP_SCALE_VAL_8_16(GP_GET_BITS(16+o1, 8, p1)) + \
738 GP_SCALE_VAL_8_16(GP_GET_BITS(8+o1, 8, p1)) + \
739 GP_SCALE_VAL_8_16(GP_GET_BITS(0+o1, 8, p1)) + \
744#define GP_PIXEL_RGB888_TO_G16(p1, p2) \
745 GP_PIXEL_RGB888_TO_G16_OFFSET(p1, 0, p2, 0)
754#define GP_PIXEL_G16_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
755 GP_SET_BITS(16+o2, 8, p2,\
756 GP_SCALE_VAL_16_8(GP_GET_BITS(0+o1, 16, p1))); \
757 GP_SET_BITS(8+o2, 8, p2,\
758 GP_SCALE_VAL_16_8(GP_GET_BITS(0+o1, 16, p1))); \
759 GP_SET_BITS(0+o2, 8, p2,\
760 GP_SCALE_VAL_16_8(GP_GET_BITS(0+o1, 16, p1))); \
764#define GP_PIXEL_G16_TO_RGB888(p1, p2) \
765 GP_PIXEL_G16_TO_RGB888_OFFSET(p1, 0, p2, 0)
799#define GP_PIXEL_RGBA8888_TO_RGB101010_OFFSET(p1, o1, p2, o2) do { \
800 GP_SET_BITS(20+o2, 10, p2,\
801 GP_SCALE_VAL_8_10(GP_GET_BITS(24+o1, 8, p1))); \
802 GP_SET_BITS(10+o2, 10, p2,\
803 GP_SCALE_VAL_8_10(GP_GET_BITS(16+o1, 8, p1))); \
804 GP_SET_BITS(0+o2, 10, p2,\
805 GP_SCALE_VAL_8_10(GP_GET_BITS(8+o1, 8, p1))); \
809#define GP_PIXEL_RGBA8888_TO_RGB101010(p1, p2) \
810 GP_PIXEL_RGBA8888_TO_RGB101010_OFFSET(p1, 0, p2, 0)
819#define GP_PIXEL_RGB101010_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
820 GP_SET_BITS(24+o2, 8, p2,\
821 GP_SCALE_VAL_10_8(GP_GET_BITS(20+o1, 10, p1))); \
822 GP_SET_BITS(16+o2, 8, p2,\
823 GP_SCALE_VAL_10_8(GP_GET_BITS(10+o1, 10, p1))); \
824 GP_SET_BITS(8+o2, 8, p2,\
825 GP_SCALE_VAL_10_8(GP_GET_BITS(0+o1, 10, p1))); \
826 GP_SET_BITS(0+o2, 8, p2, 0xff); \
830#define GP_PIXEL_RGB101010_TO_RGBA8888(p1, p2) \
831 GP_PIXEL_RGB101010_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
840#define GP_PIXEL_RGBA8888_TO_xRGB8888_OFFSET(p1, o1, p2, o2) do { \
841 GP_SET_BITS(16+o2, 8, p2,\
842 GP_SCALE_VAL_8_8(GP_GET_BITS(24+o1, 8, p1))); \
843 GP_SET_BITS(8+o2, 8, p2,\
844 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1))); \
845 GP_SET_BITS(0+o2, 8, p2,\
846 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1))); \
850#define GP_PIXEL_RGBA8888_TO_xRGB8888(p1, p2) \
851 GP_PIXEL_RGBA8888_TO_xRGB8888_OFFSET(p1, 0, p2, 0)
860#define GP_PIXEL_xRGB8888_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
861 GP_SET_BITS(24+o2, 8, p2,\
862 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1))); \
863 GP_SET_BITS(16+o2, 8, p2,\
864 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1))); \
865 GP_SET_BITS(8+o2, 8, p2,\
866 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
867 GP_SET_BITS(0+o2, 8, p2, 0xff); \
871#define GP_PIXEL_xRGB8888_TO_RGBA8888(p1, p2) \
872 GP_PIXEL_xRGB8888_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
881#define GP_PIXEL_RGBA8888_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
882 GP_SET_BITS(24+o2, 8, p2,\
883 GP_SCALE_VAL_8_8(GP_GET_BITS(24+o1, 8, p1))); \
884 GP_SET_BITS(16+o2, 8, p2,\
885 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1))); \
886 GP_SET_BITS(8+o2, 8, p2,\
887 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1))); \
888 GP_SET_BITS(0+o2, 8, p2,\
889 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
893#define GP_PIXEL_RGBA8888_TO_RGBA8888(p1, p2) \
894 GP_PIXEL_RGBA8888_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
903#define GP_PIXEL_RGBA8888_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
904 GP_SET_BITS(16+o2, 8, p2,\
905 GP_SCALE_VAL_8_8(GP_GET_BITS(24+o1, 8, p1))); \
906 GP_SET_BITS(8+o2, 8, p2,\
907 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1))); \
908 GP_SET_BITS(0+o2, 8, p2,\
909 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1))); \
913#define GP_PIXEL_RGBA8888_TO_RGB888(p1, p2) \
914 GP_PIXEL_RGBA8888_TO_RGB888_OFFSET(p1, 0, p2, 0)
923#define GP_PIXEL_RGBA8888_TO_BGR888_OFFSET(p1, o1, p2, o2) do { \
924 GP_SET_BITS(16+o2, 8, p2,\
925 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1))); \
926 GP_SET_BITS(8+o2, 8, p2,\
927 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1))); \
928 GP_SET_BITS(0+o2, 8, p2,\
929 GP_SCALE_VAL_8_8(GP_GET_BITS(24+o1, 8, p1))); \
933#define GP_PIXEL_RGBA8888_TO_BGR888(p1, p2) \
934 GP_PIXEL_RGBA8888_TO_BGR888_OFFSET(p1, 0, p2, 0)
943#define GP_PIXEL_BGR888_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
944 GP_SET_BITS(24+o2, 8, p2,\
945 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
946 GP_SET_BITS(16+o2, 8, p2,\
947 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1))); \
948 GP_SET_BITS(8+o2, 8, p2,\
949 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1))); \
950 GP_SET_BITS(0+o2, 8, p2, 0xff); \
954#define GP_PIXEL_BGR888_TO_RGBA8888(p1, p2) \
955 GP_PIXEL_BGR888_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
964#define GP_PIXEL_RGBA8888_TO_RGB555_OFFSET(p1, o1, p2, o2) do { \
965 GP_SET_BITS(10+o2, 5, p2,\
966 GP_SCALE_VAL_8_5(GP_GET_BITS(24+o1, 8, p1))); \
967 GP_SET_BITS(5+o2, 5, p2,\
968 GP_SCALE_VAL_8_5(GP_GET_BITS(16+o1, 8, p1))); \
969 GP_SET_BITS(0+o2, 5, p2,\
970 GP_SCALE_VAL_8_5(GP_GET_BITS(8+o1, 8, p1))); \
974#define GP_PIXEL_RGBA8888_TO_RGB555(p1, p2) \
975 GP_PIXEL_RGBA8888_TO_RGB555_OFFSET(p1, 0, p2, 0)
984#define GP_PIXEL_RGB555_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
985 GP_SET_BITS(24+o2, 8, p2,\
986 GP_SCALE_VAL_5_8(GP_GET_BITS(10+o1, 5, p1))); \
987 GP_SET_BITS(16+o2, 8, p2,\
988 GP_SCALE_VAL_5_8(GP_GET_BITS(5+o1, 5, p1))); \
989 GP_SET_BITS(8+o2, 8, p2,\
990 GP_SCALE_VAL_5_8(GP_GET_BITS(0+o1, 5, p1))); \
991 GP_SET_BITS(0+o2, 8, p2, 0xff); \
995#define GP_PIXEL_RGB555_TO_RGBA8888(p1, p2) \
996 GP_PIXEL_RGB555_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
1005#define GP_PIXEL_RGBA8888_TO_RGB565_BE_OFFSET(p1, o1, p2, o2) do { \
1006 GP_SET_BITS(11+o2, 5, p2,\
1007 GP_SCALE_VAL_8_5(GP_GET_BITS(24+o1, 8, p1))); \
1008 GP_SET_BITS(5+o2, 6, p2,\
1009 GP_SCALE_VAL_8_6(GP_GET_BITS(16+o1, 8, p1))); \
1010 GP_SET_BITS(0+o2, 5, p2,\
1011 GP_SCALE_VAL_8_5(GP_GET_BITS(8+o1, 8, p1))); \
1015#define GP_PIXEL_RGBA8888_TO_RGB565_BE(p1, p2) \
1016 GP_PIXEL_RGBA8888_TO_RGB565_BE_OFFSET(p1, 0, p2, 0)
1025#define GP_PIXEL_RGB565_BE_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
1026 GP_SET_BITS(24+o2, 8, p2,\
1027 GP_SCALE_VAL_5_8(GP_GET_BITS(11+o1, 5, p1))); \
1028 GP_SET_BITS(16+o2, 8, p2,\
1029 GP_SCALE_VAL_6_8(GP_GET_BITS(5+o1, 6, p1))); \
1030 GP_SET_BITS(8+o2, 8, p2,\
1031 GP_SCALE_VAL_5_8(GP_GET_BITS(0+o1, 5, p1))); \
1032 GP_SET_BITS(0+o2, 8, p2, 0xff); \
1036#define GP_PIXEL_RGB565_BE_TO_RGBA8888(p1, p2) \
1037 GP_PIXEL_RGB565_BE_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
1046#define GP_PIXEL_RGBA8888_TO_RGB565_LE_OFFSET(p1, o1, p2, o2) do { \
1047 GP_SET_BITS(11+o2, 5, p2,\
1048 GP_SCALE_VAL_8_5(GP_GET_BITS(24+o1, 8, p1))); \
1049 GP_SET_BITS(5+o2, 6, p2,\
1050 GP_SCALE_VAL_8_6(GP_GET_BITS(16+o1, 8, p1))); \
1051 GP_SET_BITS(0+o2, 5, p2,\
1052 GP_SCALE_VAL_8_5(GP_GET_BITS(8+o1, 8, p1))); \
1056#define GP_PIXEL_RGBA8888_TO_RGB565_LE(p1, p2) \
1057 GP_PIXEL_RGBA8888_TO_RGB565_LE_OFFSET(p1, 0, p2, 0)
1066#define GP_PIXEL_RGB565_LE_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
1067 GP_SET_BITS(24+o2, 8, p2,\
1068 GP_SCALE_VAL_5_8(GP_GET_BITS(11+o1, 5, p1))); \
1069 GP_SET_BITS(16+o2, 8, p2,\
1070 GP_SCALE_VAL_6_8(GP_GET_BITS(5+o1, 6, p1))); \
1071 GP_SET_BITS(8+o2, 8, p2,\
1072 GP_SCALE_VAL_5_8(GP_GET_BITS(0+o1, 5, p1))); \
1073 GP_SET_BITS(0+o2, 8, p2, 0xff); \
1077#define GP_PIXEL_RGB565_LE_TO_RGBA8888(p1, p2) \
1078 GP_PIXEL_RGB565_LE_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
1087#define GP_PIXEL_RGBA8888_TO_RGB666_OFFSET(p1, o1, p2, o2) do { \
1088 GP_SET_BITS(12+o2, 6, p2,\
1089 GP_SCALE_VAL_8_6(GP_GET_BITS(24+o1, 8, p1))); \
1090 GP_SET_BITS(6+o2, 6, p2,\
1091 GP_SCALE_VAL_8_6(GP_GET_BITS(16+o1, 8, p1))); \
1092 GP_SET_BITS(0+o2, 6, p2,\
1093 GP_SCALE_VAL_8_6(GP_GET_BITS(8+o1, 8, p1))); \
1097#define GP_PIXEL_RGBA8888_TO_RGB666(p1, p2) \
1098 GP_PIXEL_RGBA8888_TO_RGB666_OFFSET(p1, 0, p2, 0)
1107#define GP_PIXEL_RGB666_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
1108 GP_SET_BITS(24+o2, 8, p2,\
1109 GP_SCALE_VAL_6_8(GP_GET_BITS(12+o1, 6, p1))); \
1110 GP_SET_BITS(16+o2, 8, p2,\
1111 GP_SCALE_VAL_6_8(GP_GET_BITS(6+o1, 6, p1))); \
1112 GP_SET_BITS(8+o2, 8, p2,\
1113 GP_SCALE_VAL_6_8(GP_GET_BITS(0+o1, 6, p1))); \
1114 GP_SET_BITS(0+o2, 8, p2, 0xff); \
1118#define GP_PIXEL_RGB666_TO_RGBA8888(p1, p2) \
1119 GP_PIXEL_RGB666_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
1128#define GP_PIXEL_RGBA8888_TO_RGB332_OFFSET(p1, o1, p2, o2) do { \
1129 GP_SET_BITS(5+o2, 3, p2,\
1130 GP_SCALE_VAL_8_3(GP_GET_BITS(24+o1, 8, p1))); \
1131 GP_SET_BITS(2+o2, 3, p2,\
1132 GP_SCALE_VAL_8_3(GP_GET_BITS(16+o1, 8, p1))); \
1133 GP_SET_BITS(0+o2, 2, p2,\
1134 GP_SCALE_VAL_8_2(GP_GET_BITS(8+o1, 8, p1))); \
1138#define GP_PIXEL_RGBA8888_TO_RGB332(p1, p2) \
1139 GP_PIXEL_RGBA8888_TO_RGB332_OFFSET(p1, 0, p2, 0)
1148#define GP_PIXEL_RGB332_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
1149 GP_SET_BITS(24+o2, 8, p2,\
1150 GP_SCALE_VAL_3_8(GP_GET_BITS(5+o1, 3, p1))); \
1151 GP_SET_BITS(16+o2, 8, p2,\
1152 GP_SCALE_VAL_3_8(GP_GET_BITS(2+o1, 3, p1))); \
1153 GP_SET_BITS(8+o2, 8, p2,\
1154 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1))); \
1155 GP_SET_BITS(0+o2, 8, p2, 0xff); \
1159#define GP_PIXEL_RGB332_TO_RGBA8888(p1, p2) \
1160 GP_PIXEL_RGB332_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
1169#define GP_PIXEL_RGBA8888_TO_CMYK8888_OFFSET(p1, o1, p2, o2) do { \
1170 gp_pixel gp_r = GP_SCALE_VAL_8_8(GP_GET_BITS(24+o1, 8, p1)); \
1171 gp_pixel gp_g = GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1)); \
1172 gp_pixel gp_b = GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1)); \
1173 gp_pixel gp_k = GP_MAX3(gp_r, gp_g, gp_b); \
1174 GP_SET_BITS(0+o2, 8, p2, GP_SCALE_VAL_8_8((gp_k - gp_r))); \
1175 GP_SET_BITS(8+o2, 8, p2, GP_SCALE_VAL_8_8((gp_k - gp_g))); \
1176 GP_SET_BITS(16+o2, 8, p2, GP_SCALE_VAL_8_8((gp_k - gp_b))); \
1177 GP_SET_BITS(24+o2, 8, p2, GP_SCALE_VAL_8_8(255 - gp_k)); \
1181#define GP_PIXEL_RGBA8888_TO_CMYK8888(p1, p2) \
1182 GP_PIXEL_RGBA8888_TO_CMYK8888_OFFSET(p1, 0, p2, 0)
1191#define GP_PIXEL_CMYK8888_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
1192 GP_SET_BITS(24+o2, 8, p2,\
1193 ((0xff * (0xff - GP_GET_BITS(24+o1, 8, p1)) * \
1194 (0xff - GP_GET_BITS(0+o1, 8, p1)))) / (0xff * 0xff) \
1196 GP_SET_BITS(16+o2, 8, p2,\
1197 ((0xff * (0xff - GP_GET_BITS(24+o1, 8, p1)) * \
1198 (0xff - GP_GET_BITS(8+o1, 8, p1)))) / (0xff * 0xff) \
1200 GP_SET_BITS(8+o2, 8, p2,\
1201 ((0xff * (0xff - GP_GET_BITS(24+o1, 8, p1)) * \
1202 (0xff - GP_GET_BITS(16+o1, 8, p1)))) / (0xff * 0xff) \
1204 GP_SET_BITS(0+o2, 8, p2, 0xff); \
1208#define GP_PIXEL_CMYK8888_TO_RGBA8888(p1, p2) \
1209 GP_PIXEL_CMYK8888_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
1218#define GP_PIXEL_RGBA8888_TO_G1_DB_OFFSET(p1, o1, p2, o2) do { \
1219 GP_SET_BITS(0+o2, 1, p2, ( \
1220 GP_SCALE_VAL_8_1(GP_GET_BITS(24+o1, 8, p1)) + \
1221 GP_SCALE_VAL_8_1(GP_GET_BITS(16+o1, 8, p1)) + \
1222 GP_SCALE_VAL_8_1(GP_GET_BITS(8+o1, 8, p1)) + \
1227#define GP_PIXEL_RGBA8888_TO_G1_DB(p1, p2) \
1228 GP_PIXEL_RGBA8888_TO_G1_DB_OFFSET(p1, 0, p2, 0)
1237#define GP_PIXEL_G1_DB_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
1238 GP_SET_BITS(24+o2, 8, p2,\
1239 GP_SCALE_VAL_1_8(GP_GET_BITS(0+o1, 1, p1))); \
1240 GP_SET_BITS(16+o2, 8, p2,\
1241 GP_SCALE_VAL_1_8(GP_GET_BITS(0+o1, 1, p1))); \
1242 GP_SET_BITS(8+o2, 8, p2,\
1243 GP_SCALE_VAL_1_8(GP_GET_BITS(0+o1, 1, p1))); \
1244 GP_SET_BITS(0+o2, 8, p2, 0xff); \
1248#define GP_PIXEL_G1_DB_TO_RGBA8888(p1, p2) \
1249 GP_PIXEL_G1_DB_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
1258#define GP_PIXEL_RGBA8888_TO_G2_DB_OFFSET(p1, o1, p2, o2) do { \
1259 GP_SET_BITS(0+o2, 2, p2, ( \
1260 GP_SCALE_VAL_8_2(GP_GET_BITS(24+o1, 8, p1)) + \
1261 GP_SCALE_VAL_8_2(GP_GET_BITS(16+o1, 8, p1)) + \
1262 GP_SCALE_VAL_8_2(GP_GET_BITS(8+o1, 8, p1)) + \
1267#define GP_PIXEL_RGBA8888_TO_G2_DB(p1, p2) \
1268 GP_PIXEL_RGBA8888_TO_G2_DB_OFFSET(p1, 0, p2, 0)
1277#define GP_PIXEL_G2_DB_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
1278 GP_SET_BITS(24+o2, 8, p2,\
1279 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1))); \
1280 GP_SET_BITS(16+o2, 8, p2,\
1281 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1))); \
1282 GP_SET_BITS(8+o2, 8, p2,\
1283 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1))); \
1284 GP_SET_BITS(0+o2, 8, p2, 0xff); \
1288#define GP_PIXEL_G2_DB_TO_RGBA8888(p1, p2) \
1289 GP_PIXEL_G2_DB_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
1298#define GP_PIXEL_RGBA8888_TO_G4_DB_OFFSET(p1, o1, p2, o2) do { \
1299 GP_SET_BITS(0+o2, 4, p2, ( \
1300 GP_SCALE_VAL_8_4(GP_GET_BITS(24+o1, 8, p1)) + \
1301 GP_SCALE_VAL_8_4(GP_GET_BITS(16+o1, 8, p1)) + \
1302 GP_SCALE_VAL_8_4(GP_GET_BITS(8+o1, 8, p1)) + \
1307#define GP_PIXEL_RGBA8888_TO_G4_DB(p1, p2) \
1308 GP_PIXEL_RGBA8888_TO_G4_DB_OFFSET(p1, 0, p2, 0)
1317#define GP_PIXEL_G4_DB_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
1318 GP_SET_BITS(24+o2, 8, p2,\
1319 GP_SCALE_VAL_4_8(GP_GET_BITS(0+o1, 4, p1))); \
1320 GP_SET_BITS(16+o2, 8, p2,\
1321 GP_SCALE_VAL_4_8(GP_GET_BITS(0+o1, 4, p1))); \
1322 GP_SET_BITS(8+o2, 8, p2,\
1323 GP_SCALE_VAL_4_8(GP_GET_BITS(0+o1, 4, p1))); \
1324 GP_SET_BITS(0+o2, 8, p2, 0xff); \
1328#define GP_PIXEL_G4_DB_TO_RGBA8888(p1, p2) \
1329 GP_PIXEL_G4_DB_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
1338#define GP_PIXEL_RGBA8888_TO_G1_UB_OFFSET(p1, o1, p2, o2) do { \
1339 GP_SET_BITS(0+o2, 1, p2, ( \
1340 GP_SCALE_VAL_8_1(GP_GET_BITS(24+o1, 8, p1)) + \
1341 GP_SCALE_VAL_8_1(GP_GET_BITS(16+o1, 8, p1)) + \
1342 GP_SCALE_VAL_8_1(GP_GET_BITS(8+o1, 8, p1)) + \
1347#define GP_PIXEL_RGBA8888_TO_G1_UB(p1, p2) \
1348 GP_PIXEL_RGBA8888_TO_G1_UB_OFFSET(p1, 0, p2, 0)
1357#define GP_PIXEL_G1_UB_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
1358 GP_SET_BITS(24+o2, 8, p2,\
1359 GP_SCALE_VAL_1_8(GP_GET_BITS(0+o1, 1, p1))); \
1360 GP_SET_BITS(16+o2, 8, p2,\
1361 GP_SCALE_VAL_1_8(GP_GET_BITS(0+o1, 1, p1))); \
1362 GP_SET_BITS(8+o2, 8, p2,\
1363 GP_SCALE_VAL_1_8(GP_GET_BITS(0+o1, 1, p1))); \
1364 GP_SET_BITS(0+o2, 8, p2, 0xff); \
1368#define GP_PIXEL_G1_UB_TO_RGBA8888(p1, p2) \
1369 GP_PIXEL_G1_UB_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
1378#define GP_PIXEL_RGBA8888_TO_G2_UB_OFFSET(p1, o1, p2, o2) do { \
1379 GP_SET_BITS(0+o2, 2, p2, ( \
1380 GP_SCALE_VAL_8_2(GP_GET_BITS(24+o1, 8, p1)) + \
1381 GP_SCALE_VAL_8_2(GP_GET_BITS(16+o1, 8, p1)) + \
1382 GP_SCALE_VAL_8_2(GP_GET_BITS(8+o1, 8, p1)) + \
1387#define GP_PIXEL_RGBA8888_TO_G2_UB(p1, p2) \
1388 GP_PIXEL_RGBA8888_TO_G2_UB_OFFSET(p1, 0, p2, 0)
1397#define GP_PIXEL_G2_UB_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
1398 GP_SET_BITS(24+o2, 8, p2,\
1399 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1))); \
1400 GP_SET_BITS(16+o2, 8, p2,\
1401 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1))); \
1402 GP_SET_BITS(8+o2, 8, p2,\
1403 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1))); \
1404 GP_SET_BITS(0+o2, 8, p2, 0xff); \
1408#define GP_PIXEL_G2_UB_TO_RGBA8888(p1, p2) \
1409 GP_PIXEL_G2_UB_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
1418#define GP_PIXEL_RGBA8888_TO_G4_UB_OFFSET(p1, o1, p2, o2) do { \
1419 GP_SET_BITS(0+o2, 4, p2, ( \
1420 GP_SCALE_VAL_8_4(GP_GET_BITS(24+o1, 8, p1)) + \
1421 GP_SCALE_VAL_8_4(GP_GET_BITS(16+o1, 8, p1)) + \
1422 GP_SCALE_VAL_8_4(GP_GET_BITS(8+o1, 8, p1)) + \
1427#define GP_PIXEL_RGBA8888_TO_G4_UB(p1, p2) \
1428 GP_PIXEL_RGBA8888_TO_G4_UB_OFFSET(p1, 0, p2, 0)
1437#define GP_PIXEL_G4_UB_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
1438 GP_SET_BITS(24+o2, 8, p2,\
1439 GP_SCALE_VAL_4_8(GP_GET_BITS(0+o1, 4, p1))); \
1440 GP_SET_BITS(16+o2, 8, p2,\
1441 GP_SCALE_VAL_4_8(GP_GET_BITS(0+o1, 4, p1))); \
1442 GP_SET_BITS(8+o2, 8, p2,\
1443 GP_SCALE_VAL_4_8(GP_GET_BITS(0+o1, 4, p1))); \
1444 GP_SET_BITS(0+o2, 8, p2, 0xff); \
1448#define GP_PIXEL_G4_UB_TO_RGBA8888(p1, p2) \
1449 GP_PIXEL_G4_UB_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
1458#define GP_PIXEL_RGBA8888_TO_G8_OFFSET(p1, o1, p2, o2) do { \
1459 GP_SET_BITS(0+o2, 8, p2, ( \
1460 GP_SCALE_VAL_8_8(GP_GET_BITS(24+o1, 8, p1)) + \
1461 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1)) + \
1462 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1)) + \
1467#define GP_PIXEL_RGBA8888_TO_G8(p1, p2) \
1468 GP_PIXEL_RGBA8888_TO_G8_OFFSET(p1, 0, p2, 0)
1477#define GP_PIXEL_RGBA8888_TO_GA88_OFFSET(p1, o1, p2, o2) do { \
1478 GP_SET_BITS(0+o2, 8, p2, ( \
1479 GP_SCALE_VAL_8_8(GP_GET_BITS(24+o1, 8, p1)) + \
1480 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1)) + \
1481 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1)) + \
1483 GP_SET_BITS(8+o2, 8, p2,\
1484 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
1488#define GP_PIXEL_RGBA8888_TO_GA88(p1, p2) \
1489 GP_PIXEL_RGBA8888_TO_GA88_OFFSET(p1, 0, p2, 0)
1498#define GP_PIXEL_GA88_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
1499 GP_SET_BITS(24+o2, 8, p2,\
1500 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
1501 GP_SET_BITS(16+o2, 8, p2,\
1502 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
1503 GP_SET_BITS(8+o2, 8, p2,\
1504 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
1505 GP_SET_BITS(0+o2, 8, p2,\
1506 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1))); \
1510#define GP_PIXEL_GA88_TO_RGBA8888(p1, p2) \
1511 GP_PIXEL_GA88_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
1520#define GP_PIXEL_RGBA8888_TO_G16_OFFSET(p1, o1, p2, o2) do { \
1521 GP_SET_BITS(0+o2, 16, p2, ( \
1522 GP_SCALE_VAL_8_16(GP_GET_BITS(24+o1, 8, p1)) + \
1523 GP_SCALE_VAL_8_16(GP_GET_BITS(16+o1, 8, p1)) + \
1524 GP_SCALE_VAL_8_16(GP_GET_BITS(8+o1, 8, p1)) + \
1529#define GP_PIXEL_RGBA8888_TO_G16(p1, p2) \
1530 GP_PIXEL_RGBA8888_TO_G16_OFFSET(p1, 0, p2, 0)
1539#define GP_PIXEL_G16_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
1540 GP_SET_BITS(24+o2, 8, p2,\
1541 GP_SCALE_VAL_16_8(GP_GET_BITS(0+o1, 16, p1))); \
1542 GP_SET_BITS(16+o2, 8, p2,\
1543 GP_SCALE_VAL_16_8(GP_GET_BITS(0+o1, 16, p1))); \
1544 GP_SET_BITS(8+o2, 8, p2,\
1545 GP_SCALE_VAL_16_8(GP_GET_BITS(0+o1, 16, p1))); \
1546 GP_SET_BITS(0+o2, 8, p2, 0xff); \
1550#define GP_PIXEL_G16_TO_RGBA8888(p1, p2) \
1551 GP_PIXEL_G16_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
1585#define GP_PIXEL_G8_TO_RGB101010_OFFSET(p1, o1, p2, o2) do { \
1586 GP_SET_BITS(20+o2, 10, p2,\
1587 GP_SCALE_VAL_8_10(GP_GET_BITS(0+o1, 8, p1))); \
1588 GP_SET_BITS(10+o2, 10, p2,\
1589 GP_SCALE_VAL_8_10(GP_GET_BITS(0+o1, 8, p1))); \
1590 GP_SET_BITS(0+o2, 10, p2,\
1591 GP_SCALE_VAL_8_10(GP_GET_BITS(0+o1, 8, p1))); \
1595#define GP_PIXEL_G8_TO_RGB101010(p1, p2) \
1596 GP_PIXEL_G8_TO_RGB101010_OFFSET(p1, 0, p2, 0)
1605#define GP_PIXEL_RGB101010_TO_G8_OFFSET(p1, o1, p2, o2) do { \
1606 GP_SET_BITS(0+o2, 8, p2, ( \
1607 GP_SCALE_VAL_10_8(GP_GET_BITS(20+o1, 10, p1)) + \
1608 GP_SCALE_VAL_10_8(GP_GET_BITS(10+o1, 10, p1)) + \
1609 GP_SCALE_VAL_10_8(GP_GET_BITS(0+o1, 10, p1)) + \
1614#define GP_PIXEL_RGB101010_TO_G8(p1, p2) \
1615 GP_PIXEL_RGB101010_TO_G8_OFFSET(p1, 0, p2, 0)
1624#define GP_PIXEL_G8_TO_xRGB8888_OFFSET(p1, o1, p2, o2) do { \
1625 GP_SET_BITS(16+o2, 8, p2,\
1626 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
1627 GP_SET_BITS(8+o2, 8, p2,\
1628 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
1629 GP_SET_BITS(0+o2, 8, p2,\
1630 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
1634#define GP_PIXEL_G8_TO_xRGB8888(p1, p2) \
1635 GP_PIXEL_G8_TO_xRGB8888_OFFSET(p1, 0, p2, 0)
1644#define GP_PIXEL_xRGB8888_TO_G8_OFFSET(p1, o1, p2, o2) do { \
1645 GP_SET_BITS(0+o2, 8, p2, ( \
1646 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1)) + \
1647 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1)) + \
1648 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1)) + \
1653#define GP_PIXEL_xRGB8888_TO_G8(p1, p2) \
1654 GP_PIXEL_xRGB8888_TO_G8_OFFSET(p1, 0, p2, 0)
1663#define GP_PIXEL_G8_TO_RGBA8888_OFFSET(p1, o1, p2, o2) do { \
1664 GP_SET_BITS(24+o2, 8, p2,\
1665 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
1666 GP_SET_BITS(16+o2, 8, p2,\
1667 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
1668 GP_SET_BITS(8+o2, 8, p2,\
1669 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
1670 GP_SET_BITS(0+o2, 8, p2, 0xff); \
1674#define GP_PIXEL_G8_TO_RGBA8888(p1, p2) \
1675 GP_PIXEL_G8_TO_RGBA8888_OFFSET(p1, 0, p2, 0)
1684#define GP_PIXEL_G8_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
1685 GP_SET_BITS(16+o2, 8, p2,\
1686 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
1687 GP_SET_BITS(8+o2, 8, p2,\
1688 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
1689 GP_SET_BITS(0+o2, 8, p2,\
1690 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
1694#define GP_PIXEL_G8_TO_RGB888(p1, p2) \
1695 GP_PIXEL_G8_TO_RGB888_OFFSET(p1, 0, p2, 0)
1704#define GP_PIXEL_G8_TO_BGR888_OFFSET(p1, o1, p2, o2) do { \
1705 GP_SET_BITS(16+o2, 8, p2,\
1706 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
1707 GP_SET_BITS(8+o2, 8, p2,\
1708 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
1709 GP_SET_BITS(0+o2, 8, p2,\
1710 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
1714#define GP_PIXEL_G8_TO_BGR888(p1, p2) \
1715 GP_PIXEL_G8_TO_BGR888_OFFSET(p1, 0, p2, 0)
1724#define GP_PIXEL_BGR888_TO_G8_OFFSET(p1, o1, p2, o2) do { \
1725 GP_SET_BITS(0+o2, 8, p2, ( \
1726 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1)) + \
1727 GP_SCALE_VAL_8_8(GP_GET_BITS(8+o1, 8, p1)) + \
1728 GP_SCALE_VAL_8_8(GP_GET_BITS(16+o1, 8, p1)) + \
1733#define GP_PIXEL_BGR888_TO_G8(p1, p2) \
1734 GP_PIXEL_BGR888_TO_G8_OFFSET(p1, 0, p2, 0)
1743#define GP_PIXEL_G8_TO_RGB555_OFFSET(p1, o1, p2, o2) do { \
1744 GP_SET_BITS(10+o2, 5, p2,\
1745 GP_SCALE_VAL_8_5(GP_GET_BITS(0+o1, 8, p1))); \
1746 GP_SET_BITS(5+o2, 5, p2,\
1747 GP_SCALE_VAL_8_5(GP_GET_BITS(0+o1, 8, p1))); \
1748 GP_SET_BITS(0+o2, 5, p2,\
1749 GP_SCALE_VAL_8_5(GP_GET_BITS(0+o1, 8, p1))); \
1753#define GP_PIXEL_G8_TO_RGB555(p1, p2) \
1754 GP_PIXEL_G8_TO_RGB555_OFFSET(p1, 0, p2, 0)
1763#define GP_PIXEL_RGB555_TO_G8_OFFSET(p1, o1, p2, o2) do { \
1764 GP_SET_BITS(0+o2, 8, p2, ( \
1765 GP_SCALE_VAL_5_8(GP_GET_BITS(10+o1, 5, p1)) + \
1766 GP_SCALE_VAL_5_8(GP_GET_BITS(5+o1, 5, p1)) + \
1767 GP_SCALE_VAL_5_8(GP_GET_BITS(0+o1, 5, p1)) + \
1772#define GP_PIXEL_RGB555_TO_G8(p1, p2) \
1773 GP_PIXEL_RGB555_TO_G8_OFFSET(p1, 0, p2, 0)
1782#define GP_PIXEL_G8_TO_RGB565_BE_OFFSET(p1, o1, p2, o2) do { \
1783 GP_SET_BITS(11+o2, 5, p2,\
1784 GP_SCALE_VAL_8_5(GP_GET_BITS(0+o1, 8, p1))); \
1785 GP_SET_BITS(5+o2, 6, p2,\
1786 GP_SCALE_VAL_8_6(GP_GET_BITS(0+o1, 8, p1))); \
1787 GP_SET_BITS(0+o2, 5, p2,\
1788 GP_SCALE_VAL_8_5(GP_GET_BITS(0+o1, 8, p1))); \
1792#define GP_PIXEL_G8_TO_RGB565_BE(p1, p2) \
1793 GP_PIXEL_G8_TO_RGB565_BE_OFFSET(p1, 0, p2, 0)
1802#define GP_PIXEL_RGB565_BE_TO_G8_OFFSET(p1, o1, p2, o2) do { \
1803 GP_SET_BITS(0+o2, 8, p2, ( \
1804 GP_SCALE_VAL_5_8(GP_GET_BITS(11+o1, 5, p1)) + \
1805 GP_SCALE_VAL_6_8(GP_GET_BITS(5+o1, 6, p1)) + \
1806 GP_SCALE_VAL_5_8(GP_GET_BITS(0+o1, 5, p1)) + \
1811#define GP_PIXEL_RGB565_BE_TO_G8(p1, p2) \
1812 GP_PIXEL_RGB565_BE_TO_G8_OFFSET(p1, 0, p2, 0)
1821#define GP_PIXEL_G8_TO_RGB565_LE_OFFSET(p1, o1, p2, o2) do { \
1822 GP_SET_BITS(11+o2, 5, p2,\
1823 GP_SCALE_VAL_8_5(GP_GET_BITS(0+o1, 8, p1))); \
1824 GP_SET_BITS(5+o2, 6, p2,\
1825 GP_SCALE_VAL_8_6(GP_GET_BITS(0+o1, 8, p1))); \
1826 GP_SET_BITS(0+o2, 5, p2,\
1827 GP_SCALE_VAL_8_5(GP_GET_BITS(0+o1, 8, p1))); \
1831#define GP_PIXEL_G8_TO_RGB565_LE(p1, p2) \
1832 GP_PIXEL_G8_TO_RGB565_LE_OFFSET(p1, 0, p2, 0)
1841#define GP_PIXEL_RGB565_LE_TO_G8_OFFSET(p1, o1, p2, o2) do { \
1842 GP_SET_BITS(0+o2, 8, p2, ( \
1843 GP_SCALE_VAL_5_8(GP_GET_BITS(11+o1, 5, p1)) + \
1844 GP_SCALE_VAL_6_8(GP_GET_BITS(5+o1, 6, p1)) + \
1845 GP_SCALE_VAL_5_8(GP_GET_BITS(0+o1, 5, p1)) + \
1850#define GP_PIXEL_RGB565_LE_TO_G8(p1, p2) \
1851 GP_PIXEL_RGB565_LE_TO_G8_OFFSET(p1, 0, p2, 0)
1860#define GP_PIXEL_G8_TO_RGB666_OFFSET(p1, o1, p2, o2) do { \
1861 GP_SET_BITS(12+o2, 6, p2,\
1862 GP_SCALE_VAL_8_6(GP_GET_BITS(0+o1, 8, p1))); \
1863 GP_SET_BITS(6+o2, 6, p2,\
1864 GP_SCALE_VAL_8_6(GP_GET_BITS(0+o1, 8, p1))); \
1865 GP_SET_BITS(0+o2, 6, p2,\
1866 GP_SCALE_VAL_8_6(GP_GET_BITS(0+o1, 8, p1))); \
1870#define GP_PIXEL_G8_TO_RGB666(p1, p2) \
1871 GP_PIXEL_G8_TO_RGB666_OFFSET(p1, 0, p2, 0)
1880#define GP_PIXEL_RGB666_TO_G8_OFFSET(p1, o1, p2, o2) do { \
1881 GP_SET_BITS(0+o2, 8, p2, ( \
1882 GP_SCALE_VAL_6_8(GP_GET_BITS(12+o1, 6, p1)) + \
1883 GP_SCALE_VAL_6_8(GP_GET_BITS(6+o1, 6, p1)) + \
1884 GP_SCALE_VAL_6_8(GP_GET_BITS(0+o1, 6, p1)) + \
1889#define GP_PIXEL_RGB666_TO_G8(p1, p2) \
1890 GP_PIXEL_RGB666_TO_G8_OFFSET(p1, 0, p2, 0)
1899#define GP_PIXEL_G8_TO_RGB332_OFFSET(p1, o1, p2, o2) do { \
1900 GP_SET_BITS(5+o2, 3, p2,\
1901 GP_SCALE_VAL_8_3(GP_GET_BITS(0+o1, 8, p1))); \
1902 GP_SET_BITS(2+o2, 3, p2,\
1903 GP_SCALE_VAL_8_3(GP_GET_BITS(0+o1, 8, p1))); \
1904 GP_SET_BITS(0+o2, 2, p2,\
1905 GP_SCALE_VAL_8_2(GP_GET_BITS(0+o1, 8, p1))); \
1909#define GP_PIXEL_G8_TO_RGB332(p1, p2) \
1910 GP_PIXEL_G8_TO_RGB332_OFFSET(p1, 0, p2, 0)
1919#define GP_PIXEL_RGB332_TO_G8_OFFSET(p1, o1, p2, o2) do { \
1920 GP_SET_BITS(0+o2, 8, p2, ( \
1921 GP_SCALE_VAL_3_8(GP_GET_BITS(5+o1, 3, p1)) + \
1922 GP_SCALE_VAL_3_8(GP_GET_BITS(2+o1, 3, p1)) + \
1923 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1)) + \
1928#define GP_PIXEL_RGB332_TO_G8(p1, p2) \
1929 GP_PIXEL_RGB332_TO_G8_OFFSET(p1, 0, p2, 0)
1938#define GP_PIXEL_G8_TO_CMYK8888_OFFSET(p1, o1, p2, o2) do { \
1939GP_ABORT("Channel conversion G8 to CMYK8888 not supported."); \
1940GP_ABORT("Channel conversion G8 to CMYK8888 not supported."); \
1941GP_ABORT("Channel conversion G8 to CMYK8888 not supported."); \
1942GP_ABORT("Channel conversion G8 to CMYK8888 not supported."); \
1946#define GP_PIXEL_G8_TO_CMYK8888(p1, p2) \
1947 GP_PIXEL_G8_TO_CMYK8888_OFFSET(p1, 0, p2, 0)
1956#define GP_PIXEL_CMYK8888_TO_G8_OFFSET(p1, o1, p2, o2) do { \
1957 GP_SET_BITS(0+o2, 8, p2, (\
1958 ((0xff * (0xff - GP_GET_BITS(24+o1, 8, p1)) * \
1959 (0xff - GP_GET_BITS(0+o1, 8, p1)))) / (0xff * 0xff) \
1960 + ((0xff * (0xff - GP_GET_BITS(24+o1, 8, p1)) * \
1961 + (0xff - GP_GET_BITS(8+o1, 8, p1)))) / (0xff * 0xff) \
1962 + ((0xff * (0xff - GP_GET_BITS(24+o1, 8, p1)) * \
1963 + (0xff - GP_GET_BITS(16+o1, 8, p1)))) / (0xff * 0xff) \
1968#define GP_PIXEL_CMYK8888_TO_G8(p1, p2) \
1969 GP_PIXEL_CMYK8888_TO_G8_OFFSET(p1, 0, p2, 0)
1978#define GP_PIXEL_G8_TO_G1_DB_OFFSET(p1, o1, p2, o2) do { \
1979 GP_SET_BITS(0+o2, 1, p2,\
1980 GP_SCALE_VAL_8_1(GP_GET_BITS(0+o1, 8, p1))); \
1984#define GP_PIXEL_G8_TO_G1_DB(p1, p2) \
1985 GP_PIXEL_G8_TO_G1_DB_OFFSET(p1, 0, p2, 0)
1994#define GP_PIXEL_G1_DB_TO_G8_OFFSET(p1, o1, p2, o2) do { \
1995 GP_SET_BITS(0+o2, 8, p2,\
1996 GP_SCALE_VAL_1_8(GP_GET_BITS(0+o1, 1, p1))); \
2000#define GP_PIXEL_G1_DB_TO_G8(p1, p2) \
2001 GP_PIXEL_G1_DB_TO_G8_OFFSET(p1, 0, p2, 0)
2010#define GP_PIXEL_G8_TO_G2_DB_OFFSET(p1, o1, p2, o2) do { \
2011 GP_SET_BITS(0+o2, 2, p2,\
2012 GP_SCALE_VAL_8_2(GP_GET_BITS(0+o1, 8, p1))); \
2016#define GP_PIXEL_G8_TO_G2_DB(p1, p2) \
2017 GP_PIXEL_G8_TO_G2_DB_OFFSET(p1, 0, p2, 0)
2026#define GP_PIXEL_G2_DB_TO_G8_OFFSET(p1, o1, p2, o2) do { \
2027 GP_SET_BITS(0+o2, 8, p2,\
2028 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1))); \
2032#define GP_PIXEL_G2_DB_TO_G8(p1, p2) \
2033 GP_PIXEL_G2_DB_TO_G8_OFFSET(p1, 0, p2, 0)
2042#define GP_PIXEL_G8_TO_G4_DB_OFFSET(p1, o1, p2, o2) do { \
2043 GP_SET_BITS(0+o2, 4, p2,\
2044 GP_SCALE_VAL_8_4(GP_GET_BITS(0+o1, 8, p1))); \
2048#define GP_PIXEL_G8_TO_G4_DB(p1, p2) \
2049 GP_PIXEL_G8_TO_G4_DB_OFFSET(p1, 0, p2, 0)
2058#define GP_PIXEL_G4_DB_TO_G8_OFFSET(p1, o1, p2, o2) do { \
2059 GP_SET_BITS(0+o2, 8, p2,\
2060 GP_SCALE_VAL_4_8(GP_GET_BITS(0+o1, 4, p1))); \
2064#define GP_PIXEL_G4_DB_TO_G8(p1, p2) \
2065 GP_PIXEL_G4_DB_TO_G8_OFFSET(p1, 0, p2, 0)
2074#define GP_PIXEL_G8_TO_G1_UB_OFFSET(p1, o1, p2, o2) do { \
2075 GP_SET_BITS(0+o2, 1, p2,\
2076 GP_SCALE_VAL_8_1(GP_GET_BITS(0+o1, 8, p1))); \
2080#define GP_PIXEL_G8_TO_G1_UB(p1, p2) \
2081 GP_PIXEL_G8_TO_G1_UB_OFFSET(p1, 0, p2, 0)
2090#define GP_PIXEL_G1_UB_TO_G8_OFFSET(p1, o1, p2, o2) do { \
2091 GP_SET_BITS(0+o2, 8, p2,\
2092 GP_SCALE_VAL_1_8(GP_GET_BITS(0+o1, 1, p1))); \
2096#define GP_PIXEL_G1_UB_TO_G8(p1, p2) \
2097 GP_PIXEL_G1_UB_TO_G8_OFFSET(p1, 0, p2, 0)
2106#define GP_PIXEL_G8_TO_G2_UB_OFFSET(p1, o1, p2, o2) do { \
2107 GP_SET_BITS(0+o2, 2, p2,\
2108 GP_SCALE_VAL_8_2(GP_GET_BITS(0+o1, 8, p1))); \
2112#define GP_PIXEL_G8_TO_G2_UB(p1, p2) \
2113 GP_PIXEL_G8_TO_G2_UB_OFFSET(p1, 0, p2, 0)
2122#define GP_PIXEL_G2_UB_TO_G8_OFFSET(p1, o1, p2, o2) do { \
2123 GP_SET_BITS(0+o2, 8, p2,\
2124 GP_SCALE_VAL_2_8(GP_GET_BITS(0+o1, 2, p1))); \
2128#define GP_PIXEL_G2_UB_TO_G8(p1, p2) \
2129 GP_PIXEL_G2_UB_TO_G8_OFFSET(p1, 0, p2, 0)
2138#define GP_PIXEL_G8_TO_G4_UB_OFFSET(p1, o1, p2, o2) do { \
2139 GP_SET_BITS(0+o2, 4, p2,\
2140 GP_SCALE_VAL_8_4(GP_GET_BITS(0+o1, 8, p1))); \
2144#define GP_PIXEL_G8_TO_G4_UB(p1, p2) \
2145 GP_PIXEL_G8_TO_G4_UB_OFFSET(p1, 0, p2, 0)
2154#define GP_PIXEL_G4_UB_TO_G8_OFFSET(p1, o1, p2, o2) do { \
2155 GP_SET_BITS(0+o2, 8, p2,\
2156 GP_SCALE_VAL_4_8(GP_GET_BITS(0+o1, 4, p1))); \
2160#define GP_PIXEL_G4_UB_TO_G8(p1, p2) \
2161 GP_PIXEL_G4_UB_TO_G8_OFFSET(p1, 0, p2, 0)
2170#define GP_PIXEL_G8_TO_G8_OFFSET(p1, o1, p2, o2) do { \
2171 GP_SET_BITS(0+o2, 8, p2,\
2172 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
2176#define GP_PIXEL_G8_TO_G8(p1, p2) \
2177 GP_PIXEL_G8_TO_G8_OFFSET(p1, 0, p2, 0)
2186#define GP_PIXEL_G8_TO_GA88_OFFSET(p1, o1, p2, o2) do { \
2187 GP_SET_BITS(0+o2, 8, p2,\
2188 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
2189 GP_SET_BITS(8+o2, 8, p2, 0xff); \
2193#define GP_PIXEL_G8_TO_GA88(p1, p2) \
2194 GP_PIXEL_G8_TO_GA88_OFFSET(p1, 0, p2, 0)
2203#define GP_PIXEL_GA88_TO_G8_OFFSET(p1, o1, p2, o2) do { \
2204 GP_SET_BITS(0+o2, 8, p2,\
2205 GP_SCALE_VAL_8_8(GP_GET_BITS(0+o1, 8, p1))); \
2209#define GP_PIXEL_GA88_TO_G8(p1, p2) \
2210 GP_PIXEL_GA88_TO_G8_OFFSET(p1, 0, p2, 0)
2219#define GP_PIXEL_G8_TO_G16_OFFSET(p1, o1, p2, o2) do { \
2220 GP_SET_BITS(0+o2, 16, p2,\
2221 GP_SCALE_VAL_8_16(GP_GET_BITS(0+o1, 8, p1))); \
2225#define GP_PIXEL_G8_TO_G16(p1, p2) \
2226 GP_PIXEL_G8_TO_G16_OFFSET(p1, 0, p2, 0)
2235#define GP_PIXEL_G16_TO_G8_OFFSET(p1, o1, p2, o2) do { \
2236 GP_SET_BITS(0+o2, 8, p2,\
2237 GP_SCALE_VAL_16_8(GP_GET_BITS(0+o1, 16, p1))); \
2241#define GP_PIXEL_G16_TO_G8(p1, p2) \
2242 GP_PIXEL_G16_TO_G8_OFFSET(p1, 0, p2, 0)
2278#define GP_PIXEL_RGB565_LE_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
2279 GP_SET_BITS(16+o2, 8, p2,\
2280 GP_SCALE_VAL_5_8(GP_GET_BITS(11+o1, 5, p1))); \
2281 GP_SET_BITS(8+o2, 8, p2,\
2282 GP_SCALE_VAL_6_8(GP_GET_BITS(5+o1, 6, p1))); \
2283 GP_SET_BITS(0+o2, 8, p2,\
2284 GP_SCALE_VAL_5_8(GP_GET_BITS(0+o1, 5, p1))); \
2288#define GP_PIXEL_RGB565_LE_TO_RGB888(p1, p2) \
2289 GP_PIXEL_RGB565_LE_TO_RGB888_OFFSET(p1, 0, p2, 0)
2298#define GP_PIXEL_RGB565_BE_TO_RGB888_OFFSET(p1, o1, p2, o2) do { \
2299 GP_SET_BITS(16+o2, 8, p2,\
2300 GP_SCALE_VAL_5_8(GP_GET_BITS(11+o1, 5, p1))); \
2301 GP_SET_BITS(8+o2, 8, p2,\
2302 GP_SCALE_VAL_6_8(GP_GET_BITS(5+o1, 6, p1))); \
2303 GP_SET_BITS(0+o2, 8, p2,\
2304 GP_SCALE_VAL_5_8(GP_GET_BITS(0+o1, 5, p1))); \
2308#define GP_PIXEL_RGB565_BE_TO_RGB888(p1, p2) \
2309 GP_PIXEL_RGB565_BE_TO_RGB888_OFFSET(p1, 0, p2, 0)
2318#define GP_PIXEL_RGBA8888_TO_G2_UB_OFFSET(p1, o1, p2, o2) do { \
2319 GP_SET_BITS(0+o2, 2, p2, ( \
2320 GP_SCALE_VAL_8_2(GP_GET_BITS(24+o1, 8, p1)) + \
2321 GP_SCALE_VAL_8_2(GP_GET_BITS(16+o1, 8, p1)) + \
2322 GP_SCALE_VAL_8_2(GP_GET_BITS(8+o1, 8, p1)) + \
2327#define GP_PIXEL_RGBA8888_TO_G2_UB(p1, p2) \
2328 GP_PIXEL_RGBA8888_TO_G2_UB_OFFSET(p1, 0, p2, 0)
uint32_t gp_pixel
Pixel integer value.
gp_pixel gp_pixel_to_G8(gp_pixel pixel, gp_pixel_type type)
Converts to G8 from any other pixel type.
gp_pixel gp_pixel_to_RGBA8888(gp_pixel pixel, gp_pixel_type type)
Converts to RGBA8888 from any other pixel type.
gp_pixel gp_pixel_to_RGB888(gp_pixel pixel, gp_pixel_type type)
Converts to RGB888 from any other pixel type.
gp_pixel gp_G8_to_pixel(gp_pixel pixel, gp_pixel_type type)
Convert G8 to any other pixel type.
gp_pixel gp_RGB888_to_pixel(gp_pixel pixel, gp_pixel_type type)
Convert RGB888 to any other pixel type.
gp_pixel gp_RGBA8888_to_pixel(gp_pixel pixel, gp_pixel_type type)
Convert RGBA8888 to any other pixel type.
Helper macros to get and set bits given offset and length.
gp_pixel_type
List of all pixel types.