A full release (not beta, not RC) of OpenImageIO 1.5 has been tagged as 
"Release-1.5.10" within the RB-1.5 branch.

This is the stable version we recommend for production use and commercial 
products. We will fix bugs, and maybe occasionally add minor features if they 
are VERY low risk changes, but we will not break API, ABI, or link 
compatibility within the 1.5 branch.

The RB.1.4 branch (most recent tag: Release-1.4.16) is hereby deprecated. We 
recommend that everybody move to 1.5 as soon as practical. Further changes to 
1.4 will be limited to critical bugs only, and in most cases only if 
specifically requested by users still on 1.4 and who cannot move to 1.5 for 
some reason.

Future development (which will eventually become a 1.6 release, probably in 
late summer) happens in "master", and may include API changes at any time.

Release notes for 1.5 (compared to the 1.4 branch) are below. Lots of great 
stuff!



Release 1.5 (January 26, 2015) -- compared to 1.4.x
----------------------------------------------
Major new features and improvements:
* New oiiotool functionality/commands:
   * --rotate90, --rotate180, --rotate270 rotate the image in 90 degree
     axially-aligned increments with no filtering. (1.5.2)
   * --reorient will perform whatever series of rotations or flips are
     necessary to move the pixels to match the "Orientation" metadata that
     describes the desired display orientation. (1.5.2)
   * --autoorient will automatically do the equivalent of --reorient on
     every image as it is read in, if it has a nonstandard orientation.
     (This is generally a good idea to use if you are using oiiotool to
     combine images that may have different orientations.) (1.5.2)
   * --rotate rotates an image by arbitrary angle and center point,
     with high-quality filtering. #932 (1.5.3)
   * --warp transforms an image using a 3x3 matrix, with high-quality
     filtering. #932 (1.5.3)
   * --median performs a median filter. (1.5.4)
* New ImageBufAlgo functions:
   * rotate90(), rotate180(), rotate270() rotate the image in 90 degree
     axially-aligned increments with no filtering. (1.5.2)
   * reorient() will perform whatever series of rotations or flips are
     necessary to move the pixels to match the "Orientation" metadata that
     describes the desired display orientation. (1.5.2)
   * rotate() performs rotation with arbitrary angle and center point,
     with high-quality filtering. #932 (1.5.3)
   * warp() transforms an image by a 3x3 matrix, with high-quality
     filtering. #932 (1.5.3)
   * median_filter performs a median filter. (1.5.4)
* Significant internal speedups by utilizing SIMD instructions (SSE) in
  the TextureSystem (1.5.5 / #948, 1.5.6 / #990). To use this to its
  fullest extent, build OIIO with the make/cmake option USE_SIMD=arch,
  where arch is sse2, ssse3, sse4.1, sse4.2, depending on what machines
  you'll be deploying to. (Note that x86_64 automatically implies at
  least sse2.) We're finding that this has approximately doubled the
  speed of the math part of texture mapping (it doesn't speed up the disk
  I/O, of course).  (1.5.5)
* Basic support for many movie files via a plugin using 'ffmpeg'. Works
  with avi, mov, qt, mp4, m4a, 3gp, 3g2, mj2, m4v, mpg, and more.  Movie
  files simply look like multi-image files to OIIO. There isn't really
  support for audio yet, and although this lets you retrieve and process
  individual frames of a movie file, OIIO is still not meant to be a
  video-processing library. Currently, these formats can be read, but
  there is no write support (maybe coming soon). #928 #1010 (1.5.5)
* Nuke plugins -- a txReader plugins that will read OIIO texture files,
  and a txWriter that will output proper (tiled & mip-mapped) texture files
  from Nuke. Contributed by Nathan Rusch / Luma Pictures. #973 (1.5.6)

Public API changes:
* TextureSystem API calls have been modified: the nchannels, dresultds,
  dresultdt fields have been removed from TextureOpt and are now passed
  explicitly as arguments to texture(), environment(), and texture3d().
  Some long-deprecated methods of TextureSystem have been removed, and
  also some new API calls have been added that provide multi-point
  texturing given a TextureHandle/PerThread rather than a ustring
  filename.  (1.5.5) (#948)
* New filters available to direct users of filter.{h,cpp} and for
  ImageBufAlgo, oiiotoo, and maketx: "cubic", "keys", "simon", "rifman".
  (1.5.0/1.4.9) (#874)
* Global attribute "read_chunk" can set the default number of scanlines
  read at a time internally by read_image() calls. #925
* The Python ImageBuf class did not expose an equivalent to the C++
  ImageBuf::get_pixels. This is exposed now. #931 (1.5.3)
* The Filter API now uses string_view. (1.5.3)
* ImageBuf and ImageBufAlgo now use string_view extensively. (1.5.4)
* ImageInput::supports() and ImageOutput::supports() now accept new tags:
  "arbitrary_metadata" reveals if the format allows arbitrarily-named
  metadata; "exif" if the format can store camera Exif data; "iptc" if
  the format can store IPTC metadata. #1001 (1.5.7)
* Removed ImageBuf and ImageBufAlgo functions that have been deprecated
  since OIIO 1.3. #1016 (1.5.8)
* ImageCache::add_file has been extended to allow an ImageSpec pointer
  as "configuration", which will be passed along to the underlying
  ImageInput::open() when the file is first opened. This allows you to
  use the same kind of configuration options/hints that you would with a
  raw ImageInput. (1.5.8)
* ImageBuf constructor and reset methods have been extended to allow an
  ImageSpec pointer as "configuration", which will be passed along to
  the underlying ImageCache and/or ImageInput::open() when the file is
  first opened. This allows you to use the same kind of configuration
  options/hints that you would with a raw ImageInput. (1.5.8)
* The DeepData helper structure now has methods to set (already allocated)
  deep values, as well as to retrieve uint values. (1.5.8)
* ImageBuf methods to get and set deep values and to allocate the DeepData
  structure. (1.5.8)
* ImageBuf::interppixel_NDC has been changed to consider the coordinates
  relate to full (aka display) window, rather than data window. (1.5.8)
* ImageBuf::interppixel_bicubic and interppixel_bicubic_NDC added to
  sample an image with B-spline bicubic interpolation. (1.5.8)
* Clarified in the docs that TextureSystem::get_texture_info and
  ImageCache::get_image_info "exists" queries should return true, and
  place in *data the value 1 or 0 depending on whether the image exists
  and can be read. (1.5.10)

Fixes, minor enhancements, and performance improvements:
* ImageBufAlgo:
   * flip(), flop(), flipflop() have been rewritten to work more
     sensibly for cropped images. In particular, the transformation now
     happens with respect to the display (full) window, rather than
     simply flipping or flopping within the data window. (1.5.2)
   * channels() now works properly with "deep" images. (1.5.8)
* oiiotool:
   * oiiotool --nosoftwareattrib suppresses the altering of Software and
     ImageHistory fields upon output. (1.5.1)
   * oiiotool --ch now will search for channel names case-insensitively,
     if the channel names are not first found with case-sensitive
     compares. #897 (1.5.1/1.4.11)
   * oiiotool --wildcardoff/--wildcardon can selectively disable and
     re-enable the frame sequence numeric wildcards (useful if you have
     a filename or other argument that must actually contain '#' or '@'
     characters). #892 (1.5.1/1.4.11)
   * oiiotool --no-autopremult/--autopremult can disable and re-enable
     the automatic premultiplication of color by opacity, in files where
     they are stored not-premultiplied and you wish to preserve the
     original un-premultiplied values. #906 (1.5.1/1.4.11)
   * oiiotool --sansattrib omits "-attrib" and "-sattrib" and their
     arguments from the command line that is put in the Software and
     ImageHistory metadata (makes it less pointlessly verbose). (1.5.1)
   * Now get helpful error messages if input images are corrupt or
     incomplete. (1.5.1)
   * oiiotool --flip, --flop, --flipflop, and --transpose now have more
     sensible behavior for cropped images. (1.5.2)
   * oiiotool --orientcw, --orientccw, and --orient180 are the new names
     for --rotcw, --rotccw, --rot180. The old names were confusing, and now
     it is more clear that these merely adust the Orientation metadata that
     suggests viewing orientation, rather than actually rotating the image
     data. (1.5.2)
   * oiiotool color conversion ops crashed when inputs were files with
     MIPmap levels (such as textures). #930 (1.5.3/1.4.13)
   * More graceful handling when outputting an image with negative pixel
     window origin to a file format that doesn't support this feature.
     (1.5.3)
   * oiiotool --unsharp_mask:kernel=median will perform a median filter
     for the blurring step (rather than a gaussian or other convolution
     filter), which tends to sharpen small details but not over-sharpen
     long edges as the traditional unsharp mask often does. (1.5.4)
   * oiiotool's help message now says explicitly if it was compiled without
     any support for OpenColorIO. (1.5.5/1.4.15)
   * oiiotool -stats, on deep files, now prints a histogram of the number
     of samples per pixel. #992 (1.5.6)
   * oiiotool --dump of "deep" files improves output with int32 channels
     (1.5.6).
   * oiiotool --stats of "deep" files prints a histogram of samples/pixel
     (1.5.6).
   * oiiotool -subimage has better error detection and reporting for
     requests for nonexistant subimages. #1005 (1.5.7)
   * oiiotool --ch is a bit more flexible in its channel-shuffling syntax:
     you are now able to say newchannel=oldchannel, both shuffling and
     renaming channels simultaneously, thus removing a frequent necessity
     of a --chnames action following a --ch. (1.5.8)
   * oiiotool -d now supports uint32, sint32. #1013 (1.5.8)
   * oiiotool -native forces native data format read in cases where going
     through the ImageCache would have sacrificed precision or range.
     #1014 (1.5.8)
   * oiiotool --resize (and similar, such as --fix, --resample, etc.) size
     specifiers now allow percentage values that are not the same in each
     direction, such as "200%x50%", which would double horizontal resolution
     while cutting vertical resolution in half. #1017 (1.5.8)
   * oiiotool --ch now works properly with "deep" images. (1.5.8)
* maketx & TextureSystem:
   * texture lookups have roughly doubled in performance because of SSE
     optimization. (1.5.5 / #948, 1.5.6 / #990).
   * maketx: Fix case typo for LatLong env map creation when in 'prman'
     mode. #877.  (1.5.1/1.4.10)
   * maketx --attrib, --sattrib, and --sansattrib now work like
     oiiotool; in other words, you can use command line arguments to add
     or alter metadata in the process of creating a texture. #901 (1.5.1)
   * maketx --sharpen <AMT> adds slight sharpening and emphasis of
     higher frequencies when creating MIP-maps. #958 (1.5.5)
   * Fix crash when using maketx --checknan (1.5.5)
   * maketx now embeds metadata hints ("oiio:ConstantColor") for
     constant textures (all pixels are identical). The texture system
     notices this hint and will automatically replace texture lookups
     (as long as wrap mode is not black) with this constant value, about
     10x faster than a real texture lookup would have been. This sounds
     silly, but in production sometimes you end up with uniform textures
     and this helps. Also, you can retrieve the constant color via
     get_texture_info of "constantcolor" and "constantalpha" (though the
     retrieval will only succeed if the metadata is present, even if
     the texture is actually constant). #1006 (1.5.7)
   * maketx now embeds metadata hints ("oiio:AverageColor") containing
     the average value of the texture. This can be retrieved with
     get_texture_info of "averagecolor" and "averagealpha". #1006 (1.5.7)
* Python:
    * Bug fix: the Python binding of ImageInput.read_scanlines did not
      properly honor any channel subset specified. (1.5.5/1.4.15)
    * All of the expensive functions in the Python bindings now release the
      Python GIL (global interpreter lock) as much as possible. This allows
      other Python threads to make progress even when OIIO is doing a
      lengthy operation such as file I/O or an expensive image processing
      operation. (1.5.5)
    * Bug fix in ImageInput: could crash if calling ImageInput.read_*
      functions without specifying a data format. #998 (1.5.6)
    * Bug fix in ImageOutput: could crash if calling ImageInput.write_*
      functions if the buffer format did not match the file data format.
      #999 (1.5.6)
* OpenEXR:
   * Improve the quality of lossy b44 compression by more correctly
     using the pLinear value of channels (we were incorrectly using the
     flag to indicate linear channels, but it's really for channels
     that are perceptually linear). (#867) (1.5.0/1.4.9)
   * Fix potential build breaks due to incorrect use of
     Imf::isDeepData() which apparently was not intended to be an
     externally-visible function. (1.5.0/1.4.9) (#875)
   * Fix crashes/exceptions when passing string array attributes
     for OpenEXR output. #907 (1.5.1/1.4.11)
   * Improved ordering of channel names for OpenEXR files with many
     "layers".  #904 (1.5.1/1.4.11)
   * Fixed issue where a stringvec of 16 items was mishandled as a
     matrix. #929 (1.5.3/1.4.13)
   * OpenEXR 2.2 support, including the new DWAA/DWAB compression modes.
     (1.5.4)
   * Fix bug that prevented proper saving/reporting of subimage name
     for multi-subimage OpenEXR files. (1.5.5).
   * Fix read_deep_tiles() error when not starting at the image origin.
     #1040 (1.6.0/1.5.10)
   * Fix output of multi-part exr file when some parts are tiled and
     others aren't. #1040 (1.6.0/1.5.10)
* JPEG:
   * Fix broken recognition of .jfi extension. (#876)
   * Read and write ICC profiles as attribute "ICCProfile". (#911)
   * Fix seek_subimage for JPEG input -- did not properly return the
     spec. (1.5.2/1.4.12)
   * Support for reporting and controlling chroma-subsampling value,
     via the "jpeg:subsampling" attribute. #978 (1.5.5)
* PNG:
   * Read and write ICC profiles as attribute "ICCProfile". (#911)
* TIFF:
   * Read and write ICC profiles as attribute "ICCProfile". (#911)
   * Graceful handling of output of images with negative data window
     origin. (1.5.3)
   * Improved precision when auto-premultiplying 8 bit unassociated alpha
     images (if the user is reading them into a higher-precision buffer).
     #960, #962 (1.5.2)
   * Change default compression (if otherwise unspecified) to "zip". (1.5.6)
   * Robust to Exif blocks with corrupted GPS data. #1008 (1.5.8/1.4.16)
   * Fixes to allow proper output of TIFF files with uint32 or int32 pixels
     (1.5.8)
* RAW:
   * Fix for portrait-orientation image reads. (#878) (1.5.1/1.4.10)
   * Fix bug with "open with config" options. #996 (1.5.6)
* RLA: Fix bug that caused RLA output to not respect requests for 10 bit
  output (would force it to 16 in that case). #899 (1.5.1)
* ImageSpec::get_float_attribute() is now better about retrieving values
  that were stored as integers, even though you are querying them as
  floats. (#862) (1.5.0/1.4.9)
* ImageCache fix for when files are not found, then subsequently the
  searchpath is changed. #913 (1.4.12/1.5.2)
* Fixed some alloca calls that did not get the right amount of memory.
  (#866) (1.5.0/1.4.9)
* Fix an off-by-one loop in IBA::resize that would not get the wrong
  image result, but might trigger debuggers to flag it as touching the
  wrong memory. (#868) (1.5.0/1.4.9)
* Better exception safety in Filesystem::scan_for_matching_filenames().
  #902 (1.5.1/1.4.11)
* Python: ImageBuf.get_pixels() is now implemented, was previously omitted.
  (1.5.2)
* TextureSystem: anisotropic texture lookups are slightly sped up (~7%)
  by using some approximate math (but not visibly different) #953. (1.5.5)
* Better exception safety in Filesystem::exists() and similar functions.
  #1026 (1.5.8/1.4.16)

Build/test system improvements:
* Fix several compiler warnings and build breakages for a variety of
  platforms and compiler versions. (#858, #861) (1.5.0/1.4.8)
* Move around some cpack-related components. (#863) (1.5.0/1.4.9)
* Allow in-source build (not recommended, but necessary for Macports).
  (#863) (1.5.0/1.4.9)
* Fixes to docs-building makefiles. (#873) (1.5.0/1.4.9)
* More robust build when OpenEXR and IlmBase have installed their
  respective header files in different directories rather than the
  expected behavior of being installed together. (#861) (1.5.0/1.4.9)
* Fix build break in DEBUG compiles for ustring internals. (#869) (1.5.0/1.4.9)
* Fix warnings about potentially uninitialized variables. (#871) (1.5.0/1.4.9)
* Make thread.h use more modern gcc intrinsics when gcc >= 4.8, this
  allows correct thread.h operations for PPC and MIPS platforms that
  were't working before. (#865) (1.5.0/1.4.9)
* Fix Windows build when OIIO_STATIC_BUILD is used. (#872) (1.5.0/1.4.9)
* Fixes to get a clean compile on Windows + MSVC 9. (#859) (1.5.0/1.4.8)
* Fixes to get a clean compile on Windows + MSVC 9. (#872) (1.5.0/1.4.9)
* Make 3.0 compatibility fixes on OSX. (1.5.1/1.4.10)
* Fix segfaults on 32 bit systems with gcc 4.2. #889 (1.5.1/1.4.11)
* Fixes to Filesystem internals to work with older Boost releases older
  than 1.45. #891 (1.5.1/1.4.11)
* Fixes to find libraw properly with Visual Studio 2010. #895 (1.5.1/1.4.11)
* Fix bad casts in thread.h that broke some platforms. #896 (1.5.1/1.4.11)
* Several fixes for Windows build, including properly finding OpenEXR
  libraries when OpenEXR 2.1 is used. (1.5.1/1.4.11)
* Fixes to fmath.h to work with MSVC 2013 (some long-omitted math ops that
  we'd always needed to define for Windows only are finally supported
  in MSVC 2013). #912 (1.4.12/1.5.2) #927 (1.4.13/1.5.3)
* Fix for Linux + Boost >= 1.55 combination: need to link with -lrt.
  #914 (1.4.12/1.5.2)
* Fix Ptex + static linkage. (1.4.12/1.5.2)
* Rudimentary support for C++11: building with USE_CPP11=1 tries to set
  compiler flags (for gcc and clang, anyway) to use C++11 mode, and also
  building with USE_LIBCPLUSPLUS=1 tries to link with libc++ if you are
  using clang. (1.5.2)
* Fixes for Boost Filesystem 1.46-1.49. (1.5.2/1.4.12)
* testtex new options: --nchannels (forces num channels to look up, rather
  than always doing what's in the file), --derivs (force the kind of texture
  calls that return derivs of the texture lookups. (1.5.4)
* Make it able to compile against giflib >= 5.1. #975 (1.4.14/1.5.5)
* Add an option to link against static Ilmbase and OpenEXR libraries (1.5.5).
* Add testtex options -interpmode and -mipmode. #988 (1.5.6)
* Build against Python 3 if the make/cmake build flag USE_PYTHON3=1 is used.
  (1.5.6)
* grid.tx and checker.tx have been moved from ../oiio/images to
  testsuite/common/texture (allow it to be versioned along with any changes
  to maketx. (1.5.7)
* Support for freetype 2.5.4. #1012 (1.5.8/1.4.16)
* Python plugin is now build as a cmake "module" rather than "library",
  which fixes some things on OSX. #1043 (1.6.0/1.5.10)

Developer goodies / internals:
* New Strutil string comparison functions: starts_with, ends_with.
  (1.5.1/1.4.10)
* New Strutil simple parsing functions: skip_whitespace, parse_char,
  parse_until_char, parse_prefix, parse_int, parse_float, parse_string,
  parse_word, parse_identifier, parse_until. (1.5.1/1.4.10, 1.5.2/1.4.11)
* New Filesystem functions: create_directory, copy, remove, remove_all,
  temp_directory_path, unique_path. (1.5.1/1.4.10)
* thread.h: add atomic_exchange() function. #898 (1.5.1/1.4.11)
* Improved error propagation through ImageCache, ImageBuf, and oiiotool.
  (1.5.1)
* Moved certain platform-dependent macros from sysutil.h to platform.h
  (1.5.4)
* ustring: add comparisons between ustrings versus char* and string_view.
  (1.5.4)
* New simd.h exposes float4, int4, and mask4 classes that utilize SSE
  instructions for big speedups. (1.5.5 / #948, #954, #955)
* Big reorganization of fmath.h, moved stuff around, organized, added lots
  of safe_blah() functions that clamp to valid ranges and fast_blah()
  functions that are approximations that may differ slightly several
  decimal places in but are much faster than the full precision libm/IEEE
  versions. #953, #956 (1.5.5)
* New utility function: premult(), which can premultiply non-alpha, non-z
  channels by alpha, for a whole buffer (with strides, any data type).
  #962 (1.5.5)
* Timer API now has queries for ticks as well as seconds. (1.5.5)
* platform.h now has macros to mark functions as pure, const, nothrow,
  or unused. (1.5.5)
* Filesystem::read_text_file reads a whole text file into a string
  efficiently. (1.5.8)





--
Larry Gritz
[email protected]



_______________________________________________
Oiio-dev mailing list
[email protected]
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

Reply via email to