libjpeg-turbo Changelog

What's new in libjpeg-turbo 1.4.0

Jan 10, 2015
  • Fixed a build issue on OS X PowerPC platforms (md5cmp failed to build
  • because OS X does not provide the le32toh() and htole32() functions.)
  • The non-SIMD RGB565 color conversion code did not work correctly on big
  • endian machines. This has been fixed.
  • Fixed an issue in tjPlaneSizeYUV() whereby it would erroneously return 1
  • instead of -1 if componentID was > 0 and subsamp was TJSAMP_GRAY.
  • Fixed an issue in tjBufSizeYUV2() wherby it would erroneously return 0
  • instead of -1 if width was < 1.
  • The Huffman encoder now uses clz and bsr instructions for bit counting on
  • ARM64 platforms (see 1.4 beta1 [5].)
  • The close() method in the TJCompressor and TJDecompressor Java classes is
  • now idempotent. Previously, that method would call the native tjDestroy()
  • function even if the TurboJPEG instance had already been destroyed. This
  • caused an exception to be thrown during finalization, if the close() method had
  • already been called. The exception was caught, but it was still an expensive
  • operation.
  • The TurboJPEG API previously generated an error ("Could not determine
  • subsampling type for JPEG image") when attempting to decompress grayscale JPEG
  • images that were compressed with a sampling factor other than 1 (for instance,
  • with 'cjpeg -grayscale -sample 2x2'). Subsampling technically has no meaning
  • with grayscale JPEGs, and thus the horizontal and vertical sampling factors
  • for such images are ignored by the decompressor. However, the TurboJPEG API
  • was being too rigid and was expecting the sampling factors to be equal to 1
  • before it treated the image as a grayscale JPEG.
  • cjpeg, djpeg, and jpegtran now accept an argument of -version, which will
  • print the library version and exit.
  • Referring to 1.4 beta1 [15], another extremely rare circumstance was
  • discovered under which the Huffman encoder's local buffer can be overrun
  • when a buffered destination manager is being used and an
  • extremely-high-frequency block (basically junk image data) is being encoded.
  • Even though the Huffman local buffer was increased from 128 bytes to 136 bytes
  • to address the previous issue, the new issue caused even the larger buffer to
  • be overrun. Further analysis reveals that, in the absolute worst case (such as
  • setting alternating AC coefficients to 32767 and -32768 in the JPEG scanning
  • order), the Huffman encoder can produce encoded blocks that approach double the
  • size of the unencoded blocks. Thus, the Huffman local buffer was increased to
  • 256 bytes, which should prevent any such issue from re-occurring in the future.
  • The new tjPlaneSizeYUV(), tjPlaneWidth(), and tjPlaneHeight() functions
  • were not actually usable on any platform except OS X and Windows, because
  • those functions were not included in the libturbojpeg mapfile. This has been
  • fixed.
  • Restored the JPP(), JMETHOD(), and FAR macros in the libjpeg-turbo header
  • files. The JPP() and JMETHOD() macros were originally implemented in libjpeg
  • as a way of supporting non-ANSI compilers that lacked support for prototype
  • parameters. libjpeg-turbo has never supported such compilers, but some
  • software packages still use the macros to define their own prototypes.
  • Similarly, libjpeg-turbo has never supported MS-DOS and other platforms that
  • have far symbols, but some software packages still use the FAR macro. A pretty
  • good argument can be made that this is a bad practice on the part of the
  • software in question, but since this affects more than one package, it's just
  • easier to fix it here.
  • Fixed issues that were preventing the ARM 64-bit SIMD code from compiling
  • for iOS, and included an ARMv8 architecture in all of the binaries installed by
  • the "official" libjpeg-turbo SDK for OS X.

New in libjpeg-turbo 1.3.1 (Mar 28, 2014)

  • On Un*x systems, 'make install' now installs the libjpeg-turbo libraries into /opt/libjpeg-turbo/lib32 by default on any 32-bit system, not just x86, and into /opt/libjpeg-turbo/lib64 by default on any 64-bit system, not just x86-64.
  • Fixed a bug whereby attempting to encode a progressive JPEG with arithmetic entropy coding (by passing arguments of -progressive -arithmetic to cjpeg or jpegtran, for instance) would result in an error, "Requested feature was omitted at compile time".
  • Fixed a couple of issues whereby malformed JPEG images would cause libjpeg-turbo to use uninitialized memory during decompression.
  • Fixed an error ("Buffer passed to JPEG library is too small") that occurred when calling the TurboJPEG YUV encoding function with a very small (< 5x5) source image, and added a unit test to check for this error.
  • The Java classes should now build properly under Visual Studio 2010 and later.
  • Fixed an issue that prevented SRPMs generated using the in-tree packaging tools from being rebuilt on certain newer Linux distributions.
  • Numerous minor fixes to eliminate compilation and build/packaging system warnings, fix cosmetic issues, improve documentation clarity, and other general source cleanup.

New in libjpeg-turbo 1.3.0 (Oct 17, 2013)

  • 'make test' now works properly on FreeBSD, and it no longer requires the
  • md5sum executable to be present on other Un*x platforms.
  • Overhauled the packaging system:
  • To avoid conflict with vendor-supplied libjpeg-turbo packages, the
  • official RPMs and DEBs for libjpeg-turbo have been renamed to
  • "libjpeg-turbo-official".
  • The TurboJPEG libraries are now located under /opt/libjpeg-turbo in the
  • official Linux and Mac packages, to avoid conflict with vendor-supplied
  • packages and also to streamline the packaging system.
  • Release packages are now created with the directory structure defined
  • by the configure variables "prefix", "bindir", "libdir", etc. (Un*x) or by the
  • CMAKE_INSTALL_PREFIX variable (Windows.) The exception is that the docs are
  • always located under the system default documentation directory on Un*x and Mac
  • systems, and on Windows, the TurboJPEG DLL is always located in the Windows
  • system directory.
  • To avoid confusion, official libjpeg-turbo packages on Linux/Unix platforms
  • (except for Mac) will always install the 32-bit libraries in
  • /opt/libjpeg-turbo/lib32 and the 64-bit libraries in /opt/libjpeg-turbo/lib64.
  • Fixed an issue whereby, in some cases, the libjpeg-turbo executables on Un*x
  • systems were not properly linking with the shared libraries installed by the
  • same package.
  • Fixed an issue whereby building the "installer" target on Windows when
  • WITH_JAVA=1 would fail if the TurboJPEG JAR had not been previously built.
  • Building the "install" target on Windows now installs files into the same
  • places that the installer does.
  • Fixed a Huffman encoder bug that prevented I/O suspension from working
  • properly.

New in libjpeg-turbo 1.2.90 (Feb 5, 2013)

  • Added support for additional scaling factors (3/8, 5/8, 3/4, 7/8, 9/8, 5/4, 11/8, 3/2, 13/8, 7/4, 15/8, and 2) when decompressing. Note that the IDCT will not be SIMD-accelerated when using any of these new scaling factors.
  • The TurboJPEG dynamic library is now versioned. It was not strictly necessary to do so, because TurboJPEG uses versioned symbols, and if a function changes in an ABI-incompatible way, that function is renamed and a legacy function is provided to maintain backward compatibility. However, certain Linux distro maintainers will blindly reject any library that is not versioned, so this was an attempt to make them happy.
  • Extended the TurboJPEG Java API so that it can be used to compress a JPEG image from and decompress a JPEG image to an arbitrary position in a large image buffer.
  • The tjDecompressToYUV() function now supports the TJFLAG_FASTDCT flag.
  • The 32-bit supplementary package for amd64 Debian systems now provides symlinks in /usr/lib/i386-linux-gnu for the TurboJPEG libraries in /usr/lib32. This allows those libraries to be used on MultiArch-compatible systems (such as Ubuntu 11 and later) without setting the linker path.
  • The TurboJPEG Java wrapper should now find the JNI library on Mac systems without having to pass -Djava.library.path=/usr/lib to java.

New in libjpeg-turbo 1.0.1 (Sep 10, 2010)

  • Fixed x86-64 build on FreeBSD systems
  • Added support for Windows 64-bit systems

New in libjpeg-turbo 0.0.91 (Apr 22, 2010)

  • Added documentation to .deb packages
  • 2968313: Fixed data corruption issues when decompressing large JPEG images
  • and/or using buffered I/O with the libjpeg-turbo decompressor