Release 1.2 (27 Jun 2013)
-------------------------
Major new features and improvements:
* New oiiotool commands:
    --swap        Exchanges the top two items on the image stack.
    --fit         Resize image to fit into a given resolution (keeping aspect).
    --ch          Select/cull/reorder/add channels within an image.
    --chappend    Merge two images by appending their color channels.
    --chnames     Rename some or all of the color channels in an image.
    --zover       Depth compositing
    --cadd        Add constant per-channel values to all pixels
    --cmul        Multiply an imge by a scalar or per-channel constant.
    --fillholes   Smoothly interpolate for hole filling.
    --resample    Similar to --resize, but just uses closest pixel lookup.
    --clamp       Clamp pixel values
    --rangeexpand Expand range for certain HDR processing
    --rangecompress  Compress range for certain HDR processing
    --unpremult   Divide colors by alpha (un-premultiply).
    --premult     Multiply colors by alpha.
    --kernel      Make a convolution kernel using a filter name.
    --convolve    Convolve two images.
    --blur        Blur an image.
    --unsharp     Sharpen an image using an unsharp mask.
    --paste       Paste one image on another.
    --mosaic      Create a rectilinear image mosaic.
    --transpose   Transpose an image (flip along the diagonal axis)
    --chsum       Sum all channels in each pixel
    --cshift      Circular shift an image pixels
    --fft --ifft  Forward and inverse Fourier transform
    --colorcount  Counts how many pixels are one of a list of colors.
    --rangecheck  Counts how many pixels fall outside the given range.
    --ociolook    Apply OpenColorIO "looks"
* oiiotool can loop over entire numeric frame ranges by specifying
  wildcard filenames such as "foo.#.tif" or "bar.1-10#.exr".
* oiiotool --frames and --framepadding give more explicit control over
  frame range wildcards.
* Significant performance improvements when reading and writing images
  using the ImageBuf::read and ImageCache::get_pixels interfaces, and in
  some cases also when using regular ImageInput.  This also translates
  to improved performance and memory use for oiiotool and maketx.
* At least doubled the performance of maketx for large images when run
  on multi-core machines.
* Significant performance improvements when using ImageBuf::Iterator
  or ConstIterator to traverse the pixels in an ImageBuf, and the iterators
  now support "wrap" modes (black, clamp, periodic, mirror).
* maketx --hicomp does "highlight compensation" by compressing the
  HDR value range prior to inter-MIP resizes, then re-expanding the range.
* Field3D writer (it could read f3d files before, but not write them).
* idiff can now compare that are not the same size (treating pixels
  beyond the pixel data window is being 0 valued).
* maketx --lightprobe turns a "lightprobe" iamge into a latlong environment
  map.
* Significant improvements and fixes to EXIF, IPTC, and XMP metadata
  reading and writing.
* Significant thread scalability improvements to TextureSystem and
  ImageCache.
* Huge overhaul of functionality, style, and performance of the
  entire ImageBufAlgo set of functions (see the "Public API changes"
  section below, and the imagebufalgo.h file for details).

Public API changes:
* ImageOutput semantics change: If the spec passed to open() has
  spec.format set to UNKNOWN, then select a default data format for the
  output file that is "most likely to be able to be read" and/or "most
  typical for files of that format in the wild."  Also,
  ImageOutput::open() will never fail because a requested data format is
  unavailable; if the requested format is not supported, a reasonable
  alternate will always be chosen.
* ImageBuf has been changed to a "PIMPL" idiom, wherein all the
  internals are no longer exposed in the public API.  This allows us to
  change ImageBuf internals in the future without breaking API or link
  compatibility (and thus giving us more freedom to backport important
  improvements to prior releases).
* Overhaul of ImageBufAlgo functions: they all take an ROI parameter;
  use the DISPATCH macros to make them work with all pixel data types
  where practical (previously, many supported float only); use Iterator
  rather than getpixel/setpixel, leading to huge speed improvements;
  multithread when operating on enough pixels, leading to huge speed
  improvements; work on 3D (volume) images where applicable; always
  gracefully handle uninitialized dest image or undefined ROI.
* New ImageBufAlgo functions: channels(), channel_append(), mul(),
  paste(), zover(), add() and mul() varieties that that add/multiply a
  constant amount to all pixels, fillholes_pp(), resample(), clamp(),
  rangecompress(), rangeexpand(), make_kernel(), unsharp_mask(),
  transpose(), channel_sum(), circular_shift(), fft(), ifft(),
  color_count(), color_range_check().
  [look in imagebufalgo.h for documentation.]
* ImageBufAlgo::make_texture() allows you to do the same thing that
  maketx does, but from inside an application and without launching a
  shell invocation of maketx.  Two varieties exist: one that takes a
  filename and reads from disk, another that takes an ImageBuf already
  in memory.
* ImageBuf Iterator/ConstIterator now take "wrap" mode parameters that
  allow out-of-range iterators to be able to retrieve valid data. Supported
  wrap modes include black, clamp, periodic, and mirror.  This simplifies
  a lot of algorithms using IB::Iterator, they can now be written to 
  rely on wrap behavior rather than being cluttered with checks for
  "if (it.exits())" clauses.
* ImageBufAlgo::computePixelHashSHA1 has been refactored to take ROI,
  a block size, and thread count, and thus can be parallelized with threads.
  The block size means that rather than computing a single SHA-1 for all
  the pixels, it computes separate (parallel) SHA-1 for each group of
  blocksize scanlines, then returns the SHA-1 of all the individual SHA-1
  hashed blocks. This is just as strong a hash as before, though the value
  is different than doing the whole thing at once, but by breaking it into
  blocks the computation can be multithreaded.
* ImageBuf::swap() makes it easy to swap two ImageBuf's.
* ImageSpec::get_channelformats is now const (and always should have been).

Fixes, minor enhancements, and performance improvements:
* TextureSystem improvements:
  * Make sure "black" wrap wins out over "fill" value when they conflict
    (looking up an out-of-range channel beyond the pixel data window).
  * "mirror" wrap mode was slightly incorrect and has been fixed.
* oiiotool improvements:
  * oiiotool -v breaks down timing by individual function.
  * oiiotool has been sped up by forcing read of the whole image up front
      for reasonably-sized files (instead of relying on ImageCache).
  * oiiotool does not write output images if fatal errors have occurred.
  * oiiotool --diff: Better error handling.
  * oiiotool --resize (and --fit): properly handle the case of resizing
    to the same size as the original image.
  * oiiotool -d CHAN=TYPE can set the output for just one channel.
* ImageBufAlgo improvements:
  * Internal overhaul of IBA::resize to greatly speed it up.
  * Improve IBA::resize to handle the image edge better -- instead of 
    clamping, just don't consider nonexistant pixels.
  * More careful selection of filter when resizing (IBA::resize, oiiotool
    --resize and --fit, and maketx).
  * Fix IBA::paste() error when the foreground image runs off the end of
    the background image.
* Bug fix when computing SHA-1 hash of 0-sized images.
* Image format support improvements:
  * Bug fix where some format readers (PNM, SGI, and IFF) would leave the
    file handle opened if the ImageInput was destroyed without calling 
    close() first.  Now we guarantee that destroying the II always causes
    the file to close().
  * DPX: output allocation bug fix; properly set pixel aspect ratio for
    DPX write.
  * IFF: bug fix for endian swap for IFF file input.
  * JPEG2000: fix warnings, make sure event manager transfer object
    remains valid.
  * OpenEXR: when reading, was botching the ordering of per-channel data
    formats.
  * SGI write: bug fix for the case of 15 bpp RLE encoding, was
    double-swapping bytes.
  * Targa: more robust check for presence of alpha channels; bug fix where
    R and B channels were reversed for certain kinds of palette images.
* maketx improvements:
  * maketx --chnames allows you to rename the channels when you create a
    texture.
  * maketx bug fixes: incorrect weighting when resizing MIP levels for
    latlong environment map images that could make visible artifacts
    on some intermediate MIP levels.
* encode_exif() didn't copy the right number of bytes.
* Python bindings: ImageSpec extra_attribs now properly responds to
  iterator calls.
* Fix bug in sRGB -> linear conversion.
* iv: make pixelview display coordinates & color even when outside the
  data window.

Build/test system improvements:
* Many fixes to improve builds and eliminate warnings on Windows and MinGW.
* Fix missing InterlockedExchangeAdd64 for Windows XP.
* New make/cmake boags: OIIO_BUILD_TOOLS=0 will exclude building of the
  command line tools (just build libraries), OIIO_BUILD_TESTS=0 will
  exclude building of unit test binaries.
* Improved matching of testsuite reference images on different platforms.
* Lots of fixes to compiler warnings on newer gcc and clang releases.
* Unit tests for Timer class.
* libOpenImageio/imagespeed_test benchmarks various methods of reading
  and writing files and iterating image pixels (to help us know what to
  optimize).
* If OpenSSL is available at build time, OIIO will use its SHA-1
  implementation instead of our own (theirs is faster). We still fall
  back on ours if OpenSSL is not available or when OIIO is built with
  USE_OPENSSL=0.
* Allow default the shared library suffix to be overridden with the
  CMake variable OVERRIDE_SHARED_LIBRARY_SUFFIX.
* Eliminated all uses of the custom DEBUG symbol, and instead use the
  more standard idiom "#ifndef NDEBUG".
* Compatibility fixes for Python3.
* MSVC 2008: Prevent a redefinition error when using boost::shared_ptr.
* Fixes for compatibility with libtiff 4.0.
* Fixes for MSVC debug mode having out-of-bound exceptions.
* Fixes for libjpeg 9.x.
* Compile to treat warnings as errors (you can disable this with 
  STOP_ON_WARNING=0).
* New filter: "sharp-gaussian".
* Fix various Windows build errors.
* Improvements to the build when finding IlmBase/OpenEXR.
* Various fixes to compile on ARM architecture.
* Fixes to compile on ESA/390 mainframe (!).
* testtex --threadtimes, --trials, --iters, --nodup, --wedge.  These
  are helpful in using testtext to benchmark the texture system.

Developer goodies:
* Improved ASSERT and DASSERT macros to not generate warning for certain
  debug compiles; key their debug behavior by the absence of the standard
  NDEBUG idiom rather than presence of a custom DEBUG symbol; rename the
  message variants ASSERT_MSG and DASSERT_MSG.
* Change the default for Sysutil::memory_used to report resident memory
  rather than virtual process size.
* Multithread/parallel version of utility function convert_image().
* imagebufalgo.h improvements and expansion of the various DISPATCH_*
  macros.
* New Filesystem utilities: parent_path(), get_directory_entries().
* New Strutil utilities: extract_from_list_string
* spinlock tweaks make it faster than TBB's spin locks!
* By default, we no longer build or use TBB (it's considered deprecated,
  but in 1.2 can still be turned on with USE_TBB=1).
* In fmath.h, added definitions for safe_inversesqrt, safelog, safe_log2,
  safe_log10, safe_logb.
* In typedesc.h, added TypeDesc::tostring() function.
* unordered_map_concurrent.h contains a template for a thread-safe
  unordered_map that is very efficient even for large number of threads
  simultaneously accessing it.
* Documentation: Finally, a chapter in the PDF docs that fully describes
  the ImageBuf class.



--
Larry Gritz
[email protected]


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

Reply via email to