From 8e9ca7257de9c99d8af5d29a8a1cead8b1e35188 Mon Sep 17 00:00:00 2001 From: Jiyong Min Date: Wed, 19 Jul 2017 12:56:20 +0900 Subject: [PATCH] Reduce duplicated source code & replace hardcoded value of colorspace Change-Id: I4f57d9d79cb205ded1ac8ab7cd6e452a503f50fa Signed-off-by: Jiyong Min --- include/image_util_private.h | 3 + packaging/capi-media-image-util.spec | 2 +- src/image_util.c | 267 +++++++++++++-------------- 3 files changed, 131 insertions(+), 141 deletions(-) diff --git a/include/image_util_private.h b/include/image_util_private.h index 4d7673e..dbbbcad 100755 --- a/include/image_util_private.h +++ b/include/image_util_private.h @@ -69,6 +69,9 @@ extern "C" #define IMGCV_FUNC_NAME "mm_util_cv_extract_representative_color" #define PATH_MMUTIL_IMGCV_LIB PATH_LIBDIR"/libmmutil_imgcv.so" + +#define _NOT_SUPPORTED_COLORSPACE (-1) + typedef gboolean(*ModuleFunc)(void *, int, int, unsigned char *, unsigned char *, unsigned char *); typedef struct { diff --git a/packaging/capi-media-image-util.spec b/packaging/capi-media-image-util.spec index f217979..e15c657 100755 --- a/packaging/capi-media-image-util.spec +++ b/packaging/capi-media-image-util.spec @@ -1,6 +1,6 @@ Name: capi-media-image-util Summary: A Image Utility library in Tizen Native API -Version: 0.1.20 +Version: 0.1.21 Release: 2 Group: Multimedia/API License: Apache-2.0 diff --git a/src/image_util.c b/src/image_util.c index 4d68c0b..1c20033 100755 --- a/src/image_util.c +++ b/src/image_util.c @@ -51,74 +51,74 @@ static int _convert_colorspace_tbl[] = { static int _convert_jpeg_colorspace_tbl[] = { MM_UTIL_JPEG_FMT_YUV420, /* IMAGE_UTIL_COLORSPACE_YUV420 */ - -1, /* IMAGE_UTIL_COLORSPACE_YUV422 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_YUV422 */ MM_UTIL_JPEG_FMT_YUV420, /* IMAGE_UTIL_COLORSPACE_I420 */ MM_UTIL_JPEG_FMT_NV12, /* IMAGE_UTIL_COLORSPACE_NV12 */ - -1, /* IMAGE_UTIL_COLORSPACE_UYVY */ - -1, /* IMAGE_UTIL_COLORSPACE_YUYV */ - -1, /* IMAGE_UTIL_COLORSPACE_RGB565 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_UYVY */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_YUYV */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_RGB565 */ MM_UTIL_JPEG_FMT_RGB888, /* IMAGE_UTIL_COLORSPACE_RGB888 */ MM_UTIL_JPEG_FMT_ARGB8888, /* IMAGE_UTIL_COLORSPACE_ARGB8888 */ MM_UTIL_JPEG_FMT_BGRA8888, /* IMAGE_UTIL_COLORSPACE_BGRA8888 */ MM_UTIL_JPEG_FMT_RGBA8888, /* IMAGE_UTIL_COLORSPACE_RGBA8888 */ - -1, /* IMAGE_UTIL_COLORSPACE_BGRX8888 */ - -1, /* IMAGE_UTIL_COLORSPACE_NV21 */ - -1, /* IMAGE_UTIL_COLORSPACE_NV16 */ - -1, /* IMAGE_UTIL_COLORSPACE_NV61 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_BGRX8888 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_NV21 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_NV16 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_NV61 */ }; static int _convert_png_colorspace_tbl[] = { - -1, /* IMAGE_UTIL_COLORSPACE_YUV420 */ - -1, /* IMAGE_UTIL_COLORSPACE_YUV422 */ - -1, /* IMAGE_UTIL_COLORSPACE_I420 */ - -1, /* IMAGE_UTIL_COLORSPACE_NV12 */ - -1, /* IMAGE_UTIL_COLORSPACE_UYVY */ - -1, /* IMAGE_UTIL_COLORSPACE_YUYV */ - -1, /* IMAGE_UTIL_COLORSPACE_RGB565 */ - -1, /* IMAGE_UTIL_COLORSPACE_RGB888 */ - -1, /* IMAGE_UTIL_COLORSPACE_ARGB8888 */ - -1, /* IMAGE_UTIL_COLORSPACE_BGRA8888 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_YUV420 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_YUV422 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_I420 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_NV12 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_UYVY */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_YUYV */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_RGB565 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_RGB888 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_ARGB8888 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_BGRA8888 */ MM_UTIL_PNG_COLOR_TYPE_RGB_ALPHA, /* IMAGE_UTIL_COLORSPACE_RGBA8888 */ - -1, /* IMAGE_UTIL_COLORSPACE_BGRX8888 */ - -1, /* IMAGE_UTIL_COLORSPACE_NV21 */ - -1, /* IMAGE_UTIL_COLORSPACE_NV16 */ - -1, /* IMAGE_UTIL_COLORSPACE_NV61 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_BGRX8888 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_NV21 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_NV16 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_NV61 */ }; static int _convert_gif_colorspace_tbl[] = { - -1, /* IMAGE_UTIL_COLORSPACE_YUV420 */ - -1, /* IMAGE_UTIL_COLORSPACE_YUV422 */ - -1, /* IMAGE_UTIL_COLORSPACE_I420 */ - -1, /* IMAGE_UTIL_COLORSPACE_NV12 */ - -1, /* IMAGE_UTIL_COLORSPACE_UYVY */ - -1, /* IMAGE_UTIL_COLORSPACE_YUYV */ - -1, /* IMAGE_UTIL_COLORSPACE_RGB565 */ - -1, /* IMAGE_UTIL_COLORSPACE_RGB888 */ - -1, /* IMAGE_UTIL_COLORSPACE_ARGB8888 */ - -1, /* IMAGE_UTIL_COLORSPACE_BGRA8888 */ - MM_UTIL_GIF_FMT_RGBA8888, /* IMAGE_UTIL_COLORSPACE_RGBA8888 */ - -1, /* IMAGE_UTIL_COLORSPACE_BGRX8888 */ - -1, /* IMAGE_UTIL_COLORSPACE_NV21 */ - -1, /* IMAGE_UTIL_COLORSPACE_NV16 */ - -1, /* IMAGE_UTIL_COLORSPACE_NV61 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_YUV420 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_YUV422 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_I420 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_NV12 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_UYVY */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_YUYV */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_RGB565 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_RGB888 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_ARGB8888 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_BGRA8888 */ + MM_UTIL_GIF_FMT_RGBA8888, /* IMAGE_UTIL_COLORSPACE_RGBA8888 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_BGRX8888 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_NV21 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_NV16 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_NV61 */ }; static int _convert_bmp_colorspace_tbl[] = { - -1, /* IMAGE_UTIL_COLORSPACE_YUV420 */ - -1, /* IMAGE_UTIL_COLORSPACE_YUV422 */ - -1, /* IMAGE_UTIL_COLORSPACE_I420 */ - -1, /* IMAGE_UTIL_COLORSPACE_NV12 */ - -1, /* IMAGE_UTIL_COLORSPACE_UYVY */ - -1, /* IMAGE_UTIL_COLORSPACE_YUYV */ - -1, /* IMAGE_UTIL_COLORSPACE_RGB565 */ - -1, /* IMAGE_UTIL_COLORSPACE_RGB888 */ - -1, /* IMAGE_UTIL_COLORSPACE_ARGB8888 */ - -1, /* IMAGE_UTIL_COLORSPACE_BGRA8888 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_YUV420 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_YUV422 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_I420 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_NV12 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_UYVY */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_YUYV */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_RGB565 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_RGB888 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_ARGB8888 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_BGRA8888 */ MM_UTIL_BMP_FMT_RGBA8888, /* IMAGE_UTIL_COLORSPACE_RGBA8888 */ - -1, /* IMAGE_UTIL_COLORSPACE_BGRX8888 */ - -1, /* IMAGE_UTIL_COLORSPACE_NV21 */ - -1, /* IMAGE_UTIL_COLORSPACE_NV16 */ - -1, /* IMAGE_UTIL_COLORSPACE_NV61 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_BGRX8888 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_NV21 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_NV16 */ + _NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_NV61 */ }; static int _convert_decode_scale_tbl[] = { @@ -128,6 +128,9 @@ static int _convert_decode_scale_tbl[] = { MM_UTIL_JPEG_DECODE_DOWNSCALE_1_8, }; +#define _NUM_OF_COLORSPACE (sizeof(_convert_colorspace_tbl)/sizeof(int)) +#define _NUM_OF_SCALE (sizeof(_convert_decode_scale_tbl)/sizeof(int)) + static int _convert_image_util_error_code(const char *func, int code) { int ret = IMAGE_UTIL_ERROR_INVALID_OPERATION; @@ -232,18 +235,47 @@ static bool _image_util_check_resolution(int width, int height) return true; } +static gboolean _is_valid_colorspace(image_util_colorspace_e colorspace) +{ + if (colorspace < 0 || colorspace >= _NUM_OF_COLORSPACE) + return FALSE; + + return TRUE; +} + +static gboolean _is_supported_colorspace(image_util_colorspace_e colorspace, image_util_type_e type) +{ + switch (type) { + case IMAGE_UTIL_JPEG: + image_util_retvm_if((_convert_jpeg_colorspace_tbl[colorspace] == _NOT_SUPPORTED_COLORSPACE), FALSE, "[jpeg]not supported format"); + break; + case IMAGE_UTIL_PNG: + image_util_retvm_if((_convert_png_colorspace_tbl[colorspace] == _NOT_SUPPORTED_COLORSPACE), FALSE, "[png]not supported format"); + break; + case IMAGE_UTIL_GIF: + image_util_retvm_if((_convert_gif_colorspace_tbl[colorspace] == _NOT_SUPPORTED_COLORSPACE), FALSE, "[gif]not supported format"); + break; + case IMAGE_UTIL_BMP: + image_util_retvm_if((_convert_bmp_colorspace_tbl[colorspace] == _NOT_SUPPORTED_COLORSPACE), FALSE, "[bmp]not supported format"); + break; + default: + image_util_retvm_if((_convert_bmp_colorspace_tbl[colorspace] == _NOT_SUPPORTED_COLORSPACE), FALSE, "Invalid image type"); + } + return TRUE; +} + int image_util_foreach_supported_jpeg_colorspace(image_util_supported_jpeg_colorspace_cb callback, void *user_data) { - int i = 0; + image_util_colorspace_e idx = _NOT_SUPPORTED_COLORSPACE; DEPRECATION_LOGW("image_util_foreach_supported_jpeg_colorspace()", "image_util_foreach_supported_colorspace()"); image_util_retvm_if((callback == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "callback is null"); /* RGB has higher precedence than YUV */ - for (i = sizeof(_convert_jpeg_colorspace_tbl) / sizeof(int) - 1; i >= 0; i--) { - if (_convert_jpeg_colorspace_tbl[i] != -1) - if (false == callback(i, user_data)) + for (idx = _NUM_OF_COLORSPACE - 1; idx >= 0; idx--) { + if (_is_supported_colorspace(idx, IMAGE_UTIL_JPEG)) + if (false == callback(idx, user_data)) return IMAGE_UTIL_ERROR_NONE; } @@ -262,7 +294,7 @@ int image_util_transform_create(transformation_h * handle) transformation_s *_handle = (transformation_s *) calloc(1, sizeof(transformation_s)); image_util_retvm_if((_handle == NULL), IMAGE_UTIL_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY(0x%08x)", IMAGE_UTIL_ERROR_OUT_OF_MEMORY); - _handle->colorspace = -1; + _handle->colorspace = _NOT_SUPPORTED_COLORSPACE; _handle->_util_cb = NULL; _handle->image_h = 0; _handle->hardware_acceleration = false; @@ -565,8 +597,8 @@ int image_util_convert_colorspace(unsigned char *dest, image_util_colorspace_e d image_util_retvm_if((dest == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "dest is null"); image_util_retvm_if((src == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "src is null"); - image_util_retvm_if((dest_colorspace < 0 || dest_colorspace >= sizeof(_convert_colorspace_tbl) / sizeof(int)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid dst_colorspace"); - image_util_retvm_if((src_colorspace < 0 || src_colorspace >= sizeof(_convert_colorspace_tbl) / sizeof(int)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid src_colorspace"); + image_util_retvm_if((_is_valid_colorspace(dest_colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid dst_colorspace"); + image_util_retvm_if((_is_valid_colorspace(src_colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid src_colorspace"); err = mm_util_convert_colorspace(src, width, height, _convert_colorspace_tbl[src_colorspace], dest, _convert_colorspace_tbl[dest_colorspace]); @@ -577,7 +609,7 @@ int image_util_calculate_buffer_size(int width, int height, image_util_colorspac { int err = MM_UTIL_ERROR_NONE; - image_util_retvm_if((colorspace < 0 || colorspace >= sizeof(_convert_colorspace_tbl) / sizeof(int)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); + image_util_retvm_if((_is_valid_colorspace(colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); image_util_retvm_if((width <= 0 || height <= 0), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid width or Invalid height"); image_util_retvm_if((size == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "size is null"); @@ -591,7 +623,7 @@ int image_util_resize(unsigned char *dest, int *dest_width, int *dest_height, co image_util_retvm_if((dest == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "dest is null"); image_util_retvm_if((src == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "src is null"); - image_util_retvm_if((colorspace < 0 || colorspace >= sizeof(_convert_colorspace_tbl) / sizeof(int)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); + image_util_retvm_if((_is_valid_colorspace(colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); image_util_retvm_if((dest_width == NULL || dest_height == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "dest_width or dest_height is null"); image_util_retvm_if((*dest_width <= 0 || *dest_height <= 0), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid dest_width or Invalid dest_height"); @@ -613,7 +645,7 @@ int image_util_rotate(unsigned char *dest, int *dest_width, int *dest_height, im image_util_retvm_if((dest == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "dest is null"); image_util_retvm_if((src == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "src is null"); - image_util_retvm_if((colorspace < 0 || colorspace >= sizeof(_convert_colorspace_tbl) / sizeof(int)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); + image_util_retvm_if((_is_valid_colorspace(colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); image_util_retvm_if((dest_rotation < 0 || dest_rotation > IMAGE_UTIL_ROTATION_FLIP_VERT), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid rotation"); image_util_retvm_if((dest_width == NULL || dest_height == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "dest_width or dest_height is null"); @@ -632,7 +664,7 @@ int image_util_crop(unsigned char *dest, int x, int y, int *width, int *height, image_util_retvm_if((dest == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "dest is null"); image_util_retvm_if((src == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "src is null"); - image_util_retvm_if((colorspace < 0 || colorspace >= sizeof(_convert_colorspace_tbl) / sizeof(int)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); + image_util_retvm_if((_is_valid_colorspace(colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); image_util_retvm_if((width == NULL || height == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "width or height is null"); image_util_retvm_if((src_width <= x || src_height <= y || src_width < x + *width || src_height < y + *height), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid crop area"); @@ -658,8 +690,8 @@ int image_util_decode_jpeg(const char *path, image_util_colorspace_e colorspace, image_util_retvm_if((image_buffer == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "image_buffer is null"); image_util_retvm_if((size == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "size is null"); image_util_retvm_if((strlen(path) == 0), IMAGE_UTIL_ERROR_NO_SUCH_FILE, "Invalid path"); - image_util_retvm_if((colorspace < 0 || colorspace >= sizeof(_convert_colorspace_tbl) / sizeof(int)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); - image_util_retvm_if((_convert_jpeg_colorspace_tbl[colorspace] == -1), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); + image_util_retvm_if((_is_valid_colorspace(colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); + image_util_retvm_if((_is_supported_colorspace(colorspace, IMAGE_UTIL_JPEG) == FALSE), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); mm_util_jpeg_yuv_data decoded; memset(&decoded, 0, sizeof(mm_util_jpeg_yuv_data)); @@ -686,8 +718,8 @@ int image_util_decode_jpeg_from_memory(const unsigned char *jpeg_buffer, int jpe image_util_retvm_if((jpeg_buffer == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "jpeg_buffer is null"); image_util_retvm_if((image_buffer == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "image_buffer is null"); image_util_retvm_if((size == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "size is null"); - image_util_retvm_if((colorspace < 0 || colorspace >= sizeof(_convert_colorspace_tbl) / sizeof(int)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); - image_util_retvm_if((_convert_jpeg_colorspace_tbl[colorspace] == -1), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); + image_util_retvm_if((_is_valid_colorspace(colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); + image_util_retvm_if((_is_supported_colorspace(colorspace, IMAGE_UTIL_JPEG) == FALSE), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); mm_util_jpeg_yuv_data decoded; memset(&decoded, 0, sizeof(mm_util_jpeg_yuv_data)); @@ -717,9 +749,9 @@ int image_util_decode_jpeg_with_downscale(const char *path, image_util_colorspac image_util_retvm_if((image_buffer == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "image_buffer is null"); image_util_retvm_if((size == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "size is null"); image_util_retvm_if((strlen(path) == 0), IMAGE_UTIL_ERROR_NO_SUCH_FILE, "Invalid path"); - image_util_retvm_if((colorspace < 0 || colorspace >= sizeof(_convert_colorspace_tbl) / sizeof(int)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); - image_util_retvm_if((_convert_jpeg_colorspace_tbl[colorspace] == -1), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); - image_util_retvm_if((downscale < 0 || downscale >= sizeof(_convert_decode_scale_tbl) / sizeof(int)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "downsacle is invalid"); + image_util_retvm_if((_is_valid_colorspace(colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); + image_util_retvm_if((_is_supported_colorspace(colorspace, IMAGE_UTIL_JPEG) == FALSE), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); + image_util_retvm_if((downscale < 0 || downscale >= _NUM_OF_SCALE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "downsacle is invalid"); mm_util_jpeg_yuv_data decoded; memset(&decoded, 0, sizeof(mm_util_jpeg_yuv_data)); @@ -746,9 +778,9 @@ int image_util_decode_jpeg_from_memory_with_downscale(const unsigned char *jpeg_ image_util_retvm_if((jpeg_buffer == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "jpeg_buffer is null"); image_util_retvm_if((image_buffer == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "image_buffer is null"); image_util_retvm_if((size == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "size is null"); - image_util_retvm_if((colorspace < 0 || colorspace >= sizeof(_convert_colorspace_tbl) / sizeof(int)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); - image_util_retvm_if((_convert_jpeg_colorspace_tbl[colorspace] == -1), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); - image_util_retvm_if((downscale < 0 || downscale >= sizeof(_convert_decode_scale_tbl) / sizeof(int)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "downsacle is invalid"); + image_util_retvm_if((_is_valid_colorspace(colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); + image_util_retvm_if((_is_supported_colorspace(colorspace, IMAGE_UTIL_JPEG) == FALSE), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); + image_util_retvm_if((downscale < 0 || downscale >= _NUM_OF_SCALE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "downsacle is invalid"); mm_util_jpeg_yuv_data decoded; memset(&decoded, 0, sizeof(mm_util_jpeg_yuv_data)); @@ -777,8 +809,8 @@ int image_util_encode_jpeg(const unsigned char *buffer, int width, int height, i image_util_retvm_if((path == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "path is null"); image_util_retvm_if((buffer == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "buffer is null"); image_util_retvm_if((strlen(path) == 0), IMAGE_UTIL_ERROR_NO_SUCH_FILE, "Invalid path"); - image_util_retvm_if((colorspace < 0 || colorspace >= sizeof(_convert_colorspace_tbl) / sizeof(int)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); - image_util_retvm_if((_convert_jpeg_colorspace_tbl[colorspace] == -1), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); + image_util_retvm_if((_is_valid_colorspace(colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); + image_util_retvm_if((_is_supported_colorspace(colorspace, IMAGE_UTIL_JPEG) == FALSE), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); err = mm_util_jpeg_encode_to_file(path, (void *)buffer, width, height, _convert_jpeg_colorspace_tbl[colorspace], quality); return _convert_image_util_error_code(__func__, err); @@ -793,8 +825,8 @@ int image_util_encode_jpeg_to_memory(const unsigned char *image_buffer, int widt image_util_retvm_if((jpeg_buffer == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "jpeg_buffer is null"); image_util_retvm_if((image_buffer == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "image_buffer is null"); image_util_retvm_if((jpeg_size == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "jpeg_size is null"); - image_util_retvm_if((colorspace < 0 || colorspace >= sizeof(_convert_colorspace_tbl) / sizeof(int)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); - image_util_retvm_if((_convert_jpeg_colorspace_tbl[colorspace] == -1), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); + image_util_retvm_if((_is_valid_colorspace(colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); + image_util_retvm_if((_is_supported_colorspace(colorspace, IMAGE_UTIL_JPEG) == FALSE), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); err = mm_util_jpeg_encode_to_memory((void **)jpeg_buffer, jpeg_size, (void *)image_buffer, width, height, _convert_jpeg_colorspace_tbl[colorspace], quality); return _convert_image_util_error_code(__func__, err); @@ -834,45 +866,19 @@ int image_util_extract_color_from_memory(const unsigned char *image_buffer, int int image_util_foreach_supported_colorspace(image_util_type_e image_type, image_util_supported_colorspace_cb callback, void *user_data) { - int i = 0; + image_util_colorspace_e idx = _NOT_SUPPORTED_COLORSPACE; image_util_retvm_if((callback == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "callback is null"); - switch (image_type) { - case IMAGE_UTIL_JPEG: - /* RGB has higher precedence than YUV */ - for (i = sizeof(_convert_jpeg_colorspace_tbl) / sizeof(int) - 1; i >= 0; i--) { - if (_convert_jpeg_colorspace_tbl[i] != -1) - if (false == callback(i, user_data)) + if ((image_type == IMAGE_UTIL_JPEG) || (image_type == IMAGE_UTIL_PNG) + || (image_type == IMAGE_UTIL_GIF) || (image_type == IMAGE_UTIL_BMP)) { + for (idx = _NUM_OF_COLORSPACE - 1; idx >= 0; idx--) { + if (_is_supported_colorspace(idx, image_type)) + if (false == callback(idx, user_data)) return IMAGE_UTIL_ERROR_NONE; } - break; - case IMAGE_UTIL_PNG: - for (i = sizeof(_convert_png_colorspace_tbl) / sizeof(int) - 1; i >= 0; i--) { - if (_convert_png_colorspace_tbl[i] != -1) - if (false == callback(i, user_data)) - return IMAGE_UTIL_ERROR_NONE; - - } - break; - case IMAGE_UTIL_GIF: - for (i = sizeof(_convert_gif_colorspace_tbl) / sizeof(int) - 1; i >= 0; i--) { - if (_convert_gif_colorspace_tbl[i] != -1) - if (false == callback(i, user_data)) - return IMAGE_UTIL_ERROR_NONE; - - } - break; - case IMAGE_UTIL_BMP: - for (i = sizeof(_convert_bmp_colorspace_tbl) / sizeof(int) - 1; i >= 0; i--) { - if (_convert_bmp_colorspace_tbl[i] != -1) - if (false == callback(i, user_data)) - return IMAGE_UTIL_ERROR_NONE; - - } - break; - default: + } else { return IMAGE_UTIL_ERROR_INVALID_PARAMETER; } @@ -1168,21 +1174,11 @@ int image_util_decode_set_colorspace(image_util_encode_h handle, image_util_colo return IMAGE_UTIL_ERROR_INVALID_PARAMETER; } - image_util_retvm_if((colorspace < 0 || colorspace >= sizeof(_convert_jpeg_colorspace_tbl) / sizeof(int)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); - switch (_handle->image_type) { - case IMAGE_UTIL_JPEG: - image_util_retvm_if((_convert_jpeg_colorspace_tbl[colorspace] == -1), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); - break; - case IMAGE_UTIL_PNG: - image_util_retvm_if((_convert_png_colorspace_tbl[colorspace] == -1), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); - break; - case IMAGE_UTIL_GIF: - image_util_retvm_if((_convert_gif_colorspace_tbl[colorspace] == -1), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); - break; - case IMAGE_UTIL_BMP: - image_util_retvm_if((_convert_bmp_colorspace_tbl[colorspace] == -1), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); - break; - default: + image_util_retvm_if((_is_valid_colorspace(colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); + if ((_handle->image_type == IMAGE_UTIL_JPEG) || (_handle->image_type == IMAGE_UTIL_PNG) + || (_handle->image_type == IMAGE_UTIL_GIF) || (_handle->image_type == IMAGE_UTIL_BMP)) { + image_util_retvm_if((_is_supported_colorspace(colorspace, _handle->image_type) == FALSE), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); + } else { image_util_error("Invalid image type"); return IMAGE_UTIL_ERROR_INVALID_PARAMETER; } @@ -1205,7 +1201,7 @@ int image_util_decode_set_jpeg_downscale(image_util_encode_h handle, image_util_ image_util_error("Wrong image format"); return IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT; } - image_util_retvm_if((down_scale < 0 || down_scale >= sizeof(image_util_scale_e)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "downscale is invalid"); + image_util_retvm_if((down_scale < 0 || down_scale >= _NUM_OF_SCALE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "downscale is invalid"); _handle->down_scale = down_scale; @@ -1740,21 +1736,12 @@ int image_util_encode_set_colorspace(image_util_encode_h handle, image_util_colo return IMAGE_UTIL_ERROR_INVALID_PARAMETER; } - image_util_retvm_if((colorspace < 0 || colorspace >= sizeof(_convert_jpeg_colorspace_tbl) / sizeof(int)), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); - switch (_handle->image_type) { - case IMAGE_UTIL_JPEG: - image_util_retvm_if((_convert_jpeg_colorspace_tbl[colorspace] == -1), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); - break; - case IMAGE_UTIL_PNG: - image_util_retvm_if((_convert_png_colorspace_tbl[colorspace] == -1), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); - break; - case IMAGE_UTIL_GIF: - image_util_retvm_if((_convert_gif_colorspace_tbl[colorspace] == -1), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); - break; - case IMAGE_UTIL_BMP: - image_util_retvm_if((_convert_bmp_colorspace_tbl[colorspace] == -1), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); - break; - default: + image_util_retvm_if((_is_valid_colorspace(colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace"); + + if ((_handle->image_type == IMAGE_UTIL_JPEG) || (_handle->image_type == IMAGE_UTIL_PNG) + || (_handle->image_type == IMAGE_UTIL_GIF) || (_handle->image_type == IMAGE_UTIL_BMP)) { + image_util_retvm_if((_is_supported_colorspace(colorspace, _handle->image_type) == FALSE), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format"); + } else { image_util_error("Invalid image type"); return IMAGE_UTIL_ERROR_INVALID_PARAMETER; } -- 2.34.1