1CHANGE LOG for Independent JPEG Group's JPEG software 2 3 4Version 9b 17-Jan-2016 5----------------------- 6 7Improvements and optimizations in DCT and color calculations. 8Normalize range limit array composition and access pattern. 9Thank to Sia Furler and Maddie Ziegler for inspiration. 10 11Use merged upsample with scaled DCT sizes larger than 8. 12Thank to Taylor Hatala for inspiration. 13 14Check for excessive comment lengths in argument parsing in wrjpgcom.c. 15Thank to Julian Cohen for hint. 16 17Add makefile.b32 for use with Borland C++ 32-bit (bcc32). 18Thank to Joe Slater for contribution. 19 20Document 'f' specifier for jpegtran -crop specification. 21Thank to Michele Martone for suggestion. 22 23Use defined value from header instead of hardwired number in rdswitch.c. 24Thank to Robert Sprowson for hint. 25 26 27Version 9a 19-Jan-2014 28----------------------- 29 30Add support for wide gamut color spaces (JFIF version 2). 31Improve clarity and accuracy in color conversion modules. 32Note: Requires rebuild of test images. 33 34Extend the bit depth support to all values from 8 to 12 35(BITS_IN_JSAMPLE configuration option in jmorecfg.h). 36jpegtran now supports N bits sample data precision with all N from 8 to 12 37in a single instance. Thank to Roland Fassauer for inspiration. 38 39Try to resolve issues with new boolean type definition. 40Thank also to v4hn for suggestion. 41 42Enable option to use default Huffman tables for lossless compression 43(for hardware solution), and in this case improve lossless RGB compression 44with reversible color transform. Thank to Benny Alexandar for hint. 45 46Extend the entropy decoding structure, so that extraneous bytes between 47compressed scan data and following marker can be reported correctly. 48Thank to Nigel Tao for hint. 49 50Add jpegtran -wipe option and extension for -crop. 51Thank to Andrew Senior, David Clunie, and Josef Schmid for suggestion. 52 53 54Version 9 13-Jan-2013 55---------------------- 56 57Add cjpeg -rgb1 option to create an RGB JPEG file, and insert 58a simple reversible color transform into the processing which 59significantly improves the compression. 60The recommended command for lossless coding of RGB images is now 61cjpeg -rgb1 -block 1 -arithmetic. 62As said, this option improves the compression significantly, but 63the files are not compatible with JPEG decoders prior to IJG v9 64due to the included color transform. 65The used color transform and marker signaling is compatible with 66other JPEG standards (e.g., JPEG-LS part 2). 67 68Remove the automatic de-ANSI-fication support (Automake 1.12). 69Thank also to Nitin A Kamble for suggestion. 70 71Add remark for jpeg_mem_dest() in jdatadst.c. 72Thank to Elie-Gregoire Khoury for the hint. 73 74Support files with invalid component identifiers (created 75by Adobe PDF). Thank to Robin Watts for the suggestion. 76 77Adapt full buffer case in jcmainct.c for use with scaled DCT. 78Thank to Sergii Biloshytskyi for the suggestion. 79 80Add type identifier for declaration of noreturn functions. 81Thank to Brett L. Moore for the suggestion. 82 83Correct argument type in format string, avoid compiler warnings. 84Thank to Vincent Torri for hint. 85 86Add missing #include directives in configuration checks, avoid 87configuration errors. Thank to John Spencer for the hint. 88 89 90Version 8d 15-Jan-2012 91----------------------- 92 93Add cjpeg -rgb option to create RGB JPEG files. 94Using this switch suppresses the conversion from RGB 95colorspace input to the default YCbCr JPEG colorspace. 96This feature allows true lossless JPEG coding of RGB color images. 97The recommended command for this purpose is currently 98cjpeg -rgb -block 1 -arithmetic. 99SmartScale capable decoder (introduced with IJG JPEG 8) required. 100Thank to Michael Koch for the initial suggestion. 101 102Add option to disable the region adjustment in the transupp crop code. 103Thank to Jeffrey Friedl for the suggestion. 104 105Thank to Richard Jones and Edd Dawson for various minor corrections. 106 107Thank to Akim Demaille for configure.ac cleanup. 108 109 110Version 8c 16-Jan-2011 111----------------------- 112 113Add option to compression library and cjpeg (-block N) to use 114different DCT block size. 115All N from 1 to 16 are possible. Default is 8 (baseline format). 116Larger values produce higher compression, 117smaller values produce higher quality. 118SmartScale capable decoder (introduced with IJG JPEG 8) required. 119 120 121Version 8b 16-May-2010 122----------------------- 123 124Repair problem in new memory source manager with corrupt JPEG data. 125Thank to Ted Campbell and Samuel Chun for the report. 126 127Repair problem in Makefile.am test target. 128Thank to anonymous user for the report. 129 130Support MinGW installation with automatic configure. 131Thank to Volker Grabsch for the suggestion. 132 133 134Version 8a 28-Feb-2010 135----------------------- 136 137Writing tables-only datastreams via jpeg_write_tables works again. 138 139Support 32-bit BMPs (RGB image with Alpha channel) for read in cjpeg. 140Thank to Brett Blackham for the suggestion. 141 142Improve accuracy in floating point IDCT calculation. 143Thank to Robert Hooke for the hint. 144 145 146Version 8 10-Jan-2010 147---------------------- 148 149jpegtran now supports the same -scale option as djpeg for "lossless" resize. 150An implementation of the JPEG SmartScale extension is required for this 151feature. A (draft) specification of the JPEG SmartScale extension is 152available as a contributed document at ITU and ISO. Revision 2 or later 153of the document is required (latest document version is Revision 3). 154The SmartScale extension will enable more features beside lossless resize 155in future implementations, as described in the document (new compression 156options). 157 158Add sanity check in BMP reader module to avoid cjpeg crash for empty input 159image (thank to Isaev Ildar of ISP RAS, Moscow, RU for reporting this error). 160 161Add data source and destination managers for read from and write to 162memory buffers. New API functions jpeg_mem_src and jpeg_mem_dest. 163Thank to Roberto Boni from Italy for the suggestion. 164 165 166Version 7 27-Jun-2009 167---------------------- 168 169New scaled DCTs implemented. 170djpeg now supports scalings N/8 with all N from 1 to 16. 171cjpeg now supports scalings 8/N with all N from 1 to 16. 172Scaled DCTs with size larger than 8 are now also used for resolving the 173common 2x2 chroma subsampling case without additional spatial resampling. 174Separate spatial resampling for those kind of files is now only necessary 175for N>8 scaling cases. 176Furthermore, separate scaled DCT functions are provided for direct resolving 177of the common asymmetric subsampling cases (2x1 and 1x2) without additional 178spatial resampling. 179 180cjpeg -quality option has been extended for support of separate quality 181settings for luminance and chrominance (or in general, for every provided 182quantization table slot). 183New API function jpeg_default_qtables() and q_scale_factor array in library. 184 185Added -nosmooth option to cjpeg, complementary to djpeg. 186New variable "do_fancy_downsampling" in library, complement to fancy 187upsampling. Fancy upsampling now uses direct DCT scaling with sizes 188larger than 8. The old method is not reversible and has been removed. 189 190Support arithmetic entropy encoding and decoding. 191Added files jaricom.c, jcarith.c, jdarith.c. 192 193Straighten the file structure: 194Removed files jidctred.c, jcphuff.c, jchuff.h, jdphuff.c, jdhuff.h. 195 196jpegtran has a new "lossless" cropping feature. 197 198Implement -perfect option in jpegtran, new API function 199jtransform_perfect_transform() in transupp. (DP 204_perfect.dpatch) 200 201Better error messages for jpegtran fopen failure. 202(DP 203_jpegtran_errmsg.dpatch) 203 204Fix byte order issue with 16bit PPM/PGM files in rdppm.c/wrppm.c: 205according to Netpbm, the de facto standard implementation of the PNM formats, 206the most significant byte is first. (DP 203_rdppm.dpatch) 207 208Add -raw option to rdjpgcom not to mangle the output. 209(DP 205_rdjpgcom_raw.dpatch) 210 211Make rdjpgcom locale aware. (DP 201_rdjpgcom_locale.dpatch) 212 213Add extern "C" to jpeglib.h. 214This avoids the need to put extern "C" { ... } around #include "jpeglib.h" 215in your C++ application. Defining the symbol DONT_USE_EXTERN_C in the 216configuration prevents this. (DP 202_jpeglib.h_c++.dpatch) 217 218 219Version 6b 27-Mar-1998 220----------------------- 221 222jpegtran has new features for lossless image transformations (rotation 223and flipping) as well as "lossless" reduction to grayscale. 224 225jpegtran now copies comments by default; it has a -copy switch to enable 226copying all APPn blocks as well, or to suppress comments. (Formerly it 227always suppressed comments and APPn blocks.) jpegtran now also preserves 228JFIF version and resolution information. 229 230New decompressor library feature: COM and APPn markers found in the input 231file can be saved in memory for later use by the application. (Before, 232you had to code this up yourself with a custom marker processor.) 233 234There is an unused field "void * client_data" now in compress and decompress 235parameter structs; this may be useful in some applications. 236 237JFIF version number information is now saved by the decoder and accepted by 238the encoder. jpegtran uses this to copy the source file's version number, 239to ensure "jpegtran -copy all" won't create bogus files that contain JFXX 240extensions but claim to be version 1.01. Applications that generate their 241own JFXX extension markers also (finally) have a supported way to cause the 242encoder to emit JFIF version number 1.02. 243 244djpeg's trace mode reports JFIF 1.02 thumbnail images as such, rather 245than as unknown APP0 markers. 246 247In -verbose mode, djpeg and rdjpgcom will try to print the contents of 248APP12 markers as text. Some digital cameras store useful text information 249in APP12 markers. 250 251Handling of truncated data streams is more robust: blocks beyond the one in 252which the error occurs will be output as uniform gray, or left unchanged 253if decoding a progressive JPEG. The appearance no longer depends on the 254Huffman tables being used. 255 256Huffman tables are checked for validity much more carefully than before. 257 258To avoid the Unisys LZW patent, djpeg's GIF output capability has been 259changed to produce "uncompressed GIFs", and cjpeg's GIF input capability 260has been removed altogether. We're not happy about it either, but there 261seems to be no good alternative. 262 263The configure script now supports building libjpeg as a shared library 264on many flavors of Unix (all the ones that GNU libtool knows how to 265build shared libraries for). Use "./configure --enable-shared" to 266try this out. 267 268New jconfig file and makefiles for Microsoft Visual C++ and Developer Studio. 269Also, a jconfig file and a build script for Metrowerks CodeWarrior 270on Apple Macintosh. makefile.dj has been updated for DJGPP v2, and there 271are miscellaneous other minor improvements in the makefiles. 272 273jmemmac.c now knows how to create temporary files following Mac System 7 274conventions. 275 276djpeg's -map switch is now able to read raw-format PPM files reliably. 277 278cjpeg -progressive -restart no longer generates any unnecessary DRI markers. 279 280Multiple calls to jpeg_simple_progression for a single JPEG object 281no longer leak memory. 282 283 284Version 6a 7-Feb-96 285-------------------- 286 287Library initialization sequence modified to detect version mismatches 288and struct field packing mismatches between library and calling application. 289This change requires applications to be recompiled, but does not require 290any application source code change. 291 292All routine declarations changed to the style "GLOBAL(type) name ...", 293that is, GLOBAL, LOCAL, METHODDEF, EXTERN are now macros taking the 294routine's return type as an argument. This makes it possible to add 295Microsoft-style linkage keywords to all the routines by changing just 296these macros. Note that any application code that was using these macros 297will have to be changed. 298 299DCT coefficient quantization tables are now stored in normal array order 300rather than zigzag order. Application code that calls jpeg_add_quant_table, 301or otherwise manipulates quantization tables directly, will need to be 302changed. If you need to make such code work with either older or newer 303versions of the library, a test like "#if JPEG_LIB_VERSION >= 61" is 304recommended. 305 306djpeg's trace capability now dumps DQT tables in natural order, not zigzag 307order. This allows the trace output to be made into a "-qtables" file 308more easily. 309 310New system-dependent memory manager module for use on Apple Macintosh. 311 312Fix bug in cjpeg's -smooth option: last one or two scanlines would be 313duplicates of the prior line unless the image height mod 16 was 1 or 2. 314 315Repair minor problems in VMS, BCC, MC6 makefiles. 316 317New configure script based on latest GNU Autoconf. 318 319Correct the list of include files needed by MetroWerks C for ccommand(). 320 321Numerous small documentation updates. 322 323 324Version 6 2-Aug-95 325------------------- 326 327Progressive JPEG support: library can read and write full progressive JPEG 328files. A "buffered image" mode supports incremental decoding for on-the-fly 329display of progressive images. Simply recompiling an existing IJG-v5-based 330decoder with v6 should allow it to read progressive files, though of course 331without any special progressive display. 332 333New "jpegtran" application performs lossless transcoding between different 334JPEG formats; primarily, it can be used to convert baseline to progressive 335JPEG and vice versa. In support of jpegtran, the library now allows lossless 336reading and writing of JPEG files as DCT coefficient arrays. This ability 337may be of use in other applications. 338 339Notes for programmers: 340* We changed jpeg_start_decompress() to be able to suspend; this makes all 341decoding modes available to suspending-input applications. However, 342existing applications that use suspending input will need to be changed 343to check the return value from jpeg_start_decompress(). You don't need to 344do anything if you don't use a suspending data source. 345* We changed the interface to the virtual array routines: access_virt_array 346routines now take a count of the number of rows to access this time. The 347last parameter to request_virt_array routines is now interpreted as the 348maximum number of rows that may be accessed at once, but not necessarily 349the height of every access. 350 351 352Version 5b 15-Mar-95 353--------------------- 354 355Correct bugs with grayscale images having v_samp_factor > 1. 356 357jpeg_write_raw_data() now supports output suspension. 358 359Correct bugs in "configure" script for case of compiling in 360a directory other than the one containing the source files. 361 362Repair bug in jquant1.c: sometimes didn't use as many colors as it could. 363 364Borland C makefile and jconfig file work under either MS-DOS or OS/2. 365 366Miscellaneous improvements to documentation. 367 368 369Version 5a 7-Dec-94 370-------------------- 371 372Changed color conversion roundoff behavior so that grayscale values are 373represented exactly. (This causes test image files to change.) 374 375Make ordered dither use 16x16 instead of 4x4 pattern for a small quality 376improvement. 377 378New configure script based on latest GNU Autoconf. 379Fix configure script to handle CFLAGS correctly. 380Rename *.auto files to *.cfg, so that configure script still works if 381file names have been truncated for DOS. 382 383Fix bug in rdbmp.c: didn't allow for extra data between header and image. 384 385Modify rdppm.c/wrppm.c to handle 2-byte raw PPM/PGM formats for 12-bit data. 386 387Fix several bugs in rdrle.c. 388 389NEED_SHORT_EXTERNAL_NAMES option was broken. 390 391Revise jerror.h/jerror.c for more flexibility in message table. 392 393Repair oversight in jmemname.c NO_MKTEMP case: file could be there 394but unreadable. 395 396 397Version 5 24-Sep-94 398-------------------- 399 400Version 5 represents a nearly complete redesign and rewrite of the IJG 401software. Major user-visible changes include: 402 * Automatic configuration simplifies installation for most Unix systems. 403 * A range of speed vs. image quality tradeoffs are supported. 404 This includes resizing of an image during decompression: scaling down 405 by a factor of 1/2, 1/4, or 1/8 is handled very efficiently. 406 * New programs rdjpgcom and wrjpgcom allow insertion and extraction 407 of text comments in a JPEG file. 408 409The application programmer's interface to the library has changed completely. 410Notable improvements include: 411 * We have eliminated the use of callback routines for handling the 412 uncompressed image data. The application now sees the library as a 413 set of routines that it calls to read or write image data on a 414 scanline-by-scanline basis. 415 * The application image data is represented in a conventional interleaved- 416 pixel format, rather than as a separate array for each color channel. 417 This can save a copying step in many programs. 418 * The handling of compressed data has been cleaned up: the application can 419 supply routines to source or sink the compressed data. It is possible to 420 suspend processing on source/sink buffer overrun, although this is not 421 supported in all operating modes. 422 * All static state has been eliminated from the library, so that multiple 423 instances of compression or decompression can be active concurrently. 424 * JPEG abbreviated datastream formats are supported, ie, quantization and 425 Huffman tables can be stored separately from the image data. 426 * And not only that, but the documentation of the library has improved 427 considerably! 428 429 430The last widely used release before the version 5 rewrite was version 4A of 43118-Feb-93. Change logs before that point have been discarded, since they 432are not of much interest after the rewrite. 433