#define IMGCV_FUNC_NAME "mm_util_cv_extract_representative_color"
#define PATH_MMUTIL_IMGCV_LIB PATH_LIBDIR"/libmmutil_imgcv.so"
-#define TYPECAST_COLOR(c) convert_type_of_colorspace(c)
-#define TYPECAST_COLOR_BY_TYPE(c, t) convert_type_of_colorspace_with_image_type(c, t)
+#define TYPECAST_COLOR(c) _convert_type_of_colorspace(c)
+#define TYPECAST_COLOR_BY_TYPE(c, t) _convert_type_of_colorspace_with_image_type(c, t)
-#define NUM_OF_COLORSPACE get_number_of_colorspace()
+#define NUM_OF_COLORSPACE _get_number_of_colorspace()
typedef gboolean(*ModuleFunc)(void *, int, int, unsigned char *, unsigned char *, unsigned char *);
#define IMAGE_UTIL_SUPPORT_TYPE_CHECK(value, support) \
image_util_retvm_if((value != support), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "Not supported format")
-gboolean is_valid_colorspace(image_util_colorspace_e colorspace);
-gboolean is_supported_colorspace(image_util_colorspace_e colorspace, image_util_type_e type);
+gboolean _is_valid_colorspace(image_util_colorspace_e colorspace);
+gboolean _is_supported_colorspace(image_util_colorspace_e colorspace, image_util_type_e type);
-unsigned int get_number_of_colorspace(void);
-int convert_type_of_colorspace(const image_util_colorspace_e colorspace);
-int convert_type_of_colorspace_with_image_type(const image_util_colorspace_e colorspace, const image_util_type_e type);
+unsigned int _get_number_of_colorspace(void);
+int _convert_type_of_colorspace(const image_util_colorspace_e colorspace);
+int _convert_type_of_colorspace_with_image_type(const image_util_colorspace_e colorspace, const image_util_type_e type);
int _check_valid_file(const char *path, int mode);
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);
+
/**
* @}
*/
#include <image_util_private.h>
typedef struct {
- mm_util_color_format_e image_format;
- media_format_mimetype_e mimetype;
- const char *mimetype_name;
-} image_format_mimetype_pair_s;
-
-typedef struct {
gboolean thread_stop;
transformation_h transform;
image_util_image_h src;
gboolean is_transform2;
} t_data_s;
-static const image_format_mimetype_pair_s image_format_mimetype_table[MM_UTIL_COLOR_NUM] = {
- { MM_UTIL_COLOR_YUV420, MEDIA_FORMAT_YV12, "MEDIA_FORMAT_YV12" },
- { MM_UTIL_COLOR_YUV422, MEDIA_FORMAT_422P, "MEDIA_FORMAT_422P" },
- { MM_UTIL_COLOR_I420, MEDIA_FORMAT_I420, "MEDIA_FORMAT_I420" },
- { MM_UTIL_COLOR_NV12, MEDIA_FORMAT_NV12, "Not support" },
- { MM_UTIL_COLOR_UYVY, MEDIA_FORMAT_UYVY, "MEDIA_FORMAT_UYVY" },
- { MM_UTIL_COLOR_YUYV, MEDIA_FORMAT_YUYV, "MEDIA_FORMAT_YUYV" },
- { MM_UTIL_COLOR_RGB16, MEDIA_FORMAT_RGB565, "MEDIA_FORMAT_RGB565" },
- { MM_UTIL_COLOR_RGB24, MEDIA_FORMAT_RGB888, "MEDIA_FORMAT_RGB888" },
- { MM_UTIL_COLOR_ARGB, MEDIA_FORMAT_ARGB, "MEDIA_FORMAT_ARGB" },
- { MM_UTIL_COLOR_BGRA, MEDIA_FORMAT_BGRA, "MEDIA_FORMAT_BGRA" },
- { MM_UTIL_COLOR_RGBA, MEDIA_FORMAT_RGBA, "MEDIA_FORMAT_RGBA" },
- { MM_UTIL_COLOR_BGRX, -1, "Not support" },
- { MM_UTIL_COLOR_NV12_TILED, MEDIA_FORMAT_NV12T, "MEDIA_FORMAT_NV12T" },
- { MM_UTIL_COLOR_NV16, MEDIA_FORMAT_NV16, "MEDIA_FORMAT_NV16" },
- { MM_UTIL_COLOR_NV61, -1, "Not support" }
-};
-
-static media_format_mimetype_e __image_format_to_mimetype(mm_util_color_format_e format)
-{
- unsigned int i = 0;
- media_format_mimetype_e mimetype = -1;
-
- for (i = 0; i < MM_UTIL_COLOR_NUM; i++) {
- if (image_format_mimetype_table[i].image_format == format) {
- mimetype = image_format_mimetype_table[i].mimetype;
- break;
- }
- }
-
- image_util_debug("imgp fmt: %d mimetype fmt: %s", format, image_format_mimetype_table[i].mimetype_name);
-
- return mimetype;
-}
-
-static mm_util_color_format_e __mimetype_to_image_format(media_format_mimetype_e mimetype)
-{
- unsigned int i = 0;
- mm_util_color_format_e format = -1;
-
- for (i = 0; i < MM_UTIL_COLOR_NUM; i++) {
- if (image_format_mimetype_table[i].mimetype == mimetype) {
- format = image_format_mimetype_table[i].image_format;
- break;
- }
- }
-
- image_util_debug("mimetype: %s imgp fmt: %d", image_format_mimetype_table[i].mimetype_name, format);
-
- return format;
-}
-
-static int __create_media_format(media_format_mimetype_e mimetype, unsigned int width, unsigned int height, media_format_h *format)
-{
- int ret = MEDIA_FORMAT_ERROR_NONE;
- media_format_h new_format = NULL;
-
- image_util_retvm_if((!format) || (width == 0) || (height == 0), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
-
- ret = media_format_create(&new_format);
- image_util_retvm_if((ret != MEDIA_FORMAT_ERROR_NONE), IMAGE_UTIL_ERROR_INVALID_OPERATION, "media_format_make_writable failed (%d)", ret);
-
- ret = media_format_set_video_mime(new_format, mimetype);
- if (ret != MEDIA_FORMAT_ERROR_NONE) {
- image_util_error("media_format_set_video_mime failed (%d)", ret);
- goto ERROR;
- }
-
- ret = media_format_set_video_width(new_format, width);
- if (ret != MEDIA_FORMAT_ERROR_NONE) {
- image_util_error("media_format_set_video_width failed (%d)", ret);
- goto ERROR;
- }
-
- ret = media_format_set_video_height(new_format, height);
- if (ret != MEDIA_FORMAT_ERROR_NONE) {
- image_util_error("media_format_set_video_height failed (%d)", ret);
- goto ERROR;
- }
-
- *format = new_format;
-
- return IMAGE_UTIL_ERROR_NONE;
-
-ERROR:
- media_format_unref(new_format);
-
- return IMAGE_UTIL_ERROR_INVALID_OPERATION;
-}
-
-static int __create_media_packet(media_format_h fmt, unsigned char *buffer, size_t buffer_size, media_packet_h *packet)
-{
- int ret = MEDIA_FORMAT_ERROR_NONE;
- media_packet_h new_packet = NULL;
- unsigned int i = 0;
- uint32_t plane_num = 0;
- int stride_width = 0, stride_height = 0;
- void *plane_ptr = NULL;
- size_t plane_size = 0;
- size_t buffer_offset = 0;
- size_t memcpy_size = 0;
-
- image_util_retvm_if(!fmt, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid fmt");
- image_util_retvm_if(!packet, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid new_pkt");
- image_util_retvm_if(!buffer, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid pkt_ptr");
- image_util_retvm_if(buffer_size == 0, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid pkt_size");
-
- ret = media_packet_create_alloc(fmt, NULL, NULL, &new_packet);
- image_util_retvm_if((ret != MEDIA_PACKET_ERROR_NONE), IMAGE_UTIL_ERROR_INVALID_OPERATION, "media_packet_create_alloc failed (%d)", ret);
-
- ret = media_packet_get_number_of_video_planes(new_packet, &plane_num);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- image_util_error("media_packet_get_number_of_video_plances failed (%d)", ret);
- goto ERROR;
- }
-
- image_util_debug("plane_num: %u", plane_num);
-
- for (i = 0; i < plane_num; i++) {
- ret = media_packet_get_video_stride_width(new_packet, i, &stride_width);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- image_util_error("media_packet_get_video_stride_width failed (%d)", ret);
- goto ERROR;
- }
-
- ret = media_packet_get_video_stride_height(new_packet, i, &stride_height);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- image_util_error("media_packet_get_video_stride_height failed (%d)", ret);
- goto ERROR;
- }
-
- plane_size = stride_width * stride_height;
-
- ret = media_packet_get_video_plane_data_ptr(new_packet, i, &plane_ptr);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- image_util_error("media_packet_get_video_plane_data_ptr failed (%d)", ret);
- goto ERROR;
- }
-
- image_util_debug("stride_width: %d, stride_height: %d, plane_ptr: %p, plane_size: %zu",
- stride_width, stride_height, plane_ptr,plane_size);
-
- if (buffer_offset + plane_size > buffer_size)
- memcpy_size = buffer_size - buffer_offset;
- else
- memcpy_size = plane_size;
-
- memcpy(plane_ptr, buffer + buffer_offset, memcpy_size);
- buffer_offset += memcpy_size;
- }
-
- image_util_debug("Success - media_packet is created (%p)", new_packet);
-
- *packet = new_packet;
-
- return IMAGE_UTIL_ERROR_NONE;
-
-ERROR:
- media_packet_destroy(new_packet);
-
- return IMAGE_UTIL_ERROR_INVALID_OPERATION;
-}
-
static int __mm_util_transform(transformation_h handle, image_util_image_h origin, image_util_image_h *transform)
{
int ret = IMAGE_UTIL_ERROR_NONE;
return _image_error_capi(ret);
}
-static int __image_util_image_to_packet(image_util_image_h image, media_packet_h *packet)
-{
- int ret = IMAGE_UTIL_ERROR_NONE;
- mm_util_color_format_e format = 0;
- unsigned int width = 0, height = 0;
- unsigned char *buffer = NULL;
- size_t buffer_size = 0;
- media_format_h fmt = NULL;
-
- image_util_fenter();
-
- image_util_retvm_if(!image, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid image");
- image_util_retvm_if(!packet, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid packet");
-
- ret = mm_image_get_image(image, &width, &height, &format, &buffer, &buffer_size);
- image_util_retvm_if((ret != MM_UTIL_ERROR_NONE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "mm_image_get_image failed");
-
- image_util_debug("Buffer: %p buffer_size: %zu", buffer, buffer_size);
-
- ret = __create_media_format(__image_format_to_mimetype(format), width, height, &fmt);
- if (ret != IMAGE_UTIL_ERROR_NONE) {
- image_util_error("__create_media_format failed (%d)", ret);
- IMAGE_UTIL_SAFE_FREE(buffer);
- return IMAGE_UTIL_ERROR_INVALID_OPERATION;
- }
-
- ret = __create_media_packet(fmt, buffer, buffer_size, packet);
- if (ret != IMAGE_UTIL_ERROR_NONE)
- image_util_error("__create_media_packet failed (%d)", ret);
-
- media_format_unref(fmt);
- IMAGE_UTIL_SAFE_FREE(buffer);
-
- image_util_fleave();
-
- return ret;
-}
-
-gpointer __transform_thread(gpointer data)
+static gpointer __transform_thread(gpointer data)
{
int ret = IMAGE_UTIL_ERROR_NONE;
GAsyncQueue *_queue = (GAsyncQueue *)data;
image_util_error("__mm_util_transform failed (%d)", ret);
callback(NULL, ret, _t_data->user_data);
} else {
- ret = __image_util_image_to_packet(_transformed_image, &_transformed_packet);
+ ret = _image_util_image_to_packet(_transformed_image, &_transformed_packet);
if (ret != IMAGE_UTIL_ERROR_NONE) {
callback(NULL, ret, _t_data->user_data);
} else {
return NULL;
}
-static int __image_util_packet_to_image(media_packet_h packet, image_util_image_h *image)
-{
- int ret = IMAGE_UTIL_ERROR_NONE;
- media_format_mimetype_e mimetype = 0;
- int width = 0, height = 0;
- media_format_h fmt = NULL;
- unsigned int i = 0;
- uint32_t plane_num = 0;
- int stride_width = 0, stride_height = 0;
- void *plane_ptr = NULL;
- size_t plane_size = 0;
- void *ptr = NULL;
- size_t size = 0;
-
- image_util_retvm_if(!packet, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid packet");
- image_util_retvm_if(!image, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid image");
-
- ret = media_packet_get_format(packet, &fmt);
- image_util_retvm_if((ret != MEDIA_PACKET_ERROR_NONE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "media_packet_get_format failed (%d)", ret);
-
- ret = media_format_get_video_info(fmt, &mimetype, &width, &height, NULL, NULL);
- if (ret != MEDIA_FORMAT_ERROR_NONE) {
- image_util_error("media_packet_get_format failed (%d)", ret);
- media_format_unref(fmt);
- return IMAGE_UTIL_ERROR_INVALID_PARAMETER;
- }
- media_format_unref(fmt);
-
- ret = media_packet_get_number_of_video_planes(packet, &plane_num);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- image_util_error("media_packet_get_number_of_video_plances failed (%d)", ret);
- goto ERROR;
- }
-
- image_util_debug("plane_num: %u", plane_num);
-
- for (i = 0; i < plane_num; i++) {
- ret = media_packet_get_video_stride_width(packet, i, &stride_width);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- image_util_error("media_packet_get_number_of_video_plances failed (%d)", ret);
- goto ERROR;
- }
-
- ret = media_packet_get_video_stride_height(packet, i, &stride_height);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- image_util_error("media_packet_get_number_of_video_plances failed (%d)", ret);
- goto ERROR;
- }
-
- plane_size = stride_width * stride_height;
-
- ret = media_packet_get_video_plane_data_ptr(packet, i, &plane_ptr);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- image_util_error("media_packet_get_number_of_video_plances failed (%d)", ret);
- goto ERROR;
- }
-
- image_util_debug("stride_width: %d, stride_height: %d, plane_ptr: %p, plane_size: %zu",
- stride_width, stride_height, plane_ptr,plane_size);
-
- ptr = realloc(ptr, size + plane_size);
- image_util_retvm_if(!ptr, IMAGE_UTIL_ERROR_OUT_OF_MEMORY, "Memory allocation failed");
-
- memcpy(ptr + size, plane_ptr, plane_size);
- size += plane_size;
- }
-
- image_util_debug("[Fotmat: %u] W x H : %d x %d buffer(size) : %p(%zu)", mimetype, width, height, ptr, size);
-
- ret = mm_image_create_image(width, height, __mimetype_to_image_format(mimetype), ptr, size, image);
- IMAGE_UTIL_SAFE_FREE(ptr);
- image_util_retvm_if((ret != IMAGE_UTIL_ERROR_NONE), ret, "mm_image_create_image failed (%d)", ret);
-
- image_util_debug("__image_util_packet_to_image succeed");
-
- return IMAGE_UTIL_ERROR_NONE;
-
-ERROR:
- IMAGE_UTIL_SAFE_FREE(ptr);
- return IMAGE_UTIL_ERROR_INVALID_OPERATION;
-}
-
static int __clone_transform(transformation_h src, transformation_h *dst)
{
int ret = IMAGE_UTIL_ERROR_NONE;
image_util_debug("Set colorspace_convert_info [%d]", colorspace);
image_util_retvm_if((_handle == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid Handle");
- image_util_retvm_if((is_valid_colorspace(colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace");
+ image_util_retvm_if(!_is_valid_colorspace(colorspace), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace");
_handle->color = colorspace;
_handle->set_convert = true;
int ret = IMAGE_UTIL_ERROR_NONE;
image_util_image_h _src = NULL;
- ret = __image_util_packet_to_image(src, &_src);
- image_util_retvm_if(ret != IMAGE_UTIL_ERROR_NONE, ret, "Fail to __image_util_packet_to_image");
+ ret = _image_util_packet_to_image(src, &_src);
+ image_util_retvm_if(ret != IMAGE_UTIL_ERROR_NONE, ret, "Fail to _image_util_packet_to_image");
return __mm_util_transform_async(handle, _src, callback, user_data, FALSE);
}
image_util_warning("DEPRECATION WARNING: image_util_calculate_buffer_size() is deprecated and will be removed from next release.");
- image_util_retvm_if((is_valid_colorspace(colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace");
+ image_util_retvm_if(!_is_valid_colorspace(colorspace), 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");
image_util_retvm_if((callback == NULL), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "callback is null");
for (idx = (int)(NUM_OF_COLORSPACE - 1); idx >= 0; idx--) {
- if (is_supported_colorspace(idx, image_type))
+ if (_is_supported_colorspace(idx, image_type))
if (false == callback(idx, user_data))
return IMAGE_UTIL_ERROR_NONE;
image_util_retvm_if(_handle == NULL, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid Handle");
IMAGE_UTIL_TYPE_CHECK(_handle->image_type);
- image_util_retvm_if((is_valid_colorspace(colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace");
- image_util_retvm_if((is_supported_colorspace(colorspace, _handle->image_type) == FALSE), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format");
+ 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");
_handle->colorspace = colorspace;
image_util_retvm_if(_handle == NULL, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid Handle");
IMAGE_UTIL_TYPE_CHECK(_handle->image_type);
- image_util_retvm_if((is_valid_colorspace(colorspace) == FALSE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid colorspace");
- image_util_retvm_if((is_supported_colorspace(colorspace, _handle->image_type) == FALSE), IMAGE_UTIL_ERROR_NOT_SUPPORTED_FORMAT, "not supported format");
+ 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");
_handle->src.color = TYPECAST_COLOR_BY_TYPE(colorspace, _handle->image_type);
#include <unistd.h>
#include <image_util_private.h>
+#include <mm_util_image.h>
#include <mm_util_imgp.h>
#include <mm_util_jpeg.h>
#include <mm_util_png.h>
#include <mm_util_gif.h>
#include <mm_util_bmp.h>
+typedef struct {
+ mm_util_color_format_e image_format;
+ media_format_mimetype_e mimetype;
+ const char *mimetype_name;
+} image_format_mimetype_pair_s;
+
+static const image_format_mimetype_pair_s image_format_mimetype_table[MM_UTIL_COLOR_NUM] = {
+ { MM_UTIL_COLOR_YUV420, MEDIA_FORMAT_YV12, "MEDIA_FORMAT_YV12" },
+ { MM_UTIL_COLOR_YUV422, MEDIA_FORMAT_422P, "MEDIA_FORMAT_422P" },
+ { MM_UTIL_COLOR_I420, MEDIA_FORMAT_I420, "MEDIA_FORMAT_I420" },
+ { MM_UTIL_COLOR_NV12, MEDIA_FORMAT_NV12, "Not support" },
+ { MM_UTIL_COLOR_UYVY, MEDIA_FORMAT_UYVY, "MEDIA_FORMAT_UYVY" },
+ { MM_UTIL_COLOR_YUYV, MEDIA_FORMAT_YUYV, "MEDIA_FORMAT_YUYV" },
+ { MM_UTIL_COLOR_RGB16, MEDIA_FORMAT_RGB565, "MEDIA_FORMAT_RGB565" },
+ { MM_UTIL_COLOR_RGB24, MEDIA_FORMAT_RGB888, "MEDIA_FORMAT_RGB888" },
+ { MM_UTIL_COLOR_ARGB, MEDIA_FORMAT_ARGB, "MEDIA_FORMAT_ARGB" },
+ { MM_UTIL_COLOR_BGRA, MEDIA_FORMAT_BGRA, "MEDIA_FORMAT_BGRA" },
+ { MM_UTIL_COLOR_RGBA, MEDIA_FORMAT_RGBA, "MEDIA_FORMAT_RGBA" },
+ { MM_UTIL_COLOR_BGRX, -1, "Not support" },
+ { MM_UTIL_COLOR_NV12_TILED, MEDIA_FORMAT_NV12T, "MEDIA_FORMAT_NV12T" },
+ { MM_UTIL_COLOR_NV16, MEDIA_FORMAT_NV16, "MEDIA_FORMAT_NV16" },
+ { MM_UTIL_COLOR_NV61, -1, "Not support" }
+};
+
static int _convert_colorspace_tbl[] = {
MM_UTIL_COLOR_YUV420, /* IMAGE_UTIL_COLORSPACE_YUV420 */
MM_UTIL_COLOR_YUV422, /* IMAGE_UTIL_COLORSPACE_YUV422 */
_NOT_SUPPORTED_COLORSPACE, /* IMAGE_UTIL_COLORSPACE_NV61 */
};
-unsigned int get_number_of_colorspace(void)
+unsigned int _get_number_of_colorspace(void)
{
return (unsigned int)(sizeof(_convert_colorspace_tbl)/sizeof(int));
}
-gboolean is_valid_colorspace(image_util_colorspace_e colorspace)
+gboolean _is_valid_colorspace(image_util_colorspace_e colorspace)
{
if ((colorspace < IMAGE_UTIL_COLORSPACE_YV12) || (colorspace >= NUM_OF_COLORSPACE))
return FALSE;
return TRUE;
}
-gboolean is_supported_colorspace(image_util_colorspace_e colorspace, image_util_type_e type)
+gboolean _is_supported_colorspace(image_util_colorspace_e colorspace, image_util_type_e type)
{
switch (type) {
case IMAGE_UTIL_JPEG:
return TRUE;
}
-int convert_type_of_colorspace(const image_util_colorspace_e colorspace)
+int _convert_type_of_colorspace(const image_util_colorspace_e colorspace)
{
- if (is_valid_colorspace(colorspace) == FALSE)
+ if (!_is_valid_colorspace(colorspace))
return _NOT_SUPPORTED_COLORSPACE;
return _convert_colorspace_tbl[colorspace];
}
-int convert_type_of_colorspace_with_image_type(const image_util_colorspace_e colorspace, const image_util_type_e type)
+int _convert_type_of_colorspace_with_image_type(const image_util_colorspace_e colorspace, const image_util_type_e type)
{
int new_colorspace = _NOT_SUPPORTED_COLORSPACE;
- if (is_valid_colorspace(colorspace) == FALSE)
+ if (!_is_valid_colorspace(colorspace))
return _NOT_SUPPORTED_COLORSPACE;
- if (is_supported_colorspace(colorspace, type) == FALSE)
+ if (!_is_supported_colorspace(colorspace, type))
return _NOT_SUPPORTED_COLORSPACE;
switch (type) {
return IMAGE_UTIL_ERROR_INVALID_OPERATION;
}
+
+static media_format_mimetype_e __image_format_to_mimetype(mm_util_color_format_e format)
+{
+ unsigned int i = 0;
+
+ for (i = 0; i < MM_UTIL_COLOR_NUM; i++) {
+ if (image_format_mimetype_table[i].image_format == format) {
+ image_util_debug("imgp fmt: %d mimetype fmt: %s", format, image_format_mimetype_table[i].mimetype_name);
+ return image_format_mimetype_table[i].mimetype;
+ }
+ }
+
+ image_util_error("imgp fmt: %d", format);
+
+ return MEDIA_FORMAT_MAX;
+}
+
+static mm_util_color_format_e __mimetype_to_image_format(media_format_mimetype_e mimetype)
+{
+ unsigned int i = 0;
+
+ for (i = 0; i < MM_UTIL_COLOR_NUM; i++) {
+ if (image_format_mimetype_table[i].mimetype == mimetype) {
+ image_util_debug("mimetype: %s imgp fmt: %d", image_format_mimetype_table[i].mimetype_name, image_format_mimetype_table[i].image_format);
+ return image_format_mimetype_table[i].image_format;
+ }
+ }
+
+ image_util_error("mimetype: %s", image_format_mimetype_table[i].mimetype_name);
+
+ return MM_UTIL_COLOR_NUM;
+}
+
+static int __create_media_format(media_format_mimetype_e mimetype, unsigned int width, unsigned int height, media_format_h *format)
+{
+ int ret = MEDIA_FORMAT_ERROR_NONE;
+ media_format_h new_format = NULL;
+
+ image_util_retvm_if((!format) || (width == 0) || (height == 0), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
+
+ ret = media_format_create(&new_format);
+ image_util_retvm_if((ret != MEDIA_FORMAT_ERROR_NONE), IMAGE_UTIL_ERROR_INVALID_OPERATION, "media_format_make_writable failed (%d)", ret);
+
+ ret = media_format_set_video_mime(new_format, mimetype);
+ if (ret != MEDIA_FORMAT_ERROR_NONE) {
+ image_util_error("media_format_set_video_mime failed (%d)", ret);
+ goto ERROR;
+ }
+
+ ret = media_format_set_video_width(new_format, width);
+ if (ret != MEDIA_FORMAT_ERROR_NONE) {
+ image_util_error("media_format_set_video_width failed (%d)", ret);
+ goto ERROR;
+ }
+
+ ret = media_format_set_video_height(new_format, height);
+ if (ret != MEDIA_FORMAT_ERROR_NONE) {
+ image_util_error("media_format_set_video_height failed (%d)", ret);
+ goto ERROR;
+ }
+
+ *format = new_format;
+
+ return IMAGE_UTIL_ERROR_NONE;
+
+ERROR:
+ media_format_unref(new_format);
+
+ return IMAGE_UTIL_ERROR_INVALID_OPERATION;
+}
+
+static int __create_media_packet(media_format_h fmt, unsigned char *buffer, size_t buffer_size, media_packet_h *packet)
+{
+ int ret = MEDIA_FORMAT_ERROR_NONE;
+ media_packet_h new_packet = NULL;
+ unsigned int i = 0;
+ uint32_t plane_num = 0;
+ int stride_width = 0, stride_height = 0;
+ void *plane_ptr = NULL;
+ size_t plane_size = 0;
+ size_t buffer_offset = 0;
+ size_t memcpy_size = 0;
+
+ image_util_retvm_if(!fmt, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid fmt");
+ image_util_retvm_if(!packet, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid packet");
+ image_util_retvm_if(!buffer, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid buffer");
+ image_util_retvm_if(buffer_size == 0, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid buffer_size");
+
+ ret = media_packet_create_alloc(fmt, NULL, NULL, &new_packet);
+ image_util_retvm_if((ret != MEDIA_PACKET_ERROR_NONE), IMAGE_UTIL_ERROR_INVALID_OPERATION, "media_packet_create_alloc failed (%d)", ret);
+
+ ret = media_packet_get_number_of_video_planes(new_packet, &plane_num);
+ if (ret != MEDIA_PACKET_ERROR_NONE) {
+ image_util_error("media_packet_get_number_of_video_plances failed (%d)", ret);
+ goto ERROR;
+ }
+
+ image_util_debug("plane_num: %u", plane_num);
+
+ for (i = 0; i < plane_num; i++) {
+ ret = media_packet_get_video_stride_width(new_packet, i, &stride_width);
+ if (ret != MEDIA_PACKET_ERROR_NONE) {
+ image_util_error("media_packet_get_video_stride_width failed (%d)", ret);
+ goto ERROR;
+ }
+
+ ret = media_packet_get_video_stride_height(new_packet, i, &stride_height);
+ if (ret != MEDIA_PACKET_ERROR_NONE) {
+ image_util_error("media_packet_get_video_stride_height failed (%d)", ret);
+ goto ERROR;
+ }
+
+ plane_size = stride_width * stride_height;
+
+ ret = media_packet_get_video_plane_data_ptr(new_packet, i, &plane_ptr);
+ if (ret != MEDIA_PACKET_ERROR_NONE) {
+ image_util_error("media_packet_get_video_plane_data_ptr failed (%d)", ret);
+ goto ERROR;
+ }
+
+ image_util_debug("stride_width: %d, stride_height: %d, plane_ptr: %p, plane_size: %zu",
+ stride_width, stride_height, plane_ptr,plane_size);
+
+ if (buffer_offset + plane_size > buffer_size)
+ memcpy_size = buffer_size - buffer_offset;
+ else
+ memcpy_size = plane_size;
+
+ memcpy(plane_ptr, buffer + buffer_offset, memcpy_size);
+ buffer_offset += memcpy_size;
+ }
+
+ image_util_debug("Success - media_packet is created (%p)", new_packet);
+
+ *packet = new_packet;
+
+ return IMAGE_UTIL_ERROR_NONE;
+
+ERROR:
+ media_packet_destroy(new_packet);
+
+ return IMAGE_UTIL_ERROR_INVALID_OPERATION;
+}
+
+int _image_util_image_to_packet(image_util_image_h image, media_packet_h *packet)
+{
+ int ret = IMAGE_UTIL_ERROR_NONE;
+ mm_util_color_format_e format = 0;
+ unsigned int width = 0, height = 0;
+ unsigned char *buffer = NULL;
+ size_t buffer_size = 0;
+ media_format_h fmt = NULL;
+
+ image_util_fenter();
+
+ image_util_retvm_if(!image, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid image");
+ image_util_retvm_if(!packet, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid packet");
+
+ ret = mm_image_get_image(image, &width, &height, &format, &buffer, &buffer_size);
+ image_util_retvm_if((ret != MM_UTIL_ERROR_NONE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "mm_image_get_image failed");
+
+ image_util_debug("Buffer: %p buffer_size: %zu", buffer, buffer_size);
+
+ ret = __create_media_format(__image_format_to_mimetype(format), width, height, &fmt);
+ if (ret != IMAGE_UTIL_ERROR_NONE) {
+ image_util_error("__create_media_format failed (%d)", ret);
+ IMAGE_UTIL_SAFE_FREE(buffer);
+ return IMAGE_UTIL_ERROR_INVALID_OPERATION;
+ }
+
+ ret = __create_media_packet(fmt, buffer, buffer_size, packet);
+ if (ret != IMAGE_UTIL_ERROR_NONE)
+ image_util_error("__create_media_packet failed (%d)", ret);
+
+ media_format_unref(fmt);
+ IMAGE_UTIL_SAFE_FREE(buffer);
+
+ image_util_fleave();
+
+ return ret;
+}
+
+int _image_util_packet_to_image(media_packet_h packet, image_util_image_h *image)
+{
+ int ret = IMAGE_UTIL_ERROR_NONE;
+ media_format_mimetype_e mimetype = 0;
+ int width = 0, height = 0;
+ media_format_h fmt = NULL;
+ unsigned int i = 0;
+ uint32_t plane_num = 0;
+ int stride_width = 0, stride_height = 0;
+ void *plane_ptr = NULL;
+ size_t plane_size = 0;
+ void *ptr = NULL;
+ size_t size = 0;
+
+ image_util_fenter();
+
+ image_util_retvm_if(!packet, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid packet");
+ image_util_retvm_if(!image, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid image");
+
+ ret = media_packet_get_format(packet, &fmt);
+ image_util_retvm_if((ret != MEDIA_PACKET_ERROR_NONE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "media_packet_get_format failed (%d)", ret);
+
+ ret = media_format_get_video_info(fmt, &mimetype, &width, &height, NULL, NULL);
+ if (ret != MEDIA_FORMAT_ERROR_NONE) {
+ image_util_error("media_packet_get_format failed (%d)", ret);
+ media_format_unref(fmt);
+ return IMAGE_UTIL_ERROR_INVALID_PARAMETER;
+ }
+ media_format_unref(fmt);
+
+ ret = media_packet_get_number_of_video_planes(packet, &plane_num);
+ if (ret != MEDIA_PACKET_ERROR_NONE) {
+ image_util_error("media_packet_get_number_of_video_plances failed (%d)", ret);
+ goto ERROR;
+ }
+
+ image_util_debug("plane_num: %u", plane_num);
+
+ for (i = 0; i < plane_num; i++) {
+ ret = media_packet_get_video_stride_width(packet, i, &stride_width);
+ if (ret != MEDIA_PACKET_ERROR_NONE) {
+ image_util_error("media_packet_get_video_stride_width failed (%d)", ret);
+ goto ERROR;
+ }
+
+ ret = media_packet_get_video_stride_height(packet, i, &stride_height);
+ if (ret != MEDIA_PACKET_ERROR_NONE) {
+ image_util_error("media_packet_get_video_stride_height failed (%d)", ret);
+ goto ERROR;
+ }
+
+ plane_size = stride_width * stride_height;
+
+ ret = media_packet_get_video_plane_data_ptr(packet, i, &plane_ptr);
+ if (ret != MEDIA_PACKET_ERROR_NONE) {
+ image_util_error("media_packet_get_video_plane_data_ptr failed (%d)", ret);
+ goto ERROR;
+ }
+
+ image_util_debug("stride_width: %d, stride_height: %d, plane_ptr: %p, plane_size: %zu",
+ stride_width, stride_height, plane_ptr,plane_size);
+
+ ptr = realloc(ptr, size + plane_size);
+ image_util_retvm_if(!ptr, IMAGE_UTIL_ERROR_OUT_OF_MEMORY, "Memory allocation failed");
+
+ memcpy(ptr + size, plane_ptr, plane_size);
+ size += plane_size;
+ }
+
+ image_util_debug("[Fotmat: %u] W x H : %d x %d buffer(size) : %p(%zu)", mimetype, width, height, ptr, size);
+
+ ret = mm_image_create_image(width, height, __mimetype_to_image_format(mimetype), ptr, size, image);
+ IMAGE_UTIL_SAFE_FREE(ptr);
+ image_util_retvm_if((ret != IMAGE_UTIL_ERROR_NONE), ret, "mm_image_create_image failed (%d)", ret);
+
+ image_util_fleave();
+
+ return IMAGE_UTIL_ERROR_NONE;
+
+ERROR:
+ IMAGE_UTIL_SAFE_FREE(ptr);
+ return IMAGE_UTIL_ERROR_INVALID_OPERATION;
+}
#include <string.h>
#include <tzplatform_config.h>
#include <image_util.h>
+#include <image_util_private.h>
/* logs for testsuite */
-#define VERSION 0.1
-#define DEBUG_QUEUE 0
-#define DUMP_RAW_IMAGE 0
+#define VERSION "0.1.1 of 16 Aug 2019"
+/* prints log of menu-queue for testsuite */
+#define DEBUG_QUEUE 0 /* 0:disable, 1:enable */
+/* saves the intermediate image to process name("transform" or "decode"), Not supported for encoding */
+#define DUMP_RAW_IMAGE 0 /* 0:disable, 1:enable */
/* commons for testsuite */
#define MAX_STRING_LEN PATH_MAX
-#define MAX_AGIF_CNT 100
+#define MAX_AGIF_CNT 100 /* supports MAX_AGIF_CNT agif frames */
#define IMAGE_UTIL_COLOR_NUM IMAGE_UTIL_COLORSPACE_NV61 + 1
#define SAFE_FREE(src) { if (src) {free(src); src = NULL; } }
} test_size_s;
typedef struct {
- /* for input */
+ /* for input path or dir */
char *path;
+ /* for buffer test */
gboolean has_buffer;
unsigned char *buffer;
size_t buffer_size;
+ /* for raw image test */
gboolean is_raw;
test_size_s size;
image_util_colorspace_e color;
- /* for result of test or pass through */
+ /* intermediate or result image for test */
image_util_image_h image;
- /* for a-gif */
+ /* image count and handles for a-gif */
unsigned int image_cnt;
image_util_image_h images[MAX_AGIF_CNT];
} test_complex_data_s;
-typedef struct {
- test_complex_data_s *cdata;
-} test_queue_data_s;
-
+/* for decode parameters */
typedef struct {
image_util_colorspace_e color;
image_util_scale_e downscale;
} test_decode_params_s;
+/* for encode parameters */
typedef struct {
image_util_type_e type;
int quality;
gboolean use_buffer;
} test_encode_params_s;
+/* for encode a-gif parameters */
typedef struct {
int delay;
gboolean use_buffer;
} test_encode_agif_params_s;
+/* for transform parameters */
typedef struct {
gboolean has_convert_color;
image_util_colorspace_e convert_color;
image_util_rotation_e rotation;
} test_transform_params_s;
+/* for current menu to display */
static test_menu_state_e g_current_menu = MAIN_MENU;
+/* for previous menu to go back */
static test_menu_state_e g_previous_menu = MAIN_MENU;
+/* for input data to process */
static test_complex_data_s g_input_data;
/* decode */
/* encode */
static test_encode_params_s g_encode_params;
static test_complex_data_s g_encode_result;
-
/* encode a-gif */
static test_encode_agif_params_s g_encode_agif_params;
static test_complex_data_s g_encode_agif_result;
static test_transform_params_s g_transform_params;
static test_complex_data_s g_transform_result;
+/* for menu queue */
static GQueue *g_queue_menu = NULL;
+/* for images queue to encode a-gif */
static GQueue *g_queue_agif_images = NULL;
+/* for input data queue */
static GQueue *g_queue_data = NULL;
static GMainLoop *g_mainloop = NULL;
unsigned int idx = 0;
g_print("\n");
g_print("====================================================\n");
- g_print(" image-util Core-API test: Set raw data menu v%2.1f\n", VERSION);
+ g_print(" image-util Core-API test: Set raw data menu v%s\n", VERSION);
g_print("----------------------------------------------------\n");
for (idx = 0; idx < RAW_IMG_MENU_MAX; idx++)
g_print("%u. %s\n", g_disp_raw_img_menu[idx].e, g_disp_raw_img_menu[idx].t);
unsigned int idx = 0;
g_print("\n");
g_print("====================================================\n");
- g_print(" image-util Core-API test: Decode menu v%2.1f\n", VERSION);
+ g_print(" image-util Core-API test: Decode menu v%s\n", VERSION);
g_print("----------------------------------------------------\n");
for (idx = 0; idx < DECODE_MENU_MAX; idx++)
g_print("%u. %s\n", g_disp_decode_menu[idx].e, g_disp_decode_menu[idx].t);
unsigned int idx = 0;
g_print("\n");
g_print("====================================================\n");
- g_print(" image-util Core-API test: Encode menu v%2.1f\n", VERSION);
+ g_print(" image-util Core-API test: Encode menu v%s\n", VERSION);
g_print("----------------------------------------------------\n");
for (idx = 0; idx < ENCODE_MENU_MAX; idx++)
g_print("%u. %s\n", g_disp_encode_menu[idx].e, g_disp_encode_menu[idx].t);
unsigned int idx = 0;
g_print("\n");
g_print("====================================================\n");
- g_print(" image-util Core-API test: Encode A-GIF menu v%2.1f\n", VERSION);
+ g_print(" image-util Core-API test: Encode A-GIF menu v%s\n", VERSION);
g_print("----------------------------------------------------\n");
for (idx = 0; idx < ENCODE_AGIF_MENU_MAX; idx++)
g_print("%u. %s\n", g_disp_encode_agif_menu[idx].e, g_disp_encode_agif_menu[idx].t);
unsigned int idx = 0;
g_print("\n");
g_print("====================================================\n");
- g_print(" image-util Core-API test: Transform menu v%2.1f\n", VERSION);
+ g_print(" image-util Core-API test: Transform menu v%s\n", VERSION);
g_print("----------------------------------------------------\n");
for (idx = 0; idx < TRANSFORM_MENU_MAX; idx++)
g_print("%u. %s\n", g_disp_transform_menu[idx].e, g_disp_transform_menu[idx].t);
unsigned int idx = 0;
g_print("\n");
g_print("====================================================\n");
- g_print(" image-util Core-API test: Main menu v%2.1f\n", VERSION);
+ g_print(" image-util Core-API test: Main menu v%s\n", VERSION);
g_print("----------------------------------------------------\n");
for (idx = 0; idx < MAIN_MENU_MAX; idx++)
g_print("%u. %s\n", g_disp_main_menu[idx].e, g_disp_main_menu[idx].t);
case SET_COLOR_MENU:
case SET_RAW_COLOR_MENU:
case SET_CONVERT_MENU:
- __display_set("colorspace", "10");
+ __display_set("colorspace", "i420:2, rgb:7, argb:8, rgba:10");
break;
case SET_COMPRESSION_MENU:
- __display_set("comprssion", "0~9");
+ __display_set("comprssion", "0(NoC/HighQ)~9(MaxC/LowQ)");
break;
case SET_CROP_MENU:
- __display_set("crop", "(sx)x(sy)x(w)x(h), 0x0x1920x1080");
+ __display_set("crop", "(sx)x(sy)x(w)x(h) 0x0x1920x1080");
break;
case SET_DELAY_MENU:
__display_set("delay", "20~");
break;
case SET_DOWNSCALE_MENU:
- __display_set("downscale", "0~3");
+ __display_set("downscale", "0(1/1)~3(1/8)");
break;
case SET_QUALITY_MENU:
- __display_set("quality", "1~100");
+ __display_set("quality", "1(LowQ)~100(HighQ)");
break;
case SET_RESIZE_MENU:
case SET_SIZE_MENU:
__display_set("size", "1920x1080");
break;
case SET_ROTATE_MENU:
- __display_set("rotation", "0=none, 1=90, 2=180, 3=270");
+ __display_set("rotation", "0:none, 1:90, 2:180, 3:270");
break;
case SET_TYPE_MENU:
__display_set("image_type", "0:jpeg, 1:png, 2:gif, 3:bmp");
g_queue_free_full(g_queue_agif_images, __queue_free_func);
+ /* read files in dir */
while ((dp = readdir(fd)) != NULL) {
if (strlen(dp->d_name) == 0)
continue;
/* sort files */
g_queue_sort(g_queue_agif_images, __sort_compare, NULL);
+ /* decode files of dir */
if (!__decode_file_in_dir()) {
g_print("Fail to decode file from dir! %s\n", path);
return FALSE;
if (data == NULL || strlen(data) == 0)
return FALSE;
- params = g_strsplit(data, "x", 0);
+ params = g_strsplit(data, ",", 0);
if (params == NULL || params[0] == NULL || params[1] == NULL || params[2] == NULL || params[3] == NULL)
return FALSE;
*path = g_strdup_printf("%s.%s", base, ext);
}
-
-typedef struct {
- image_util_colorspace_e image_format;
- media_format_mimetype_e mimetype;
- const char *mimetype_name;
-} image_format_mimetype_pair_s;
-
-static const image_format_mimetype_pair_s image_format_mimetype_table[IMAGE_UTIL_COLOR_NUM] = {
- { IMAGE_UTIL_COLORSPACE_YV12, MEDIA_FORMAT_YV12, "MEDIA_FORMAT_YV12" },
- { IMAGE_UTIL_COLORSPACE_YUV422, MEDIA_FORMAT_422P, "MEDIA_FORMAT_422P" },
- { IMAGE_UTIL_COLORSPACE_I420, MEDIA_FORMAT_I420, "MEDIA_FORMAT_I420" },
- { IMAGE_UTIL_COLORSPACE_NV12, MEDIA_FORMAT_NV12, "Not support" },
- { IMAGE_UTIL_COLORSPACE_UYVY, MEDIA_FORMAT_UYVY, "MEDIA_FORMAT_UYVY" },
- { IMAGE_UTIL_COLORSPACE_YUYV, MEDIA_FORMAT_YUYV, "MEDIA_FORMAT_YUYV" },
- { IMAGE_UTIL_COLORSPACE_RGB565, MEDIA_FORMAT_RGB565, "MEDIA_FORMAT_RGB565" },
- { IMAGE_UTIL_COLORSPACE_RGB888, MEDIA_FORMAT_RGB888, "MEDIA_FORMAT_RGB888" },
- { IMAGE_UTIL_COLORSPACE_ARGB8888, MEDIA_FORMAT_ARGB, "MEDIA_FORMAT_ARGB" },
- { IMAGE_UTIL_COLORSPACE_BGRA8888, MEDIA_FORMAT_BGRA, "MEDIA_FORMAT_BGRA" },
- { IMAGE_UTIL_COLORSPACE_RGBA8888, MEDIA_FORMAT_RGBA, "MEDIA_FORMAT_RGBA" },
- { IMAGE_UTIL_COLORSPACE_BGRX8888, -1, "Not support" },
- { IMAGE_UTIL_COLORSPACE_NV21, MEDIA_FORMAT_NV12T, "MEDIA_FORMAT_NV12T" },
- { IMAGE_UTIL_COLORSPACE_NV16, MEDIA_FORMAT_NV16, "MEDIA_FORMAT_NV16" },
- { IMAGE_UTIL_COLORSPACE_NV61, -1, "Not support" }
-};
-
-static media_format_mimetype_e __image_format_to_mimetype(image_util_colorspace_e format)
-{
- unsigned int i = 0;
- media_format_mimetype_e mimetype = -1;
-
- for (i = 0; i < IMAGE_UTIL_COLOR_NUM; i++) {
- if (image_format_mimetype_table[i].image_format == format) {
- mimetype = image_format_mimetype_table[i].mimetype;
- break;
- }
- }
-
- g_print("\t\timgp fmt: %d mimetype fmt: %s", format, image_format_mimetype_table[i].mimetype_name);
-
- return mimetype;
-}
-
-static image_util_colorspace_e __mimetype_to_image_format(media_format_mimetype_e mimetype)
-{
- unsigned int i = 0;
- image_util_colorspace_e format = -1;
-
- for (i = 0; i < IMAGE_UTIL_COLOR_NUM; i++) {
- if (image_format_mimetype_table[i].mimetype == mimetype) {
- format = image_format_mimetype_table[i].image_format;
- break;
- }
- }
-
- g_print("\t\tmimetype: %s imgp fmt: %d", image_format_mimetype_table[i].mimetype_name, format);
-
- return format;
-}
-
-static int __create_media_format(media_format_mimetype_e mimetype, unsigned int width, unsigned int height, media_format_h *new_fmt)
-{
- int err = MEDIA_FORMAT_ERROR_NONE;
-
- RETVM_IF((new_fmt == NULL) || (width == 0) || (height == 0), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid parameter");
-
- err = media_format_create(new_fmt);
- RETVM_IF((err != MEDIA_FORMAT_ERROR_NONE), IMAGE_UTIL_ERROR_INVALID_OPERATION, "media_format_make_writable failed (%d)", err);
-
- err = media_format_set_video_mime(*new_fmt, mimetype);
- if (err != MEDIA_FORMAT_ERROR_NONE) {
- media_format_unref(*new_fmt);
- g_print("\tmedia_format_set_video_mime failed (%d)\n", err);
- return IMAGE_UTIL_ERROR_INVALID_OPERATION;
- }
-
- err = media_format_set_video_width(*new_fmt, width);
- if (err != MEDIA_FORMAT_ERROR_NONE) {
- media_format_unref(*new_fmt);
- g_print("\tmedia_format_set_video_width failed (%d)\n", err);
- return IMAGE_UTIL_ERROR_INVALID_OPERATION;
- }
-
- err = media_format_set_video_height(*new_fmt, height);
- if (err != MEDIA_FORMAT_ERROR_NONE) {
- media_format_unref(*new_fmt);
- g_print("\tmedia_format_set_video_height failed (%d)\n", err);
- return IMAGE_UTIL_ERROR_INVALID_OPERATION;
- }
-
- return IMAGE_UTIL_ERROR_NONE;
-}
-
-static int __create_media_packet(media_format_h fmt, unsigned char *buffer, size_t buffer_size, media_packet_h *packet)
-{
- int ret = MEDIA_FORMAT_ERROR_NONE;
- unsigned int i = 0;
- uint32_t plane_num = 0;
- int stride_width = 0, stride_height = 0;
- void *plane_ptr = NULL;
- size_t plane_size = 0;
- size_t buffer_offset = 0;
- size_t memcpy_size = 0;
-
- RETVM_IF(!fmt, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid fmt");
- RETVM_IF(!packet, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid new_pkt");
- RETVM_IF(!buffer, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid pkt_ptr");
- RETVM_IF(buffer_size == 0, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid pkt_size");
-
- ret = media_packet_create_alloc(fmt, NULL, NULL, packet);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- g_print("\tmedia_packet_create_from_external_memory failed (%d)\n", ret);
- return IMAGE_UTIL_ERROR_INVALID_OPERATION;
- }
-
- ret = media_packet_get_number_of_video_planes(*packet, &plane_num);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- g_print("\tmedia_packet_get_number_of_video_plances failed (%d)\n", ret);
- ret = IMAGE_UTIL_ERROR_INVALID_OPERATION;
- goto ERROR;
- }
-
- g_print("\tplane_num: %u\n", plane_num);
-
- for (i = 0; i < plane_num; i++) {
- ret = media_packet_get_video_stride_width(*packet, i, &stride_width);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- g_print("\tmedia_packet_get_video_stride_width failed (%d)\n", ret);
- ret = IMAGE_UTIL_ERROR_INVALID_OPERATION;
- goto ERROR;
- }
-
- ret = media_packet_get_video_stride_height(*packet, i, &stride_height);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- g_print("\tmedia_packet_get_video_stride_height failed (%d)\n", ret);
- ret = IMAGE_UTIL_ERROR_INVALID_OPERATION;
- goto ERROR;
- }
-
- plane_size = stride_width * stride_height;
-
- ret = media_packet_get_video_plane_data_ptr(*packet, i, &plane_ptr);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- g_print("\tmedia_packet_get_video_plane_data_ptr failed (%d)\n", ret);
- ret = IMAGE_UTIL_ERROR_INVALID_OPERATION;
- goto ERROR;
- }
-
- g_print("\tstride_width: %d, stride_height: %d, plane_ptr: %p, plane_size: %zu\n",
- stride_width, stride_height, plane_ptr,plane_size);
-
- if (buffer_offset + plane_size > buffer_size)
- memcpy_size = buffer_size - buffer_offset;
- else
- memcpy_size = plane_size;
-
- memcpy(plane_ptr, buffer + buffer_offset, memcpy_size);
- buffer_offset += memcpy_size;
- }
-
- g_print("\tSuccess - media_packet is created (%p)\n", *packet);
-
- return IMAGE_UTIL_ERROR_NONE;
-
-ERROR:
- if (*packet != NULL)
- media_packet_destroy(*packet);
- *packet = NULL;
-
- return ret;
-}
-
-static int __convert_image_to_packet(image_util_image_h image, media_packet_h *packet)
-{
- int ret = IMAGE_UTIL_ERROR_NONE;
- image_util_colorspace_e color = 0;
- unsigned int width = 0, height = 0;
- unsigned char *buffer = NULL;
- size_t buffer_size = 0;
- media_format_h fmt = NULL;
-
- RETVM_IF(!image, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid image");
- RETVM_IF(!packet, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid packet");
-
- ret = image_util_get_image(image, &width, &height, &color, &buffer, &buffer_size);
- RETVM_IF((ret != IMAGE_UTIL_ERROR_NONE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "mm_image_get_image failed");
-
- g_print("\tBuffer: %p buffer_size: %zu\n", buffer, buffer_size);
-
- ret = __create_media_format(__image_format_to_mimetype(color), width, height, &fmt);
- if (ret != IMAGE_UTIL_ERROR_NONE) {
- g_print("\t__create_media_format failed (%d)\n", ret);
- SAFE_FREE(buffer);
- return IMAGE_UTIL_ERROR_INVALID_OPERATION;
- }
-
- ret = __create_media_packet(fmt, buffer, buffer_size, packet);
- if (ret != MEDIA_PACKET_ERROR_NONE)
- g_print("\t__create_media_packet failed (%d)\n", ret);
-
- media_format_unref(fmt);
- SAFE_FREE(buffer);
-
- return ret;
-}
-
-static int __convert_packet_to_image(media_packet_h packet, image_util_image_h *image)
-{
- int ret = IMAGE_UTIL_ERROR_NONE;
- media_format_mimetype_e mimetype = 0;
- int width = 0, height = 0;
- media_format_h fmt = NULL;
- unsigned int i = 0;
- uint32_t plane_num = 0;
- int stride_width = 0, stride_height = 0;
- void *plane_ptr = NULL;
- size_t plane_size = 0;
- void *ptr = NULL;
- size_t size = 0;
-
- RETVM_IF(!packet, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid packet");
- RETVM_IF(!image, IMAGE_UTIL_ERROR_INVALID_PARAMETER, "Invalid image");
-
- ret = media_packet_get_format(packet, &fmt);
- RETVM_IF((ret != MEDIA_PACKET_ERROR_NONE), IMAGE_UTIL_ERROR_INVALID_PARAMETER, "media_packet_get_format failed (%d)", ret);
-
- ret = media_format_get_video_info(fmt, &mimetype, &width, &height, NULL, NULL);
- if (ret != MEDIA_FORMAT_ERROR_NONE) {
- g_print("\tmedia_packet_get_format failed (%d)\n", ret);
- media_format_unref(fmt);
- return IMAGE_UTIL_ERROR_INVALID_PARAMETER;
- }
- media_format_unref(fmt);
-
- ret = media_packet_get_number_of_video_planes(packet, &plane_num);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- g_print("\tmedia_packet_get_number_of_video_plances failed (%d)\n", ret);
- goto ERROR;
- }
-
- g_print("\tplane_num: %u", plane_num);
-
- for (i = 0; i < plane_num; i++) {
- ret = media_packet_get_video_stride_width(packet, i, &stride_width);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- g_print("\tmedia_packet_get_number_of_video_plances failed (%d)\n", ret);
- goto ERROR;
- }
-
- ret = media_packet_get_video_stride_height(packet, i, &stride_height);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- g_print("\tmedia_packet_get_number_of_video_plances failed (%d)\n", ret);
- goto ERROR;
- }
-
- plane_size = stride_width * stride_height;
-
- ret = media_packet_get_video_plane_data_ptr(packet, i, &plane_ptr);
- if (ret != MEDIA_PACKET_ERROR_NONE) {
- g_print("\tmedia_packet_get_number_of_video_plances failed (%d)\n", ret);
- goto ERROR;
- }
-
- g_print("\tstride_width: %d, stride_height: %d, plane_ptr: %p, plane_size: %zu\n",
- stride_width, stride_height, plane_ptr,plane_size);
-
- ptr = realloc(ptr, size + plane_size);
- RETVM_IF(!ptr, IMAGE_UTIL_ERROR_OUT_OF_MEMORY, "Memory allocation failed");
-
- memcpy(ptr + size, plane_ptr, plane_size);
- size += plane_size;
- }
-
- g_print("\t[Fotmat: %u] W x H : %d x %d, buffer(size) : %p(%zu)\n", mimetype, width, height, ptr, size);
-
- ret = image_util_create_image(width, height, __mimetype_to_image_format(mimetype), ptr, size, image);
- SAFE_FREE(ptr);
- RETVM_IF((ret != IMAGE_UTIL_ERROR_NONE), ret, "mm_image_create_image failed (%d)", ret);
-
- g_print("\t__image_util_packet_to_image succeed\n");
-
- return IMAGE_UTIL_ERROR_NONE;
-
-ERROR:
- SAFE_FREE(ptr);
- return IMAGE_UTIL_ERROR_INVALID_OPERATION;
-}
-
/* internal functions for testsuite */
switch(menu) {
case TRANSFORM_RUN:
- ret = __convert_image_to_packet(input->image, &mpacket);
+ ret = _image_util_image_to_packet(input->image, &mpacket);
if (ret != IMAGE_UTIL_ERROR_NONE) {
- g_print("__convert_image_to_packet failed %d\n", ret);
+ g_print("_image_util_image_to_packet failed %d\n", ret);
break;
}
}
__wait();
- ret = __convert_packet_to_image(res_mpacket, &result->image);
+ ret = _image_util_packet_to_image(res_mpacket, &result->image);
if (ret != IMAGE_UTIL_ERROR_NONE) {
- g_print("__convert_packet_to_image failed %d\n", ret);
+ g_print("_image_util_packet_to_image failed %d\n", ret);
break;
}
break;
g_print("[menu move] %u -> %u\n", g_current_menu, new_menu);
#endif
+ /* push current menu into queue */
data->menu_state = g_current_menu;
g_queue_push_tail(g_queue_menu, data);
g_previous_menu = g_current_menu;
+ /* go to new menu */
g_current_menu = new_menu;
}
test_queue_menu_s *data = NULL;
if (g_queue_is_empty(g_queue_menu)) {
+ g_print("empty previous menu!\n\n");
return;
}
+ /* pop previous menu from queue */
data = g_queue_pop_tail(g_queue_menu);
if (!data) {
g_print("wrong menu data!\n\n");
g_previous_menu = g_current_menu;
+ /* go to previous menu */
g_current_menu = data->menu_state;
SAFE_FREE(data);
case SET_BUFFER_MENU:
if (g_ascii_strcasecmp(cmd, "y") == 0) {
SAFE_FREE(g_input_data.buffer);
- if (__read_file(g_input_data.path, (void **)&g_input_data.buffer, &g_input_data.buffer_size))
+ if (__read_file(g_input_data.path, (void **)&g_input_data.buffer, &g_input_data.buffer_size)) {
g_input_data.has_buffer = TRUE;
+ g_print("Success to read file(%s), read_size(%zu)\n", g_input_data.path, g_input_data.buffer_size);
+ }
}
break;
case SET_TO_BUFFER_MENU:
case SET_PATH_MENU:
if (!__set_input_path(cmd)) {
g_print("[Warn] Fail to set input path! %s\n", cmd);
- goto ERROR;
+ __menu_back();
+ break;
}
__menu_back();
if (IS_RAW_FILE(g_input_data.path)) {
__display_menu(g_current_menu);
return;
-
-ERROR:
- __menu_back();
- __display_menu(g_current_menu);
- return;
}
/* interprete menu */
static void _display_help(const char *cmd)
{
g_print("====================================================\n");
- g_print("[image-util CAPI test: v%2.1f\n", VERSION);
+ g_print("[image-util CAPI test: v%s\n", VERSION);
g_print("%s {file_path} {test_mode} [for jpg/png/gif/bmp]\n", cmd);
g_print("%s {directory} {test_mode} [for a-gif]\n", cmd);
g_print("{test_mode} 0:auto, 1:decode, 2:encode, 3:a-gif, 4:transform\n");