]> granicus.if.org Git - libjpeg-turbo/commitdiff
Add cjpeg -rgb option from jpeg-8d
authorDRC <dcommander@users.sourceforge.net>
Tue, 1 Jan 2013 10:25:43 +0000 (10:25 +0000)
committerDRC <dcommander@users.sourceforge.net>
Tue, 1 Jan 2013 10:25:43 +0000 (10:25 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@880 632fc199-4ca6-4c93-a231-07263d6284db

1  2 
ChangeLog.txt
change.log
cjpeg.1
cjpeg.c
usage.txt

diff --cc ChangeLog.txt
index a622c6f805cbb940027c09cd16d5512d87ec54eb,0000000000000000000000000000000000000000..c3be2b63d47007e44b51151a87d3800be632ef25
mode 100644,000000..100644
--- /dev/null
@@@ -1,353 -1,0 +1,356 @@@
 +1.2.90 (1.3 beta1)
 +==================
 +
 +[1] 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.
 +
 +[2] 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.
 +
 +[3] 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.
 +
 +[4] The tjDecompressToYUV() function now supports the TJFLAG_FASTDCT flag.
 +
 +[5] 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.
 +
 +[6] The TurboJPEG Java wrapper should now find the JNI library on Mac systems
 +without having to pass -Djava.library.path=/usr/lib to java.
 +
 +[7] TJBench has been ported to Java to provide a convenient way of validating
 +the performance of the TurboJPEG Java API.  It can be run with
 +'java -cp turbojpeg.jar TJBench'.
 +
++[8] cjpeg can now be used to generate JPEG files with the RGB colorspace
++(feature ported from jpeg-8d.)
++
 +
 +1.2.1
 +=====
 +
 +[1] Creating or decoding a JPEG file that uses the RGB colorspace should now
 +properly work when the input or output colorspace is one of the libjpeg-turbo
 +colorspace extensions.
 +
 +[2] When libjpeg-turbo was built without SIMD support and merged (non-fancy)
 +upsampling was used along with an alpha-enabled colorspace during
 +decompression, the unused byte of the decompressed pixels was not being set to
 +0xFF.  This has been fixed.  TJUnitTest has also been extended to test for the
 +correct behavior of the colorspace extensions when merged upsampling is used.
 +
 +[3] Fixed a bug whereby the libjpeg-turbo SSE2 SIMD code would not preserve the
 +upper 64 bits of xmm6 and xmm7 on Win64 platforms, which violated the Win64
 +calling conventions.
 +
 +[4] Fixed a regression caused by 1.2.0[6] whereby decompressing corrupt JPEG
 +images (specifically, images in which the component count was erroneously set
 +to a large value) would cause libjpeg-turbo to segfault.
 +
 +[5] Worked around a severe performance issue with "Bobcat" (AMD Embedded APU)
 +processors.  The MASKMOVDQU instruction, which was used by the libjpeg-turbo
 +SSE2 SIMD code, is apparently implemented in microcode on AMD processors, and
 +it is painfully slow on Bobcat processors in particular.  Eliminating the use
 +of this instruction improved performance by an order of magnitude on Bobcat
 +processors and by a small amount (typically 5%) on AMD desktop processors.
 +
 +[6] Added SIMD acceleration for performing 4:2:2 upsampling on NEON-capable ARM
 +platforms.  This speeds up the decompression of 4:2:2 JPEGs by 20-25% on such
 +platforms.
 +
 +[7] Fixed a regression caused by 1.2.0[2] whereby, on Linux/x86 platforms
 +running the 32-bit SSE2 SIMD code in libjpeg-turbo, decompressing a 4:2:0 or
 +4:2:2 JPEG image into a 32-bit (RGBX, BGRX, etc.) buffer without using fancy
 +upsampling would produce several incorrect columns of pixels at the right-hand
 +side of the output image if each row in the output image was not evenly
 +divisible by 16 bytes.
 +
 +[8] Fixed an issue whereby attempting to build the SIMD extensions with Xcode
 +4.3 on OS X platforms would cause NASM to return numerous errors of the form
 +"'%define' expects a macro identifier".
 +
 +[9] Added flags to the TurboJPEG API that allow the caller to force the use of
 +either the fast or the accurate DCT/IDCT algorithms in the underlying codec.
 +
 +
 +1.2.0
 +=====
 +
 +[1] Fixed build issue with YASM on Unix systems (the libjpeg-turbo build system
 +was not adding the current directory to the assembler include path, so YASM
 +was not able to find jsimdcfg.inc.)
 +
 +[2] Fixed out-of-bounds read in SSE2 SIMD code that occurred when decompressing
 +a JPEG image to a bitmap buffer whose size was not a multiple of 16 bytes.
 +This was more of an annoyance than an actual bug, since it did not cause any
 +actual run-time problems, but the issue showed up when running libjpeg-turbo in
 +valgrind.  See http://crbug.com/72399 for more information.
 +
 +[3] Added a compile-time macro (LIBJPEG_TURBO_VERSION) that can be used to
 +check the version of libjpeg-turbo against which an application was compiled.
 +
 +[4] Added new RGBA/BGRA/ABGR/ARGB colorspace extension constants (libjpeg API)
 +and pixel formats (TurboJPEG API), which allow applications to specify that,
 +when decompressing to a 4-component RGB buffer, the unused byte should be set
 +to 0xFF so that it can be interpreted as an opaque alpha channel.
 +
 +[5] Fixed regression issue whereby DevIL failed to build against libjpeg-turbo
 +because libjpeg-turbo's distributed version of jconfig.h contained an INLINE
 +macro, which conflicted with a similar macro in DevIL.  This macro is used only
 +internally when building libjpeg-turbo, so it was moved into config.h.
 +
 +[6] libjpeg-turbo will now correctly decompress erroneous CMYK/YCCK JPEGs whose
 +K component is assigned a component ID of 1 instead of 4.  Although these files
 +are in violation of the spec, other JPEG implementations handle them
 +correctly.
 +
 +[7] Added ARM v6 and ARM v7 architectures to libjpeg.a and libturbojpeg.a in
 +the official OS X distribution package, so that those libraries can be used to
 +build both OS X and iOS applications.
 +
 +
 +1.1.90 (1.2 beta1)
 +==================
 +
 +[1] Added a Java wrapper for the TurboJPEG API.  See java/README for more
 +details.
 +
 +[2] The TurboJPEG API can now be used to 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 the performance of the C color conversion routines, which are used
 +on platforms for which SIMD acceleration is not available.
 +
 +[5] Added a function to the TurboJPEG API that performs lossless transforms.
 +This function is implemented using 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] Added tests for the new TurboJPEG scaled decompression and lossless
 +transform features to tjbench (the TurboJPEG benchmark, formerly called
 +"jpgtest".)
 +
 +[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 and documented it using Doxygen.  The
 +TurboJPEG 1.2 API uses pixel formats to define the size and component order of
 +the uncompressed source/destination images, and it includes a more efficient
 +version of TJBUFSIZE() that computes a worst-case JPEG size based on the level
 +of chrominance subsampling.  The refactored implementation of TurboJPEG/OSS
 +now uses the libjpeg memory source and destination managers, which 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] Fixed 32-bit supplementary package for amd64 Debian systems, which was
 +broken by enhancements to the packaging system in 1.1.
 +
 +[16] When decompressing a JPEG image using an output colorspace of
 +JCS_EXT_RGBX, JCS_EXT_BGRX, JCS_EXT_XBGR, or JCS_EXT_XRGB, libjpeg-turbo will
 +now set the unused byte to 0xFF, which allows applications to interpret that
 +byte as an alpha channel (0xFF = opaque).
 +
 +
 +1.1.1
 +=====
 +
 +[1] Fixed a 1-pixel error in row 0, column 21 of the luminance plane generated
 +by tjEncodeYUV().
 +
 +[2] libjpeg-turbo's accelerated Huffman decoder previously ignored unexpected
 +markers found in the middle of the JPEG data stream during decompression.  It
 +will now hand off decoding of a particular block to the unaccelerated Huffman
 +decoder if an unexpected marker is found, so that the unaccelerated Huffman
 +decoder can generate an appropriate warning.
 +
 +[3] Older versions of MinGW64 prefixed symbol names with underscores by
 +default, which differed from the behavior of 64-bit Visual C++.  MinGW64 1.0
 +has adopted the behavior of 64-bit Visual C++ as the default, so to accommodate
 +this, the libjpeg-turbo SIMD function names are no longer prefixed with an
 +underscore when building with MinGW64.  This means that, when building
 +libjpeg-turbo with older versions of MinGW64, you will now have to add
 +-fno-leading-underscore to the CFLAGS.
 +
 +[4] Fixed a regression bug in the NSIS script that caused the Windows installer
 +build to fail when using the Visual Studio IDE.
 +
 +[5] Fixed a bug in jpeg_read_coefficients() whereby it would not initialize
 +cinfo->image_width and cinfo->image_height if libjpeg v7 or v8 emulation was
 +enabled.  This specifically caused the jpegoptim program to fail if it was
 +linked against a version of libjpeg-turbo that was built with libjpeg v7 or v8
 +emulation.
 +
 +[6] Eliminated excessive I/O overhead that occurred when reading BMP files in
 +cjpeg.
 +
 +[7] Eliminated errors in the output of cjpeg on Windows that occurred when the
 +application was invoked using I/O redirection (cjpeg <inputfile >output.jpg).
 +
 +
 +1.1.0
 +=====
 +
 +[1] The algorithm used by the SIMD quantization function cannot produce correct
 +results when the JPEG quality is >= 98 and the fast integer forward DCT is
 +used.  Thus, the non-SIMD quantization function is now used for those cases,
 +and libjpeg-turbo should now produce identical output to libjpeg v6b in all
 +cases.
 +
 +[2] Despite the above, the fast integer forward DCT still degrades somewhat for
 +JPEG qualities greater than 95, so TurboJPEG/OSS will now automatically use the
 +slow integer forward DCT when generating JPEG images of quality 96 or greater.
 +This reduces compression performance by as much as 15% for these high-quality
 +images but is necessary to ensure that the images are perceptually lossless.
 +It also ensures that the library can avoid the performance pitfall created by
 +[1].
 +
 +[3] Ported jpgtest.cxx to pure C to avoid the need for a C++ compiler.
 +
 +[4] Fixed visual artifacts in grayscale JPEG compression caused by a typo in
 +the RGB-to-luminance lookup tables.
 +
 +[5] The Windows distribution packages now include the libjpeg run-time programs
 +(cjpeg, etc.)
 +
 +[6] All packages now include jpgtest.
 +
 +[7] The TurboJPEG dynamic library now uses versioned symbols.
 +
 +[8] Added two new TurboJPEG API functions, tjEncodeYUV() and
 +tjDecompressToYUV(), to replace the somewhat hackish TJ_YUV flag.
 +
 +
 +1.0.90 (1.1 beta1)
 +==================
 +
 +[1] Added emulation of the libjpeg v7 and v8 APIs and ABIs.  See
 +README-turbo.txt for more details.  This feature was sponsored by CamTrace SAS.
 +
 +[2] Created a new CMake-based build system for the Visual C++ and MinGW builds.
 +
 +[3] Grayscale bitmaps can now be compressed from/decompressed to using the
 +TurboJPEG API.
 +
 +[4] jpgtest can now be used to test decompression performance with existing
 +JPEG images.
 +
 +[5] If the default install prefix (/opt/libjpeg-turbo) is used, then
 +'make install' now creates /opt/libjpeg-turbo/lib32 and
 +/opt/libjpeg-turbo/lib64 sym links to duplicate the behavior of the binary
 +packages.
 +
 +[6] All symbols in the libjpeg-turbo dynamic library are now versioned, even
 +when the library is built with libjpeg v6b emulation.
 +
 +[7] Added arithmetic encoding and decoding support (can be disabled with
 +configure or CMake options)
 +
 +[8] Added a TJ_YUV flag to the TurboJPEG API, which causes both the compressor
 +and decompressor to output planar YUV images.
 +
 +[9] Added an extended version of tjDecompressHeader() to the TurboJPEG API,
 +which allows the caller to determine the type of subsampling used in a JPEG
 +image.
 +
 +[10] Added further protections against invalid Huffman codes.
 +
 +
 +1.0.1
 +=====
 +
 +[1] The Huffman decoder will now handle erroneous Huffman codes (for instance,
 +from a corrupt JPEG image.)  Previously, these would cause libjpeg-turbo to
 +crash under certain circumstances.
 +
 +[2] Fixed typo in SIMD dispatch routines that was causing 4:2:2 upsampling to
 +be used instead of 4:2:0 when decompressing JPEG images using SSE2 code.
 +
 +[3] configure script will now automatically determine whether the
 +INCOMPLETE_TYPES_BROKEN macro should be defined.
 +
 +
 +1.0.0
 +=====
 +
 +[1] 2983700: Further FreeBSD build tweaks (no longer necessary to specify
 +--host when configuring on a 64-bit system)
 +
 +[2] Created sym. links in the Unix/Linux packages so that the TurboJPEG
 +include file can always be found in /opt/libjpeg-turbo/include, the 32-bit
 +static libraries can always be found in /opt/libjpeg-turbo/lib32, and the
 +64-bit static libraries can always be found in /opt/libjpeg-turbo/lib64.
 +
 +[3] The Unix/Linux distribution packages now include the libjpeg run-time
 +programs (cjpeg, etc.) and man pages.
 +
 +[4] Created a 32-bit supplementary package for amd64 Debian systems, which
 +contains just the 32-bit libjpeg-turbo libraries.
 +
 +[5] Moved the libraries from */lib32 to */lib in the i386 Debian package.
 +
 +[6] Include distribution package for Cygwin
 +
 +[7] No longer necessary to specify --without-simd on non-x86 architectures, and
 +unit tests now work on those architectures.
 +
 +
 +0.0.93
 +======
 +
 +[1] 2982659, Fixed x86-64 build on FreeBSD systems
 +
 +[2] 2988188: Added support for Windows 64-bit systems
 +
 +
 +0.0.91
 +======
 +
 +[1] Added documentation to .deb packages
 +
 +[2] 2968313: Fixed data corruption issues when decompressing large JPEG images
 +and/or using buffered I/O with the libjpeg-turbo decompressor
 +
 +
 +0.0.90
 +======
 +
 +Initial release
diff --cc change.log
index c7885a7892ae57775866525bbc58cfcf32c22ca3,729bca6cfa9e38c067a244dd6d17d8240bf85302..ebd51e37011529323798a4e677cec0509e29f5cc
@@@ -4,6 -1,37 +4,15 @@@ information relevant to libjpeg-turbo
  CHANGE LOG for Independent JPEG Group's JPEG software
  
  
 -This feature allows true lossless JPEG coding of RGB color images.
 -The recommended command for this purpose is currently
 -cjpeg -rgb -block 1 -arithmetic.
 -SmartScale capable decoder (introduced with IJG JPEG 8) required.
+ Version 8d  15-Jan-2012
+ -----------------------
+ Add cjpeg -rgb option to create RGB JPEG files.
+ Using this switch suppresses the conversion from RGB
+ colorspace input to the default YCbCr JPEG colorspace.
 -Add option to disable the region adjustment in the transupp crop code.
 -Thank to Jeffrey Friedl for the suggestion.
 -
 -Thank to Richard Jones and Edd Dawson for various minor corrections.
 -
 -Thank to Akim Demaille for configure.ac cleanup.
 -
 -
 -Version 8c  16-Jan-2011
 ------------------------
 -
 -Add option to compression library and cjpeg (-block N) to use
 -different DCT block size.
 -All N from 1 to 16 are possible.  Default is 8 (baseline format).
 -Larger values produce higher compression,
 -smaller values produce higher quality.
 -SmartScale capable decoder (introduced with IJG JPEG 8) required.
 -
+ Thank to Michael Koch for the initial suggestion.
  Version 8b  16-May-2010
  -----------------------
  
diff --cc cjpeg.1
index f59d290be2d076d055168958d36bd843beef901b,c10f9712640643e32b4f4c5247029dab65c91dce..d336cc8b829c274498d17ecb98ea2ec24261fd98
+++ b/cjpeg.1
@@@ -49,6 -49,14 +49,11 @@@ By sayin
  .BR \-grayscale ,
  you'll get a smaller JPEG file that takes less time to process.
  .TP
 -Use this switch in combination with the
 -.BI \-block " N"
 -switch (see below) for lossless JPEG coding.
+ .B \-rgb
+ Create RGB JPEG file.
+ Using this switch suppresses the conversion from RGB
+ colorspace input to the default YCbCr JPEG colorspace.
+ .TP
  .B \-optimize
  Perform optimization of entropy encoding parameters.  Without this, default
  encoding parameters are used.
diff --cc cjpeg.c
index 703ce100e2fad76bc9102242fce38928fa275fc7,9a9a09a72a541550e2173a38867983d7bd8acf68..495a5bd085212ea707ff70e24b00637138296926
+++ b/cjpeg.c
@@@ -1,11 -1,9 +1,11 @@@
  /*
   * cjpeg.c
   *
 + * This file was part of the Independent JPEG Group's software:
   * Copyright (C) 1991-1998, Thomas G. Lane.
-  * Modified 2003-2008 by Guido Vollbeding.
+  * Modified 2003-2011 by Guido Vollbeding.
 - * This file is part of the Independent JPEG Group's software.
 + * Modifications:
 + * Copyright (C) 2010, D. R. Commander.
   * For conditions of distribution and use, see the accompanying README file.
   *
   * This file contains a command-line user interface for the JPEG compressor.
diff --cc usage.txt
index 496d9ce03bd4a111649cb001bddbac897d2b154c,de9def7171445c1b97d40a0f4819821564f907c6..775a5440bd776d3f83848aa14506e350a1b65923
+++ b/usage.txt
@@@ -80,6 -77,12 +80,10 @@@ The basic command line switches for cjp
                        saying -grayscale, you'll get a smaller JPEG file that
                        takes less time to process.
  
 -                      Use this switch in combination with the -block N
 -                      switch (see below) for lossless JPEG coding.
+       -rgb            Create RGB JPEG file.
+                       Using this switch suppresses the conversion from RGB
+                       colorspace input to the default YCbCr JPEG colorspace.
        -optimize       Perform optimization of entropy encoding parameters.
                        Without this, default encoding parameters are used.
                        -optimize usually makes the JPEG file a little smaller,