Skip to content

Releases: AcademySoftwareFoundation/OpenImageIO

OpenImageIO v2.4.9.0

01 Mar 19:13
Compare
Choose a tag to compare

Release 2.4.9.0 (1 Mar 2023) -- compared to 2.4.8.1

  • Build: check need for libatomic with check_cxx_source_compiles instead of
    the more expensive check_cxx_source_runs. #3774
  • Fix(IC): Avoid bad IC stats when no files were read. #3765
  • Build: Add a cmake option OIIO_DISABLE_BOOST_STACKTRACE to disable use and
    dependency of boost stacktrace. #3777
  • ustringhash: Make an explicit constructor from a hash value. #3778
  • Build: Add ability to build against Qt6. #3779

OpenImageIO v2.4.8.1

13 Feb 17:41
Compare
Choose a tag to compare

Release 2.4.8.1 (13 Feb 2023) -- compared to 2.4.8.0

  • Fix(targa): guard against corrupted tga files Fixes TALOS-2023-1707 /
    CVE-2023-24473, TALOS-2023-1708 / CVE-2023-22845. #3768
  • Fix: race condition in TIFF reader, fixes TALOS-2023-1709 / CVE-2023-24472.
    #3772
  • Windows: Fix unresolved external symbol for MSVS 2017 #3763
  • Fix: Initialize OpenEXROutput::m_levelmode in init(). #3764
  • Fix: improve thread safety for concurrent tiff loads. #3767
  • Fix(fits): Make sure to close if open fails to find right magic number.
    #3771

OpenImageIO v2.4.8.0

01 Feb 20:26
Compare
Choose a tag to compare

Release 2.4.8.0 (1 Feb 2023) -- compared to 2.4.7.1

  • oiiotool --pdiff: test, be sure to count it as making output. #3723
  • IBAprep should not zero out deep images when creating dst #3724
  • PBM: Fix for incorrect inverting of 1-bit pbm images. #3731
  • New ImageSpec:set_colorspace() sets color space metadata in a consistent
    way. #3734
  • BMP: set colorspace to sRGB #3701
  • PNG: Add EXIF support when writing PNG files. #3735
  • PSD: Fix wrong oiio:UnassociatedAlpha metadata for PSD files. #3750
  • platform.h: set up macros for detecting MSVS 2019 and 2022 #3727
  • typedesc.h: Extend TypeDescFromC template to the full set of pixel types
    #3726
  • Testing: many improvements for testing and code coverage. #3730 #3654 #3694
    #3699 #3732 #3741 #3745 #3747
  • Testing: Fix long-broken ref images for texture-icwrite test #3733
  • Docs: Updated RTD docmentation style, looks much nicer. #3737
  • Docs: improve description of ociodisplay and others.
  • Docs: Fix old release notes to document all CVEs addressed in certain
    prior releases.

OpenImageIO v2.4.7.1

04 Jan 08:12
Compare
Choose a tag to compare

Release 2.4.7.1 (3 Jan 2023) -- compared to 2.4.7.0

  • Fix build break for Mac ARM. #3735
  • CMake config should not include a find of fmt if it's internalized. #3739

OpenImageIO v2.4.7.0

01 Jan 19:18
Compare
Choose a tag to compare

Release 2.4.7.0 (1 Jan 2023) -- compared to 2.4.6.0

  • IOMemReader detects and errors for out-of-range read positions. #3712
  • Build/Mac: Suppress some deprecation warnings when building wth the newest
    Apple clang. #3709 #3710
  • ARM: Fix signed/unsigned SIMD mismatch in vbool4::load. #3722
  • Build: New CMake variable INTERNALIZE_FMT, when set to OFF will ensure
    that the fmt headers are not internalized (copied to the installed part
    of OIIO). The default is ON, matching old behavior. #3598
  • Testing: Improved testing of iinfo #3688 #3706, 'term' output #3714, igrep
    #3715.
  • build_openexr.bash: bump default version of OpenEXR/Imath retrieved to be
    3.1.5. #3703
  • span.h: Make sure the cspan alias also allows the Extent template
    argument; add a custom formatter to print spans. #3685
  • ustring.h: #if guards to let the header be Cuda-safe. #3718
  • Internals: refactoring to remove duplicated code for iinfo and
    oiiotool --info. #3688
  • Internals: remove the last instances of unsafe std::sprintf. #3705

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