From dd7595a3475407a7fa96a97393bae8c5220e8762 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Wed, 4 Jan 2012 18:41:13 +1000 Subject: Add the base Enlightenment Foundation Libraries - eina, eet, evas, ecore, embryo, and edje. Note that embryo wont be used, but I'm not sure yet if you can build edje without it. --- .../lib/engines/common/evas_convert_colorspace.c | 186 +++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 libraries/evas/src/lib/engines/common/evas_convert_colorspace.c (limited to 'libraries/evas/src/lib/engines/common/evas_convert_colorspace.c') diff --git a/libraries/evas/src/lib/engines/common/evas_convert_colorspace.c b/libraries/evas/src/lib/engines/common/evas_convert_colorspace.c new file mode 100644 index 0000000..013c2e7 --- /dev/null +++ b/libraries/evas/src/lib/engines/common/evas_convert_colorspace.c @@ -0,0 +1,186 @@ +#include "evas_common.h" +#include "evas_convert_colorspace.h" + +#define CONVERT_RGB_565_TO_RGB_888(s) \ + (((((s) << 3) & 0xf8) | (((s) >> 2) & 0x7)) | \ + ((((s) << 5) & 0xfc00) | (((s) >> 1) & 0x300)) | \ + ((((s) << 8) & 0xf80000) | (((s) << 3) & 0x70000))) + +#define CONVERT_A5P_TO_A8(s) \ + ((((s) << 3) & 0xf8) | (((s) >> 2) & 0x7)) + +#define CONVERT_ARGB_8888_TO_A_8(s) ((s) >> 24) + + +static inline void * +evas_common_convert_argb8888_to_rgb565_a5p(void *data __UNUSED__, int w __UNUSED__, int h __UNUSED__, int stride __UNUSED__, Eina_Bool has_alpha __UNUSED__) +{ + return NULL; +} + +static inline void * +evas_common_convert_rgb565_a5p_to_argb8888(void *data, int w, int h, int stride, Eina_Bool has_alpha) +{ + DATA16 *src, *end; + DATA32 *ret, *dst; + + src = data; + end = src + (stride * h); + ret = malloc(w * h * sizeof(DATA32)); + + dst = ret; + if (has_alpha) + { + DATA8 *alpha; + + alpha = (DATA8 *)end; + for (; src < end; src++, alpha++, dst++) + *dst = (CONVERT_A5P_TO_A8(*alpha) << 24) | + CONVERT_RGB_565_TO_RGB_888(*src); + } + else + { + for (; src < end; src++, dst++) + *dst = CONVERT_RGB_565_TO_RGB_888(*src); + } + return ret; +} + +static inline void * +evas_common_convert_argb8888_to_a8(void *data, int w, int h, int stride, Eina_Bool has_alpha) +{ + uint32_t *src, *end; + uint8_t *ret, *dst; + + src = data; + end = src + (stride * h); + ret = malloc(w * h); + if (!ret) return NULL; + + if (!has_alpha) + { + return memset(ret, 0xff, w * h); + } + + dst = ret; + for ( ; src < end ; src++, dst++) + *dst = CONVERT_ARGB_8888_TO_A_8(*src); + return ret; +} + + + +EAPI void * +evas_common_convert_argb8888_to(void *data, int w, int h, int stride, Eina_Bool has_alpha, Evas_Colorspace cspace) +{ + switch (cspace) + { + case EVAS_COLORSPACE_RGB565_A5P: + return evas_common_convert_argb8888_to_rgb565_a5p(data, w, h, stride, has_alpha); + default: + break; + } + return NULL; +} + +EAPI void * +evas_common_convert_rgb565_a5p_to(void *data, int w, int h, int stride, Eina_Bool has_alpha, Evas_Colorspace cspace) +{ + switch (cspace) + { + case EVAS_COLORSPACE_ARGB8888: + return evas_common_convert_rgb565_a5p_to_argb8888(data, w, h, stride, has_alpha); + default: + break; + } + return NULL; +} + +EAPI void * +evas_common_convert_yuv_422_601_to(void *data, int w, int h, Evas_Colorspace cspace) +{ + switch (cspace) + { + case EVAS_COLORSPACE_ARGB8888: + { + void *dst; + + fprintf(stderr, "to argb888\n"); + + dst = malloc(sizeof (unsigned int) * w * h); + if (!dst) return NULL; + + evas_common_convert_yuv_422_601_rgba(data, dst, w, h); + return dst; + } + default: + break; + } + return NULL; +} + +EAPI void * +evas_common_convert_yuv_422P_601_to(void *data, int w, int h, Evas_Colorspace cspace) +{ + switch (cspace) + { + case EVAS_COLORSPACE_ARGB8888: + { + void *dst; + + dst = malloc(sizeof (unsigned int) * w * h); + if (!dst) return NULL; + + evas_common_convert_yuv_420p_601_rgba(data, dst, w, h); + break; + } + default: + break; + } + return NULL; +} + +EAPI void * +evas_common_convert_yuv_420_601_to(void *data, int w, int h, Evas_Colorspace cspace) +{ + switch (cspace) + { + case EVAS_COLORSPACE_ARGB8888: + { + void *dst; + + dst = malloc(sizeof (unsigned int) * w * h); + if (!dst) return NULL; + + evas_common_convert_yuv_420_601_rgba(data, dst, w, h); + break; + } + default: + break; + } + return NULL; +} + +EAPI void * +evas_common_convert_yuv_420T_601_to(void *data, int w, int h, Evas_Colorspace cspace) +{ + switch (cspace) + { + case EVAS_COLORSPACE_ARGB8888: + { + void *dst; + + dst = malloc(sizeof (unsigned int) * w * h); + if (!dst) return NULL; + + evas_common_convert_yuv_420_601_rgba(data, dst, w, h); + break; + } + default: + break; + } + return NULL; +} + + +/* vim:set ts=8 sw=3 sts=3 expandtab cino=>5n-2f0^-2{2(0W1st0 :*/ -- cgit v1.1