This is most likely the last upgrade which will need to make any significant changes to the Kakadu core system (all changes are, of course, backward compatible).
1) By far the most important new feature in v5.1 is the provision of extensive support for multi-threading, so as to fully leverage the processing resources available on platforms with multiple CPU's, multi-core CPU's and/or hyperthreading CPU's. All of the high level sample processing objects (`kdu_multi_analysis', `kdu_multi_synthesis', `kdu_stripe_compressor', `kdu_stripe_decompressor', `kdu_region_decompressor' and `kdu_region_compositor') provide simple mechanisms to include the processing resources offered by a 'kdu_thread_env' object, which you are free to create and augment with working threads, using `kdu_thread_env::add_thread'. Kakadu also provides you with assistance in determining the optimum number of threads to create. For many applications, upgrading from the original single-threaded processing model to multi-threaded processing requires only a few lines of code. This is demonstrated by most of the demo applications; most of them take a `-num_threads' argument and some provide additional control over double buffering for parallel processing of tile-components, in addition to parallel processing of code-blocks within a tile-component. You can enable multi-threaded processing in "kdu_show" via the "Modes" menu item -- this can significantly speedup video playback, for example, even on a single processor platform if hyperthreading is available.
2) Added new `push_stripe' and `pull_stripe' interface functions to the `kdu_stripe_compressor' and `kdu_stripe_decompressor' objects, respectively, to support 32-bit integer and floating point image sample values, in addition to the existing 8- and 16-bit precision interfaces. These additional interfaces ensure that the high level stripe-oriented objects support all of the data precisions that are supported by the underlying core Kakadu system.
3) Added the Digital Cinema profiles (CINEMA2K and CINEMA4K) to the list of profiles recognized in the codestream SIZ marker segment. These profiles were added about a year ago as an ammendment to Part 1 of the JPEG2000 standard.
4) Added significant support for TIFF and GeoTIFF image I/O to "kdu_compress" and "kdu_expand". Even though image I/O is not really part of the scope of Kakadu, it is required for demonstration purposes and lack of comprehensive TIFF support has been a source of concern for some new users. This has been complicated by the fact that GeoJP2 files include a JP2 box which is really an encapsulated TIFF file. To solve both problems in one go, this new release of Kakadu comes with a simple yet general native TIFF parser/creater, which is not based on any external libraries and integrates well with the other abstract I/O services endemic to Kakadu. As a result, TIFF files can now be read and written by the "kdu_compress" and "kdu_exand" demo applications without the need to link against LIBTIFF (as before). GeoTIFF tags are also extracted by "kdu_compress" and used to create a GeoJP2 box if appropriate. GeoJP2 boxes may be unpacked (if required) and/or written back to GeoTIFF files by "kdu_expand". The new `kdu_tiffdir' object may be used to create/unpack TIFF directories in any file or embedded within any JP2 box. This is useful both for GeoTIFF applications and also for handling JP2-family files which might contain embedded raw imagery.
5) Quite a number of minor bugs have been fixed (all reported bugs, to the best of my knowledge). The most significant bug fix is probably a minor error in the Altivec speedup code for PowerPC platforms, which sometimes caused erroneous decoding of the first few columns when decompressing a restricted region inside the image. For a more comprehensive list of bug fixes and added features, see the usual "Updates.txt" document which ships with Kakadu licenses.