CHANGELOG for Independent JPEG Group's JPEG software Version 4 10-Dec-92 -------------------- Revised user interface: switches now use names instead of single letters. (Old switch letters are acceptable abbreviations of new switch names, EXCEPT for djpeg's old -g, -D, -1 switches.) cjpeg has several new switches. Provision for smoothing the input image added to cjpeg. This helps a lot with converting dithered GIFs to JPEG. Decoder upsampling now uses interpolation instead of pixel replication; this improves rendering of sharp colored edges. The decompressor will now try to continue after detecting an error in the compressed data, instead of just aborting. If the input file has restart markers, full synchronization will usually be regained at the next undamaged restart marker. (But you're still out of luck if any of the header markers are corrupt.) Substantial improvements in speed; DCT accuracy improved too. Numerous minor changes to improve portability. egetopt.c, which was by far the worst portability problem, is gone altogether. A few bugfixes, sigh (mostly affecting DOS implementations only). Bugfix: on DOS machines, cjpeg -o would fail on grayscale input files. Bugfix: one-pass quantization to more than 64 color levels would fail on 16-bit-int machines. This could only happen with quantized grayscale output. A couple of changes affect code that calls the JPEG subroutine library: 1. The parameter struct tag names are now capitalized (Compress_info_struct, Compress_methods_struct, Decompress_info_struct, Decompress_methods_struct, and External_methods_struct). This makes it easier to live with brain-damaged compilers with short identifier lengths. (All identifiers used in the JPEG code are now unique within the first 16 characters.) 2. If you are not calling jselerror(), you need to initialize three new fields in the emethods structure, typically as follows: e_methods.num_warnings = 0; /* no warnings emitted yet */ e_methods.first_warning_level = 0; /* display first corrupt-data warning */ e_methods.more_warning_level = 3; /* but suppress additional ones */ These fields control handling of corrupt-data warnings. Version 3 17-Mar-92 -------------------- Memory manager is finally capable of swapping to temp files. There are separate versions of jmemsys.c for no temp files (same behavior as older versions), simple temp files with or without tmpfile(), and a DOS-specific version (including special code for EMS and XMS). This is probably much more system-dependent than any of the older code; some bugs may surface here. Hooks added for user interface to install progress monitoring routine (percent-done bar, etc). See comments with dummy progress_monitor routines in jcdeflts.c, jddeflts.c. Two-pass color quantization (finally!). This is now the default method when quantizing; say '-1' to djpeg for quick-and-ugly 1-pass method. There is a test file for checking 2-pass quantization and GIF output. Fixed bug in jcopy_block_row that broke cjpeg -o option and djpeg -b option on MSDOS machines. Miscellaneous small speedups; notably, DCT computation rearranged so that GCC "inline" feature is no longer needed for good code quality. File config.c renamed ckconfig.c to avoid name conflict with /etc/config on Unix systems. Added example.c to document usage of JPEG subroutines better. Memory manager now knows how to release all storage during error exit --- avoids memory leak when using JPEG as subroutines. This implies a couple small changes to the subroutine interface: the old free_defaults subroutines are no longer needed, but if you have a replacement error_exit method then it must call the new free_all method. Also, jselvirtmem renamed to jselmemmgr. Code for reading Targa files with 32-bit pixels was incorrect. Colorspace conversion slightly faster and more accurate; because of this, old "test" files will no longer match bit-for-bit. Version 2 13-Dec-91 -------------------- Documentation improved a little --- there are man pages now. Installation instructions moved from README to a separate file SETUP. New program config.c is provided to help you get the configuration options right. This should make installation a lot more foolproof. Sense of djpeg -D switch reversed: dithering is now ON by default. RLE image file support added (thanks to Mike Lijewski). Targa image file support added (thanks to Lee Crocker). PPM input now accepts all PPM and PGM files. Bug fix: on machines where 'int' is 16 bits, high-Q-setting JPEG files were not decoded correctly. Numerous changes to improve portability. There should be few or no compiler warnings now. Makefiles cleaned up; defaults now appropriate for production use rather than debugging. Subroutine interface cleaned up. If you wrote code based on version 1's jcmain/jdmain, you'll need to change it, but it should get a little shorter and simpler. Version 1 7-Oct-91 -------------------- Initial public release.