Skip to content

Releases: AcademySoftwareFoundation/OpenImageIO

OpenImageIO v2.4.6.0

03 Dec 00:47
Compare
Choose a tag to compare

Release 2.4.6 (1 Dec 2022) -- compared to 2.4.5.0

  • make_texture / maketx : ensure proper setting of certain metadata when
    using a texture as a source to build another texture. #3634
  • Build: Make sure use of ${PROJECT_NAME} doesn't occur before the call to
    project(). #3651
  • Fix null pointer dereference when OCIO no configuration is found. #3652
  • Support for building against OpenColorIO 2.2. #3662
  • Fixes to subtle bugs when ImageBuf is used with IOProxy. #3666
  • oiiotool: Fix problems with --point when there is no alpha channel. #3684
  • oiiotool: --dumpdata fix channel name output. #3687
  • BMP: Fix possible write errors, fixes TALOS-2022-1653 / CVE-2022-43594,
    CVE-2022-43595. #3673
  • DPX: Fix possible write errors, fixes TALOS-2022-1651 / CVE-2022-43592 and
    TALOS-2022-1652 / CVE-2022-43593. #3672
  • IFF files: Add IOProxy support. #3647
  • IFF: Fix possible write errors, fixes TALOS-2022-1654 / CVE-2022-43596,
    TALOS-2022-1655 / CVE-2022-43597 CVE-2022-43598, TALOS-2022-1656 /
    CVE-2022-43599 CVE-2022-43602 #3676
  • PSD: Fix thumbnail extraction. #3668
  • PSD: when reading, don't reject padded thumbnails. #3677
  • Raw: Update Exif orientation if user flip is set. #3669
  • Zfile write safety, fixes TALOS-2022-1657 / CVE-2022-43603. #3670
  • filesystem.h: new Filesystem::is_executable() and find_program(). #3638
  • filesystem.h: Change IOMemReader constructor to take a const buffer
    pointer. #3665
  • strutil.h: new trimmed_whitspace(). #3636
  • New OIIO::print() exposes Strutil::print() in the main OIIO namespace.
    #3667
  • Testing: improved testing of oiiotool #3637 #3643 #3649, Strutil #3655

OpenImageIO v2.4.5.0

01 Nov 02:23
Compare
Choose a tag to compare

Release 2.4.5 (1 Nov 2022) -- compared to 2.4.4.2

  • oiiotool: new commands --iccread reads a named file and adds its contents
    as the ICCProfile metadata of the top image, --iccwrite saves the
    ICCProfile metadata of the top file to a named file. #3550
  • TIFF, JPEG, JPEG-2000, PNG, and PSD files containing ICC profiles now
    extract and report extra metadata related to aspects of those profiles.
    #3554
  • Python: support int8[] metadata and retrieving the ICCPorofile metadata.
    #3556
  • oiiotool: New expression syntax for retrieving metadata {TOP[foo]} is
    similar to the existing {TOP.foo}, if there is no foo metadata found,
    the former evaluates to an empty string, whereas the latter is an error.
    #3619
  • Strutil: new utf16_to_utf8(const std::u16string&) and
    Strutil::utf8_to_utf16wstring(). #3553
  • ustring: make std::hash work for ustring, add operator< for ustringhash,
    add from_hash() to ustringhash, make ustringhash == and != be
    constexpr for C++17 and beyond. #3577 Custom fmt formatter for ustringhash
    that prints the string rather than the hash. #3614
  • Build: the version number is now a CMake cache variable that can be
    overridden (caveat emptor). #3549
  • Build/security: New CMake cache variable FORTIFY_SOURCE, if enabled,
    builds with the specified gcc _FORTIFY_SOURCE option defined. This may be
    desirable for people deploying OIIO in security-sensitive environments.
    #3575
  • CI: testing now includes using undefined behavior sanitizer. #3565
  • Windows: protect against OpenEXR thread deadlock on shutdown. #3582
  • Windows: Work around a static destruction order issue. #3591
  • Windows: define NOGDI to keep the inclusion of windows.h from adding as
    many unneeded symbols. #3596
  • MinGW: fix incorrect symbol visibility issue for ImageBuf iterators. #3578
  • ARM: improve SIMD operations for ARM NEON. #3599
  • Docs: New RELEASING.md documents our releasing procedures. #3564 #3580
  • Docs: Better Windows build instructions in INSTALL.md. #3602
  • Fix missing OIIO::getattribute support for limits:channels and
    limits:imagesize_MB. #3617
  • BMP: fix reading 16bpp images. #3592
  • BMP: protect against corrupt pixel coordinates. (TALOS-2022-1630,
    CVE-2022-38143) #3620
  • DDS: fix alpha/luminance files, better testing. #3581
  • DDS: optimize loading of compressed images, improves 3-5x. #3583 #3584
  • DDS: Fix crashes for cubemap files when a cube face was not present, and
    check for invalid bits per pixel. (TALOS-2022-1634, CVE-2022-41838)
    (TALOS-2022-1635, CVE-2022-41999) #3625
  • HDR: fix a 8x (!) read performance regression for HDR files that was
    introduced in OIIO in 2.4. #3588 On top of that, speed up by another 4x
    beyond what we ever did before by speeding up the RGBE->float conversion.
    #3590
  • PNG: fix memory leaks when errors take an early exit. #3543 #3544
  • PSD: fix a PSD read error on ARM architecture. #3589
  • PSD: protect against corrupted embedded thumbnails. (TALOS-2022-1626,
    CVE-2022-41794) #3629
  • RAW: additional color metadata is now recognized: pre_mul, cam_mul,
    cam_xyz, rgb_cam. #3561 #3569 #3572
  • RLA: fix potential buffer overrun. (TALOS-2022-1629, CVE-2022-36354) #3624
  • Targa: string overflow safety. (TALOS-2022-1628, CVE-2022-4198) #3622
  • TIFF/JPEG/PSD: Fix EXIF bugs where corrupted exif blocks could overrun
    memory. (TALOS-2022-1626, CVE-2022-41794) (TALOS-2022-1632, CVE-2022-41684)
    #3627
  • 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.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