From b36a1972ac14ef12019a1333d912bf3cc6353193 Mon Sep 17 00:00:00 2001 From: Taehyub Kim Date: Tue, 10 Nov 2020 15:18:40 +0900 Subject: [PATCH] evas_image_load_png.c: Support Apng Image Format Summary: This patch implements the features for playing animated png image on efl application. Test Plan: 1. build 2. and run src/example/image_apng.c Reviewers: Hermet Subscribers: vtorri, cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D12175 Change-Id: I522ec8489a9e3fd84297edc045cd13173de38526 --- data/elementary/images/apng_image.png | Bin 0 -> 63435 bytes src/examples/elementary/image_apng_example.c | 41 ++++ .../evas/image_loaders/png/evas_image_load_png.c | 253 +++++++++++++++++++-- 3 files changed, 279 insertions(+), 15 deletions(-) create mode 100644 data/elementary/images/apng_image.png create mode 100644 src/examples/elementary/image_apng_example.c diff --git a/data/elementary/images/apng_image.png b/data/elementary/images/apng_image.png new file mode 100644 index 0000000000000000000000000000000000000000..1b35084a369ee5d40908a70e01ca47fccb144ce4 GIT binary patch literal 63435 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 literal 0 HcmV?d00001 diff --git a/src/examples/elementary/image_apng_example.c b/src/examples/elementary/image_apng_example.c new file mode 100644 index 0000000..0690904 --- /dev/null +++ b/src/examples/elementary/image_apng_example.c @@ -0,0 +1,41 @@ +//Compile with: +//gcc -g image_apng_example.c -o image_apng_example `pkg-config --cflags --libs elementary` + +#include + +int +elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED) +{ + Evas_Object *win, *image; + char buf[PATH_MAX]; + + elm_app_info_set(elm_main, "elementary", "images/apng_image.png"); + elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); + + win = elm_win_util_standard_add("APNG Image", "APNG Image"); + elm_win_autodel_set(win, EINA_TRUE); + + snprintf(buf, sizeof(buf), "%s/images/apng_image.png", elm_app_data_dir_get()); + + image = elm_image_add(win); + if (!elm_image_file_set(image, buf, NULL)) + { + printf("error: could not load image \"%s\"\n", buf); + return -1; + } + + elm_image_animated_set(image, EINA_TRUE); + elm_image_animated_play_set(image, EINA_TRUE); + + evas_object_size_hint_weight_set(image, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, image); + evas_object_show(image); + + evas_object_resize(win, 300, 300); + evas_object_show(win); + + elm_run(); + + return 0; +} +ELM_MAIN() diff --git a/src/modules/evas/image_loaders/png/evas_image_load_png.c b/src/modules/evas/image_loaders/png/evas_image_load_png.c index b6f3441..962af15 100644 --- a/src/modules/evas/image_loaders/png/evas_image_load_png.c +++ b/src/modules/evas/image_loaders/png/evas_image_load_png.c @@ -28,12 +28,27 @@ struct _Evas_PNG_Info volatile Eina_Bool hasa; }; -typedef struct _Evas_Loader_Internal Evas_Loader_Internal; -struct _Evas_Loader_Internal +typedef struct _Loader_Info { Eina_File *f; Evas_Image_Load_Opts *opts; -}; + //TIZEN_ONLY(20201111): Support APNG Image Format + Evas_Image_Animated *animated; + unsigned char *buffer; + unsigned char *buffer_pre; + // +} Loader_Info; + +//TIZEN_ONLY(20201111): Support APNG Image Format +typedef struct _Frame_Info +{ + int index; + int x, y, w, h; + double delay; + unsigned char dop; + unsigned char bop; +} Frame_Info; +// static const Evas_Colorspace cspace_grey[2] = { EVAS_COLORSPACE_GRY8, @@ -89,31 +104,98 @@ _evas_image_png_read(png_structp png_ptr, png_bytep out, png_size_t count) static void * evas_image_load_file_open_png(Eina_File *f, Eina_Stringshare *key EINA_UNUSED, Evas_Image_Load_Opts *opts, - Evas_Image_Animated *animated EINA_UNUSED, + Evas_Image_Animated *animated, int *error) { - Evas_Loader_Internal *loader; - - loader = calloc(1, sizeof (Evas_Loader_Internal)); + Loader_Info *loader = calloc(1, sizeof (Loader_Info)); if (!loader) { *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; return NULL; } - - loader->f = f; + loader->f = eina_file_dup(f); loader->opts = opts; + + //TIZEN_ONLY(20201111): Support APNG Image Format + loader->animated = animated; + // + return loader; } static void evas_image_load_file_close_png(void *loader_data) { - free(loader_data); + //TIZEN_ONLY(20201111): Support APNG Image Format + Loader_Info *loader = loader_data; + if (loader->f) eina_file_close(loader->f); + if (loader->buffer) free(loader->buffer); + if (loader->buffer_pre) free(loader->buffer_pre); + // + free(loader); } + +//TIZEN_ONLY(20201111): Support APNG Image Format +static void +_new_frame(Evas_Image_Animated *animated, unsigned char *data, int x, int y, int width, int height, int index, double delay, unsigned char dop, unsigned char bop) +{ + // Allocate Frame Data + Image_Entry_Frame *frame; + + frame = calloc(1, sizeof(Image_Entry_Frame)); + if (!frame) return; + + frame->info = calloc(1, sizeof(Frame_Info)); + if (!frame->info) + { + free(frame); + return; + } + + frame->data = calloc(width * height, sizeof(DATA32)); + if (!frame->data) + { + free(frame->info); + free(frame); + return; + } + + Frame_Info *finfo = frame->info; + + finfo->x = x; + finfo->y = y; + finfo->w = width; + finfo->h = height; + finfo->index = index; + finfo->delay = delay; + finfo->dop = dop; + finfo->bop = bop; + + memcpy(frame->data, data, width * height * sizeof(DATA32)); + + animated->frames = eina_list_append(animated->frames, frame); +} + +static Image_Entry_Frame * +_find_frame(Evas_Image_Animated *animated, int index) +{ + // Find Frame + Eina_List *l; + Image_Entry_Frame *frame; + + if (!animated->frames) return NULL; + EINA_LIST_FOREACH(animated->frames, l, frame) + { + if (((Frame_Info*)frame->info)->index == index) + return frame; + } + return NULL; +} +// + static Eina_Bool -_evas_image_load_file_internal_head_png(Evas_Loader_Internal *loader, +_evas_image_load_file_internal_head_png(Loader_Info *loader, Evas_Image_Property *prop, Evas_PNG_Info *epi, int *error, Eina_Bool is_for_head) @@ -223,6 +305,57 @@ _evas_image_load_file_internal_head_png(Evas_Loader_Internal *loader, prop->info.h = (int) epi->h32; } + //TIZEN_ONLY(20201111): Support APNG Image Format + if (png_get_valid(epi->png_ptr, epi->info_ptr, PNG_INFO_acTL)) + { + png_uint_32 frames = 1; + png_uint_32 plays = 0; + png_uint_32 w0 = epi->w32; + png_uint_32 h0 = epi->h32; + png_uint_32 x0 = 0; + png_uint_32 y0 = 0; + png_get_acTL(epi->png_ptr, epi->info_ptr, &frames, &plays); + int channel = png_get_channels(epi->png_ptr, epi->info_ptr); + + png_set_bgr(epi->png_ptr); + + // Define default delay + unsigned short delay_num = 1; + unsigned short delay_den = 10; + unsigned char dop = 0; + unsigned char bop = 0; + + if (!loader->buffer) + { + loader->buffer = calloc(prop->info.w * prop->info.h, sizeof(DATA32)); + if (!loader->buffer) goto close_file; + } + + Evas_Image_Animated *animated = loader->animated; + + // Read Apng Image Frames + int i, j; + for (i = 0; i < (int)frames; i++) + { + png_read_frame_head(epi->png_ptr, epi->info_ptr); + png_get_next_frame_fcTL(epi->png_ptr, epi->info_ptr, &w0, &h0, &x0, &y0, &delay_num, &delay_den, &dop, &bop); + unsigned char *cur_frame = calloc(w0 * h0 * channel, sizeof(unsigned char)); + if (!cur_frame) goto close_file; + double delay = (double)delay_num / delay_den; + for (j = 0; j < (int)h0; j++) + png_read_row(epi->png_ptr, cur_frame + (j * w0 * channel), NULL); + _new_frame(animated, cur_frame, x0, y0, w0, h0, i + 1, delay, dop, bop); + free(cur_frame); + } + png_read_end(epi->png_ptr, epi->info_ptr); + + animated->animated = 1; + animated->loop_count = plays; + animated->loop_hint = EVAS_IMAGE_ANIMATED_HINT_LOOP; + animated->frame_count = frames; + } + // + if (png_get_valid(epi->png_ptr, epi->info_ptr, PNG_INFO_tRNS)) { /* expand transparency entry -> alpha channel if present */ @@ -303,7 +436,7 @@ evas_image_load_file_head_png(void *loader_data, Evas_Image_Property *prop, int *error) { - Evas_Loader_Internal *loader = loader_data; + Loader_Info *loader = loader_data; Evas_PNG_Info epi; memset(&epi, 0, sizeof (Evas_PNG_Info)); @@ -327,7 +460,7 @@ evas_image_load_file_head_with_data_png(void *loader_data, void *pixels, int *error) { - Evas_Loader_Internal *loader = loader_data; + Loader_Info *loader = loader_data; Evas_Image_Load_Opts *opts; Eina_File *f; @@ -628,13 +761,50 @@ evas_image_load_file_head_with_data_png(void *loader_data, return r; } +//TIZEN_ONLY(20201111): Support APNG Image Format +static unsigned char* +_combine_frame(Loader_Info *loader, Evas_Image_Property *prop, Image_Entry_Frame *frame) +{ + Frame_Info *finfo = (Frame_Info*)frame->info; + uint32_t *buf = (uint32_t*)loader->buffer; + uint32_t *src = (uint32_t*)frame->data; + + if (finfo->dop == PNG_DISPOSE_OP_PREVIOUS) + { + if (!loader->buffer_pre) + { + loader->buffer_pre = calloc(prop->info.w * prop->info.h, sizeof(DATA32)); + if (!loader->buffer_pre) return NULL; + } + memcpy(loader->buffer_pre, buf, prop->info.w * prop->info.h * sizeof(DATA32)); + } + + int x, y, w, h; + x = finfo->x; + y = finfo->y; + w = finfo->w; + h = finfo->h; + + int i, j; + // Copy ROI image + for (i = 0; i < h; i++) + for (j = 0; j < w; j++) + buf[((y + i) * prop->info.w) + (x + j)] = src[(i * w) + j]; + + return (unsigned char*)buf; +} +// + static Eina_Bool evas_image_load_file_data_png(void *loader_data, Evas_Image_Property *prop, void *pixels, int *error) { - Evas_Loader_Internal *loader = loader_data; + Loader_Info *loader = loader_data; + //TIZEN_ONLY(20201111): Support APNG Image Format + Evas_Image_Animated *animated = loader->animated; + // Evas_Image_Load_Opts *opts; Eina_File *f; @@ -654,6 +824,35 @@ evas_image_load_file_data_png(void *loader_data, memset(&epi, 0, sizeof (Evas_PNG_Info)); + //TIZEN_ONLY(20201111): Support APNG Image Format + if (animated->animated) + { + surface = pixels; + int index = animated->cur_frame; + if (index == 0) index = 1; + // Find Current Apng Image Frame + Image_Entry_Frame *frame = _find_frame(animated, index); + if (!frame) goto close_file; + + // Combine Apng Image + unsigned char *data = _combine_frame(loader, prop, frame); + if (!data) goto close_file; + memcpy(surface, data, prop->info.w * prop->info.h * sizeof(DATA32)); + + // Apply Dispose Option + Frame_Info *finfo = (Frame_Info*)frame->info; + if (finfo->dop == PNG_DISPOSE_OP_BACKGROUND) + memset(loader->buffer, 0, prop->info.w * prop->info.h * sizeof(DATA32)); + else if (finfo->dop == PNG_DISPOSE_OP_PREVIOUS) + memcpy(loader->buffer, loader->buffer_pre, prop->info.w * prop->info.h * sizeof(DATA32)); + + prop->info.premul = EINA_TRUE; + r = EINA_TRUE; + + goto close_file; + } + // + if (!_evas_image_load_file_internal_head_png(loader, prop, &epi, error, EINA_FALSE)) return EINA_FALSE; @@ -915,6 +1114,28 @@ evas_image_load_file_data_png(void *loader_data, return r; } +//TIZEN_ONLY(20201111): Support APNG Image Format +static double +evas_image_load_frame_duration_png(void *loader_data, + int start_frame, + int frame_num) +{ + Loader_Info *loader = loader_data; + Evas_Image_Animated *animated = loader->animated; + + if (!animated->animated) return -1.0; + if ((start_frame + frame_num) > animated->frame_count) return -1.0; + if (frame_num < 0) return -1.0; + if (start_frame < 1) return -1.0; + + Image_Entry_Frame *frame = _find_frame(animated, start_frame); + if (frame == NULL) return -1.0; + Frame_Info *finfo = frame->info; + + return finfo->delay; +} +// + static Evas_Image_Load_Func evas_image_load_png_func = { EVAS_IMAGE_LOAD_VERSION, @@ -923,7 +1144,9 @@ static Evas_Image_Load_Func evas_image_load_png_func = evas_image_load_file_head_png, evas_image_load_file_head_with_data_png, evas_image_load_file_data_png, - NULL, + //TIZEN_ONLY(20201111): Support APNG Image Format + evas_image_load_frame_duration_png, + // EINA_TRUE, EINA_FALSE }; -- 2.7.4