| 1 | #include "cspace.h" |
| 2 | |
| 3 | /* |
| 4 | * note: these are intended for testing and should be avoided |
| 5 | * in favor of NEON version or platform-specific conversion |
| 6 | */ |
| 7 | |
| 8 | void bgr555_to_rgb565(void *dst_, const void *src_, int bytes) |
| 9 | { |
| 10 | const unsigned int *src = src_; |
| 11 | unsigned int *dst = dst_; |
| 12 | unsigned int p; |
| 13 | int x; |
| 14 | |
| 15 | for (x = 0; x < bytes / 4; x++) { |
| 16 | p = src[x]; |
| 17 | p = ((p & 0x7c007c00) >> 10) | ((p & 0x03e003e0) << 1) |
| 18 | | ((p & 0x001f001f) << 11); |
| 19 | dst[x] = p; |
| 20 | } |
| 21 | } |
| 22 | |
| 23 | void bgr888_to_rgb565(void *dst_, const void *src_, int bytes) |
| 24 | { |
| 25 | const unsigned char *src = src_; |
| 26 | unsigned int *dst = dst_; |
| 27 | unsigned int r1, g1, b1, r2, g2, b2; |
| 28 | |
| 29 | for (; bytes >= 6; bytes -= 6, src += 6, dst++) { |
| 30 | r1 = src[0] & 0xf8; |
| 31 | g1 = src[1] & 0xfc; |
| 32 | b1 = src[2] & 0xf8; |
| 33 | r2 = src[3] & 0xf8; |
| 34 | g2 = src[4] & 0xfc; |
| 35 | b2 = src[5] & 0xf8; |
| 36 | *dst = (r2 << 24) | (g2 << 19) | (b2 << 13) | |
| 37 | (r1 << 8) | (g1 << 3) | (b1 >> 3); |
| 38 | } |
| 39 | } |
| 40 | |
| 41 | // TODO? |
| 42 | void bgr888_to_rgb888(void *dst, const void *src, int bytes) {} |
| 43 | |