Skip to content

Releases: AcademySoftwareFoundation/OpenImageIO

OpenImageIO 2.0.10

02 Aug 18:45
Compare
Choose a tag to compare

Release 2.0.10 (1 Aug, 2019) -- compared to 2.0.9

  • ColorConfig improvements: (a) new getColorSpaceFamilyByName(); (b) new
    methods to return the list of all color spaces, looks, displays, or views
    for a display; (c) all of ColorConfig now exposed to Python. #2248
  • IBA::ociodisplay() and oiiotool --ociodisplay: empty display or view
    names imply using the default display or view. #2273
  • Bug fix in ustring::compare(string_view), in cases where the string_view
    was longer than the ustring, but had the same character sequennce up to
    the length of the ustring. #2283
  • oiiotool --stats: Fixed bug where -iconfig hints were not being
    applied to the file as it was opened to compute the stats. #2288
  • Bug fix: IBA::computePixelStats() was not properly controlling the
    number of threads with the nthreads parameter. #2289
  • Bug fix when reading TIFF bugs: In cases where the reader needed to close
    and re-open the file silently (it could happen for certain scanline
    traversal patterns), the re-open was not properly honorig any previous
    "rawcolor" hints from the original open. #2285
  • Nuke txWriter updates that expose additional make_texture controls. #2290
  • Build system: Improvements for finding certain new Boost versions. #2293
  • Build system: Improvements finding OpenEXR installation.
  • Fix bugs when reading TIFF "cmyk" files. #2292.
  • DPX: support for reading and writing 1-channel (luma, etc.) DPX images.
    #2294
  • IBA::fixNonFinite(): fixed impicit float/double casts to half. #2301
  • Build fixes for MinGW. #2304

Release 2.0.9

08 Jul 21:11
Compare
Choose a tag to compare

Release 2.0.9 (4 Jul, 2019) -- compared to 2.0.8

  • RAW: Clarification about color spaces: The open-with-config hint
    "raw:ColorSpace" is more careful about color primaries versus transfer
    curve. Asking for "sRGB" (which is the default) gives you true sRGB --
    both color primaries and transfer. Asking for "linear" gives you linear
    transfer with sRGB/Rec709 primaries. The default is true sRGB, because it
    will behave just like JPEG. #2260 (2.1.2)
  • Improved oiiotool 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
  • Fix broken ability to specify compression of multipart exr files. #2252
  • Fix Strutil::stof() return type error and other windows warnings. #2254
  • IBA::colortmatrixtransform() and oiiotool --ccmatrix allow you to
    perform a matrix-based color space transformation. #2168
  • Guard simd.h against shenanigans when Xlib.h having been included and
    #defineing True and False. #2272
  • RAW: Clarification about color spaces: The open-with-config hint
    "raw:ColorSpace" is more careful about color primaries versus transfer
    curve. Asking for "sRGB" (which is the default) gives you true sRGB --
    both color primaries and transfer. Asking for "linear" gives you linear
    transfer with sRGB/Rec709 primaries. The default is true sRGB, because it
    will behave just like JPEG. #2260
  • Fix inability for python to set timecode attributes (specifically, it was
    trouble setting ImageSpec attributes that were unnsigned int arrays).
    #2279

OpenImageIO 2.0.8

04 May 07:23
Compare
Choose a tag to compare

Release 2.0.8 (3 May, 2019) -- compared to 2.0.7

  • Fix Windows broken read of JPEG & PNG in some circumstances. #2231
  • Some minor fixes to JPEG & PNG reading and file error robustness. #2187
  • Fix crash reading certain old nconvert-written TIFF files. #2207
  • Internals: The OIIO_DISPATCH_COMMON_TYPES2/3 macros used by many
    ImageBufAlgo functions have been expanded to handle a few more cases
    "natively" without conversion to/from float. This may make a few cases
    of odd data type combinations have higher precision. #2203
  • ImageBufAlgo::resize() fixes precision issues for 'double' images. #2211
  • Testing: A new unit test has been backported from master, which tries to
    perform a series of read/write tests on every file format. In partcular,
    this tests certain error conditions, like files not existing, or the
    directory not being writeable, etc. #2181
  • Crashes in the command line utilities now attempt to print a stack trace
    to aid in debugging (but only if OIIO is built with Boost >= 1.65, because
    it relies on the Boost stacktrace library). #2229
  • Dev goodies: fmath.h's powwroundup/pow2rounddown have been renamed
    ceil2/floor2 to reflect future C++ standard. The old names still work, so
    it's a fully back compatible change. #2199

OpenImageIO 2.0.7

01 Apr 14:41
Compare
Choose a tag to compare

Release 2.0.7 (1 Apr, 2019) -- compared to 2.0.6

  • DPX: fix potential crash when file open fails. #2186
  • EXR: Suppress empty string for subimage name (fixes a problem when reading
    files written by V-Ray). #2190
  • Disable JPEG-2000 support for the (rare) combination of an older OpenJPEG
    1.x and EMBEDPLUGINS=0 mode, which was buggy. The solution if you really
    need EMBEDPLUGINS and JPEG-2000 support is to please use OpenJPEG >= 2.0.
    #2183.
  • New build flag USE_WEBP=0 can be set to 0 to force disabled support of
    WebP even when the webp package is found. #2200
  • Bug fix: ImageInput::create(name) and ImageOutput::create(name) worked
    if name was a filename (such as foo.exr), or the extension (such as
    exr), but previously did not work if it was the name of the format
    (such as openexr), despite having been documented as working in that
    case. #2185
  • Tested and known to work with the recently-released Clang 8.0.

OpenImageIO 2.0.6

01 Mar 23:24
Compare
Choose a tag to compare

Release 2.0.6 (1 Mar, 2019) -- compared to 2.0.5

  • PNG: more careful catching of errors and corrupt png files. #2167
  • PSD: read now properly extracts layer/subimage name and data window offset
    coordinates. #2170
  • ImageBuf: Fix bug in propagating unassociated alpha behavior request. #2172
  • oiiotool -o:all=1 fix crash when outputting 0x0 subimages. #2171
  • Developer goodies: simd.h ops for vec4 * mat44 multiplication. #2165
  • Developer goodies: Strutil::excise_string_after_head() #2173
  • Fix crashes on Windows from certain regex replacement happening as part
    of MakeTexture (internally avoid MSVS implementation of std::regex). #2173

OpenImageIO 2.0.5

02 Feb 18:19
Compare
Choose a tag to compare

Release 2.0.5 (1 Feb, 2019) -- compared to 2.0.4

  • resize(), fit(), and resample() are no longer restricted to
    source and destination images having the same numer of channels. #2125
  • 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
  • Protection against certain divide-by-zero errors when using very blurry
    latlong environment map lookups. #2121
  • New shell environment variable OPENIMAGEIO_OPTIONS can now be used to
    set global OIIO::attribute() settings upon startup (comma separated
    name=value syntax). #2128
  • 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
  • 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
  • maketx -u is smarter about which textures to avoid re-making because
    they are repeats of earlier commands. #2140
  • Detect/error if builder is trying to use a pybind11 that's too old. #2144
  • OpenEXR: avoid some OpenEXR/libIlmImf internal errors with DWA compression
    by switching to zip for single channel images with certain small tile
    sizes. #2147
  • On MacOS 10.14 Mojave, fix warnings during iv compile about OpenGL
    being deprecated in future releases. #2151
  • iv info window now sorts the metadata. #2159
  • At build time, the Python version used can be controlled by setting the
    environment variable $OIIO_PYTHON_VERSION, which if set will initialize
    the default value of the CMake variable PYTHON_VERSION. #2161 (2.0.5)
  • On non-Windows systems, the build now generates a PkgConfig file, installed
    at CMAKE_INSTALL_PREFIX/lib/pkgconfig/OpenImageIO.pc. #2158 (2.0.5)

OpenImageIO 2.0.4

06 Jan 04:38
Compare
Choose a tag to compare

Release 2.0.4 (Jan 5, 2019) -- compared to 2.0.3

  • Fix potential threadpool deadlock issue that could happen if you were
    (among possibly other things?) simultaneously calling make_texture from
    multiple application threads. #2132
  • ImageInput read_image/scanline/tile fixed subtle bugs for certain
    combination of strides and channel subset reads. #2108
  • TIFF: Fix problems with JPEG compression in some cases. #2117
  • TIFF: Fixed error where reading just a subset of channels, if that subset
    did not include the alpha channel but the image was "unassociated alpha",
    the attempt to automatically associate (i.e. "premultiply" the alpha) upon
    read would get bogus values because the alpha channel was not actually
    read. Now in this case it will not do the premultiplication. So if you are
    purposely reading RGB only from an RGBA file that is specifically
    "unassociated alpha", beware that you will not get the automatic
    premultiplication. #2122
  • Python: define __version__ for the module. #2096
  • IBA::channel_append() previously always forced its result to be float, if
    it wasn't previously initialized. Now it uses the uaual type-merging
    logic, making the result the "widest" type of the inputs. #2095
  • 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
  • ImageCache/TextureSystem: more specific error message when tile reads
    appear to be due to the file having changed or been overwritten on disk
    since it was first opened. #2115
  • 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
  • oiiotool --dumpdata has more intelligible output for uint8 images. #2124
  • maketx: the -u (update mode) is slightly less conservative now,
    no longer forcing a rebuild of the texture just because the file uses
    a different relative directory path than last time. #2109
  • WebP: fix bug that gave totally incorrect image read for webp images that
    had a smaller width than height. #2120
  • Developer goodies: string_view now adds an optional pos parameter to the
    find_first_of/find_last_of family of methods. #2114
  • Dev goodies: Strutil::wordwrap() now lets you specify the separation
    characters more flexibly (rather than being hard-coded to spaces as
    separators). #2116

OpenImageIO Release 2.0.3 (first stable 2.0 release)

08 Dec 06:33
Compare
Choose a tag to compare

Release 2.0 (Dec 7, 2018) -- compared to 1.8.x

New minimum dependencies:

  • On Windows compiling with MSVS, the new minimum version is MSVS 2015.

Major new features and improvements:

  • ImageInput and ImageOutput static create() and open() methods now return
    unique_ptr rather than raw pointers. #1934, #1945 (1.9.3).
  • ImageInput improvements to thread safety and concurrency, including some
    new API calls (see "Public API changes" section below).
  • ImageBufAlgo overhaul (both C++ and Python): Add IBA functions that
    return image results directly rather than passing ImageBuf references
    as parameters for output (the old kind of calls still exist, too, and
    have their uses). Also in C++, change all IBA functions that took raw
    pointers to per-channel colors into span<> for safety. #1961 (1.9.4)
  • For some readers and writers, an "IOProxy" can be passed that customizes
    the I/O methods. An important use of this is to write an image "file"
    to memory or to read an image "file" from a memory, rather than disk.
    Currently, OpenEXR supports this for both reading and writing, and PNG
    supports it for writing. You specify a pointer to the proxy via the
    configuration option "oiio:ioproxy". #1931 (1.9.3)
  • New Image Format support:
    • OpenVDB file read (as volume images or accessing via texture3d()).
      #2010,2018 (1.9.4)
    • "null" images -- null reader just returns black (or constant colored)
      pixels, null writer just returns. This can be used for benchmarking
      (to eliminate all actual file I/O time), "dry run" where you want to
      test without creating output files. #1778 (1.9.0), #2042 (1.9.4)
  • TIFF I/O of multiple scanlines or tiles at once (or whole images, as is
    typical use case for oiiotool and maketx) is sped up by a large factor
    on modern multicore systems. We've seen 10x or more faster oiiotool
    performance for uint8 and uint16 TIFF files using "zip" (deflate)
    compression, on modern 12-16 core machines. #1853 (1.9.2)
  • Major refactor of Exif metadata handling, including much more complete
    metadata support for RAW formats and support of camera "maker notes"
    for Canon cameras. #1774 (1.9.0)
  • New maketx option --bumpslopes specifically for converting bump maps,
    saves additional channels containing slope distribution moments that can
    be used in shaders for "bump to roughness" calculations. #1810,#1913,2005
    (1.9.2), #2044 (1.9.4)
  • An official FindOpenImageIO.cmake that we invite you to use in other
    cmake-based projects that needs to find OIIO. #2027 (1.9.4)

Public API changes:

  • Python binding overhaul
    The Python bindings have been reimplemented with
    pybind11, no longer with Boost.Python.
    #1801 (1.9.1)
    In the process (partly due to what's easy or hard in pybind11, but partly
    just because it caused us to revisit the python APIs), there are some minor
    API changes, some of which are breaking! To wit:
    • All of the functions that are passed or return blocks of pixels
      (such as ImageInput.read_image()) now use Numpy ndarray objects
      indexed as [y][x][channel] (no longer using old-style Python
      array.array and flattened to 1D).
    • Specilized enum type ImageInput.OpenMode has been replaced by string
      parameters, so for example, old ImageInput.open(filename, ImageInput.Create)
      is now ImageInput.open (filename, "Create")
    • Any function that previously took a parameter of type TypeDesc
      or TypeDesc.BASETYPE now will accept a string that signifies the
      type. For example, ImageBuf.set_write_format("float") is now a
      synonym for ImageBuf.set_write_format(oiio.TypeDesc(oiio.FLOAT)).
    • For several color conversion functions, parameter names were changed
      from "from" to "fromspace" and "to" to "tospace" to avoid a clash with
      the Python reserved word from. #2084
  • ImageInput API changes for thread safety and statelessness #1927 (1.9.2)
    • seek_subimage() no longer takes an ImageSpec&, to avoid the obligatory
      copy. (If the copy is desired, just call spec() to get it afterwards.)
    • All of the read_*() methods now have varieties that take arguments
      specifying the subimage and mip level. The read_native_*() methods
      supplied by ImageInput subclass implementations now ONLY come in the
      variety that takes a subimage and miplevel.
    • All of the read_*() calls that take subimage/miplevel explicitly are
      guaranteed to be stateless and thread-safe against each other (it's not
      necessary to call seek_subimage first, nor to have to lock a mutex to
      ensure that another thread doesn't change the subimage before you get a
      chance to call read). For back-compatibility, there are still versions
      that don't take subimage/miplevel, require a prior call to seek_subimge,
      and are thus not considered thread-safe.
    • New methods spec(subimage,miplevel) and spec_dimensions(s,m)
      let you retrieve a copy of the ImageSpec for a given subimage and
      MIP level (thread-safe, and without needing a prior seek_subimage)
      call. Note that to be stateless and thread-safe, these return a COPY
      of the spec, rather than the reference returned by the stateful
      spec() call that has no arguments and requires a prior seek_subimage.
      However, spec_dimensions() does not copy the channel names or the
      arbitrary metadata, and is thus very inexpensive if the only thing
      you need from the spec copy is the image dimensions and channel
      formats.
  • ImageInput and ImageOutput create/open changes
    • The static create() and open() methods have been changed so that
      instead of returning an ImageInput * (or ImageOutput *) and
      requiring the caller to correctly manage that resource and eventually
      destroy it, now they return a unique_ptr that automatically deletes
      when it leaves scope. In the process we also clean up some edge cases
      on Windows where it was possible for ImageInput/ImageOutput to have
      been allocated in one DLL's heap but freed in a different DLL's heap,
      which could cause subtle heap corruption problems. #1934,#1945 (1.9.3).
  • ImageBuf
    • New method set_origin() changes the pixel data window origin.
      #1949 (1.9.4)
    • Assignment (operator=) is now enabled for ImageBuf, both the copying
      and moving variety. Also, an explicit copy() method has been added
      that returns a full copy of the ImageBuf. #1952 (1.9.4)
    • write() method has had its arguments changed and now takes an optional
      TypeDesc that lets you specify a requested data type when writing the
      output file, rather than requiring a previous and separate call to
      set_write_format(). The old call signature of write() still exists,
      but it will be considered deprecated in the future. #1953 (1.9.4)
  • ImageBufAlgo
    • In C++, functions that take raw pointers for per-channel constant
      values or results are deprecated, in favor of new versions that
      heavily rely on span<> to safely pass array references and their
      lengths. #1961 (1.9.4)
    • In both C++ and Python, every IBA function that takes a parameter
      giving an ImageBuf destination reference for results have an additional
      variant that directly returns an ImageBuf result. This makes much
      cleaner, more readable code, in cases where it's not necessary to
      write partial results into an existing IB. #1961 (1.9.4)
    • In C++, many IBA functions that came in multiple versions for whether
      certain parameters could be an image, a per-channel constant, or a
      single constant, have been replaced by a single version that takes
      a new parameter-passing helper class, Image_or_Const that will match
      against any of those choices. (No changes are necessary for calling
      programs, but it makes the header and documentation a lot simpler.)
      #1961 (1.9.4)
    • IBA compare(), computePixelStats(), and histogram() now directly
      return their result structures, intead of requiring the passing of
      a destination reference. #1961 (1.9.4)
    • New IBA::fit() resizes and image to just fit in the given size, but
      preserve its aspect ratio (padding with black as necessary). It's just
      like what oiiotool --fit has always done, but now you can call it
      directly from C++ or Python. #1993 (1.9.4)
    • New contrast_remap() allows flexible linear or sigmoidal contrast
      remapping. #2043 (1.9.4)
    • ImageBufAlgo::colorconvert and various ocio transformations have
      changed the default value of their unpremult parameter from false
      to true, reflecting the fact that we believe this is almost always
      the more correct choice. Also, if their input image is clearly marked
      as having unasociated alpha already, they will not bracket the color
      conversion with the requested unpremult/premult. #1864 (1.9.2)
    • Updated the OpenCV interoperability with new functions to_OpenCV (make
      an ImageBuf out of a cv::Mat) and from_OpenCV (fill in a cv::Mat with
      the contents of an ImageBuf). Deprecated the old from_IplImage and
      to_IplImage, which are very OpenCV-1.x-centric. (2.0.2)
  • ImageCache/TextureSystem:
    • ImageCache and TextureSystem now have close(filename) and
      close_all() methods, which for one file or all files will close the
      files and release any open file handles (also unlocking write access
      to those files on Windows), but without invalidating anything it knows
      about the ImageSpec or any pixel tiles already read from the files, as
      would happen with a call to the much ...
Read more

OpenImageIO Release 1.8.17 (stable branch release)

01 Dec 18:32
Compare
Choose a tag to compare
  • Fix oiiotool --info in Windows -- printed path wrong. #2052
  • Build: When finding OpenEXR, use the version detected by pkg-config, if available. #2057
  • zfile: more careful gzopen on Windows that could crash when given bogus filename. (Particularly on Windows.) #2070
  • ImageCache::invalidate(filename) did not properly invalidate the "fingerprint" is used to detect duplicate files. #2081
  • Fix Strutil::vsnprintf detection of encoding errors on Windows. #2082

OpenImageIO Release 1.8.16

28 Nov 19:16
Compare
Choose a tag to compare
  • Fix Windows build that was missing an exported symbol. #2024
  • RAW: Added config hint "raw:aber" (float[2]) to control libraw's correction of chromatic aberration. #2030
  • Removed stale python examples that probably didn't work anyway. #2036
  • Windows fix: Safer thread pool destruction on. #2038