Skip to content

Releases: AcademySoftwareFoundation/OpenImageIO

OpenImageIO v2.2.21.0

01 Jul 23:55
Compare
Choose a tag to compare

Note: This is a patch release of an obsolete release family. The currently family
of releases enjoying full support is 2.3.

Release 2.2.21 (1 Jul 2022) -- compared to 2.2.20

  • BMP: gain the ability to read some very old varieties of BMP files. #3375
  • BMP: better detection of corrupted files with nonsensical image dimensions
    or total size. #3434
  • BMP: protect against corrupted files that have palette indices out of bound.
    #3435
  • ffmpeg: Support for ffmpeg 5.0. #3282
  • ffmpeg: protect against possible double-free. #3376
  • ffmpeg: make the supported file extension check be case-insensitive. This
    prevents movie files from being incorrectly unable to recognize their format
    if they have the wrong capitalization of the file extension. #3364
  • hdr/rgbe files: Avoid possible Windows crash when dealing with characters
    with the high bit set. #3310
  • TIFF: fix read problems with TIFF files with non-zero y offset. #3419
  • Dev goodies: ustring has added a from_hash() static method #3397, and a
    ustringhash helper class #3436.
  • simd.h fixes for armv7 and aarch32. #3361

OpenImageIO v2.3.16.0

01 Jun 17:19
Compare
Choose a tag to compare

Release 2.3.16 (1 Jun 2022) -- compared to 2.3.15

  • UDIM texture lookups have been sped up by 5-8%. #3417
  • Support for Intel llvm-based compiler 2022.1.0. #3407
  • Internals: custom fmt formatters for vector types. #3367
  • Fix compiler breaks when using some changes in fmtlib master (not yet
    released). #3416

OpenImageIO v2.3.15.0

02 May 01:28
Compare
Choose a tag to compare

Release 2.3.15 (1 May 2022) -- compared to 2.3.14

  • JPEG: Better handling of PixelAspectRatio. #3366
  • OpenEXR: Fix DWAA compression default level. #3387
  • Perf: Huge speed-up of case-insensitive string comparisons (Strutil iequals,
    iless, starts_with, istarts_with, ends_with, iends_with), which also speeds
    up searches for attributes by name in ImageSpec and ParamValueList. #3388
  • New ImageBufAlgo::st_warp() (and oiiotool --st_warp) perform warping of
    an image where a second image gives the (s,t) coordinates to look up from at
    every pixel. #3379
  • Python: Add ImageSpec and ParamValueList method get_bytes_attribute(),
    which is like get_string_attribute(), but returns the string as a Python
    bytes object. In Python 3, strings are UTF-8, so this can be useful if you
    know that a string attribute might contain non-UTF8 data. #3396

OpenImageIO v2.3.14.0

01 Apr 23:32
Compare
Choose a tag to compare

Release 2.3.14 (1 Apr 2022) -- compared to 2.3.13

  • Add support for UDIM pattern <uvtile> (used by Clarisse & V-Ray). #3358
  • BMP: Support for additional (not exactly fully documented) varieties used by
    some Adobe apps. #3375
  • Python: support uint8 array attributes in and out. This enables the proper
    Python access to "ICCProfile" metadata. #3378
  • Improved precision in IBA::computePixelStats(). #3353
  • ffmpeg reader not uses case-insensitive tests on file extensions. #3364
  • Fix writing deep exrs when buffer datatype doesn't match the file. #3369
  • Fix conflict between RESTful and Windows long path notations. #3372
  • ffmpeg reader: take care against possible double-free of allocated memory
    crash upon destruction. #3376
  • simd.h fixes for armv7 and aarch32. #3361
  • Fix compiler warnings related to discrepancies between template declaration
    and redeclaration in simd.h and benchmark.h. #3350
  • Suppress MacOS warnings about OpenGL depreation. #3380
  • Now doing CI builds for Intel icc and icx compilers. #3355 #3363
  • CI: Overhaul of yml file to be more clear and compact by using GHA
    "strategy" feature. #3356 #3365

OpenImageIO v2.3.13.0

01 Mar 20:09
Compare
Choose a tag to compare

Release 2.3.13 (1 Mar 2022) -- compared to 2.3.12

  • Filesystem::searchpath_split better handling of empty paths. #3306
  • New Strutil::isspace() is an isspace replacement that is safe for char
    values that are < 0. #3310
  • Expose the Strutil::utf8_to_utf16() and utf16_to_utf8() utilities on
    non-Windows platforms (and also modernize their internals). #3307
  • For the most important ImageInput, ImageOutput, and ImageBuf methods that
    take a filename, add new flavors that can accept a wstring as the
    filename. #3312 #3318
  • PPM: properly report color space as Rec709 (as dictated by PPM spec). #3321
  • PNG: more robust reporting of color space as sRGB in the absence of header
    fields contradicting this. #3321
  • strutil.h: Split the including of fmt.h and some related logic into a
    separate detail/fmt.h. This is still included by strutil.h, so users
    should not notice any change. #3327
  • Targa: Fix parsing of TGA 2.0 extension area. #3323
  • Support building against FFmpeg 5.0. #3282
  • oiiotool --pixelaspect : fix setting of "PixelAspectRatio", "XResolution",
    and "YResolution" attributes in the output file (were not set properly
    before). #3340

OpenImageIO v2.3.12.0 release

01 Feb 21:05
Compare
Choose a tag to compare

Release 2.3.12 (1 Feb 2022) -- compared to 2.3.11

  • oiiotool: Don't give spurious warnings about no output when the --colorcount
    or --rangecheck commands are used. #3262
  • oiiotool --pattern checker fixed behavior so that if only the checker
    width was specified but not the height, height will be equal to width. #3255
  • oiiotool --point lets you set individual pixels. #3256
  • Python: A new ImageBuf constructor was added that takes only a NumPy
    ndarray, and deduces the resolution, channels, and format (pixel data type)
    from the shape of the array. #3246
  • Python: Implement ROI.copy(). #3253
  • Python: ImageSpec and ParamValueList now support 'key' in spec,
    del spec['key'], and spec.get('key', defaultval) to more fully emulate
    Python dict syntax for manipulating metadata. #3252 (2.3.12/2.4.0)
  • Python bug fix: fix clamp() when the min or max are just a float. Now
    it uses that one value for all channels, instead of using it only for
    the first channel. #3265
  • ImageSpec gained an additional constructor that takes a string
    representation of the pixel data type (where it used to insist on a
    TypeDesc), such as ImageSpec(640, 480, 3, "uint8"). This is especially
    helpful for new/casual users, or when you want code to be maximally
    readable. #3245
  • Imagepec::getattribute() new query token "format" can retrieve the pixel
    data type. #3247
  • IBA::make_texture(): ensure that "maketx:ignore_unassoc" is honored. #3269
  • Support an additional UDIM pattern <UVTILE>, which is specified by
    MaterialX. #3280
  • TIFF: support 16-bit palette images. #3260
  • TIFF: Gracefully handle missing ExtraSamples tag. #3287
  • Targa: Better interpretation of TGA 1.0 files with alpha that is zero
    everywhere. Be more consistent with Targa attributes all being called
    "targa:foo". Add "targa:version" to reveal whether the file was TGA 1.0
    or 2.0 version of the format. #3279
  • simd.h: Better guards to make it safe to include from Cuda. #3291 #3292
  • Fix bugs in the build_opencolorio.bash script, did not correctly handle
    installation into custom directories. #3278
  • Fixes to FindOpenColorIO.cmake module, now it prefers an OCIO exported cmake
    config (for OCIO 2.1+) unless OPENCOLORIO_NO_CONFIG=ON is set. #3278
  • Docs: The ImageBufAlgo chapter now has examples for C++, Python, and
    oiiotool for almost every operation. #3263

OpenImageIO 2.2.20.0

01 Feb 18:02
Compare
Choose a tag to compare

Release 2.2.20 (1 Feb 2022) -- compared to 2.2.19

  • Fix some address sanitizer failures. #3160
  • Build/CI: Deal with OpenColor renaming its master branch to main. #3169
  • Windows: Fix error when compiling with MSVC. #3168
  • Fix excessive memory usage when saving EXR with many channels. #3176
  • TIFF: now works for 16-bit palette images. #3260
  • Fix ImageBuf::read bug for images of mixed per-channel data types. #3088

OpenImageIO v2.3.11.0

01 Jan 21:05
Compare
Choose a tag to compare

Release 2.3.11 (1 Jan 2022) -- compared to 2.3.10

  • JPEG2000: enable multithreading for decoding (if using OpenJPEG >= 2.2)
    and encoding (if using OpenJPEG >= 2.4). This speeds up JPEG-2000 I/O
    by 3-4x. #2225
  • TIFF: automatically switch to "bigtiff" format for >4GB images. #3158
  • Security: New global OIIO attributes "limits:channels" (default: 1024) and
    "limits:imagesize_MB" (default: 32768, or 32 GB) are intended to reject
    input files that exceed these limits, on the assumption that they are either
    corrupt or maliciously constructed, and would, if read, lead to absurd
    allocations, crashes, or other mayhem. Apps may lower or raise these limits
    if they know that a legitimate input image exceeds these limits. Currently,
    only the TIFF reader checks these limits, but others will be modified to
    honor the limits over time. #3230
  • TextureSystem: enhance safety/correctness for untiled images that exceed
    2GB size (there was an integer overflow problem in computing offsets within
    tiles). #3232
  • Cleanup: Get rid of an obsolete header c-imageio.h that was experimental
    and the functions declared therein were not implemented in this release.
    #3237
  • Build: rely on env variable "OpenImageIO_CI" to tell us if we are running in
    a CI environment, not the more generic "CI" which could be set for other
    reasons in some environments. #3211
  • Build: Improvements in how we find OpenVDB. #3216
  • Build: If CMake variable BUILD_TESTING is OFF, don't do any automatic
    downloading of missing test data. #3227
  • Dev: Add Strutil::edit_distance(). #3229
  • Docs: Clean up intra-document section references, new explanations about
    input and output configuration hints, more code examples in both C++ and
    Python (especially for the ImageInput and ImageOutput chapters). #3238 #3244

OpenImageIO v2.3.10.1

08 Dec 01:52
Compare
Choose a tag to compare

Release 2.3.10.1 (7 Dec 2021) -- compared to 2.3.10.0

  • Build: restore code that finds Jasper when using statically-linked libraw.
    #3210
  • Build/test: Gracefully handle failing to find git for test data download.
    #3212
  • fmath.h: bit_cast specialization should take refs, like the template.
    This made warnings for some compilrs. #3213
  • Build: make sure to properly use the tbb target if it exists. #3214

OpenImageIO v2.3.10.0

01 Dec 17:24
Compare
Choose a tag to compare

Release 2.3.10 (1 Dec 2021) -- compared to 2.3.9

New (non-compatibility-breaking) features:

  • TextureSystem: add feature for stochastic mipmap interpolation. This adds
    new interpolation modes "StochasticTrilinear" and "StochasticAniso", which
    in conjunction with the "rnd" field in TextureOpt, will stochastically
    choose between bracketing MIPmap levels rather than interpolating them. This
    reduces texture lookup cost by up to 40%, but it's only useful in the
    context of a renderer that uses many samples per pixel. #3127
  • 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
  • oiitool --oiioattrib can set "global" OIIO control attributes for
    an oiiotool run (equivalent of calling OIIO::attribute()). #3171
  • oiiotool --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
  • oiiotool --saturate and IBA::saturate() can adjust saturation level of a
    color image. #3190
  • When building against OpenEXR >= 3.1.3, our OpenEXR output now supports
    specifying the zip compression level (for example, by passing the
    "compression" metadata as "zip:4"). Also note than when using OpenEXR >=
    3.1.3, the default zip compression has been changed from 6 to 4, which
    writes compressed files significantly (tens of percent) faster, but only
    increases compressed file size by 1-2%. #3157
  • Improved image dithering facilities: When dithering is chosen, it now
    happens any time you reduce >8 bits to <= 8 bits (not just when converting
    from float or half); change the dither pattern from hashed to blue noise,
    which looks MUCH better (beware slightly changed appearance); IBA::noise()
    and oiiotool --noise now take "blue" as a noise name, giving a blue noise
    pattern; IBA::bluenoise_image() returns a reference to a stored periodic
    blue noise iamge; oiiotool -d now lets you ask for "uint6", "uint4",
    "uint2", and "uint1" bit depths, for formats that support them. #3141
  • New global OIIO attribute "try_all_readers" can be set to 0 if you want to
    override the default behavior and specifically NOT try any format readers
    that don't match the file extension of an input image (usually, it will try
    that one first, but it if fails to open the file, all known file readers
    will be tried in case the file is just misnamed, but sometimes you don't
    want it to do that). #3172
  • Raise the default ImageCache default tile cache from 256MB to 1GB. This
    should improve performance for some operations involving large images or
    images with many channels. #3180
  • IOProxy support has been added to JPEG output (already was supported for
    JPEG input) and for GIF input and output. #3181 #3182
  • oiiotool --maxchan and --minchan, and 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

Bug fixes:

  • Fix oiiotool --invert to avoid losing the alpha channel values. #3191
  • Fix excessive memory usage when saving EXR files with many channels. #3176
  • WebP: Fix previous failure to properly set the "oiio:LoopCount" metadata
    for animated webp images. #3183
  • Targa: Better detection/safety when reading corrupted files, and fixed
    bug when reading x-flipped images. #3162
  • RLA: better guards against malformed input. #3163
  • Fix oiiotool bug when autocropping output images when the entire pixel data
    window is in the negative coordinate region. #3164
  • oiiotool improved detection of file reading failures. #3165
  • DDS: Don't set "texturetype" metadata, it should always have been only
    "textureformat". Also, add unit testing of DDS to the testsuite. #3200
  • When textures are created with the "monochrome-detect" feature enabled,
    which turns RGB textures where all channels are always equal into true
    single channel greyscale, the single channel that results is now correctly
    named "Y" instead of leaving it as "R" (it's not red, it's luminance).
    #3205

Build fixes and developer goodies:

  • Update internal stb_printf implementation (avoids some sanitizer alerts).
    #3160
  • Fixes for MSVS compile. #3168
  • Add Cuda host/device decorations to TypeDesc methods to make them GPU
    friendly. #3188
  • TypeDesc: The constructor from a string now accepts "box2f" and "box3f"
    as synonyms for "box2" and "box3", respectively. #3183
  • New Strutil::parse_values, scan_values, scan_datetime, parse_line. #3173
    #3177
  • New Filesystem::write_binary_file() utility function. #3199
  • New build option -DTIME_COMMANDS=ON will print time to compile each module
    (for investigating build performance; only useful when building with
    CMAKE_BUILD_PARALLEL_LEVEL=1). #3194