Changes:

Release 1.5 (development in progress) -- 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. (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.
     #932 (1.5.3)
   * --warp transforms an image using a 3x3 matrix. #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. (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.
     #932 (1.5.3)
   * warp() transforms an image by a 3x3 matrix. #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). 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.)
  (1.5.5)
* Experimental 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 (1.5.5)
  N.B.: Currently this is disabled by default, enable at build time
  with USE_FFMPEG=1, but note that this can cause problems because ffmpeg
  will happily open non-movie files, leading to problems if an image file
  has an unexpected file extension. We hope to have this issue solved, and
  thus movie support enabled by default, by the time we are ready for a
  stable 1.5 release. Stay tuned.

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)

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)
* 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)
* 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)
   * Experimental feature: maketx --sharpen <AMT> adds slight sharpening
     and emphasis of higher frequencies when creating MIP-maps. #958 (1.5.5)
   * Fix crash when using --checknan (1.5.5)
* 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)
* 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).
* 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.6.2)
* RAW: Fix for portrait-orientation image reads. (#878) (1.5.1/1.4.10)
* 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)

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).

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)



Release 1.4.14 (20 Oct 2014 -- compared to 1.4.13)
--------------------------------------------------
* GIF: Fix to make it able to compile against giflib >= 5.1. #975
* JPEG support for reporting and controlling chroma-subsampling value,
  via the "jpeg:subsampling" attribute. #978

Release 1.4.13 (12 Sep 2014 -- compared to 1.4.12)
--------------------------------------------------
* Now builds against OpenEXR 2.2, including support for the new
  DWAA and DWAB compression modes.
* OpenEXR: fixed issue where a stringvec of 16 items was mishandled as
  a matrix.
* Fix fmath.h to move the 'using' statements around properly.
* Fix oiiotool color conversion bug that crashed when the input image was
  a file with MIP levels.
* TIFF output now gracefully handles negative origins without hitting an
  assertion.
* Developer details: platform macros moved from sysutil.h to platform.h.
  (But sysutil.h now includes platform.h, so you shouldn't notice.)
* Developer details: ustring now has comparisons between ustrings versus
  char* and string_view.

Release 1.4.12 (31 Jul 2014 -- compared to 1.4.11)
--------------------------------------------------
* ImageCache fix for when files are not found, then subsequently the
  searchpath is changed. #913 (1.4.12/1.5.2)
* 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)
* 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)

Release 1.4.11 (9 Jul 2014 -- compared to 1.4.10)
-------------------------------------------------
* OpenEXR output fix for crashes/exceptions when passing string array
  attributes. #907
* Improved ordering of channel names for OpenEXR files with many "layers".
  #904
* oiiotool --ch now will search for channel names case-insensitively,
  if the channel names are not first found with case-sensitive compares. #897
* 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
* 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
* Fix segfaults on 32 bit systems with gcc 4.2. #889
* Fixes to Filesystem internals to work with older Boost releases < 1.45. #891
* Fixes to find libraw properly with Visual Studio 2010. #895
* Fix bad casts in thread.h that broke some platforms. #896
* Strutil: add another variety of parse_identifier with an expanded
  character set.
* thread.h: add atomic_exchange() function. #898
* Several fixes for Windows build, including properly finding OpenEXR
  libraries when OpenEXR 2.1 is used.
* Better exception safety in Filesystem::scan_for_matching_filenames(). #902

Release 1.4.10 (20 Jun 2014 -- compared to 1.4.9)
-------------------------------------------------
* Fix for portrait-orientation RAW image reads. (#878)
* maketx: Fix case typo for LatLong env map creation when in 'prman'
  mode (#877).
* New Strutil string comparison functions: starts_with, ends_with.
* Make 3.0 compatibility fixes on OSX.
* 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.
* New Filesystem functions: create_directory, copy, remove, remove_all,
  temp_directory_path, unique_path.

Release 1.4.9 (6 Jun 2014 -- compared to 1.4.8)
-----------------------------------------------
* Allow in-source build (not recommended, but necessary for MacPorts). (#863)
* CPack improvements. (#863)
* Fixes to docs-building makefiles. (#873)
* Make ImageSpec::get_float_attribute correctly convert many integer types.
  (#862)
* Fixed some alloca calls that did not get the right amount of memory. (#866)
* 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)
* 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)
* 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)
* Fix build break in DEBUG compiles for ustring internals. (#869)
* Fix warnings about potentially uninitialized variables. (#871)
* 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)
* Fix Windows build when OIIO_STATIC_BUILD is used. (#872)
* Fixes to get a clean compile on Windows + MSVC 9. (#872)
* New filters available to direct users of filter.{h,cpp} and for
  ImageBufAlgo, oiiotoo, and maketx: "cubic", "keys", "simon", "rifman". (#874)
* OpenEXR: Fix potential build breaks due to incorrect use of
  Imf::isDeepData() which apparently was not intended to be an
  externally-visible function. (#875)
* JPEG: Fix broken recognition of .jfi extension. (#876)

Release 1.4.8 (23 May 2014 -- compared to 1.4.7)
------------------------------------------------
* Fix several compiler warnings and build breakages for a variety of
  platforms and compiler versions. No new feature or true bug fixes.
  #857, #858, #859


Release 1.4 (19 May 2014) -- compared to 1.3.x
----------------------------------------------
Major new features and improvements:
* The PNM reader now supports "PFM" files, which are the floating point
  extension to PNM. (1.4.1)
* Preliminary support for reading a wide variety of digital camera "RAW"
  files.  (1.4.1)
* New oiiotool commands:
    --cpow : raise pixel values to a power (1.4.1)
    --label : give a name to the top-of-stack image, can be referred
              to later in the command line (1.4.1)
    --cut : combine --crop, --origin +0+0, and --fullpixels. (1.4.3)
    --pdiff : perceptual diff (#815) (1.4.4)
    --polar, --unpolar : complex <-> polar conversion. (#831) (1.4.5)
* oiiotool --resize and --fit, and also maketx when using "good" filters
  for downsizing, have been significantly sped up. When downsizing
  with large filters, we have seen up to 3x improvement. (#808) (1.4.3)

Public API changes:
* New ImageBufAlgo functions:
  - pow() raises pixel values to a power. (1.4.1)
  - cut() cuts a region of pixels and moves it to the origin (combines
    crop, reset origin, and set full res = data resolution). (1.4.3)
  - complex_to_polar() and polar_to_complex() convert from (real,imag)
    to (amplitude,phase) and back. (#831) (1.4.5)
* New string_view class (in string_view.h) describes a non-owning
  reference to a string.  The string_view is now used in many places
  throughout OIIO's APIs that used to pass parameters or return values
  as char* or std::string&.  Read string_view.h for an explanation of why
  this is good. (1.4.2, 1.4.3) (N.B. this was called string_ref until 1.4.6,
  when it was renamed string_view to conform to C++17 draft nomenclature.)
* New array_view<>, array_view_strided<>, strided_ptr<>, and image_view<>
  templates are great utility for passing bounded and strided arrays. (1.4.3)
* Removed deprecated PT_* definitions from typedesc.h.
* Removed the quantization-related fields from ImageSpec. (1.4.3)
* Dither: If ImageOutput::open() is passed an ImageSpec containing the
  attribute "oiio:dither" and it is nonzero, then any write_*() calls
  that convert a floating point buffer to UINT8 output in the file will
  have a hashed dither added to the pixel values prior to quantization
  in order to prevent the appearance of visible banding. The specific
  nonzero value passed for the attribute will serve as a hash seed so
  that the pattern is repeatable (or not). (1.4.3)

Fixes, minor enhancements, and performance improvements:
* Improved oiiotool features:
  * --stats on deep files now prints additional info, such as the minimum
    and maximum depth and on which pixels they were encountered, as well
    as which pixel had the maximum number of depth samples. (1.4.1)
  * --resize and --resample allow WIDTHx0 or 0xHEIGHT, where the '0'
    value will be interpreted as automatically computing the missing 
    dimension to preserve the aspect ratio of the source image.
    (#797, #807) (1.4.3)
  * Fixed possible crash when using --origin with tiled, cached
    images. (1.3.12/1.4.2)
  * --pdiff does a perceptual diff (like 'idiff -p'). (#815) (1.4.4)
  * --dumpdata takes a noptional modifier empty=0 that will cause empty
    deep pixels to not produce any output. (#821) (1.4.5)
  * --polar, --unpolar convert from complex (real,imag) to polar
    (amplitude, phase) and vice versa. (#831) (1.4.5)
  * View wildcards: similar to frame range wildcards, "%V" is replaced by
    new names, "%v" by the first letter of each view. The view list is
    {"left","right"} by default, but may be set with the --views argument.
    (1.4.5)
  * --over and --zover set the resulting display/full window to the union
    of those of the inputs; previously it set the display window to that
    of the foreground image, which is often a poor default. (1.4.7)
* ImageCache/TextureSystem:
  - The multi-point version of environment() was broken. (1.3.9/1.4.1)
  - Don't honor the SHA-1 fingerprint found in a file if the "Software"
    metadata doesn't indicate that the file was written by maketx or
    oiiotool. (1.4.3)
* OpenEXR:
  - Multi-part EXR (2.0) didn't write the required "name" attribute for
    each part. (1.3.10/1.4.1)
  - Fix crashing bug when reading stringvector attributes in the
    file. (1.3.11/1.4.2)
  - Add .sxr and .mxr as possible filename extensions (1.3.12/1.4.2)
  - Smarter channel ordering of input of files with ZBack, RA, GA, or BA
    channels (#822) (1.4.5).
  - Adhere to the misunderstood limitation that OpenEXR library doesn't
    allow random writes to scanline files. (1.4.6)
  - More robust with certain malformed metadata. (#841) (1.4.6)
* TIFF: Give a more explicit error message for unsupported tile sizes (1.4.4)
* GIF: Fixes to subimage generation; GIF frames are treated as sequential
  windows to be drawn on canvas rather than as independent images; respect
  "disposal" method; initial canvas is now transparent and all GIFs are
  presented as 4-channel images. (#828) (1.4.5)
* iconvert: properly handle multi-image files for formats that can't
  append subimages. (1.3.10/1.4.1)
* iv info window should print native file info, not translated
  ImageBuf/ImageCache info. (1.3.10/1.4.1)
* Fix ImageCache::get_pixels() for the chbegin != 0 case, when cache
  and output buffer types were not identical. (1.3.10/1.4.1)
* DPX:
  - Fixed several places in the where it could have had buffer
    overruns when processing certain malformed string fields. (1.4.1)
  - Fixed inappropriate use of "dpx_ImageDescriptor" could make invalid
    DPX files (especially when reading metadata from one DPX file,
    changing the number of channels, then writing out again as a DPX
    file). (1.3.10/1.4.1)
  - For output, honor the "Software" metadata attribute passed in.
    (1.3.11/1.4.2)
  - Ignore negative image origin values, which are not allowed by the
    DPX spec which states they are unsigned. (#813) (1.4.4)
  - Fix improper handling of unsupported pixel data types. (#818) (1.4.5)
  - Accept pixel ratio (x/0) to mean 1.0, not NaN. (#834) (1.4.5/1.3.13)
  - Pad subimages to 8k boundaries, as suggested by the DPX spec (1.4.7)
  - Properly write "userdata" field to DPX files if set. (1.4.7)
* PNG:
  - add "png:compressionlevel" and "compression" strategy attributes.
    (1.3.12/1.4.2)
  - output properly responds to "oiio:UnassociatedAlpha"=1 to indicate
    that the buffer is unassociated (not premultiplied) and therefore it
    should not automatically unpremultiply it. (1.4.5)
* Make ImageBuf iterators return valid black pixel data for missing
  tiles. (1.3.12/1.4.2)
* Make the ImageOutput implementations for all non-tiled file formats
  emulate tiles by accepting write_tile() calls and buffering the image
  until the close() call, at which point the scanlines will be output.
  (1.4.3)
* All ImageBufAlgo functions, and oiiotool, strip any "oiio:SHA-1" hash
  values in the metadata in order not to confuse the TextureSystem. (1.4.3)
* IFF: accept write_scanline, even though IFF is tile only. (1.4.3)
* The implementation of the Lanczos filter (and any operations using it)
  have been sped up by using an approximate fast_sinpi instead of the
  more expensive sin() (1.4.3).
* Speed up iinfo --hash / oiiotool --hash by about 20%. (#809) (1.4.4)
* All format writer plugins: ensure that calling close() twice is safe.
  (#810) (1.4.4)
* oiiotool --info and iinfo output have been altered slightly to make them
  match and be consistent. Also, oiiotool didn't say that deep files were
  deep (1.4.4).
* Fixed bad bugs in IBA::flatten() and oiiotool --flatten. (#819) (1.4.5)
* Fix Parameter neglect of properly copying the m_interp field for assignment
  and copy construction. (#829) (1.4.5/1.3.13)
* Fix ImageBufAlgo::circular_shift (and oiiotool --cshift) that did not
  wrap correctly for negative shifts. (#832) (1.4.5/1.3.13)
* The "gaussian" flter incorrectly had default width 2 (correct = 3),
  and the "mitchell" filter incorrect had default width 3 (correct = 4).
  These were bugs/typos, the new way is correct. If you were using those
  filters in ways that used the default width value, appearance may change
  slightly. (1.4.6)

Build/test system improvements:
* libOpenImageIO_Util is now built that only has the utility functions
  in libutil (in addition to the libOpenImageIO, which contains everything).
  This is handy for apps that want to use OIIO's utility functions (such
  as ustring or Filesystem) but doesn't really need any of the image
  stuff.  A build flag BUILD_OIIOUTIL_ONLY=1 will cause only the util
  library to be built.  (1.4.1)
* New build option OIIO_THREAD_ALLOW_DCLP=0 will turn off an
  optimization in thread.h, resulting in possibly worse spin lock
  performance during heavy thread contention, but will no longer get
  false positive errors from Thread Sanitizer.  The default is the old
  way, with full optimization! (1.4.1)
* More robust detection of OpenEXR library filenames. (1.4.1)
* Always reference OpenEXR and Imath headers as <OpenEXR/foo.h> rather 
  than <foo.h>. (1.4.1)
* Unit test strutil_test now comprehensively tests Strutil. (1.4.1)
* Fix broken build when EMBEDPLUGINS=0. (1.4.3/1.3.13)
* Fix broken build against OpenEXR 1.x. (1.4.3/1.3.13)
* version.h has been renamed oiioversion.h.  For back compatibility, there
  is still a version.h, but it merely includes oiioversion.h. (#811) (1.4.4)
* Moved all the public header files from src/include to
  src/include/OpenImageIO, so that the src/include area more closely
  matches the layout of an OIIO install area. (#817) (1.4.4)
* Fix compilation problems for PowerPC (#825). (1.4.5/1.3.13)
* Fixes for OpenBSD compilation. (#826/#830) (1.4.5/1.3.13)
* Fixes for Linux compilation when building with BUILDSTATIC=1. (1.4.6)
* Fixes for compilation against IlmBase/OpenEXR 2.1. (1.4.6)
* Improve finding of Freetype on some systems (1.4.6).
* Add to top level Makefile the option STOP_ON_WARNING=0 to let it cleanly
  compile code that generates compiler warnings, without stopping the build.
  (1.4.7)

Developer goodies / internals:
* TBB has been removed completely. (1.4.2)
* Slightly faster timer queries in timer.h for OSX and Windows. (1.4.1)
* Strutil :
  - safe_strcpy() -- like strncpy, but copies the terminating 0 char. (1.4.1)
  - split() fixes bug when maxsplit is not the default value. (1.3.10/1.4.1)
* ParamValue/ParamValueList :
  - ParamValue now allows get/set of the internal 'interp' field. (1.3.9/1.4.1)
  - ParamValueList::push_back is not properly const-ified. (1.4.1)
  - New PVL::find() lets you search on the PVL. (1.4.6)
* fmath.h :
  - New fast_sin, fast_cos, fast_sinpi, fast_cospi are much faster
    polynomial approximations (with max absolute error of ~0.001). (1.4.3)
  - round_to_multiple_of_pow2 - a faster version of the existing
    round_to_multiple(), but only works when the multiple is known to be
    a power of 2. (1.4.6)
* TypeDesc now has operator<, which makes it easier to use STL data structures
  and algorithms that expect an ordering, using TypeDesc as a key. (1.4.6)
* thread.h
  - Slight thread.h portability tweaks. (1.4.1)
  - spin_rw_lock now has more standard lock()/unlock() as synonym for
    for exclusive/write lock, and lock_shared()/unlock_shared() as
    synonym for "read" locks. (1.4.6)
* ustring :
  - new ustringLess and ustringHashIsLess functors make it easier to use
    ustring as keys in STL data structures and algorithms that require
    an ordering function. (1.4.6)
  - improve thread performance significantly by using an
    unordered_map_concurrent internally for the ustring table. (1.4.6)
* unordered_map_concurrent.h :
  - Allow umc template to specify a different underlying map for the
    bins. (1.4.6)
  - Add retrieve() method that's slightly faster than find() when you just
    need a value, not an iterator. (1.4.6)
  - Align bins to cache lines for improved thread performance. (1.4.6)
* ImageBuf iterators have a new rerange() method that resets the iteration
  range, without changing images or constructing a new iterator. (1.4.6)



Release 1.3.14 (19 May 2014 -- compared to 1.3.13)
--------------------------------------------------
* OpenEXR output: More robust with certain malformed metadata. (#841) (1.4.6)
* Rename the string_ref class to string_view. (This is unused in OIIO, it
  is for compatibility with OSL.)
* Build fixes on Linux when using BUILDSTATIC=1.
* Add round_to_multiple_of_pow2 to fmath.h
* Add STOP_ON_WARNING option to the top level Makeile wrapper.
* Add documentation on the Python binding for IBA::cut.
* oiiotool --over and --zover now set the output image's display window to
  the union of the inputs' display window, rather than to the foreground.

Release 1.3.13 (2 Apr 2014 -- compared to 1.3.12)
-------------------------------------------------
* Bug fix to string_ref::c_str().
* Make ImageBuf iterators return valid black pixel data for missing tiles.
* Fix broken build when EMBEDPLUGINS=0.
* Fix broken build when building against OpenEXR 1.x.
* Fix bad bugs in IBA::flatten() and oiiotool --flatten. (#819)
* Fix DPX handling of unsupported pixel types. (#818)
* Fix compilation problems for PowerPC.
* Fix Parameter neglect of proerly copying the m_interp field for assignment
  and copy construction. (#829)
* Fixes for OpenBSD compilation. (#826/#830)
* DPX: accept pixel ratio (x/0) to mean 1.0, not NaN. (#834)
* Fix ImageBufAlgo::circular_shift (and oiiotool --cshift) that did not
  wrap correctly for negative shifts. (#832)

Release 1.3.12 (25 Jan 2014 -- compared to 1.3.11)
--------------------------------------------------
* Add .sxr and .mxr as possible filename extensions for OpenEXR.
* PNG: add "png:compressionlevel" and "compression" strategy attributes.
* Fix recent build break where OIIO would no longer compile properly
  against OpenEXR <= 1.6.
* oiiotool --origin could crash with certain large ImageCache-backed
  images.

Release 1.3.11 (8 Jan 2014 -- compared to 1.3.10)
-------------------------------------------------
* DPX output: honor the "Software" metadata attribute passed in.
* OpenEXR: fix crashing bug when reading stringvector attributes in the
  file.
* Fix build breaks when building against OpenEXR 1.x.
* Fix warnings with Boost Python + gcc 4.8.

Release 1.3.10 (2 Jan 2014 -- compared to 1.3.9)
------------------------------------------------
* OpenEXR fix: multi-part EXR (2.0) didn't write the required "name"
  attribute for each part.
* iconvert: properly handle multi-image files for formats that can't
  append subimages.
* iv info window should print native file info, not translated
  ImageBuf/ImageCache info.
* Improved strutil_test now much more comprehensively unit tests
  Strutil.
* Strutil::split() fixes bug when maxsplit is not the default value.
* Fix ImageCache::get_pixels() for the chbegin != 0 case, when cache
  and output buffer types were not identical.
* DPX bug fix -- inappropriate use of "dpx_ImageDescriptor" could make
  invalid DPX files (especially when reading metadata from one DPX
  file, changing the number of channels, then writing out again as a
  DPX file).



Release 1.3 (2 Dec 2013 -- compared to 1.2.x)
----------------------------------------------
Major new features and improvements:
* Huge overhaul of the Python bindings: TypeDesc, ImageSpec (1.3.2),
  ImageInput, ImageOutput (1.3.3), ROI, ImageBuf (1.3.4), ImageBufAlgo
  (1.3.6).  The Python bindings were pretty rusty, badly tested,
  undocumented, and had not kept up with recent changes in the C++ APIs.
  That's all fixed now, the Python APIs are finally first-class citizens
  (including full functionality, unit tests, and docs), and we intend to
  keep it that way.
* The ability for an application to supply custom ImageInput and associate
  them with a file extension. Those II's can do anything, including 
  generate image data procedurally.
* GIF reader

Public API changes:
* Large overhaul of the Python bindings. See the (finally existing!) docs.
* ImageBufAlgo:
  * New functions: nonzero_region(); ociodisplay(), resize() variety
    that lets you specify the filter by name; 2-argument (non-in-place)
    versions of add, sub, mul, rangecompress, rangeexpand, unpremult,
    premult, clamp fixNonFinite; sub() varieties that take float or
    float* operands.
  * Removed several IBA functions that have been deprecated since 1.2.
  * Deprecated the single-image in-place versions of add, sub, mul,
    rangecompress, rangeexpand, unpremult, premult, clamp fixNonFinite.
* ImageBuf:
  * read() and init_spec() are no longer required, somewhat simplifying
    application code that uses ImageBuf.  All ImageBuf API calls
    automatically read the spec and/or pixels from their named file if
    they are needed, if it has not already been done.  (1.3.4)
  * save() is deprecated, and new ImageBuf::write() is now preferred
    (naming symmetry). (1.3.4)
  * New set_write_format() and IB::set_write_tiles() allow override of
    default choices for data format and tile size for subsequent calls
    to ImageBuf::write(). (1.3.4)
* ImageCache / TextureSystem:
  * ImageCache::add_file() lets you seed the ImageCache with a "virtual file"
    that will read from a custom ImageInput.  This lets you add "procedural
    images" to the IC.
  * ImageCache::add_tile() lets you add tiles to the ImageCache. The caller
    can initialize those tiles with any pixel values it chooses.
  * A new variety of IC/TS::destroy() takes a 'bool teardown' parameter
    that, when true, does a complete teardown of the underlying ImageCache,
    even if it's the "shared" one. (1.3.7)
* OIIO::declare_imageio_format() exposes a way to give OIIO a custom
  ImageInput and/or ImageOutput (via factory functions) and associate them
  with particular file extensions. This makes it especially easy for an
  app to make a procedural image generator that looks to the entire rest
  of OIIO like a regular image file. (1.3.2)
* TypeDesc::VECSEMANTICS now have additional enum tags for TIMECODE and
  KEYCODE to indicate that the data represents an SMPTE timecode or
  SMPTE keycode, respectively. (1.3.7)

Fixes, minor enhancements, and performance improvements:
* oiiotool improvements:
  * --autotrim   Shrinks pixel data window upon output to trim black 
    edges. (1.3.2)
  * --siappend   Appends subimages of top two images on the stack. (1.2.2)
  * --datadump will print all pixel values of an image (debugging tool) (1.3.6)
  * --flatten turns a "deep" image into a flat one by depth-compositing within
    each pixel (1.3.6).
  * --ociodisplay  applies an OpenColorIO display transformation. (1.3.7)
  * Fix memory leak when processing frame range. (1.2.1/1.3.2)
  * --help now returns a success error code, not a failure. (1.2.1/1.3.2)
  * Fix incorrect help message about --ociolook. (1.2.1/1.3.2)
  * Fix typo in "oiio:Colorspace" attribute name that interfered
    with correct color space conversion in --colorconvert. (1.2.1)
  * Many fixes and improvements to XMP & IPTC metadata handling. (1.2.2)
  * Multithread speed improvement when opening files by reducing how
    much time ImageInput::create and/or ImageOutput::create hold a
    global mutex.
  * oiiotool --origin and --fullpixels, when operating on cropped or
    overscanned image, could sometimes do the wrong thing. (1.2.2/1.3.3)
  * oiiotool --colorconvert did not work properly when the color
    transformation was detected to be a no-op. (1.2.2/1.3.3)
  * oiiotool --fit did not handle padding or offsets properly. (1.2.2/1.3.3)
  * Changed/improved the behavior of --rangecompress/--rangeexpand. (1.3.3)
  * 'oiiotool --pattern checker' was incorrect when nonzero offsets were
    used. (1.2.3/1.3.4)
  * oiiotool --runstats prints the total time/memory on every iteration
    when doing file sequence wildcard iteration. (1.3.4)
  * Eliminated a particular situation that might hit an ASSERT. Instead,
    bubble up a real error message. (1.3.4)
  * oiiotool --resize and --resample fixed for overscan images (1.3.5)  
  * --ociolook applies OCIO looks. (1.3.6)
  * Supports printf-style frame range wildcards ('%04d') in addition to the
    '#' style, and scan for matching frames if no explicit framespec is
    provided. (1.3.6)
* ImageBufAlgo improvements:
  * colorconvert() did not work properly when the color transformation was
    detected to be a no-op.
  * colorconvert(): added a variety that specifies color spaces by name.
  * New ociolook() function applies OCIO "looks." (1.3.6)
  * checker() was incorrect when nonzero offsets were used.
  * checker() now has default values of 0 for the 'offset' parameters
    (and so may be omitted if you want 0 offsets). (1.3.4)
  * unsharp_mask() bug when src and dst were different data formats.
    (1.2.3/1.3.4)
  * Better dealing with cases of IBA functions detecting and issuing
    errors when inputs that must be initialized are not. (1.3.4)
  * We changed the behavior of rangecompress/rangeexpand.  We swear
    the new way is better. (1.3.3)
  * New nonzero_region() returns the shrink-wrapped nonzero pixel data window.
    (1.3.2)
  * resize() has a new variety that lets you specify the filter by name
    (rather than allocating ans passing a Filter2D*).
  * resize() and resample() fixed to more robustly handle overscan
    images. (1.3.5)
  * over()/zover() are no longer restricted to float images. (1.3.7)
* ImageBuf:
  * ImageBuf::write() writes untiled images by default, fixing some
    tricky issues when IB's start thinking they're tiled because of
    interaction with the ImageCache (which makes everything look tiled).
  * ImageBuf::file_format_name() never worked properly, now is fixed (1.3.4)
  * Fixed bug that caused incorrect ImageBuf::copy_pixels() when the two
    IB's had different data types.  (1.3.4/1.2.3)
  * Improved iterator's handling of how overscanned pixels interact
    with wrap modes. (1.3.6)
  * Fixed a bug with black wrap mode not working correctly. (1.3.7/1.2.4)
* ImageCache/TextureSystem:
  * More careful with texture de-duplication -- texture value lookups
    use de-duplication, but metadata lookups (e.g., get_texture_info)
    uses the metadata from the original file.
  * get_image_info/get_texture_info queries for "datawindow" and
    "displaywindow". (1.3.6)
  * The multi-point version of environment() was broken. (1.3.9/1.4.1)
* maketx: --hicomp uses the new range compression/expansion formula.  (1.3.3)
* DPX:
  * support multi-image (often used for stereo frames).
  * Fixed DPX input that didn't recognized offset/cropped images.
    (1.2.2/1.3.3, another fix in 1.3.4)
  * Fixed DPX output crash with cropped images. (1.2.2/1.3.3)
  * Now correctly get and set "smpte:TimeCode" and "smpte:KeyCode"
    metadata.  (1.3.7).
* OpenEXR:
  * Fixed write_scanlines handling of per-channel data types (1.3.6)
  * Several OpenEXR 2.0 deep file fixes: only some compression types
    supported, write_tiles passed wrong parameters, must suppress some
    attribute names. (1.2.3/1.3.6)
  * Now correctly get and set "smpte:TimeCode" and "smpte:KeyCode"
    metadata.  (1.3.7).
* JPEG: fixed that some JPEG files were not being recognized because of
  magic number issues.
* TGA: Correctly unassociate alpha if it's from an unasociated file;
  also, always write unassociated data because so few Targa readers in
  the wild seem to properly handle associated alpha.
* PNG: More correct handling of unassociated alpha.
* TIFF: More correct handling of unassociated alpha.
* PSD: fix handling of associated vs unassociated alpha. (1.2.3)
* maketx fixed to handle inputs that are a mixture of cropped and 
  overscanned. (1.3.5)
* Fix segfault if OCIO is set to a non-existant file. (1.3.6)
* Slight performance increase when writing images to disk (1.3.6)
* Many fixes to make OIIO compile with libc++ (clang's new C++ library,
  and the default on OSX Mavericks). (1.2.3/1.3.6, 1.3.7)
* Fixed several potential buffer overflow errors from unsafe strcpy. (1.3.8)

Build/test system improvements:
* Fix broken tests under Windows. (1.3.2)
* Many fixes for compiler warnings on various platforms: fmath_test.cpp,
  field3dinput.cpp, sysutil.cpp, argparse.cpp, oiiotool.cpp. (1.2.1/1.3.2)
* Fixes problems on little-endian architecture with texture3d.cpp.
  (1.2.1/1.3.2)
* Fix compilation problems on architectures with gcc, but no 'pause' 
  instruction. (1.2.1/1.3.2)
* Fix build search path for correctly finding libopenjpeg 1.5. (1.2.1)
* Work around bug in older MSVC versions wherein Filesystem::open needed
  to explicitly seek to the beginning of a file. (1.2.1/1.3.2)
* Build fixes for FreeBSD. (1.2.1/1.3.2, 1.2.4/1.3.6)
* Fix testsuite/oiiotool on Windows -- windows shell doesn't expand
  wildcards. (1.2.1/1.3.2)
* Fix warnings for new GCC 4.8 compiler.
* Always search for and use the release HDF5 libraries, not the debugging
  ones, even when building debug OIIO (this fixes errors when a system
  does not have the debugging HDF5 libraries installed). (1.2.2/1.3.3)
* Extensive unit tests in the testsuite for the Python bindings.
* Fix compiler error on MIPS platform. (1.2.2/1.3.3)
* Add FIELD3D_HOME description to 'make help' (1.2.2/1.3.3)
* Add cmake variables ILMBASE_CUSTOM_INCLUDE_DIR, ILMBASE_CUSTOM_LIB_DIR,
  OPENEXR_CUSTOM_INCLUDE_DIR, and OPENEXR_CUSTOM_LIB_DIR to make it
  easier to have site-specific hints for these packages' locations. (1.3.4)
* Add BOOST_HOME and OCIO_HOME controls from the top-level Makefile wrapper.
  (1.3.4/1.2.3)
* Accommodate new cmake release that slightly changes the HDF5 library
  naming. (1.3.6)
* Various fixes to make the code compile properly with libc++ (clang's
  rewrite of the C++ standard library). (1.3.6)
* Updated PugiXML (partly to help compilation with libc++) (1.3.6)
* Better support for NOTHREADS (for some legacy systems) (1.3.6)
* Fix to __attribute__(visibility) for gcc < 4.1.2 (1.3.6)
* Improve the CMake build files to fully quote path constructions to make
  it more robust for builds with paths containing spaces. (1.3.7)
* Moved the main CMakeLists.txt file to the top level directory, per usual
  CMake conventions. (1.3.7)

Developer goodies:
* Docs improvement: full documentation of ImageBufAlgo. (1.2.1/1.3.2)
* Merge improved "Tinyformat" that fixes a bug in some old glibc versions
  (1.3.2).
* Now each command line tools explicitly converts to UTF native arguments,
  rather than relying on it happening in ArgParse (which no longer does
  so). (1.3.2)
* Strutil::contains() and icontains(). (1.2.2/1.3.3)
* Updatd "Tinyformat" to the latest release (1.3.6)
* Sysutil::physical_memory() tries to figure out the total physical memory
  on the machine. (1.3.6)
* Strutil::safe_strcpy (1.3.8)
* ParamValue now allows get/set of the hidden 'interp' field. (1.3.9/1.4.1)



Release 1.2.3 (1 Nov 2013)
--------------------------
* 'oiiotool --pattern checker' (and ImageBufAlgo::checker) was
  incorrect when nonzero offsets were used.
* ImageBufAlgo::unsharp_mask() bug when src and dst were different
  data formats.
* PSD: fix handling of associated vs unassociated alpha.
* Fixed bug that caused incorrect ImageBuf::copy_pixels() when the two
  IB's had different data types.
* Add BOOST_HOME and OCIO_HOME controls from the top-level Makefile wrapper.
* Several OpenEXR 2.0 deep file fixes: only some compression types
  supported, write_tiles passed wrong parameters, must suppress some
  attribute names.
* DPX - several fixes to properly handle images with nonzero origins.
* Fixes for recent cmake not finding HDF5 properly.
* Many fixes to make OIIO compile with libc++ (clang's new C++ library,
  and the default on OSX Mavericks).
* Fix OpenEXR write_scanlines handling of per-channel data types.
* Upgraded PugiXML to a more modern version (necessary for clean compile
  with libc++).


Release 1.2.2 (1 Oct 2013)
--------------------------
* New features:
  * New oiiotool --siappend : append subimages of top two images on stack.
  * Utilities: added Strutil::contains() and icontains().
* Fixes:
  * Fixes in handling XMP & IPTC metadata.
  * oiiotool --origin and --fullpixels did not correctly propagate their
    changes to the output images.
  * oiiotool --colorconvert (and the underlying ImageBufAlgo::colorconvert)
    could crash if given a color conversion recognized as a no-op.
  * DPX output could crash when writing crop images.
  * DPX input was not recognizing the proper image offset or originalsize.
  * oiiotool --fit wasn't padding correctly or modifying offsets properly.
* Build fixes:
  * Fix compiler error on MIPS platform.
  * Add FIELD3D_HOME description to 'make help'
  * Always use the HDF5 release libraries (for Field3D), not the debug ones.


Release 1.2.1 (5 Aug 2013)
---------------------------
* oiiotool: Fix memory leak when processing frame range.
* Docs improvement: full documentation of ImageBufAlgo.
* oiiotool --help now returns a success error code, not a failure.
* oiiotool: fix incorrect help message about --ociolook.
* oiiotool: Fix typo in "oiio:Colorspace" attribute name that interfered
  with correct color space conversion in --colorconvert.
* Many fixes for compiler warnings on various platforms: fmath_test.cpp,
  field3dinput.cpp, sysutil.cpp, argparse.cpp, oiiotool.cpp.
* Fixes problems on little-endian architecture with texture3d.cpp.
* Fix compilation problems on architectures with gcc, but no 'pause' 
  instruction.
* Fix build search path for correctly finding libopenjpeg 1.5.
* Work around bug in older MSVC versions wherein Filesystem::open needed
  to explicitly seek to the beginning of a file.
* Build fixes for FreeBSD.
* Fix testsuite/oiiotool on Windows -- windows shell doesn't expand wildcards.


Release 1.2 (8 July 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 fo 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, thought 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, better error printing, and
    now it can compare images with differing data windows or channel
    numbers ("missing" channels or pixels are presumed to be 0 for the
    purposes of comparing).
  * 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.
  * TIFF: Store the orientation flag properly when outputting a TIFF file.
* 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.
* Improvements to make more tests work properly on Windows.

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.


Release 1.1.13 (24 Jun 2013)
----------------------------
* Texture: make sure wrap mode "black" wins over "fill" value when they
  conflict.

Release 1.1.12 (20 Jun 2013)
----------------------------
* Fix oiiotool '#' wildcard, was broken on Windows.
* Fix an overflow problem that plagued 'maketx' when running on input
  larger than 32k x 32k (among other possible failures).

Release 1.1.11 (29 May 2013)
----------------------------
* IFF input: bug in endian swap of 16 bit IFF files.
* oiiotool: fix a minor bug where tiled files were output inappropriately.
  (Had been patched in master some time ago.)
* fmath.h additions: safe_inversesqrt, safe_log, safe_log2, safe_log10,
  safe_logb.  These are versions that clamp their inputs so that they
  can't throw exceptions or return Inf or NaN.
* Fix to not incorrectly print ImageCache stats for certain broken files.

Release 1.1.10 (13 Apr 2013)
----------------------------
* IBA::fillholes() and oiiotool --fillholes can smoothly fill in alpha
  holes with nearby colors. Great for extrapolating the empty areas of
  texture atlas images so that filtered texture lookups pull in a plausible
  color at part edges.
* IBA::clamp and oiiotool --clamp clamp pixel values to a scalar or
  per-channel min and/or max, or clamp alpha to [0,1].
* IBA::rangecompress()/rangeexpand(), and oiiotool --rangecompress /
  --rangeexpand compress the excess >1 values of HDR images to a log
  scale (leaving the <= 1 part linear), and re-expand to the usual
  linear scale.  This is very helpful to reduce ringing artifacts that
  can happen when an HDR image is resized with a good filter with negative
  lobes (such as lanczos3), by doing a range compression, then the resize,
  then range expansion. It's not mathematically correct and loses energy,
  but it often makes a much more pleasing result.
* maketx --hicomp does highlight compression -- automatically doing a
  range compress before each high-quality resize step, and then a
  range expansion and clamp-to-zero (squash negative pixels) after 
  each resize.
* DPX - when writing DPX files, properly set the pixel aspect ratio.

Release 1.1.9 (2 Apr 2013)
--------------------------
* IBA::resize and oiiotool --resize/--fit: Bug fixes to resize filter
  size selection fix artifacts wherein extreme zooms could end up with
  black stripes in places where the filters fell entirely between samples.
* oiiotool --fit: fix subtle bugs with aspect ratio preservation for
  images with differing data and display windows; and allow "filter=..."
  to override the default filter used for fit.
* Resize improvement: fix potential artifacts at the image edges resulting
  from odd clamping behavior.
* Even more frame range wildcard flexibility with oiiotool --frames and
  --framepadding options.
* oiiotool --resize and --fit (and the underlying IBA::resize()) have been
  sped up significantly and are now also multithreaded.

Release 1.1.8 (15 Mar 2013)
---------------------------
* oiiotool --chappend (and ImageBufAlgo::channel_append() underneath) allow
  you to take two files and concatenate their color channels.
* oiiotool --chnames allows you to rename some or all of a file's color
  channels.
* oiiotool can loop over entire frame ranges by specifying wildcard
  filenames such as "foo.#.tif" or "bar.1-10#.exr".
* Cmake: OVERRIDE_SHARED_LIBRARY_SUFFIX allows the shared library suffix
  to be overridden (e.g., if you need to force .so names on OSX rather 
  than the usual default of .dylib).

Release 1.1.7 (21 Feb 2013)
---------------------------
* Back out dangerous change to thread.h that was in 1.1.6, which could
  cause performance problems.
* Compile fix for WIN32 in strutil.cpp
* Compile fix for Windows XP - add implementation of InterlockedExchangeAdd64

Release 1.1.6 (11 Feb 2013)
---------------------------
* Fix bug that could generate NaNs or other bad values near the poles of
  very blurry environment lookups specifically from OpenEXR latlong env maps.
* Fix bug in oiiotool --crop where it could mis-parse the geometric parameter.
* Fix bug in ImageCache::invalidate() where it did not properly delete the
  fingerprint of an invalidated file.
* Cleanup and fixes in the oiiotool command line help messages.
* New function ImageBufAlgo::paste() copies a region from one IB to another.
* oiiotool --fit resizes an image to fit into a given resolution (keeping the
  original aspect ratio and padding with black if needed).
* ImageBufAlgo::channels() and "oiiotool --ch" have been extended to allow
  new channels (specified to be filled with numeric constants) to also be
  named.
* New function ImageBufAlgo::mul() and "oiiotool --cmul" let you multiply
  an image by a scalar constant (or per-channel constant).
* Important maketx bug fix: when creating latlong environment maps as 
  OpenEXR files, it was adding energy near the poles, making low-res
  MIP levels too bright near the poles.
* Fix to "oiiotool --text" and "oiiotool --fill" -- both were
  incorrectly making the base image black rather than drawing overtop of
  the previous image.
* Fix FreeBSD compile when not using TBB.
* New oiiotool --swap exchanges the top two items on the image stack.

Release 1.1.5 (29 Jan 2013)
---------------------------
* Bug fix in ImageBufAlgo::parallel_image utility template -- care when
  not enough work chunks to dole out to all the threads (was previously
  sending work to threads with nonsensical ROI's, now we just stop when
  all the regions have been doled out).
* Additional optional argument to IBA::zover that, when nonzero, will
  treat z=0 pixels as infinitely far away, not super close.  You can turn
  this on from oiiotool with:  oiiotool --zover:zeroisinf=1 ...

Release 1.1.4 (27 Jan 2013)
---------------------------
* 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.
* oiiotool now recognizes --metamatch and --nometamatch arguments which
  cause metadata names matching (or only info NOT matching) the given
  regular expression to be printed with --info.
* oiiotool --zover does z (depth) composites (it's like a regular "over",
  but uses the z depth at each pixel to determine which of the two images
  is the foreground and which is the background).
* ImageBufAlgo::zover() performs z compositing (same as oiiotool --zover).
* ImageBufAlgo::fixNonFinite didn't work properly with 'half' image buffers.
* Performance improvements when reading and writing images.
* Fix error when writing tiled 'float' TIFF images, corrupted output.
  (Could easily happen when using 'maketx' to convert float images into
  TIFF textures.)
* Eliminate warnings when compiling with Clang 3.2.
* New CMake variable "USE_EXTERNAL_TBB" can optionally be set to force use
  of an external TBB library rather than the embedded one.
* Additional testsuite tests (doesn't affect users, but makes bugs easier
  to catch).
* Fix build problem with SHA1.cpp on some platforms.

Release 1.1.3 (9 Jan 2013)
---------------------------
* Build fix: incorrectly named OpenEXR 2.x files.
* Bug fix in oiiotool --croptofull on OSX
* Build fixes for MinGW on Windows.
* maketx --fullpixels option ignores any origin or display window in the
  source image, pretending the pixel data is the entire 0-1 image range
  starting at the origin (useful when the source image is created by an
  application that incorrectly writes it out as if it were a crop window).
* maketx no longer will clobber existing ImageDescription metadata
  when it adds SHA-1 hash or other info as it creates the texture.
* Many additional Exif and IPTC tags are correctly recognized.
* maketx and oiiotool recognize and take advantage of IPTC:ImageHistory
  metadata.

Release 1.1.2 (5 Dec 2012)
--------------------------
* maketx fixes -- was botching creation of textures from source images that
  were crop windows (pixel window smaller than display window).
* Minor bug fix to Timer when repeatedly starting and restopping (Apple only).
* Bug fix in ustring:find_last_not_of.

Release 1.1.1 (16 Nov 2012)
---------------------------
* Altered the ImageInput::read_scanlines, read_tiles, read_native_scanlines,
  read_native_tiles, read_native_deep_scanlines, read_native_deep_tiles,
  and the channel-subset version of ImageSpec::pixel_bytes, so that
  instead of specifying channel subsets as (firstchan, nchans), they are
  specified as [chbegin, chend), to match how spatial extents are done,
  as well as how channel ranges already were specified in ROI and
  ImageBuf.  We hate changing API meanings, but we really think this is
  better and more consistent.  Note that the two common uses of channel
  subsets were firstchan=0,nchans=nchannels (select all channels) and
  firstchan=foo,nchans=1, and we have rigged it so that [chbegin,chend)
  returns the same channels in both of these cases (in the latter case,
  because we retrieve a minimum of 1 channel), so we believe this is
  unlikely to break working code in the vast majority of cases.
* OpenEXR: support reading and writing V2f attributes.
* OIIO::getattribute("extension_list") returns a list of all formats
  supported, and all extensions for each format, in the form:
  "formatA:ext1,ext2,ext3;formatB:ext4,ext5;..."
* The new ImageCache per-file stats that list numbers of tiles read per
  MIPmap level have been reformatted slightly, and now print only for
  files that are actually MIP-mapped.
* New ImageCache::get_pixels() variety that can retrieve a subset of
  channels.
* Substantial speedup of ImageCache::get_pixels, used to be about 50%
  more expensive to call IC::get_pixels compared to a direct call to
  ImageInput::read_image; now is only about 15% more expensive to use
  the cache.



Release 1.1 (9 Nov 2012)
------------------------
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.
* Altered the ImageInput::read_scanlines, read_tiles, read_native_scanlines,
  read_native_tiles, read_native_deep_scanlines, read_native_deep_tiles
  so that instead of specifying channel subsets as (firstchan, nchans),
  they are specified as [chbegin, chend), to match how spatial extents
  are done, as well as how channel ranges already were specified in ROI
  and ImageBuf.  We hate changing API meanings, but we really think this
  is better and more consistent.  Note that the two common uses of channel
  subsets were firstchan=0,nchans=nchannels (select all channels) and
  firstchan=foo,nchans=1, and we have rigged it so that [chbegin,chend)
  returns the same channels in both of these cases (in the latter case,
  because we retrieve a minimum of 1 channel), so we believe this is
  unlikely to break working code in the vast majority of cases.
* 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.)
* New ImageCache::get_pixels() method that can retrieve a subset of
  channels.
* 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.
* OIIO::getattribute("extension_list") returns a list of all formats
  supported, and all extensions for each format, in the form:
  "formatA:ext1,ext2,ext3;formatB:ext4,ext5;..."

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.
  - Substantial speedup of ImageCache::get_pixels, used to be about 50%
    more expensive to call IC::get_pixels compared to a direct call to
    ImageInput::read_image; now is only about 15% more expensive to use
    the cache.
* 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.
* OpenEXR: support reading and writing V2f attributes.
* 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.



Release 1.0.10 (5 Nov 2012)
---------------------------
* ImageCache: 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).
* ImageCache: Detailed per-file stats now track the number of tile reads 
  per MIPmap level.
* ImageCache attribute "unassociatedalpha" (when nonzero) requests that
  IC images not convert unassociated alpha image to associated alpha.
* maketx 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.
* 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.

Release 1.0.9 (4 Sep 2012)
----------------------------
* Improve error messages when trying to open an OpenEXR image that doesn't
  exist or is not a valid OpenEXR file.
* Make the TextureSystem work properly with MIPmapped images whose tile
  size is not a power of 2 (mostly back-ported from master, but with
  additional fixes).

Release 1.0.8 (17 July 2012)
----------------------------
* Fix quantization/truncation bug that sometimes left tiny alpha holes in
  8 bit images (making some alpha value that should be 255, instead 254).
* TextureSystem: fix fill_channels for monochrome+alpha images to properly
  expand to "RRRA."

Release 1.0.7 (8 July 2012)
---------------------------
* Bug fix when reading vector Field3D files.
* Fix input of tiled images with per-channel formats.
* Add testsuite/nonwhole-tiles and testsuite/perchannel.
* Bug fix when reading binary PNM files.

Release 1.0.6 (12 Jun 2012)
---------------------------
* Fix allocation and stride bugs in that could overrun a buffer when
  reading tiled images whose resolution was not a whole number of tiles.
* Fix stride bugs when reading scanline images with differing data types
  per channel.
* Fixes for FreeBSD compilation.

Release 1.0.5 (3 Jun 2012)
--------------------------
* Various fixes for FreeBSD/kFreeBSD systems.
* Various fixes to compile with Clang 3.1 without warnings.
* Fixed some DPX and Cineon bugs related to channel names.
* Fixed some mangled text in the PDF documentation.
* Developer goodie: TypeDesc::equivalent() tests two TypeDesc's for
  equality, but allows 'triples' with differing vector semantics to match.

Release 1.0.4 (2 May 2012)
--------------------------
* DPX fixes for 12 bit DPX and packing methods.
* Cineon fixes: remove buggy 32 and 64 bit output, which wasn't needed;
  fix for 10 bit -> 16 bit promotion.
* bmp fix: wasn't setting oiio:BitsPerSample correctly.
* oiiotool fixes: improved argument help and add man page generation;
  print data format info correctly for non-byte bit depths; better
  inference of output tile size and data format from the inputs (when
  not explicitly requested); --resize n% was broken; print data format
  info correctly for non-byte bit depths.
* iinfo fixes: make --stats print correctly; print data format info 
  correctly for non-byte bit depths.
* Fix roundoff error when converting from float buffers to int image files.
* More precise filter normalization in ImageBufAlgo::resize (and therefore
  oiiotool --resize).

Release 1.0.3 (16 Apr 2012)
---------------------------
* Fix reading bugs in DPX and Cineon.
* iconvert handles the int32 and uint32 cases.
* Bug fix in to_native_rectangle, which could lead to errors in certain
  data format conversions.
* Various Windows build fixes, including fixes for Windows 7.
* Compilation fixes on FreeBSD.

Release 1.0.2 (19 Mar 2012)
----------------------------
* Fixed TARGA reader bug where for 16-bpp, 4-channel images, we weren't
  reading the alpha properly.
* Fix ill-formed default output names for maketx (and in the process,
  add Filesystem::replace_extension utility).
* Threading performance improvement in the texture system as a result of
  wrapping various internal "iequals" calls to pass a static locale
  rather than relying on their default behavior that would use a mutex
  underneath to access a global locale.

Release 1.0.1 (13 Mar 2012, compared to 1.0.0)
----------------------------------------------
Fixes, minor enhancements, and performance improvements:
 * Improvements in anisotropic texture filtering quality.
 * oiiotool --hash prints the SHA-1 hash of each input image.
 * oiiotool: properly print error message and exit when an input file
   cannot be opened.
 * Changed the default behavior of idiff and "oiiotool --diff" to print
   the pixel difference report only for failures (not for successful
   matches), unless in verbose (-v) mode.
Developer goodies:
 * dassert.h: New ASSERTMSG and DASSERTMSG allow even more flexible
   assertion messages with full printf argument generality.
 * Windows compilation fixes.
 * Major testsuite overhaul: All tests are copied and run in the
   build/ARCH/testsuite directory, no longer leaving any clutter in the
   "source" testsuite area.  The testing scripts have been cleaned up
   and greatly simplified.  An individual test can be run using "make
   test TEST=name" (also works with regular expressions).  The usual
   "make test" will exclude tests that are expected to be broken (such
   as tests for portions of the system that were not built because their
   required libraries were not found), but "make testall" will run all
   tests including nominally "broken" ones.


Release 1.0 (25 Feb 2012, compared to 0.10.5)
---------------------------------------------

Major new features and improvements:
 * New ImageInput & ImageOutput methods that can efficiently read/write
   multiple scanlines or tiles at a time.
 * New ImageInput methods that can read a subset of channels from an image.
 * WebP format reader/writer.
 * PSD (Adobe Photoshop) format reader.
 * RLA (Wavefront) format reader/writer.
 * Cineon support is re-enabled after various bug fixes.
 * New utility: oiiotool.  This is still a work in progress, but largely
   subsumes the functionality of iprocess, iinfo, iconvert, idiff.
 * Use OpenColorIO (www.opencolorio.org) for color space conversion, if
   detected at build time and a valid OCIO configuration is found at runtime.
   Color conversion commands have been added to oiiotool and maketx.

API changes:
 * New ImageInput & ImageOutput methods that can efficiently read/write
   multiple scanlines or tiles at a time: read_scanlines, read_tiles,
   write_scanlines, write_tiles.
 * New ImageInput methods that can read a subset of channels from an image.
 * Change the last couple functions that took min/max pixel range
   specifications to conform to our usual [begin,end) convention --
   write_rectangle and to_native_rectangle.
 * exif_encode, exif_decode now available as general utilities (previously
   were private to the JPEG plugin).
 * New ImageOutput::supports() queries: "displaywindow" queries whether the
   file format is able to handle differing display ("full") and pixel data
   windows, "negativeorigin" queries whether data origin or full/display
   origin may be negative.
 * TextureSystem and ImageCache now accept attribute "options", that is a
   comma-separated list of name=value setings (e.g.
   "max_memory_MB=256,max_files=1000").  Also, upon startup, the environment
   variables OPENIMAGEIO_TEXTURE_OPTIONS and OPENIMAGEIO_IMAGECACHE_OPTIONS
   are parsed for these startup values.
 * TextureSystem/ImageCache: add a separate "plugin_searchpath" attribute
   separate from the "searchpath" for images.

Fixes, minor enhancements, and performance improvements:
 * ImageBufAlgo new algorithms: compare, compare_Yee, isConstantChannel,
   fixNonFinite.
 * TextureOpt: add ustring-aware versions of the decode_wrapmode utility.
 * TypeDesc: allow stream << output.
 * iv: raised maximum ImageCache size from 2 GB to 8 GB.
 * PNM: fix bug where file exceptions could go uncaught.
 * Properly create coefficients for Kodak color transform.
 * iprocess: Fix bug calling read.
 * maketx new options: --opaque-detect omits alpha from texture whose input
   images had alpha=1 everywhere; --mipimage option allows custom MIP
   levels to be assembled; --fixnan repairs NaN & Inf values in the inputs.
 * Fixed bugs in sinc and Blackman-Harris filters.
 * ImageCache/TextureSystem -- new reset_stats() method resets all the
   statistics back to zero.
 * TIFF: better handling of unexpected bitsperpixel combinations; support
   the nonstandard use of IEEEFP/16bit as "half"; fix many small bugs 
   related to unusual depth depths and contig/separate conversions.
 * JPEG-2000 plugin rewritten to use OpenJpeg library instead of Jasper.
 * DPX: various bug fixes.
 * RLA plugin overhauled and now has good support for non-8-bit depths.
 * oiiotool improvements: --pop, --dup, --selectmip, --origin,
   --incolorspace, --tocolorspace, --colorconvert.
 * TextureSystem supports textures with "overscan" (including proper
   maketx support for input images with overscan).
 * TS/IC invalidate_all previously cleared all fingerprint info, but now
   only clears fingerprints for individual files that are invalidated
   (this makes for better duplicate detection).

Build system improvements:
 * Support compilation on FreeBSD.
 * Improved custom detection of boost-python on Windows.
 * Easier to compile OIIO without using TBB.

Developer goodies:
 * ArgParse enhancements: make %! indicate a bool that's set to false if
   the option is found, %@ indicates an immediate callback, allow
   callbacks for bool options, option matching ignores characters after
   ':' in the option, wrap lines at word breaks when printing usage help.
 * Generate man pages for the command-line tools.
 * Strutil additions: escape_chars, unescape_chars, word_wrap.
 * Filesystem additions: filename(), extension().
 * Sysutil additions: terminal_columns()
 * Use github.com/OpenImageIO/oiio-images project for test images that are
   too big to fit in testsuite.
 * Fixed bugs in Timer::lap().
 * Aded 'invert' algorithm to fmath.h.
 * Clarify Timer docs and fix Apple-specific bug.
 * testtex improvements: --wrap



Release 0.10.5 (20 Feb 2012)
----------------------------
* Improvements to anisotropic texture filtering: (1) fix for degenerate
  derivatives that could corrupt the filter footpring calculations,
  resulting in an infinitely long major axis; (2) more efficient subpixel
  filtering for very narrow anisotropic footprints when on the highest-res
  MIP level.


Release 0.10.4 (November 20, 2011)
----------------------------------
* Important texture bug fix: Improve robustness of texture lookups with
  very small derivatives.  The previous bug/misunderstanding had the
  result of some filter footprints with very small (but valid)
  derivatives inappropriately using the highest-resolution MIPmap level
  and maximum anisotropy, resulting in terrible performance, alising,
  and in some cases visible seams on the boundary between where this
  happened and where it didn't.  Be aware that the fixed code will make
  some areas of texture look less sharp, but that's only because it was
  aliasing before and using a totally incorrect MIPmap level.


Release 0.10.3 (November 5, 2011)
---------------------------------
* New ImageCache/TextureSystem option: "autoscanline", which, when 
  autotile is turned on, causes the virtual tiles to be the full width
  of the image scanlines, rather than square.  This improves performance
  for some apps.
* Bug fix: PNG files with both associated alpha and gamma correction lost
  precision when converting.
* Bug fix: ICO and Targa did not properly force requested (but
  unsupported) UINT16 output to be UINT8.
* maketx (and Filter classes): fixes to sinc, blackman-harris filters.
* Minor Python binding bug fixes.
* Allow stream << of TypeDesc.
* Fix minor Timer::lap() bug.


Release 0.10.2 (August 6, 2011)
-------------------------------
* Improve the performance of ustring constructor when highly multithread.
* Remove old out-of-date Doxygen html pages.


Release 0.10.1 (August 2, 2011)
-------------------------------
* Fix TextureSystem::get_texture_info(file,"exists") (and the equivalent for
  ImageCache), it was previously incorrectly giving an error if the file 
  didn't exist.
* Fixed an error where we were losing the error message if ImageInput::create
  failed.
* maketx: --hash is deprecated, the SHA-1 hash is always computed; the
  hash takes into account upstream image changes, such as resizing; the
  --filter command line argument only takes the filter name, the width
  is now automatically computed.
* Add static methods to Filter classes allowing queries about the names
  and vital info about all available filters.
* New Filesystem::is_regular() wraps the boost is_regular and catches
  exceptions.
* iv: raise the maximum ImageCache settable in the UI from 2GB to 8GB.
* Bug fixes with per-channel data formats.
* Add Strutil::escape_chars() and unescape_chars() utility functions.
* TextureOpt: add ustring-aware versions of the decode_wrapmode() utility.



Release 0.10 (June 9 2010)
--------------------------

Major new features and improvements:

* TextureSystem: fix longstanding texture quality issues: underestimation
  of anisotropic filter footprint, improved metric for determining when to
  switch to bicubic filtering, better MIP level selection for non-square
  images.
* maketx --filter allows you to specify the filter for resizing and 
  downsizing to generate MIPmap levels (this lets you choose a filter
  that is better than the default "box").
* TextureSystem option "gray_to_rgb", when set to nonzero, promotes 
  grayscale (single channel) texture lookups to RGB (rather than using
  the fill color for missing channel.
* IFF (Maya) support from Mikael Sundell.

API changes:

* TextureSystem has additional API entry points for apps that want to
  retrieve an opaque texture handle and per-thread info and then pass it
  back to texture lookups, saving some name resolution and per-thread
  retrieval time.  (The old routines that do this all automatically still
  work just fine.)
* New ImageBufAlgo utilities: setNumChannels, isConstantColor, isMonochrome,
  computePixelHashSHA1, transform.

Fixes, minor enhancements, and performance improvements:

* ImageCache/TextuerSystem:
  - option "accept_untiled" wasn't properly recognized (0.9.1); new
    attribute "accept_unmipped" (default to 1), when set to zero, will
    treat any un-MIPmapped file as an error (analogous to the existing
    "accept_untiled") (0.9.2);
  - fix deadlock when file handles are exhausted (0.9.3);
    invalidate_all() no longer closes all files unconditionally, only
    the ones actually invalidated;
  - fix longstanding problem where multiple threads could redundantly
    open and read the same file if they need it simultaneously and it
    isn't in cache already;
  - get_pixels issues a single error from a corrupt file, rather than
    reporting error after error on the same file.
* Texture: Fixes to make latlong environment maps more correct for OpenEXR
  files, which have some particular unique conventions. (0.9.1); 
  bug fix to TextureOpt default initializer that could screw up texture
  lookups. (0.9.1)
* maketx fixes: the -oiio command line option also enables hash generation;
  resize properly if any of the dimensions change (previously only did
  if ALL dimensions changed) (0.9.3); --nchannels lets you set the number 
  of output channels.
* Added ImageBufAlgo::transform to allow for 'flip' & 'flop' in iprocess.
  (0.9.1)
* DPX: fix file reading when number of channels not equal to 3 (0.9.3);
  support for endianness specification, fix lots of problems writing metadata.
* BMP: RGB-to-BGR conversion fixed, force UINT8 output; scanline size was
  incorrect when copying to temporary buffers.
* JPEG: reader is more robust to corrupted files and other problems.
* JPEG-2000: support files with more than 8 bits per channel.
* Targa: properly expand 5 bit per channel to full bytes.
* Fixed incorrectly set "ResolutionUnit" and "BitsPerSample" usage in several
  format plugins.
* Improved handling of file formats that allow unassociated alpha.
* iv: display non-Latin filenames properly.
* iconvert --noclobber option ensures that existing files aren't overwritten.
* iinfo: fixes to properly print subimage and mipmap statistics.

For developers / build issues:

* Fix USE_TBB macro on Windows build. (0.9.1)
* Fixes required for Windows compile in conjunction with OSL. (0.9.1)
* Removed some pointless debugging output to the console. (0.9.1)
* Fix subtle bug in convert_type utility function that was causing a slight
  incorrect rounding when converting float to a signed integer type. (0.9.3)
* Fix to compile properly against Boost 1.46. (0.9.3)
* Update pugixml from 0.5 to 1.0.
* Remove boost::test and gtest as dependencies, use our own macros.
* Fixes to allow use of libtiff 4.0.
* make USE_JASPER=0 USE_FIELD3D=0 make it easy to disable Jasper and
  Field3D as dependencies.
* Various fixes to make cleaner compiles with clang.
* ustring: Added find* methods that match those of std::string, expose
  make_unique, is_unique, and from_unique helper functions.
* Add Filesystem::exists and Filesystem::is_directory.



Release 0.9 (Dec 9 2010, updated Feb 23, 2011)
----------------------------------------------
Major new features:

* New format plugin: DPX
* New format plugin: Cineon (currently read only) (r1599,1600,1601,1617)
* New format plugin: Ptex (currently read only) (r1655,1664).
* New format plugin: Field3D (currently read only) (r1659,1666,1669)
* Support for files that are simultaneously multi-image and where each
  subimage may also be mipmapped (these concepts were previously
  comingled).  This mainly effects ImageInput::seek_subimage and
  ImageOutput::open, as well as some minor methods of ImageCache and
  ImageBuf.  (r1655,1656,1664,1671)
* Support for per-channel data formats via the new ImageSpec::channelformats
  vector and interpreting read_foo/write_foo format parameter of UKNOWN
  as a request for the true native format.  (r1674)
* Full support of TextureSystem environment() for lat-long maps.

API changes:

* Single-point texture lookup struct (TextureOpt) and additional
  single-point texture lookup entry points.  (r1679)
* Filter{1D,2D} class now has a destroy() method to match its create(),
  and create() accepts "bspline" and "catrom" as synonyms for the
  existing "b-spline" and "catmull-rom" fileters. (r1542)
* Add methods to ImageSpec to read/write an XML representation of the
  ImageSpec (r1574).
* Finally put all the helper classes (ustring, TypeDesc, etc.) that were
  in the main OpenImageIO namespace, as well as centralized version numbering
  and custom namespace control.
* ParamList now has a method to remove attributes.
* Color handling change: color space now is a metadata string,
  "oiio:ColorSpace", not 'linearity' data member of ImageSpec; remnants of 
  bad 'dither' ideas have been removed; "BitsPerSample" metadata has been
  renamed "oiio:BitsPerSample" and several bugs have been fixed related to
  it in some of the image plugins.
* Moved some ImageBuf methods into functions in imagebufalgo.h.

Fixes, minor enhancements, and performance improvements:

* OpenEXR: Allow read/write with different data formats per channel (r1674).
* SGI: add support for files with any number of channels (r1630).
* PNG: improve PNG write speed by 4x by adjusting compression tradeoffs
  (r1677)
* JPEG: assume sRGB unless EXIF says otherwise (r1693); fix broken JPEG
  4-channel to 3-channel conversion (r1696).
* PNM: monochrome data was output incorrectly in both binary & ascii forms;
  adopt the Netbpm convention for endianness in the 16 bit case; open binary
  image files in binary mode to avoid newline mangling (r1709).
* TIFF: more sensible checkpointing logic greatly reduces header rewriting.
* iinfo: add --stats option (r1618)
* iv: Now can sort the image list by file date, metadata date, name, or
  file path (r1514).
* ImageCache: fixed bug that allowed the max_open_files limit to be
  exceeded (r1657); raise the default IC cache size to 256 MB (r1663);
  automip unmipped files even if they are tiled (r1670); fix bug wherein
  an invalidated and modified file would continue to flush in subsequent
  invalidations, even if the file was not modified again (r1712/0.8.8).
* New ImageBuf algorithm: computePixelStats (r1618)
* Fixes in ImageCache and ImageBuf to allow correct handling of
  3D (volumetric) files. (r1659,1660)
* ImageCache fixed to ensure that multiple threads don't try to concurrently
  open the same file.
* Properly append error messages; ASSERT if the error message buffer
  exceeds 16 MB (which means somebody is failing to call geterror) (1672)
* Fix subtle Strutil::format and ustring::format crasher bugs with long
  strings (r1654 - 0.8.8).
* Print the OIIO version in the ImageCache stats so we don't guess
  when somebody sends us a log file with complaints.
* ImageCache::getattribute can retrieve its interesting internal
  statistics individually by name. (r1721)
* idiff and iv increased their IC cache size. (r1722)
* idiff bug fixes: (1) files with different number of MIPmap levels
  immediately failed, whereas they should have compared their top
  levels, and only fail if the "-a" flag was used; (2) some failure
  modes incorrectly printed a "PASS" message despite actually failing. (r1722)
* Changed the environment variable that contains the plugin search path
  from IMAGEIO_LIBRARY_PATH to OPENIMAGEIO_LIBRARY_PATH. (r1723)
* Bug fix to ImageInput::read_image -- could crash due to an internal
  buffer allocated as the wrong size. (r1724)
* Bug fixes to write_image(), related to subtle stride errors.
* Improved strhash, fewer ustring hash collisions.
* New maketx functionality: --constant-color-detect, --monochrome-detect,
  --prman, --oiio (look in docs for explanation).

For developers / build issues:

* testtex: print memory use (r1522)
* Embedded plugins are now built within the OIIO namespace, if defined (r1559).
* Fixed implementation of TypeDesc construction from a string. (r1562)
* Incorporate PugiXML for XML parsing/writing needs (r1569).
* In-progress socket I/O plugin is in the code base, but not yet fully
  supported.
* Disable python support if boost_python is not found. (r1701)


Release 0.8 (May 26 2010)
-------------------------
Major new features:

* Python bindings for the ImageInput, ImageOutput, ImageSpec, ImageBuf, 
  and ImageCache classes.
* New format plugin: SGI image file
* New format plugin: PNM/PPM/PGM/PBM
* New format plugin: DDS (currently reading only)
* New format plugin: Softimage PIC (currently reading only)

API changes:

* New "linearity" tags include AdobeRGB, Rec709, and KodakLog.
* ColorTransfer helper class can convert among the linearity types, and
  may be optionally passed to convert_image and convert_types.
* Added to fmath.h: sincos, exp2f, log2f
* Renamed ErrHandler::ErrCode enums with EH_ prefix (to fix conflicts
  with some Windows headers).
* ustring now has getstats() and memory() methods.

Fixes, minor enhancements, and performance improvements:

* ImageInput::create() error messages are more helpful.
* Fixed some error messages in FITS output, iconvert.
* maketx: Console flushes in status messages to that a calling process
  will get status messages right away.
* Fix subtle ImageCache bug with invalidate().
* ImageCache/TextureSystem have improved multithreading performance
  when large untiled files are needed simultaneously by many threads.
* TextureSystem: new 'missingcolor' texture option that, when provided,
  can specify a color that will be used for missing textures rather than
  generating errors.  (If not supplied, missing tex is still an error.)
* BMP plugin enhancements.
* TIFF: support 64-bit float pixels, proper random scanline access emulation
  for all appropriate compression types, handle incorrectly set-to-zero
  image_full_width and image_full_height. (r1515 - 0.8.1)
* PNG: properly handle palette images, unassociated alpha, gamma
  correction, endianness for 16-bit files, and has vastly better memory
  consumption due to reading scanlines individually rather than
  buffering the whole image (r1523 - 0.8.1); fix clamping/wrapping
  problem for certain values when alpha > color. (r1605 - 0.8.3)
* iv fixes: fix improper recentering after image reload; fix crash when
  image info window opened without any image files loaded; better status
  window message when image reads fail; iv goes into background properly
  in Windows; "slide show" mode; pixel view display moves if you need to
  look at pixels underneath it; 
* ImageCache bug: previously couldn't designate a cache > 2GB (because of
  integer overflow issues).
* ImageCache::get_image_info and TextureSystem::get_texture_info now respond
  to a new "exists" query that merely tests for existance of the file. (0.8.1)
* ImageCache/TextureSystem fix for a threading logic bug that could potentially
  lead to a deadlock (and definitely led to hitting a DASSERT when compiled
  for DEBUG mode). (0.8.1)
* maketx performance improvements: --noresize is now the default (use
  --resize if you really want power-of-two resizing); much better
  performance because it doesn't use ImageCache unless the image being
  converted is very large; takes advantage of multiple cores by
  automatically multithreading (the number of threads can be controlled
  by the "-t" option, with the default to use the same number of threads
  as hardware cores). (r1546 - 0.8.2)
* Fix potential crash in read_tile for files with tiles so big that they
  would not fit on the stack (heap allocation used instead). (0.8.2)
* OpenEXR: add support for vector metadata attributes. (r1554 - 0.8.2)
* Improve TIFF open error messages. (r1570 - 0.8.3)
* Make ImageCache::get_pixels() and TextureSystem::get_texels() safe for
  crop windows -- fill with zero outside the valid pixel data area. (r1579 - 0.8.3)
* In ImageCache::attribute (and by extension, TS::attribute), only
  invalidate the cache if the attributes actually CHANGED. (r1582 - 0.8.3)
* maketx: --checknan option double checks that no source image pixels
  are NaN or Inf (r1584 - 0.8.3).
* Fixed crash that could result from certain XML strings embedded in TIFF
  headers (uncaught exception). (0.8.5)
* Fixed ImageCache deadlock when using autotile. (r1631 - 0.8.6)
* Fixed a longstanding performance issue with ImageCache automip, wherein
  an unmipped file that is larger than the cache size leads to pathological
  thrashing.  The solution is to automatically raise the cache size to be
  large enough to automip the file without danger of thrashing. (r1657 - 0.8.7)

For developers / build issues:

* EMBEDPLUGINS=1 is now the default.  This means that all the format
  plugins that come with OIIO are compiled into the main library, so
  there's no reason for users to set $IMAGEIO_LIBRARY_PATH unless they
  need custom format plugins not supplied with the main distribution.
* Fix compiler warnings (mostly under Windows): TBB stuff, ustring, windows.h.
* Option to build static libraries (with 'make LINKSTATIC=1').
* Fixes to make clean compilation with gcc-4.4.2.
* Allow custom 'platform' designation in the build.
* Allow custom installation destination ('make INSTALLDIR=...').
* ustring now takes half the memory (by no longer redundantly storing the
  characters on Linux and OS X).  
* Always use TBB (better performance on Windows for atomics). [0.8.2]



Release 0.7 (Nov 26 2009)
--------------------------

Major new features:

* New format plugin: JPEG-2000 (r1050)
* New format plugin: FITS (r1287 et al)
* TextureSystem: two new entries to TextureOptions which allow the texture
  system to return the derivatives in s and t of the texture. (r1308)

API changes:

* Added imagespec() method to ImageCache and TextureSystem that returns a
  reference to the internal ImageSpec of the image.  This is much more
  efficient than get_imagespec, but beware, the pointer is only valid 
  until somebody calls invalidate() on the file.  (r1266)
* TextureOptions: eliminated the 'alpha' field.  Added the dresultds and
  dresultdt fields.
* Extend TypeDesc to include INT64 and UINT64. (r1145)

Fixes, minor enhancements, and performance improvements:

* Make EMBEDPLUGINS=1 the default. (0.7.1)
* Improvements to the Targa plugin, bringing it into compliance with
  TGA 2.0 (r1163, r1297)
* Fixed PNG-related crashes on 64 bit machines. (r1336)
* iv improvements: support for multichannel images and different color
  modes (r1129), support auto use mipmap level based on zooming (r1093),
  correct pixelview for rotated images (r1092), fix off-by-one error
  with some zoom levels (r1089).
* maketx: fixed problem where it was sometimes not setting the output
  data format to match the input data format correctly (r1290), fixed
  problems with writing EXR files with --nomipmap (r1286), fixed cases
  where data window was not the same as display window (i.e. crop or
  overscan).
* ImageCache/TextureSystem: various threading and performance improvements.
  (r1188, r1211, r1288, r1299)
* TS: fixed incorrect "texturetype" results of get_texture_info. (r1314)
* IC/TS: fixed crasher bugs when doing get_pixels of images that had
  non-zero data window origin. (r1313)
* IC/TS: better error messages and recovery from spooky open and read_tile
  failures. (r1321)
* When IC/TS reads and entire (untiled) image, the file is closed afterwards.
  This is especially helpful on Windows where open files are locked to
  writing by other processes. (r1298)
* HUGE speedup of ImageCache::get_image_info (and TS::get_texture_info)
  b replacing strcmp's with ustring == (r1281).
* IC: fixed various subtle logic errors with broken files and
  invalidate/invalidate_all. (r1252, r1279)
* IC/TS: fixed memory leak of per-thread imagecache data and subtle race 
  conditions. (r1057, r1216, r1222, r1238)
* TS: fixed problem where missing or broken textures weren't using the 
  right fill color. (r1268)
* IC: Clamp cache size to a reasonable lower limit (r1256)
* TS: improvements to filter estimation (1134) and bicubic interpolation 
  numerical stability and speed (r1166, r1179, r1333).
* IC: when autotile=0 but automip=1, fixed bug that was wasting HUGE
  amounts of memory by using the wrong resolution for mip levels! (r1147)
* IC: fix an edge case where tiles could leak. (r1044)
* Fixed some hairy static initialization problems with ustring (r1280)
* Use a spin lock rather than block in ustring constructor gives HUGE 
  speedup especially on Windows. (r1167)
* TS: Make everything work for textures whose image origin is not (0,0)
  or whose pixel data window doesn't match the image window (i.e. crop
  windows or overscan).  (r1332)
* IC/TS: Correctly invalidate files afected by recently changed "automip"
  setting. (r1337)
* IC/TS: fix crash that could occur with non-existant textures in combination
  with invalidate_all(). (r1338)
* Make create() error messages more helpful. (0.7.1)

For developers:

* Build more easily when older OpenEXR versions are found. (r1082)
* HTML Doxygen documentation on the public APIs. (r1311, r1312, et al)
* Sysutil::this_program_path finds the full path of the running program.
  (r1304)
* Better compiler-side error checking of printf-like functions (r1302)
* A new site/... area where important users with local build customization 
  needs can check in (reasonably sized) custom makefiles or other helpful
  things. (r1284)
* New ErrorHandler class, currently unused by OIIO itself, but very handy.
  (r1265)
* Fixed lots of compiler warnings.
* Upgraded to a more recent TBB, which fixed some atomic problems. (r1211)
* ustring: make string comparison safe for empty strings. (r1330)
* Include file fixes for gcc 4.4. (r1331)
* Regularize all #include references to Imath and Openexr to 
  <OpenEXR/blah>. (r1335)



Release 0.6 (Jul 20, 2009)
--------------------------

Major new features:

* Everything has been ported to Windows.
* iv: handle older cards or versions of OpenGL, including lack of GLSL,
  non-pow2 textures, etc.  Generally should now be usable (if slightly
  degraded functionality) for most OpenGL 1.x implementations. (r764)
* ImageBuf that only reads images is now automatically backed by
  ImageCache.  In the process, add Iterator and ConstIterator as "safe"
  and efficient ways to visit all the pixels within a region of the
  image, and eliminate the unsafe pixeladdr() method.  Also added
  ImageCache::attribute("forcefloat") to conveniently force all
  ImageCache internal storage to be float.  (r770,771,772,775,803,805)
* iv can now support "big" images, in particular larger than the OpenGL
  texture limit (4k), and also very big images via the use of ImageCache 
  (r912).
* Truevision Targa (TGA) support. (r776,792)

API changes:
* In a variety of places that specified pixel rectangles (including
  ImageCache::get_pixels and TextureSystem::get_texels), specify regions
  as (xbegin,xend,ybegin,yend) rather than (xmin, ymin, xmax, ymax).
  Note that 'end' is, like STL, one past the last pixel. (r771)
* All classes now query error messages using geterror().  Previously some
  used geterror() and others used error_message(). The old error_message
  is deprecated and will be removed in a future release (r957).

Fixes and minor enhancements:

* OpenEXR plugin improvements: don't set "textureformat" attribute
  unless it really is a mip-mapped texture.  Preserve the mipmap
  rounding mode when copying OpenEXR files, by using the
  "openexr:roundingmode" metadata (r801). Properly mark the alpha
  and z channels in the ImageSpec (r885).
* TIFF plugin improvements: handle 2 bpp images, properly name channels
  when reading palette images (r802), no longer uses the
  PREDICTOR_FLOATINGPOINT, since older versions of libtiff can't read
  those files (r752). Properly set the Exif sRGB marker (r888).
* BMP plugin improvements: allows top-down scanlines as well as bottom-up,
  correctly reads 4-, 8- and 24-bit images that have scanlines padded to 
  4-byte boundaries.
* ImageBuf algorithms: crop, add (r892).
* EXPERIMENTAL: 'iprocess' utility that lets you do some simple image
  processing operations (r892).
* ImageCache additional statistics: file open time (r743), alert if
  mip-mapped images are accessed at only their highest-res level (r743).
  Properly emulates random access reads of LZW-compressed files (r920).
* iv: fix problems displaying images whose width was not a multiple of 4
  bytes (r767), when loading small images, the window starts out a
  usable minimum size, iv always raises the window upon first opening,
  fix pixelview of alpha in RGB images (r939).
* iv: Fix off-by-one error that drew the last scanline incorrectly
  sometimes (r1089).  Give feedback when doing a slow repaint (r1089).
* iv improvements: fix skew-like problems with Intel cards, fix non-GLSL
  texture mapping, limit texture size to 4096^2 to keep GL memory use
  reasonable make "Reload" work again after breaking a few patches ago
  (r1090).
* maketx: in the case where the input texture was already float and needed
  no pow2 rounding, we didn't get the tiling or other metadata right (r824)
* ImageCache and TextureSystem do a better job of reporting low-level
  ImageInput errors up the chain (r945).
* ImageCache: new option "accept_untiled", when set to zero, will reject
  untiled images (r979).
* 'maketx --hash' embeds a SHA-1 fingerprint of the source image's
  pixels in the texture file header's "ImageDescription" field.
  ImageCache (and TextureSystem) will recognize these and eliminate
  redundant I/O when it finds multiple files with identical pixels.
  (r741,742)
* iinfo: eliminate --md5 in favor of --hash (computing SHA-1). (r749)
* Fix ImageCache and TextureSystem to have thread-specific error 
  reporting. (r1045)
* TextureSystem: fixed subtle bug in destruction order that could
  double-free per-thread data. (r1057)
* ImageCache: now get_image_info("format") returns teh native data format
  of the file. (r1058)
* maketx: properly handle input files where the data window is not the
  same as the display window or if the image offset was nonzero.  The
  correct semantics are that the DISPLAY window is what maps to [0,1] in
  texture space. (r1059)

For developers:

* Lots of fixes for Windows compilation (r754, r860)
* A build option for whether or not to use TBB for atomics.  (r780)
* New test suite entries: tiff-suite, tiff-depths (r787,788), openexr-suite,
  openexr-multires, openexr-chroma (r789,790,791).
* New unit tests for ImageBuf::zero, ImageBuf::fill, ImageBufAlgo::crop (r891).
* Reorganization of unit tests.
* Improvements to ArgParse internals and interface.
* All the macros that prevent double-inclusion of header files have had
  their names changed from FILENAME_H to OPENIMAGEIO_FILENAME_H so that
  they don't conflict with other package (r967).
* Reorganized test suite hierarchy.
* Optionally allow the entire library to be enclosed in a versioned
  namespace (via 'make NAMESPACE=foo') .
* Upgraded to a more recent version of TBB that seems to have fixed some
  bugs with atomic counters. (r1027)



Release 0.5 (31 May 2009)
-------------------------

Features:

* New image format plugins: zfile (r529), ICO (r579,585,588,619,637),
  BMP (reads only) (r580,584,614,625)
* Support for multiple subimages in iinfo (r607), iconvert, idiff (r631),
* ImageCache and TextureSystem: better stats (r528, r717), bug fixes for
  large untiled images (r558,561), anisotropic improvements, stats
  improvements, thread safety improvements (r566),
  invalidate/invalidate_all (r591), better error reporting (r606),
  thread safety fixes (r650), fix problem when filter size was precisely
  at a mipmap level it blurred to higher level (r687), avoid problems
  when blur > 1 and there is no 1x1 mip level (r687).
* maketx: --shadow (r530), --nomipmap (r531), big speedups (r699).
* idiff: add RMS error and PSNR (r622).
* OpenEXR plugin: support "openexr:lineOrder" attribute so
  random-tile-order files may be written (r569).
* API: better handling of huge images that could have sizes > 32 bits (r575)

Fixes and minor enhancements:

* iinfo: fix - lack of help message when no files specified (r513).
* maketx: make -u work properly (r517), wasn't honoring --separate (r532).
* iconvert: add --separate and --contig (r535).
* TIFF plugin: work around error in old versions of libtiff for IPTC
  packets (r674).
* JPEG plugin: if linearity is sRGB, set Exif:ColorSpace correctly (r536)
* iv: more robust to certain OpenGL versions (r550), support for OpenGL
  versions that don't support non-pow2 textures (r563), correct texture
  mapping when GL_NV_texture_rectangle is the best texture mapping
  extension we can find (r572).
* idiff: refactored to use ImageBuf internally (r541)

For developers:

* Switch to CMake for builds.
* Build enhancements: 'make USE_OPENGL=0' (r512), better handling of
  certain system OpenGL headers (r512), more robust with Qt location
  (r542), handle older Boost 1.35 (r574).
* Tests: test_libOpenImageIO (r581), ico (r621), 
* More work towards clean windows compilation (r659,672).



Release 0.4 (15 Mar 2009 - not formally released)
-------------------------------------------------
(compared to the 'initial' developer release of 1 Sep 2008)

Features:

* Lots of work on docs.
* API changes: 
    - Replaced ParamBaseType/ParamType with TypeDesc.  
    - ImageSpec: add full_{x,y,z} fields.
    - Changed ImageInput/ImageOutput create(), open(), and suports() to
      take std::string instead of char* (r297)
    - Added ImageOutput::copy_image (r428)
    - TypeDesc - distinguish COLOR from NOXFORM. (r466)
    - ImageInput:open(name,newspec,config). (r482)
* igrep utility searches metadata of images (r447,455,499)
* iconvert: add --caption, --keyword, --clear-keywords, --adjust-time
  --attrib, --inplace (r484,488,491), --compression (r354), --quality
  (r362).
* iv: put into background after launch unless -F arg (r240),
  alt-leftmouse zooms, handle sRGB correctly, GAMMA env variable, full
  HDR for half and float (r243), honor full/display window versus data
  window (r300), better view re-centering behavior (r355), fix
  orientation bugs (r363,380,381).
* TextureSystem: single point texture lookups (r247), have all routines
  return a bool giving error status, rename gettextureinfo ->
  get_texture_info, add get_imagespec, get_texels, geterror (r252,265),
  replace hard-coded get/set routines with generic
  attribute/getattribute (r321), accept non-tiled and non-mipped
  textures (r317,319,388,389,390), separate the image cache into a
  separate ImageCache class that may be used independently of
  TextureSystem (r326,327,393), better statistics including per-file
  stats (r333,360,375,429), invalidate method (r460).
* TIFF plugin: read/write EXIF, IPTC IIM, and IPTC XPM/XML data
  (r406,407,456,458)
* JPEG plugin: read/write IPTC IIM, XMP, and GPS metadata
  (r408,411,458,461), implement ImageOutput::copy_data() can copy images
  without altering pixel values (r483).

Fixes and minor enhancements:

* ImageBuf: add option to read() that allows data format conversion (r244),
  add oriented{x,y} and oriented_full_{width,height} methods (r296).
* TextureSystem: fix bicubic filetering (r309), big memory savings by
  not having libtiff use memory mapping (r332), lots of performance
  tuning (r351), anisotropic texture improvements (r364), bug fixes for
  search paths (r459).
* iinfo: print color space and file format info (r241), better printing
  of matrix metadata (r365), new options -f, -m (r501).
* idiff: bug fix - not producing difference image (r402)
* maketx: deduce default file format from extension (r275).
* All format plugins: better error detection in open() for senseless
  resolutions (r294,295)
* OpenEXR plugin: handle float as well as half data, fixes when image
  origin is not (0,0) (r291), fix leak of exr writer (r292), conform to
  common conventions for camera matrix naming (r367), regularize
  capitalization of metadata (r412)
* TIFF plugin: bug fix for combination of tile + separate (r304), fixes
  to retrieval of matrix tags (r366)
* HDR plugin: emulate random access of scanlines (r387), better error
  reporting (r451).
* JPEG plugin: respect "CompressionQuality" (r361), emulate random
  access of scanlines (r387), properly read & write JPEG_COM marker for
  comments (r403), assume sRGB unless the metadata say otherwise (r414).

For developers:

* Preliminary work on Windows port (r398,399)
* Include all the needed .h files in the dist area (r251)
* Handle older gcc (r273), older boost (r301,431), older OpenEXR
  (r301), older libtiff (r432).
* 'make EMBEDPLUGINS=1' compiles the bundled plugins right into main
  library (r302).
* Put header files in dist/ARCH/include/OpenImageIO (r303), rename
  src/libimageio -> src/libOpenImageIO (r382).



Initial developer release 0.1 (9/1/08):
---------------------------------------

* ImageInput, ImageOutput, TextureSystem APIs pretty mature
* Plugins: TIFF, JPEG/JFIF, OpenEXR, PNG, HDR/rgbe
* iv - basic display, multiple images, menus, status bar, info window,
  basic prefs window, pixel view tool, zoom, pan, open, open recent,
  close, save as, view subimages, view channels, gamma, exposure,
  fit window to image, fit image to window, full screen.
* iconvert
* idiff
* maketx
* API docs for ImageInput, ImageOutput, writing plugins
* Linux and OSX


