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