Hi Larry,

Wow, what dedication. Is this by singular Larry Gritz, or is it noe L. Gritz et 
al?

I’m really impressed. I’m not using OIIO, but have no doubt I’ll have a need 
for it down the road.

Thank you,


Chris Spence
Digital Devoid, Inc.
7300 Biscayne Blvd, Suite 405
Miami, FL  33138

Tel: 305 757 1330

ch...@digitaldevoid.com
www.digitaldevoid.com

> On Sep 1, 2022, at 2:16 AM, Larry Gritz <l...@larrygritz.com> wrote:
> 
> We have tagged "v2.4.3.0-beta" as the beta release of the 2.4 series of 
> OpenImageIO. This has been used in production throughout its development, so 
> hopefully the beta period will be brief and uneventful. The plan is to tag a 
> release candidate on September 8 and a full release on September 15 (assuming 
> no critical problems are found). At that point, 2.4 will be the officially 
> supported release series, with monthly (or as necessary) patch releases 
> containing fixes and new minor non-breaking features.
> 
> Note that the transition to 2.4 is NOT ABI- or link-compatible with 2.3 
> releases -- you are expected to recompile applications against 2.4, not 
> merely relink. We think that it should be fully backward-compatible with the 
> 2.3 API, so you should not have to change the source code of any calls to 
> OIIO public API calls while recompiling for 2.4.
> 
> We will do everything we can to ensure that no ABI or link incompatibilities 
> will be introduced during the beta period, but it's possible if a critical 
> problem is discovered at the last minute that is impossible to fix adequately 
> without an incompatibility (though we don't anticipate that happening). Once 
> we declare a release candidate, from that point forward, we guarantee no ABI 
> or link incompatible changes for the remainder of the 2.4 family of releases.
> 
> Here is the full list of improvements of 2.4, versus the first 2.3 releases:
> 
> 
> Release 2.4 (15 Sept 2022?) -- compared to 2.3
> ----------------------------------------------
> New minimum dependencies and compatibility changes:
> * OpenEXR minimum is now 2.3 (raised from 2.0). #3109 (2.4.0)
> * Field3D support has been removed entirely. The Field3D library appears to be
>  no longer maintained, and is incompatible with modern versions of
>  OpenEXR/Imath. We believe that all prior uses of Field3D use via OIIO have
>  been migrated to OpenVDB. #3151 (2.4.0)
> 
> New major features and public API changes:
> * Imath header and class hiding:
>    - Header includes have been shuffled around so that Imath headers are not
>      included from OIIO headers where they are not needed, and some OIIO
>      headers that need Imath types only for few function parameters now guard
>      those functions with `#if` so that Imath-taking functions are not
>      visible unless the calling app has previously had an `#include` of
>      Imath. If your app uses Imath types but did not include the right Imath
>      headers (relying on the accidental fact of other OIIO headers
>      transitively including them), you may need to adjust your includes.
>      #3301 #3332 (2.4.0.2) #3406 #3474 (2.4.2)
>    - New `V3fParam`, `M33fParam`, and `M44Param` (defined in vecparam.h) are
>      used just for parameter passing in public APIs, instead of Imath::V3f,
>      M33f, or M44f, in order to more fully hide Imath types from our public
>      interfaces. These are only parameter-passing classes, and are not useful
>      as vector or matrix classes in their own right. But they seamlessly cast
>      to and from other vector- and matrix-like classes. #3330 (2.4.1.0)
>    - `OPENIMAGEIO_IMATH_DEPENDENCY_VISIBILITY` is a new CMake cache variable
>      at OIIO build time that controls whether the Imath library dependencies
>      will be declared as PUBLIC (default) or PRIVATE target dependencies of
>      libOpenImageIO and libOpenImageIO_Util. #3322 (4.2.0.2) #3339 (4.2.0.3)
>    - For *downstream projects* that consume OIIO's exported cmake config
>      files, setting CMake variable `OPENIMAGEIO_CONFIG_DO_NOT_FIND_IMATH` to
>      ON will skip the find_depencency() calls for Imath and OpenEXR. To
>      clarify, this is not a variable that has any effect when building OIIO,
>      it's something set in the downstream project itself.  #3322 (4.2.0.2)
> * The dithering that happens when saving high bit depth image data to low bit
>  depth formats has been improved in several ways. It now applies when writing
>> 8 bit data to <= 8 bit files, not just when the source is float or half.
>  The dither pattern is now based on blue noise, and this dramatically
>  improves the visual appearance. #3141 (2.4.0/2.3.10)
> * TextureSystem now supports stochastic sampling. If the new TextureOpt field
>  `rnd` (which now defaults to -1.0) is set to a value >= 0, the filtered
>  texture lookup can use stochastic sampling to save work. The shading system
>  attribute "stochastic" is set to the stochastic strategy: 0 = no stochastic
>  sampling; 1 = for trilinear or anisotropic MIP modes, choose one MIP level
>  stochastically instead of blending between two levels; 2 = for anisotropic
>  mode, use just one anisotropic sample, chosen across the filter axis. (This
>  is a bit field, so 3 combines both strategies.) We measure this speeding up
>  texture lookups by 25-40%, though with more visual noise (which should be
>  resolved cleanly by a renderer that uses many samples per pixel). This
>  should only used for texture lookups where many samples per pixel will be
>  combined, such as for surface or light shading. It should not be used for
>  texture lookups that must return a single correct value (such as for
>  displacement, when each grid position is sampled only once). Even when the
>  "stochastic" attribute is nonzero, any individual texture call may be made
>  non-stochastic by setting TextureOpt.rnd to a negative value. #3127
>  (2.4.0/2.3.10) #3457 (2.4.2)
> * maketx/make_texture() now supports options to store Gaussian forward and
>  inverse transform lookup tables in image metadata (must be OpenEXR textures
>  for this to work) to aid writing shaders that use histogram-preserving
>  blending of texture tiling. This is controlled by new maketx arguments
>  `--cdf`, `--cdfsigma`, `--sdfbits`, or for `IBA::make_texture()` by using
>  hints `maketx:cdf`, `maketx:cdfsigma`, and `maketx:cdfbits`. #3159 #3206
>  (2.4.0/2.3.10)
> * oiiotool new commands and features:
>    - Control flow via `--if`, `--else`, `--endif`, `--while`, `--endwhile`,
>      `--for`, `--endfor` let you prototypes conditional execution and loops
>      in the command sequence. #3242 (2.4.0)
>    - `--set` can set variables and their values can be retrieved in
>      expressions. #3242 (2.4.0)
>    - Expressions now support: numerical comparisons via `<`, `>`, `<=`, `>=`,
>       `==`, `!=`, `<=>`; logical operators `&&`, `||`, `!`, `not()`; string
>       comparison functions `eq(a,b)` and `neq()`. #3242 #3243 (2.4.0)
>    - `--oiioattrib` can set "global" OIIO control attributes for an oiiotool
>      run (equivalent of calling `OIIO::attribute()`). #3171 (2.4.0/2.3.10)
>    - `--repremult` exposes the previously existing `IBA::repremult()`. The
>      guidance here is that `--premult` should be used for one-time conversion
>      of "unassociated alpha/unpremultiplied color" to
>      associated/premultiplied, but when you are starting with a premultiplied
>      image and have a sequence of unpremultiply, doing some adjustment in
>      unpremultiplied space, then re-premultiplying, it's `--repremult` you
>      want as the last step, because it preserves alpha = 0, color > 0 data
>      without crushing it to black. #3192 (2.4.0/2.3.10)
>    - `--saturate` can adjust saturation level of a color image. #3190
>      (2.4.0/2.3.10)
>    - `--maxchan` and `--minchan` turn an N-channel image into a 1-channel
>      images that for each pixel, contains the maximum value in any channel of
>      the original for that pixel. #3198 (2.4.0/2.3.10)
>    - `--point` lets you color one or more pixels in an image (analogous to
>      IBA::render_point). #3256 (2.4.0)
>    - `--warp` now takes an optional modifier `:wrap=...` that lets you set
>      which wrap mode to use when sampling past the edge of the source image.
>      #3341 (2.4.0.3)
>    - New `--st_warp` performs warping of an image where a second image gives
>      the (s,t) coordinates to look up from at every pixel. #3379
>      (2.4.2/2.3.14)
>    - Many attribute actions now take optional modifier `:subimages=` that
>      instructs oiiotool to apply to a particular subset of subimges in
>      multi-subimage files (such as multi-part exr). The commands so enabled
>      include `--attrib`, `--sattrib`, `--eraseattrib`, `--caption`,
>      `--orientation`, `--clear-keywords`, `--iscolorspace`. The default, if
>      subimages are not specified, is to only change the attributes of the
>      first subimage, unless `-a` is used, in which case the default is to
>      change the attributes of all subimages. #3384 (2.4.2)
> * ImageSpec :
>    - New constructors to accept a string for the data type. #3245
>      (2.4.0/2.3.12)
> * ImageBuf/ImageBufAlgo :
>    - `IBA::saturate()` can adjust saturation level of a color image. #3190
>      (2.4.0/2.3.10)
>    - `IBA::maxchan()` and `minchan()` turn an N-channel image into a
>      1-channel images that for each pixel, contains the maximum value in any
>      channel of the original for that pixel. #3198 (2.4.0/2.3.10)
>    - New `IBA::st_warp()` performs warping of an image where a second image
>      gives the (s,t) coordinates to look up from at every pixel. #3379
>      (2.4.2/2.3.14)
>    - `IBA::bluenoise_image()` returns a reference to a periodic blue noise
>      image. #3141 #3254 (2.4.0/2.3.10)
> * Python bindings:
>    - New ImageBuf constructor and reset() from a NumPy array only -- it
>      deduces the resolution, channels, and data type from the array
>      dimensions and type. #3246 (2.4.0/2.3.12)
>    - ROI now has a working `copy()` method. #3253 (2.4.0/2.3.12)
>    - ImageSpec and ParamValueList now support `'key' in spec`, `del
>      spec['key']`, and `spec.get('key', defaultval)` to more fully emulate
>      Python `dict` syntax for manipulating metadata. #3252 (2.3.12/2.4.0)
>    - Support uint8 array attributes in and out. This enables the proper
>      Python access to "ICCProfile" metadata. #3378 (2.4.1.0/2.3.14)
>    - New `ImageSpec.get_bytes_attribute()` method is for string attributes,
>      but in Python3, skips decoding the underlying C string as UTF-8 and
>      returns a `bytes` object containing the raw byte string. #3396 (2.4.2)
>    - Fixes for Python 3.8+ to ensure that it can find the OpenImageIO module
>      as long as it's somewhere in the PATH. This behavior can be disabled by
>      setting environment variable `OIIO_LOAD_DLLS_FROM_PATH=0`. #3470
>      (2.4.0/2.3.18)
> * New global OIIO attributes:
>    - `"try_all_readers"` can be set to 0 if you want to override the default
>      behavior and specifically NOT try any format readers that don't match
>      the file extension of an input image (usually, it will try that one
>      first, but it if fails to open the file, all known file readers will be
>      tried in case the file is just misnamed, but sometimes you don't want it
>      to do that). #3172  (2.4.0/2.3.10)
>    - `"use_tbb"` if nonzero, and if OIIO was built with TBB enabled and
>      found, then will use the TBB thread pool instead of the OIIO internal
>      thread pool. #3473 (2.4.2.2)
>    - `"version"` (read only) now retrieves the version string. #3534
>      (2.3.19.0/2.4.2.2)
> * Full IOProxy support has been added to TIFF #3075 (2.4.0/2.3.8), JPEG, GIF
>  #3181 #3182 (2.4.0/2.3.10), DDS #3217, PNM #3219, PSD #3220, Targa #3221,
>  WebP #3224, BMP #3223, JPEG-2000 #3226 (2.4.0).
> * Convention change: Image readers who wish to convey that the color space of
>  an input image is a simple gamma-corrected space will now call the color
>  space "GammaX.Y" (previously we sometimes used this, but sometimes called it
>  "GammaCorrectedX.Y"). #3202 (2.4.0)
> * `oiioversion.h` now defines symbols `OIIO_USING_IMATH_VERSION_MAJOR` and
>  `OIIO_USING_IMATH_VERSION_MINOR` that reveal which Imath version was used
>  internally to OIIO when it was build (which may be different than the
>  version found when the downstream app is being compiled). #3305 (2.4.0.1)
> * Most of the major APIs (including ImageInput, ImageOutput, and ImageBuf)
>  that took a std::string or string_view to indicate a filename (assumed to
>  support UTF-8 encoding of Unicode filenames) now have additional versions
>  that directly take a `std::wstring`, thus supporting UTF-16 Unicode
>  filenames as "wide strings". #3312 #3318 (2.4.0.1)
> * The ColorConfig API adds new calls `getDisplayViewColorSpaceName()` and
>  `getDisplayViewLooks()` that expose the underlying OpenColorIO
>  functionality. #3319 (2.4.0.2)
> * Many long-deprecated functions in imageio.h and imagbufalgo.h are now
>  marked as OIIO_DEPRECATED, and therefore may start to generate warnings
>  if used by downstream software. #3328 (2.4.1.0)
> 
> Performance improvements:
> * Raise the default ImageCache default tile cache from 256MB to 1GB. This
>  should improve performance for some operations involving large images or
>  images with many channels. #3180 (2.4.0/2.3.10)
> * Performance of JPEG-2000 I/O is improved by 2-3x due to multithreading,
>  but only if you are using a sufficiently new version of OpenJPEG (2.2
>  for encoding, 2.4 for decoding). #2225 (2.3.11/2.4.0)
> * Dramatically speed up (50-100x) the implementation of Strutil iequals,
>  iless, starts_with, istarts_with, ends_with, iends_with. This in turn speeds
>  up ParamValueList find/get related methods, ImageSpec find/get methods, and
>  TS::get_texture_info. #3388 (2.4.1.1)
> * Renderer users of the TextureSystem might see up to a ~40% speedup if
>  using the new stochastic sampling features. #3127 #3457
> * Speed up reading of uncompressed DDS images by about 3x. #3463 (2.4.2.0)
> 
> Fixes and feature enhancements:
> * ImageSpec:
>    - Implemented deserialization of extra_attribs from XML. #3066 
> (2.4.0/2.3.8)
>    - Allow `getattribute("format")` to retrieve the name of the pixel data
>      type. #3247 (2.4.0)
> * ImageInput / ImageOutput:
>    - Protected methods that make it easier to implement support for IOProxy
>      in image readers and writers. #3231 (2.4.0)
>    - Fix crash when ioproxy is passed to a plugin that doesn't support it.
>      #3453 (2.4.2)
> * ImageBuf / ImageBufAlgo:
>    - Fix ImageBuf::read bug for images of mixed per-channel data types. #3088
>      (2.4.0/2.3.8)
>    - `IBA::noise()` now takes "blue" as a noise name. Also, "white" is now
>      the preferred name for what used to be "uniform" (which still works as a
>      synonym). #3141 (2.4.0/2.3.10)
>    - Refactor ImageBuf::Iterator, ConstIterator templates, reduces compile
>      time substantially. #3195 (2.4.0)
>    - IBA functions taking a `cspan<>` now more flexibly can be passed
>      an init list like `{ 0.2f, 0.4f, 0.5f }` instead of needing to wrap it
>      in a `cspan<float>()` constructor. #3257 (2.3.12/2.4.0)
>    - `make_texture()`: ensure that "maketx:ignore_unassoc" is honored.
>      #3269 (2.4.0.1/2.3.12)
>    - `IBA::computePixelStats()` improved precision. #3353 (2.4.1.0/2.3.14)
>    - `IBA::isConstantColor()` is faster -- now if one thread finds its
>      portion not constant, it can signal the other threads to stop
>      immediately instead of completing their regions. #3383 (2.4.1.1)
>    - A new flavor of `IBA::compare()` allows relative as well as absolute
>      error thresholds. #3508 (2.3.19.0/2.4.2.2)
> * ImageCache / TextureSystem / maketx:
>    - When textures are created with the "monochrome_detect" feature enabled,
>      which turns RGB textures where all channels are always equal into true
>      single channel greyscale, the single channel that results is now
>      correctly named "Y" instead of leaving it as "R" (it's not red, it's
>      luminance). #3205 (2.4.0/2.3.10)
>    - Enhance safety/correctness for untiled images that exceed 2GB size
>      (there was an integer overflow problem in computing offsets within
>      tiles). #3232 (2.3.11/2.4.0)
>    - Improve error propagation from ImageCache to higher levels, especially
>      for tile-reading errors encountered during ImageBuf iterator use, and
>      ImageCache errors encountered when using the TextureSystem. #3233
>      (2.4.0)
>    - Support an additional UDIM pattern `<UVTILE>`, which is specified by
>      MaterialX. #3280 #3285 (2.3.12/2.4.0.1)
>    - Add support for UDIM pattern `<uvtile>` (used by Clarisse & V-Ray). #3358
>      (2.4.1.0/2.3.14)
>    - The `maketx --handed` option, or `oiiotool -attrib -otex:handed=...`, or
>      adding "handed" metadata to the configuration ImageSpec being passed to
>      `IBA::make_texture()` is now supported for communicating the handedness
>      of a vector displacement or normal map. #3331 (2.4.0.2)
>    - Speed up UDIM lookups by eliminating internal mutex. #3417 (2.4.0)
>    - TextureSystem: Fix typo that prevented "max_tile_channels" attribute from
>      being set or retrieved. (2.4.2/2.3.17)
> * oiiotool:
>    - `--ch` now has virtually no expense if the arguments require no change
>      to the channel order or naming (previously, it would always incur an
>      image allocation and copy even if no real work needed to be done). #3068
>      (2.4.0/2.3.8)
>    - `--ch` now warns if you specify a channel name that was not present
>      in the input image. #3290 (2.4.0.1)
>    - `--runstats` timing report has been improved and now more accurately
>      attributes time to each operation. In particular, input I/O is now
>      credited to "-i" rather than being incorrectly attributed to the other
>      ops that happen to trigger I/O of previously mentioned files. #3073
>      (2.4.0/2.3.8)
>    - Allow quotes in command modifiers. #3112 (2.4.0/2.3.9)
>    - Fix `--dumpdata` getting the formatting of floating point values wrong.
>      #3131 (2.4.0/2.3.9)
>    - `--dumpdata:C=name` causes the dumped image data to be formatted with
>      the syntax of a C array. #3136 (2.4.0/2.3.9)
>    - `--noise` now takes "blue" as an additional noise type. #3141
>      (2.4.0/2.3.10)
>    - `-d` now accepts "uint1", "uint2", "uint4", and "uint6" for formats that
>      support such low bit depths (TIFF). #3141 (2.4.0/2.3.10)
>    - `--invert` fixed to avoid losing the alpha channel values. #3191
>      (2.4.0/2.3.10)
>    - Fix bug when autocropping output images when the entire pixel data
>      window is in the negative coordinate region. #3164 (2.4.0/2.3.10)
>    - Improved detection of file reading failures. #3165 (2.4.0/2.3.10)
>    - All commands that do filtering (--rotate, --warp, --reize, --fit, and
>      --pixelaspect) now accept optional modifier `:highlightcomp=1` to enable
>      "highlight compensation" to avoid ringing artifacts in HDR images with
>      very high-contrast regions. #3239 (2.4.0)
>    - `--pattern checker` behavior has changed slightly: if the optional
>      modifier `:width=` is specified but `:height=` is not, the height will
>      be equal to the width. #3255 (2.4.0)
>    - `--pixelaspect` fixes setting of the "PixelAspectRatio", "XResolution",
>      and "YResolution" metadata, they were not set properly before. #3340
>      (2.4.0.3)
>    - Fix bug that prevented metadata from being able to print as XML. #3499
>      (2.4.2.2)
>    - `i:ch=...` fixes crashes, and also improves the warning message in cases
>      where the requested channels don't exist in the source image. #3513
>      (2.4.2.2)
> * Python bindings:
>    - Subtle/asymptomatic bugs fixed in `ImageBufAlgo.color_range_check()` and
>      `histogram()` due to incorrect release of the GIL. #3074 (2.4.0)
>    - Bug fix for `ImageBufAlgo.clamp()`: when just a float was passed for the
>      min or max, it only clamped the first channel instead of all channels.
>      #3265 (2.3.12/2.4.0)
> * idiff:
>    - `--allowfailures` allows that number of failed pixels of any magnitude.
>      #3455 (2.4.2)
>    - `--failrelative` and `--warnrelative` allows the failure and warning
>      threshold to use a symmetric mean relative error (rather than the
>      absolute error implied by the existing `--fail` and `--warn` arguments).
>      #3508 (2.3.19.0, 2.4.2.2)
> * BMP:
>    - IOProxy support. #3223 (2.4.0)
>    - Support for additional (not exactly fully documented) varieties used by
>      some Adobe apps. #3375 (2.4.1.0/2.3.14)
>    - Better detection of corrupted files with nonsensical image dimensions or
>      total size. #3434 (2.4.2/2.3.17/2.2.21)
>    - Protect against corrupted files that have palette indices out of bound.
>      #3435 (2.4.2/2.3.17/2.2.21)
> * DDS:
>    - Don't set "texturetype" metadata, it should always have been only
>      "textureformat". Also, add unit testing of DDS to the testsuite. #3200
>      (2.4.0/2.3.10)
>    - IOProxy support. #3217 (2.4.0)
>    - Add support for BC4-BC7 compression methods. #3459 (2.4.2)
>    - Speed up reading of uncompressed DDS images (by about 3x). #3463
>    - Better handling of cube maps with MIPmap levels. #3467 (2.4.0)
>    - For 2-channel DDS files, label them as Y,A if the flags indicate
>      luminance and/or alpha, otherwise label them as R,G. #3530 (2.4.2.2)
>    - Do not set "oiio:BitsPerSample" for cases where the dds.fmt.bpp field is
>      not assumed to be valid. MS docs say it's valid only if the flags field
>      indicates RGB, LUMINANCE, or YUV types. #3530 (2.4.2.2)
> * FFMpeg
>    - Now uses case-insensitive tests on file extensions, so does not get
>      confused on Windows with all-caps filenames. #3364 (2.4.1.0/2.3.14)
>    - Take care against possible double-free of allocated memory crash upon
>      destruction. #3376 (2.4.1.0/2.3.14)
> * GIF
>    - IOProxy support. #3181 (2.4.0/2.3.10)
> * HDR:
>    - IOProxy support. #3218 (2.4.0)
> * HEIF:
>    - Handle images with unassociated alpha. #3146 (2.4.0/2.3.9)
> * JPEG:
>    - IOProxy support. #3182 (2.4.0/2.3.10)
>    - Better handling of PixelAspectRatio. #3366 (2.4.1.0)
>    - Fix multithreaded race condition in read_native_scanline. #3495
>      (2.4.2.2)
>    - Fix bug in XRes,YRes aspect ratio logic. #3500 (2.4.2.2)
>    - When asked to output 2-channel images (which JPEG doesn't support), use
>      the channel names to decide whether to drop the second channel (if it
>      seems to be a luminance/alpha image) or add a third black channel (other
>      cases). #3531 (2.4.2.2)
> * JPEG2000:
>    - Enable multithreading for decoding (if using OpenJPEG >= 2.2) and
>      encoding (if using OpenJPEG >= 2.4). This speeds up JPEG-2000 I/O by
>      3-4x. #2225 (2.3.11/2.4.0)
>    - IOProxy support. #3226 (2.4.0)
>    - Better detection and error reporting of failure to open the file.
>      #3440 (2.4.2)
> * OpenEXR:
>    - When building against OpenEXR 3.1+ and when the global OIIO attribute
>      "openexr:core" is set to nonzero, do more efficient multithreaded
>      reading of OpenEXR files. #3107 (2.4.0/2.3.9.1)
>    - Fix excessive memory usage when saving EXR files with many channels.
>      #3176 (2.4.0/2.3.10)
>    - When building against OpenEXR >= 3.1.3, our OpenEXR output now supports
>      specifying the zip compression level (for example, by passing the
>      "compression" metadata as "zip:4"). Also note than when using OpenEXR >=
>      3.1.3, the default zip compression has been changed from 6 to 4, which
>      writes compressed files significantly (tens of percent) faster, but only
>      increases compressed file size by 1-2%. #3157 (2.4.0/2.3.10) Fixes in
>      #3387 (2.4.1.1)
>    - Fix writing deep exrs when buffer datatype doesn't match the file. #3369
>      (2.4.1.0/2.3.14)
> * PNG:
>    - Assume sRGB color space as default when no color space attribute is
>      in the file. #3321 (2.4.0.2/2.3.13)
>    - Improve error detection and propagation for corrupt/broken files. #3442
>      (2.4.2)
>    - Improve error detection and messages when writing PNG files, for various
>      kinds of errors involving metadata. #3535 (2.4.2.2)
> * PPM:
>    - Mark all PPM files as Rec709 color space, which they are by
>      specification. #3321 (2.4.0.2/2.3.13)
> * PSD:
>    - IOProxy support. #3220 (2.4.0)
>    - Better error messages for corrupted files and other failures. #3469
>      (2.4.0)
> * RAW:
>    - When using libraw 0.21+, now support new color space names "DCE-P3",
>      "Rec2020", and "sRGB-linear", and "ProPhoto-linear". Fix incorrect gamma
>      values for "ProPhoto". #3123 #3153 (2.4.0/2.3.9.1)
> * RLA:
>    -  Better guards against malformed input. #3163 (2.4.0/2.3.10)
> * Targa:
>    - Improved error detection for read errors and corrupted files. #3120
>      (2.4.0/2.3.9.1) #3162 (2.4.0/2.3.10)
>    - Fixed bug when reading x-flipped images. #3162 (2.4.0/2.3.10)
>    - IOProxy support. #3221 (2.4.0)
>    - Better interpretation of TGA 1.0 files with alpha that is zero
>      everywhere. Be more consistent with Targa attributes all being called
>      "targa:foo". Add "targa:version" to reveal whether the file was TGA 1.0
>      or 2.0 version of the format. #3279 (2.4.0.1/2.3.12)
>    - Fix parsing of TGA 2.0 extension area when the software name was
>      missing form the header. #3323 (2.4.0.2/2.3.13)
>    - Fix reading of tiny 1x1 2-bpp Targa 1.0 images. #3433 (2.3.17/2.2.21)
> * Socket imageio plugin has been removed entirely, it never was completed or
>  did anything useful. #3527 (2.3.2.2)
> * TIFF:
>    - IOProxy is now supported for TIFF output. #3075 (2.4.0/2.3.8)
>    - Honor zip compression quality request when writing TIFF. #3110
>      (2.4.0/2.3.11)
>    - Automatically switch to "bigtiff" format for really big (> 4GB) images.
>      #3158 (2.4.0)
>    - Support for palette images with 16 bit palette indices. #3262
>      (2.4.0/2.3.12)
>    - Gracefully handle missing ExtraSamples tag. #3287 (2.4.0.1/2.3.12)
>    - New output configuration hint: "tiff:write_extrasamples" (default: 1),
>      if set to 0, will cause the TIFF output to NOT include the required
>      EXTRASAMPLES tag in the header. This is not recommended, but fixes
>      a specific problem in some circumstances where PhotoShop misbehaves
>      when the extrasamples tag is present. #3289 (2.4.0.1)
>    - No longer write IPTC blocks to the TIFF header by default, it caused
>      trouble and was sometimes corrupted. You can force it to write an IPTC
>      block by using the output open configuration hint "tiff:write_iptc" set
>      to nonzero. #3302 (2.4.0.1)
>    - Fix read problems with TIFF files with non-zero y offset. #3419
>      (2.3.17/2.4.2)
>    - Fixed some longstanding issues with IPTC data in the headers. #3465
>      (2.4.0)
>    - Protect against crashes with certain empty string attributes. #3491
>      (2.4.2.1)
> * WebP:
>    - Fix previous failure to properly set the "oiio:LoopCount" metadata
>      when reading animated webp images. #3183 (2.4.0/2.3.10)
>    - IOProxy support. #3224 (2.4.0)
> * Better catching of exceptions thrown by OCIO 1.x if it encounters 2.0 config
>  files. #3089 (2.4.0/2.3.9)
> * Improved internal logic and error reporting of missing OCIO configs. #3092
>  #3095
> * Improved finding of fonts (by IBA::render_text and oiiotool --text). It now
>  honors environment variable `$OPENIMAGEIO_FONTS` and global OIIO attribute
>  "font_searchpath" to list directories to be searched when fonts are needed.
>  #3096 (2.4.0/2.3.8)
> * Fix crash that could happen with invalidly numbered UDIM files. #3116
>  (2.4.0/2.3.9)
> * Fix possible bad data alignment and SIMD assumptions inside TextureSystems
>  internals. #3145 (2.4.0/2.3.9)
> * Update internal stb_printf implementation (avoids some sanitizer alerts).
>  #3160 (2.4.0/2.3.10)
> * Replace the few remaining instances of `sscanf` in the codebase with Strutil
>  utilities that are guaranteed to be locale-independent. #3178 (2.4.0)
> * Security: New global OIIO attributes "limits:channels" (default: 1024) and
>  "limits:imagesize_MB" (default: 32768, or 32 GB) are intended to reject
>  input files that exceed these limits, on the assumption that they are either
>  corrupt or maliciously constructed, and would, if read, lead to absurd
>  allocations, crashes, or other mayhem. Apps may lower or raise these limits
>  if they know that a legitimate input image exceeds these limits. Currently,
>  only the TIFF reader checks these limits, but others will be modified to
>  honor the limits over time. #3230 (2.3.11/2.4.0)
> * Fix integer overflow warnings. #3329 (2.4.1.0)
> * Improved behavior when opening a file whose format doesn't correctly match
>  its extension: try common formats first, rather than alphabetically; and
>  improve error messages. #3400 (2.4.2)
> * The maximum number of threads you can set with option "oiio:threads"
>  has been increased from 256 to 512. #3484 (2.4.2.1)
> * Make access to the internal imageio_mutex not be recursive. #3489 (2.4.2.2)
> * Various protections against string metadata found in file that has zero
>  length. #3493 (2.4.2.2)
> * Fix possible null pointer dereference in inventory_udim. #3498 (2.4.2.2)
> * oiiotool, maketx, iinfo, igrep, and iv now all take a `--version` command
>  line argument, which just prints the OIIO version and exits. #3534
> 
> Developer goodies / internals:
> * benchmark.h:
>    - Alter the declaration of DoNotOptimize() so that it doesn't have
>      compilation problems on some platforms. #3444 (2.4.2/2.3.17)
> * filesystem.h:
>    - A new version of `searchpath_split` returns the vector of strings rather
>      than needing to be passed a reference. #3154 (2.4.0/2.3.10)
>    - New `write_binary_file()` utility function. #3199 (2.4.0/2.3.10)
>    - `searchpath_split()` fixes to better handle empty paths. #3306 (2.4.0.1)
> * fmath.h:
>    - Added `round_down_to_multiple()`. Also, more correctly handle
>      `round_to_multiple()` results when the value is < 0. #3104
>    - Add `round_down_to_multiple()` and improve `round_to_multiple()` to
>      correctly handle cases where the value is less than 0. #3104
>      (2.4.0/2.3.8)
>    - Make bit_cast specialization take refs, like the template. This fixes
>      warnings for some compilers. #3213 (2.4.0/2.3.10.1)
> * imageio.h:
>    - ImageInput and ImageOutput have many new helper methods (protected,
>      meant for II and IO subclass implementations to use, not users of these
>      classes) for helping to implement IOProxy support in format readers and
>      writers. #3203 #3222 (2.4.0)
> * Imath.h:
>    - In addition to including the right Imath headers for the version that
>      OIIO is built with, this defines custom formatters for the Imath types
>      for use with fmt::format/print or Strutil::format/print. #3367 (2.4.1.0)
> * oiioversion.h
>    - `OIIO_MAKE_VERSION_STRING` and `OIIO_VERSION_STRING` now print all 4
>      version parts. #3368 (2.4.1.0)
> * parallel.h
>    - Refactoring of the entry points (back compatible for API), and add
>      support for using TBB for the thread pool (which seems slightly faster
>      than our internal thread pool). By default it still uses the internal
>      pool, but if OIIO::attribute("use_tbb") is set to nonzero, it will use
>      the TBB thread pool if built against TBB. #3473 (2.4.2.2)
> * paramlist.h
>    - Various internal fixes that reduce the amount of ustring construction
>      that happens when constructing ParamValue and ParamList, and making
>      certain ImageSpec::attribute() calls. #3342 (2.4.1.0)
> * simd.h:
>    - Better guards to make it safe to include from Cuda. #3291 #3292
>      (2.4.0.1/2.3.12)
>    - Fix compiler warnings related to discrepancies between template
>      declaration and redeclaration in simd.h. #3350 (2.4.1.0/2.3.14)
>    - The vector types all now have a `size()` method giving its length.
>      #3367 (2.4.1.0)
>    - Defines custom formatters for the vector and matrix types, for use
>      with fmt::format/print or Strutil::format/print. #3367 (2.4.1.0)
> * string_view.h
>    - Auto-conversion between our string_view, std::string_view (when
>      available), and fmt::string_view. #3337 (2.4.1.0)
>    - OIIO::string_view is now fully templated, to match std::string_view.
>      #3344 (2.4.1.0)
> * strutil.h:
>    - New utility functions: parse_values(), scan_values(), scan_datetime()
>      #3173 #3177 (2.4.0/2.3.10), edit_distance() #3229 (2.4.0/2.3.11)
>    - The `utf8_to_utf16()` and `ut16_to_utf8()` utilities are now exposed on
>      all platforms, not just windows (and their internals have been
>      modernized). #3307 (2.4.0.1)
>    - `Strutil::isspace()` is a safe alternative to C isspace(), that works
>      even for signed characters. #3310 (2.4.1.0)
>    - `Strutil::print()` now is buffered (and much more efficient, and
>      directly wraps fmt::print). A new `Strutil::sync::print()` is a version
>      that does a flush after every call. #3348 (2.4.1.0)
>    - `get_rest_arguments()` fixes conflict between RESTful and Windows long
>      path notations. #3372 (2.4.1.0/2.3.14)
>    - Dramatically speed up (50-100x) Strutil iequals, iless, starts_with,
>      istarts_with, ends_with, iends_with. #3388 (2.4.1.1)
>    - New `safe_strcat` is a buffer-length-aware safe replcement for strcat.
>      #3471 (2.4.0/2.3.18)
>    - `Strutil::debug()` is the new OIIO::debug(), moving it from
>      libOpenImageIO to libOpenImageIO_Util. #3486 (2.4.2.1)
>    - New `Strutil::safe_strlen()` is a portable safe strlen replacement.
>      #3501 (2.4.2.2)
> * sysutil.h:
>    - The `Term` class now recognizes a wider set of terminal emulators as
>      supporting color output. #3185 (2.4.0)
> * timer.h:
>    - `Timer::add_seconds()` and `Timer::add_ticks()` allows add/subtract
>      directly to a timer's elapsed value. #3070 (2.4.0/2.3.8)
>    - For Linux, switch from using gettimeofday to clock_gettime, for
>      potentially higher resolution. #3443 (2.4.2)
> * typedesc.h:
>    - Add Cuda host/device decorations to TypeDesc methods to make them GPU
>      friendly. #3188 (2.4.0/2.3.10)
>    - TypeDesc constructor from a string now accepts "box2f" and "box3f"
>      as synonyms for "box2" and "box3", respectively. #3183 (2.4.0/2.3.10)
> * type_traits.h:
>    - This new header contains a variety of type traits used by other OIIO
>      headers. They aren't really part of the public API, but they are 
> sometimes
>      used by public headers. #3367 (2.4.1.0)
> * unittest.h:
>    - Changes `OIIO_CHECK_SIMD_EQUAL_THRESH` macro to compare `<= eps`
>      instead of `<`. #3333 (2.4.0.3)
> * unordered_map_concurrent.h: Fix bug in `erase()` method. #3485 (2.4.2.2)
> * ustring.h:
>    - New static method `from_hash()` creates a ustring from the known hash
>      value. #3397 (2.4.2)
>    - New `ustringhash` class is just like a ustring, except that the "local"
>      representation is the hash, rather than the unique string pointer. #3436
>      (2.4.2)
> * vecparam.h:
>    - New `V3fParam`, `M33fParam`, and `M44Param` (defined in vecparam.h) are
>      used just for parameter passing in public APIs, instead of Imath::V3f,
>      M33f, or M44f, in order to more fully hide Imath types from our public
>      interfaces. These are only parameter-passing classes, and are not useful
>      as vector or matrix classes in their own right. But they seamlessly cast
>      to and from other vector- and matrix-like classes. #3330 (2.4.1.0)
> * More internals conversion to use the new fmt style for string formatting,
>  console output, error messages, and warnings: oiiotool internals #3240
>  (2.4.0); TS/IC stats output #3374 (2.4.1.0); misc #3777 (2.4.1.0); testshade
>  #3415 (2.4.2)
> * Internals are working toward removing all uses of string_view::c_str(),
>  since that isn't part of C++17 std::string_view. #3315 (2.4.0.1)
> * New testtex options: `--minthreads` sets the minimum numer of threads that
>  will be used for thread wedges, `--lowtrials` is an optional maximum number
>  of trials just for the 1 or 2 thread cse. #3418 (2.4.2)
> * Internals: internal classes with vertual methods now mark all their
>  overridden destructors correctly as `override`. #3481 (2.4.2.1) #3488 #3511
>  (2.4.2.2)
> 
> Build/test system improvements and platform ports:
> * CMake build system and scripts:
>    - Remove the old FindOpenImageIO.cmake module; downstream clients should
>      instead use our exported configs. #3098 (2.4.0/2.3.8)
>    - Fix over-use of targets when we should have been using variables. #3108
>      (2.4.0/2.3.9)
>    - CMake variable `-DENABLE_INSTALL_testtex=1` causes `testtex` to be
>      installed as an application. #3111 (2.4.0)
>    - Make `OpenImageIO_SUPPORTED_RELEASE` into a CMake cache variable so it
>      can be overridden at build time. #3142 (2.4.0)
>    - New build option `-DTIME_COMMANDS=ON` will print time to compile each
>      module (for investigating build performance; only useful when building
>      with `CMAKE_BUILD_PARALLEL_LEVEL=1`). #3194 (2.4.0/2.3.10)
>    - `PROJECT_VERSION_RELEASE_TYPE` is now a cache variable that can be
>      overridden at build time. #3197 (2.4.0/2.3.10)
>    - Set and use the variable `PROJECT_IS_TOP_LEVEL` to know if OIIO is a
>      top level project or a subproject. #3197 (2.4.0/2.3.10)
>    - Restore code that finds Jasper when using statically-linked libraw.
>      #3210 (2.4.0/2.3.10.1)
>    - Gracefully handle failing to find git for test data download. #3212
>      (2.4.0/2.3.10.1)
>    - Make sure to properly use the tbb target if it exists. #3214
>      (2.4.0/2.3.10.1)
>    - Use a project-specific "OpenImageIO_CI" for whether we're running in CI,
>      rather than the confusingly generic "CI" #3211 (2.4.0/2.3.11)
>    - If CMake variable `BUILD_TESTING` is OFF, don't do any automatic
>      downloading of missing test data. #3227 (2.3.11/2.4.0)
>    - Fixes to FindOpenColorIO.cmake module, now it prefers an OCIO exported
>      cmake config (for OCIO 2.1+) unless OPENCOLORIO_NO_CONFIG=ON is set.
>      #3278 (2.4.0.1/2.3.12)
>    - Fix problems with FindOpenEXR build script for Windows. #3281
>      (2.4.0.1/2.3.12)
>    - New CMake cache variable `DOWNSTREAM_CXX_STANDARD` specifies which C++
>      standard is the minimum for downstream projects (currently 14), which
>      may be less than the `CMAKE_CXX_STANDARD` that specifies which C++
>      standard we are using to build OIIO itself. #3288 (2.4.0.1)
>    - The exported cmake configs now use relative paths so they are
>      relocatable. #3302 (2.4.0.1)
>    - CMake variable `OPENIMAGEIO_CONFIG_DO_NOT_FIND_IMATH`, if set to ON,
>      will make our generated config file not do a find_dependency(Imath).
>      (Use with caution.) #3335 (2.4.0.3)
>    - Can now do unity/jumbo builds. This isn't helpful when building with
>      many cores/threads, but in thread-limited situtations (such as CI), it
>      can speed up builds a lot to use `-DCMAKE_UNITY_BUILD=ON`. #3381 #3389
>      #3392 #3393 #3398 #3402 (2.4.2.0)
>    - Do not auto-download test images by default. To auto download test
>      images, build with `-DOIIO_DOWNLOAD_MISSING_TESTDATA=ON`. #3409 (2.4.0)
>    - Allow using the Makefile wrapper on arm64 systems. #3456 (2.4.2)
>    - The export OpenImageIOConfig.cmake fixes `OpenImageIO_INCLUDE_DIR` to
>      work correctly on Debian systems where there are multiple filesystem
>      components to the path. #3487 (2.4.2.1)
>    - On MacOS, do not force MACOS_RPATH on. #3523 (2.4.2.2)
> * Dependency version support:
>    - When using C++17, use std::gcd instead of boost. #3076 (2.4.0)
>    - When using C++17, use `inline constexpr` instead of certain statics.
>      #3119 (2.4.0)
>    - Fixes to work with the libraw 202110 snapshot. #3143 (2.4.0/2.3.9.1)
>    - Fix occasional build breaks related to OpenCV headers. #3135
>      (2.4.0/2.3.9)
>    - The internals of `Filesystem::searchpath_split` have been reimplemented
>      in such a way as to no longer need boost.tokenzer. #3154 (2.4.0/2.3.10)
>    - Deal with the fact that OpenColorIO has changed its default branch
>      name to "main". #3169 (2.4.0/2.3.10/2.2.20)
>    - pybind11 v2.9.0 incorporated into our testing and CI. #3248
>    - Fix clang10 compile warnings. #3272 (2.4.0.1/2.3.12)
>    - Support for ffmpeg 5.0. #3282 (2.4.0.2/2.3.13)
>    - Support for fmtlib 9.0.0. #3327 (2.4.0.2/2.3.13) #3466 (2.4.2/2.3.18)
>    - `build_opencolorio.bash` helper script bumped its default build of
>      OpenColorIO to 2.1.2. #3475 (2.4.2.1)
>    - When building with C++17 or higher, Boost.filesystem is no longer
>      needed or used. #3472 #3477 (2.4.2.1)
>    - Upgrade the internal fallback implemention of PugiXML to the latest
>      version. #3494 (2.4.2.2)
>    - Fixes for ffmpeg 5.1 detection. #3516 (2.3.19.0/2.4.2.2)
>    - Support for gcc 12.1. #3480 (2.4.2.1)
> * Testing and Continuous integration (CI) systems:
>    - Properly test against all the versions of VFX Platform 2022. #3074
>      (2.4.0)
>    - The helper script `build_libtiff.bash` now allows you to override the
>      build type (by setting `LIBTIFF_BUILD_TYPE`) and also bumps the default
>      libtiff that it downloads and builds from 4.1.0 to 4.3.0. #3161 (2.4.0)
>    - New tests on MacOS 11 #3193 (2.4.0/2.3.10) and MacOS 12, remove test on
>      MacOS 10.15 (GitHub Actions is imminently removing MacOS 10.15). #3528
>      (2.3.19.0/2.4.2.2)
>    - Add a DDS test (we never had one before). #3200 (2.4.0/2.3.10)
>    - `imageinout_test` now has options to make it easy to unit test just one
>      named format, as well as to preserve the temp files for inspection.
>      #3201 (2.4.0/2.3.10)
>    - Add an HDR test (we never had one before). #3218 (2.4.0)
>    - Fix bugs in the build_opencolorio.bash script, did not correctly handle
>      installation into custom directories. #3278 (2.4.0.1/2.3.12)
>    - Failed build artifact storage is revised to save more cmake-related
>      artifacts to help debugging. #3311 (2.4.0.1)
>    - Now doing CI builds for Intel icc and icx compilers. #3355 #3363
>      (2.4.1.0/2.3.13) #3407 (2.4.0)
>    - Overhaul of ci.yml file to be more clear and compact by using GHA
>      "strategy" feature. #3356 #3365 (2.4.1.0/2.3.13)
>    - Removed CI for windows-2016 GHA instance which will soon be removed.
>      #3370 (2.4.1.0)
>    - Test against clang 14. #3404
>    - Various guards against supply chain attacks durig CI. #3454 (2.4.2)
>    - Test against pybind11 v2.10. #3478 (2.4.2.1)
>    - Run SonarCloud nightly for static analysis and coverage analysis. #3505
>      (2.4.2.2)
> * Platform support:
>    - Fix when building with Clang on big-endian architectures. #3133
>      (2.4.0/2.3.9)
>    - Improvements to NetBSD and OpenBSD support. #3137. (2.4.0/2.3.9)
>    - Fixes for MSVS compile. #3168 (2.4.0/2.3.10)
>    - Fix problems on Windows with MSVC for Debug builds, where crashes were
>      occurring inside `isspace()` calls. #3310
>    - Improved simd.h support for armv7 and aarch32. #3361 (2.4.1.0/2.3.14)
>    - Suppress MacOS wasnings about OpenGL deprecation. #3380 (2.4.1.0/2.3.14)
>    - Fix MSVS/Windows errors. #3382 (2.4.1.1)
> 
> Notable documentation changes:
> * Add an oiiotool example of putting a border around an image. #3138
>  (2.4.0/2.3.9)
> * Fix explanation of ImageCache "failure_retries" attribute. #3147
>  (2.4.0/2.3.9)
> * Improved maketx argument explanations.
> * Clean up intra-document section references. #3238 (2.3.11/2.4.0)
> * New explanations about input and output configuration hints. #3238
>  (2.3.11/2.4.0)
> * More code examples in both C++ and Python (especially for the ImageInput,
>  ImageOutput, and ImageBufAlgo chapters). #3238 #3244 #3250 (2.3.11/2.4.0)
>  #3263 (2.3.12/2.4.0)
> * Pretty much anyplace where a parameter that represents a filename, and it is
>  supporting UTF-8 encoding of Unicode filenames, the docs for that function
>  explicitly say that the string is assumed to be UTF-8. #3312 (2.4.0.1)
> * Fix many typos in docs. #3492 (2.4.2.2)
> 
> 
> 
> --
> Larry Gritz
> l...@larrygritz.com
> 
> 
> 
> 
> 
> _______________________________________________
> Oiio-dev mailing list
> Oiio-dev@lists.openimageio.org
> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
> 

_______________________________________________
Oiio-dev mailing list
Oiio-dev@lists.openimageio.org
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

Reply via email to