+/*
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tzplatform_config.h>
+
+#include "libmm_imgp_unittest.h"
+#include "mm_util_jpeg.h"
+#include "mm_util_imgp.h"
+
+#define DECODE_FILE_PATH tzplatform_mkpath(TZ_SYS_BIN, "libmm-imgp-unittest.jpg")
+
+using ::testing::InitGoogleTest;
+using ::testing::Test;
+using ::testing::TestCase;
+
+class libmm_imgp_Test : public ::testing::Test {
+ protected:
+ void SetUp() {
+ std::cout << "SetUp()" << std::endl;
+ }
+
+ void TearDown() {
+ std::cout << "TearDown()" << std::endl;
+ }
+};
+
+TEST(libmm_imgp_Test, mm_util_convert_colorspace_p)
+{
+ int ret = MM_UTIL_ERROR_NONE;
+ mm_image_info_s decode_image = {0, 0, MM_UTIL_COLOR_ARGB, NULL, 0, 0};
+ unsigned char *data = NULL;
+ unsigned int width = 0;
+ unsigned int height = 0;
+ size_t size = 0;;
+
+ ret = mm_util_decode_from_jpeg_file(DECODE_FILE_PATH, MM_UTIL_COLOR_ARGB, MM_UTIL_JPEG_DECODE_DOWNSCALE_1_1, &decode_image);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_NONE);
+ EXPECT_TRUE(decode_image.data != NULL);
+
+ ret = mm_util_convert_colorspace((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, MM_UTIL_COLOR_RGB24, &data, &width, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_NONE);
+ EXPECT_TRUE(data != NULL);
+ EXPECT_EQ(width, 640);
+ EXPECT_EQ(height, 480);
+ EXPECT_NE(size, 0);
+
+ if (decode_image.data)
+ free(decode_image.data);
+ if (data)
+ free(data);
+}
+
+TEST(libmm_imgp_Test, mm_util_convert_colorspace_n)
+{
+ int ret = MM_UTIL_ERROR_NONE;
+ mm_image_info_s decode_image = {0, 0, MM_UTIL_COLOR_RGB24, NULL, 0, 0};
+ unsigned char *data = NULL;
+ unsigned int width = 0;
+ unsigned int height = 0;
+ size_t size = 0;;
+
+ ret = mm_util_decode_from_jpeg_file(DECODE_FILE_PATH, MM_UTIL_COLOR_ARGB, MM_UTIL_JPEG_DECODE_DOWNSCALE_1_1, &decode_image);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_NONE);
+ EXPECT_TRUE(decode_image.data != NULL);
+
+ ret = mm_util_convert_colorspace(NULL, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, MM_UTIL_COLOR_RGB24, &data, &width, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_convert_colorspace((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, MM_UTIL_COLOR_RGB24, NULL, &width, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_convert_colorspace((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, MM_UTIL_COLOR_RGB24, &data, NULL, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_convert_colorspace((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, MM_UTIL_COLOR_RGB24, &data, &width, NULL, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_convert_colorspace((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, MM_UTIL_COLOR_RGB24, &data, &width, &height, NULL);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ if (decode_image.data)
+ free(decode_image.data);
+}
+
+TEST(libmm_imgp_Test, mm_util_resize_image_p)
+{
+ int ret = MM_UTIL_ERROR_NONE;
+ mm_image_info_s decode_image = {0, 0, MM_UTIL_COLOR_ARGB, NULL, 0, 0};
+ unsigned char *data = NULL;
+ unsigned int width = 0;
+ unsigned int height = 0;
+ size_t size = 0;;
+
+ ret = mm_util_decode_from_jpeg_file(DECODE_FILE_PATH, MM_UTIL_COLOR_ARGB, MM_UTIL_JPEG_DECODE_DOWNSCALE_1_1, &decode_image);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_NONE);
+ EXPECT_TRUE(decode_image.data != NULL);
+
+ ret = mm_util_resize_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, 320, 240, &data, &width, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_NONE);
+ EXPECT_TRUE(data != NULL);
+ EXPECT_EQ(width, 320);
+ EXPECT_EQ(height, 240);
+ EXPECT_NE(size, 0);
+
+ if (decode_image.data)
+ free(decode_image.data);
+ if (data)
+ free(data);
+}
+
+TEST(libmm_imgp_Test, mm_util_resize_image_n)
+{
+ int ret = MM_UTIL_ERROR_NONE;
+ mm_image_info_s decode_image = {0, 0, MM_UTIL_COLOR_RGB24, NULL, 0, 0};
+ unsigned char *data = NULL;
+ unsigned int width = 0;
+ unsigned int height = 0;
+ size_t size = 0;;
+
+ ret = mm_util_decode_from_jpeg_file(DECODE_FILE_PATH, MM_UTIL_COLOR_ARGB, MM_UTIL_JPEG_DECODE_DOWNSCALE_1_1, &decode_image);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_NONE);
+ EXPECT_TRUE(decode_image.data != NULL);
+
+ ret = mm_util_resize_image(NULL, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, 320, 240, &data, &width, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_resize_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, 0, 240, &data, &width, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_resize_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, 320, 0, &data, &width, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_resize_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, 320, 240, NULL, &width, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_resize_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, 320, 240, &data, NULL, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_resize_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, 320, 240, &data, &width, NULL, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_resize_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, 320, 240, &data, &width, &height, NULL);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ if (decode_image.data)
+ free(decode_image.data);
+}
+
+TEST(libmm_imgp_Test, mm_util_rotate_image_p)
+{
+ int ret = MM_UTIL_ERROR_NONE;
+ mm_image_info_s decode_image = {0, 0, MM_UTIL_COLOR_ARGB, NULL, 0, 0};
+ unsigned char *data = NULL;
+ unsigned int width = 0;
+ unsigned int height = 0;
+ size_t size = 0;;
+
+ ret = mm_util_decode_from_jpeg_file(DECODE_FILE_PATH, MM_UTIL_COLOR_ARGB, MM_UTIL_JPEG_DECODE_DOWNSCALE_1_1, &decode_image);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_NONE);
+ EXPECT_TRUE(decode_image.data != NULL);
+
+ ret = mm_util_rotate_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, MM_UTIL_ROTATE_90, &data, &width, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_NONE);
+ EXPECT_TRUE(data != NULL);
+ EXPECT_EQ(width, 480);
+ EXPECT_EQ(height, 640);
+ EXPECT_NE(size, 0);
+
+ if (decode_image.data)
+ free(decode_image.data);
+ if (data)
+ free(data);
+}
+
+TEST(libmm_imgp_Test, mm_util_rotate_image_n)
+{
+ int ret = MM_UTIL_ERROR_NONE;
+ mm_image_info_s decode_image = {0, 0, MM_UTIL_COLOR_RGB24, NULL, 0, 0};
+ unsigned char *data = NULL;
+ unsigned int width = 0;
+ unsigned int height = 0;
+ size_t size = 0;;
+
+ ret = mm_util_decode_from_jpeg_file(DECODE_FILE_PATH, MM_UTIL_COLOR_ARGB, MM_UTIL_JPEG_DECODE_DOWNSCALE_1_1, &decode_image);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_NONE);
+ EXPECT_TRUE(decode_image.data != NULL);
+
+ ret = mm_util_rotate_image(NULL, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, MM_UTIL_ROTATE_90, &data, &width, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_rotate_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, MM_UTIL_ROTATE_90, NULL, &width, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_rotate_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, MM_UTIL_ROTATE_90, &data, NULL, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_rotate_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, MM_UTIL_ROTATE_90, &data, &width, NULL, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_rotate_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, MM_UTIL_ROTATE_90, &data, &width, &height, NULL);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ if (decode_image.data)
+ free(decode_image.data);
+}
+
+TEST(libmm_imgp_Test, mm_util_crop_image_p)
+{
+ int ret = MM_UTIL_ERROR_NONE;
+ mm_image_info_s decode_image = {0, 0, MM_UTIL_COLOR_ARGB, NULL, 0, 0};
+ unsigned char *data = NULL;
+ unsigned int width = 0;
+ unsigned int height = 0;
+ size_t size = 0;;
+
+ ret = mm_util_decode_from_jpeg_file(DECODE_FILE_PATH, MM_UTIL_COLOR_ARGB, MM_UTIL_JPEG_DECODE_DOWNSCALE_1_1, &decode_image);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_NONE);
+ EXPECT_TRUE(decode_image.data != NULL);
+
+ ret = mm_util_crop_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, 0, 0, 320, 240, &data, &width, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_NONE);
+ EXPECT_TRUE(data != NULL);
+ EXPECT_EQ(width, 320);
+ EXPECT_EQ(height, 240);
+ EXPECT_NE(size, 0);
+
+ if (decode_image.data)
+ free(decode_image.data);
+ if (data)
+ free(data);
+}
+
+TEST(libmm_imgp_Test, mm_util_crop_image_n)
+{
+ int ret = MM_UTIL_ERROR_NONE;
+ mm_image_info_s decode_image = {0, 0, MM_UTIL_COLOR_RGB24, NULL, 0, 0};
+ unsigned char *data = NULL;
+ unsigned int width = 0;
+ unsigned int height = 0;
+ size_t size = 0;;
+
+ ret = mm_util_decode_from_jpeg_file(DECODE_FILE_PATH, MM_UTIL_COLOR_ARGB, MM_UTIL_JPEG_DECODE_DOWNSCALE_1_1, &decode_image);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_NONE);
+ EXPECT_TRUE(decode_image.data != NULL);
+
+ ret = mm_util_crop_image(NULL, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, 0, 0, 320, 240, &data, &width, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_crop_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, 0, 0, 0, 240, &data, &width, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_crop_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, 0, 0, 320, 0, &data, &width, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_crop_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, 0, 0, 320, 240, NULL, &width, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_crop_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, 0, 0, 320, 240, &data, NULL, &height, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_crop_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, 0, 0, 320, 240, &data, &width, NULL, &size);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ ret = mm_util_crop_image((const unsigned char *)decode_image.data, decode_image.width, decode_image.height, MM_UTIL_COLOR_ARGB, 0, 0, 320, 240, &data, &width, &height, NULL);
+ EXPECT_EQ(ret, MM_UTIL_ERROR_INVALID_PARAMETER);
+
+ if (decode_image.data)
+ free(decode_image.data);
+}
+
+int main(int argc, char **argv)
+{
+ InitGoogleTest(&argc, argv);
+
+ return RUN_ALL_TESTS();
+}
+