Hi Larry, What I find amazing about OIIO is its depth. Encompassing so many complimentary - yet distinctly separate - disciplines, both in 2D and 3D image processing. I can only surmise the extent of which your development efforts are propelled by a critical user base which you’ve nurtured over many, many years. Congratulations for reaching that critical mass, and I expect great things from both you and your users moving forward.
Thank you, Chris Spence Digital Devoid, Inc. 7300 Biscayne Blvd, Suite 405 Miami, FL 33138 Tel: 305 757 1330 ch...@digitaldevoid.com www.digitaldevoid.com > On Sep 1, 2022, at 1:15 PM, Larry Gritz <l...@larrygritz.com> wrote: > > It's definitely an "et al" project, all those patches aren't mine. But since > you mention it, it's not as et al as it should be. There was a time in the > past that there was a steadier rate of contributions from many people, > including of large features, but over recent years, we seem to have lapsed > into lots of little outside contributions but most of the features and big > bug fixes by me. > > I actually view this as profoundly unhealthy, and a risk that should not be > tolerated for a project so widely depended upon. > > I think it comes from a benign place -- the project is useful, mature, > everything seems solid, it looks like it's under control, so people just > assume that it doesn't need their ongoing help or additional work. But as I > like to say, a project like this is like a swan that from the shore, looks > like it just glides along effortlessly, but below the water it's expending a > tremendous amount of energy as the little feet peddle wildly to keep it > afloat and moving. > > Addressing this and getting the project to a healthier place where less of > its progress depends specifically on my direct labor is a major priority for > me over the next year. > > -- lg > > >> On Sep 1, 2022, at 5:03 AM, Chris Spence <ch...@digitaldevoid.com >> <mailto:ch...@digitaldevoid.com>> wrote: >> >> Hi Larry, >> >> Wow, what dedication. Is this by singular Larry Gritz, or is it noe L. Gritz >> et al? >> >> I’m really impressed. I’m not using OIIO, but have no doubt I’ll have a need >> for it down the road. >> >> Thank you, >> >> >> Chris Spence >> Digital Devoid, Inc. >> 7300 Biscayne Blvd, Suite 405 >> Miami, FL 33138 >> >> Tel: 305 757 1330 >> >> ch...@digitaldevoid.com <mailto:ch...@digitaldevoid.com> >> www.digitaldevoid.com >> >>> On Sep 1, 2022, at 2:16 AM, Larry Gritz <l...@larrygritz.com> wrote: >>> >>> We have tagged "v2.4.3.0-beta" as the beta release of the 2.4 series of >>> OpenImageIO. This has been used in production throughout its development, >>> so hopefully the beta period will be brief and uneventful. The plan is to >>> tag a release candidate on September 8 and a full release on September 15 >>> (assuming no critical problems are found). At that point, 2.4 will be the >>> officially supported release series, with monthly (or as necessary) patch >>> releases containing fixes and new minor non-breaking features. >>> >>> Note that the transition to 2.4 is NOT ABI- or link-compatible with 2.3 >>> releases -- you are expected to recompile applications against 2.4, not >>> merely relink. We think that it should be fully backward-compatible with >>> the 2.3 API, so you should not have to change the source code of any calls >>> to OIIO public API calls while recompiling for 2.4. >>> >>> We will do everything we can to ensure that no ABI or link >>> incompatibilities will be introduced during the beta period, but it's >>> possible if a critical problem is discovered at the last minute that is >>> impossible to fix adequately without an incompatibility (though we don't >>> anticipate that happening). Once we declare a release candidate, from that >>> point forward, we guarantee no ABI or link incompatible changes for the >>> remainder of the 2.4 family of releases. >>> >>> Here is the full list of improvements of 2.4, versus the first 2.3 releases: >>> >>> >>> Release 2.4 (15 Sept 2022?) -- compared to 2.3 >>> ---------------------------------------------- >>> New minimum dependencies and compatibility changes: >>> * OpenEXR minimum is now 2.3 (raised from 2.0). #3109 (2.4.0) >>> * Field3D support has been removed entirely. The Field3D library appears to >>> be >>> no longer maintained, and is incompatible with modern versions of >>> OpenEXR/Imath. We believe that all prior uses of Field3D use via OIIO have >>> been migrated to OpenVDB. #3151 (2.4.0) >>> >>> New major features and public API changes: >>> * Imath header and class hiding: >>> - Header includes have been shuffled around so that Imath headers are not >>> included from OIIO headers where they are not needed, and some OIIO >>> headers that need Imath types only for few function parameters now guard >>> those functions with `#if` so that Imath-taking functions are not >>> visible unless the calling app has previously had an `#include` of >>> Imath. If your app uses Imath types but did not include the right Imath >>> headers (relying on the accidental fact of other OIIO headers >>> transitively including them), you may need to adjust your includes. >>> #3301 #3332 (2.4.0.2) #3406 #3474 (2.4.2) >>> - New `V3fParam`, `M33fParam`, and `M44Param` (defined in vecparam.h) are >>> used just for parameter passing in public APIs, instead of Imath::V3f, >>> M33f, or M44f, in order to more fully hide Imath types from our public >>> interfaces. These are only parameter-passing classes, and are not useful >>> as vector or matrix classes in their own right. But they seamlessly cast >>> to and from other vector- and matrix-like classes. #3330 (2.4.1.0) >>> - `OPENIMAGEIO_IMATH_DEPENDENCY_VISIBILITY` is a new CMake cache variable >>> at OIIO build time that controls whether the Imath library dependencies >>> will be declared as PUBLIC (default) or PRIVATE target dependencies of >>> libOpenImageIO and libOpenImageIO_Util. #3322 (4.2.0.2) #3339 (4.2.0.3) >>> - For *downstream projects* that consume OIIO's exported cmake config >>> files, setting CMake variable `OPENIMAGEIO_CONFIG_DO_NOT_FIND_IMATH` to >>> ON will skip the find_depencency() calls for Imath and OpenEXR. To >>> clarify, this is not a variable that has any effect when building OIIO, >>> it's something set in the downstream project itself. #3322 (4.2.0.2) >>> * The dithering that happens when saving high bit depth image data to low >>> bit >>> depth formats has been improved in several ways. It now applies when writing >>>> 8 bit data to <= 8 bit files, not just when the source is float or half. >>> The dither pattern is now based on blue noise, and this dramatically >>> improves the visual appearance. #3141 (2.4.0/2.3.10) >>> * TextureSystem now supports stochastic sampling. If the new TextureOpt >>> field >>> `rnd` (which now defaults to -1.0) is set to a value >= 0, the filtered >>> texture lookup can use stochastic sampling to save work. The shading system >>> attribute "stochastic" is set to the stochastic strategy: 0 = no stochastic >>> sampling; 1 = for trilinear or anisotropic MIP modes, choose one MIP level >>> stochastically instead of blending between two levels; 2 = for anisotropic >>> mode, use just one anisotropic sample, chosen across the filter axis. (This >>> is a bit field, so 3 combines both strategies.) We measure this speeding up >>> texture lookups by 25-40%, though with more visual noise (which should be >>> resolved cleanly by a renderer that uses many samples per pixel). This >>> should only used for texture lookups where many samples per pixel will be >>> combined, such as for surface or light shading. It should not be used for >>> texture lookups that must return a single correct value (such as for >>> displacement, when each grid position is sampled only once). Even when the >>> "stochastic" attribute is nonzero, any individual texture call may be made >>> non-stochastic by setting TextureOpt.rnd to a negative value. #3127 >>> (2.4.0/2.3.10) #3457 (2.4.2) >>> * maketx/make_texture() now supports options to store Gaussian forward and >>> inverse transform lookup tables in image metadata (must be OpenEXR textures >>> for this to work) to aid writing shaders that use histogram-preserving >>> blending of texture tiling. This is controlled by new maketx arguments >>> `--cdf`, `--cdfsigma`, `--sdfbits`, or for `IBA::make_texture()` by using >>> hints `maketx:cdf`, `maketx:cdfsigma`, and `maketx:cdfbits`. #3159 #3206 >>> (2.4.0/2.3.10) >>> * oiiotool new commands and features: >>> - Control flow via `--if`, `--else`, `--endif`, `--while`, `--endwhile`, >>> `--for`, `--endfor` let you prototypes conditional execution and loops >>> in the command sequence. #3242 (2.4.0) >>> - `--set` can set variables and their values can be retrieved in >>> expressions. #3242 (2.4.0) >>> - Expressions now support: numerical comparisons via `<`, `>`, `<=`, `>=`, >>> `==`, `!=`, `<=>`; logical operators `&&`, `||`, `!`, `not()`; string >>> comparison functions `eq(a,b)` and `neq()`. #3242 #3243 (2.4.0) >>> - `--oiioattrib` can set "global" OIIO control attributes for an oiiotool >>> run (equivalent of calling `OIIO::attribute()`). #3171 (2.4.0/2.3.10) >>> - `--repremult` exposes the previously existing `IBA::repremult()`. The >>> guidance here is that `--premult` should be used for one-time conversion >>> of "unassociated alpha/unpremultiplied color" to >>> associated/premultiplied, but when you are starting with a premultiplied >>> image and have a sequence of unpremultiply, doing some adjustment in >>> unpremultiplied space, then re-premultiplying, it's `--repremult` you >>> want as the last step, because it preserves alpha = 0, color > 0 data >>> without crushing it to black. #3192 (2.4.0/2.3.10) >>> - `--saturate` can adjust saturation level of a color image. #3190 >>> (2.4.0/2.3.10) >>> - `--maxchan` and `--minchan` turn an N-channel image into a 1-channel >>> images that for each pixel, contains the maximum value in any channel of >>> the original for that pixel. #3198 (2.4.0/2.3.10) >>> - `--point` lets you color one or more pixels in an image (analogous to >>> IBA::render_point). #3256 (2.4.0) >>> - `--warp` now takes an optional modifier `:wrap=...` that lets you set >>> which wrap mode to use when sampling past the edge of the source image. >>> #3341 (2.4.0.3) >>> - New `--st_warp` performs warping of an image where a second image gives >>> the (s,t) coordinates to look up from at every pixel. #3379 >>> (2.4.2/2.3.14) >>> - Many attribute actions now take optional modifier `:subimages=` that >>> instructs oiiotool to apply to a particular subset of subimges in >>> multi-subimage files (such as multi-part exr). The commands so enabled >>> include `--attrib`, `--sattrib`, `--eraseattrib`, `--caption`, >>> `--orientation`, `--clear-keywords`, `--iscolorspace`. The default, if >>> subimages are not specified, is to only change the attributes of the >>> first subimage, unless `-a` is used, in which case the default is to >>> change the attributes of all subimages. #3384 (2.4.2) >>> * ImageSpec : >>> - New constructors to accept a string for the data type. #3245 >>> (2.4.0/2.3.12) >>> * ImageBuf/ImageBufAlgo : >>> - `IBA::saturate()` can adjust saturation level of a color image. #3190 >>> (2.4.0/2.3.10) >>> - `IBA::maxchan()` and `minchan()` turn an N-channel image into a >>> 1-channel images that for each pixel, contains the maximum value in any >>> channel of the original for that pixel. #3198 (2.4.0/2.3.10) >>> - New `IBA::st_warp()` performs warping of an image where a second image >>> gives the (s,t) coordinates to look up from at every pixel. #3379 >>> (2.4.2/2.3.14) >>> - `IBA::bluenoise_image()` returns a reference to a periodic blue noise >>> image. #3141 #3254 (2.4.0/2.3.10) >>> * Python bindings: >>> - New ImageBuf constructor and reset() from a NumPy array only -- it >>> deduces the resolution, channels, and data type from the array >>> dimensions and type. #3246 (2.4.0/2.3.12) >>> - ROI now has a working `copy()` method. #3253 (2.4.0/2.3.12) >>> - ImageSpec and ParamValueList now support `'key' in spec`, `del >>> spec['key']`, and `spec.get('key', defaultval)` to more fully emulate >>> Python `dict` syntax for manipulating metadata. #3252 (2.3.12/2.4.0) >>> - Support uint8 array attributes in and out. This enables the proper >>> Python access to "ICCProfile" metadata. #3378 (2.4.1.0/2.3.14) >>> - New `ImageSpec.get_bytes_attribute()` method is for string attributes, >>> but in Python3, skips decoding the underlying C string as UTF-8 and >>> returns a `bytes` object containing the raw byte string. #3396 (2.4.2) >>> - Fixes for Python 3.8+ to ensure that it can find the OpenImageIO module >>> as long as it's somewhere in the PATH. This behavior can be disabled by >>> setting environment variable `OIIO_LOAD_DLLS_FROM_PATH=0`. #3470 >>> (2.4.0/2.3.18) >>> * New global OIIO attributes: >>> - `"try_all_readers"` can be set to 0 if you want to override the default >>> behavior and specifically NOT try any format readers that don't match >>> the file extension of an input image (usually, it will try that one >>> first, but it if fails to open the file, all known file readers will be >>> tried in case the file is just misnamed, but sometimes you don't want it >>> to do that). #3172 (2.4.0/2.3.10) >>> - `"use_tbb"` if nonzero, and if OIIO was built with TBB enabled and >>> found, then will use the TBB thread pool instead of the OIIO internal >>> thread pool. #3473 (2.4.2.2) >>> - `"version"` (read only) now retrieves the version string. #3534 >>> (2.3.19.0/2.4.2.2) >>> * Full IOProxy support has been added to TIFF #3075 (2.4.0/2.3.8), JPEG, GIF >>> #3181 #3182 (2.4.0/2.3.10), DDS #3217, PNM #3219, PSD #3220, Targa #3221, >>> WebP #3224, BMP #3223, JPEG-2000 #3226 (2.4.0). >>> * Convention change: Image readers who wish to convey that the color space >>> of >>> an input image is a simple gamma-corrected space will now call the color >>> space "GammaX.Y" (previously we sometimes used this, but sometimes called it >>> "GammaCorrectedX.Y"). #3202 (2.4.0) >>> * `oiioversion.h` now defines symbols `OIIO_USING_IMATH_VERSION_MAJOR` and >>> `OIIO_USING_IMATH_VERSION_MINOR` that reveal which Imath version was used >>> internally to OIIO when it was build (which may be different than the >>> version found when the downstream app is being compiled). #3305 (2.4.0.1) >>> * Most of the major APIs (including ImageInput, ImageOutput, and ImageBuf) >>> that took a std::string or string_view to indicate a filename (assumed to >>> support UTF-8 encoding of Unicode filenames) now have additional versions >>> that directly take a `std::wstring`, thus supporting UTF-16 Unicode >>> filenames as "wide strings". #3312 #3318 (2.4.0.1) >>> * The ColorConfig API adds new calls `getDisplayViewColorSpaceName()` and >>> `getDisplayViewLooks()` that expose the underlying OpenColorIO >>> functionality. #3319 (2.4.0.2) >>> * Many long-deprecated functions in imageio.h and imagbufalgo.h are now >>> marked as OIIO_DEPRECATED, and therefore may start to generate warnings >>> if used by downstream software. #3328 (2.4.1.0) >>> >>> Performance improvements: >>> * Raise the default ImageCache default tile cache from 256MB to 1GB. This >>> should improve performance for some operations involving large images or >>> images with many channels. #3180 (2.4.0/2.3.10) >>> * Performance of JPEG-2000 I/O is improved by 2-3x due to multithreading, >>> but only if you are using a sufficiently new version of OpenJPEG (2.2 >>> for encoding, 2.4 for decoding). #2225 (2.3.11/2.4.0) >>> * Dramatically speed up (50-100x) the implementation of Strutil iequals, >>> iless, starts_with, istarts_with, ends_with, iends_with. This in turn speeds >>> up ParamValueList find/get related methods, ImageSpec find/get methods, and >>> TS::get_texture_info. #3388 (2.4.1.1) >>> * Renderer users of the TextureSystem might see up to a ~40% speedup if >>> using the new stochastic sampling features. #3127 #3457 >>> * Speed up reading of uncompressed DDS images by about 3x. #3463 (2.4.2.0) >>> >>> Fixes and feature enhancements: >>> * ImageSpec: >>> - Implemented deserialization of extra_attribs from XML. #3066 >>> (2.4.0/2.3.8) >>> - Allow `getattribute("format")` to retrieve the name of the pixel data >>> type. #3247 (2.4.0) >>> * ImageInput / ImageOutput: >>> - Protected methods that make it easier to implement support for IOProxy >>> in image readers and writers. #3231 (2.4.0) >>> - Fix crash when ioproxy is passed to a plugin that doesn't support it. >>> #3453 (2.4.2) >>> * ImageBuf / ImageBufAlgo: >>> - Fix ImageBuf::read bug for images of mixed per-channel data types. #3088 >>> (2.4.0/2.3.8) >>> - `IBA::noise()` now takes "blue" as a noise name. Also, "white" is now >>> the preferred name for what used to be "uniform" (which still works as a >>> synonym). #3141 (2.4.0/2.3.10) >>> - Refactor ImageBuf::Iterator, ConstIterator templates, reduces compile >>> time substantially. #3195 (2.4.0) >>> - IBA functions taking a `cspan<>` now more flexibly can be passed >>> an init list like `{ 0.2f, 0.4f, 0.5f }` instead of needing to wrap it >>> in a `cspan<float>()` constructor. #3257 (2.3.12/2.4.0) >>> - `make_texture()`: ensure that "maketx:ignore_unassoc" is honored. >>> #3269 (2.4.0.1/2.3.12) >>> - `IBA::computePixelStats()` improved precision. #3353 (2.4.1.0/2.3.14) >>> - `IBA::isConstantColor()` is faster -- now if one thread finds its >>> portion not constant, it can signal the other threads to stop >>> immediately instead of completing their regions. #3383 (2.4.1.1) >>> - A new flavor of `IBA::compare()` allows relative as well as absolute >>> error thresholds. #3508 (2.3.19.0/2.4.2.2) >>> * ImageCache / TextureSystem / maketx: >>> - When textures are created with the "monochrome_detect" feature enabled, >>> which turns RGB textures where all channels are always equal into true >>> single channel greyscale, the single channel that results is now >>> correctly named "Y" instead of leaving it as "R" (it's not red, it's >>> luminance). #3205 (2.4.0/2.3.10) >>> - Enhance safety/correctness for untiled images that exceed 2GB size >>> (there was an integer overflow problem in computing offsets within >>> tiles). #3232 (2.3.11/2.4.0) >>> - Improve error propagation from ImageCache to higher levels, especially >>> for tile-reading errors encountered during ImageBuf iterator use, and >>> ImageCache errors encountered when using the TextureSystem. #3233 >>> (2.4.0) >>> - Support an additional UDIM pattern `<UVTILE>`, which is specified by >>> MaterialX. #3280 #3285 (2.3.12/2.4.0.1) >>> - Add support for UDIM pattern `<uvtile>` (used by Clarisse & V-Ray). >>> #3358 >>> (2.4.1.0/2.3.14) >>> - The `maketx --handed` option, or `oiiotool -attrib -otex:handed=...`, or >>> adding "handed" metadata to the configuration ImageSpec being passed to >>> `IBA::make_texture()` is now supported for communicating the handedness >>> of a vector displacement or normal map. #3331 (2.4.0.2) >>> - Speed up UDIM lookups by eliminating internal mutex. #3417 (2.4.0) >>> - TextureSystem: Fix typo that prevented "max_tile_channels" attribute >>> from >>> being set or retrieved. (2.4.2/2.3.17) >>> * oiiotool: >>> - `--ch` now has virtually no expense if the arguments require no change >>> to the channel order or naming (previously, it would always incur an >>> image allocation and copy even if no real work needed to be done). #3068 >>> (2.4.0/2.3.8) >>> - `--ch` now warns if you specify a channel name that was not present >>> in the input image. #3290 (2.4.0.1) >>> - `--runstats` timing report has been improved and now more accurately >>> attributes time to each operation. In particular, input I/O is now >>> credited to "-i" rather than being incorrectly attributed to the other >>> ops that happen to trigger I/O of previously mentioned files. #3073 >>> (2.4.0/2.3.8) >>> - Allow quotes in command modifiers. #3112 (2.4.0/2.3.9) >>> - Fix `--dumpdata` getting the formatting of floating point values wrong. >>> #3131 (2.4.0/2.3.9) >>> - `--dumpdata:C=name` causes the dumped image data to be formatted with >>> the syntax of a C array. #3136 (2.4.0/2.3.9) >>> - `--noise` now takes "blue" as an additional noise type. #3141 >>> (2.4.0/2.3.10) >>> - `-d` now accepts "uint1", "uint2", "uint4", and "uint6" for formats that >>> support such low bit depths (TIFF). #3141 (2.4.0/2.3.10) >>> - `--invert` fixed to avoid losing the alpha channel values. #3191 >>> (2.4.0/2.3.10) >>> - Fix bug when autocropping output images when the entire pixel data >>> window is in the negative coordinate region. #3164 (2.4.0/2.3.10) >>> - Improved detection of file reading failures. #3165 (2.4.0/2.3.10) >>> - All commands that do filtering (--rotate, --warp, --reize, --fit, and >>> --pixelaspect) now accept optional modifier `:highlightcomp=1` to enable >>> "highlight compensation" to avoid ringing artifacts in HDR images with >>> very high-contrast regions. #3239 (2.4.0) >>> - `--pattern checker` behavior has changed slightly: if the optional >>> modifier `:width=` is specified but `:height=` is not, the height will >>> be equal to the width. #3255 (2.4.0) >>> - `--pixelaspect` fixes setting of the "PixelAspectRatio", "XResolution", >>> and "YResolution" metadata, they were not set properly before. #3340 >>> (2.4.0.3) >>> - Fix bug that prevented metadata from being able to print as XML. #3499 >>> (2.4.2.2) >>> - `i:ch=...` fixes crashes, and also improves the warning message in cases >>> where the requested channels don't exist in the source image. #3513 >>> (2.4.2.2) >>> * Python bindings: >>> - Subtle/asymptomatic bugs fixed in `ImageBufAlgo.color_range_check()` and >>> `histogram()` due to incorrect release of the GIL. #3074 (2.4.0) >>> - Bug fix for `ImageBufAlgo.clamp()`: when just a float was passed for the >>> min or max, it only clamped the first channel instead of all channels. >>> #3265 (2.3.12/2.4.0) >>> * idiff: >>> - `--allowfailures` allows that number of failed pixels of any magnitude. >>> #3455 (2.4.2) >>> - `--failrelative` and `--warnrelative` allows the failure and warning >>> threshold to use a symmetric mean relative error (rather than the >>> absolute error implied by the existing `--fail` and `--warn` arguments). >>> #3508 (2.3.19.0, 2.4.2.2) >>> * BMP: >>> - IOProxy support. #3223 (2.4.0) >>> - Support for additional (not exactly fully documented) varieties used by >>> some Adobe apps. #3375 (2.4.1.0/2.3.14) >>> - Better detection of corrupted files with nonsensical image dimensions or >>> total size. #3434 (2.4.2/2.3.17/2.2.21) >>> - Protect against corrupted files that have palette indices out of bound. >>> #3435 (2.4.2/2.3.17/2.2.21) >>> * DDS: >>> - Don't set "texturetype" metadata, it should always have been only >>> "textureformat". Also, add unit testing of DDS to the testsuite. #3200 >>> (2.4.0/2.3.10) >>> - IOProxy support. #3217 (2.4.0) >>> - Add support for BC4-BC7 compression methods. #3459 (2.4.2) >>> - Speed up reading of uncompressed DDS images (by about 3x). #3463 >>> - Better handling of cube maps with MIPmap levels. #3467 (2.4.0) >>> - For 2-channel DDS files, label them as Y,A if the flags indicate >>> luminance and/or alpha, otherwise label them as R,G. #3530 (2.4.2.2) >>> - Do not set "oiio:BitsPerSample" for cases where the dds.fmt.bpp field is >>> not assumed to be valid. MS docs say it's valid only if the flags field >>> indicates RGB, LUMINANCE, or YUV types. #3530 (2.4.2.2) >>> * FFMpeg >>> - Now uses case-insensitive tests on file extensions, so does not get >>> confused on Windows with all-caps filenames. #3364 (2.4.1.0/2.3.14) >>> - Take care against possible double-free of allocated memory crash upon >>> destruction. #3376 (2.4.1.0/2.3.14) >>> * GIF >>> - IOProxy support. #3181 (2.4.0/2.3.10) >>> * HDR: >>> - IOProxy support. #3218 (2.4.0) >>> * HEIF: >>> - Handle images with unassociated alpha. #3146 (2.4.0/2.3.9) >>> * JPEG: >>> - IOProxy support. #3182 (2.4.0/2.3.10) >>> - Better handling of PixelAspectRatio. #3366 (2.4.1.0) >>> - Fix multithreaded race condition in read_native_scanline. #3495 >>> (2.4.2.2) >>> - Fix bug in XRes,YRes aspect ratio logic. #3500 (2.4.2.2) >>> - When asked to output 2-channel images (which JPEG doesn't support), use >>> the channel names to decide whether to drop the second channel (if it >>> seems to be a luminance/alpha image) or add a third black channel (other >>> cases). #3531 (2.4.2.2) >>> * JPEG2000: >>> - Enable multithreading for decoding (if using OpenJPEG >= 2.2) and >>> encoding (if using OpenJPEG >= 2.4). This speeds up JPEG-2000 I/O by >>> 3-4x. #2225 (2.3.11/2.4.0) >>> - IOProxy support. #3226 (2.4.0) >>> - Better detection and error reporting of failure to open the file. >>> #3440 (2.4.2) >>> * OpenEXR: >>> - When building against OpenEXR 3.1+ and when the global OIIO attribute >>> "openexr:core" is set to nonzero, do more efficient multithreaded >>> reading of OpenEXR files. #3107 (2.4.0/2.3.9.1) >>> - Fix excessive memory usage when saving EXR files with many channels. >>> #3176 (2.4.0/2.3.10) >>> - When building against OpenEXR >= 3.1.3, our OpenEXR output now supports >>> specifying the zip compression level (for example, by passing the >>> "compression" metadata as "zip:4"). Also note than when using OpenEXR >= >>> 3.1.3, the default zip compression has been changed from 6 to 4, which >>> writes compressed files significantly (tens of percent) faster, but only >>> increases compressed file size by 1-2%. #3157 (2.4.0/2.3.10) Fixes in >>> #3387 (2.4.1.1) >>> - Fix writing deep exrs when buffer datatype doesn't match the file. #3369 >>> (2.4.1.0/2.3.14) >>> * PNG: >>> - Assume sRGB color space as default when no color space attribute is >>> in the file. #3321 (2.4.0.2/2.3.13) >>> - Improve error detection and propagation for corrupt/broken files. #3442 >>> (2.4.2) >>> - Improve error detection and messages when writing PNG files, for various >>> kinds of errors involving metadata. #3535 (2.4.2.2) >>> * PPM: >>> - Mark all PPM files as Rec709 color space, which they are by >>> specification. #3321 (2.4.0.2/2.3.13) >>> * PSD: >>> - IOProxy support. #3220 (2.4.0) >>> - Better error messages for corrupted files and other failures. #3469 >>> (2.4.0) >>> * RAW: >>> - When using libraw 0.21+, now support new color space names "DCE-P3", >>> "Rec2020", and "sRGB-linear", and "ProPhoto-linear". Fix incorrect gamma >>> values for "ProPhoto". #3123 #3153 (2.4.0/2.3.9.1) >>> * RLA: >>> - Better guards against malformed input. #3163 (2.4.0/2.3.10) >>> * Targa: >>> - Improved error detection for read errors and corrupted files. #3120 >>> (2.4.0/2.3.9.1) #3162 (2.4.0/2.3.10) >>> - Fixed bug when reading x-flipped images. #3162 (2.4.0/2.3.10) >>> - IOProxy support. #3221 (2.4.0) >>> - Better interpretation of TGA 1.0 files with alpha that is zero >>> everywhere. Be more consistent with Targa attributes all being called >>> "targa:foo". Add "targa:version" to reveal whether the file was TGA 1.0 >>> or 2.0 version of the format. #3279 (2.4.0.1/2.3.12) >>> - Fix parsing of TGA 2.0 extension area when the software name was >>> missing form the header. #3323 (2.4.0.2/2.3.13) >>> - Fix reading of tiny 1x1 2-bpp Targa 1.0 images. #3433 (2.3.17/2.2.21) >>> * Socket imageio plugin has been removed entirely, it never was completed or >>> did anything useful. #3527 (2.3.2.2) >>> * TIFF: >>> - IOProxy is now supported for TIFF output. #3075 (2.4.0/2.3.8) >>> - Honor zip compression quality request when writing TIFF. #3110 >>> (2.4.0/2.3.11) >>> - Automatically switch to "bigtiff" format for really big (> 4GB) images. >>> #3158 (2.4.0) >>> - Support for palette images with 16 bit palette indices. #3262 >>> (2.4.0/2.3.12) >>> - Gracefully handle missing ExtraSamples tag. #3287 (2.4.0.1/2.3.12) >>> - New output configuration hint: "tiff:write_extrasamples" (default: 1), >>> if set to 0, will cause the TIFF output to NOT include the required >>> EXTRASAMPLES tag in the header. This is not recommended, but fixes >>> a specific problem in some circumstances where PhotoShop misbehaves >>> when the extrasamples tag is present. #3289 (2.4.0.1) >>> - No longer write IPTC blocks to the TIFF header by default, it caused >>> trouble and was sometimes corrupted. You can force it to write an IPTC >>> block by using the output open configuration hint "tiff:write_iptc" set >>> to nonzero. #3302 (2.4.0.1) >>> - Fix read problems with TIFF files with non-zero y offset. #3419 >>> (2.3.17/2.4.2) >>> - Fixed some longstanding issues with IPTC data in the headers. #3465 >>> (2.4.0) >>> - Protect against crashes with certain empty string attributes. #3491 >>> (2.4.2.1) >>> * WebP: >>> - Fix previous failure to properly set the "oiio:LoopCount" metadata >>> when reading animated webp images. #3183 (2.4.0/2.3.10) >>> - IOProxy support. #3224 (2.4.0) >>> * Better catching of exceptions thrown by OCIO 1.x if it encounters 2.0 >>> config >>> files. #3089 (2.4.0/2.3.9) >>> * Improved internal logic and error reporting of missing OCIO configs. #3092 >>> #3095 >>> * Improved finding of fonts (by IBA::render_text and oiiotool --text). It >>> now >>> honors environment variable `$OPENIMAGEIO_FONTS` and global OIIO attribute >>> "font_searchpath" to list directories to be searched when fonts are needed. >>> #3096 (2.4.0/2.3.8) >>> * Fix crash that could happen with invalidly numbered UDIM files. #3116 >>> (2.4.0/2.3.9) >>> * Fix possible bad data alignment and SIMD assumptions inside TextureSystems >>> internals. #3145 (2.4.0/2.3.9) >>> * Update internal stb_printf implementation (avoids some sanitizer alerts). >>> #3160 (2.4.0/2.3.10) >>> * Replace the few remaining instances of `sscanf` in the codebase with >>> Strutil >>> utilities that are guaranteed to be locale-independent. #3178 (2.4.0) >>> * Security: New global OIIO attributes "limits:channels" (default: 1024) and >>> "limits:imagesize_MB" (default: 32768, or 32 GB) are intended to reject >>> input files that exceed these limits, on the assumption that they are either >>> corrupt or maliciously constructed, and would, if read, lead to absurd >>> allocations, crashes, or other mayhem. Apps may lower or raise these limits >>> if they know that a legitimate input image exceeds these limits. Currently, >>> only the TIFF reader checks these limits, but others will be modified to >>> honor the limits over time. #3230 (2.3.11/2.4.0) >>> * Fix integer overflow warnings. #3329 (2.4.1.0) >>> * Improved behavior when opening a file whose format doesn't correctly match >>> its extension: try common formats first, rather than alphabetically; and >>> improve error messages. #3400 (2.4.2) >>> * The maximum number of threads you can set with option "oiio:threads" >>> has been increased from 256 to 512. #3484 (2.4.2.1) >>> * Make access to the internal imageio_mutex not be recursive. #3489 >>> (2.4.2.2) >>> * Various protections against string metadata found in file that has zero >>> length. #3493 (2.4.2.2) >>> * Fix possible null pointer dereference in inventory_udim. #3498 (2.4.2.2) >>> * oiiotool, maketx, iinfo, igrep, and iv now all take a `--version` command >>> line argument, which just prints the OIIO version and exits. #3534 >>> >>> Developer goodies / internals: >>> * benchmark.h: >>> - Alter the declaration of DoNotOptimize() so that it doesn't have >>> compilation problems on some platforms. #3444 (2.4.2/2.3.17) >>> * filesystem.h: >>> - A new version of `searchpath_split` returns the vector of strings rather >>> than needing to be passed a reference. #3154 (2.4.0/2.3.10) >>> - New `write_binary_file()` utility function. #3199 (2.4.0/2.3.10) >>> - `searchpath_split()` fixes to better handle empty paths. #3306 (2.4.0.1) >>> * fmath.h: >>> - Added `round_down_to_multiple()`. Also, more correctly handle >>> `round_to_multiple()` results when the value is < 0. #3104 >>> - Add `round_down_to_multiple()` and improve `round_to_multiple()` to >>> correctly handle cases where the value is less than 0. #3104 >>> (2.4.0/2.3.8) >>> - Make bit_cast specialization take refs, like the template. This fixes >>> warnings for some compilers. #3213 (2.4.0/2.3.10.1) >>> * imageio.h: >>> - ImageInput and ImageOutput have many new helper methods (protected, >>> meant for II and IO subclass implementations to use, not users of these >>> classes) for helping to implement IOProxy support in format readers and >>> writers. #3203 #3222 (2.4.0) >>> * Imath.h: >>> - In addition to including the right Imath headers for the version that >>> OIIO is built with, this defines custom formatters for the Imath types >>> for use with fmt::format/print or Strutil::format/print. #3367 (2.4.1.0) >>> * oiioversion.h >>> - `OIIO_MAKE_VERSION_STRING` and `OIIO_VERSION_STRING` now print all 4 >>> version parts. #3368 (2.4.1.0) >>> * parallel.h >>> - Refactoring of the entry points (back compatible for API), and add >>> support for using TBB for the thread pool (which seems slightly faster >>> than our internal thread pool). By default it still uses the internal >>> pool, but if OIIO::attribute("use_tbb") is set to nonzero, it will use >>> the TBB thread pool if built against TBB. #3473 (2.4.2.2) >>> * paramlist.h >>> - Various internal fixes that reduce the amount of ustring construction >>> that happens when constructing ParamValue and ParamList, and making >>> certain ImageSpec::attribute() calls. #3342 (2.4.1.0) >>> * simd.h: >>> - Better guards to make it safe to include from Cuda. #3291 #3292 >>> (2.4.0.1/2.3.12) >>> - Fix compiler warnings related to discrepancies between template >>> declaration and redeclaration in simd.h. #3350 (2.4.1.0/2.3.14) >>> - The vector types all now have a `size()` method giving its length. >>> #3367 (2.4.1.0) >>> - Defines custom formatters for the vector and matrix types, for use >>> with fmt::format/print or Strutil::format/print. #3367 (2.4.1.0) >>> * string_view.h >>> - Auto-conversion between our string_view, std::string_view (when >>> available), and fmt::string_view. #3337 (2.4.1.0) >>> - OIIO::string_view is now fully templated, to match std::string_view. >>> #3344 (2.4.1.0) >>> * strutil.h: >>> - New utility functions: parse_values(), scan_values(), scan_datetime() >>> #3173 #3177 (2.4.0/2.3.10), edit_distance() #3229 (2.4.0/2.3.11) >>> - The `utf8_to_utf16()` and `ut16_to_utf8()` utilities are now exposed on >>> all platforms, not just windows (and their internals have been >>> modernized). #3307 (2.4.0.1) >>> - `Strutil::isspace()` is a safe alternative to C isspace(), that works >>> even for signed characters. #3310 (2.4.1.0) >>> - `Strutil::print()` now is buffered (and much more efficient, and >>> directly wraps fmt::print). A new `Strutil::sync::print()` is a version >>> that does a flush after every call. #3348 (2.4.1.0) >>> - `get_rest_arguments()` fixes conflict between RESTful and Windows long >>> path notations. #3372 (2.4.1.0/2.3.14) >>> - Dramatically speed up (50-100x) Strutil iequals, iless, starts_with, >>> istarts_with, ends_with, iends_with. #3388 (2.4.1.1) >>> - New `safe_strcat` is a buffer-length-aware safe replcement for strcat. >>> #3471 (2.4.0/2.3.18) >>> - `Strutil::debug()` is the new OIIO::debug(), moving it from >>> libOpenImageIO to libOpenImageIO_Util. #3486 (2.4.2.1) >>> - New `Strutil::safe_strlen()` is a portable safe strlen replacement. >>> #3501 (2.4.2.2) >>> * sysutil.h: >>> - The `Term` class now recognizes a wider set of terminal emulators as >>> supporting color output. #3185 (2.4.0) >>> * timer.h: >>> - `Timer::add_seconds()` and `Timer::add_ticks()` allows add/subtract >>> directly to a timer's elapsed value. #3070 (2.4.0/2.3.8) >>> - For Linux, switch from using gettimeofday to clock_gettime, for >>> potentially higher resolution. #3443 (2.4.2) >>> * typedesc.h: >>> - Add Cuda host/device decorations to TypeDesc methods to make them GPU >>> friendly. #3188 (2.4.0/2.3.10) >>> - TypeDesc constructor from a string now accepts "box2f" and "box3f" >>> as synonyms for "box2" and "box3", respectively. #3183 (2.4.0/2.3.10) >>> * type_traits.h: >>> - This new header contains a variety of type traits used by other OIIO >>> headers. They aren't really part of the public API, but they are >>> sometimes >>> used by public headers. #3367 (2.4.1.0) >>> * unittest.h: >>> - Changes `OIIO_CHECK_SIMD_EQUAL_THRESH` macro to compare `<= eps` >>> instead of `<`. #3333 (2.4.0.3) >>> * unordered_map_concurrent.h: Fix bug in `erase()` method. #3485 (2.4.2.2) >>> * ustring.h: >>> - New static method `from_hash()` creates a ustring from the known hash >>> value. #3397 (2.4.2) >>> - New `ustringhash` class is just like a ustring, except that the "local" >>> representation is the hash, rather than the unique string pointer. #3436 >>> (2.4.2) >>> * vecparam.h: >>> - New `V3fParam`, `M33fParam`, and `M44Param` (defined in vecparam.h) are >>> used just for parameter passing in public APIs, instead of Imath::V3f, >>> M33f, or M44f, in order to more fully hide Imath types from our public >>> interfaces. These are only parameter-passing classes, and are not useful >>> as vector or matrix classes in their own right. But they seamlessly cast >>> to and from other vector- and matrix-like classes. #3330 (2.4.1.0) >>> * More internals conversion to use the new fmt style for string formatting, >>> console output, error messages, and warnings: oiiotool internals #3240 >>> (2.4.0); TS/IC stats output #3374 (2.4.1.0); misc #3777 (2.4.1.0); testshade >>> #3415 (2.4.2) >>> * Internals are working toward removing all uses of string_view::c_str(), >>> since that isn't part of C++17 std::string_view. #3315 (2.4.0.1) >>> * New testtex options: `--minthreads` sets the minimum numer of threads that >>> will be used for thread wedges, `--lowtrials` is an optional maximum number >>> of trials just for the 1 or 2 thread cse. #3418 (2.4.2) >>> * Internals: internal classes with vertual methods now mark all their >>> overridden destructors correctly as `override`. #3481 (2.4.2.1) #3488 #3511 >>> (2.4.2.2) >>> >>> Build/test system improvements and platform ports: >>> * CMake build system and scripts: >>> - Remove the old FindOpenImageIO.cmake module; downstream clients should >>> instead use our exported configs. #3098 (2.4.0/2.3.8) >>> - Fix over-use of targets when we should have been using variables. #3108 >>> (2.4.0/2.3.9) >>> - CMake variable `-DENABLE_INSTALL_testtex=1` causes `testtex` to be >>> installed as an application. #3111 (2.4.0) >>> - Make `OpenImageIO_SUPPORTED_RELEASE` into a CMake cache variable so it >>> can be overridden at build time. #3142 (2.4.0) >>> - New build option `-DTIME_COMMANDS=ON` will print time to compile each >>> module (for investigating build performance; only useful when building >>> with `CMAKE_BUILD_PARALLEL_LEVEL=1`). #3194 (2.4.0/2.3.10) >>> - `PROJECT_VERSION_RELEASE_TYPE` is now a cache variable that can be >>> overridden at build time. #3197 (2.4.0/2.3.10) >>> - Set and use the variable `PROJECT_IS_TOP_LEVEL` to know if OIIO is a >>> top level project or a subproject. #3197 (2.4.0/2.3.10) >>> - Restore code that finds Jasper when using statically-linked libraw. >>> #3210 (2.4.0/2.3.10.1) >>> - Gracefully handle failing to find git for test data download. #3212 >>> (2.4.0/2.3.10.1) >>> - Make sure to properly use the tbb target if it exists. #3214 >>> (2.4.0/2.3.10.1) >>> - Use a project-specific "OpenImageIO_CI" for whether we're running in CI, >>> rather than the confusingly generic "CI" #3211 (2.4.0/2.3.11) >>> - If CMake variable `BUILD_TESTING` is OFF, don't do any automatic >>> downloading of missing test data. #3227 (2.3.11/2.4.0) >>> - Fixes to FindOpenColorIO.cmake module, now it prefers an OCIO exported >>> cmake config (for OCIO 2.1+) unless OPENCOLORIO_NO_CONFIG=ON is set. >>> #3278 (2.4.0.1/2.3.12) >>> - Fix problems with FindOpenEXR build script for Windows. #3281 >>> (2.4.0.1/2.3.12) >>> - New CMake cache variable `DOWNSTREAM_CXX_STANDARD` specifies which C++ >>> standard is the minimum for downstream projects (currently 14), which >>> may be less than the `CMAKE_CXX_STANDARD` that specifies which C++ >>> standard we are using to build OIIO itself. #3288 (2.4.0.1) >>> - The exported cmake configs now use relative paths so they are >>> relocatable. #3302 (2.4.0.1) >>> - CMake variable `OPENIMAGEIO_CONFIG_DO_NOT_FIND_IMATH`, if set to ON, >>> will make our generated config file not do a find_dependency(Imath). >>> (Use with caution.) #3335 (2.4.0.3) >>> - Can now do unity/jumbo builds. This isn't helpful when building with >>> many cores/threads, but in thread-limited situtations (such as CI), it >>> can speed up builds a lot to use `-DCMAKE_UNITY_BUILD=ON`. #3381 #3389 >>> #3392 #3393 #3398 #3402 (2.4.2.0) >>> - Do not auto-download test images by default. To auto download test >>> images, build with `-DOIIO_DOWNLOAD_MISSING_TESTDATA=ON`. #3409 (2.4.0) >>> - Allow using the Makefile wrapper on arm64 systems. #3456 (2.4.2) >>> - The export OpenImageIOConfig.cmake fixes `OpenImageIO_INCLUDE_DIR` to >>> work correctly on Debian systems where there are multiple filesystem >>> components to the path. #3487 (2.4.2.1) >>> - On MacOS, do not force MACOS_RPATH on. #3523 (2.4.2.2) >>> * Dependency version support: >>> - When using C++17, use std::gcd instead of boost. #3076 (2.4.0) >>> - When using C++17, use `inline constexpr` instead of certain statics. >>> #3119 (2.4.0) >>> - Fixes to work with the libraw 202110 snapshot. #3143 (2.4.0/2.3.9.1) >>> - Fix occasional build breaks related to OpenCV headers. #3135 >>> (2.4.0/2.3.9) >>> - The internals of `Filesystem::searchpath_split` have been reimplemented >>> in such a way as to no longer need boost.tokenzer. #3154 (2.4.0/2.3.10) >>> - Deal with the fact that OpenColorIO has changed its default branch >>> name to "main". #3169 (2.4.0/2.3.10/2.2.20) >>> - pybind11 v2.9.0 incorporated into our testing and CI. #3248 >>> - Fix clang10 compile warnings. #3272 (2.4.0.1/2.3.12) >>> - Support for ffmpeg 5.0. #3282 (2.4.0.2/2.3.13) >>> - Support for fmtlib 9.0.0. #3327 (2.4.0.2/2.3.13) #3466 (2.4.2/2.3.18) >>> - `build_opencolorio.bash` helper script bumped its default build of >>> OpenColorIO to 2.1.2. #3475 (2.4.2.1) >>> - When building with C++17 or higher, Boost.filesystem is no longer >>> needed or used. #3472 #3477 (2.4.2.1) >>> - Upgrade the internal fallback implemention of PugiXML to the latest >>> version. #3494 (2.4.2.2) >>> - Fixes for ffmpeg 5.1 detection. #3516 (2.3.19.0/2.4.2.2) >>> - Support for gcc 12.1. #3480 (2.4.2.1) >>> * Testing and Continuous integration (CI) systems: >>> - Properly test against all the versions of VFX Platform 2022. #3074 >>> (2.4.0) >>> - The helper script `build_libtiff.bash` now allows you to override the >>> build type (by setting `LIBTIFF_BUILD_TYPE`) and also bumps the default >>> libtiff that it downloads and builds from 4.1.0 to 4.3.0. #3161 (2.4.0) >>> - New tests on MacOS 11 #3193 (2.4.0/2.3.10) and MacOS 12, remove test on >>> MacOS 10.15 (GitHub Actions is imminently removing MacOS 10.15). #3528 >>> (2.3.19.0/2.4.2.2) >>> - Add a DDS test (we never had one before). #3200 (2.4.0/2.3.10) >>> - `imageinout_test` now has options to make it easy to unit test just one >>> named format, as well as to preserve the temp files for inspection. >>> #3201 (2.4.0/2.3.10) >>> - Add an HDR test (we never had one before). #3218 (2.4.0) >>> - Fix bugs in the build_opencolorio.bash script, did not correctly handle >>> installation into custom directories. #3278 (2.4.0.1/2.3.12) >>> - Failed build artifact storage is revised to save more cmake-related >>> artifacts to help debugging. #3311 (2.4.0.1) >>> - Now doing CI builds for Intel icc and icx compilers. #3355 #3363 >>> (2.4.1.0/2.3.13) #3407 (2.4.0) >>> - Overhaul of ci.yml file to be more clear and compact by using GHA >>> "strategy" feature. #3356 #3365 (2.4.1.0/2.3.13) >>> - Removed CI for windows-2016 GHA instance which will soon be removed. >>> #3370 (2.4.1.0) >>> - Test against clang 14. #3404 >>> - Various guards against supply chain attacks durig CI. #3454 (2.4.2) >>> - Test against pybind11 v2.10. #3478 (2.4.2.1) >>> - Run SonarCloud nightly for static analysis and coverage analysis. #3505 >>> (2.4.2.2) >>> * Platform support: >>> - Fix when building with Clang on big-endian architectures. #3133 >>> (2.4.0/2.3.9) >>> - Improvements to NetBSD and OpenBSD support. #3137. (2.4.0/2.3.9) >>> - Fixes for MSVS compile. #3168 (2.4.0/2.3.10) >>> - Fix problems on Windows with MSVC for Debug builds, where crashes were >>> occurring inside `isspace()` calls. #3310 >>> - Improved simd.h support for armv7 and aarch32. #3361 (2.4.1.0/2.3.14) >>> - Suppress MacOS wasnings about OpenGL deprecation. #3380 (2.4.1.0/2.3.14) >>> - Fix MSVS/Windows errors. #3382 (2.4.1.1) >>> >>> Notable documentation changes: >>> * Add an oiiotool example of putting a border around an image. #3138 >>> (2.4.0/2.3.9) >>> * Fix explanation of ImageCache "failure_retries" attribute. #3147 >>> (2.4.0/2.3.9) >>> * Improved maketx argument explanations. >>> * Clean up intra-document section references. #3238 (2.3.11/2.4.0) >>> * New explanations about input and output configuration hints. #3238 >>> (2.3.11/2.4.0) >>> * More code examples in both C++ and Python (especially for the ImageInput, >>> ImageOutput, and ImageBufAlgo chapters). #3238 #3244 #3250 (2.3.11/2.4.0) >>> #3263 (2.3.12/2.4.0) >>> * Pretty much anyplace where a parameter that represents a filename, and it >>> is >>> supporting UTF-8 encoding of Unicode filenames, the docs for that function >>> explicitly say that the string is assumed to be UTF-8. #3312 (2.4.0.1) >>> * Fix many typos in docs. #3492 (2.4.2.2) >>> >>> >>> >>> -- >>> Larry Gritz >>> l...@larrygritz.com >>> >>> >>> >>> >>> >>> _______________________________________________ >>> Oiio-dev mailing list >>> Oiio-dev@lists.openimageio.org >>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org >>> >> >> _______________________________________________ >> Oiio-dev mailing list >> Oiio-dev@lists.openimageio.org >> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org > > -- > Larry Gritz > l...@larrygritz.com <mailto:l...@larrygritz.com> > > > > > > _______________________________________________ > Oiio-dev mailing list > Oiio-dev@lists.openimageio.org > http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
_______________________________________________ Oiio-dev mailing list Oiio-dev@lists.openimageio.org http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org