Use mozjpeg defaults by default
Since mozjpeg is now backward ABI-compatible with libjpeg[-turbo], it is now possible to temporarily load mozjpeg into a binary application and cause that application to generate uber-compressed JPEGs (at the expense of an extreme performance loss, of course.) For instance, someone could do LD_LIBRARY_PATH=/opt/mozjpeg/lib convert blah_blah_blah to make ImageMagick use mozjpeg instead of the system's pre-installed JPEG library (libjpeg-turbo, in most cases.) However, this only makes sense if mozjpeg is actually producing different behavior by default than libjpeg-turbo. Currently it isn't. Currently it requires the application to set JBOOLEAN_USE_MOZ_DEFAULTS to TRUE in order to enable the mozjpeg-specific behavior, but of course applications that were built to use libjpeg[-turbo] won't do that. Thus, this patch sets use_moz_defaults to TRUE by default, requiring an application to explicitly set it to FALSE in order to revert to the libjpeg[-turbo] behavior (makes sense, since the only applications that would need to revert to the libjpeg[-turbo] behavior would be mozjpeg-aware applications.) Note that we discussed the possibility of adding a function (jpeg_revert_defaults()), which would act the same as jpeg_set_defaults() does in libjpeg[-turbo]. This is a good solution for implementing the -revert switch in cjpeg, but unfortunately it doesn't work for jpegtran. The reason is that jpeg_set_defaults() is called within the body of jpeg_copy_critical_parameters(), which is part of the API. So yet again, if mozjpeg were loaded into a non-mozjpeg-aware application at run time, it would be desirable for jpeg_copy_critical_parameters() to set the parameters to mozjpeg defaults. That means that, in order to implement the -revert switch in jpegtran, it would be necessary to introduce a new function (jpeg_revert_critical_parameters(), perhaps). It seems cleaner to just keep using the JBOOLEAN_USE_MOZ_DEFAULTS parameter to control the behavior of jpeg_set_defaults(), even though this represents a minor abuse of the libjpeg API (jpeg_set_defaults() is technically supposed to set all of the parameters to defaults, irrespective of any previous state. However, as long as we document that JBOOLEAN_USE_MOZ_DEFAULTS works differently, then it should be OK.)
This commit is contained in:
@@ -126,8 +126,6 @@ write_JPEG_file (char * filename, int quality)
|
||||
cinfo.image_height = image_height;
|
||||
cinfo.input_components = 3; /* # of color components per pixel */
|
||||
cinfo.in_color_space = JCS_RGB; /* colorspace of input image */
|
||||
jpeg_c_set_bool_param(&cinfo, JBOOLEAN_USE_MOZ_DEFAULTS, TRUE); /* use Mozilla defaults for improved compression */
|
||||
|
||||
/* Now use the library's routine to set default compression parameters.
|
||||
* (You must set at least cinfo.in_color_space before calling this,
|
||||
* since the defaults depend on the source color space.)
|
||||
|
||||
Reference in New Issue
Block a user