From: Vineeth TM Date: Wed, 2 Dec 2015 05:01:23 +0000 (+0900) Subject: imageutil: Add support for BMP image X-Git-Tag: accepted/tizen/mobile/20151204.060148~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F30%2F53130%2F1;p=platform%2Fcore%2Fapi%2Fimage-util.git imageutil: Add support for BMP image Change-Id: Ib4184da82d19c885feb44818ef6779853b0c2263 Signed-off-by: Vineeth TM --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 748afa4..7d2e035 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,7 +24,7 @@ SET(service "media") SET(submodule "image-util") # for package file -SET(dependents "dlog mmutil-gif mmutil-png mmutil-jpeg mmutil-imgp mmutil-imgcv capi-base-common capi-media-tool") +SET(dependents "dlog mmutil-bmp mmutil-gif mmutil-png mmutil-jpeg mmutil-imgp mmutil-imgcv capi-base-common capi-media-tool") SET(pc_dependents "dlog capi-base-common capi-media-tool") SET(fw_name "${project_prefix}-${service}-${submodule}") diff --git a/decode-test/image_util_decode_encode_testsuite.c b/decode-test/image_util_decode_encode_testsuite.c index ceb2d04..c89b56d 100755 --- a/decode-test/image_util_decode_encode_testsuite.c +++ b/decode-test/image_util_decode_encode_testsuite.c @@ -243,6 +243,9 @@ int main(int argc, char *argv[]) case IMAGE_UTIL_GIF: snprintf(type, 4, "%s", "gif"); break; + case IMAGE_UTIL_BMP: + snprintf(type, 4, "%s", "bmp"); + break; default: break; } @@ -267,7 +270,10 @@ int main(int argc, char *argv[]) return 0; if (!strcmp("decode-mem", argv[1])) { - ret = image_util_encode_set_output_buffer(encoded, &dst); + if (encode_image_type == IMAGE_UTIL_BMP) + ret = image_util_encode_set_output_path(encoded, filename); + else + ret = image_util_encode_set_output_buffer(encoded, &dst); if (ret != IMAGE_UTIL_ERROR_NONE) return 0; } else { @@ -286,7 +292,7 @@ int main(int argc, char *argv[]) if (ret != IMAGE_UTIL_ERROR_NONE) return 0; - if (!strcmp("decode-mem", argv[1])) { + if (!strcmp("decode-mem", argv[1]) && (encode_image_type != IMAGE_UTIL_BMP)) { _write_file(filename, (void *)dst, image_size); free(dst); } diff --git a/include/image_util_type.h b/include/image_util_type.h index 540cc66..32ef371 100755 --- a/include/image_util_type.h +++ b/include/image_util_type.h @@ -132,6 +132,7 @@ typedef enum { IMAGE_UTIL_JPEG, /**< Image format JPEG */ IMAGE_UTIL_PNG, /**< Image format PNG */ IMAGE_UTIL_GIF, /**< Image format GIF */ + IMAGE_UTIL_BMP, /**< Image format BMP */ } image_util_type_e; /** diff --git a/packaging/capi-media-image-util.spec b/packaging/capi-media-image-util.spec index 10c6d3f..bd7bde0 100755 --- a/packaging/capi-media-image-util.spec +++ b/packaging/capi-media-image-util.spec @@ -12,11 +12,14 @@ BuildRequires: pkgconfig(mmutil-imgp) BuildRequires: pkgconfig(mmutil-imgcv) BuildRequires: pkgconfig(mmutil-png) BuildRequires: pkgconfig(mmutil-gif) +BuildRequires: pkgconfig(mmutil-bmp) BuildRequires: pkgconfig(capi-base-common) BuildRequires: pkgconfig(capi-media-tool) BuildRequires: cmake BuildRequires: libpng-devel BuildRequires: giflib-devel +BuildRequires: libbmp-devel +BuildRequires: libnsbmp-devel %description A Image Utility library in Tizen Native API package @@ -32,6 +35,7 @@ Requires: pkgconfig(mmutil-imgp) Requires: pkgconfig(mmutil-imgcv) Requires: pkgconfig(mmutil-png) Requires: pkgconfig(mmutil-gif) +Requires: pkgconfig(mmutil-bmp) Requires: pkgconfig(capi-base-common) %description devel diff --git a/src/image_util.c b/src/image_util.c index 469949c..d4e622d 100755 --- a/src/image_util.c +++ b/src/image_util.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -122,6 +123,24 @@ static int _convert_gif_colorspace_tbl[] = { -1 , /* 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 */ + 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 */ +}; + static int _convert_decode_scale_tbl[] = { MM_UTIL_JPEG_DECODE_DOWNSCALE_1_1, MM_UTIL_JPEG_DECODE_DOWNSCALE_1_2, @@ -839,6 +858,14 @@ int image_util_foreach_supported_colorspace(image_util_type_e image_type, image_ } 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: return MM_UTIL_ERROR_INVALID_PARAMETER; } @@ -892,6 +919,20 @@ static int _image_util_decode_create_gif_handle(decode_encode_s * handle) return err; } +static int _image_util_decode_create_bmp_handle(decode_encode_s * handle) +{ + int err = MM_UTIL_ERROR_NONE; + + image_util_retvm_if((handle == NULL), MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid Handle"); + + mm_util_bmp_data *_handle = (mm_util_bmp_data *) calloc(1, sizeof(mm_util_bmp_data)); + image_util_retvm_if((_handle == NULL), MM_UTIL_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY(0x%08x)", MM_UTIL_ERROR_OUT_OF_MEMORY); + + handle->image_h = (MMHandleType) _handle; + + return err; +} + int image_util_decode_create(image_util_type_e image_type, image_util_decode_h * handle) { int err = MM_UTIL_ERROR_NONE; @@ -920,6 +961,9 @@ int image_util_decode_create(image_util_type_e image_type, image_util_decode_h * case IMAGE_UTIL_GIF: err = _image_util_decode_create_gif_handle(_handle); break; + case IMAGE_UTIL_BMP: + err = _image_util_decode_create_bmp_handle(_handle); + break; default: err = MM_UTIL_ERROR_INVALID_PARAMETER; break; @@ -1018,6 +1062,9 @@ int image_util_decode_set_colorspace(image_util_encode_h handle, image_util_colo 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_error("Invalid image type"); return MM_UTIL_ERROR_INVALID_PARAMETER; @@ -1130,6 +1177,29 @@ static int _image_util_decode_internal(decode_encode_s * _handle) } } break; + case IMAGE_UTIL_BMP: + { + mm_util_bmp_data *bmp_data; + + bmp_data = (mm_util_bmp_data *) _handle->image_h; + if (bmp_data == NULL) { + image_util_error("Invalid bmp data"); + return MM_UTIL_ERROR_INVALID_PARAMETER; + } + + if (_handle->path) + err = mm_util_decode_from_bmp_file(bmp_data, _handle->path); + else + err = mm_util_decode_from_bmp_memory(bmp_data, &_handle->src_buffer, _handle->src_size); + + if (err == MM_UTIL_ERROR_NONE) { + *(_handle->dst_buffer) = bmp_data->data; + _handle->dst_size = bmp_data->size; + _handle->width = bmp_data->width; + _handle->height = bmp_data->height; + } + } + break; default: err = MM_UTIL_ERROR_INVALID_PARAMETER; break; @@ -1313,6 +1383,18 @@ int image_util_decode_destroy(image_util_decode_h handle) IMAGE_UTIL_SAFE_FREE(gif_data); } break; + case IMAGE_UTIL_BMP: + { + mm_util_bmp_data *bmp_data; + + bmp_data = (mm_util_bmp_data *) _handle->image_h; + if (bmp_data == NULL) { + image_util_error("Invalid bmp data"); + return IMAGE_UTIL_ERROR_INVALID_PARAMETER; + } + IMAGE_UTIL_SAFE_FREE(bmp_data); + } + break; default: err = IMAGE_UTIL_ERROR_INVALID_PARAMETER; break; @@ -1388,6 +1470,20 @@ static int _image_util_encode_create_gif_handle(decode_encode_s * handle) return err; } +static int _image_util_encode_create_bmp_handle(decode_encode_s * handle) +{ + int err = MM_UTIL_ERROR_NONE; + + image_util_retvm_if((handle == NULL), MM_UTIL_ERROR_INVALID_PARAMETER, "Invalid Handle"); + + mm_util_bmp_data *_handle = (mm_util_bmp_data *) calloc(1, sizeof(mm_util_bmp_data)); + image_util_retvm_if((_handle == NULL), MM_UTIL_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY(0x%08x)", MM_UTIL_ERROR_OUT_OF_MEMORY); + + handle->image_h = (MMHandleType) _handle; + + return err; +} + int image_util_encode_create(image_util_type_e image_type, image_util_encode_h * handle) { int err = MM_UTIL_ERROR_NONE; @@ -1416,6 +1512,9 @@ int image_util_encode_create(image_util_type_e image_type, image_util_encode_h * case IMAGE_UTIL_GIF: err = _image_util_encode_create_gif_handle(_handle); break; + case IMAGE_UTIL_BMP: + err = _image_util_encode_create_bmp_handle(_handle); + break; default: err = MM_UTIL_ERROR_INVALID_PARAMETER; break; @@ -1483,6 +1582,19 @@ int image_util_encode_set_resolution(image_util_encode_h handle, unsigned long w mm_util_gif_encode_set_height(gif_data, height); } break; + case IMAGE_UTIL_BMP: + { + mm_util_bmp_data *bmp_data; + + bmp_data = (mm_util_bmp_data *) _handle->image_h; + if (bmp_data == NULL) { + image_util_error("Invalid bmp data"); + return IMAGE_UTIL_ERROR_INVALID_PARAMETER; + } + mm_util_bmp_encode_set_width(bmp_data, width); + mm_util_bmp_encode_set_height(bmp_data, height); + } + break; default: err = IMAGE_UTIL_ERROR_INVALID_PARAMETER; break; @@ -1515,6 +1627,9 @@ int image_util_encode_set_colorspace(image_util_encode_h handle, image_util_colo 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_error("Invalid image type"); return MM_UTIL_ERROR_INVALID_PARAMETER; @@ -1695,6 +1810,33 @@ static int _image_util_encode_internal(decode_encode_s * _handle) } } break; + case IMAGE_UTIL_BMP: + { + mm_util_bmp_data *bmp_data; + + bmp_data = (mm_util_bmp_data *) _handle->image_h; + if (bmp_data == NULL) { + image_util_error("Invalid bmp data"); + return MM_UTIL_ERROR_INVALID_PARAMETER; + } + + bmp_data->data = _handle->src_buffer; + if (_handle->path) + err = mm_util_encode_bmp_to_file(bmp_data, _handle->path); + else { + fprintf(stderr, "\tNot yet implemented\n"); + return MM_UTIL_ERROR_INVALID_PARAMETER; + } + + if (err == MM_UTIL_ERROR_NONE) { + if (_handle->dst_buffer) + *(_handle->dst_buffer) = bmp_data->data; + _handle->dst_size = bmp_data->size; + _handle->width = bmp_data->width; + _handle->height = bmp_data->height; + } + } + break; default: err = MM_UTIL_ERROR_INVALID_PARAMETER; break; @@ -1877,6 +2019,18 @@ int image_util_encode_destroy(image_util_encode_h handle) IMAGE_UTIL_SAFE_FREE(gif_data); } break; + case IMAGE_UTIL_BMP: + { + mm_util_bmp_data *bmp_data; + + bmp_data = (mm_util_bmp_data *) _handle->image_h; + if (bmp_data == NULL) { + image_util_error("Invalid bmp data"); + return IMAGE_UTIL_ERROR_INVALID_PARAMETER; + } + IMAGE_UTIL_SAFE_FREE(bmp_data); + } + break; default: err = IMAGE_UTIL_ERROR_INVALID_PARAMETER; break;