move around - flatter.
[profile/ivi/evas.git] / src / lib / engines / common / evas_convert_colorspace.c
1 /*
2  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
3  */
4
5 #include "evas_common.h"
6 #include "evas_convert_colorspace.h"
7
8 #define CONVERT_RGB_565_TO_RGB_888(s) \
9         (((((s) << 3) & 0xf8) | (((s) >> 2) & 0x7)) | \
10          ((((s) << 5) & 0xfc00) | (((s) >> 1) & 0x300)) | \
11          ((((s) << 8) & 0xf80000) | (((s) << 3) & 0x70000)))
12
13 #define CONVERT_A5P_TO_A8(s) \
14         ((((s) << 3) & 0xf8) | (((s) >> 2) & 0x7))
15
16 static inline void *
17 evas_common_convert_argb8888_to_rgb565_a5p(void *data, int w, int h, int stride, Evas_Bool has_alpha)
18 {
19    return NULL;
20 }
21
22 static inline void *
23 evas_common_convert_rgb565_a5p_to_argb8888(void *data, int w, int h, int stride, Evas_Bool has_alpha)
24 {
25    DATA16 *src, *end;
26    DATA32 *ret, *dst;
27
28    src = data;
29    end = src + (stride * h);
30    ret = malloc(w * h * sizeof(DATA32));
31
32    dst = ret;
33    if (has_alpha)
34      {
35         DATA8 *alpha;
36
37         alpha = end;
38         for (; src < end; src++, alpha++, dst++)
39           *dst = (CONVERT_A5P_TO_A8(*alpha) << 24) |
40                   CONVERT_RGB_565_TO_RGB_888(*src);
41      }
42    else
43      {
44         for (; src < end; src++, dst++)
45           *dst = CONVERT_RGB_565_TO_RGB_888(*src);
46      }
47    return ret;
48 }
49
50 EAPI void *
51 evas_common_convert_argb8888_to(void *data, int w, int h, int stride, Evas_Bool has_alpha, Evas_Colorspace cspace)
52 {
53    switch (cspace)
54      {
55         case EVAS_COLORSPACE_RGB565_A5P:
56           return evas_common_convert_argb8888_to_rgb565_a5p(data, w, h, stride, has_alpha);
57         default:
58           break;
59      }
60    return NULL;
61 }
62
63 EAPI void *
64 evas_common_convert_rgb565_a5p_to(void *data, int w, int h, int stride, Evas_Bool has_alpha, Evas_Colorspace cspace)
65 {
66    switch (cspace)
67      {
68         case EVAS_COLORSPACE_ARGB8888:
69           return evas_common_convert_rgb565_a5p_to_argb8888(data, w, h, stride, has_alpha);
70         default:
71           break;
72      }
73    return NULL;
74 }