evas: break Image_Loader API to allow for getting property from the data field of an image.

Reviewed-by: Hermet Park <hermetpark@gmail.com>
Differential Revision: https://phab.enlightenment.org/D9101
This commit is contained in:
Cedric BAIL 2019-05-31 11:57:53 -07:00
parent 9f35c74d9d
commit ce076d1323
19 changed files with 130 additions and 103 deletions

View File

@ -130,7 +130,14 @@ struct _Evas_Image_Load_Opts
};
typedef Emile_Image_Animated Evas_Image_Animated;
typedef Emile_Image_Property Evas_Image_Property;
typedef struct _Evas_Image_Property Evas_Image_Property;
struct _Evas_Image_Property
{
Emile_Image_Property info;
// need_data is set to True when to get accurate property, data need to be loaded
Eina_Bool need_data;
};
typedef struct _Evas_Image_Load_Func Evas_Image_Load_Func;
@ -186,7 +193,7 @@ typedef Emile_Colorspace Evas_Colorspace; /**< Colorspaces for pixel data suppor
#define EVAS_COLORSPACE_RGBA_S3TC_DXT4 EMILE_COLORSPACE_RGBA_S3TC_DXT4
#define EVAS_COLORSPACE_RGBA_S3TC_DXT5 EMILE_COLORSPACE_RGBA_S3TC_DXT5
#define EVAS_IMAGE_LOAD_VERSION 1
#define EVAS_IMAGE_LOAD_VERSION 2
struct _Evas_Image_Load_Func
{
@ -198,11 +205,14 @@ struct _Evas_Image_Load_Func
void (*file_close) (void *loader_data);
Eina_Bool (*file_head) (void *loader_data,
Evas_Image_Property *prop,
int *error);
Evas_Image_Property *prop,
int *error);
Eina_Bool (*file_head_with_data) (void *loader_data,
Evas_Image_Property *prop,
void *pixels, int *error);
Eina_Bool (*file_data) (void *loader_data,
Evas_Image_Property *prop,
void *pixels, int *error);
Evas_Image_Property *prop,
void *pixels, int *error);
double (*frame_duration) (void *loader_data,
int start, int frame_num);

View File

@ -215,17 +215,17 @@ _evas_image_file_header(Evas_Module *em, Image_Entry *ie, int *error)
DBG("loaded file head using module '%s' (%p): %s",
em->definition->name, em, file);
ie->w = property.w;
ie->h = property.h;
ie->borders.l = property.borders.l;
ie->borders.r = property.borders.r;
ie->borders.t = property.borders.t;
ie->borders.b = property.borders.b;
ie->scale = property.scale;
ie->flags.alpha = property.alpha;
if (property.cspaces) ie->cspaces = property.cspaces;
ie->flags.rotated = property.rotated;
ie->flags.flipped = property.flipped;
ie->w = property.info.w;
ie->h = property.info.h;
ie->borders.l = property.info.borders.l;
ie->borders.r = property.info.borders.r;
ie->borders.t = property.info.borders.t;
ie->borders.b = property.info.borders.b;
ie->scale = property.info.scale;
ie->flags.alpha = property.info.alpha;
if (property.info.cspaces) ie->cspaces = property.info.cspaces;
ie->flags.rotated = property.info.rotated;
ie->flags.flipped = property.info.flipped;
r = EINA_FALSE;
}
else
@ -448,20 +448,20 @@ end:
_timestamp_build(&(ie->tstamp), &st);
memset(&property, 0, sizeof (property));
property.w = ie->w;
property.h = ie->h;
property.scale = ie->scale;
property.rotated = ie->flags.rotated;
property.flipped = ie->flags.flipped;
property.premul = EINA_FALSE;
property.alpha_sparse = EINA_FALSE;
property.cspace = ie->space;
property.info.w = ie->w;
property.info.h = ie->h;
property.info.scale = ie->scale;
property.info.rotated = ie->flags.rotated;
property.info.flipped = ie->flags.flipped;
property.info.premul = EINA_FALSE;
property.info.alpha_sparse = EINA_FALSE;
property.info.cspace = ie->space;
evas_cache_image_surface_alloc(ie, ie->w, ie->h);
property.borders.l = ie->borders.l;
property.borders.r = ie->borders.r;
property.borders.t = ie->borders.t;
property.borders.b = ie->borders.b;
property.info.borders.l = ie->borders.l;
property.info.borders.r = ie->borders.r;
property.info.borders.t = ie->borders.t;
property.info.borders.b = ie->borders.b;
pixels = evas_cache_image_pixels(ie);
if (!pixels)
@ -472,9 +472,9 @@ end:
evas_image_load_func->file_data(ie->loader_data, &property, pixels, &ret);
ie->flags.alpha_sparse = property.alpha_sparse;
ie->flags.alpha_sparse = property.info.alpha_sparse;
if (property.premul) evas_common_image_premul(ie);
if (property.info.premul) evas_common_image_premul(ie);
return ret;
}

View File

@ -319,7 +319,7 @@ evas_image_load_file_close_bmp(void *loader_data)
static Eina_Bool
evas_image_load_file_head_bmp(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
Evas_Loader_Internal *loader;
@ -454,7 +454,7 @@ evas_image_load_file_head_bmp(void *loader_data,
static Eina_Bool
evas_image_load_file_data_bmp(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
void *pixels,
int *error)
{
@ -1432,8 +1432,9 @@ static Evas_Image_Load_Func evas_image_load_bmp_func =
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_bmp,
evas_image_load_file_close_bmp,
evas_image_load_file_head_bmp,
evas_image_load_file_data_bmp,
(void*) evas_image_load_file_head_bmp,
NULL,
(void*) evas_image_load_file_data_bmp,
NULL,
EINA_TRUE,
EINA_FALSE

View File

@ -161,7 +161,7 @@ _dword_read(const char **m)
static Eina_Bool
evas_image_load_file_head_dds(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
static const unsigned int base_flags = /* 0x1007 */
@ -313,7 +313,7 @@ on_error:
}
static Eina_Bool
_dds_data_load(Evas_Loader_Internal *loader, Evas_Image_Property *prop,
_dds_data_load(Evas_Loader_Internal *loader, Emile_Image_Property *prop,
unsigned char *map, void *pixels, int *error)
{
const unsigned char *src;
@ -442,7 +442,7 @@ on_error:
Eina_Bool
evas_image_load_file_data_dds(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
void *pixels,
int *error)
{
@ -532,8 +532,9 @@ Evas_Image_Load_Func evas_image_load_dds_func =
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_dds,
evas_image_load_file_close_dds,
evas_image_load_file_head_dds,
evas_image_load_file_data_dds,
(void*) evas_image_load_file_head_dds,
NULL,
(void*) evas_image_load_file_data_dds,
NULL,
EINA_TRUE,
EINA_FALSE

View File

@ -95,7 +95,7 @@ static const Evas_Colorspace cspaces_etc2_rgba[] = {
static Eina_Bool
evas_image_load_file_head_eet(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
Evas_Loader_Internal *loader = loader_data;
@ -163,7 +163,7 @@ evas_image_load_file_head_eet(void *loader_data,
Eina_Bool
evas_image_load_file_data_eet(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
void *pixels,
int *error)
{
@ -227,8 +227,9 @@ Evas_Image_Load_Func evas_image_load_eet_func =
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_eet,
evas_image_load_file_close_eet,
evas_image_load_file_head_eet,
evas_image_load_file_data_eet,
(void*) evas_image_load_file_head_eet,
NULL,
(void*) evas_image_load_file_data_eet,
NULL,
EINA_TRUE,
EINA_FALSE

View File

@ -101,7 +101,7 @@ dotcat(char *dest, const char *src)
static Eina_Bool
_load(Eina_File *ef, const char *key,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
Evas_Image_Load_Opts *opts,
void *pixels,
int *error, Eina_Bool get_data)
@ -422,7 +422,7 @@ evas_image_load_file_close_generic(void *loader_data)
static Eina_Bool
evas_image_load_file_head_generic(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
Evas_Loader_Internal *loader = loader_data;
@ -432,7 +432,7 @@ evas_image_load_file_head_generic(void *loader_data,
static Eina_Bool
evas_image_load_file_data_generic(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
void *pixels,
int *error)
{
@ -446,8 +446,9 @@ Evas_Image_Load_Func evas_image_load_generic_func =
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_generic,
evas_image_load_file_close_generic,
evas_image_load_file_head_generic,
evas_image_load_file_data_generic,
(void*) evas_image_load_file_head_generic,
NULL,
(void*) evas_image_load_file_data_generic,
NULL,
EINA_TRUE,
EINA_FALSE

View File

@ -399,7 +399,7 @@ _file_read(GifFileType *gft, GifByteType *buf, int len)
static Eina_Bool
evas_image_load_file_head_gif2(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
Loader_Info *loader = loader_data;
@ -569,7 +569,7 @@ on_error: // jump here on any errors to clean up
static Eina_Bool
evas_image_load_file_data_gif2(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
void *pixels,
int *error)
{
@ -908,8 +908,9 @@ static Evas_Image_Load_Func evas_image_load_gif_func =
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_gif2,
evas_image_load_file_close_gif2,
evas_image_load_file_head_gif2,
evas_image_load_file_data_gif2,
(void*) evas_image_load_file_head_gif2,
NULL,
(void*) evas_image_load_file_data_gif2,
evas_image_load_frame_duration_gif2,
EINA_TRUE,
EINA_FALSE

View File

@ -111,7 +111,7 @@ evas_image_load_file_close_ico(void *loader_data)
static Eina_Bool
evas_image_load_file_head_ico(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
Evas_Loader_Internal *loader = loader_data;
@ -340,7 +340,7 @@ evas_image_load_file_head_ico(void *loader_data,
static Eina_Bool
evas_image_load_file_data_ico(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
void *pixels,
int *error)
{
@ -795,8 +795,9 @@ static Evas_Image_Load_Func evas_image_load_ico_func =
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_ico,
evas_image_load_file_close_ico,
evas_image_load_file_head_ico,
evas_image_load_file_data_ico,
(void*) evas_image_load_file_head_ico,
NULL,
(void*) evas_image_load_file_data_ico,
NULL,
EINA_TRUE,
EINA_FALSE

View File

@ -403,7 +403,7 @@ evas_image_load_file_close_jp2k(void *loader_data)
static Eina_Bool
evas_image_load_file_head_jp2k(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
Evas_Loader_Internal *loader = loader_data;
@ -432,7 +432,7 @@ evas_image_load_file_head_jp2k(void *loader_data,
static Eina_Bool
evas_image_load_file_data_jp2k(void *loader_data,
Evas_Image_Property *prop EINA_UNUSED,
Emile_Image_Property *prop EINA_UNUSED,
void *pixels,
int *error)
{
@ -465,8 +465,9 @@ static Evas_Image_Load_Func evas_image_load_jp2k_func =
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_jp2k,
evas_image_load_file_close_jp2k,
evas_image_load_file_head_jp2k,
evas_image_load_file_data_jp2k,
(void*) evas_image_load_file_head_jp2k,
NULL,
(void*) evas_image_load_file_data_jp2k,
NULL,
EINA_TRUE,
EINA_TRUE

View File

@ -70,7 +70,7 @@ evas_image_load_file_close_jpeg(void *loader_data)
static Eina_Bool
evas_image_load_file_head_jpeg(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
Evas_Loader_Internal *loader = loader_data;
@ -95,7 +95,7 @@ _evas_image_load_jpeg_cancelled(void *data EINA_UNUSED,
Eina_Bool
evas_image_load_file_data_jpeg(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
void *pixels,
int *error)
{
@ -119,8 +119,9 @@ Evas_Image_Load_Func evas_image_load_jpeg_func =
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_jpeg,
evas_image_load_file_close_jpeg,
evas_image_load_file_head_jpeg,
evas_image_load_file_data_jpeg,
(void*) evas_image_load_file_head_jpeg,
NULL,
(void*) evas_image_load_file_data_jpeg,
NULL,
EINA_TRUE,
EINA_TRUE

View File

@ -67,7 +67,7 @@ evas_image_load_file_close_pmaps(void *loader_data EINA_UNUSED)
static Eina_Bool
evas_image_load_file_head_pmaps(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
Eina_File *f = loader_data;
@ -95,7 +95,7 @@ evas_image_load_file_head_pmaps(void *loader_data,
static Eina_Bool
evas_image_load_file_data_pmaps(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
void *pixels,
int *error)
{
@ -554,8 +554,9 @@ Evas_Image_Load_Func evas_image_load_pmaps_func = {
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_pmaps,
evas_image_load_file_close_pmaps,
evas_image_load_file_head_pmaps,
evas_image_load_file_data_pmaps,
(void*) evas_image_load_file_head_pmaps,
NULL,
(void*) evas_image_load_file_data_pmaps,
NULL,
EINA_TRUE,
EINA_FALSE

View File

@ -77,7 +77,7 @@ evas_image_load_file_close_png(void *loader_data)
static Eina_Bool
evas_image_load_file_head_png(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
Evas_Loader_Internal *loader = loader_data;
@ -217,7 +217,7 @@ evas_image_load_file_head_png(void *loader_data,
static Eina_Bool
evas_image_load_file_data_png(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
void *pixels,
int *error)
{
@ -559,8 +559,9 @@ static Evas_Image_Load_Func evas_image_load_png_func =
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_png,
evas_image_load_file_close_png,
evas_image_load_file_head_png,
evas_image_load_file_data_png,
(void*) evas_image_load_file_head_png,
NULL,
(void*) evas_image_load_file_data_png,
NULL,
EINA_TRUE,
EINA_FALSE

View File

@ -147,7 +147,7 @@ evas_image_load_file_close_psd(void *loader_data EINA_UNUSED)
static Eina_Bool
evas_image_load_file_head_psd(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
Eina_File *f = loader_data;
@ -691,7 +691,7 @@ read_psd_rgb(void *pixels, PSD_Header *head, const unsigned char *map, size_t le
}
Eina_Bool
read_psd_cmyk(Evas_Image_Property *prop, void *pixels, PSD_Header *head, const unsigned char *map, size_t length, size_t *position, int *error)
read_psd_cmyk(Emile_Image_Property *prop, void *pixels, PSD_Header *head, const unsigned char *map, size_t length, size_t *position, int *error)
{
unsigned int color_mode, resource_size, misc_info, size, j, data_size;
unsigned short compressed;
@ -797,7 +797,7 @@ read_psd_cmyk(Evas_Image_Property *prop, void *pixels, PSD_Header *head, const u
static Eina_Bool
evas_image_load_file_data_psd(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
void *pixels,
int *error)
{
@ -885,8 +885,9 @@ static const Evas_Image_Load_Func evas_image_load_psd_func = {
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_psd,
evas_image_load_file_close_psd,
evas_image_load_file_head_psd,
evas_image_load_file_data_psd,
(void*) evas_image_load_file_head_psd,
NULL,
(void*) evas_image_load_file_data_psd,
NULL,
EINA_TRUE,
EINA_FALSE

View File

@ -68,7 +68,7 @@ evas_image_load_file_close_tga(void *loader_data EINA_UNUSED)
static Eina_Bool
evas_image_load_file_head_tga(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
Eina_File *f = loader_data;
@ -164,7 +164,7 @@ close_file:
static Eina_Bool
evas_image_load_file_data_tga(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
void *pixels,
int *error)
{
@ -566,8 +566,9 @@ static Evas_Image_Load_Func evas_image_load_tga_func =
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_tga,
evas_image_load_file_close_tga,
evas_image_load_file_head_tga,
evas_image_load_file_data_tga,
(void*) evas_image_load_file_head_tga,
NULL,
(void*) evas_image_load_file_data_tga,
NULL,
EINA_TRUE,
EINA_FALSE

View File

@ -70,7 +70,7 @@ evas_image_load_file_close_tgv(void *loader_data)
static Eina_Bool
evas_image_load_file_head_tgv(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
Evas_Loader_Internal *loader = loader_data;
@ -87,7 +87,7 @@ evas_image_load_file_head_tgv(void *loader_data,
Eina_Bool
evas_image_load_file_data_tgv(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
void *pixels,
int *error)
{
@ -108,8 +108,9 @@ Evas_Image_Load_Func evas_image_load_tgv_func =
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_tgv,
evas_image_load_file_close_tgv,
evas_image_load_file_head_tgv,
evas_image_load_file_data_tgv,
(void*) evas_image_load_file_head_tgv,
NULL,
(void*) evas_image_load_file_data_tgv,
NULL,
EINA_TRUE,
EINA_FALSE

View File

@ -103,7 +103,7 @@ evas_image_load_file_close_tiff(void *loader_data EINA_UNUSED)
static Eina_Bool
evas_image_load_file_head_tiff(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
Eina_File *f = loader_data;
@ -186,7 +186,7 @@ evas_image_load_file_head_tiff(void *loader_data,
static Eina_Bool
evas_image_load_file_data_tiff(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
void *pixels,
int *error)
{
@ -335,8 +335,9 @@ static Evas_Image_Load_Func evas_image_load_tiff_func =
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_tiff,
evas_image_load_file_close_tiff,
evas_image_load_file_head_tiff,
evas_image_load_file_data_tiff,
(void*) evas_image_load_file_head_tiff,
NULL,
(void*) evas_image_load_file_data_tiff,
NULL,
EINA_TRUE,
EINA_FALSE

View File

@ -41,7 +41,7 @@ evas_image_load_file_close_wbmp(void *loader_data EINA_UNUSED)
static Eina_Bool
evas_image_load_file_head_wbmp(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
Eina_File *f = loader_data;
@ -98,7 +98,7 @@ evas_image_load_file_head_wbmp(void *loader_data,
static Eina_Bool
evas_image_load_file_data_wbmp(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
void *pixels,
int *error)
{
@ -184,8 +184,9 @@ static Evas_Image_Load_Func evas_image_load_wbmp_func =
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_wbmp,
evas_image_load_file_close_wbmp,
evas_image_load_file_head_wbmp,
evas_image_load_file_data_wbmp,
(void*) evas_image_load_file_head_wbmp,
NULL,
(void*) evas_image_load_file_data_wbmp,
NULL,
EINA_TRUE,
EINA_FALSE

View File

@ -52,7 +52,7 @@ evas_image_load_file_close_webp(void *loader_data EINA_UNUSED)
static Eina_Bool
evas_image_load_file_head_webp(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
Eina_File *f = loader_data;
@ -73,7 +73,7 @@ evas_image_load_file_head_webp(void *loader_data,
static Eina_Bool
evas_image_load_file_data_webp(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
void *pixels,
int *error)
{
@ -115,8 +115,9 @@ static Evas_Image_Load_Func evas_image_load_webp_func =
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_webp,
evas_image_load_file_close_webp,
evas_image_load_file_head_webp,
evas_image_load_file_data_webp,
(void*) evas_image_load_file_head_webp,
NULL,
(void*) evas_image_load_file_data_webp,
NULL,
EINA_TRUE,
EINA_FALSE

View File

@ -1688,7 +1688,7 @@ _cmap_cmp_key_cb(const Eina_Rbtree *node, const void *key, int length EINA_UNUSE
/** FIXME: clean this up and make more efficient **/
static Eina_Bool
evas_image_load_file_xpm(Eina_File *f, Evas_Image_Property *prop, void *pixels, int load_data, int *error)
evas_image_load_file_xpm(Eina_File *f, Emile_Image_Property *prop, void *pixels, int load_data, int *error)
{
DATA32 *ptr, *end, *head = NULL;
const char *map = NULL;
@ -2193,7 +2193,7 @@ evas_image_load_file_close_xpm(void *loader_data EINA_UNUSED)
static Eina_Bool
evas_image_load_file_head_xpm(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
int *error)
{
Eina_File *f = loader_data;
@ -2203,7 +2203,7 @@ evas_image_load_file_head_xpm(void *loader_data,
static Eina_Bool
evas_image_load_file_data_xpm(void *loader_data,
Evas_Image_Property *prop,
Emile_Image_Property *prop,
void *pixels,
int *error)
{
@ -2217,8 +2217,9 @@ static Evas_Image_Load_Func evas_image_load_xpm_func =
EVAS_IMAGE_LOAD_VERSION,
evas_image_load_file_open_xpm,
evas_image_load_file_close_xpm,
evas_image_load_file_head_xpm,
evas_image_load_file_data_xpm,
(void*) evas_image_load_file_head_xpm,
NULL,
(void*) evas_image_load_file_data_xpm,
NULL,
EINA_FALSE,
EINA_FALSE