#10576: libjpeg-turbo-1.5.90
-------------------------+-----------------------
Reporter: bdubbs | Owner: bdubbs
Type: enhancement | Status: assigned
Priority: normal | Milestone: 8.3
Component: BOOK | Version: SVN
Severity: normal | Resolution:
Keywords: |
-------------------------+-----------------------
Comment (by bdubbs):
Note -- Changing to cmake with removal of autotools. I expect the next
stable version to be either 1.6 or 2.0.
It is beta1. Will defer until a stable release. Release notes so far:
1. Added AVX2 SIMD implementations of the colorspace conversion, chroma
downsampling and upsampling, integer quantization and sample conversion,
and
slow integer DCT/IDCT algorithms. When using the slow integer DCT/IDCT
algorithms on AVX2-equipped CPUs, the compression of RGB images is
approximately 13-36% (avg. 22%) faster (relative to libjpeg-turbo 1.5.x)
with
64-bit code and 11-21% (avg. 17%) faster with 32-bit code, and the
decompression of RGB images is approximately 9-35% (avg. 17%) faster with
64-bit code and 7-17% (avg. 12%) faster with 32-bit code. (As tested on a
3 GHz Intel Core i7. Actual mileage may vary.)
2. Overhauled the build system to use CMake on all platforms, and removed
the
autotools-based build system. This decision resulted from extensive
discussions within the libjpeg-turbo community. libjpeg-turbo
traditionally
used CMake only for Windows builds, but there was an increasing amount of
demand to extend CMake support to other platforms. However, because of
the
unique nature of our code base (the need to support different assemblers
on
each platform, the need for Java support, etc.), providing dual build
systems
as other OSS imaging libraries do (including libpng and libtiff) would
have
created a maintenance burden. The use of CMake greatly simplifies some
aspects
of our build system, owing to CMake's built-in support for various
assemblers,
Java, and unit testing, as well as generally fewer quirks that have to be
worked around in order to implement our packaging system. Eliminating
autotools puts our project slightly at odds with the traditional practices
of
the OSS community, since most "system libraries" tend to be built with
autotools, but it is believed that the benefits of this move outweigh the
risks. In addition to providing a unified build environment, switching to
CMake allows for the use of various build tools and IDEs that aren't
supported
under autotools, including XCode, Ninja, and Eclipse. It also eliminates
the
need to install autotools via MacPorts/Homebrew on OS X and allows
libjpeg-turbo to be configured without the use of a terminal/command
prompt.
Extensive testing was conducted to ensure that all features provided by
the
autotools-based build system are provided by the new build system.
3. The libjpeg API in this version of libjpeg-turbo now includes two
additional
functions, `jpeg_read_icc_profile()` and `jpeg_write_icc_profile()`, that
can
be used to extract ICC profile data from a JPEG file while decompressing
or to
embed ICC profile data in a JPEG file while compressing or transforming.
This
eliminates the need for downstream projects, such as color management
libraries
and browsers, to include their own glueware for accomplishing this.
4. Improved error handling in the TurboJPEG API library:
- Introduced a new function (`tjGetErrorStr2()`) in the TurboJPEG C
API
that allows compression/decompression/transform error messages to be
retrieved
in a thread-safe manner. Retrieving error messages from global functions,
such
as `tjInitCompress()` or `tjBufSize()`, is still thread-unsafe, but since
those
functions will only throw errors if passed an invalid argument or if a
memory
allocation failure occurs, thread safety is not as much of a concern.
- Introduced a new function (`tjGetErrorCode()`) in the TurboJPEG C
API
and a new method (`TJException.getErrorCode()`) in the TurboJPEG Java API
that
can be used to determine the severity of the last
compression/decompression/transform error. This allows applications to
choose whether to ignore warnings (non-fatal errors) from the underlying
libjpeg API or to treat them as fatal.
- Introduced a new flag (`TJFLAG_STOPONWARNING` in the TurboJPEG C
API and
`TJ.FLAG_STOPONWARNING` in the TurboJPEG Java API) that causes the library
to
immediately halt a compression/decompression/transform operation if it
encounters a warning from the underlying libjpeg API (the default behavior
is
to allow the operation to complete unless a fatal error is encountered.)
5. Introduced a new flag in the TurboJPEG C and Java APIs
(`TJFLAG_PROGRESSIVE`
and `TJ.FLAG_PROGRESSIVE`, respectively) that causes the library to use
progressive entropy coding in JPEG images generated by compression and
transform operations. Additionally, a new transform option
(`TJXOPT_PROGRESSIVE` in the C API and `TJTransform.OPT_PROGRESSIVE` in
the
Java API) has been introduced, allowing progressive entropy coding to be
enabled for selected transforms in a multi-transform operation.
6. Introduced a new transform option in the TurboJPEG API
(`TJXOPT_COPYNONE` in
the C API and `TJTransform.OPT_COPYNONE` in the Java API) that allows the
copying of markers (including EXIF and ICC profile data) to be disabled
for a
particular transform.
7. Added two functions to the TurboJPEG C API (`tjLoadImage()` and
`tjSaveImage()`) that can be used to load/save a BMP or PPM/PGM image
to/from a
memory buffer with a specified pixel format and layout. These functions
replace the project-private (and slow) bmp API, which was previously used
by
TJBench, and they also provide a convenient way for first-time users of
libjpeg-turbo to quickly develop a complete JPEG compression/decompression
program.
8. The TurboJPEG C API now includes a new convenience array
(`tjAlphaOffset[]`)
that contains the alpha component index for each pixel format (or -1 if
the
pixel format lacks an alpha component.) The TurboJPEG Java API now
includes a
new method (`TJ.getAlphaOffset()`) that returns the same value. In
addition,
the `tjRedOffset[]`, `tjGreenOffset[]`, and `tjBlueOffset[]` arrays-- and
the
corresponding `TJ.getRedOffset()`, `TJ.getGreenOffset()`, and
`TJ.getBlueOffset()` methods-- now return -1 for `TJPF_GRAY`/`TJ.PF_GRAY`
rather than 0. This allows programs to easily determine whether a pixel
format
has red, green, blue, and alpha components.
9. Added a new example (tjexample.c) that demonstrates the basic usage of
the
TurboJPEG C API. This example mirrors the functionality of
TJExample.java.
Both files are now included in the libjpeg-turbo documentation.
10. Fixed two signed integer overflows in the arithmetic decoder, detected
by
the Clang undefined behavior sanitizer, that could be triggered by
attempting
to decompress a specially-crafted malformed JPEG image. These issues did
not
pose a security threat, but removing the warnings makes it easier to
detect
actual security issues, should they arise in the future.
11. Fixed a bug in the merged 4:2:0 upsampling/dithered RGB565 color
conversion
algorithm that caused incorrect dithering in the output image. This
algorithm
now produces bitwise-identical results to the unmerged algorithms.
12. The SIMD function symbols for x86[-64]/ELF, MIPS/ELF, macOS/x86[-64]
(if
libjpeg-turbo is built with YASM), and iOS/ARM[64] builds are now private.
This prevents those symbols from being exposed in applications or shared
libraries that link statically with libjpeg-turbo.
13. Added Loongson MMI SIMD implementations of the RGB-to-YCbCr and
YCbCr-to-RGB colorspace conversion, 4:2:0 chroma downsampling, 4:2:0 fancy
chroma upsampling, integer quantization, and slow integer DCT/IDCT
algorithms.
When using the slow integer DCT/IDCT, this speeds up the compression of
RGB
images by approximately 70-100% and the decompression of RGB images by
approximately 2-3.5x.
14. Fixed a build error when building with older MinGW releases
(regression
caused by 1.5.1[7].)
15. Added SIMD acceleration for progressive Huffman encoding on
SSE2-capable
x86 and x86-64 platforms. This speeds up the compression of full-color
progressive JPEGs by about 85-90% on average (relative to libjpeg-turbo
1.5.x)
when using modern Intel and AMD CPUs.
--
Ticket URL: <http://wiki.linuxfromscratch.org/blfs/ticket/10576#comment:2>
BLFS Trac <http://wiki.linuxfromscratch.org/blfs>
Beyond Linux From Scratch
--
http://lists.linuxfromscratch.org/listinfo/blfs-book
FAQ: http://www.linuxfromscratch.org/blfs/faq.html
Unsubscribe: See the above information page