The most significant innovations in v4.3 relate to the handling of massive tiled images, both for compression and decompression. The improvements extend Kakadu's ability to handle large images well beyond the Tera-pixel boundary. These and other significant changes may be summarized as follows:
1) Extended the automatic internal cache management system to automatically swap whole tiles in and out of memory, based on cache thresholds set by the application. This prevents memory growth in applications which require persistent codestream access (to render the stream from multiple points of view), even when there is no PLT (packet-length) pointer information, subject to the presence of tiling. This means that codestreams with contain either multiple tiles or addressable precincts, or both, can now be efficiently manipulated. Applications can obtain the advantages of the new more efficient cache management without any changes at all, although an extra interface function has been provided to allow customization of the tile unloading process.
2) Typical tile templates are now cached internally to the codestream management system, so that the cost of tile instantiation within the codestream management system is substantially reduced, for applications which need to render a massive number of tiles at very low resolution (where the effective tile size can become very small).
3) The core codestream generation machinery can now generate TLM (tile-part-length) marker segments itself, obviating the need for a separate post-processing of the generated codestream with "kdu_maketlm". Most importantly, this functionality even works when codestreams are generated in fragments (see next point).
4) The core codestream generation machinery can now compress tiled images in fragments, where each fragment is compressed independently and can consist of any subset of the tiles from the full codestream. Fragments are automatically stitched together and a correct set of TLM marker segments can be generated for the entire codestream, by selectively rewriting segments of the main header. These features are demonstrated by the new `-frag' argument to the "kdu_compress" demo utility (see "Usage_Examples.txt"), but they have more general application; for example, by clever construction of an appropriate `kdu_compressed_target' object, you can arrange to compress fragments concurrently (e.g., to leverage a multi-CPU architecture) rather than sequentially, as is done by "kdu_compress".
5) The `kdu_region_decompressor::process' functions now provide a great deal more flexibility in the way the dynamic range and signed/unsigned attributes of the rendered sample values can be configured. Whereas you used to have to set a fixed dynamic range for all rendered channels and they all used to be rendered as unsigned quantities, it is now possible to alter this behaviour so that the dynamic ranges and signed/unsigned properties are derived from the relevant codestream and/or file format headers. It is also possible to explicitly provide application-specific per-channel rendering attributes via the `kdu_region_mapping' object. Existing applications should be largely unaffected by these changes, except that applications which render directly from JPX files (rather than going via `kdu_region_compositor') need to supply an additional JPX interfaces to the `kdu_region_mapping::configure' function.
6) The JPX file format reader can now read JPX files which were mistakenly written without a reader requirements box (earlier Algovision writers did this). Omission of the reader requirements box is technically illegal, but that box is so poorly defined as to be next to useless for practical applications, so it is better not to require its existence, rather than than fail to read existing non-compliant files.
7) Modified the JPIP client/server implementation to allow more extensive re-use of TCP transport channels; the channel no longer needs to be closed down at the end of a JPIP session, so it can be re-used in an immediately following session. This allows more efficient disconnect/reconnect cycling and avoids creating the appearance of a denial of service attach in such cases.
8) Fixed a number of bugs in Kakadu's JPIP server implementation, in ROI generation (bug was created accidentally in v4.2) and in the conversion of more exotic JPX colour spaces, such as CIE-Lab (see "Updates.txt").