ok - longstanding issue. quality of jpeg encode and decode dropped
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 16 Nov 2011 11:52:47 +0000 (11:52 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 16 Nov 2011 11:52:47 +0000 (11:52 +0000)
quickly when uf your-encoded anything due to using IFAST decoder (and
encoder). this does drop speed for decode and encode (except encoding
< 60% quality where it now uses IFAST), but we don't see progressively
worse artifacts.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/eet@65294 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

ChangeLog
NEWS
src/lib/eet_image.c

index fcafa79..0b3c5fb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
 
        * Added a new macro for adding arrays of basic types.
           EET_DATA_DESCRIPTOR_ADD_BASIC_ARRAY
+
+2011-11-16  Carsten Haitzler (The Rasterman)
+
+       * JPEG encode and decode in eet now uses ISLOW (not IFAST) due to
+        noticable quality losses in the chase for speed. It will use
+        IFAST for quality less than 60 when encoding
diff --git a/NEWS b/NEWS
index 80e5965..43118b0 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -25,3 +25,4 @@ Improvements:
     * use stringshare for mmaped file names
     * use eina locking wrappers
     * use eina_file for file IO
+    * jpeg encode and decode quality improved at expense of speed
index 06816b1..79f6f90 100644 (file)
@@ -447,7 +447,7 @@ eet_data_image_jpeg_rgb_decode(const void   *data,
      }
 
    jpeg_read_header(&cinfo, TRUE);
-   cinfo.dct_method = JDCT_FASTEST;
+   cinfo.dct_method = JDCT_ISLOW; // JDCT_FLOAT JDCT_IFAST(quality loss)
    cinfo.do_fancy_upsampling = FALSE;
    cinfo.do_block_smoothing = FALSE;
    jpeg_start_decompress(&cinfo);
@@ -595,7 +595,7 @@ eet_data_image_jpeg_alpha_decode(const void   *data,
      }
 
    jpeg_read_header(&cinfo, TRUE);
-   cinfo.dct_method = JDCT_FASTEST;
+   cinfo.dct_method = JDCT_ISLOW; // JDCT_FLOAT JDCT_IFAST(quality loss)
    cinfo.do_fancy_upsampling = FALSE;
    cinfo.do_block_smoothing = FALSE;
    jpeg_start_decompress(&cinfo);
@@ -832,8 +832,12 @@ eet_data_image_jpeg_convert(int         *size,
    cinfo.image_height = h;
    cinfo.input_components = 3;
    cinfo.in_color_space = JCS_RGB;
+   cinfo.optimize_coding = FALSE;
+   cinfo.dct_method = JDCT_ISLOW; // JDCT_FLOAT JDCT_IFAST(quality loss)
+   if (quality < 60) cinfo.dct_method = JDCT_IFAST;
    jpeg_set_defaults(&cinfo);
    jpeg_set_quality(&cinfo, quality, TRUE);
+
    if (quality >= 90)
      {
         cinfo.comp_info[0].h_samp_factor = 1;
@@ -925,6 +929,9 @@ eet_data_image_jpeg_alpha_convert(int         *size,
       cinfo.image_height = h;
       cinfo.input_components = 3;
       cinfo.in_color_space = JCS_RGB;
+      cinfo.optimize_coding = FALSE;
+      cinfo.dct_method = JDCT_ISLOW; // JDCT_FLOAT JDCT_IFAST(quality loss)
+      if (quality < 60) cinfo.dct_method = JDCT_IFAST;
       jpeg_set_defaults(&cinfo);
       jpeg_set_quality(&cinfo, quality, TRUE);
       if (quality >= 90)