Add new function _check_colorspace() and Bug fix of checking supported colorspace... 40/238640/2 accepted/tizen/unified/20200722.014856 submit/tizen/20200721.001655
authorhj kim <backto.kim@samsung.com>
Thu, 16 Jul 2020 03:59:22 +0000 (12:59 +0900)
committerhj kim <backto.kim@samsung.com>
Thu, 16 Jul 2020 03:59:37 +0000 (12:59 +0900)
image-util supports only a few specific colorspace when encoding and decoding.
So before doing that, each functions should check colorspace.
but some new encoding functions didn't check it. so fix them.

Change-Id: I468c254521ada7c8bd7e97221dbeef3238036dff

include/image_util_private.h
src/image_util_decode.c
src/image_util_encode.c
src/image_util_private.c

index dd71fdb796c5aa51e6d4960859112166be04be80..9d95ea7a500e9933b68f1d06bf7ff30f7bea6960 100644 (file)
@@ -133,6 +133,8 @@ int _image_error_capi(int error_code);
 
 int _image_util_image_to_packet(image_util_image_h image, media_packet_h *packet);
 int _image_util_packet_to_image(media_packet_h packet, image_util_image_h *image);
+int _check_colorspace(image_util_type_e image_type, image_util_colorspace_e colorspace);
+
 
 /**
 * @}
index 585c010e2cd304c8a80fc66d50f7a78bcde362a2..a43e666f6e69343e5297259b692523a9769ef86b 100644 (file)
@@ -215,13 +215,13 @@ int image_util_decode_set_output_buffer(image_util_decode_h handle, unsigned cha
 
 int image_util_decode_set_colorspace(image_util_decode_h handle, image_util_colorspace_e colorspace)
 {
+       int err = IMAGE_UTIL_ERROR_NONE;
        decode_s *_handle = (decode_s *) handle;
 
        image_util_retvm_if(!_handle, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid Handle");
-       IMAGE_UTIL_TYPE_CHECK(_handle->image_type);
 
-       image_util_retvm_if(!_is_valid_colorspace(colorspace), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace");
-       image_util_retvm_if(!_is_supported_colorspace(colorspace, _handle->image_type), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format");
+       err = _check_colorspace(_handle->image_type, colorspace);
+       image_util_retvm_if(err != IMAGE_UTIL_ERROR_NONE, err, "Invalid colorspace");
 
        _handle->colorspace = colorspace;
 
@@ -621,8 +621,9 @@ int image_util_decode_jpeg(const char *path, image_util_colorspace_e colorspace,
        image_util_retvm_if(!IMAGE_UTIL_STRING_VALID(path), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid path");
        image_util_retvm_if(!image_buffer, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid image_buffer");
        image_util_retvm_if(!size, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "!invalid size");
-       image_util_retvm_if(!_is_valid_colorspace(colorspace), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace");
-       image_util_retvm_if(!_is_supported_colorspace(colorspace, IMAGE_UTIL_JPEG), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "Not supported format");
+
+       err = _check_colorspace(IMAGE_UTIL_JPEG, colorspace);
+       image_util_retvm_if(err != IMAGE_UTIL_ERROR_NONE, err, "Invalid colorspace");
 
        err = mm_util_decode_from_jpeg_file(path, TYPECAST_COLOR_BY_TYPE(colorspace, IMAGE_UTIL_JPEG), MM_UTIL_JPEG_DECODE_DOWNSCALE_1_1, &image);
        image_util_retvm_if(err != MM_UTIL_ERROR_NONE, _image_error_capi(err), "mm_util_decode_from_jpeg_file failed. (%d)", err);
@@ -644,8 +645,9 @@ int image_util_decode_jpeg_from_memory(const unsigned char *jpeg_buffer, int jpe
        image_util_retvm_if(jpeg_size <= 0, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid jpeg_size");
        image_util_retvm_if(!image_buffer, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid image_buffer");
        image_util_retvm_if(!size, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "!invalid size");
-       image_util_retvm_if(!_is_valid_colorspace(colorspace), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace");
-       image_util_retvm_if(!_is_supported_colorspace(colorspace, IMAGE_UTIL_JPEG), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "Not supported format");
+
+       err = _check_colorspace(IMAGE_UTIL_JPEG, colorspace);
+       image_util_retvm_if(err != IMAGE_UTIL_ERROR_NONE, err, "Invalid colorspace");
 
        err = mm_util_decode_from_jpeg_memory((void  *)jpeg_buffer, (size_t)jpeg_size,
                                        TYPECAST_COLOR_BY_TYPE(colorspace, IMAGE_UTIL_JPEG), MM_UTIL_JPEG_DECODE_DOWNSCALE_1_1, &image);
@@ -667,8 +669,9 @@ int image_util_decode_jpeg_with_downscale(const char *path, image_util_colorspac
        image_util_retvm_if(!IMAGE_UTIL_STRING_VALID(path), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid path");
        image_util_retvm_if(!image_buffer, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid image_buffer");
        image_util_retvm_if(!size, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "!invalid size");
-       image_util_retvm_if(!_is_valid_colorspace(colorspace), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace");
-       image_util_retvm_if(!_is_supported_colorspace(colorspace, IMAGE_UTIL_JPEG), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "Not supported format");
+
+       err = _check_colorspace(IMAGE_UTIL_JPEG, colorspace);
+       image_util_retvm_if(err != IMAGE_UTIL_ERROR_NONE, err, "Invalid colorspace");
 
        err = mm_util_decode_from_jpeg_file(path, TYPECAST_COLOR_BY_TYPE(colorspace, IMAGE_UTIL_JPEG), _convert_decode_scale_tbl[downscale], &image);
        image_util_retvm_if(err != MM_UTIL_ERROR_NONE, _image_error_capi(err), "image_util_decode_jpeg_with_downscale failed. (%d)", err);
@@ -690,8 +693,9 @@ int image_util_decode_jpeg_from_memory_with_downscale(const unsigned char *jpeg_
        image_util_retvm_if(jpeg_size <= 0, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid jpeg_size");
        image_util_retvm_if(!image_buffer, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid image_buffer");
        image_util_retvm_if(!size, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "!invalid size");
-       image_util_retvm_if(!_is_valid_colorspace(colorspace), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace");
-       image_util_retvm_if(!_is_supported_colorspace(colorspace, IMAGE_UTIL_JPEG), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "Not supported format");
+
+       err = _check_colorspace(IMAGE_UTIL_JPEG, colorspace);
+       image_util_retvm_if(err != IMAGE_UTIL_ERROR_NONE, err, "Invalid colorspace");
 
        err = mm_util_decode_from_jpeg_memory((void  *)jpeg_buffer, (size_t)jpeg_size,
                                        TYPECAST_COLOR_BY_TYPE(colorspace, IMAGE_UTIL_JPEG), _convert_decode_scale_tbl[downscale], &image);
index 509e0e06915fb1cc05e7d2cc7a324affe1f54ebf..aeb75a078e321a63f8729c44f857027e120ca7f4 100644 (file)
@@ -201,15 +201,15 @@ int image_util_encode_set_resolution(image_util_encode_h handle, unsigned long w
 
 int image_util_encode_set_colorspace(image_util_encode_h handle, image_util_colorspace_e colorspace)
 {
+       int err = IMAGE_UTIL_ERROR_NONE;
        encode_s *_handle = (encode_s *) handle;
 
        image_util_warning("DEPRECATION WARNING: image_util_encode_set_colorspace() is deprecated and will be removed from next release. Use image_util_create_image() instead.");
 
        image_util_retvm_if(!_handle, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid Handle");
-       IMAGE_UTIL_TYPE_CHECK(_handle->image_type);
 
-       image_util_retvm_if(!_is_valid_colorspace(colorspace), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace");
-       image_util_retvm_if(!_is_supported_colorspace(colorspace, _handle->image_type), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format");
+       err = _check_colorspace(_handle->image_type, colorspace);
+       image_util_retvm_if(err != IMAGE_UTIL_ERROR_NONE, err, "Invalid colorspace");
 
        _handle->src.color = TYPECAST_COLOR_BY_TYPE(colorspace, _handle->image_type);
 
@@ -393,6 +393,10 @@ static int __image_util_encode_run_to_file(image_util_encode_h handle, image_uti
 
        image_util_retvm_if(!_handle, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid handle");
        image_util_retvm_if(!image, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid image");
+
+       ret = _check_colorspace(_handle->image_type, ((mm_image_info_s *)image)->color);
+       image_util_retvm_if(ret != IMAGE_UTIL_ERROR_NONE, ret, "Invalid colorspace");
+
        ret = _check_encode_path(file_path);
        image_util_retvm_if(ret != IMAGE_UTIL_ERROR_NONE, ret, "_check_valid_file failed (%d)", ret);
 
@@ -430,6 +434,10 @@ static int __image_util_encode_run_to_buffer(image_util_encode_h handle, image_u
 
        image_util_retvm_if(!_handle, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid handle");
        image_util_retvm_if(!image, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid image");
+
+       ret = _check_colorspace(_handle->image_type, ((mm_image_info_s *)image)->color);
+       image_util_retvm_if(ret != IMAGE_UTIL_ERROR_NONE, ret, "Invalid colorspace");
+
        image_util_retvm_if(!buffer, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid buffer");
        image_util_retvm_if(!buffer_size, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid buffer_size");
 
@@ -591,10 +599,15 @@ int image_util_encode_run_async_to_file(image_util_encode_h handle, image_util_i
 
        image_util_retvm_if(!_handle, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid handle");
        image_util_retvm_if(!image, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid image");
-       image_util_retvm_if(!completed_cb, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid completed_cb");
+
+       ret = _check_colorspace(_handle->image_type, ((mm_image_info_s *)image)->color);
+       image_util_retvm_if(ret != IMAGE_UTIL_ERROR_NONE, ret, "Invalid colorspace");
+
        ret = _check_encode_path(file_path);
        image_util_retvm_if(ret != IMAGE_UTIL_ERROR_NONE, ret, "_check_valid_file failed (%d)", ret);
 
+       image_util_retvm_if(!completed_cb, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid completed_cb");
+
        image_util_fenter();
 
        ret = mm_image_clone_image(image, &_handle->new_src);
@@ -626,6 +639,10 @@ int image_util_encode_run_async_to_buffer(image_util_encode_h handle, image_util
 
        image_util_retvm_if(!_handle, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid handle");
        image_util_retvm_if(!image, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid image");
+
+       ret = _check_colorspace(_handle->image_type, ((mm_image_info_s *)image)->color);
+       image_util_retvm_if(ret != IMAGE_UTIL_ERROR_NONE, ret, "Invalid colorspace");
+
        image_util_retvm_if(!completed_cb, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid completed_cb");
 
        image_util_fenter();
@@ -772,8 +789,9 @@ int image_util_encode_jpeg(const unsigned char *buffer, int width, int height, i
        image_util_retvm_if(!path, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid path");
        image_util_retvm_if(!buffer, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid buffer");
        image_util_retvm_if((strlen(path) == 0), IMAGE_UTIL_ERROR_NO_SUCH_FILE, "Invalid path");
-       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 = _check_colorspace(IMAGE_UTIL_JPEG, colorspace);
+       image_util_retvm_if(err != IMAGE_UTIL_ERROR_NONE, err, "Invalid colorspace");
 
        err = mm_image_create_image((unsigned int)width, (unsigned int)height, TYPECAST_COLOR_BY_TYPE(colorspace, IMAGE_UTIL_JPEG), buffer, TEMP_DATA_SIZE, &image);
        image_util_retvm_if(err != MM_UTIL_ERROR_NONE, _image_error_capi(err), "mm_image_create_image is failed (%d)", err);
@@ -796,8 +814,9 @@ int image_util_encode_jpeg_to_memory(const unsigned char *image_buffer, int widt
        image_util_retvm_if(!image_buffer, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid image_buffer");
        image_util_retvm_if(!jpeg_buffer, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid jpeg_buffer");
        image_util_retvm_if(!jpeg_size, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid jpeg_size");
-       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 = _check_colorspace(IMAGE_UTIL_JPEG, colorspace);
+       image_util_retvm_if(err != IMAGE_UTIL_ERROR_NONE, err, "Invalid colorspace");
 
        err = mm_image_create_image((unsigned int)width, (unsigned int)height, TYPECAST_COLOR_BY_TYPE(colorspace, IMAGE_UTIL_JPEG), image_buffer, TEMP_DATA_SIZE, &image);
        image_util_retvm_if(err != MM_UTIL_ERROR_NONE, _image_error_capi(err), "mm_image_create_image is failed (%d)", err);
index d7bfac9c7005a5c9aec1f7be238e7f842e74581e..e652823af9b7c83f33d49f7bc609fe7a18c56055 100755 (executable)
@@ -529,3 +529,13 @@ ERROR:
        g_free(ptr);
        return IMAGE_UTIL_ERROR_INVALID_OPERATION;
 }
+
+int _check_colorspace(image_util_type_e image_type, image_util_colorspace_e colorspace)
+{
+       IMAGE_UTIL_TYPE_CHECK(image_type);
+
+       image_util_retvm_if(!_is_valid_colorspace(colorspace), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace");
+       image_util_retvm_if(!_is_supported_colorspace(colorspace, image_type), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format");
+
+       return IMAGE_UTIL_ERROR_NONE;
+}