Improve performance of Resize and Read from /Write to File. 53/168253/9 accepted/tizen/unified/20180131.060525 submit/tizen/20180130.062418
authorhj kim <backto.kim@samsung.com>
Thu, 25 Jan 2018 07:46:13 +0000 (16:46 +0900)
committerMinje ahn <minje.ahn@samsung.com>
Tue, 30 Jan 2018 04:38:22 +0000 (04:38 +0000)
1. Use Sample and Scale API instead of Resize API
2. Apply jpeg Options like dct_method
3. Remove Profiles like IPTC, ICM

Change-Id: I7e54109c5855b6f49e08806586b26ca2d57d3722

magick/mm_util_magick.c
packaging/libmm-utility.spec

index dc6fe33..96d2ea9 100755 (executable)
@@ -194,7 +194,10 @@ static Image * __mm_util_rotate_image(Image *image, mm_util_magick_rotate_type a
 static Image * __mm_util_resize_image(Image *image, unsigned int width, unsigned int height)
 {
        Image *_processed_image = NULL;
+       Image *_sampled_image = NULL;
        ExceptionInfo exception;
+       unsigned int check_factor = 3;
+       unsigned int sample_factor = 2;
 
        mm_util_fenter();
 
@@ -202,13 +205,26 @@ static Image * __mm_util_resize_image(Image *image, unsigned int width, unsigned
 
        GetExceptionInfo(&exception);
 
-       _processed_image = ResizeImage(image, width, height, DefaultResizeFilter, 1.0, &exception);
+       if ((image->columns > width * check_factor) && (image->rows > height * check_factor)) {
+               _sampled_image = SampleImage(image, width * sample_factor, height * sample_factor, &exception);
+               if (_sampled_image == (Image *) NULL)
+                       mm_util_error("Error: Sampling Image failed.");
+       }
+
+       if (_sampled_image != NULL)
+               _processed_image = ScaleImage(_sampled_image, width, height, &exception);
+       else
+               _processed_image = ScaleImage(image, width, height, &exception);
+
        if (_processed_image == NULL) {
                mm_util_error("Error: Resizing Image failed.");
                if (exception.severity != UndefinedException)
                        CatchException(&exception);
        }
 
+       if (_sampled_image != NULL)
+               DestroyImage(_sampled_image);
+
        DestroyExceptionInfo(&exception);
 
        mm_util_fleave();
@@ -232,6 +248,10 @@ static Image * __mm_util_read_image_from_file(const char *path, ImageInfo **imag
        _image_info = CloneImageInfo(0);
        g_strlcpy(_image_info->filename, path, sizeof(_image_info->filename));
 
+       AddDefinition(_image_info, "jpeg", "dct-method", "FASTEST", &exception);
+       AddDefinition(_image_info, "jpeg", "block-smoothing", "FALSE", &exception);
+       AddDefinition(_image_info, "jpeg", "fancy-upsampling", "FALSE", &exception);
+
        _image = ReadImage(_image_info, &exception);
 
        if (_image == NULL) {
@@ -266,6 +286,15 @@ static int __mm_util_write_image_to_file(ImageInfo *image_info, Image *image, co
 
        image->filename[MaxTextExtent-1] = '\0';
        strncpy(image->filename, out_path, sizeof(image->filename));
+
+       AddDefinition(image_info, "jpeg", "dct-method", "FASTEST", &exception);
+       AddDefinition(image_info, "jpeg", "optimize-coding", "FALSE", &exception);
+       //DeleteImageProfile(image, "EXIF");
+       DeleteImageProfile(image, "8BIM");
+       DeleteImageProfile(image, "ICM");
+       DeleteImageProfile(image, "IPTC");
+       DeleteImageProfile(image, "XMP");
+
        if (WriteImage (image_info, image) == MagickFalse) {
                mm_util_error("Error: Writing Image failed.");
                if (exception.severity != UndefinedException)
index ec19684..636e869 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       libmm-utility
 Summary:    Multimedia Framework Utility Library
-Version:    0.1.6
+Version:    0.1.7
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0