From c3853d979db385f01b6057e1e7a65b2dec3076d0 Mon Sep 17 00:00:00 2001 From: hj kim Date: Thu, 16 Jul 2020 12:59:22 +0900 Subject: [PATCH] Add new function _check_colorspace() and Bug fix of checking supported colorspace when encoding and decoding 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 | 2 ++ src/image_util_decode.c | 26 +++++++++++++++----------- src/image_util_encode.c | 35 +++++++++++++++++++++++++++-------- src/image_util_private.c | 10 ++++++++++ 4 files changed, 54 insertions(+), 19 deletions(-) diff --git a/include/image_util_private.h b/include/image_util_private.h index dd71fdb..9d95ea7 100644 --- a/include/image_util_private.h +++ b/include/image_util_private.h @@ -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); + /** * @} diff --git a/src/image_util_decode.c b/src/image_util_decode.c index 585c010..a43e666 100644 --- a/src/image_util_decode.c +++ b/src/image_util_decode.c @@ -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); diff --git a/src/image_util_encode.c b/src/image_util_encode.c index 509e0e0..aeb75a0 100644 --- a/src/image_util_encode.c +++ b/src/image_util_encode.c @@ -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); diff --git a/src/image_util_private.c b/src/image_util_private.c index d7bfac9..e652823 100755 --- a/src/image_util_private.c +++ b/src/image_util_private.c @@ -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; +} -- 2.7.4