I have tagged Release-1.1.0.  Unless something is extremely, horribly broken, 
we will strive to not alter the public APIs (other than adding things, and then 
only if it doesn't break link compatibility).  Mostly we'll only fix bugs, but 
new features or performance improvements could be added but only if they are 
extremely unlikely to break existing code. 

New features or risky code will go in the master branch (which is the staging 
area for an eventual 1.2 release).

We'll continue to add critical bug fixes to 1.0 as long as people are depending 
on it, but from this point on, 1.1 is what we are recommending as the stable, 
production-ready release.

Enjoy.

----

Here are the release notes, comparing to 1.0:

Major new features and improvements:
* Support for reading and writing "deep" images (including OpenEXR 2.0).
* Big ImageCache/TextureSystem improvements:
  - Improved accuracy of anisotropic texture filtering, especially when
    combined with "blur."
  - Improve performance in cases with high numbers of threads using the
    TS simultaneously (mostly due to use of reader-writer locks on the
    tile cache rather than unique locks).
* New ImageBufAlgo functions:
    fromIplImage() : converts/copies an OpenCV image to an ImageBuf.
    capture_image() : captures from a camera device (only if OpenCV is found)
    over() : Porter/Duff "over" compositing operation
    render_text() : render text into an image
    histogram() : compute value histogram information for an image
    histogram_draw() : compute an image containing a graph of the histogram
                       of another image
    channels() : select, shuffle, truncate, or extend channels of an image.
* New oiiotool commands:
    --capture : captures from a camera device (only if OpenCV is found)
    --pattern constant : creates a constant-color image
    --over : Porter/Duff "over" compositing operation
    --text : render text into an image.
    --histogram : computes an image containing a graph of the histogram of
                  the input image.
    --fill : fills a region with a solid color
    --ch : select, shuffle, truncate, or extend channels

API changes:
* A new static ImageInput::open(filename [,config]) combines the old
  create-and-open idiom into a single call, which is also much more
  efficient because it won't needlessly open and close the file multiple
  times.  This is now the preferred method for reading a file, though
  the old-style create() and open() still work as always.
* Deep image support: ImageInput adds read_native_deep_scanlines,
  read_native_deep_tiles, read_native_deep_image, and ImageOutput adds
  write_deep_scanlines, write_deep_tiles, write_deep_image, as well as a
  supports("deepdata") query.  Also, a 'deep' field has been added to
  ImageSpec, and some deep data access functions have been added to
  ImageBuf.
* ImageInput plugins now may supply a valid_file(filename) method which 
  detects whether a given file is in the right format, less expensively
  than doing a full open() and checking for errors.  (It's probably the same
  cost as before when the file is not the right time, but when it is, it's
  less expensive because it can stop as soon as it knows it's the right
  type, without needing to do a full header read and ImageSpec setup.)
* Removed various error_message() functions that had been deprecated for
  a long time (in favor of newer getmessage() functions).
* Define a namespace alias 'OIIO' that gets you past all the custom
  namespacesin a convenient way.
* TextureOpt now contains a 'subimagename' field that allows subimages
  to be addressed by name as well as by index (only for multi-image textures,
  of course).
* ImageBuf improvements:
  - A new constructor allows an ImageBuf to "wrap" an existing buffer
    memory owned by the calling application without allocating/copying.
  - Renamed the old ImageBuf::copy_pixels -> get_pixels, and it now
    works for 3D (volumetric) buffers.
  - New ImageBuf::copy(), and eliminated operator= which was confusing.
  - New ImageBuf methods: reres(), copy_metadata(), copy_pixels(),
    get_pixel_channels().
  - ImageBuf::specmod() allows writable access to the ImageSpec (caution!).
  - Better error reporting mechanism.
  - get_pixels and get_pixel_channels take optional strides.
* ImageBufAlgo changes:
  - Many ImageBufAlgo functions now take a 'ROI' that restricts the
    operation to a particular range of pixels within the image (usually
    defaulting to the whole image), and for some operations a range of
    channels.
  - zero() and fill() take ROI arguments.
  - ImageBufAlgo::CompareResults struct changed the failure and warning
    counts to imagesize_t so they can't overflow int for large images.
* OIIO::getattribute("format_list") now can retrieve the comma-separated
  list of all known image file formats.

Fixes, minor enhancements, and performance improvements:
* ImageCache/TextureSystem:
  - Anisotropic texture lookups are more robust when the derivatives are tiny.
  - Attribute "deduplicate" controls whether the identical-image
    deduplication is enabled (on by default).
  - Attribute "substitute_image" lets you force all texture references to a
    single image (helpful for debugging).
  - Texture files are no longer limited to having tile sizes that are
    powers of 2.
  - Much faster TIFF texture access (by speeding up switching of MIPmap levels).
  - More graceful handling of the inability to free handles or tiles
    under extreme conditions. Rather than assert when we can't free
    enough to stay within limits, just issue an error and allow the
    limits to be exceeded (hopefully only by a little, and temporarily).
  - Detailed per-file stats now track the number of tile reads per
    MIPmap level.
  - Attribute "unassociatedalpha" (when nonzero) requests that
    IC images not convert unassociated alpha image to associated alpha.
* iconvert handles the int32 and uint32 cases.
* Bug fix in to_native_rectangle, which could lead to errors in certain
  data format conversions.
* iv improvements:
  - better behavior after closing the last image of the sequence.
  - file load/save dialogs can filter to show just certain image file types.
  - remember last open dialog directory
  - "About" dialog has a link to the OIIO home page
* Improve ::create to more robustly handle files whose extensions don't
  match their actual formats.
* OpenImageIO::geterror() is now thread-specific, so separate threads will
  no longer clobber each others' error messages.
* OpenEXR: support for building with OpenEXR 2.x, including use of
  multi-part EXR and "deep" data.
* Fix reading bugs in DPX and Cineon.
* DPX: fix endianness problem for 15 bit DPX output.
* PNG: fix handling of gamma for sRGB images.
* oiiotool fixes: print MIP messages correctly (it was only printing for
  the first MIP level); make sure stray "oiio:BitsPerSample" in an input
  file doesn't mess up the -d flags.
* Field3D fixes: properly catch exceptions thrown by the Field3D open();
  conform metadata to Field3D conventions; multi-layer f3d files will
  present as a multi-image file with the "oiio:subimagename" giving a
  unique name for each layer subimage; 
* OpenEXR: suppress format-specific metadata from other formats.
* Targa: fix several bugs that were preventing certain metadata from being
  written properly.
* TIFF: recognize the SAMPLEFORMAT_IEEEFP/bitspersample=16 as an image
  composed of "half" pixels; enable PREDICTOR_FLOATINGPOINT to give slightly
  better compression of float images.
* Handle UTF-8 paths properly on Windows.
* Removed the obsolete "iprocess" utility.
* Fix allocation and stride bugs when dealing with images having different data
  formats per channel, and tiled images with partially filled border tiles.
* Field3D: Bug fix when reading vector f3d files.
* Significant performance improvements of our atomics and spin locks when
  compiling with USE_TBB=0.
* Fix quantize() to properly round rather than truncate.
* ImageBufAlgo functions now by convention will save error messages into
  the error state of their output ImageBuf parameter.
* Improve I/O error checking -- many file reads/writes did not previously
  have their result status checked.
* Fixed missing OpenEXR open() error message.
* Clean up error reporting in iconvert.
* Fixes to handle Windows utf8 filenames properly.
* ImageBufAlgo::compare() gives a sensible error (rather than an assertion)
  if the images being compared are not float.
* maketx:
  - Better error messages for a variety of things that could go wrong when
    reading or writing image files.
  - Fixes for bug preventing certain ImageCache efficiencies.
  - new option --ignore-unassoc leaves unassociated alpha data as it is
    (no auto-conversion to associated alpha) and/or ignores the tags for
    an input file that is associated but incorrectly tagged as
    unassociated alpha.
  - Option --monochrome-detect was buggy for images with alpha.
  - Option --constant-color-detect didn't do anything; now it works.
  - New option: --compression allows you to override the default compresion.
* oiiotool & info: the --hash command had a bug wherein when applied to
  images there were MIP-mapped, would hash the lowest-res MIP level rather
  than the highest-res.  This could result in two different images, if
  they happened to have the same average color, to incorrectly report
  the same SHA-1 hash.  Note that this did NOT affect non-MIPmapped images,
  nor did it affect the SHA-1 hashing that occurred in maketx to allow
  the TextureSystem to detect duplicate textures.

Build/test system improvements:
* Various Windows build fixes, including fixes for Windows 7, and 
  improvements to running the testsuite on Windows.
* Testsuite additions and improvements: png fmath_test
* Compilation fixes on FreeBSD.
* Compilation fixes on GNU Hurd platform.
* Compilation and warning fixes for Clang 3.1.
* Add FIELD3D_HOME build variable to allow explicit path to Field3D
  implementation.
* Remove support for Boost < 1.40.
* Improved unit tests for atomics, spin locks, and rw locks.
* Avoid generating iv man pages when USE_QT=0
* New testtex options: --aniso, --stblur
* CMake option 'EXTRA_CPP_DEFINITIONS' lets custom builds inject
  site-specific compiler flags.
* Make/cmake option: HIDE_SYMBOLS=1 will try to restrict symbol visibility
  so that only symbols intended to be part of the public APIs will be
  visible in the library when linked.
* The old DLLPUBLIC and LLEXPORT macros, which could clash with other
  packages, have been renamed to OIIO_API and OIIO_EXPORT.
* Greatly reduced output when building with cmake; by default, most
  non-error status messages only are printed when VERBOSE=1 compilation
  is requested.

Developer goodies:
* Strutil new utilities: iequals, istarts_with, iends_with, to_lower,
  to_upper, strip, join.
* Use Chris Foster's 'tinyformat' for type-safe printf-like formatting,
  and this now forms the basis of Strutil::format, ustring::format, and
  many of the classes' error() methods.
* TypeDesc::equivalent() tests for type equality but allows triples with
  different' vector semantics to match.
* In timer.h, a new time_trial() template that makes multiple trial
  benchmarks easy.
* Macros for memory and cache alignment (in sysutil.h).
* Extend Filesystem::searchpath_find() to be able to search recursively.
* Strutil::strip() strips whitespace (or other specified character sets) from
  the beginning or ending of strings.
* Change threads.h to set USE_TBB=0 if undefined as a compiler flag; this
  makes it easier to use threads.h in other applications without worrying
  about TBB at all.
* Windows utf8 filename utilities path_to_windows_native and
  path_from_windows_native.



--
Larry Gritz
[email protected]


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

Reply via email to