Add testsuite for new version gif encoder(V2) 66/141366/5 submit/tizen/20170804.071846
authorJiyong Min <jiyong.min@samsung.com>
Mon, 31 Jul 2017 06:59:00 +0000 (15:59 +0900)
committerhj kim <backto.kim@samsung.com>
Thu, 3 Aug 2017 23:43:36 +0000 (23:43 +0000)
Change-Id: I47b4bf663b3abb66da32698de2a5dc572b118a1d
Signed-off-by: Jiyong Min <jiyong.min@samsung.com>
gif/test/Makefile.am
gif/test/mm_util_gif_testsuite.c

index b724dff..dbee4d8 100755 (executable)
@@ -4,7 +4,8 @@ mm_util_gif_testsuite_SOURCES = mm_util_gif_testsuite.c
 
 mm_util_gif_testsuite_CFLAGS = -I$(srcdir)/../include \
                                -I$(srcdir)/../../imgp/include
-mm_util_gif_testsuite_CFLAGS += $(MEDIA_CFLAGS) \
+mm_util_gif_testsuite_CFLAGS += $(GLIB_CFLAGS) \
+                                $(MEDIA_CFLAGS) \
                                 -fPIE -pie \
                                 $(TZ_PLATFORM_CONFIG_FLAGS)
 
index b99ae12..431b74b 100755 (executable)
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
+#include <limits.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <mm_util_gif.h>
 
-#define DECODE_RESULT_PATH "/media/decode_test."
-#define TRUE  1
-#define FALSE 0
-#define BUFFER_SIZE 128
+#define ENCODED_FILEPATH               "/opt/usr/home/owner/media/mm_util_test.gif"
+#define ANIMATED_FRAME_MAX     100
+
+#ifdef GIF_ENCODER_V2
+static gboolean g_encode_mem = FALSE;
+#endif
+
+typedef struct {
+       char file_name[PATH_MAX];
+       mm_util_gif_data decoded;
+} gif_test_data_s;
+
+#ifdef GIF_ENCODER_V2
+static int _write_file(const char *file_name, void *data, size_t data_size)
+{
+       FILE *fp = NULL;
+
+       fprintf(stderr, "\tdata %s %p size:%u\n", file_name, data, data_size);
+
+       if (!file_name || !data || data_size == 0) {
+               fprintf(stderr, "\tinvalid data %s %p size:%u\n", file_name, data, data_size);
+               return FALSE;
+       }
+
+       fprintf(stderr, "\tTry to open %s to write\n", file_name);
+
+       fp = fopen(file_name, "w");
+       if (fp == NULL) {
+               fprintf(stderr, "\tfile open failed %d\n", errno);
+               return FALSE;
+       }
+
+       fwrite(data, 1, data_size, fp);
+       fclose(fp);
+       fp = NULL;
+
+       fprintf(stderr, "\tfile [%s] write DONE\n", file_name);
+
+       return TRUE;
+}
+#endif
 
 static inline void flush_stdin()
 {
@@ -41,44 +79,155 @@ static inline void flush_stdin()
 int main(int argc, char *argv[])
 {
        int ret = 0;
-       mm_util_gif_data decoded;
+       int i = 0, nfiles = 0;
+       gif_test_data_s files[ANIMATED_FRAME_MAX];
 
        if (argc < 2) {
                fprintf(stderr, "\t[usage]\n");
-               fprintf(stderr, "\t\t1. decode : mm_util_gif_testsuite decode filepath.gif\n");
+               fprintf(stderr, "\t\t1. decode : %s decode filepath\n", argv[0]);
+#ifdef GIF_ENCODER_V2
+               fprintf(stderr, "\t\t2. encode-agif/encode-mem-agif : %s encode-agif dirpath\n", argv[0]);
+#endif
                return 0;
        }
 
        if (!strcmp("decode", argv[1])) {
-               ret = mm_util_decode_from_gif_file(&decoded, argv[2]);
-       } else {
+               size_t nbytes = g_strlcpy(files[nfiles].file_name, argv[2], sizeof(files[nfiles].file_name));
+               if (nbytes != strlen(argv[2])) {
+                       fprintf(stderr, "\tERROR is occurred %x\n", ret);
+                       return 0;
+               }
+               nfiles++;
+       }
+#ifdef GIF_ENCODER_V2
+       else if (!strcmp("encode-agif", argv[1]) || !strcmp("encode-mem-agif", argv[1])) {
+               if (!strcmp("encode-mem-agif", argv[1])) {
+                       g_encode_mem = TRUE;
+               }
+               fprintf(stderr, "\tencode-agif %s\n", argv[1]);
+               struct dirent *dp = NULL;
+               DIR *fd = opendir(argv[2]);
+               int j = 0;
+               if (fd == NULL) {
+                       fprintf(stderr, "\tlistdir: can't open %s\n", argv[2]);
+                       return 0;
+               }
+
+               while ((dp = readdir(fd)) != NULL) {
+                       if (strlen(dp->d_name) == 0)
+                               continue;
+                       if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, ".."))
+                               continue;       /* skip self and parent */
+                       size_t nbytes = g_snprintf(files[nfiles].file_name, sizeof(files[nfiles].file_name), "%s%s", argv[2], dp->d_name);
+                       if (nbytes == 0)
+                               continue;
+                       nfiles++;
+               }
+               closedir(fd);
+
+               /* sort file name */
+               char temp[PATH_MAX];
+               for (i = 0; i < nfiles; i++) {
+                       for (j = 0; j < nfiles - 1; j++) {
+                               if ((strlen(files[j].file_name) > strlen(files[j + 1].file_name)) ||
+                                       (strcmp(files[j].file_name, files[j + 1].file_name) > 0 && strlen(files[j].file_name) == strlen(files[j + 1].file_name))) {
+                                       memset(temp, 0, PATH_MAX);
+                                       g_strlcpy(temp, files[j].file_name, sizeof(temp));
+                                       g_strlcpy(files[j].file_name, files[j + 1].file_name, sizeof(files[j].file_name));
+                                       g_strlcpy(files[j + 1].file_name, temp, sizeof(files[j + 1].file_name));
+                               }
+                       }
+               }
+       }
+#endif
+       else {
                fprintf(stderr, "\tunknown command [%s]\n", argv[1]);
                return 0;
        }
 
-       if (ret != MM_UTIL_ERROR_NONE) {
-               fprintf(stderr, "\tERROR is occurred %x\n", ret);
-       } else {
-               fprintf(stderr, "\tGIF OPERATION SUCCESS\n");
-               {
-                       if (decoded.frames) {
-                               fprintf(stderr, "\t##Decoded data##: %p\t width: %lu\t height:%lu\t size: %llu\n", decoded.frames[0], decoded.width, decoded.height, decoded.size);
-                               char filename[BUFFER_SIZE] = { 0, };
-                               memset(filename, 0, BUFFER_SIZE);
-                               {
-                                       snprintf(filename, BUFFER_SIZE, "%s%s", DECODE_RESULT_PATH, "gif");
-                               }
-                               mm_util_gif_encode_set_image_count(&decoded, 1);
-                               ret = mm_util_encode_open_gif_file(&decoded, filename);
-                               ret = mm_util_encode_gif(&decoded);
-                               ret = mm_util_encode_close_gif(&decoded);
-
-                               free(decoded.frames[0]->data);
-                               free(decoded.frames);
-                       } else {
-                               fprintf(stderr, "\tDECODED data is NULL\n");
+       fprintf(stderr, "\tnfiles: %d\n", nfiles);
+
+       for (i = 0; i < nfiles && i < ANIMATED_FRAME_MAX; i++) {
+               fprintf(stderr, "\tdecode %s\n", files[i].file_name);
+               ret = mm_util_decode_from_gif_file(&files[i].decoded, files[i].file_name);
+               if (ret != MM_UTIL_ERROR_NONE) {
+                       fprintf(stderr, "\tERROR is occurred %x to decode %s\n", ret, files[i].file_name);
+                       continue;
+               }
+       }
+
+#ifdef GIF_ENCODER_V2
+       mm_gif_file_h gif_file = NULL;
+       mm_gif_image_h gif_image = NULL;
+       unsigned char *encoded_gif_mem = NULL;
+       unsigned long encoded_gif_size = 0;
+
+       ret = mm_util_gif_encode_create(&gif_file);
+       fprintf(stderr, "\t mm_util_gif_enc_create [%d]\n", ret);
+       if (g_encode_mem) {
+               ret = mm_util_gif_encode_set_mem(gif_file, (void **)&encoded_gif_mem, &encoded_gif_size);
+               fprintf(stderr, "\t mm_util_gif_encode_set_mem [%d]\n", ret);
+       }
+       else {
+               ret = mm_util_gif_encode_set_file(gif_file, ENCODED_FILEPATH);
+               fprintf(stderr, "\t mm_util_gif_enc_set_file [%d]\n", ret);
+       }
+
+       ret = mm_util_gif_encode_set_repeat(gif_file, FALSE, 0);
+       fprintf(stderr, "\t mm_util_gif_encode_set_repeat [%d]\n", ret);
+
+       ret = mm_util_gif_encode_set_resolution(gif_file, files[0].decoded.width, files[0].decoded.height);
+       fprintf(stderr, "\t mm_util_gif_enc_set_resolution [%d]\n", ret);
+       /* repeat */
+       for (i = 0; i < nfiles; i++) {
+               if (files[i].decoded.frames) {
+                       ret = mm_util_gif_image_create(gif_file, &gif_image);
+                       fprintf(stderr, "\t mm_util_gif_image_create [%d]\n", ret);
+                       ret = mm_util_gif_image_set_image(gif_image, files[i].decoded.frames[0]->data, files[i].decoded.size);
+                       fprintf(stderr, "\t mm_util_gif_image_set_image [%d]\n", ret);
+                       ret = mm_util_gif_image_set_delay_time(gif_image, 20);
+                       fprintf(stderr, "\t mm_util_gif_image_set_delay_time [%d]\n", ret);
+                       ret = mm_util_gif_image_set_position(gif_image,0, 0,files[i].decoded.width, files[i].decoded.height);
+                       fprintf(stderr, "\t mm_util_gif_image_set_position [%d]\n", ret);
+                       ret = mm_util_gif_image_set_disposal_mode(gif_image, MM_UTIL_GIF_DISPOSAL_UNSPECIFIED);
+                       fprintf(stderr, "\t mm_util_gif_image_set_disposal_mode [%d]\n", ret);
+#if 0  /* for advanced */
+                       if (files[i].decoded.frames[0]->is_transparent) {
+                               mm_util_gif_color_s tp_color;
+                               tp_color.red = files[i].decoded.frames[0]->transparent_color.Red;
+                               tp_color.green = files[i].decoded.frames[0]->transparent_color.Green;
+                               tp_color.blue = files[i].decoded.frames[0]->transparent_color.Blue;
+                               ret = mm_util_gif_image_set_tp_color(gif_image, tp_color);
+                               fprintf(stderr, "\t mm_util_gif_image_set_tp_color [%d]\n", ret);
                        }
+#endif
+                       ret = mm_util_gif_encode_add_image(gif_file, gif_image);
+                       fprintf(stderr, "\t mm_util_gif_enc_add_image [%d]\n", ret);
+                       mm_util_gif_image_destory(gif_image);
+
+                       free(files[i].decoded.frames[0]->data);
+                       free(files[i].decoded.frames);
                }
        }
+       /* repeat */
+       ret = mm_util_gif_encode_save(gif_file);
+       fprintf(stderr, "\t mm_util_gif_enc_save [%d]\n", ret);
+       if (g_encode_mem)
+               _write_file(ENCODED_FILEPATH, (void *)encoded_gif_mem, (size_t)encoded_gif_size);
+       mm_util_gif_encode_destroy(gif_file);
+#else
+       if (files[0].decoded.frames) {
+               fprintf(stderr, "\t##Decoded data##: %p\t width: %lu\t height:%lu\t size: %llu\n", files[0].decoded.frames[0], files[0].decoded.width, files[0].decoded.height, files[0].decoded.size);
+               files[0].decoded.image_count = 1;
+               ret = mm_util_encode_open_gif_file(&files[0].decoded, ENCODED_FILEPATH);
+               ret = mm_util_encode_gif(&files[0].decoded);
+               ret = mm_util_encode_close_gif(&files[0].decoded);
+
+               free(files[0].decoded.frames[0]->data);
+               free(files[0].decoded.frames);
+       } else {
+               fprintf(stderr, "\tDECODED data is NULL\n");
+       }
+#endif
        return 0;
 }