The most significant changes in Version 4.0 relate to support for the new JPIP standard (JPEG2000, Part 9), which is currently at CD (Committee Draft) status.
- JPIP is JPEG2000's standard for interactive image dissemination over the internet, including the dissemination of files with multiple code-streams and complex meta-data. A detailed public description of the JPIP standard is not yet available, but some pointers may be found here.
- In order to offer a comprehensive services in support of JPIP, Kakadu's JP2 file format architecture as been completely revamped to provide a hierarchical family of objects which allow for JP2 family file format parsers to remain completely oblivious to whether a file is local or being served remotely by a dynamic JPIP server.
- Although fully derived instances of this architecture are currently provided only for raw code-streams and the JP2 file format itself, almost all the effort required to fully support dynamic user-sensitive delivery and processing of other JP2 family file formats has already been made. Version 4.1 is expected to provide a complete solution for JPX and a complete solution for interactive delivery of MJ2 (motion JPEG2000) content should also follow shortly.
- Meanwhile, there are many immediate benefits, including the ability to include, service and process arbitrary application-defined additional boxes within JP2 files. The "kdu_show" utility comes with a meta-data viewer (use the `m' accelerator of the view menu to activate it) which demonstrates the incremental appearance of meta-data at the client in the midst of a JPIP interactive session. There are various ways to control such delivery, e.g. by explicitly specifying a "metareq" request field in the URL used to access a remote image, but for the moment these features are mainly for testing JPIP support and the integrity of the underlying architecture.
Version 4.0 now includes a collection of three powerful high level objects designed to dramatically simplify the development of applications based on Kakadu.
- The first such object, `kdu_region_decompressor', is a revamped version of the old `kdr_region_decompressor' object which was used to implement "kdu_show" and was also a popular tool for application developers. The new version supports the management of additional channels (including alpha channels) along with the imagery, along with a rich set of memory buffer organizations and data precisions, which should satisfy the needs of virtually all interactive imaging applications.
- The other two support objects, `kdu_stripe_compressor' and `kdu_stripe_decompressor' dramatically simplify the implementation of memory-resident compression and decompression applications. Again, they provide support for a rich set of memory buffer organizations and data precisions. A single function call can compress an image residing in memory, or decompress an image into a memory buffer. More usefully, however, the application can compress or decompress images incrementally in stripes, based on buffers which suit the application's needs. The objects even provide educated recommendations on the best stripe configurations to use, keeping application-specific code to a bare minimum.
- These objects are now used to make the simple_example_c" and "simple_example_d" applications significantly simpler again. They are also demonstrated by two new example applications, "kdu_buffered_compress" and "kdu_buffered_expand" which serve to bridge the gap between the very simple demonstrations and the much more complex "kdu_compress" and "kdu_expand" examples.
Amongst other matters, the documentation has been updated, all bugs reported to date have been fixed, and the block truncation prediction algorithm has been made a great deal more robust than it was before, without sacrificing the speed improvements for which it has been responsible.