In support of the Linaro 11.08 release, the libjpeg-turbo package has been updated substantially from 1.1.1 to 1.1.90 which closely tracks the upcoming 1.2 community release. On ARM make test passes and image quality appears to be good. (of note to the Android WG bugs #823960 and #826642 are not present) This new version of libjpeg-turbo is include in the ubuntu-desktop and alip reference images.
ChangeLog since 1.1.1
1.1.90 (1.2 beta1) ==================
[1] Added a JNI wrapper for TurboJPEG/OSS. See java/README for more details.
[2] TurboJPEG/OSS can now scale down images during decompression.
[3] Added SIMD routines for RGB-to-grayscale color conversion, which significantly improves the performance of grayscale JPEG compression from an RGB source image.
[4] Improved performance for non-x86 machines.
[5] Added a function to the TurboJPEG API which performs lossless transforms. This function uses the same back end as jpegtran, but it performs transcoding entirely in memory and allows multiple transforms and/or crop operations to be batched together, so the source coefficients only need to be read once. This is useful when generating image tiles from a single source JPEG.
[6] Modified jpgtest to benchmark the new scaled decompression and lossless transform features in TurboJPEG/OSS.
[7] Added support for 4:4:0 (transposed 4:2:2) subsampling in TurboJPEG, which was necessary in order for it to read 4:2:2 JPEG files that had been losslessly transposed or rotated 90 degrees.
[8] All legacy VirtualGL code has been re-factored, and this has allowed libjpeg-turbo, in its entirety, to be re-licensed under a BSD-style license.
[9] libjpeg-turbo can now be built with YASM.
[10] Added SIMD acceleration for ARM Linux and iOS platforms that support NEON instructions.
[11] Refactored the TurboJPEG C API so that it uses pixel formats to define the size and component order of the uncompressed source/destination images as well as uses the libjpeg memory source and destination managers. The latter allows the TurboJPEG compressor to grow the JPEG buffer as necessary.
[12] Eliminated errors in the output of jpegtran on Windows that occurred when the application was invoked using I/O redirection (jpegtran <input.jpg >output.jpg).
[13] The inclusion of libjpeg v7 and v8 emulation as well as arithmetic coding support in libjpeg-turbo v1.1.0 introduced several new error constants in jerror.h, and these were mistakenly enabled for all emulation modes, causing the error enum in libjpeg-turbo to sometimes have different values than the same enum in libjpeg. This represents an ABI incompatibility, and it caused problems with rare applications that took specific action based on a particular error value. The fix was to include the new error constants conditionally based on whether libjpeg v7 or v8 emulation was enabled.
[14] Fixed an issue whereby Windows applications that used libjpeg-turbo would fail to compile if the Windows system headers were included before jpeglib.h. This issue was caused by a conflict in the definition of the INT32 type.
[15] Implemented a more efficient version of TJBUFSIZE() which computes a worst-case JPEG size based on the level of chrominance subsampling.
[16] Fixed 32-bit supplementary package for amd64 Debian systems which was broken by enhancements to the packaging system in 1.1.
[17] Support for decoding JPEG images that use the CMYK or YCCK colorspaces.
On Sun, Aug 21, 2011 at 04:31:24PM -0500, Tom Gall wrote:
In support of the Linaro 11.08 release, the libjpeg-turbo package has been updated substantially from 1.1.1 to 1.1.90 which closely tracks the upcoming 1.2 community release. On ARM make test passes and image quality appears to be good. (of note to the Android WG bugs #823960 and #826642 are not present) This new version of libjpeg-turbo is include in the ubuntu-desktop and alip reference images.
What actually caused the Android bugs to go away?
[3] Added SIMD routines for RGB-to-grayscale color conversion, which significantly improves the performance of grayscale JPEG compression from an RGB source image.
[4] Improved performance for non-x86 machines.
It would be nice if the ChangeLog identified clearly where ARM support is being added or improved -- SIMD and non-x86 machines above leave us wondering what actually changed. Or should the assumption be that SIMD is always implemented for all platforms, and non-x86 is really everything but x86?
[8] All legacy VirtualGL code has been re-factored, and this has allowed libjpeg-turbo, in its entirety, to be re-licensed under a BSD-style license.
Nice job!
Do we have a continuous set of benchmarks being run for this on some of our boards, and if not, could we get a job set up?