summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCedric BAIL <cedric.bail@samsung.com>2014-03-28 17:51:44 +0900
committerCedric BAIL <cedric.bail@free.fr>2014-04-01 19:55:07 +0900
commite93dff3dcccb3e6b6431240c84302dd7abd82f3f (patch)
tree945554175f4001fd4736918415b6ef92640e48ad
parent2efc712603153dec40050dc7233c8ea160a0805f (diff)
downloadefl-devs/cedric/etc.tar.gz
evas: make eet negociate it's colorspace with evas.devs/cedric/etc
-rw-r--r--src/modules/evas/loaders/eet/evas_image_load_eet.c36
1 files changed, 32 insertions, 4 deletions
diff --git a/src/modules/evas/loaders/eet/evas_image_load_eet.c b/src/modules/evas/loaders/eet/evas_image_load_eet.c
index 83d5c4106b..1b518b3e1e 100644
--- a/src/modules/evas/loaders/eet/evas_image_load_eet.c
+++ b/src/modules/evas/loaders/eet/evas_image_load_eet.c
@@ -64,6 +64,11 @@ _evas_image_load_return_error(int err, int *error)
return EINA_FALSE;
}
+static const Evas_Colorspace cspaces_etc1[2] = {
+ EVAS_COLORSPACE_ETC1,
+ EVAS_COLORSPACE_ARGB8888
+};
+
static Eina_Bool
evas_image_load_file_head_eet(void *loader_data,
Evas_Image_Property *prop,
@@ -72,6 +77,7 @@ evas_image_load_file_head_eet(void *loader_data,
Evas_Loader_Internal *loader = loader_data;
int a, compression, quality;
Eet_Image_Encoding lossy;
+ const Eet_Colorspace *cspaces;
int ok;
ok = eet_data_image_header_read(loader->ef, loader->key,
@@ -81,6 +87,18 @@ evas_image_load_file_head_eet(void *loader_data,
if (IMG_TOO_BIG(prop->w, prop->h))
return _evas_image_load_return_error(EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED, error);
+ if (eet_data_image_colorspace_get(loader->ef, loader->key, NULL, &cspaces))
+ {
+ unsigned int i;
+
+ for (i = 0; cspaces[i] != EET_COLORSPACE_ARGB8888; i++)
+ if (cspaces[i] == EET_COLORSPACE_ETC1)
+ {
+ prop->cspaces = cspaces_etc1;
+ break;
+ }
+ }
+
prop->alpha = !!a;
*error = EVAS_LOAD_ERROR_NONE;
@@ -98,13 +116,23 @@ evas_image_load_file_data_eet(void *loader_data,
Eet_Image_Encoding lossy;
DATA32 *body, *p, *end;
DATA32 nas = 0;
+ Eet_Colorspace cspace;
- ok = eet_data_image_read_to_surface(loader->ef, loader->key, 0, 0,
- pixels, prop->w, prop->h, prop->w * 4,
- &alpha, &compression, &quality, &lossy);
+ switch (prop->cspace)
+ {
+ case EVAS_COLORSPACE_ETC1: cspace = EET_COLORSPACE_ETC1; break;
+ case EVAS_COLORSPACE_ARGB8888: cspace = EVAS_COLORSPACE_ARGB8888; break;
+ default:
+ return _evas_image_load_return_error(EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED, error);
+ }
+
+ ok = eet_data_image_read_to_cspace_surface_cipher(loader->ef, loader->key, NULL, 0, 0,
+ pixels, prop->w, prop->h, prop->w * 4,
+ cspace,
+ &alpha, &compression, &quality, &lossy);
if (!ok)
return _evas_image_load_return_error(EVAS_LOAD_ERROR_GENERIC, error);
-
+
if (alpha)
{
prop->alpha = 1;