Skip to content

Releases: AcademySoftwareFoundation/OpenImageIO

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