This is a very major upgrade. The most significant changes relate to support for features of Part-2 of the JPEG2000 standard. At the same time, considerable effort has been devoted to improving the efficiency and memory utilization in critical portions of the core system. This new version contains something for just about every user of Kakadu, from significantly more efficient video rendering (through `kdu_region_compositor') to efficient interactive inspection of medical volumes compressed using multi-component transforms. A variety of minor bugs and quirks have also been fixed. Here is a brief list of the main new features:
1) Four new dead-easy demo code fragments are implemented inside the "kdu_render" demo app, to get you up and running as quickly as possible, or give you one-line solutions to decompression/rendering problems for any raw codestream, JP2 file, JPX file, MJ2 frame or JPX animation frame. These serve as a good entry point to the much richer set of features offered by Kakadu rendering tools.
2) Fully supports Part-2 arbitrary transform kernels, allowing user defined DWT kernels.
3) Fully supports Part-2 arbitrary decomposition styles, including wavelet packet decomposition structures, and unbalanced sub-sampling structures in which successive resolution levels might have identical horizontal dimensions or identical vertical dimensions.
4) Fully supports Part-2 multi-component transforms, including arbitrary combinations of matrix-based decorrelation transforms, dependency transforms and multi-component DWT transforms, with arbitrary transform kernels. Both reversible and irreversible transform operators are fully supported. Apart from constraints which were most likely accidentally omitted from the standard, Kakadu imposes no unreasonable constraints on the full generality of multi-component transform structures supported by Part 2. However, the possibilities are so rich that it may take considerable time to fully utilize these features. Kakadu's minimum-effort policy is fully maintained in the presence of multi-component transforms -- this is the policy of performing only the minimum set of required operations and allocating only the minimum amount of memory required to decompress the spatial regions and output image components which are of interest to the application. Kakadu's JPIP client and server components also properly handle the interactive browsing of images which have been compressed using the multi-component transform. Note, however, that the only JPIP mechanism which allows requests to be expressed in terms of output components from a multi-component transform is the "context" command -- this must be used in conjunction with JPX compositing layers, which are defined in terms of multi-component transform output components instead of raw codestream components prior to multi-component transform inversion. What this means in practice is that your components must be individually identified by separate JPX compositing layers if you want to be able to browse multi-component transform output components individually using JPIP. This is exactly the sort of thing you might like to do to browse a medical image volume or a hyperspectral image set. You can test all this out with the "kdu_server" and "kdu_show" demo apps, being careful to associate the output image components with separate JPX layers during compression -- this can be done using the `-jpx_layers' argument to "kdu_compress". For more on multi-component transforms, be sure to consult the "kakadu.pdf" overview document, which has been upgraded to reflect features found in version 5.0 -- see especially Section 5 in this document.
5) Now uses correct Part-2 syntax to write codestreams which use the alternate code-block alignment required for compressed-domain rotation (as performed by "kdu_transcode" for example). Previous versions included this only as an experimental feature, without correct Part-2 marker segment syntax.
6) Improvements to platform-dependent speedups allow throughput increases of around 20% at low to moderate bit-rates on Pentium-4 platforms. The Altivec implementation (Power PC vector processor) now also works correctly under all conditions, including region-of-interest decompression. Speedups have been extended to arbitrary wavelet transform kernels and also to inter-component wavelet transforms, as they may appear in a Part-2 multi-component transform.
7) Included fixes supplied by a 3'rd part to the way in which "kdu_hyperdoc" generates Java (JNI) interfaces to Kakadu. These fixes avoid some rare race conditions which could previously occur in multi-threaded Java applications using Kakadu.