Skip to content

Releases: AcademySoftwareFoundation/OpenImageIO

OpenImageIO 2.1.13.0

02 Apr 05:13
Compare
Choose a tag to compare

Release 2.1.13 (1 Apr 2020) -- compared to 2.1.12

  • Fix: iinfo return code now properly indicates failures for files that can't be opened. #2511
  • Fix: Catch previously uncaught exceptions that could happen in certain Filesystem utility calls. #2522
  • Fix: Some span<> methods involving std::vector now will work properly with vectors that have custom allocators. #2533
  • Fix: ParamValueList add_or_replace() was failing to "replace" if the new attribute had a different type than the existing one. #2527
  • Fix: Fix resolution unit metadata that was not propery set in JPEG output. #2516
  • Build: Additional cmake controls to customize required vs optional dependencies -- REQUIRED_DEPS list of dependencies normally optional that should be treated as required) and OPTIONAL_DEPS (list of dependencies normally required that should be optional). The main use case is to force certain optional deps to be required for your studio, to be sure that missing deps are a full build break, and not a successful build that silently lacks features you need. #2507
  • Build: Fix exported config file, it was not ensuring that the Imath headers properly ended up in the config iclude path. #2515
  • Build: Ensure compatibility and clean builds with clang 10. #2518
  • Build: All the build_foo.bash helper scripts now use set -ex to ensure that if any individual commands in the script fails, the whole thing will exit with a failure. #2520
  • Build correctly against the current master branch of OpenColorIO (previously we were only testing and properly building against the 1.1 release). #2530
  • Added Strutil::upper() and lower() functions. #2525
  • ParamValueList enhancement: new find_pv() method that is similar to find() but returns a pointer rather than an iterator and nullptr if the attribute is not found. #2527
  • Add get_indexed() method to ParamValueList and AttrDelegate. #2526

OpenImageIO 2.1.12.0

03 Mar 00:05
Compare
Choose a tag to compare

Release 2.1.12 (2 Mar 2020) -- compared to 2.1.11

  • Fix: plugin.h getsym() didn't pass along its report_error param. #2465
  • Fix: ImageBuf::getchannel() did not honor its wrap parameter. #2465
  • Fix: ImageSpec::erase_attribute() did not honor its searchtype param. #2465
  • Fix: IBA::reorient() and IBA::computePixelsHashSHA1() did not honor their
    nthreads parameter. #2465.
  • IBA::resample() now uses the clamp wrap mode to avoid black fringing and
    match the behavior of resize(). #2481
  • Fix: ImageBuf::get_pixels() did not honor the stride parameters. #2487.
  • fmath.h perf improvements: clamp() is 2x faster; madd() is improved
    especially on platforms without fma hardware; perf improvements in
    fast_sin, fast_cos; new safe_fmod is faster than std::fmod, new
    fast_neg is faster than simple negation in many cases, if you don't care
    that -(0.0) is 0.0 (rather than a true -0.0). #2491 #2492 #2494
  • strutil: New function: concat(). #2478
  • Build: un-embed the 'fmt' headers, instead auto-download if not found.
    #2439
  • Build: Protect against certain compiler preprocessor errors for user
    programs that include strutil.h but also inculde fmt on its own. #2498.

OpenImageIO 2.1.11.2

12 Feb 23:57
Compare
Choose a tag to compare

Release 2.1.11.2 (12 Feb 2020)

  • Another fix to the OpenEXR 2.2/2.3 problem, I didn't realize that the
    build was still breaking and needed an OIIO header included earlier to
    ensure that __has_include is defined before it is used.

OpenImageIO 2.1.11.1

11 Feb 23:05
Compare
Choose a tag to compare

Release 2.1.11.1 (11 Feb 2020)

  • Fix build break against OpenEXR 2.2 & 2.3, when OpenEXR was built with
    'autotools' and because of a bug in their build systems, neglected to
    install a certain OpenEXR header. It was fine if you were building
    against an OpenEXR that was built using CMake, which included all the
    headers. #2486

If you aren't in this corner case and haven't had build problems complaining about missing ImfFloatVectorAttribute.h, there's no need to rush to upgrade to this mini-release.

OpenImageIO 2.1.11.0

02 Feb 00:43
Compare
Choose a tag to compare

Release 2.1.11 (1 Feb 2020) -- compared to 2.1.10

  • Python bindings for ParamValueList.attribute(), when being passed
    attributes containing multiple values, now can have those values passed
    as Python lists and numpy arrays (previously they had to be tuples).
    #2437
  • OpenEXR support is extended to handle float vector metadata. #2459
  • Developer goody: simd.h vfloat3 has added a normalize(), length(),
    and length2() methods, to more closely match the syntax of Imath::Vec3f.
    #2437
  • Internals: changed a lot of assertions to only happen in debug build mode,
    and changed a lot that happen in release builds to only print the error
    but not force a termination. #2435
  • simd.h fix errors in vbool == and !=. #2463
  • Make sure the embedded 'farmhash' implementation is completely hidden
    behind proper namespaces. #2473
  • Many docs fixes.

OpenImageIO 2.1.10.1

10 Jan 19:38
Compare
Choose a tag to compare

Release 2.1.10.1 (10 Jan 2019)

  • Automatically detect the need to link against libatomic (fixes build on
    some less common platforms, should not affect Windows, MacOS, or Linux on
    x86/x86_64 users). #2450 #2455
  • Fixes to unordered_map_concurrent.h that affect some users who it for
    things other than OIIO per se (recent changes to the internals broke its
    use for the default underlying std::unordered_map). #2454
  • Bump the minimum pybind11 vesion that we auto-download, and also be sure
    to auto-download if pybind11 is found on the system already but is not an
    adequately new version. #2453
  • If libsquish is found on the system at build time, use it, rather than
    the "embedded" copy. This can improve build times of OIIO, and also helps
    us comply with Debian packaging rules that forbid using embedded versions
    of other Debian packages that can be used as simple dependencies. #2451
  • Fixes to formatting of man page generation (resolves warnings on Debian
    build process).

OpenImageIO 2.1.10.0

03 Jan 01:19
Compare
Choose a tag to compare

Release 2.1.10 (1 Jan 2020) -- compared to 2.1.9

  • Suppress warnings with old libraw on earlier gcc versions. #2413
  • Exif read: guard better against out of range offests, fixes crashes when
    reading jpeg files with malformed exif blocks. #2429
  • Python: add binding for missing ParamValue constructors. #2417
  • oiiotool & ImageBuf better error messages (rather than mysterious crash)
    for certain out of memory conditions. #2414
  • oiiotool --create and --pattern take a new optional parameter:
    :type=name that overrides the default behavior of allocating all
    internal buffers as float. #2414
  • Lots of typo fixes in docs, comments, and error messages. #2438
  • Fix broken version in the built openimageio.pc PkgConfig file. #2441
  • Fix typo in build script that caused it to fail to set the right symbol
    definition when building static libs. #2442.
  • More robust OIIO_PRETTY_FUNCTION definition. #2413
  • Better fallback for OIIO_ALIGN, rely on C++11. #2412
  • Docs: fix some II and IO chapter examples that used old open() API.
  • Build: bump default version of pybind11 to 2.4.3. #2436
  • Add ImageBuf::setpixel() methods that use cspan instead of ptr/len. #2443
  • Fixes to cmake config generation. #2448

OpenImageIO 2.1.9.0

08 Dec 20:17
Compare
Choose a tag to compare

This is the official transition of the supported production release to 2.1. Some very high level highlights you might want to know about 2.1:

  • The primary documentation is now hosted on https://openimageio.readthedocs.io and there you can find both beautiful HTML as well as PDF. A PDF book is no longer included in the distribution. I think everything has transitioned properly, but if you notice anything deficient in the new docs, please let me know.
  • We have overhauled the build system, modernized and improved. It is much better at finding, hinting, or excluding individual components and dependent packages. The new build scripts now require a CMake minimum version of cmake 3.12. Please read the notes below for details.
  • Support for HEIC/HEIF images.
  • A new notation for getting and setting attributes in ParamList and ImageSpec. For details, see #2204 and #2297.
  • Improved performance particularly for DPX reading, reading individual frames from movie files, and TextureSystem improvements under high threading.
  • Although we still use Travis and Appveyor (for now), much of the CI heavy lifting is now being done by GitHub Actions CI.

We will continue to issue new (compatible) 2.1.x releases approximately monthly, with bug fixes or minor/safe/nonbreaking enhancements.

Detailed release notes are below. Enjoy.

Release 2.1 (8 Dec 2019) -- compared to 2.0

New minimum dependencies:

  • CMake minimum is now 3.12. #2348 (2.1.5)

Major new features and performance improvements:

  • Support for HEIC/HEIF images. HEIC is the still-image sibling of HEVC
    (a.k.a. H.265), and compresses to about half the size of JPEG but with
    higher visual quality. #2160 #2188 (2.1.0)
  • oiiotool new commands: -evaloff -evalon --metamerge --originoffset
  • ImageCache/TextureSystem improved perf of the tile and file caches under
    heavy thread contention. In the context of a renderer, we have seen
    improvements of around 7% in overall render time, averaged across a suite
    of typical production scenes. #2314, #2316 (2.1.3) #2381 #2407 (2.1.8)
  • Fix huge DPX reading performance regression. Technically this is a bug
    fix that restores performance we once had, but it's a huge speedup.
    #2333 (2.1.4)
  • Reading individual frames from very-multi-image files (movie files) has
    been greatly sped up (10x or more). #2345 (2.1.4)

Public API changes:

  • ImageSpec new methods getattribute() and getattributetype(). #2204
    (2.1.1)

  • ImageSpec and ParamValueList now support operator ["name"] as a way
    to set and retrieve attributes. For example,

    myimagespec["compression"] = "zip";
    myimagespec["PixelAspectRatio"] = 1.0f;
    int dither = myimagespec["oiio:dither"].get<int>();
    std::string cs = myimagespec["colorspace"];
    

    See the documentation about "Attribute Delegates" for more information,
    or the new header attrdelegate.h. #2204 (2.1.1) #2297 (2.1.3)

  • ImageSpec::find_attribute now will retrive "datawindow" and "displaywindow"
    (type int[4] for images int[6] for volumes) giving the OpenEXR-like bounds
    even though there is no such named metadata for OIIO (the results will
    assembled from x, y, width, height, etc.). #2110 (2.1.0/2.0.4)

  • "Compression" names (where applicable) can now have the quality appended
    to the name (e.g., "jpeg:85") insead of requiring quality to be passed
    as a separate piece of metadata. #2111 (2.1.0/2.0.5)

  • Python: define __version__ for the module. #2096 (2.1.0/2.0.4)

  • Python error reporting for ImageOutput and ImageBuf.set_pixels
    involving transferring pixel arrays have changed from throwing exceptions
    to reporting errors through the usual OIIO error return codes and queries.
    #2127 (2.1.0/2.0.5)

  • New shell environment variable OPENIMAGEIO_OPTIONS can now be used to
    set global OIIO::attribute() settings upon startup (comma separated
    name=value syntax). #2128 (2.1.0/2.0.5)

  • ImageInput open-with-config new attribute "missingcolor" can supply
    a value for missing tiles or scanlines in a file in lieu of treating it
    as an error (for example, how OpenEXR allows missing tiles, or when reading
    an incompletely-written image file). A new global OIIO::attribute()
    setting (same name) also accomplishes the same thing for all files read.
    Note that this is only advisory, and not all file times are able to do
    this (OpenEXR is the main one of interest, so that works). #2129 (2.1.0/2.0.5)

  • ImageCache::invalidate() and TextureSystem::invalidate() now take an
    optional force parameter (default: true) that if false, will only
    invalidate a file if it has been updated on disk since it was first opened.
    #2133, #2166 (2.1.0/2.0.5)

  • New filter name "nuke-lanczos6" matches the "lanczos6" filter from Nuke.
    In reality, it's identical to our "lanczos3", but the name alias is
    supposed to make it more clear which one to use to match Nuke, which uses
    a different nomenclature (our "3" is radius, their "6" is full width).
    #2136 (2.1.0/2.0.5)

  • New helper functions in typedesc.h: tostring() converts nearly any
    TypeDesc-described data to a readable string, convert_type() does data
    type conversions as instructed by TypeDesc's. #2204 (2.1.1)

  • ImageBuf:

    • Construction from an ImageSpec now takes an optional zero parameter
      that directly controls whether the new ImageBuf should have its buffer
      zeroed out or left uninitialized. #2237 (2.1.2)
    • set_write_format() method has a new flavor that takes a
      cspan<TypeDesc> that can supply per-channel data types. #2239 (2.1.1)
  • ColorConfig:

    • Added getColorSpaceFamilyByName(), getColorSpaceNames(),
      getLookNames(), getDisplayNames(), getDefaultDisplayName(),
      getViewNames(), getDefaultViewName(). #2248 (2.1.2)
    • Added Python bindings for ColorConfig. #2248 (2.1.2)
  • Formal version numbers are now four parts: MAJOR.MINOR.PATCH.TWEAK.
    #2313,#2319 (2.1.3)

  • ImageInput now sets "oiio:subimages" attribute to an int representing the
    number of subimages in a multi-image file -- if known from reading just
    the header. A positive value can be relied upon (including 1), but a
    value of 0 or no such metadata does not necessarily mean there are not
    multiple subimages, it just means it could not be known from inexpensively
    reading only the header. #2344 (2.1.4)

  • The imagesize_t and stride_t values now have revised definitions.
    It should be fully API/ABI compatible (at least for 64 bit systems), but
    is a simpler, more modern, more platform-independent definition.
    #2351 (2.1.5)

  • DeepData has been altered to make pixel indices and total counts int64_t
    rather than int, in order to be safe for very large images that have > 2
    Gpixels. #2363 (2.1.5)

  • On OSX, we now expect non-embedded plugins to follow the convention of
    naming runtime-loaded modules foo.imageio.so (just like on Linux),
    whereas we previously used the convention of foo.imageio.dylib. Turns
    out that dylib is supposed to be only for shared libraries, not runtime
    loadable modules. #2376 (2.1.6)

Fixes and feature enhancements:

  • oiiotool:
    • New -evaloff and -evalon lets you disable and enable the expression
      substitution for regions of arguments (for example, if you have an
      input image filename that contains {} brace characters that you want
      interpreted literally, not evaluated as an expression). #2100 (2.1.0/2.0.4)
    • --dumpdata has more intelligible output for uint8 images. #2124
      (2.1.0/2.0.4)
    • Fixed but that could prevent -iconvert oiio:UnassociatedApha 1 from
      correctly propagating to the input reader. #2172 (2.1.0/2.0.6)
    • -o:all=1 (which outputs all subimages to separate files) fixed a
      crash that would occur if any of the subimages were 0x0 (it could
      happen; now it just skips outputting those subimages). #2171 (2.1.0)
    • Improved support of files with multiple subimages: Several commands
      honored -a but did not respect individual allsubimages= modifiers
      (--ch, --sattrib, --attrib, --caption, --clear-keywords,
      --iscolorspace, --orientation, --clamp, -fixnan); Several commands
      always worked on all subimages, but now properly respect -a and
      allsubimages= (--origin, --fullpixels, --croptofull, --trim);
      Several commands were totally unaware of subimages, but now are so and
      respect -a and allsubimages= (--crop, --fullsize, --zover, --fill,
      --resize, --resample). #2202 #2219, #2242 (2.1.1, 2.1.2)
    • --ociodisplay: empty display or view names imply using the default
      display or view. #2273 (2.0.10/2.1.3)
    • --metamerge option causes binary image operations to try to "merge"
      the metadata of their inputs, rather than simply copy the metadata
      from the first input and ignore the others. #2311 (2.1.3)
    • --colormap now supports a new "turbo" color map option. #2320 (2.1.4)
    • Expression evaluation has been extended to support operators // for
      integer division (whereas / is floating point division), and %
      for integer modulus. #2362 (2.1.5)
    • New --originoffset resets the data window origin relative to its
      previous value (versus the existing --origin that sets it absolutely).
      #2369 (2.1.5)
    • --paste has two new optional modifiers: :all=1 pastes the entire
      stack of images together (versus the default of just pasting the top
      two images on the stack), and :mergeroi=1 causes the result to have
      the merged data window of all inputs, instead of the foreground image
      clipping against the boundary of the background image data. #2369 (2.1.5)
    • --paste now works with deep images. #2369 (2.1.5)
    • --paste semantics have c...
Read more

OpenImageIO 2.1.8.2-RC3

06 Dec 01:23
Compare
Choose a tag to compare
Pre-release
  • Fix important bug that surfaced with the new fmt code update.
  • Remove obsolete PDF docs, rely on readthedocs now.
  • Turn off default for STOP_ON_WARNING.

I am expecting to make a final release on 8 Dec.

OpenImageIO 2.0.13

04 Dec 00:10
Compare
Choose a tag to compare

This is the newest stable supported release, guaranteed to be API/ABI back-compatible with prior 2.0.x releases. This will likely be the LAST update to 2.0 as the "supported release" family, though there may be subsequent bug fixes as it transitions to the obsolete (but occasionally supported) branch. Release notes are below.

Release 2.0.13 (1 Dec 2019) -- compared to 2.0.12

  • Bug fix in deep image compare (IBA::compare() or oiiotool --compare)
    would fail to notice differences in deep images where the corresponding
    pixels had differing numbers of samples. #2381 (2.1.8/2.0.13)
  • DPX: Fix bugs related to int32 math that would lead to incorrect behavior
    in very high-resolution files. #2396 (2.1.3/2.0.13)
  • When converting images to texture (via maketx or IBA::make_texture),
    correctly handle color space conversions for greyscale images. #2400
    (2.1.8/2.0.13)
  • Build: suppress warnings with libraw for certain gcc versions.
  • Build: Fix compiler warnings in ustring.h when _LIBCPP_VERSION is not
    defined. #2415 (2.1.8.1/2.0.13)