Skip to content

Releases: AcademySoftwareFoundation/OpenImageIO

OpenImageIO v2.3.21.0

01 Nov 01:52
Compare
Choose a tag to compare

Release 2.3.21 (1 Nov 2022) -- compared to 2.3.20

  • oiiotool: protect against OpenEXR thread deadlock on Windows. #3582
  • oiiotool: work around static destruction order issue. #3591
  • Fix PSD import on ARM. #3589
  • Docs: write Windows build instructions in INSTALL.md. #3602
  • RLA: fix potential buffer overrun. (TALOS-2022-1629, CVE-2022-36354) #3624
  • TIFF: guard against corrupt files with buffer overflows. (TALOS-2022-1627,
    CVE-2022-41977) #3628
  • TIFF: guard against buffer overflow for certain CMYK files.
    (TALOS-2022-1633, CVE-2022-41639) (TALOS-2022-1643, CVE-2022-41988) #3632

OpenImageIO v2.4.4.2

03 Oct 07:16
Compare
Choose a tag to compare

Release 2.4.4.2 (3 Oct 2022) -- compared to 2.4.4.1

  • DDS: Improved support for DTX5, ATI2/BC5 normal maps, R10G10B10A2
    format, RXGB, BC4U, BC5U, A8, improved low bit expansion to 8 bits.
    #3573 (2.4.4.2)
  • DDS: Fix possible heap overflow on input. #3542 (2.4.4.2)

OpenImageIO v2.4.4.1

01 Oct 17:16
Compare
Choose a tag to compare

OpenImageIO version 2.4 has been released! Officially tagged as "v2.4.4.1", we have also moved the "release" branch tag to this position. Henceforth, 2.4 is the supported production release family. The API is now frozen -- we promise that subsequent 2.4.x releases (which should happen monthly) will not break back-compatibility of API, ABI, or linkage, compared to this release. Please note that this release is not ABI or link compatible with 2.3 or older releases (and not necessarily with earlier in-progress 2.4 development before this release).

Release notes for 2.4 outlining all the changes since last year's release are below.

Please note that a few of the build and runtime dependencies have changed their minimum supported versions. OpenEXR versions 2.0, 2.1, and 2.2 are no longer supported, 2.3 is now the minimum. Field3D is now no longer supported as a volume data format, as it is no longer actively maintained and everybody seems to have switched to OpenVDB for volume data.

Enjoy, and please report any problems. We will continue to make patch releases to the 2.4 family roughly monthly, which will contain bug fixes and non-breaking enhancements.

The older 2.3 series of releases is now considered obsolete. We will continue for now to make 2.3 patch releases, but over time, these will become less frequent and be reserved for only the most critical bug fixes.

The "master" branch is now progressing toward an eventual 2.5 release next summer. As usual, you are welcome to use master for real work, but we do not make any compatibility guarantees and don't guarantee continuing API compatibility in master.

Release 2.4 (1 Oct 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 M44fParam (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)
  • ImageCache / TextureSystem :
    • IC/TS both have added a getattributetype() method, which retrieves
      just the type of a named attribute. #3559 (2.4.4.0)
  • 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)
    • Imag...
Read more

OpenImageIO v2.3.20.0

01 Oct 16:39
Compare
Choose a tag to compare

Release 2.3.20 (1 Oct 2022) -- compared to 2.3.19

  • Fixes to compile with gcc 12. #3551
  • Fixes to compile with clang 15. #3563
  • PNG: better error handling when errors are encountered while writing. #3535

The 2.3 family is now considered the OBSOLETE (semi-supported) branch. From here on out, additional patch releases to 2.3 will be small, increasingly infrequent, and focused on fixing truly critical bugs or keeping up with being able to build with new versions of compilers and dependencies. Over the coming months we will transition to eventually no longer updating 2.3 at all. At your earliest convenience, you are encouraged to upgrade to 2.4.

OpenImageIO v2.4.4.0-RC2

23 Sep 18:30
Compare
Choose a tag to compare
Pre-release

Changes since RC1:

  • ImageCache/TextureSystem both have added a getattributetype()
    method, which retrieves just the type of a named attribute. #3559
    (2.4.4.0) NOTE: THIS IS AN ABI BREAKING CHANGE
  • Python: Fix the ability to getattribute() of int64 and uint64
    metadata or attributes. #3555 (2.4.4.0)
  • Build: Improvements to the generated cmake config files when
    building static libraries. #3552 #3557 (2.4.4.0)
  • Support for gcc 12.1. #3480 (2.4.2.1) #3551 (2.4.4.0)
  • Support building with clang 15.0. #3563 (2.4.4.0)
  • Fix cross-compiling on Android failing due to -latomic check. #3560
    (2.4.4.0)
  • Fix building on iOS. #3562 (2.4.4.0)

OpenImageIO v2.4.3.0-RC1

09 Sep 01:15
Compare
Choose a tag to compare
Pre-release

Release candidate for v2.4. We anticipate a full release on
September 15. Please consult the CHANGES.md for a full
list of improvements between the first 2.3 release and 2.4.

OpenImageIO v2.4.3.0-beta

01 Sep 05:53
Compare
Choose a tag to compare
Pre-release

This is the beta release of 2.4. We anticipate a full release on
September 15. Please consult the CHANGES.md for a full
list of improvements between the first 2.3 release and 2.4.

v2.3.19.0

01 Sep 04:47
Compare
Choose a tag to compare

Release 2.3.19 (1 Sep 2022) -- compared to 2.3.18

  • idiff: --allowfailures allows the specified number of pixels to differ by
    any amount, and still consider the images to compare successfully. #3455
  • idiff: --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
  • A new flavor of ImageBufAlgo::compare() allows relative as well as
    absolute error thresholds. #3508
  • Build: Fixes for ffmpeg 5.1 detection. #3516
  • Build: suppress incorrect warnings for gcc 12. #3524
  • CI: New test on MacOS 12, remove test on MacOS 10.15 (GitHub Actions is
    imminently removing MacOS 10.15). #3528
  • oiiotool, maketx, iinfo, igrep, and iv now all take a --version command
    line argument, which just prints the OIIO version and exits. #3534
  • OIIO::getattribute("version") now retrieves the version string. #3534
  • Developer goodies: ArgParse::add_version(str) tells ArgParse the version
    string, which will automatically add an option --version. #3534

OpenImageIO v2.3.18.0

01 Aug 14:34
Compare
Choose a tag to compare

Release 2.3.18 (1 Aug 2022) -- compared to 2.3.17

  • Windows: Allow loading of dlls from PATH on Python 3.8+. #3470
  • JPEG: Fix a race condition in read_native_scanline. #3495
  • JPEG: Fix aspect ratio logic. #3500
  • Bug fix: incorrect assignment of oiio_missingcolor attribute. #3497
  • Bug fix: possible null pointer dereference in inventory_udim(). #3498
  • Bug fix: print_info_subimage botched condition. #3499
  • CI: Test against fmt 9.0.0. #3466
  • CI: Test against pybind11 v2.10. #3478
  • Strutil: safe_strcat() #3471 and safe_strlen() #3501
  • Change build_opencolorio.bash to default to OCIO 2.1.2. #3475

OpenImageIO v2.3.17.0

02 Jul 02:43
Compare
Choose a tag to compare

Release 2.3.17 (1 Jul 2022) -- compared to 2.3.16

  • TIFF: fix read problems with TIFF files with non-zero y offset. #3419
  • Targa: Fix reading of tiny 1x1 2-bpp Targa 1.0 images. #3433 (2.3.17/2.2.21)
    (2.3.17/2.2.21)
  • BMP: better detection of corrupted files with nonsensical image dimensions
    or total size. #3434 (2.3.17/2.2.21)
  • BMP: protect against corrupted files that have palette indices out of bound.
    #3435 (2.3.17/2.2.21)
  • TextureSystem: Fix typo that prevented "max_tile_channels" attribute from
    being set or retrieved. (2.3.17)
  • ustring.h: ustring has added a from_hash() static method #3397, and a
    ustringhash helper class #3436. (2.3.17/2.2.21)
  • benchmark.h: Alter the declaration of DoNotOptimize() so that it doesn't
    have compilation problems on some platforms. #3444 (2.3.17)
  • Fix crash when ioproxy is passed to an image writer that doesn't support it.
    #3453 (2.3.17)
  • Fix the "Makefile" wrapper to correctly recognize arm64 ("Apple silicon").
    #3456 (2.3.17)