ok - longstanding issue. quality of jpeg encode and decode dropped

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.



SVN revision: 65294
This commit is contained in:
Carsten Haitzler 2011-11-16 11:52:47 +00:00
parent 16d5eb14bb
commit d32ecb2cfd
3 changed files with 16 additions and 2 deletions

View File

@ -540,3 +540,9 @@
* 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

View File

@ -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

View 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)