OpenImageIO

Reading, writing, and processing images in a wide variety of file formats, using a format-agnostic API, aimed at VFX applications.

APACHE-2.0 License

Stars
1.9K

Bot releases are hidden (Show)

OpenImageIO - OpenImageIO 2.2.15.0

Published by lgritz over 3 years ago

Release 2.2.15 (1 Jun 2021) -- compared to 2.2.14

  • BMP improvements: now support reading rle-compressed BMP files; writing
    single channel grayscale images now save as 8bpp palette images intead of
    24bpp; and reading 8bpp where all palette entries have R==G==B looks like
    a 1-channel grayscale instead of 3-channel RGB. #2976
  • Bug: IBA::render_text did not properly account for alpha of the draw
    color. #2981
  • Bug: Fix runaway parsing time for pathological XMP metadata. #2968
  • Bug: Fixed a crash is ImageCacheFile::read_unmipped when sampling
  • Fix exported cmake config files, which could fail if Imath and OpenEXR
    weren't the at the same version number. #2975
  • Build: Modernize cmake to use targets for PNG and ZLIB. #2957
  • Build: Fix to accommodate upcoming OpenColorIO 2.1 deprecation of
    parseColorSpaceFromString. #2961
  • Build: Changes to make it build against TBB 2021. #2985
  • Dev: Add Strutil functions: find, rfind, ifind, irfind. #2960
    non-zero-base channels. (#2962)
OpenImageIO - OpenImageIO 2.2.14.0

Published by lgritz over 3 years ago

Release 2.2.14 (1 May 2021) -- compared to 2.2.13

  • JPEG: Improve reading of files with mildly corrupted headers. #2927
  • TIFF: Support IOProxy for input. #2921
  • BMP: Improve performance by eliminating wasteful per-scanline allocation
    and needless data copying. #2934
  • Build/CI: Fix all the build_*.bash scripts to not use cmake --config flag,
    which was harmlessly ignored but is flagged as an error for CMake 3.20.
    #2931
  • Build: More fixes related to supporting a wide range of OpenEXR versions,
    and making our exported cmake configs correctly transmit dependencies on
    OpenEXR include paths. #2935 #2941 #2942 #2947
  • ImageBufAlgo::fillholes_pushpull: added logic to correctly set the spec's
    alpha_channel field when generating sub-images. #2939
  • Python: MakeTxBumpWithSlopes enum value had been inadvertently omitted
    from the Python bindings. #2951
OpenImageIO - OpenImageIO 2.2.13.1

Published by lgritz over 3 years ago

Release 2.2.13.1 (7 Apr 2021) -- compared to 2.2.13.0

(Build related fixes only)

  • Fix build break when using gcc 10 (and some other modern gcc versions)
    but using C++11 compilation mode. #2930
  • CMake: don't use --config inappropriately (CMake 3.20 was broken for
    several of our helper build scripts for building dependencies). #2931
  • Be robust to OpenEXR 2.x installations where IlmBase and OpenEXR had
    separate sets of config files in different subdirectories. #2935
OpenImageIO - OpenImageIO 2.2.13.0

Published by lgritz over 3 years ago

Release 2.2.13 (1 Apr 2021) -- compared to 2.2.12

  • Get ready for upcoming Imath/OpenEXR 3.0 release. #2883 #2894 #2897
  • GIF: Fix error checking for non-existant GIF files. #2886
  • Fix crash related to ImageBuf:set_write_format() when used in conjunction
    with a file format that doesn't support per-channel data types. #2885
  • Make RAW files handle Unicode filenames on Windows. #2888
  • Make sure OIIO builds cleanly with C++20. #2891
  • BMP: Several bug fixes when reading an older (V1) variety of BMP files.
    #2899
  • Targa: fix reading tga files with 0-sized thumbnails. #2903
  • TIFF: fix reading of certain tiled TIFF files with the vertical image size
    is not a whole multiple of the tile size. #2895
  • Avoid OpenColorIO v2 exception when color-conversion of single points (we
    didn't pass a correct stride, thinking that stride isn't used for a single
    point). #2911
  • make_texture: When outputting to a 'half' data format file, clamp filtered
    values to the half range so large values don't inadvertently get converted
    to half 'infinite' values. #2892
  • Improvements to ustring internals to ensure that no two ustrings ever end
    up with the same hash() value. #2870
  • Fixes for compiler errors when compiling farmhash.h using C++11 mode with
    newer gcc (6+). #2914
OpenImageIO - OpenImageIO 2.2.12.0

Published by lgritz over 3 years ago

Release 2.2.12 (1 Mar 2021) -- compared to 2.2.11

  • Bug fix: Improve parsing of XMP records in metadata: more correct handling
    of lists/sequences, better inference of types that look like int or float
    (rather than forcing unknown fields into strings), fixed bugs in parsing
    rational values. #2865
  • Bug fix: Fix loading PSB files with cinf tags. #2877
  • Build: Improvements to building or linking static libraries. #2854
  • Build: Change default STOP_ON_WARNING to OFF for release branches
    (including this one) so that small change in compiler warnings after our
    release don't break anybody's builds. (Though we still stop on warnings
    for CI builds). #2861
  • Build: More clear warnings about using OpenVDB 8+ when building for C++11,
    because OpenVDB 8 requires C++14 or higher. #2860
  • Build: The pkgconfig OpenImageIO.pc was specifying the include path
    incorrectly. #2869
  • Build: More gracefully handle building against a custom Imath/OpenEXR even
    when another exists in the system area. #2876
  • Build: Minor fixes to build cleanly against the upcoming Imath 3.0. #2878
  • Dev: hash.h: Make many of the hash functions constexpr. #2843
  • Dev: Better unit tests to verify correctness and stability over time of
    the hash functions. #2853
  • Dev: unordered_map_concurrent.h: New methods find_or_insert, nobin_mask().
    #2867
  • CI: Speed up CI builds by not building OpenEXR example programes. #2857
  • CI: Speed up CI by using GitHub 'cache' actions + ccache. #2859
  • CI: Separate stages (setup, deps, build, test) into separate GHA "steps"
    for better logging and understanding of the timing and performance. #2862
  • CI: Now actively testing libheif in Linux CI. #2866
  • CI: Remove the last vestiges of Travis-CI, which we no longer use. #2871
  • CI: For failed tests, add CMake cache and log part of the saved artifacts.
  • PSA: Avoid libheif 1.10 on Mac, it is broken. Libheif 1.11 is fine.
OpenImageIO - OpenImageIO 2.2.11.1

Published by lgritz over 3 years ago

  • Fix build break against Qt 5.15.2 (deprecated enum). #2852

Emergency patch, because nearly simultaneously with this morning's release of 2.2.11.0, newly pushed ASWF Docker containers for VFX Platform 2021 seem to have updated to a slightly newer Qt that marked an old enum we used as deprecated.

OpenImageIO - OpenImageIO 2.2.11.0

Published by lgritz over 3 years ago

Release 2.2.11 (1 Feb 2021) -- compared to 2.2.10

  • Enabled AVIF decoding of heic files (requires libheif >= 1.7 and for it
    to have been built with an AV1 encoder/decoder). #2811 #2812 #2814 #2818
  • oiiotool --help now prints the OCIO version (where it prints the config
    file and known color space). #2849
  • Bug fix: ImageBufAlgo::ociolook() and ociofiletransform() internally
    reversed the order of their inverse and unpremult arguments, making it
    hard to select the inverse transformation. #2844
  • Fix memory leak during decoding of some invalid Exif blocks. #2824
  • Build: Fixed warnings when building against python 2.x. #2815
  • Build: No longer directly link against python libraries when unnecessary.
    #2807
  • Build: Better finding of OpenJpeg 2.4. #2829
  • Build: On Windows, fix some linkage problems by changing the pybind11
    bindings to make a CMake "shared" library rather than "module". Sounds
    wrong, but seems to work. We will reverse if this causes problems. #2830
  • Build: On Mac, libheif 1.10 is very broken. Don't use that version. #2847
  • Build: Fix build break against changes coming in future libtiff, where it
    is changing from some libtiff-defined integer types to the equivalent
    stdint.h types. #2848
  • Build: Some final touches to prepare for release of OpenColor 2.0. #2849
  • Build: Fixes to support the libraw 202101 snapshot (their in-progress
    0.21.0). #2850
  • CI: Got Windows CI fully working, bit by bit. #2796 #2805 #2821 #2826
    #2834 #2835 #2836 #2840
  • Dev: Some internal rearrangement of span.h and string_view.h (that should
    not break source or ABI compatibility). std::size() and std::ssize()
    should work with OIIO::span and OIIO::string_view now. #2827
  • Dev: ustring internals now have a way to ask for the list of ustrings
    whose hashses collided. #2786
  • Dev: New Filesystem::generic_filepath() returnss a filepath in generic
    format (not OS specific). #2819
  • Dev: ArgParse::abort() lets the response to a command line argument signal
    that no further arguments should be parsed. #2820
  • Dev: In oiioversion.h, added macros OIIO_VERSION_GREATER_EQUAL and
    OIIO_VERSION_LESS. #2831
  • Dev: In platform.h, added macro OIIO_INLINE_CONSTEXPR, which is equivalent
    to inline constexpr for C++17, but just constexpr for C++ <= 14. #2832
OpenImageIO - OpenImageIO 2.2.10.1

Published by lgritz almost 4 years ago

Release 2.2.10.1 (7 Jan 2021) -- compared to 2.2.10.0

  • Fix build break against OpenColorIO v2.0 RC1. #2817
OpenImageIO - OpenImageIO v2.2.10.0

Published by lgritz almost 4 years ago

Happy New Year!

I have tagged Release-2.2.10.0 and moved the "release" branch marker to this location. This is the latest supported stable release that is guaranteed to be API, ABI, and link backwards-compatible with prior 2.2.x releases.

The tag "v2.2.10.0" has also been added. In 2021, we will be transitioning to this more commonly used tag nomenclature. For the rest of the 2.2 releases, we will issue both old and new tag styles for each release, to give people time to transition any scripts that assume a particular release tag nomenclature. We will also change the release branch development points from RB-x.y to dev-x.y, which I think is more clear about its intent than our nonstandard "RB".

Release 2.2.10 (1 Jan 2021) -- compared to 2.2.9

  • GIF: support for UTF-8 filenames on Windows. #2777
  • OpenEXR: Fix rare crash during multithreaded output. #2781
  • OpenEXR: Fix potential crash parsing OpenEXR header that contains Rational
    attributes with certain values. #2791
  • Improved error reporting for IOFile failures to open the file. #2780
  • Build: Fix webp compile break on 32 bit systems. #2783
  • Build/Windows: Fix symbol definition conflict with pyconfig.h. #2800
  • CI: Test the latest fmt, PugiXML, and pybind11 releases. #2778
  • Docs: Add explanation of oiiotool -otex modifiers that were missing from
    the docs. #2790 Fix some duplicated text. #2785
OpenImageIO - OpenImageIO 2.2.9.0

Published by lgritz almost 4 years ago

Release 2.2.9 (1 Dec 2020) -- compared to 2.2.8

  • TIFF: Fix reading files with "separate" planarconfig and rowsperstrip more
    than 1. #2757 (2.3.0.1/2.2.9)
  • RAW: add "raw:user_flip" input configuration hint to control this option
    in the underlying libraw. #2769 (2.3.1.0)
  • PNG: Read Exif data from PNG files. #2767
  • BMP: Fix reading BMP images with bottom-to-top row order. #2776
  • Work to ensure that OIIO will build correctly against the upcoming
    Imath 3.0 and OpenEXR 3.0.
  • Make the OIIO CMake files work properly if OIIO is a subproject. Also
    various other CMake script refactoring. #2770
OpenImageIO - Release 2.2.8.0

Published by lgritz almost 4 years ago

Release 2.2.8 (1 Nov 2020) -- compared to 2.2.7

  • Fix that ImageBuf images backed by ImageCache, could hold an outdated copy
    of the image if it was in the imagecache once, then changed on disk. #2696
  • Fix stack overflow crash in IBA::colorconvert of unusually wide images.
    #2716
  • Fix boost linkage problem on Windows. #2727
  • Fix broken reads of 16 bit iff files. #2736
  • Fix make_texture incorrectly setting tile sizes. #2737
  • Fix incorrect ARM NEON code in simd.h. #2739
  • Improve oiiotool --chappend and --siappend, allowing an optional modifier
    ":n=" to specify the number of images from the stack to be combined by
    having their channels or subimages appended. #2709
  • WebP: add support for requesting compression "lossless". #2726
  • Improve build system for finding Python, now if a specific version is not
    requested, default to whichever is found rather than always defaulting to
    Python 2.7. #2705 #2764
  • Fix deprecation warnings when building with very new PugiXML versions.
    #2733
  • Fix ImageCache bug: add_tile/get_tile not properly honoring when
    chend < chbegin it should get all channels. #2742
  • Fix build break when strutil.h was included in Cuda 10.1 code. #2743
  • Docs: Make readthedocs generate downloadable htm as well as pdf. #2746
  • Improve oiiotool's guessing about the desired output format based on
    inputs (in the absence of -d to specify the format). #2717
  • JPEG output: add support for writing progressive JPEGS (set the
    attribute "jpeg:progressive" to 1). #2749
  • WebP input improvements including: RGB images are kept as RGB instead of
    always adding alpha; more efficient by skipping alpha premultiplication
    when it's unnecessary; now can read animated WebP images as multi-subimage
    files. #2730
  • Docs: ImageInput chapter now has an example of reading image data into
    separate per-channel buffers. #2756
  • Fixes to build against recent changes in OpenColorIO v2 master. #2765
OpenImageIO - OpenImageIO 2.2.7.0

Published by lgritz about 4 years ago

This is the latest monthly instalment of the current supported production release series. It is API and ABI compatible with prior 2.2 releases.

Release 2.2.7 (1 Oct 2020) -- compared to 2.2.6

  • oiiotool new command: --pastemeta takes two images as arguments, and
    appends all the metadata (only) from the first image onto the second
    image's pixels and metadata, producing a combined image. #2708
  • TIFF: Fix broken reads of multi-subimage non-spectral files (such as
    photometric YCbCr mode). #2692
  • Python: When transferring blocks of pixels (e.g., ImageInput.read_image()
    or ImageOutput.write_scanline()), "half" pixels ended up mangled into
    uint16, but now they use the correct numpy.float16 type. #2694
  • Python: The value passed to attribute(name, typedesc, value) can now be
    a tuple, list, numpy array, or scalar value. #2695
  • IBA::contrast_remap() fixes bug that could crash for very large images
    #2704
  • Warn about recommended minimum versions of some dependencies.
  • Windows fix: correct OIIO_API declaration on aligned_malloc, aligned_free
    of platform.h. #2701
  • Fix oiiotool crash when --resize was used with multi-subimage files. #2711
  • Bug fix in Strutil::splits and splitsv: when input is the empty string,
    the split should return no pieces. #2712
  • Support for libheif 1.9. #2724
  • TIFF: Fix spec() and spec_dimensions() for MIPmapped TIFF files, they
    did not recognize being asked to return the specs for invalid subimage
    indices. #2723
  • TIFF: add ability to output 1bpp TIFF files. #2722
OpenImageIO - OpenImageIO 2.1.20

Published by lgritz about 4 years ago

Note that this is a bug-and-build fix release on the obsolete 2.1 release series.

Release 2.1.20 (1 Oct 2020) -- compared to 2.1.19

  • Windows: make sure aligned_malloc and aligned_free are properly declared
    as OIIO_API. #2701
  • Support for libheif 1.8 and 1.9. #2685 #2724
  • Fix crash in IBA::contrast_remap for very large images. #2704
  • Bug fix in Strutil::splits and splitsv: when input is the empty string,
    the split should return no pieces. #2712
OpenImageIO - OpenImageIO 2.2.6.1

Published by lgritz about 4 years ago

Release 2.2 (1 Sept 2020) -- compared to 2.1

New minimum dependencies:

  • pybind11 >= 2.4.2
  • openjpeg >= 2.0 (if JPEG-2000 support is desired) #2555 (2.2.2)

New major features and public API changes:

  • Improved IOProxy support:
    • ImageInput and ImageOutput now have direct API level support for IOProxy
      in their open() and create() calls, as well as a new set_ioproxy()
      method in these classes. #2434 (2.2.0)
    • ImageBuf can now specify a proxy upon construction for reading, and for
      writing via a set_write_ioproxy() method that applies to subsequent
      write call. #2477 (2.2.1).
    • DPX input now supports IOProxy. #2659 #2665 (2.2.5)
    • ImageCache (and ImageBuf backed by ImageCache) entries that use IOProxy
      are careful not to fully "close" their proxies when trying to reclaim
      space in the file cache (that would be bad, since the proxy can't be
      re-opened). #2666 (2.2.5)
  • Improved support for multi-subimage files:
    • oiiotool: Nearly all operations now allow an optional :subimages=...
      modifier that restricts the operation to be performed on only a subset
      of named or indexed subimages. See docs for details. #2582
    • Python ImageBuf.write() variety added that takes an open
      ImageOutput. This is the key to writing a multi-subimage file (such
      as a multi-part OpenEXR) using the Python ImageBuf interface. #2640
      (2.2.4)
    • Fixes to --croptofull and -o with multi-subimages. #2684 (2.2.6)
  • Python bindings:
    • Python bindings have been added for missing ParamValue constructors.
      We previously exposed the PV constructors from just a plain int, float,
      or string, but there wasn't an easy way to construct from arbitrary
      data like there is in C++. Now there is. #2417 (2.2.0)
    • 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 (2.1.11/2.2.0)
    • ImageBufAlgo.color_range_check() is now available to the Python
      bindings (was previously only C++). #2602 (2.2.3)
    • New variety of ImageBuf.write() that takes an open ImageOutput.
      This is the key to writing a multi-subimage file (such as a multi-part
      OpenEXR) using the Python ImageBuf interface. #2640 (2.2.4)
  • ImageBuf:
    • Easier direct use of IOProxy with ImageBuf: constructor and reset()
      for file-reading ImageBuf now take an optional IProxy* parameter,
      and a new set_write_ioproxy() method can supply an IOProxy for
      subsequent write(). #2477 (2.2.1)
    • Add ImageBuf::setpixel() methods that use cspan instead of ptr/len.
      #2443 (2.1.10/2.2.0)
    • Add "missing" reset() varieties so that every IB constructor has a
      corresponding reset() with the same parameters and vice versa. #2460
  • ImageBufAlgo:
    • New repremult() is like premult, but will not premult when alpha is
      zero. #2447 (2.2.0)
    • New max() and min() functions take the pixel-by-pixel maximum
      or minimum of two images. #2470 (2.2.1)
  • ColorConfig: add OCIO "role" accessors. #2548
  • Low-res I/O of images to terminals that support full color and Unicode
    characters. Just output to a file ending in ".term", and it will convert
    (on certain terminals) to an image displayed directly in the terminal.
    #2631 (2.2.4)
    Try:
    oiiotool myfile.exr -o out.term

Performance improvements:

  • Greatly improved TextureSystem/ImageCache performance in highly threaded
    situations where access to the cache was a main bottlenecks. In renders of
    scenes with lots of texture access, with dozens of threads all contending
    for the cache, we are seeing some cases of 30-40% reduction in total
    render time. In scenes that are less texture-bottlenecked, or that don't
    use huge numbers of threads, the improvement is more modest. #2433 (2.2.0)

Fixes and feature enhancements:

  • oiiotool:
    • Intelligible error messages (rather than crashes) if you attempt to
      create an image too big to fit in memory. #2414 (2.2.0)
    • --create and --proxy take an additional optional modifier:
      :type=name that specifies the type of buffer to be created (the
      default, as usual, is to create an internal float-based buffer). #2414
      (2.2.0)
    • -o optional argument :type=name is a new (and preferred) synonym
      for what used to be :datatype=. #2414 (2.2.0)
    • --autotrim now correctly trims to the union of the nonzero regions
      of all subimages, instead of incorrectly trimming all subimages to the
      nonzero region of the first subimage. #2497 (2.2.1.2)
    • --subimage now has an optional :delete=1 modifier that causes the
      operation to delete one named or indexed subimage (versus the default
      behavior of extracing one subimage and deleting the others). #2575
      (2.2.3)
    • The list of dependent libraries (part of oiiotool --help) now
      correctly reports the OpenEXR version. #2604 (2.2.3)
    • Fix: --eraseattrib did not correctly apply to all subimages when
      -a or :allsubimages=1 were used. #2632 (2.2.4)
  • ImageBuf / ImageBufAlgo:
    • Huge ImageBuf allocation failures (more than available RAM) now are
      caught and treated as an ImageBuf error, rather than crashing with an
      uncaught exception. #2414 (2.2.0)
    • ImageBuf constructors that are passed an ImageSpec (for creating an
      allocated writable IB or "wrapping" a user buffer) now check that the
      spec passed has enough information to know the size of the buffer
      (i.e., it will be recognized as an error if the width, height, depth,
      channels, or data type have not been set validly). #2460
    • Fix: ImageBuf::getchannel() did not honor its wrap parameter.
      #2465 (2.2.1/2.1.12)
    • Fix: IBA::reorient() and IBA::computePixelHashSHA1() did not honor
      their nthreads parameter. #2465 (2.2.1/2.1.12)
    • resample() has been modified to more closely match resize by using
      clamp wrap mode to avoid a black fade at the outer edge of the
      resampled area. #2481
    • Fix: ImageBuf::get_pixels() did not honor the stride parameters.
      #2487. (2.1.12/2.2.1)
    • Fix resize() to avoid a crash / stack overflow in certain cases of
      very big images and very large filter kernels. #2643 (2.2.4)
    • Minor improvements to ImageBuf error formatting. #2653 (2.2.5)
  • ImageCache / TextureSystem / maketx:
    • New IC/TS attribute "trust_file_extensions", if nonzero, is a promise
      that all files can be counted on for their formats to match their
      extensions, which eliminates some redundant opens and format checks
      in the IC/TS and can reduce needless network/filesystem work. Use with
      caution! #2421 (2.2.0)
    • texture3d() fixed some cases where derivative results were not
      correctly copied to the outputs. #2475 (2.2.1)
    • maketx/IBA::make_texture: better error detection and messages when
      using "overscan" textures with formats that can't support it properly.
      (Punchline: only OpenEXR textures can do it.) #2521 (2.2.0)
    • Fix possible redundant tile reads in multithread situations (harmless,
      but makes for redundant I/O). #2557 (2.2.2)
  • Python:
    • Fixed a bug that lost certain string arguments, especially when passing
      a TypeDesc as its string equivalent. #2587 (2.1.16/2.2.3)
    • Fixed broken bindings of ImageSpec.erase_attribute. #2654
      (2.1.19/2.2.6)
    • Fix missing ImageInput.read_image(). #2677 (2.1.19/2.2.6)
  • Exif read: guard better against out of range offsets, fixes crashes when
    reading jpeg files with malformed exif blocks. #2429 (2.1.10/2.2.0)
  • Fix: ImageSpec::erase_attribute() did not honor its searchtype
    parameter. #2465 (2.2.1/2.1.12)
  • Fix: Some ColorProcessor::apply() methods were not using their chanstride
    parameters correctly. #2475 (2.1.12)
  • Fix: iinfo return code now properly indicates failures for files that
    can't be opened. #2511 (2.2.2/2.1.13)
  • DPX:
    • IOProxy reading is now supported. #2659 (2.2.5)
    • DPX: Add support for reading DPX files from IOProxy (such as from a
      memory buffer). #2659 #2665 (2.1.19/2.2.6)
  • HDR files:
    • Improve performance when reading HDR files out of order (when combined
      with ImageCache, observed to speed up out-of-order HDR reading by 18x).
      #2662 (2.2.5)
  • JPEG:
    • Fix resolution unit metadata that was not properly set in JPEG output.
      #2516 (2.2.2/2.1.13)
    • Fix loss of 'config' info upon close/reopen. #2549 (2.2.2)
  • OpenEXR:
    • Add support for reading and writing float vector metadata. #2459 #2486
    • Fix bug in the channel sorting order when channels are "X" and
      "Y" (was reversing the order by confusing "Y" for "luminance"). #2595
      (2.1.16/2.2.3)
    • We no longer automatically rename the "worldToNDC" attribute to
      "worldtoscreen" and vice versa. #2609 (2.2.4)
  • PNG:
    • Fix loss of 'config' info upon close/reopen. #2549 (2.2.2)
    • Add output configuration hint "png:filter" to control PNG filter
      options. #2650 (2.2.5)
    • Improved propagation of PNG write errors. #2655 (2.2.5)
    • Tell libpng to turn off sRGB profile check, which has a known problem of
      false positives. #2655 (2.2.5)
    • New output option "png:filter" allows control of the PNG filter
      options. #2650 (2.1.19/2.2.6)
  • Raw images:
    • Support for new Canon .cr3 file, but only if you build against
      libraw >= 0.20.0 developer snapshot. #2484 (2.2.1) #2613 (2.2.4)
    • RAW input: set the "raw:flip" attribute if the underlying libraw did a
      reorientation. #2572 (2.1.15/2.2.3)
    • Avoid errors (in libraw) that resulted from multiple threads opening
      raw files at the same time. #2633 (2.2.4)
  • RLA:
    • Additional sanity checks and error checks/messages for detecting files
      that might be first mistaken for RLA files, but actually are not.
      #2600 (2.2.3)
  • TIFF:
    • Internal improvements to handling metadata retrieval for certain
      unusual tags. #2504 (2.2.2/2.1.13)
    • Fix subtle bug when reading Exif directory in the header. #2540
      (2.2.2)
  • Video files:
    • Fix possible infinite loop in the FFMpeg-based reader. #2576
      (2.1.15/2.2.3)

Developer goodies / internals:

  • argparse.h:
    • Complete overhaul of ArgParse to make it more like Python argparse.
      Please read the extensive comments in argparse.h for documentation.
      For now, the old ArgParse interface still works, but is considered
      deprecated. #2531 (2.2.2) #2618 #2622 (2.2.4)
  • attrdelegate.h:
    • New as_vec<> method returns the whole attribute as a std::vector.
      #2528 (2.2.2)
  • filesystem.h:
    • Catch previously uncaught exceptions that could happen in certain
      Filesystem utility calls. #2522 (2.2.2/2.1.13)
    • New write_text_file() convenience function for opening, writing, and
      closing a text file all in one step. #2597 (2.2.3)
  • fmath.h:
    • clamp() is 2x faster. #2491 (2.1.12/2.2.2)
    • Very minor fix to OIIO::clamp(), shouldn't affect normal use with
      floats at all, but fixed a subtle quasi-bug in OSL. #2594 (2.1.15/2.2.3)
    • madd() is improved especially on platforms without fma hardware
      #2492 (2.1.12/2.2.2)
    • Perf improvements to fast_sin, fast_cos #2495 (2.1.12/2.2.2)
    • New safe_fmod() is faster than std::fmod. #2495 (2.1.12/2.2.2)
    • 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). #2495
      (2.1.12/2.2.2)
    • Add vint4, vint8, and vint16 versions of clamp(). #2617 (2.2.4)
  • oiioversion.h:
    • Fix typo that left the OIIO_VERSION_RELEASE_TYPE symbol undefined.
      #2616 (2.2.4/2.1.16)
    • Add new OIIO_MAKE_VERSION(maj,min,patch) macro that constructs the
      proper single integer code for a release version. #2641 (2.2.4/2.1.17)
  • paramlist.h:
    • New ParamValueList::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 (2.2.2/2.1.13)
    • Add get_indexed() method to ParamValueList and AttrDelegate. #2526
      (2.2.2/2.1.13)
  • platform.h:
    • OIIO_PRETTY_FUNCTION definition is more robust for weird compilers
      (will fall back to __FUNCTION__ if all else fails). #2413 (2.2.0)
    • OIIO_ALIGN definition is more robust, will fall back to C++11
      alignas when not a compiler with special declspecs (instead of being
      a compile time error!). #2412 (2.2.0)
    • A variety of OIIO_PRAGMA_... macros have been added to help deal
      with compiler-specific pragmas. #2467 (2.2.1)
  • simd.h:
    • vfloat3 has added a normalize(), length(), and length2()
      methods, to more closely match the syntax of Imath::Vec3f. #2437
      (2.1.11/2.2.0)
    • fix errors in vbool == and !=. #2463 (2.1.11/2.2.1)
    • Add float3 versions of abs, sign, ceil, floor, and round (they already
      existed for float4, float8, float16, but not float4). #2612 (2.2.4)
    • Improved support for ARM NEON SIMD (caveat: this is still not well
      tested). #2614 (2.2.4)
    • Improve performance for many float8/int8 functions and operators when
      running on only 4-wide hardware, by using two 4-wide instructions
      instead of reverting to scalar. #2621
  • span.h:
    • Allow the constructor from std::vector to allow vectors with custom
      allocators. #2533 (2.2.2)
  • strutil.h / ustring.h:
    • New Strutil::concat() and ustring::concat() concatenate two
      strings, more efficiently than sprintf("%s%s") by avoiding any
      unnecessary copies or temporary heap allocations. #2478 (2.2.1)
    • Strutil::upper() and lower() return all-upper and all-lowercase
      versions of a string (like to_lower and to_upper, but not in-place
      modifications of the existing string). #2525 (2.2.2/2.1.13)
    • Strutil::repeat() has been internally rewritten to more efficient by
      avoiding any unnecessary copies or temporary heap allocations. #2478
      (2.2.1)
  • typedesc.h:
    • TypeDesc has additional helpers of constexpr values TypeFloat2,
      TypeVector2, TypeVector4, TypeVector2i, TypePointer. #2592 (2.1.16/2.2.3)
  • unordered_map_concurrent.h:
    • Fix missing decrement of size() after erase(). #2624 (2.2.4)
  • More reshuffling of printf-style vs fmt-style string formatting. #2424
    (2.2.0) #2649 (2.2.4)
  • 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 (2.1.11/2.2.0)
  • Internals: Replaced most uses of boost::thread_specific_ptr with C++11
    thread_local. #2431 (2.2.0)
  • oiiotool: Big overhaul and simplification of internals. #2586 #2589 (2.2.3)

Build/test system improvements and platform ports:

  • CMake build system and scripts:
    • New non-default CMake build flag EXTRA_WARNINGS, when turned on, will
      cause gcc and clang to compile with -Wextra. This identified many new
      warnings (mostly about unused parameters) and fixes were applied in
      #2464, #2465, #2471, #2475, #2476. (2.2.1)
    • FindOpenColorIO.cmake now correctly discerns the OCIO version (2.2.1),
      and now sets up a true imported target. #2529 (2.2.2)
    • FindOpenEXR.cmake has better detection of debug openexr libraries.
      #2505 (2.2.2/2.1.13)
    • 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
      (2.2.2/2.1.13)
    • Fix exported cmake config file, it was not ensuring that the Imath
      headers properly ended up in the config include path. #2515
      (2.2.2/2.1.13)
    • Change all CMake references to PACKAGE_FOUND to Package_Found (or
      whatever capitalization matches the actual package name). #2569 (2.2.2)
    • The exported CMake config files now set cmake variable
      OpenImageIO_PLUGIN_SEARCH_PATH #2584 (2.1.16/2.2.3)
    • Improved hints printed about missing dependencies. #2682 (2.2.6)
  • Dependency version support:
    • Pybind11 is no longer auto-downloaded. It is assumed to be
      pre-installed. A script src/build-scripts/build_pybind11.bash is
      provided for convenience if you lack a system install. #2503 (2.2.2)
      Bump the minimum pybind11 version that we accept, to 2.4.2 #2453,
      and add fixes to allow support of pybind11 2.5. #2637 (2.2.4)
    • fmt libray: Un-embed fmt headers. If they are not found on the system
      at build time, they will be auto-downloaded. #2439 (2.2.0)
    • Support for building against libraw 0.20. #2484 (2.2.1) #2580 (2.2.3)
    • Build properly against OpenColorIO's current master (which is the
      in-progress work on OCIO v2). #2530 (2.2.2)
    • Fix static boost to not overlink on Windows. #2537 (2.2.2)
    • Fix build breaks against TOT libtiff master, which had #define
      clashes with our GPSTag enum values. #2539 (2.2.2)
    • Ensure compatibility and clean builds with clang 10. #2518 (2.2.2/2.1.3)
    • Support verified for gcc 10, added to CI tests. #2590 (2.2.3)
    • Support for Qt 5.15. #2605 (2.2.3)
    • Fixes to support OpenColorIO 2.0. #2636 (2.2.4)
    • Build against more recent versions of fmtlib. #2639 (2.2.4)
    • Included scripts to download and build libtiff #2543 (2.1.13/2.2.2),
      PugiXML #2648 (2.2.4), zlib, libpng, libjpeg-turbo. #2663 (2.2.5)
    • Minor fixes for libheif 1.8. #2685 (2.2.6)
    • Add a build_libtiff.bash script to make it easy to build the libtiff
      dependency. #2543 (2.1.13/2.2.2)
    • "tinyformat" is no longer used, even optionally. We have switched
      entirely to fmtlib, which is more similar to the upcoming C++20
      std::format. #2647 (2.2.4)
  • Testing and Continuous integration (CI) systems:
    • Mostly retire TravisCI for ordinary Linux x64 and Mac builds, now we
      rely on GitHub Actions CI. Nightly test added. Use ASWF docker images
      to test exactly against VFX Platform 2019 and 2020 configurations.
      #2563 (2.2.2) #2579 (2.2.3)
    • Add Travis test for arm64 (aka aarch64) builds. This is still a work
      in progress, and not all testsuite tests pass. #2634 (2.2.4)
    • Our CI tests now have a "bleeding edge" matrix entry that tests against
      the current TOT master build of libtiff, openexr (#2549), and pybind11
      (#2556). (2.2.2)
    • GitHub CI tests, when they fail, leave behind an "artifact" tar file
      containing the output of the tests, so that they can be easily
      downloaded and inspected (or used to create new reference output).
      #2606 (2.2.4)
    • CI Mac tests switch to Python 3.8. (2.2.4)
    • Windows CI switched from using Vcpkg to building its own dependencies.
      #2663 (2.2.5)
    • Testing of TGA now assumes the test images are in the oiio-images
      project, not separately downloaded (the download location disappeared
      from the net). #2512 (2.2.2)
    • Beef up OpenEXR compliance tests, many more examples from
      openexr-images, including many corrupted image failure cases. #2607
      (2.2.4)
  • Progress on support for using Conan for dependency installation. This is
    experimental, it can't yet build all dependencies. Work in progress.
    #2461 (2.2.1)
  • The version of gif.h that we embed for GIF output has been updated.
    #2466 (2.2.1)
  • The farmhash functions have been cleaned up to be more careful that none
    of their internal symbols are left visible to the linker. #2473 (2.2.1)
  • Clarification about .so name versioning: In supported releases, .so
    contains major.minor, but in master (where ABI is not guaranteed stable,
    we name major.minor.patch). #2488 (2.2.1)
  • Protect against certain compiler preprocessor errors for user programs
    that include strutil.h but also include fmt on its own. #2498.
    (2.1.12/2.2.2)
  • 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 (2.2.2/2.1.3)
  • Fix compiler warning about incorrect extra braces. #2554 (2.2.2)
  • All build-scripts bash scripts now use /usr/bin/env to find bash. #2558
    (2.2.2)
  • Avoid possible link errors by fully hiding IBA functions taking IplImage
    parameters, when no OpenCV headers are encountered. #2568 (2.2.2)
  • In (obsolete) FindOpenImageIO.cmake, avoid CMake warnings by changing
    the name OPENIMAGEIO_FOUND -> OpenImageIO_FOUND. #2578 (2.2.3)
  • Moved headers that are not part of OIIO's supported public API, but that
    still must be installed to be transitively included, do a "detail"
    subdirectory. #2648 (2.2.4)
  • Fix many Mingw compiler warnings. #2657 (2.1.19/2.2.5)
  • Windows: Improve Strutil::get_rest_arguments() handling of long path
    syntax ("\\?\" style). #2661 (2.1.19/2.2.6)
  • Fix compilation error with armv7 + x86. #2660 (2.2.6)

Notable documentation changes:

  • Many enhancements in the ImageBuf chapter. #2460 (2.1.11/2.2.0)
  • The LICENSE-THIRD-PARTY.md file has been reorganized to be clearer,
    grouping parts with identical licenses. #2469 (2.2.1) And renamed to
    "THIRD-PARTY.md" to avoid confusing GitHub's reporting of the project's
    license. (2.2.6)
  • Many fixes to the new readthedocs documentation, especially fixes to
    section cross-references and links.
  • Improved INSTALL instructions. (2.2.2/2.1.13)
  • Fix a variety of breaks on ReadTheDocs. #2581
  • Improve the way we discuss optional modifiers.
  • Document the PNG output controls for compression level. #2642 (2.2.4)
  • Lots of spell check / typo fixes in docs and comments. #2678 (2.2.6)
  • INSTALL.md: remove misleading old Windows build instructions. #2679 (2.2.6)
  • New file .git-blame-ignore-revs lists the hashes of commits that only
    performed bulk reformatting, so that they don't misattribute authorship
    or modification date. Everybody do this in your local repo:
    git config blame.ignoreRevsFile .git-blame-ignore-revs
    #2683 (2.2.6)
OpenImageIO - OpenImageIO 2.1.19.0

Published by lgritz about 4 years ago

Release 2.1.19 (1 Sep 2020) -- compared to 2.1.18

  • DPX: Add support for reading DPX files from IOProxy (such as from a memory
    buffer). #2659 #2665
  • PNG: New output option "png:filter" allows control of the PNG filter
    options. #2650
  • Python: Fix binding of ImageSpec.erase_attribute. #2654
  • Python: Fix missing ImageInput.read_image(). #2677
  • Windows: Improve Strutil::get_rest_arguments() handling of long path
    syntax ("\\?\" style). #2661
  • MinGW: Fix a variety of compiler warnings on this platform. #2657
  • Fix build on Elbrus 2000 architecture. #2671
OpenImageIO - OpenImageIO 2.2.6.0-RC1

Published by lgritz about 4 years ago

Release candidate for 2.2. The branch is frozen for release. If no critical bugs are identified, we anticipate a full release on Sept 1, 2020.

OpenImageIO - OpenImageIO 2.2 beta2

Published by lgritz about 4 years ago

Second and hopefully last 2.2 beta, with some minor fixes and last-minute additions (but none that break compatibility).

OpenImageIO - OpenImageIO 2.1.18.1

Published by lgritz about 4 years ago

Immediately after releasing 2.1.18.0, it was discovered to still be reporting itself as 2.1.17. Quickly pushing out an update that only changes the reported version number itself.

OpenImageIO - OpenImageIO 2.2 beta1

Published by lgritz about 4 years ago

We have now branched for a 2.2 release (for reference, 2.1 was released in December, 2019). Please be aware of the following:

  • We have tagged "Release-2.2.4.0-beta" as the first beta release of the 2.2 family. (Note that the version numbers designated 2.2.0-2.2.3 were earlier developer snapshots.)

  • The branch marker RB-2.2 is the tip of development/merging of future 2.2.x releases, which may add features destined for later 2.2.x patch releases, but (certainly after the beta period is over) will avoid any changes that break backwards API, ABI, or linkage compatibility within the 2.2 family.

  • Henceforth, 'master' will be home to development for future releases (presumed 2.3?), and thus makes no guarantees at all about compatibility breaks.

  • My goal is to have a "beta" period of about two weeks for last minute changes, then one or more "release candidates", culminating in a final official 2.2 release on or close to August 1.

  • I strongly encourage you to test the beta while there is plenty of time to change things before a release. Please let us know if you find any bugs or build problems.

  • After the official 2.2 release, further patches to the 2.1 family will start to tail off, becoming more conservative and only including the most critical or specifically requested fixes.

The preliminary release notes (subject to revision before final release) are as follows:

Release 2.2 (1 Sept 2020??) -- compared to 2.1

New minimum dependencies:

  • pybind11 >= 2.4.2
  • openjpeg >= 2.0 (if JPEG-2000 support is desired) #2555 (2.2.2)

New major features and public API changes:

  • New IOProxy support: ImageInput and ImageOutput now have direct API level
    support for IOProxy in their open() and create() calls, as well as a
    new set_ioproxy() method in these classes. ImageBuf similarly can specify
    a proxy upon construction for reading, and for writing via a
    set_write_ioproxy() method that applies to subsequent write call.
    #2434 (2.2.0), #2477 (2.2.1).
  • Python bindings:
    • Python bindings have been added for missing ParamValue constructors.
      We previously exposed the PV constructors from just a plain int, float,
      or string, but there wasn't an easy way to construct from arbitrary
      data like there is in C++. Now there is. #2417 (2.2.0)
    • 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 (2.1.11/2.2.0)
    • ImageBufAlgo.color_range_check() is now available to the Python
      bindings (was previously only C++). #2602 (2.2.3)
    • Add a version of ImageBuf.write() that takes an open ImageOutput.
      This is the key to writing a multi-subimage file (such as a multi-part
      OpenEXR) using the Python ImageBuf interface. #2640 (2.2.4)
  • ImageBuf:
    • Easier direct use of IOProxy with ImageBuf: constructor and reset()
      for file-reading ImageBuf now take an optional IProxy* parameter,
      and a new set_write_ioproxy() method can supply an IOProxy for
      subsequent write(). #2477 (2.2.1)
    • Add ImageBuf::setpixel() methods that use cspan instead of ptr/len.
      #2443 (2.1.10/2.2.0)
    • Add "missing" reset() varieties so that every IB constructor has a
      corresponding reset() with the same parameters and vice versa. #2460
  • ImageBufAlgo:
    • New repremult() is like premult, but will not premult when alpha is
      zero. #2447 (2.2.0)
    • New max() and min() functions take the pixel-by-pixel maximum
      or minimum of two images. #2470 (2.2.1)
  • ColorConfig: add OCIO "role" accessors. #2548
  • oiiotool subimage support:
    • Nearly all operations now allow an optional :subimages=...
      modifier that restricts the operation to be performed on only a subset
      of named or indexed subimages. See docs for details. #2582
  • Low-res I/O of images to terminals that support full color and Unicode
    characters. Just output to a file ending in ".term", and it will convert
    (on certain terminals) to an image displayed directly in the terminal.
    #2631 (2.2.4)
    Try:
    oiiotool myfile.exr -o out.term

Performance improvements:

  • Greatly improved TextureSystem/ImageCache performance in highly threaded
    situations where access to the cache was a main bottlenecks. In renders of
    scenes with lots of texture access, with dozens of threads all contending
    for the cache, we are seeing some cases of 30-40% reduction in total
    render time. In scenes that are less texture-bottlenecked, or that don't
    use huge numbers of threads, the improvement is more modest. #2433 (2.2.0)

Fixes and feature enhancements:

  • oiiotool:
    • Intelligible error messages (rather than crashes) if you attempt to
      create an image too big to fit in memory. #2414 (2.2.0)
    • --create and --proxy take an additional optional modifier:
      :type=name that specifies the type of buffer to be created (the
      default, as usual, is to create an internal float-based buffer). #2414
      (2.2.0)
    • -o optional argument :type=name is a new (and preferred) synonym
      for what used to be :datatype=. #2414 (2.2.0)
    • --autotrim now correctly trims to the union of the nonzero regions
      of all subimages, instead of incorrectly trimming all subimages to the
      nonzero region of the first subimage. #2497 (2.2.1.2)
    • --subimage now has an optional :delete=1 modifier that causes the
      operation to delete one named or indexed subimage (versus the default
      behavior of extracing one subimage and deleting the others). #2575
      (2.2.3)
    • The list of dependent libraries (part of oiiotool --help) now
      correctly reports the OpenEXR version. #2604 (2.2.3)
    • Fix: --eraseattrib did not correctly apply to all subimages when
      -a or :allsubimages=1 were used. #2632 (2.2.4)
  • ImageBuf / ImageBufAlgo:
    • Huge ImageBuf allocation failures (more than available RAM) now are
      caught and treated as an ImageBuf error, rather than crashing with an
      uncaught exception. #2414 (2.2.0)
    • ImageBuf constructors that are passed an ImageSpec (for creating an
      allocated writable IB or "wrapping" a user buffer) now check that the
      spec passed has enough information to know the size of the buffer
      (i.e., it will be recognized as an error if the width, height, depth,
      channels, or data type have not been set validly). #2460
    • Fix: ImageBuf::getchannel() did not honor its wrap parameter.
      #2465 (2.2.1/2.1.12)
    • Fix: IBA::reorient() and IBA::computePixelHashSHA1() did not honor
      their nthreads parameter. #2465 (2.2.1/2.1.12)
    • resample() has been modified to more closely match resize by using
      clamp wrap mode to avoid a black fade at the outer edge of the
      resampled area. #2481
    • Fix: ImageBuf::get_pixels() did not honor the stride parameters.
      #2487. (2.1.12/2.2.1)
    • Fix resize() to avoid a crash / stack overflow in certain cases of
      very big images and very large filter kernels. #2643 (2.2.4)
  • ImageCache / TextureSystem / maketx:
    • New IC/TS attribute "trust_file_extensions", if nonzero, is a promise
      that all files can be counted on for their formats to match their
      extensions, which eliminates some redundant opens and format checks
      in the IC/TS and can reduce needless network/filesystem work. Use with
      caution! #2421 (2.2.0)
    • texture3d() fixed some cases where derivative results were not
      correctly copied to the outputs. #2475 (2.2.1)
    • maketx/IBA::make_texture: better error detection and messages when
      using "overscan" textures with formats that can't support it properly.
      (Punchline: only OpenEXR textures can do it.) #2521 (2.2.0)
    • Fix possible redundant tile reads in multithread situations (harmless,
      but makes for redundant I/O). #2557 (2.2.2)
  • Exif read: guard better against out of range offests, fixes crashes when
    reading jpeg files with malformed exif blocks. #2429 (2.1.10/2.2.0)
  • Fix: ImageSpec::erase_attribute() did not honor its searchtype
    parameter. #2465 (2.2.1/2.1.12)
  • Fix: Some ColorProcessor::apply() methods were not using their chanstride
    parameters correctly. #2475 (2.1.12)
  • Fix: iinfo return code now properly indicates failures for files that
    can't be opened. #2511 (2.2.2/2.1.13)
  • JPEG:
    • Fix resolution unit metadata that was not propery set in JPEG output.
      #2516 (2.2.2/2.1.13)
    • Fix loss of 'config' info upon close/reopen. #2549 (2.2.2)
  • OpenEXR:
    • Add support for reading and writing float vector metadata. #2459 #2486
    • Fix bug in the channel sorting order when channels are "X" and
      "Y" (was reversing the order by confusing "Y" for "luminance"). #2595
      (2.1.16/2.2.3)
    • We no longer automatically rename the "worldToNDC" attribute to
      "worldtoscreen" and vice versa. #2609 (2.2.4)
  • PNG:
    • Fix loss of 'config' info upon close/reopen. #2549 (2.2.2)
  • Raw images:
    • Support for new Canon .cr3 file, but only if you build against
      libraw >= 0.20.0 developer snapshot. #2484 (2.2.1) #2613 (2.2.4)
    • RAW input: set the "raw:flip" attribute if the underlying libraw did a
      reorientation. #2572 (2.1.15/2.2.3)
    • Avoid errors (in libraw) that resulted from multiple threads opening
      raw files at the same time. #2633 (2.2.4)
  • RLA:
    • Additional sanity checks and error checks/messages for detecting files
      that might be first mistaken for RLA files, but actually are not.
      #2600 (2.2.3)
  • TIFF:
    • Internal improvements to handling metadata retrieval for certain
      unusual tags. #2504 (2.2.2/2.1.13)
    • Fix subtle bug when reading Exif directory in the header. #2540
      (2.2.2)
  • Video files:
    • Fix posible infinite loop in the FFMpeg-based reader. #2576
      (2.1.15/2.2.3)

Developer goodies / internals:

  • argparse.h:
    • Complete overhaul of ArgParse to make it more like Python argparse.
      Please read the extensive comments in argparse.h for documentation.
      For now, the old ArgParse interface still works, but is considered
      deprecated. #2531 (2.2.2) #2618 #2622 (2.2.4)
  • attrdelegate.h:
    • New as_vec<> method returns the whole attribute as a std::vector.
      #2528 (2.2.2)
  • filesystem.h:
    • Catch previously uncaught exceptions that could happen in certain
      Filesystem utility calls. #2522 (2.2.2/2.1.13)
    • New write_text_file() convenience function for opening, writing, and
      closing a text file all in one step. #2597 (2.2.3)
  • fmath.h:
    • clamp() is 2x faster. #2491 (2.1.12/2.2.2)
    • Very minor fix to OIIO::clamp(), shouldn't affect normal use with
      floats at all, but fixed a subtle quasi-bug in OSL. #2594 (2.1.15/2.2.3)
    • madd() is improved especially on platforms without fma hardware
      #2492 (2.1.12/2.2.2)
    • Perf improvements to fast_sin, fast_cos #2495 (2.1.12/2.2.2)
    • New safe_fmod() is faster than std::fmod. #2495 (2.1.12/2.2.2)
    • 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). #2495
      (2.1.12/2.2.2)
    • Add vint4, vint8, and vint16 versions of clamp(). #2617 (2.2.4)
  • oiioversion.h:
    • Fix typo that left the OIIO_VERSION_RELEASE_TYPE symbol undefined.
      #2616 (2.2.4/2.1.16)
    • Add new OIIO_MAKE_VERSION(maj,min,patch) macro that constructs the
      proper single integer code for a release version. #2641 (2.2.4/2.1.17)
  • paramlist.h:
    • New ParamValueList::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 (2.2.2/2.1.13)
    • Add get_indexed() method to ParamValueList and AttrDelegate. #2526
      (2.2.2/2.1.13)
  • platform.h:
    • OIIO_PRETTY_FUNCTION definition is more robust for weird compilers
      (will fall back to __FUNCTION__ if all else fails). #2413 (2.2.0)
    • OIIO_ALIGN definition is more robust, will fall back to C++11
      alignas when not a compiler with special declspecs (instead of being
      a compile time error!). #2412 (2.2.0)
    • A variety of OIIO_PRAGMA_... macros have been added to help deal
      with compiler-specific pragmas. #2467 (2.2.1)
  • simd.h:
    • vfloat3 has added a normalize(), length(), and length2()
      methods, to more closely match the syntax of Imath::Vec3f. #2437
      (2.1.11/2.2.0)
    • fix errors in vbool == and !=. #2463 (2.1.11/2.2.1)
    • Add float3 versions of abs, sign, ceil, floor, and round (they already
      existed for float4, float8, float16, but not float4). #2612 (2.2.4)
    • Improved support for ARM NEON SIMD (caveat: this is still not well
      tested). #2614 (2.2.4)
    • Improve performance for many float8/int8 functions and operators when
      running on only 4-wide hardware, by using two 4-wide instructions
      instead of reverting to scalar. #2621
  • span.h:
    • Allow the constructor from std::vector to allow vectors with custom
      allocators. #2533 (2.2.2)
  • strutil.h / ustring.h:
    • New Strutil::concat() and ustring::concat() concatenate two
      strings, more efficiently than sprintf("%s%s") by avoiding any
      unnecessary copies or temporary heap allocations. #2478 (2.2.1)
    • Strutil::upper() and lower() return all-upper and all-lowercase
      versions of a string (like to_lower and to_upper, but not in-place
      modifications of the existing string). #2525 (2.2.2/2.1.13)
    • Strutil::repeat() has been internally rewritten to more efficient by
      avoiding any unnecessary copies or temporary heap allocations. #2478
      (2.2.1)
  • typedesc.h:
    • TypeDesc has additional helpers of constexpr values TypeFloat2,
      TypeVector2, TypeVector4, TypeVector2i, TypePointer. #2592 (2.1.16/2.2.3)
  • unordered_map_concurrent.h:
    • Fix missing decrement of size() after erase(). #2624 (2.2.4)
  • More reshuffling of printf-style vs fmt-style string formatting. #2424
    (2.2.0) #2649 (2.2.4)
  • 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 (2.1.11/2.2.0)
  • Internals: Replaced most uses of boost::thread_specific_ptr with C++11
    thread_local. #2431 (2.2.0)
  • Python: Fixed a bug that lost certain string arguments, especially when
    passing a TypeDesc as its string equivalent. #2587 (2.1.16/2.2.3)
  • oiiotool: Big overhaul and simplification of internals. #2586 #2589 (2.2.3)

Build/test system improvements and platform ports:

  • CMake build system and scripts:
    • New non-default CMake build flag EXTRA_WARNINGS, when turned on, will
      cause gcc and clang to compile with -Wextra. This identified many new
      warnings (mostly about unused parameters) and fixes were applied in
      #2464, #2465, #2471, #2475, #2476. (2.2.1)
    • FindOpenColorIO.cmake now correctly discerns the OCIO version (2.2.1),
      and now sets up a true imported target. #2529 (2.2.2)
    • FindOpenEXR.cmake has better detection of debug openexr libraries.
      #2505 (2.2.2/2.1.13)
    • 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
      (2.2.2/2.1.13)
    • Fix exported cmake config file, it was not ensuring that the Imath
      headers properly ended up in the config include path. #2515
      (2.2.2/2.1.13)
    • Change all CMake references to PACKAGE_FOUND to Package_Found (or
      whatever capitalization matches the actual package name). #2569 (2.2.2)
    • The exported CMake config files now set cmake variable
      OpenImageIO_PLUGIN_SEARCH_PATH #2584 (2.1.16/2.2.3)
  • Continuous integration (CI) systems:
    • Mostly retire TravisCI for ordinary Linux x64 and Mac builds, now we
      rely on GitHub Actions CI. Nightly test added. Use ASWF docker images
      to test exactly against VFX Platform 2019 and 2020 configurations.
      #2563 (2.2.2) #2579 (2.2.3)
    • Add Travis test for arm64 (aka aarch64) builds. This is still a work
      in progress, and not all testsuite tests pass. #2634 (2.2.4)
    • Our CI tests now have a "bleeding edge" matrix entry that tests against
      the current TOT master build of libtiff, openexr (#2549), and pybind11
      (#2556). (2.2.2)
    • GitHub CI tests, when they fail, leave behind an "artifact" tar file
      containing the output of the tests, so that they can be easily
      downloaded and inspected (or used to create new reference output).
      #2606 (2.2.4)
    • CI Mac tests switch to Python 3.8. (2.2.4)
  • Dependency version support:
    • Pybind11 is no longer auto-downloaded. It is assumed to be
      pre-installed. A script src/build-scripts/build_pybind11.bash is
      provided for convenience if you lack a system install. #2503 (2.2.2)
      Bump the minimum pybind11 version that we accept, to 2.4.2 #2453,
      and add fixes to allow support of pybind11 2.5. #2637 (2.2.4)
    • fmt libray: Un-embed fmt headers. If they are not found on the system
      at build time, they will be auto-downloaded. #2439 (2.2.0)
    • Support for building against libraw 0.20. #2484 (2.2.1) #2580 (2.2.3)
    • Build properly against OpenColorIO's current master (which is the
      in-progress work on OCIO v2). #2530 (2.2.2)
    • Fix static boost to not overlink on Windows. #2537 (2.2.2)
    • Fix build breaks against TOT libtiff master, which had #define
      clashes with our GPSTag enum values. #2539 (2.2.2)
    • Ensure compatibility and clean builds with clang 10. #2518 (2.2.2/2.1.3)
    • Support verified for gcc 10, added to CI tests. #2590 (2.2.3)
    • Support for Qt 5.15. #2605 (2.2.3)
    • Fixes to support OpenColorIO 2.0. #2636 (2.2.4)
    • Build against more recent versions of fmtlib. #2639 (2.2.4)
  • Progress on support for using Conan for dependency installation. This is
    experimental, it can't yet build all dependencies. Work in progress.
    #2461 (2.2.1)
  • The version of gif.h that we embed for GIF output has been updated.
    #2466 (2.2.1)
  • The farmhash functions have been cleaned up to be more careful that none
    of their internal symbols are left visible to the linker. #2473 (2.2.1)
  • Clarification about .so name versioning: In supported releases, .so
    contains major.minor, but in master (where ABI is not guaranteed stable,
    we name major.minor.patch). #2488 (2.2.1)
  • Protect against certain compiler preprocessor errors for user programs
    that include strutil.h but also inculde fmt on its own. #2498.
    (2.1.12/2.2.2)
  • Testing of TGA now assumes the test images are in the oiio-images project,
    not separately downloaded (the download location disappered from the net).
    #2512 (2.2.2)
  • 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 (2.2.2/2.1.3)
  • Fix compiler warning about incorrect extra braces. #2554 (2.2.2)
  • All build-scripts bash scripts now use /usr/bin/env to find bash. #2558
    (2.2.2)
  • Avoid possible link errors by fully hiding IBA functions taking IplImage
    parameters, when no OpenCV headers are encountered. #2568 (2.2.2)
  • In (obsolete) FindOpenImageIO.cmake, avoid CMake warnings by changing
    the name OPENIMAGEIO_FOUND -> OpenImageIO_FOUND. #2578 (2.2.3)
  • Beef up OpenEXR compliance tests, many more examples from openexr-images,
    including many corrupted image failure cases. #2607 (2.2.4)
  • "tinyformat" is no longer used, even optionally. We have switched entirely
    to fmtlib, which is more similar to the upcoming C++20 std::format.
    #2647 (2.2.4)
  • Moved headers that are not part of OIIO's supported public API, but that
    still must be installed to be transitively included, do a "detail"
    subdirectory. #2648 (2.2.4)

Notable documentation changes:

  • Many enhancements in the ImageBuf chapter. #2460 (2.1.11/2.2.0)
  • The LICENSE-THIRD-PARTY.md file has been reorganized to be clearer,
    grouping parts with identical licenses. #2469
  • Many fixes to the new readthedocs documentation, especially fixes to
    section cross-references and links.
  • Improved INSTALL instructions. (2.2.2/2.1.13)
  • Fix a variety of breaks on ReadTheDocs. #2581
  • Improve the way we discuss optional modifiers.
  • Document the PNG output controls for compression level. #2642 (2.2.4)
OpenImageIO - OpenImageIO 2.1.18.0

Published by lgritz about 4 years ago

Release 2.1.18 (1 Aug 2020) -- compared to 2.1.17

  • Python ImageBuf.write() added a variety that takes an open ImageOutput.
    This is the key to writing multi-subimage files from Python. #2640
  • oiiotool --eraseattrib fixed: was not applying to all subimages. #2632
  • RAW: Improve thread safety when more than one thread might be opening
    different raw files at the same time. #2633
  • unordered_map_concurrent fixed a missing size decrement upon erase(). #2624
  • Fixes to support certain recent pybind11 changes. #2637
  • Fixes to support OpenColorIO v2. #2636
  • Fixes to support more recent fmtlib versions. #2639
  • PNG: document the "png:compressionLevel" output hint. #2642
  • In oiioversion.h, add a OIIO_MAKE_VERSION macro that constructs the
    integer code for a particular major/minor/patch release. #2641