/* parameters for testsuite */
typedef enum {
MAIN_MENU = 0,
- SET_PATH_MENU,
- SET_PATH_SUB_MENU,
DECODE_MENU,
ENCODE_MENU,
ENCODE_AGIF_MENU,
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,
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;
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;
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;
{
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");
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;
}
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;
}
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");
}
"", // not supported HEIF
"jxl",
};
+
static void __get_auto_path(image_util_type_e image_type, char **path)
{
char *_path = NULL;
goto ERROR;
}
break;
+
case IMAGE_UTIL_PNG:
ret = image_util_encode_set_png_compression(handle, params->compression);
if (ret != IMAGE_UTIL_ERROR_NONE) {
goto ERROR;
}
break;
+
case IMAGE_UTIL_WEBP:
case IMAGE_UTIL_JPEG_XL:
ret = image_util_encode_set_lossless(handle, params->lossless);
goto ERROR;
}
break;
+
default:
/* do nothing... */
break;
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) {
}
__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);
}
__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);
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);
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:
__data_push(input_data);
}
break;
+
default:
g_print("wrong command! %s\n\n", cmd);
break;
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)) {
__data_push(input_data);
}
break;
+
default:
g_print("wrong command! %s\n\n", cmd);
break;
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)) {
__data_push(input_data);
}
break;
+
default:
g_print("wrong command! %s\n\n", cmd);
break;
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:
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);
__data_push(input_data);
}
break;
+
default:
g_print("wrong command! %s\n\n", cmd);
break;
}
}
break;
+
case SET_TO_BUFFER_MENU:
if (g_ascii_strcasecmp(cmd, "y") == 0) {
if (g_previous_menu == ENCODE_MENU) {
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;
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);
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;
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);
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);
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);
}
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;
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;
__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);
__menu_move(SET_PATH_SUB_MENU);
}
break;
+
case SET_PATH_SUB_MENU:
switch(index) {
case RAW_IMG_SET_COLOR:
break;
}
break;
+
case SET_DIR_MENU:
if (!__set_input_path(cmd)) {
g_print("[Warn] Fail to set input path! %s\n", cmd);