============================================================================== Q C C P A C K S P I H T Version 0.57, 30-jun-2008 Copyright (C) 1997-2008 James E. Fowler ------------------------------------------------------------------------------ Version 0.57: No changes. ------------------------------------------------------------------------------ Version 0.56: No changes. ------------------------------------------------------------------------------ Version 0.55: No changes. ------------------------------------------------------------------------------ Version 0.54: Minor bug fix. ------------------------------------------------------------------------------ Version 0.53: No changes. ------------------------------------------------------------------------------ Version 0.52: No changes. ------------------------------------------------------------------------------ Version 0.51: The asymmetric-packet zerotree structure has been added to the 3D-SPIHT coder. The asymmetric-packet zerotree is now the default for 3D-SPIHT coding with a wavelet-packet transform. ------------------------------------------------------------------------------ Version 0.50: A few minor bugs have been fixed. ------------------------------------------------------------------------------ Version 0.49: No changes. ------------------------------------------------------------------------------ Version 0.48: A few minor bugs have been fixed. ------------------------------------------------------------------------------ Version 0.47: Added an alternative interface to 3D-SPIHT encoding and decoding that permits use of an external DWT and inverse DWT instead of the one built into the 3D-SPIHT coder. Fixed a minor memory leak. ------------------------------------------------------------------------------ Version 0.46: Added an alternative interface to SPIHT encoding and decoding that permits use of an external DWT and inverse DWT instead of the one built into the SPIHT coder. ------------------------------------------------------------------------------ Version 0.45: A few minor bugs have been fixed. ------------------------------------------------------------------------------ Version 0.44: The 3D-SPIHT algorithm has been added, resulting in new utilities spihtencode3d and spihtdecode3d. These coders code 3D image cubes, using either a dyadic or wavelet-packet 3D DWT. ------------------------------------------------------------------------------ Version 0.43: Minor bug fix. ------------------------------------------------------------------------------ Version 0.42: The method that the SPIHT encoder uses to handle shape-adaptive coding has been slightly refined. Specifically, the refinement due to Minami et al. has been incorporated. Essentially, transparent regions are treated as being permanently insignificant and processed as usual in SPIHT. However, any sets that lie entirely within a transparent region are discarded from the SPIHT lists and are thus not coded. This usually results in a small gain during shape-adaptive coding. ------------------------------------------------------------------------------ Version 0.41: spihtencode and QccSPIHTEncode() have been modified so as to produce a rate-distortion profile on demand while encoding. Essentially, this rate distortion profile is a collection of numerous points on the operational rate-distortion curve, with distortion calculated in the wavelet domain. ------------------------------------------------------------------------------ Version 0.40: No changes. ------------------------------------------------------------------------------ Version 0.39: No changes. ------------------------------------------------------------------------------ Version 0.38: Minor bug fixes. ------------------------------------------------------------------------------ Version 0.37: No changes. ------------------------------------------------------------------------------ Version 0.36: Various bug fixes. ------------------------------------------------------------------------------ Version 0.35: Fixed memory leaks in the SPIHT encoder and decoder. This problem was not noticeable unless you called QccSPIHTEncode() or QccSPIHTDecode() a large number of times in your program. ------------------------------------------------------------------------------ Version 0.34: No changes. ------------------------------------------------------------------------------ Version 0.33: No changes. ------------------------------------------------------------------------------ Version 0.32: No changes. ------------------------------------------------------------------------------ Version 0.31: Minor changes to permit support for multithreaded applications. ------------------------------------------------------------------------------ Version 0.30: Mostly minor bug fixes. ------------------------------------------------------------------------------ Version 0.29: There was a minor bug in the shape-adaptive capability added with the last version. Specifically, in spihtencode, the specified bit rate was used with the size of the image to calculate the target number of bits for the coding. This is correct for entire-image coding; however, for shape-adaptive coding, the actual number of non-transparent pixels, rather than the size of the entire image, should be used in this calculation. This version corrects this problem. ------------------------------------------------------------------------------ Version 0.28: The SPIHT coder has been made capable of shape-adaptive coding. That is, the SPIHT coder can now accept a transparency mask that indicates arbitrarily shaped, non-transparent regions in the image that are to be coded. A shape-adaptive DWT (SA-DWT) is applied to these regions, and all transparent pixels are forever marked as insignificant coefficients. The SPIHT algorithm processes these "transparent coefficients" in a manner identical to that of other insignificant coefficients. Although not considered in the original SPIHT formulation by Said and Pearlman, SA-DWTs have been recently included in Version 2 of the MPEG-4 standard, wherein they are used for texture coding of arbitrarily shaped still objects. The marking of transparency as perpetually insignificant coefficients, has been described for several zerotree-based coders as part of the MPEG-4 effort. In previous versions, several error messages normally accumulate in the QccError message queue due to the method used for stopping encoding when the allotted bit budget is exhausted; QccSPIHTEncode() ignores these messages and the corresponding error codes from low-level routines, but did not clear the messages from the error queue. Calls to QccErrorClearMessages() are now made before normal error-free return from QccSPIHTEncode() and QccSPIHTDecode() so that the error queue correctly reflects the error-free status of the coder. ------------------------------------------------------------------------------ Version 0.27: Due to a change in the underlying QccBitBuffer routines in the QccPack main distribution, bitstreams produced by the QccPackSPIHT Version 0.27 SPIHT coder will not be backward compatible with earlier version of QccPackSPIHT, *nor* will bitstreams produced by earlier QccPackSPIHT versions be readable by Version 0.27. For more information, refer to the RELEASE_NOTES file for the QccPack main distribution. ------------------------------------------------------------------------------ Version 0.26: No changes. ------------------------------------------------------------------------------ Version 0.25: Minor changes to reflect modified interfaces to QccENTArithmeticEncodeStart() and QccENTArithmeticDecodeStart(). ------------------------------------------------------------------------------ Version 0.24: The SPIHT coder has been modified extensively. Support for arithmetic coding has been added. Additionally, the performance of the "binary-uncoded" mode (i.e., encoding without arithmetic coding) has been improved and brought closer to the performance originally reported by Said and Pearlman. An extensive quantitative comparison between the QccPackSPIHT coder and the original reported results now appears in the man page QccSPIHTEncode(3). Bottom line: QccPackSPIHT is now typically only 0.15 dB below reported results in binary-uncoded and arithmetic-coded modes. ------------------------------------------------------------------------------ Version 0.23: Minor build changes which should be transparent to users and developers. ------------------------------------------------------------------------------ Version 0.22: Minor build changes which should be transparent to users and developers. ------------------------------------------------------------------------------ Version 0.21: The only change made in this version is that the SPIHT code has been removed from the "main" QccPack distribution and placed in a separate, optional module that must be downloaded separately. This change arose from concerns that QccPack was not "purely" GPL/LGPL, in its entirety, due to the special non-GPL licensing accompanying the SPIHT code. With SPIHT now in the QccPackSPIHT module, the main QccPack distribution is now completely GPL/LGPL with the module being covered by the special SPIHT license as before. We hope that the downloading a separate module-distribution file and the corresponding minor additional configuration step needed to build QccPack with SPIHT support will not unduly burden users of the QccPack SPIHT implementation. We hope that other algorithms which may similarly require non-GPL licensing, or otherwise best be kept separated from the main QccPack distribution, may be accommodated as additional modules in the future. ==============================================================================