Reduce duplicated source code & replace hardcoded value of colorspace 45/139445/6
authorJiyong Min <jiyong.min@samsung.com>
Wed, 19 Jul 2017 03:56:20 +0000 (12:56 +0900)
committerJiyong Min <jiyong.min@samsung.com>
Thu, 20 Jul 2017 00:14:21 +0000 (09:14 +0900)
Change-Id: I4f57d9d79cb205ded1ac8ab7cd6e452a503f50fa
Signed-off-by: Jiyong Min <jiyong.min@samsung.com>
include/image_util_private.h
packaging/capi-media-image-util.spec
src/image_util.c

index 4d7673e..dbbbcad 100755 (executable)
@@ -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 {
index f217979..e15c657 100755 (executable)
@@ -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
index 4d68c0b..1c20033 100755 (executable)
@@ -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;
        }