This is an important upgrade that incorporates major improvements to the multi-threaded core processing sub-system introduced in KDU-7.0, along with numerous enhancements to other aspects of Kakadu and some new features. The KDU-7.1 release is the most stable, efficient and comprehensive version of the regular Kakadu SDK on which to buildapplications -- the speed-pack release has all the same features and robustness, but can be substantially faster again.Here is a brief overview of what is new:
1) Multi-threaded processing sub-system improvements
-- This version contains the full realization of the background codestream processing machinery that was envisaged for the multi-threaded processing system as introduced in KDU-7.0. Background machinery now manages look-ahead reading, parsing and resourcing of code-block and precinct resources, without substantially increasing memory consumption. Background incremental flushing of codestream content during compression is also much more efficient.
-- This release greatly reduces the number of points at which threads might need to take out locks on critical sections, to the extent that multi-threaded processing is almost entirely lockless.100% utilization of CPU resources is achievable even on machines with many CPU cores, to the extent that I/O throughput is adequate for the application of interest and that the application can push/pull image data fast enough.
-- A number of bugs and highly unlikely race conditions have been uncovered through exhaustive testing by us and our numerous licensees.
2) New core codestream generation features
-- Added a new codestream parameter attribute `ORGplt_parts', that can be used to control the points at which packet length information (for random access to precinct data) is partitioned into PLT marker segments. This is useful in constructing codestreams that adhere to recommended configurations described in the NITF JPEG2000 profile specificaion.
-- Provided a new mechanism to discover the number of bytes consumed by markers and marker attributes (i.e., non-packet header and marker bytes).This value is of interest because the `Creslengths' attribute, which is widely used to ensure codestream conformance to various industry profiles, constrains only the number of packet bytes (packet header and packet body bytes).The new feature allows you to discover the number of additional bytes so that they can be included in any required constraints. The "kdu_v_compress" application uses this feature to report additional information that is particularly useful for the generation of codestreams that are guaranteed to conform to the JP2 Broadcast profiles.
-- The rate control capabilities of `kdu_codestream::flush' and`kdu_codestream::auto_flush' have been extended to allow for simultaneous use of oth distortion-length slope thresholds and layer size limits (measured in bytes).Specifically, it is now possible to provide desired slope thresholds (for reasonably constant quality control), together with lower bounds on the size of each quality layer, as well as absolute upper bounds on the sizes of layers, by resolution (via `Creslengths') and the rate control machinery will respect all objectives, giving preference to the absolutely mandatory constraints specified by `Creslengths'.These features are of particular interest for video compression.
3) New/improved file format support: broadcast streams, video, JPX, jp2info -- Added support for the file-format aspects of the broadcast specification found in Annex-M of IS15444-1/AMD3.Previous versions of Kakadu supported only the codestream profiles for broadcast, but not the elementary broadcast stream file format.Broadcast streams have been added as one of the file types supported by the "kdu_v_compress" and "kdu_v_expand' demo apps, which now support some additional command-line arguments.
-- Improved support for interlaced video in the interfaces offered for Motion JPEG2000 and Elementary broadcast streams, and extended the "kdu_v_compress" and "kdu_v_expand" demo apps to support interlaced video, as well as mixed inerlaced/progressive content.
-- Added a new generic facility for generating names and textual representations for JP2 boxes, as used in JP2, JPX and MJ2 files, as well as elementary broadcast streams.
-- Added a new demo app, "kdu_jp2info", that prints XML-compatible descriptions for any JP2-family file or raw codestream, with options to control the level of detail printed.See the usual "Usage_Examples.txt" file for examples.
-- Added new methods `jp2_input_box::open_as' and `jp2_input_box::fork' that can simplify or render more efficient certain types of interaction with JP2-family files.
4) Improvements to rendering by `kdu_region_compositor'
-- Improved the way in which `kdu_region_compositor' scales and places compositing layers on the compositing surface.Specifically, the underlying rational scaling factors now approximate the ideal scaling factors to sufficient accuracy to ensure placement andsizing of image layers correctly, even for compositions involving a massive number of image layers composited onto huge surfaces.
5) JPIP client/server improvements and fixes
-- Slightly improved the way in which complex JPIP `context' requests are converted into individual window regions and resolutions within each codestream associated with the `context', so as to avoid possible accumulation of sizing or positioning errors with largecompositing surfaces formed from many smaller compositing layers.
-- Corrected an oversight in the support of JPX composition instructions with orientation/flipping information.Support for this feature was introduced with KDU-7.0, but was accidentally omitted from the `kdu_clientx' object that is used by Kakadu's JPIP client to inform JPIP servers of the relevant existing cached content (used for stateless requests and/or when a local cache file is maintained by the client and re-used in subsequent browsing sessions).
-- Fixed some extremely subtle bugs in Kakadu's client and server components, that can only be excited in usual circumstances.
6) Implementation of new JPEG2000 features
-- This release contains a preliminary implementation of the new "fast mode" that is the subject of the very recent Ammendment 4 to IS15444-2 (JPEG2000 Part 2).Experience suggests that this mode can improve compression and decompression throughput ofKakadu by approximately 30%, depending on the target compressed bit-rate.
7) Other changes and fixes
-- Fixed some minor problems with the build environments. Specifically Solaris irregularities caused some issues for KDU-7.0, and there was a minor difficulty encountered while building with special compilation options like `KDU_NO_THREADS' and `KDU_NO_SSSE3', as well as OSX builds on quite old versions of GCC.
-- Fixed a problem with the interaction between Java interfaces and Kakadu's multi-threading sub-system that could previously have resulted in thread leaks if Kakadu threads were constructed and destructed repetitively from Java and used to invoke callback functions implemented in Java (i.e. virtual functions of native interface classes that are overridden in Java derived versions of the class).
-- Fixed a number of API documentation errors.