Add __write_raw to save raw image and code cleanup 92/319792/3
authorJiyong <jiyong.min@samsung.com>
Tue, 18 Feb 2025 03:31:17 +0000 (12:31 +0900)
committerJiyong <jiyong.min@samsung.com>
Tue, 18 Feb 2025 05:15:09 +0000 (14:15 +0900)
Change-Id: I86974b40827cc30d339eac3808dec6ecf0353d9f

test/image_util_testsuite.c

index 15f793fa8529f01864c999a2f1f0b1e647d1abac..843f8dc98f9144b060fc147e20febb7988a6db03 100644 (file)
@@ -64,8 +64,6 @@
 /* parameters for testsuite */
 typedef enum {
        MAIN_MENU = 0,
-       SET_PATH_MENU,
-       SET_PATH_SUB_MENU,
        DECODE_MENU,
        ENCODE_MENU,
        ENCODE_AGIF_MENU,
@@ -73,7 +71,9 @@ typedef enum {
        TRANSFORM_MENU,
 
        /* set menu */
-       SET_BUFFER_MENU = 20,
+       SET_PATH_MENU = 20,
+       SET_PATH_SUB_MENU,
+       SET_BUFFER_MENU,
        SET_TO_BUFFER_MENU,
        SET_COLOR_MENU,
        SET_RAW_COLOR_MENU,
@@ -471,15 +471,19 @@ static void __display_menu(test_menu_state_e menu_state)
        case DECODE_MENU:
                __display_decode_menu();
                break;
+
        case ENCODE_MENU:
                __display_encode_menu();
                break;
+
        case ENCODE_AGIF_MENU:
                __display_encode_agif_menu();
                break;
+
        case ENCODE_ANIM_MENU:
                __display_encode_anim_menu();
                break;
+
        case TRANSFORM_MENU:
                __display_transform_menu();
                break;
@@ -488,9 +492,11 @@ static void __display_menu(test_menu_state_e menu_state)
        case SET_PATH_MENU:
                __display_set("path", "/home/owner/media/test.jpg");
                break;
+
        case SET_DIR_MENU:
                __display_set("dir", "/home/owner/media/Images");
                break;
+
        case SET_PATH_SUB_MENU:
                __display_set_raw_menu();
                break;
@@ -498,42 +504,54 @@ static void __display_menu(test_menu_state_e menu_state)
        case SET_BUFFER_MENU:
                __display_set("set buffer", "yes/no");
                break;
+
        case SET_COLOR_MENU:
        case SET_RAW_COLOR_MENU:
        case SET_CONVERT_MENU:
                __display_set("colorspace", "i420:2, rgb:7, argb:8, rgba:10");
                break;
+
        case SET_COMPRESSION_MENU:
                __display_set("compression", "0(Lowest/HighQ)~9(Max/LowQ)");
                break;
+
        case SET_LOSSLESS_MENU:
                __display_set("lossless", "0(false)/1(true)");
                break;
+
        case SET_CROP_MENU:
                __display_set("crop", "(sx)x(sy)x(w)x(h) 0x0x1920x1080");
                break;
+
        case SET_DELAY_MENU:
                __display_set("delay", "20~");
                break;
+
        case SET_BG_COLOR_MENU:
                __display_set("background color", "(r),(g),(b),(a) 255,0,0,0");
                break;
+
        case SET_DOWNSCALE_MENU:
                __display_set("downscale", "0(1/1), 1(1/2), 2(1/4), 3(1/8)");
                break;
+
        case SET_QUALITY_MENU:
                __display_set("quality", "1(LowQ)~100(HighQ)");
                break;
+
        case SET_RESIZE_MENU:
        case SET_SIZE_MENU:
                __display_set("size", "(w)x(h) 1920x1080");
                break;
+
        case SET_ROTATE_MENU:
                __display_set("rotation", "0:none, 1:90, 2:180, 3:270");
                break;
+
        case SET_TYPE_MENU:
                __display_set("image_type", "0:jpeg, 1:png, 2:gif, 3:bmp, 4:webp, 6:jpeg-xl");
                break;
+
        case SET_ANIM_TYPE_MENU:
                __display_set("image_anim_type", "0:gif, 1:webp");
                break;
@@ -574,7 +592,7 @@ static gboolean __read_file(char *path, void **data, size_t *length)
 {
        gchar *contents = NULL;
        gsize len = 0;
-       GError *error = NULL;
+       g_autoptr(GError) error = NULL;
 
        if (!path || !data || length == 0) {
                g_print("\t[__read_file] invalid data\n");
@@ -585,8 +603,6 @@ static gboolean __read_file(char *path, void **data, size_t *length)
 
        if (!g_file_get_contents(path, &contents, &len, &error)) {
                g_print("\t[__read_file] g_file_get_contents failed(%s)\n", (error ? error->message : "none"));
-               if (error)
-                       g_error_free(error);
                return FALSE;
        }
 
@@ -600,12 +616,12 @@ static gboolean __read_file(char *path, void **data, size_t *length)
 
 static gboolean __write_file(const char *path, void *data, size_t length)
 {
-       GError *error = NULL;
+       g_autoptr(GError) error = NULL;
+
+       g_print("\t[__write_file] path: %s buffer: %p, size: %zu\n", path, data, length);
 
        if (!g_file_set_contents(path, (gchar *)data, (gsize)length, &error)) {
-               g_print("\t[__read_file] g_file_set_contents failed(%s)\n", (error ? error->message : "none"));
-               if (error)
-                       g_error_free(error);
+               g_print("\t[__write_file] g_file_set_contents failed(%s)\n", (error ? error->message : "none"));
                return FALSE;
        }
 
@@ -614,29 +630,75 @@ static gboolean __write_file(const char *path, void *data, size_t length)
        return TRUE;
 }
 
+#if DUMP_RAW_IMAGE
+static gboolean __write_raw(const char *name, image_util_image_h image)
+{
+       const char *colorspace_exts[] = {
+               ".yuv420",
+               ".yuv422",
+               ".i420",
+               ".nv12",
+               ".uyvy",
+               ".yuyv",
+               ".rgb16",
+               ".rgb",
+               ".argb",
+               ".bgra",
+               ".rgba",
+               "_bgrx.bgra",
+               ".nv21",
+               ".nv16",
+               ".nv61",
+       };
+
+       int ret = IMAGE_UTIL_ERROR_NONE;
+       g_autofree gchar* path = NULL;
+       unsigned int width = 0;
+       unsigned int height = 0;
+       image_util_colorspace_e colorspace = 0;
+       g_autofree unsigned char* data = NULL;
+       size_t length;
+
+       ret = image_util_get_image(image, &width, &height, &colorspace, &data, &length);
+       if (ret != IMAGE_UTIL_ERROR_NONE) {
+               g_print("image_util_get_image failed %d\n", ret);
+               return FALSE;
+       }
+
+       path = g_strdup_printf("%s_%s_%ux%u%s",
+                       FILE_FOR_DUMP_RAW_IMAGE, name, width, height, colorspace_exts[colorspace]);
+
+       if (!__write_file(path, data, length)) {
+               g_print("\t[__write_raw] %s write FAIL\n", path);
+               return FALSE;
+       }
+
+       g_print("\t[__write_raw] %s write DONE\n", path);
+
+       return TRUE;
+}
+#endif
+
 static void __write_jpeg(const char *name, image_util_image_h image)
 {
        int ret = IMAGE_UTIL_ERROR_NONE;
        image_util_encode_h handle = NULL;
-       char *path = NULL;
-
-       path = g_strdup_printf("%s_%s.jpg", FILE_FOR_DUMP_RAW_IMAGE, name);
+       g_autofree gchar* path = g_strdup_printf("%s_%s.jpg", FILE_FOR_DUMP_RAW_IMAGE, name);
 
        ret = image_util_encode_create(IMAGE_UTIL_JPEG, &handle);
        if (ret != IMAGE_UTIL_ERROR_NONE) {
-               g_print("image_util_decode_create failed %d", ret);
+               g_print("image_util_decode_create failed %d\n", ret);
                goto ERROR;
        }
 
        ret = image_util_encode_run_to_file(handle, image, path);
        if (ret != IMAGE_UTIL_ERROR_NONE) {
-               g_print("image_util_encode_run_to_file failed %d", ret);
+               g_print("image_util_encode_run_to_file failed %d\n", ret);
                goto ERROR;
        }
 
 ERROR:
        image_util_encode_destroy(handle);
-       g_free(path);
 
        g_print("\t[__write_jpeg] %s write %s\n", name, (ret == IMAGE_UTIL_ERROR_NONE) ? "DONE" : "FAIL");
 }
@@ -932,6 +994,7 @@ static const char *g_image_exts[] = {
        "",     // not supported HEIF
        "jxl",
 };
+
 static void __get_auto_path(image_util_type_e image_type, char **path)
 {
        char *_path = NULL;
@@ -1190,6 +1253,7 @@ static int __run_encode(test_encode_menu_e menu, test_complex_data_s *input,
                        goto ERROR;
                }
                break;
+
        case IMAGE_UTIL_PNG:
                ret = image_util_encode_set_png_compression(handle, params->compression);
                if (ret != IMAGE_UTIL_ERROR_NONE) {
@@ -1197,6 +1261,7 @@ static int __run_encode(test_encode_menu_e menu, test_complex_data_s *input,
                        goto ERROR;
                }
                break;
+
        case IMAGE_UTIL_WEBP:
        case IMAGE_UTIL_JPEG_XL:
                ret = image_util_encode_set_lossless(handle, params->lossless);
@@ -1205,6 +1270,7 @@ static int __run_encode(test_encode_menu_e menu, test_complex_data_s *input,
                        goto ERROR;
                }
                break;
+
        default:
                /* do nothing... */
                break;
@@ -1216,6 +1282,7 @@ static int __run_encode(test_encode_menu_e menu, test_complex_data_s *input,
                if (ret != IMAGE_UTIL_ERROR_NONE)
                        g_print("image_util_encode_run_to_file failed %d\n", ret);
                break;
+
        case ENCODE_RUN_TO_BUFFER:
                ret = image_util_encode_run_to_buffer(handle, input->image, &result->buffer, &result->buffer_size);
                if (ret != IMAGE_UTIL_ERROR_NONE) {
@@ -1224,6 +1291,7 @@ static int __run_encode(test_encode_menu_e menu, test_complex_data_s *input,
                }
                __write_file(result->path, result->buffer, result->buffer_size);
                break;
+
        case ENCODE_RUN_ASYNC_TO_FILE:
                ret = image_util_encode_run_async_to_file(handle, input->image, result->path,
                                        __encode_to_file_completed_cb, NULL);
@@ -1233,6 +1301,7 @@ static int __run_encode(test_encode_menu_e menu, test_complex_data_s *input,
                }
                __wait();
                break;
+
        case ENCODE_RUN_ASYNC_TO_BUFFER:
                ret = image_util_encode_run_async_to_buffer(handle, input->image,
                                        __encode_to_buffer_completed_cb, result);
@@ -1749,6 +1818,7 @@ static void __interpret_decode(const char *cmd, unsigned int index)
                if (ret == IMAGE_UTIL_ERROR_NONE) {
                        g_print("Success to decode image!!!\n");
 #if DUMP_RAW_IMAGE
+                       __write_raw("decode", g_decode_result.image);
                        __write_jpeg("decode", g_decode_result.image);
 #endif
                        __data_push(&g_decode_result);
@@ -1777,15 +1847,19 @@ static void __interpret_encode(const char *cmd, unsigned int index)
        case ENCODE_SET_TYPE:
                __menu_move(SET_TYPE_MENU);
                break;
+
        case ENCODE_SET_QUALITY:
                __menu_move(SET_QUALITY_MENU);
                break;
+
        case ENCODE_SET_COMPRESIION:
                __menu_move(SET_COMPRESSION_MENU);
                break;
+
        case ENCODE_SET_LOSSLESS:
                __menu_move(SET_LOSSLESS_MENU);
                break;
+
        case ENCODE_RUN_TO_FILE:
        case ENCODE_RUN_TO_BUFFER:
        case ENCODE_RUN_ASYNC_TO_FILE:
@@ -1804,6 +1878,7 @@ static void __interpret_encode(const char *cmd, unsigned int index)
                        __data_push(input_data);
                }
                break;
+
        default:
                g_print("wrong command! %s\n\n", cmd);
                break;
@@ -1819,9 +1894,11 @@ static void __interpret_encode_agif(const char *cmd, unsigned int index)
        case ENCODE_AGIF_SET_DIR:
                __menu_move(SET_DIR_MENU);
                break;
+
        case ENCODE_AGIF_SET_DELAY:
                __menu_move(SET_DELAY_MENU);
                break;
+
        case ENCODE_AGIF_SAVE_TO_FILE:
        case ENCODE_AGIF_SAVE_TO_BUFFER:
                if (!__data_pop(&input_data)) {
@@ -1838,6 +1915,7 @@ static void __interpret_encode_agif(const char *cmd, unsigned int index)
                        __data_push(input_data);
                }
                break;
+
        default:
                g_print("wrong command! %s\n\n", cmd);
                break;
@@ -1853,18 +1931,23 @@ static void __interpret_encode_anim(const char *cmd, unsigned int index)
        case ENCODE_ANIM_SET_DIR:
                __menu_move(SET_DIR_MENU);
                break;
+
        case ENCODE_ANIM_SET_TYPE:
                __menu_move(SET_ANIM_TYPE_MENU);
                break;
+
        case ENCODE_ANIM_SET_DELAY:
                __menu_move(SET_DELAY_MENU);
                break;
+
        case ENCODE_ANIM_SET_BG_COLOR:
                __menu_move(SET_BG_COLOR_MENU);
                break;
+
        case ENCODE_ANIM_SET_LOSSLESS:
                __menu_move(SET_LOSSLESS_MENU);
                break;
+
        case ENCODE_ANIM_SAVE_TO_FILE:
        case ENCODE_ANIM_SAVE_TO_BUFFER:
                if (!__data_pop(&input_data)) {
@@ -1881,6 +1964,7 @@ static void __interpret_encode_anim(const char *cmd, unsigned int index)
                        __data_push(input_data);
                }
                break;
+
        default:
                g_print("wrong command! %s\n\n", cmd);
                break;
@@ -1896,15 +1980,19 @@ static void __interpret_transform(const char *cmd, unsigned int index)
        case TRANSFORM_SET_CONVERT:
                __menu_move(SET_CONVERT_MENU);
                break;
+
        case TRANSFORM_SET_CROP:
                __menu_move(SET_CROP_MENU);
                break;
+
        case TRANSFORM_SET_RESIZE:
                __menu_move(SET_RESIZE_MENU);
                break;
+
        case TRANSFORM_SET_ROTATE:
                __menu_move(SET_ROTATE_MENU);
                break;
+
        case TRANSFORM_RUN:
        case TRANSFORM_RUN2:
        case TRANSFORM_RUN2_ASYNC:
@@ -1916,6 +2004,7 @@ static void __interpret_transform(const char *cmd, unsigned int index)
                if (ret == IMAGE_UTIL_ERROR_NONE) {
                        g_print("Success to transform image!!!\n");
 #if DUMP_RAW_IMAGE
+                       __write_raw("transform", g_transform_result.image);
                        __write_jpeg("transform", g_transform_result.image);
 #endif
                        __data_push(&g_transform_result);
@@ -1924,6 +2013,7 @@ static void __interpret_transform(const char *cmd, unsigned int index)
                        __data_push(input_data);
                }
                break;
+
        default:
                g_print("wrong command! %s\n\n", cmd);
                break;
@@ -1942,6 +2032,7 @@ static gboolean __interpret_set_menu(test_menu_state_e menu_state, const char *c
                        }
                }
                break;
+
        case SET_TO_BUFFER_MENU:
                if (g_ascii_strcasecmp(cmd, "y") == 0) {
                        if (g_previous_menu == ENCODE_MENU) {
@@ -1956,18 +2047,22 @@ static gboolean __interpret_set_menu(test_menu_state_e menu_state, const char *c
                        g_encode_agif_params.use_buffer = FALSE;
                }
                break;
+
        case SET_RAW_COLOR_MENU:
                g_input_data.color = index;
                g_print("Success to set raw path color (%u)\n", g_input_data.color);
                break;
+
        case SET_COLOR_MENU:
                g_decode_params.color = index;
                g_print("Success to set color (%u)\n", g_decode_params.color);
                break;
+
        case SET_COMPRESSION_MENU:
                g_encode_params.compression = index;
                g_print("Success to set compression (%u)\n", g_encode_params.compression);
                break;
+
        case SET_LOSSLESS_MENU:
                if (g_previous_menu == ENCODE_MENU) {
                        g_encode_params.lossless = (index == 0) ? false : true;
@@ -1977,11 +2072,13 @@ static gboolean __interpret_set_menu(test_menu_state_e menu_state, const char *c
                        g_print("Success to set animation lossless (%u)\n", g_encode_anim_params.lossless);
                }
                break;
+
        case SET_CONVERT_MENU:
                g_transform_params.convert_color = index;
                g_transform_params.has_convert_color = TRUE;
                g_print("Success to set convert_color (%u)\n", g_transform_params.convert_color);
                break;
+
        case SET_CROP_MENU:
                if (!__set_input_crop_area(cmd, &g_transform_params.crop_area)) {
                        g_print("wrong size! %s\n\n", cmd);
@@ -1991,6 +2088,7 @@ static gboolean __interpret_set_menu(test_menu_state_e menu_state, const char *c
                g_print("Success to set crop_area(%ux%u, %ux%u)\n", g_transform_params.crop_area.x,
                                g_transform_params.crop_area.y, g_transform_params.crop_area.w, g_transform_params.crop_area.h);
                break;
+
        case SET_DELAY_MENU:
                if (g_previous_menu == ENCODE_AGIF_MENU) {
                        g_encode_agif_params.delay = index;
@@ -2000,6 +2098,7 @@ static gboolean __interpret_set_menu(test_menu_state_e menu_state, const char *c
                        g_print("Success to set animation delay (%u)\n", g_encode_anim_params.delay);
                }
                break;
+
        case SET_BG_COLOR_MENU:
                if (!__set_input_color(cmd, &g_encode_anim_params.bg_color)) {
                        g_print("wrong size! %s\n\n", cmd);
@@ -2008,13 +2107,16 @@ static gboolean __interpret_set_menu(test_menu_state_e menu_state, const char *c
                g_print("Success to set animation bg_color(%u,%u,%u,%u)\n", g_encode_anim_params.bg_color.r,
                                g_encode_anim_params.bg_color.g, g_encode_anim_params.bg_color.b, g_encode_anim_params.bg_color.a);
                break;
+
        case SET_DOWNSCALE_MENU:
                g_decode_params.downscale = index;
                break;
+
        case SET_QUALITY_MENU:
                g_encode_params.quality = index;
                g_print("Success to set quality (%u)\n", g_encode_params.quality);
                break;
+
        case SET_RESIZE_MENU:
                if (!__set_input_size(cmd, &g_transform_params.resize)) {
                        g_print("wrong size! %s\n\n", cmd);
@@ -2023,11 +2125,13 @@ static gboolean __interpret_set_menu(test_menu_state_e menu_state, const char *c
                g_transform_params.has_resize = TRUE;
                g_print("Success to set resize (%ux%u)\n", g_transform_params.resize.w, g_transform_params.resize.h);
                break;
+
        case SET_ROTATE_MENU:
                g_transform_params.rotation = index;
                g_transform_params.has_rotation = TRUE;
                g_print("Success to set rotate (%u)\n", g_transform_params.rotation);
                break;
+
        case SET_SIZE_MENU:
                if (!__set_input_size(cmd, &g_input_data.size)) {
                        g_print("wrong size! %s\n\n", cmd);
@@ -2035,16 +2139,19 @@ static gboolean __interpret_set_menu(test_menu_state_e menu_state, const char *c
                }
                g_print("Success to set size (%ux%u)\n", g_input_data.size.w, g_input_data.size.h);
                break;
+
        case SET_TYPE_MENU:
                g_encode_params.type = index;
                __get_encode_path(g_encode_params.type, FILE_FOR_ENCODE, &g_encode_result.path);
                g_print("Success to set image_type (%u)\n", g_encode_params.type);
                break;
+
        case SET_ANIM_TYPE_MENU:
                g_encode_anim_params.type = index;
                __get_encode_anim_path(g_encode_anim_params.type, FILE_FOR_ENCODE_ANIM, &g_encode_anim_result.path);
                g_print("Success to set anim_type (%u)\n", g_encode_anim_params.type);
                break;
+
        default:
                g_print("wrong command! %s\n\n", cmd);
                return FALSE;
@@ -2061,24 +2168,31 @@ static void __interpret_main(const char *cmd, unsigned int index)
        case SET_PATH:
                __menu_move(SET_PATH_MENU);
                break;
+
        case TEST_AUTO:
                __run_auto();
                break;
+
        case TEST_DECODE:
                __menu_move(DECODE_MENU);
                break;
+
        case TEST_ENCODE:
                __menu_move(ENCODE_MENU);
                break;
+
        case TEST_ENCODE_AGIF:
                __menu_move(ENCODE_AGIF_MENU);
                break;
+
        case TEST_ENCODE_ANIM:
                __menu_move(ENCODE_ANIM_MENU);
                break;
+
        case TEST_TRANSFORM:
                __menu_move(TRANSFORM_MENU);
                break;
+
        default:
                g_print("wrong command! %s\n\n", cmd);
                break;
@@ -2116,32 +2230,26 @@ static void __interpret_cmd(char *cmd)
                __interpret_main(cmd, index);
                break;
 
-       /* Decode menu */
        case DECODE_MENU:
                __interpret_decode(cmd, index);
                break;
 
-       /* Encode menu */
        case ENCODE_MENU:
                __interpret_encode(cmd, index);
                break;
 
-       /* Encode A-GIF menu */
        case ENCODE_AGIF_MENU:
                __interpret_encode_agif(cmd, index);
                break;
 
-       /* Encode ANIMATION menu */
        case ENCODE_ANIM_MENU:
                __interpret_encode_anim(cmd, index);
                break;
 
-       /* Transform menu */
        case TRANSFORM_MENU:
                __interpret_transform(cmd, index);
                break;
 
-       /* Set path menu */
        case SET_PATH_MENU:
                if (!__set_input_path(cmd)) {
                        g_print("[Warn] Fail to set input path! %s\n", cmd);
@@ -2154,6 +2262,7 @@ static void __interpret_cmd(char *cmd)
                        __menu_move(SET_PATH_SUB_MENU);
                }
                break;
+
        case SET_PATH_SUB_MENU:
                switch(index) {
                case RAW_IMG_SET_COLOR:
@@ -2167,6 +2276,7 @@ static void __interpret_cmd(char *cmd)
                        break;
                }
                break;
+
        case SET_DIR_MENU:
                if (!__set_input_path(cmd)) {
                        g_print("[Warn] Fail to set input path! %s\n", cmd);