#include <mm_util_imgcv.h>
#include <mm_util_png.h>
#include <mm_util_gif.h>
+#include <mm_util_bmp.h>
#include <image_util.h>
#include <image_util_private.h>
#include <stdio.h>
-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,
}
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;
}
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;
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;
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;
}
}
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;
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;
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;
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;
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;
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;
}
}
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;
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;