Fix IO memory access .. SB128 driver makes noises in VMWare - CMI is untested (Curren...
[AROS.git] / rom / hidds / graphics / rgbconv.c
blobea4f0c7c8a33db29f581f57d4bd4ca47f10e4b0c
1 /*
2 Copyright © 2011, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc: RGB pixel format conversion functions.
6 */
8 #include "rgbconv.h"
11 ULONG Convert_RGB24_To_BGR032(APTR srcPixels, ULONG srcMod,
12 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
13 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
15 WORD x, y, src_step, dst_step;
16 UBYTE *p = srcPixels, *q = dstPixels;
17 UBYTE src_red, src_green, src_blue;
19 src_step = srcMod - width * 3;
20 dst_step = dstMod - width * 4;
22 for(y = 0; y < height; y++)
24 for(x = 0; x < width; x++)
26 src_red = *p++;
27 src_green = *p++;
28 src_blue = *p++;
30 *q++ = src_blue;
31 *q++ = src_green;
32 *q++ = src_red;
33 *q++ = 0;
35 p += src_step;
36 q += dst_step;
39 return TRUE;
43 ULONG Convert_BGR24_To_BGR032(APTR srcPixels, ULONG srcMod,
44 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
45 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
47 WORD x, y, src_step, dst_step;
48 UBYTE *p = srcPixels, *q = dstPixels;
49 UBYTE src_red, src_green, src_blue;
51 src_step = srcMod - width * 3;
52 dst_step = dstMod - width * 4;
54 for(y = 0; y < height; y++)
56 for(x = 0; x < width; x++)
58 src_blue = *p++;
59 src_green = *p++;
60 src_red = *p++;
62 *q++ = src_blue;
63 *q++ = src_green;
64 *q++ = src_red;
65 *q++ = 0;
67 p += src_step;
68 q += dst_step;
71 return TRUE;
75 ULONG Convert_RGB16_To_BGR032(APTR srcPixels, ULONG srcMod,
76 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
77 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
79 WORD x, y, src_step, dst_step;
80 UBYTE *p = srcPixels, *q = dstPixels;
81 UBYTE src_red, src_green, src_blue;
83 src_step = srcMod - width * 2;
84 dst_step = dstMod - width * 4;
86 for(y = 0; y < height; y++)
88 for(x = 0; x < width; x++)
90 src_red = *p++;
91 src_blue = *p++;
92 src_green = src_red << 5 | src_blue >> 3 & 0x1c;
93 src_blue <<= 3;
94 src_red &= 0xf8;
96 *q++ = src_blue;
97 *q++ = src_green;
98 *q++ = src_red;
99 *q++ = 0;
101 p += src_step;
102 q += dst_step;
105 return TRUE;
109 ULONG Convert_RGB16LE_To_BGR032(APTR srcPixels, ULONG srcMod,
110 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
111 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
113 WORD x, y, src_step, dst_step;
114 UBYTE *p = srcPixels, *q = dstPixels;
115 UBYTE src_red, src_green, src_blue;
117 src_step = srcMod - width * 2;
118 dst_step = dstMod - width * 4;
120 for(y = 0; y < height; y++)
122 for(x = 0; x < width; x++)
124 src_blue = *p++;
125 src_red = *p++;
126 src_green = src_red << 5 | src_blue >> 3 & 0x1c;
127 src_blue <<= 3;
128 src_red &= 0xf8;
130 *q++ = src_blue;
131 *q++ = src_green;
132 *q++ = src_red;
133 *q++ = 0;
135 p += src_step;
136 q += dst_step;
139 return TRUE;
143 ULONG Convert_BGR16_To_BGR032(APTR srcPixels, ULONG srcMod,
144 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
145 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
147 WORD x, y, src_step, dst_step;
148 UBYTE *p = srcPixels, *q = dstPixels;
149 UBYTE src_red, src_green, src_blue;
151 src_step = srcMod - width * 2;
152 dst_step = dstMod - width * 4;
154 for(y = 0; y < height; y++)
156 for(x = 0; x < width; x++)
158 src_blue = *p++;
159 src_red = *p++;
160 src_green = src_blue << 5 | src_red >> 3 & 0x1c;
161 src_blue &= 0xf8;
162 src_red <<= 3;
164 *q++ = src_blue;
165 *q++ = src_green;
166 *q++ = src_red;
167 *q++ = 0;
169 p += src_step;
170 q += dst_step;
173 return TRUE;
177 ULONG Convert_BGR16LE_To_BGR032(APTR srcPixels, ULONG srcMod,
178 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
179 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
181 WORD x, y, src_step, dst_step;
182 UBYTE *p = srcPixels, *q = dstPixels;
183 UBYTE src_red, src_green, src_blue;
185 src_step = srcMod - width * 2;
186 dst_step = dstMod - width * 4;
188 for(y = 0; y < height; y++)
190 for(x = 0; x < width; x++)
192 src_red = *p++;
193 src_blue = *p++;
194 src_green = src_blue << 5 | src_red >> 3 & 0x1c;
195 src_red <<= 3;
196 src_blue &= 0xf8;
198 *q++ = src_blue;
199 *q++ = src_green;
200 *q++ = src_red;
201 *q++ = 0;
203 p += src_step;
204 q += dst_step;
207 return TRUE;
211 ULONG Convert_ARGB32_To_BGR032(APTR srcPixels, ULONG srcMod,
212 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
213 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
215 WORD x, y, src_step, dst_step;
216 UBYTE *p = srcPixels, *q = dstPixels;
217 UBYTE src_red, src_green, src_blue;
219 src_step = srcMod - width * 4;
220 dst_step = dstMod - width * 4;
222 for(y = 0; y < height; y++)
224 for(x = 0; x < width; x++)
226 p++; /* alpha */
227 src_red = *p++;
228 src_green = *p++;
229 src_blue = *p++;
231 *q++ = src_blue;
232 *q++ = src_green;
233 *q++ = src_red;
234 *q++ = 0;
236 p += src_step;
237 q += dst_step;
240 return TRUE;
244 ULONG Convert_BGRA32_To_BGR032(APTR srcPixels, ULONG srcMod,
245 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
246 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
248 WORD x, y, src_step, dst_step;
249 UBYTE *p = srcPixels, *q = dstPixels;
250 UBYTE src_red, src_green, src_blue;
252 src_step = srcMod - width * 4;
253 dst_step = dstMod - width * 4;
255 for(y = 0; y < height; y++)
257 for(x = 0; x < width; x++)
259 src_blue = *p++;
260 src_green = *p++;
261 src_red = *p++;
262 p++; /* alpha */
264 *q++ = src_blue;
265 *q++ = src_green;
266 *q++ = src_red;
267 *q++ = 0;
269 p += src_step;
270 q += dst_step;
273 return TRUE;
277 ULONG Convert_RGBA32_To_BGR032(APTR srcPixels, ULONG srcMod,
278 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
279 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
281 WORD x, y, src_step, dst_step;
282 UBYTE *p = srcPixels, *q = dstPixels;
283 UBYTE src_red, src_green, src_blue;
285 src_step = srcMod - width * 4;
286 dst_step = dstMod - width * 4;
288 for(y = 0; y < height; y++)
290 for(x = 0; x < width; x++)
292 src_red = *p++;
293 src_green = *p++;
294 src_blue = *p++;
295 p++; /* alpha */
297 *q++ = src_blue;
298 *q++ = src_green;
299 *q++ = src_red;
300 *q++ = 0;
302 p += src_step;
303 q += dst_step;
306 return TRUE;
310 ULONG Convert_ABGR32_To_BGR032(APTR srcPixels, ULONG srcMod,
311 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
312 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
314 WORD x, y, src_step, dst_step;
315 UBYTE *p = srcPixels, *q = dstPixels;
316 UBYTE src_red, src_green, src_blue;
318 src_step = srcMod - width * 4;
319 dst_step = dstMod - width * 4;
321 for(y = 0; y < height; y++)
323 for(x = 0; x < width; x++)
325 p++; /* alpha */
326 src_blue = *p++;
327 src_green = *p++;
328 src_red = *p++;
330 *q++ = src_blue;
331 *q++ = src_green;
332 *q++ = src_red;
333 *q++ = 0;
335 p += src_step;
336 q += dst_step;
339 return TRUE;
343 ULONG Convert_BGR032_To_ARGB32(APTR srcPixels, ULONG srcMod,
344 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
345 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
347 WORD x, y, src_step, dst_step;
348 UBYTE *p = srcPixels, *q = dstPixels;
349 UBYTE src_red, src_green, src_blue;
351 src_step = srcMod - width * 4;
352 dst_step = dstMod - width * 4;
354 for(y = 0; y < height; y++)
356 for(x = 0; x < width; x++)
358 src_blue = *p++;
359 src_green = *p++;
360 src_red = *p++;
361 p++; /* zero */
363 *q++ = 0xff;
364 *q++ = src_red;
365 *q++ = src_green;
366 *q++ = src_blue;
368 p += src_step;
369 q += dst_step;
372 return TRUE;
376 ULONG Convert_RGB24_To_RGB16LE(APTR srcPixels, ULONG srcMod,
377 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
378 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
380 WORD x, y, src_step, dst_step;
381 UBYTE *p = srcPixels, *q = dstPixels;
382 UBYTE src_red, src_green, src_blue;
384 src_step = srcMod - width * 3;
385 dst_step = dstMod - width * 2;
387 for(y = 0; y < height; y++)
389 for(x = 0; x < width; x++)
391 src_red = *p++;
392 src_green = *p++;
393 src_blue = *p++;
395 *q++ = (src_green << 3) & 0xe0 | src_blue >> 3;
396 *q++ = src_red & 0xf8 | src_green >> 5;
398 p += src_step;
399 q += dst_step;
402 return TRUE;
406 ULONG Convert_BGR24_To_RGB16LE(APTR srcPixels, ULONG srcMod,
407 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
408 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
410 WORD x, y, src_step, dst_step;
411 UBYTE *p = srcPixels, *q = dstPixels;
412 UBYTE src_red, src_green, src_blue;
414 src_step = srcMod - width * 3;
415 dst_step = dstMod - width * 2;
417 for(y = 0; y < height; y++)
419 for(x = 0; x < width; x++)
421 src_blue = *p++;
422 src_green = *p++;
423 src_red = *p++;
425 *q++ = (src_green << 3) & 0xe0 | src_blue >> 3;
426 *q++ = src_red & 0xf8 | src_green >> 5;
428 p += src_step;
429 q += dst_step;
432 return TRUE;
436 ULONG Convert_RGB16_To_RGB16LE(APTR srcPixels, ULONG srcMod,
437 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
438 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
440 WORD x, y, src_step, dst_step;
441 UBYTE *p = srcPixels, *q = dstPixels;
442 UBYTE src_red, src_blue;
444 src_step = srcMod - width * 2;
445 dst_step = dstMod - width * 2;
447 for(y = 0; y < height; y++)
449 for(x = 0; x < width; x++)
451 src_red = *p++;
452 src_blue = *p++;
454 *q++ = src_blue;
455 *q++ = src_red;
457 p += src_step;
458 q += dst_step;
461 return TRUE;
465 ULONG Convert_RGB16LE_To_RGB16LE(APTR srcPixels, ULONG srcMod,
466 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
467 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
469 WORD x, y, src_step, dst_step;
470 UBYTE *p = srcPixels, *q = dstPixels;
471 UBYTE src_red, src_blue;
473 src_step = srcMod - width * 2;
474 dst_step = dstMod - width * 2;
476 for(y = 0; y < height; y++)
478 for(x = 0; x < width; x++)
480 src_blue = *p++;
481 src_red = *p++;
483 *q++ = src_blue;
484 *q++ = src_red;
486 p += src_step;
487 q += dst_step;
490 return TRUE;
494 ULONG Convert_BGR16_To_RGB16LE(APTR srcPixels, ULONG srcMod,
495 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
496 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
498 WORD x, y, src_step, dst_step;
499 UBYTE *p = srcPixels, *q = dstPixels;
500 UBYTE src_red, src_green, src_blue;
502 src_step = srcMod - width * 4;
503 dst_step = dstMod - width * 2;
505 for(y = 0; y < height; y++)
507 for(x = 0; x < width; x++)
509 src_blue = *p++;
510 src_red = *p++;
511 src_green = src_blue << 5 | src_red >> 3 & 0x1c;
512 src_blue &= 0xf8;
513 src_red <<= 3;
515 *q++ = (src_green << 3) & 0xe0 | src_blue >> 3;
516 *q++ = src_red & 0xf8 | src_green >> 5;
518 p += src_step;
519 q += dst_step;
522 return TRUE;
526 ULONG Convert_BGR16LE_To_RGB16LE(APTR srcPixels, ULONG srcMod,
527 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
528 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
530 WORD x, y, src_step, dst_step;
531 UBYTE *p = srcPixels, *q = dstPixels;
532 UBYTE src_red, src_green, src_blue;
534 src_step = srcMod - width * 4;
535 dst_step = dstMod - width * 2;
537 for(y = 0; y < height; y++)
539 for(x = 0; x < width; x++)
541 src_red = *p++;
542 src_blue = *p++;
543 src_green = src_blue << 5 | src_red >> 3 & 0x1c;
544 src_red <<= 3;
545 src_blue &= 0xf8;
547 *q++ = (src_green << 3) & 0xe0 | src_blue >> 3;
548 *q++ = src_red & 0xf8 | src_green >> 5;
550 p += src_step;
551 q += dst_step;
554 return TRUE;
558 ULONG Convert_ARGB32_To_RGB16LE(APTR srcPixels, ULONG srcMod,
559 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
560 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
562 WORD x, y, src_step, dst_step;
563 UBYTE *p = srcPixels, *q = dstPixels;
564 UBYTE src_red, src_green, src_blue;
566 src_step = srcMod - width * 4;
567 dst_step = dstMod - width * 2;
569 for(y = 0; y < height; y++)
571 for(x = 0; x < width; x++)
573 p++; /* alpha */
574 src_red = *p++;
575 src_green = *p++;
576 src_blue = *p++;
578 *q++ = (src_green << 3) & 0xe0 | src_blue >> 3;
579 *q++ = src_red & 0xf8 | src_green >> 5;
581 p += src_step;
582 q += dst_step;
585 return TRUE;
589 ULONG Convert_BGRA32_To_RGB16LE(APTR srcPixels, ULONG srcMod,
590 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
591 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
593 WORD x, y, src_step, dst_step;
594 UBYTE *p = srcPixels, *q = dstPixels;
595 UBYTE src_red, src_green, src_blue;
597 src_step = srcMod - width * 4;
598 dst_step = dstMod - width * 2;
600 for(y = 0; y < height; y++)
602 for(x = 0; x < width; x++)
604 src_blue = *p++;
605 src_green = *p++;
606 src_red = *p++;
607 p++; /* alpha */
609 *q++ = (src_green << 3) & 0xe0 | src_blue >> 3;
610 *q++ = src_red & 0xf8 | src_green >> 5;
612 p += src_step;
613 q += dst_step;
616 return TRUE;
620 ULONG Convert_RGBA32_To_RGB16LE(APTR srcPixels, ULONG srcMod,
621 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
622 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
624 WORD x, y, src_step, dst_step;
625 UBYTE *p = srcPixels, *q = dstPixels;
626 UBYTE src_red, src_green, src_blue;
628 src_step = srcMod - width * 4;
629 dst_step = dstMod - width * 2;
631 for(y = 0; y < height; y++)
633 for(x = 0; x < width; x++)
635 src_red = *p++;
636 src_green = *p++;
637 src_blue = *p++;
638 p++; /* alpha */
640 *q++ = (src_green << 3) & 0xe0 | src_blue >> 3;
641 *q++ = src_red & 0xf8 | src_green >> 5;
643 p += src_step;
644 q += dst_step;
647 return TRUE;
651 ULONG Convert_ABGR32_To_RGB16LE(APTR srcPixels, ULONG srcMod,
652 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
653 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
655 WORD x, y, src_step, dst_step;
656 UBYTE *p = srcPixels, *q = dstPixels;
657 UBYTE src_red, src_green, src_blue;
659 src_step = srcMod - width * 4;
660 dst_step = dstMod - width * 2;
662 for(y = 0; y < height; y++)
664 for(x = 0; x < width; x++)
666 p++; /* alpha */
667 src_blue = *p++;
668 src_green = *p++;
669 src_red = *p++;
671 *q++ = (src_green << 3) & 0xe0 | src_blue >> 3;
672 *q++ = src_red & 0xf8 | src_green >> 5;
674 p += src_step;
675 q += dst_step;
678 return TRUE;
682 ULONG Convert_RGB16LE_To_ARGB32(APTR srcPixels, ULONG srcMod,
683 HIDDT_StdPixFmt srcPixFmt, APTR dstPixels, ULONG dstMod,
684 HIDDT_StdPixFmt dstPixFmt, ULONG width, ULONG height)
686 WORD x, y, src_step, dst_step;
687 UBYTE *p = srcPixels, *q = dstPixels;
688 UBYTE src_red, src_green, src_blue;
690 src_step = srcMod - width * 2;
691 dst_step = dstMod - width * 4;
693 for(y = 0; y < height; y++)
695 for(x = 0; x < width; x++)
697 src_blue = *p++;
698 src_red = *p++;
699 src_green = src_red << 5 | src_blue >> 3 & 0x1c;
700 src_blue <<= 3;
701 src_red &= 0xf8;
703 *q++ = 0xff;
704 *q++ = src_red;
705 *q++ = src_green;
706 *q++ = src_blue;
708 p += src_step;
709 q += dst_step;
712 return TRUE;