head 1.4; access; symbols pkgsrc-2026Q1:1.4.0.6 pkgsrc-2026Q1-base:1.4 pkgsrc-2025Q4:1.4.0.4 pkgsrc-2025Q4-base:1.4 pkgsrc-2025Q3:1.4.0.2 pkgsrc-2025Q3-base:1.4 pkgsrc-2025Q2:1.3.0.8 pkgsrc-2025Q2-base:1.3 pkgsrc-2025Q1:1.3.0.6 pkgsrc-2025Q1-base:1.3 pkgsrc-2024Q4:1.3.0.4 pkgsrc-2024Q4-base:1.3 pkgsrc-2024Q3:1.3.0.2 pkgsrc-2024Q3-base:1.3 pkgsrc-2024Q2:1.2.0.6 pkgsrc-2024Q2-base:1.2 pkgsrc-2024Q1:1.2.0.4 pkgsrc-2024Q1-base:1.2 pkgsrc-2023Q4:1.2.0.2 pkgsrc-2023Q4-base:1.2 pkgsrc-2023Q3:1.1.0.22 pkgsrc-2023Q3-base:1.1 pkgsrc-2023Q2:1.1.0.20 pkgsrc-2023Q2-base:1.1 pkgsrc-2023Q1:1.1.0.18 pkgsrc-2023Q1-base:1.1 pkgsrc-2022Q4:1.1.0.16 pkgsrc-2022Q4-base:1.1 pkgsrc-2022Q3:1.1.0.14 pkgsrc-2022Q3-base:1.1 pkgsrc-2022Q2:1.1.0.12 pkgsrc-2022Q2-base:1.1 pkgsrc-2022Q1:1.1.0.10 pkgsrc-2022Q1-base:1.1 pkgsrc-2021Q4:1.1.0.8 pkgsrc-2021Q4-base:1.1 pkgsrc-2021Q3:1.1.0.6 pkgsrc-2021Q3-base:1.1 pkgsrc-2021Q2:1.1.0.4 pkgsrc-2021Q2-base:1.1 pkgsrc-2021Q1:1.1.0.2 pkgsrc-2021Q1-base:1.1; locks; strict; comment @# @; 1.4 date 2025.08.13.06.35.13; author wiz; state Exp; branches; next 1.3; commitid FWDBG3zdFatAfx6G; 1.3 date 2024.06.26.16.26.24; author adam; state Exp; branches; next 1.2; commitid gVFhSn0HNOizNvfF; 1.2 date 2023.10.15.19.52.09; author ryoon; state Exp; branches; next 1.1; commitid zoVsgqxdvp2r8LIE; 1.1 date 2021.01.19.16.02.25; author nia; state Exp; branches; next ; commitid 0Uw8bSoeCbGoYlEC; desc @@ 1.4 log @openimageio: update to 3.0.9.1. Release 3.0.9.1 (Aug 7, 2025) -- compared to 3.0.9.0 ----------------------------------------------------- - *deps*: C++23 support - *deps*: Adapt to libheif 1.20.2 Release 3.0.9.0 (Aug 1, 2025) -- compared to 3.0.8.1 ----------------------------------------------------- - *maketx*: Add flags to increase feature parity with txmake - *perf*: Speed up `maketx --envlatl` when multithreaded by over 10x. - *perf*: Speed up OpenEXR non-core header read time - *oiiotool*: Allow thread control for --parallel-frames - *ImageInput*: Incorrect IOProxy logic related to valid_file - *python*: Got strides wrong passing 2D numpy pixel array - *ffmpeg*: Replace deprecated and soon removed avcodec_close with avcodec_free_context - *build/python*: For python stub generation, lock pybind11 to pre-3.0 - *build*: Fix typo related to finding ccache - *build*: PNG auto-build improvements - *build*: Propagate CMAKE_MSVC_RUNTIME_LIBRARY - *build*: Update jpeg2000input.cpp to include cstdarg - *ci*: Bump 'latest releases' tests to use pybind11 3.0.0 - *(docs)*: Correct docs and type of "resident_memory_used_MB" attribute - *(admin)*: Update SECURITY to reflect that 2.5 only gets critical fixes now Release 3.0.8.1 (Jul 5, 2025) -- compared to 3.0.8.0 ----------------------------------------------------- - *build(heif)*: Fixes to build against libheif 1.20 - *build*: Wheel upload_pypi step should only run from main repo - *ci*: Bump 'latest' test versions Release 3.0.8.0 (Jul 1, 2025) -- compared to 3.0.7.0 ----------------------------------------------------- - *oiiotool*: New expression pseudo-metadata term: SUBIMAGES - *oiiotool*: Fixes to --missingfile behavior - *iv*: Area probe - *python*: Python ImageBuf.init_spec did not return correct value - *fix*: ImageOutput::check_open logic was flawed - *int(iv)*: Add raw string syntax modifier for VSCode and Cursor to understand its glsl - *int(iv)*: Use R"()" syntax for glsl shader strings for better readability - *exr*: Not honoring 'missingcolor' for scanline files - *build*: Add arm_neon.h include on Windows ARM64 with clang-cl - *build*: Adjust pystring finding - *build(jxl)*: Use correct cmake variables for the include directories - *tests*: Remove old test reference output we no longer need - *ci*: Remove tests on Windows-2019 GitHub runner - *ci*: Various ccache save/restore improvements for CI runs - *ci*: Simplify gh-win-installdeps, no more vcpkg - *admin*: Remove stale intake documents Release 3.0.7.0 (Jun 1, 2025) -- compared to 3.0.6.1 ----------------------------------------------------- - *oiiotool*: `--eraseattrib` new modifier `:fromfile=1` reads from a file to get a list of patterns to specify the attributes to erase. - *oiiotool*: Added `--create-dir` flag to create directories needed by `-o` if they doesn't already exist - *oiiotool*: -i:native=1, fix --native behavior, fix convert datatype - *iv*: Fix crash on .DS_Store; fix uppercase extensions - *iv*: Do not resize on open and other zoom fixes - *iv*: Bug fix for iv window losing focus on mac on startup - *iv*: Implement files drag and drop into an iv window - *iv*: Use screen pixel ratio to render sharp text in pixel view tool - *python*: Add python stub files - *python*: ImageBuf `_repr_png_` method added, which allows use of ImageBuf in - *exr*: Did not properly allocate 'missingcolor' vector - *exr*: Add `htj2k` as a compression option for OpenEXR. Only works with OpenEXR 3.4 or higher (or in-progress OpenEXR main). - *iff*: Improved IFF support reading and writing z buffers - *webp*: Respect the `oiio:UnassociatedAlpha` attribute - *webp*: Allow finer grained control over WEBP compression settings - *flx/python*: IBA.demosaic had GIL release in wrong spot - *fix*: ImageInput/ImageOutput did not set per-file threads correctly - *fix*: Address safety warnings in pvt::append_tiff_dir_entry - *build*: Fix fmt throwing behavior warnings - *build*: Detect libultrahdr version and enforce minimum of 1.3 - *build*: Fix failed test with old fmt - *ci*: Save time by not checking out entire project history - *ci*: New testing variants for VFX Platform 2025, Windows 2025 - *ci*: Update ref output to compensate for GitHub windows drive changes - *ci*: Pkg config libdir fix - *ci*: For docs workflow, lock down versions and speed up - *ci*: Improved clang-format CI task - *ci*: Add facility for benchmarking as part of CI - *ci*: Update ref image for slightly changed freetype accents - *docs*: Online docs improvements, mostly formatting (#4736, #4743) - *docs*: Update Windows build instructions to rely on deps auto-build Release 3.0.6.1 (May 2, 2025) -- compared to 3.0.6.0 ----------------------------------------------------- - *fix*: Restore OIIO_AVX512ER_ENABLED preprocessor symbol. Its absence could break backwards source compatibility if anyone was using it, even though it was useless and broken. Where compatibility goes, better safe than sorry. Release 3.0.6.0 (May 1, 2025) -- compared to 3.0.5.0 ----------------------------------------------------- - *oiiotool*: Add `--render_text` modifiers `measure=` and `render=` - *python*: Fix handle leak - *bmp*: Correct the type for BMP x/y density - *dpx*: Specify the units for DPX scanned size - *sgi*: Fix valid_file to properly swap bytes on little-endian platforms - *build*: Fix new dcmtk 3.6.9 vs C++ warning - *build*: Address Robin-map vs CMake 4.0 compatibility - *build*: Fix broken OIIO_SITE customization - *build*: Address compiler warnings in simd.h - *build/windows*: Clean up Windows compilation warnings - *build/windows*: Include Windows version information on produced binaries - *ci*: Move away from soon-to-be-deprecated ubuntu-20.04 GHA runner Release 3.0.5.0 (Apr 2, 2025) -- compared to 3.0.4.0 ----------------------------------------------------- - *ImageBuf*: `ImageBuf::merge_metadata()` merges one IB's metadata into another's without deleting the metadata already present. It can also filter which metadata are copied using a regex. - *oiiotool*: `--pastemeta` now takes additional modifiers that allows options for merging rather than rewriting, and is able to copy only a subset of the metadata specified by a regex. - *oiiotool*: Fix invalid loop bound when appending mipmap textures using oiiotool - *png*: Increase allowed width/height limit - *psd*: Improved tag recognition in psd files - *tiff*: The default value for bitspersample should be 1 - *int*: Switch to spans for some exif manipulation, fixing warnings - *span.h*: OIIO::span improvements - *build*: Better disabling of work when USE_PYTHON=0 - *build*: Improve OpenJpeg version detection. - *build*: Bump auto-build libdeflate to 1.23 to avoid AVX512 not available errors - *build*: Cmake 4.0 compatibility - *ci*: Fix wheel building on Mac - *ci*: Update libPNG address and version for ci & autobuild Release 3.0.4.0 (Mar 2, 2025) -- compared to 3.0.3.0 ----------------------------------------------------- - *oiiotool*: Oiiotool new expression eval tokens IS_CONSTANT, IS_BLACK - *oiiotool*: Better handling of wildcards that match no files - *ImageBuf*: IB::pixeltype() did not always return the right value - *ImageBuf*: Fix bug in ImageBuf construction from ptr + neg strides - *ICC*: ICC profile recognition and robustness improvements, especially for PSD - *exr*: Fill in OpenEXR lineOrder attribute when reading - *ico*: More robust to corrupted ICO files - *rla*: More robust to corrupted RLA files that could overrun buffers - *span.h*: Eliminate needless definitions of `std::size(span)` that were triggering strange behavior on recent MSVS compiler versions. - *build*: Fix recently broken rpath setting - *build/python wheels*: Ensure python-based builds use maj.min.patch SO versioning - *build/python wheels*: Fix recently broken rpath to restore python wheel building - *ci*: Run wheel workflow on certain pushes - *docs*: Argparse documentation/comments typos - *admin*: Document Python Wheel completed in roadmap - *admin*: Add ".vs" to .gitignore - *admin*: Set up .gitattributes file and ensure it properly categorizes certain files for GitHub's language analysis statistics. Release 3.0.3.1 (Feb 1, 2025) -- compared to 3.0.3.1 ----------------------------------------------------- The code is identical to v3.0.3.0, but some build issues were fixed to allow proper build and upload of the Python wheels to PyPI for the Linux ARM variants. Release 3.0.3.0 (Feb 1, 2025) -- compared to 3.0.2.0 ----------------------------------------------------- - 🐍🎉🍾 **Python wheels workflow and build backend** -- beginning with OpenImageIO 3.0.3.0, releases should automatically trigger building of Python wheels and upload to PyPI so that you can do a single-command `pip3 install openimageio` on any of Linux, Mac, or Windows, and get the Python bindings, the OpenImageIO libraries, and a working oiiotool, without having to build from source yourself. - *oiiotool*: `oiiotool --layersplit`, new command to split multi-layer OpenEXR files (using the usual channel naming convention to delineate "layers") into separate images - *IBA*: IBA:demosaic() adds the ability for X-Trans demosaicing - *IBA*: fix demosaic handling of roi channels - *png*: Alpha premultiplication adjustment and attribute - *psd*: Perform endian byteswap on correct buffer area for PSD RLE - *raw*: Add black level and BPS metadata - *python*: Disable loading Python DLLs from PATH by default on Windows - *dev (span.h)*: Span_memcpy is a safer memcpy when you know the span boundaries - *dev (filesystem.h)*: Filesystem::getline() - *dev (paramlist.h)*: ParamValue as_span, as_cspan - *build*: Recent change broke when using non-Apple clang on Apple - *build*: Fix build_cmake.bash script for aarch64, bump its default version - *build*: Fix libraw definitions (again) - *ci*: Upgrade to newer actions - *ci*: Test and document support for WebP 1.5 and fmt 11.1 - *ci*: Only pass build-steps the secrets it needs - *ci*: Fix Windows 2019 CI -- make python version match the runner - *ci*: Raise 'latest' tests to use new fmt 11.1.2 - *ci*: Adjust some pugixml versions - *ci*: Allow special branch names to prune CI jobs - *tests*: Improve Ptex testing - *tests*: Better testing coverage of null image reader/writer - *tests*: At long last, set up a softimage reading test. - *tests*: Additional ref output for jpeg-corrupt test - *docs*: Fix typo in oiiotool's gradient fill example Release 3.0.2.0 (Jan 1, 2025) -- compared to 3.0.1.0 ----------------------------------------------------- - *api*: Add global attribute `imageinput:strict` - *various formats*: Detect invalid ICC profile tags - *various formats*: IPTC fields have length limits, protect against attributes passed that are too long to fit in them. - *pnm*: Handle broken pnm files with invalid resolution - *pnm*: Handle broken pgm having memory access error - *int*: Some LoggedTimer instances lacked a variable name - *build*: Use target_compile_options (fixes a LibRaw build issue) - *ci*: Refactor using a single steps workflow - *ci*: Fixups of analysis workflow - *docs*: Minor fixes and typos - *admin*: Sign release artifacts Release 3.0.1.0 (Dec 1, 2024) -- compared to 3.0.0.3 ----------------------------------------------------- - *IBA*: New IBA::scale() - *IBA*: `IBA:demosaic()` add white balancing - *jpeg*: Support reading Ultra HDR images - *jpeg*: Support encoding/decoding arbitrary metadata as comments - *api*: `OIIO::getattribute()` queries for available font families and styles - *perf*: `IBA::unsharp_mask()` speed and memory optimization - *perf*: oiiotool `--line`, `--text`, `--point`, and `--box` speedups - *perf*: Jpeg2000 valid_file implementation, much faster than trying to open - *perf*: Faster utf8<->utf16 conversion on Windows - *fix(exr)*: Allow an empty "name" metadata to be read - *fix(exr)*: Avoid integer overflow for large deep exr slice strides - *fix(raw)*: Fix channel layout - *build*: Support static OCIO self-builds - *build*: Add build recipe for PNG - *build*: Add hardening options - *ci*: Increased the macos timeout slightly to fix spurious failures - *ci*: Don't rebuild docs in CI when only CMakeLists.txt changes - *ci*: Fix broken CI for ASWF 2021 and 2022 containers - *docs*: Update some old links to our new vanity URLs - *docs*: Quickstart guide - *docs*: First stab at an architecture overview - *docs/admin*: Code review guidelines and tips - *docs/admin*: Document how to make signed release tags Release 3.0 (v3.0.0.3 - Nov 8, 2024) -- compared to 2.5.16.0 ------------------------------------------------------------- - v3.0.0.0-beta1 - Oct 15, 2024 - v3.0.0.1-beta2 - Oct 29, 2024 - v3.0.0.2-RC1 - Nov 4, 2024 (no code changes vs beta2) - v3.0.0.3 / official release - Nov 8, 2024 (no code changes vs RC1) **Executive Summary / Highlights:** - Updated minimum toolchain: C++17/gcc9.3, Python 3.7, CMake 3.18.2, and raised min versions of most library dependencies. - New image format support: JPEG XL, R3D. - oiiotool new commands: `--cryptomatte-colors`, `--demosaic`, `--buildinfo`, `--ocionamedtransform`, `--popbottom`, `--stackreverse`, `--stackclear`, `--stackextract`; improved `--for` behavior for reverse direction. - Lots of long-deprecated API calls have been removed entirely. Please see - New ImageBufAlgo: `perpixel_op()`, `demosaic()`, `ocionamedtransform()`. - ImageBuf now by default does not use ImageCache to mediate file images, unless you explicitly ask for it. - ImageCache & TextureSystem now use shared_ptr for creation, not raw pointers. And they have been de-virtualized, for easier future expansion flexibility without breaking ABI for any small change. - Improved and more consistent color space name nomenclature. - Build system now is capable of auto-downloading and building several of the most important dependencies if they are missing at build time. - Please note that the development branch in the GitHub repo is now named `main` instead of `master`. Full details of all changes follow. ### New minimum dependencies and compatibility changes: * *C++*: Move to C++17 standard minimum (from 14), which also implies a minimum gcc 9.3 (raised from 6.3), clang 5 (though we don't test or support older than clang10), Intel icc 19+, Intel OneAPI C++ compiler 2022+. * *Python*: 3.7 minimum (from 2.7). * *CMake*: 3.18.2 minimum (from 3.15) * *Boost*: Is no longer a dependency! * *ffmpeg*: 4.0 minimum (from 3.0) * *Freetype*: 2.10 minimum (from no previously stated minimum, but we had been testing as far back as 2.8) * *GIF*: 5.0 minimum for giflib (from 4.0) * *libheif*: 1.11 minimum (from 1.3) * *LibRaw*: Raise minimum LibRaw to 0.20 (from 0.18) * *libtiff*: 4.0 minimum (from 3.9) * *OpenColorIO*: Make OpenColorIO a required dependency and raise the minimum to 2.2 (from 1.1). * *OpenEXR/Imath*: minimum raised to 3.1 (from 2.4) * *OpenCV*: 4.0 minimum (from 3.x) * *OpenVDB*: Raise OpenVDB minimum to 9.0 * *PNG*: 1.6.0 minimum for libPNG (from 1.5.13) * *Pybind11*: 2.7 minimum * *Robin-map*: 1.2.0 minimum * *WebP*: 1.1 minimum (from 0.6.1) ### ⛰️ New features and public API changes: * *New image file format support:* - *JPEG XL*: Initial JPEG XL support for image input/output - *R3D*: Add initial support to read R3D files. Note that this capability will only be enabled if OIIO is built with the R3D SDK installed and available to be found by the build system. * *oiiotool new features and major improvements*: - `--cryptomatte-colors` takes the name of a cryptomatte set of channels, and produces a color-coded matte in which each ID gets a distinct color in the image. This can be useful for visualizing the matte, among other things. - `--demosaic` takes 1-channel Bayer patterns and turn them into demosaiced 3-channel images - `--buildinfo` command prints build information, including version, compiler, and all library dependencies. - `--ocionamedtransform`: Implement support for OCIO NamedTransforms - Several new stack manipulation commands: `--popbottom` discards the bottom element of the stack, `--stackreverse` reverses the order of the whole stack, `--stackclear` fully empties the stack, `--stackextract ` moves the indexed item from the stack (index 0 means the top) to the top. - `--for` improvements: correct reverse iteration behavior if the step value is negative, or if there is no step value but the start value is greater than the end value. (https://github.com/AcademySoftwareFoundation/OpenImageIO/pull/4348) (2.6.3.0) - Expression evaluation improvements: `BOTTOM` refers to the image on the bottom of the stack, `IMG[expression]` is now supported (previously only numeric literals were accepted as the index), check that label/variable names - oiiotool now by default does immediate reads without relying on an ImageCache, unless the `--cache` option is used, which now both enables the use of an underlying IC as well as setting its size. This tends to improve performance. - Change command line embedding for oiiotool & maketx output, by default hiding the command line for security reasons. It can be re-enabled with `--history`. * *Command line utilities*: - *idiff*: Allow users to specify a directory as the 2nd argument - *iv*: Implement Directory Argument Loading for iv - *iv*: Split off the current image in iv into a separate window - *iv*: OCIO color managed display - *iv*: Iv shows constant brown and GL error messages on start-up. - *iv*: Initialize variables before we use them. - *iv*: Add iv data and display windows overlay feature * New global attribute queries via OIIO::getattribute(): - "build:platform", "build:compiler", "build:dependencies" - "build:simd" is the new preferred synonym for the old name "oiio:simd" * *ImageBuf/ImageBufAlgo*: - ImageBuf now has span-based constructors for the variety where it "wraps" a user buffer. This is preferred over the constructor that takes a raw pointer (which is considered deprecated). - New span-based versions of get_pixels, set_pixels, setpixel, getpixel, interppixel, interppixel_NDC, interppixel_bicubic, interppixel_bicubic_NDC. These are preferred over the old versions that took raw pointers. - Start using optional keyword/value params for some ImageBufAlgo functions. - Only back ImageBuf with ImageCache when passed an IC - Make ImageBuf::Iterator lazy in its making the image writable - `IBA::perpixel_op()` is a new way to write IBA-like functions very simply, only supplying the very inner part of the loop that operates on one pixel. - `IBA::demosaic()` takes 1-channel Bayer patterns and turn them into demosaiced 3-channel images - `IBA::ocionamedtransform()`: Implement support for OCIO NamedTransforms * *ImageInput / ImageOutput*: - Add virtual `heapsize()` and `footprint()` to ImageInput and ImageOutput * *ImageCache/TextureSystem*: - Use `shared_ptr` for ImageCache and TextureSystem creation - Overload decode_wrapmode to support ustringhash - Add pvt::heapsize() and pvt::footprint() methods and image cache memory tracking - De-virtualize ImageCache and TextureSystem - IC/TS have new `get_imagespec()`, `imagespec()`, and `get_cache_dimensions()` methods. - *python*: Implement ImageCache.get_imagespec() - `TextureOpt` has been refactored a bit: some fields have been reordered; it's actually called TextureOpt_v2 (TextureOpt is an alias) to allow better compatibility-preserving improvements in the future, and similarly, TextureOptBatched is an alias for TextureOptBatch_v1. The type names of some enums have been changed, but aliases should preserve compatibility in the vast majority of cases. (3.0.0.0) * *API Deprecations*: (please see - Various other minor deprecations of things that had been marked as deprecated for a while in fmath.h dassert.h imagebufalgo.h imagecache.h imageio.h simd.h strutil.h ustring.h - The deprecated headers array_view.h and missing_math.h have been removed. - Make span::size() return size_t, not a signed type * *Build system dependency self-builders*:
The cmake-based build system has been enhanced to give a report of what dependencies it found, what was missing, what was found but was a version too old for our requirement. If the `OpenImageIO_BUILD_MISSING_DEPS` cmake variable is set to "all" (or a list of specific packages), the build system will attempt to build certain missing dependencies locally. Currently, this works for fmt, freetype, Imath, jpeg-turbo, libtiff, OpenColorIO, OpenEXR, pybind11, Robinmap, WebP, Zlib. Additional dependencies will learn to self-build over time. * *Environment variables* - The environment variable `OIIO_LIBRARY_PATH` that contains the search paths for finding image file format plugins has been changed to be called `OPENIMAGEIO_PLUGIN_PATH`. This is more consistent: all the "public API" documented environment variables that are meant for users/sites to adjust are named starting with `OPENIMAGEIO_`, whereas the prefix `OIIO_` is only used for environment variables that are "unofficial" (undocumented, temporary, or meant only for developers to use for debugging). - Rename env variable `OIIOTOOL_METADATA_HISTORY` to `OPENIMAGEIO_METADATA_HISTORY` ### 🚀 Performance improvements: - *oiiotool*: `--mosaic` improvements to type conversion avoid unnecessary copies and format conversions. - *oiiotool*: Use pointer, not static, for internal color config, slightly reducing oiiotool startup overhead when color configs are not needed. - *simd*: Faster vint4 load/store with unsigned char conversion - *perf/IBA*: Improve perf of IBA::channels in-place operation - *perf*: Overhaul of ColorConfig internals to solve perf issues - *perf/TS*: Reduce TextureSystem memory by slimming down internal LevelInfo size - *TS*: Have maketx/IBA::make_texture only write full metadata to the first mip level. We presume that other than resolution and encoding-related information, other metadata should not be expected to differ between MIP levels of the same image. This saves file size and memory in the IC/TS. - *IC/TS*: Store full metadata only at subimage 0, miplevel 0 for ptex files. - *perf*: Additional timing logging for performance investigations - *ImageBuf*: ImageBuf file read performance -- double reads, extra copies ### 🐛 Fixes and feature enhancements: - *errors*: Print unretrieved global error messages upon application exit. This should help beginning developers see important error messages they have failed to retrieve. - *font rendering*: Improvements to text rendering by `ImageBufAlgo::render_text()` and `oiiotool --text`: - Look up font in text render based on family and style name, in addition to font filename. - Fix incorrect vertical alignment in render_text - Windows newline shows invalid character in text render - Improve internals of font search enumeration - *oiiotool*: Overhaul and fix bugs in mixed-channel propagation - *oiiotool*: Expression substitution now understands pseudo-metadata `NONFINITE_COUNT` that returns the number of nonfinite values in the image, thus allowing decision making about fixnan - *oiiotool*: --autocc bugfix and color config inventory cleanup - *oiiotool*: Improve over-blurring of certain oiiotool --fit situations - *oiiotool*: `-i:ch=...` didn't fix up alpha and z channels - *iinfo*: iinfo was not reading MIP levels correctly - *iv*: Assume iv display gamma 2.2 - *dds*: Always seek to the beginning of the ioproxy during open for DDS and PSD files - *dds*: DDS support more DXGI formats - *heic*: Don't auto-transform camera-rotated images - *heic*: Correctly set imagespec size for heif images (by Gerrard Tai) (2.6.3.0) - *iff*: Refactor iffoutput.cpp for memory safety - *jpeg*: New output hint "jpeg:iptc" can be used to instruct JPEG output to not output the IPTC data to the file's header. - *jpeg2000*: Include the headers we need to discern version - *jxl*: JPEG-XL improvements - *openexr*: Handle edge case of exr attribute that interferes with our hints - *openexr*: Add support for luminance-chroma OpenEXR images. - *openexr*: Implement copy_image for OpenEXR - *openexr*: Fix out-of-bounds reads when using OpenEXR decreasingY lineOrder. - *openexr*: Add proxy support for EXR multipart output - *openexr*: Modernize dwa compression level setting - *ffmpeg*: Add proper detection of new FFmpeg versions - *ffmpeg*: FFmpeg additional metadata - *png*: New output compression mode names recognized: "none", "pngfast". Also some minor speedups to PNG writes. - *png*: Write out proper tiff header version in png EXIF blobs - *png*: A variety of minor optimizations to the PNG writer - *png*: Improve png write with alpha is low - *png*: Fix crash for writing large PNGs with alpha - *png*: Correctly read PNGs with partial alpha - *png*: Round dpi resolution to nearest 0.1 - *png*: Bug in associateAlpha botched alpha=0 pixels - *pnm*: Improvements to pnm plugin - *pnm*: Initialize m_pfm_flip before use to avoid UB. - *psd*: Always seek to the beginning of the ioproxy during open for DDS and PSD files - *psd*: Add support for 16- and 32-bit Photoshop file reads - *psd*: Various PSD files fail to load correctly - *raw*: LibRaw wavelet denoise options - *raw*: Avoid buffer overrun for flip direction cases - *raw*: Expose additional white balancing hints: "raw:user_black", "raw:use_auto_wb", "raw:grey_box", "dng:version", "dng:baseline_exposure", "dng:calibration_illuminant#", "dng:color_matrix#", "dng:camera_calibrationX". - *raw*: Make the crop match in-camera JPEG - *raw*: Check for nullptr in raw input plugin - *raw*: Raw reader - exposing max_raw_memory_mb - *tiff*: Fix TIFF export with EXIF data and I/O proxy - *ImageBuf*: Fix crash when mutable Iterator used with read-IB - *ImageBuf*: Improve IB::nsubimages and other related fixes - *ImageBuf*: Copy/paste error in the ImageBuf iterator copy constructor - *ImageBufAlgo*: IBA::to_OpenCV fails for ImageCache-backed images - *ImageBufAlgo*: Add missing version of warp - *ImageBufAlgo*: IBA::transpose() didn't set output image's format to input - *ImageBufAlgo*: Fix issue when computing perceptual diff - *ImageInput*: Only check REST arguments if the file does not exist, avoiding problems for filenames that legitimately contain a `?` character. - *fix*: Certain int->float type conversions in TypeDesc/ParamValueList - *color management*: Automatically recognize some additional color space name synonyms: "srgb_texture", "lin_rec709" and "lin_ap1". Also add common permutation "srgb_tx" and "srgb texture" as additional aliases for "srgb". - *color management*: Color management nomenclature improvements: "linear" is now just a legacy synonym for the preferred "lin_rec709", which is used widely where applicable. - *security*: Don't use (DY)LD_LIBRARY_PATH as plugin search paths - *fix*: Fix crash when no default fonts are found - *TextureSystem*: Fix missing initialization in TextureOptBatch - *iv*: Avoid crash with OpenGL + multi-channel images - *iv*: If OCIO env is not set or doesn't exist, have iv use built-in config - *iv*: Iv should enable the ImageCache - *ImageCache*: Simplify tile cache clearing. ### 🔧 Internals and developer goodies - *int*: Prevent infinite loop in bit_range_convert - *int*: More switching fprintf/etc to new style print - *int*: Various fixes for memory safety and reduce static analysis complaints - *int*: Use OIIO functions for byte swapping to make Sonar happy - *int*: More conversion to new string formatting - *int*: Added validity checks to PNG, JPEG, and EXR readers to try to catch implausible resolutions or channels that are likely to be corrupted or malicious images. - *int*: ImageInput: Initialize pixels of partial tile conversion buffer, avoiding possible floating point errors. - *bit.h*: Move bitcast, byteswap, and rotl/rotr to new bit.h - *bit.h*: OIIO::bitcast adjustments - *filesystem.h*: Filesystem::unique_path wasn't using the unicode rectified string - *filesystem.h*: IOProxy const method adjustments - *fmath.h*: One more fast_exp fix - *fmt.h*: Fix build break from recent fmt change - *hash.h*: Mismatched pragma push/pop in hash.h - *imagebuf.h*: Add `ImageBuf::wrapmode_name()`, inverse of wrapmode_from_string - *oiioversion.h*: Coalesce redundant STRINGIZE macros -> OIIO_STRINGIZE - *platform.h*: Belatedly change OIIO_CONSTEXPR14 to constexpr - *paramlist.h*: Add ParamValueSpan::get_bool() - *platform.h*: In platform.h, define OIIO_DEVICE macro - *simd.h*: Fix leaking of Imath.h into public headers - *simd.h*: Make all-architecture matrix44::inverse() - *simd.h*: AVX-512 round function - *simd.h*: Simplify vbool16 casting - *simd.h*: Address NEON issues - *simd.h*: Gather_mask was wrong for no-simd fallback - *simd.h*: For simd types, use default for ctrs and assignment where applicable - *simd.h*: Fix longstanding probem with 16-wide bitcast for 8-wide HW - *span.h*: Span and range checking enhancements - *span.h*: Make span default ctr and assignment be `= default` - *span.h*: Span utility improvements - *span.h*: Fold span_util.h contents into span.h - *span.h*: New utility functions `span_within()`, `check_span()`, and macro `OIIO_ALLOCA_SPAN`. - *string_view.h*: Deprecate OIIO::string_view::c_str() - *strutil.h*: Add `Strutil::eval_as_bool()` - *strutil.h*: Add `Strutil::string_is_identifier()` - *strutil.h*: Change Strutil::format to default to std::format conventions - *sysutil.h*: Deprecate Sysutil::physical_concurrency() - *texture.h*: Overload decode_wrapmode to support ustringhash - *typedesc.h*: Allow TypeDesc to have all the right POD attributes - *typedesc.h*: Add TypeDesc::Vector3i - *ustring.h*: Make sure C++ knows ustring & ustringhash are trivially copyable - *ustring.h*: Address ignored annotation nvcc warnings on explicitly-defaulted functions - *style*: Update our formatting standard to clang-format 17.0 and C++17 - *int*: Use spans to solve a number of memory safety issues - *cleanup*: Convert more old errorf() to errorfmt() - *fix*: Error retrieval safeguards for recycled objects - *fix*: Improve error messages when a font is not found - *refactor*: Oiiotool break out expression eval methods into separate file - *refactor*: Move most of imageio_pvt.h.in to just a regular .h - *refactor*: Simplify openexr includes - *fix*: Catch potential OCIO exception that we were missing - *fix*: Don't let fmtlib exceptions crash the app - *fix*: Beef up some error messages - *cleanup*: Remove code disabled as of 3.0 - *fix*: Address fmt exceptions for left justification ### 🏗 Build/test/CI and platform ports: * CMake build system and scripts: - Fix Cuda ustring.h warnings - Remove unnecessary headers from strutil.cpp causing build trouble - Print build-time warnings for LGPL gotchas - *build*: Make C++17 be the default C++ standard for building (C++14 is still the minimum for now and can be selected via CMAKE_CXX_STANDARD) - *build*: Provide compile_commands.json for use by tools - *build*: Don't fail for 32 bit builds because of static_assert check - *build*: Provide compile_commands.json for use by tools - *build*: Don't fail for 32 bit builds because of static_assert check - *build*: Better cmake verbose behavior - *build*: Fix include guard - *build*: Add a way to cram in a custom extra library for iv - *build*: Don't fail pybind11 search if python is disabled - *build*: Cleanup - get rid of "site" files - *build*: Fix buld_ninja.bash to make directories and download correctly - *build*: Need additional include - *build*: Make an OpenImageIO_Util_static library and target - *build*: Switch to target-based definitions - *build*: iv build issues with glTexImage3D - *build*: Restore internals of strhash to compile correctly on 32 bit architectures - *build*: LibOpenImageIO_Util does need DL libs, we removed it incorrectly - *build*: Fix missing target_link_options for libraries (by kaarrot) (2.6.2.0) - *build*: Disable clang18 warnings about deprecated unicode conversion - *build*: More warning elimination for clang18 - *build*: Add CMath target for the sake of static libtiff - *build*: Add appropriate compiler defines and flags for SIMD with MSVC - *build/windows*: Fix warning on windows - *build/windows*: Fix for setenv() on Windows - *build*: Gcc-14 support, testing, CI - *build*: New set_utils.cmake for various handy "set()" wrappers - *build*: Upgrade to more modern python3 finding - *build*: Add missing includes to libutil CMake target. - *build*: Avoid rebuilds due to processing of fmt headers - *build*: Rudimentary CUDA support infrastructure (experimental) - *build*: A few cmake cleanups and minor code rearrangements - *build*: Don't link libOpenImageIO against OpenCV - *build*: Fixed the sign compare causing build failure - *build*: Add a build option for profiling - *build*: Don't change CMAKE_XXX_OUTPUT_DIRECTORY when built as subdir - *build*: Add option for build profiling with clang -ftime-trace - *build*: Reduce compile time by trimming template expansion in IBA. * Dependency support: - *deps/OpenVDB*: Protect against mismatch of OpenVDB vs C++ - *deps/OpenVDB*: Adjust OpenVDB version requirements vs C++17 - *deps*: Ptex support for static library - *deps*: Account for header changes in fmt project trunk - *deps*: Deal with changes in fmt's trunk - *deps*: Remove Findfmt.cmake - *deps*: Correctly disable OpenVDB when it's incompatible - *deps*: Fixes for DCMTK - *deps*: Fix warning when Freetype is disabled - *deps*: Remove boost from strutil.cpp - *deps*: FindOpenColorIO failed to properly set OpenColorIO_VERSION - Use exported targets for libjpeg-turbo and bump min to 2.1 - *deps*: Support fmt 11.0 - *deps*: Support and test against OCIO 2.4 - *deps*: No need for OCIO search to use PREFER_CONFIG - *deps*: Raise CMake minimum to 3.18.2 - *deps*: Remove the enforced upper version limit for fmt - *deps*: Search for libbz2 only if FFmpeg or FreeType is enabled. * Testing and Continuous integration (CI) systems: - Tests for ABI compliance - *tests*: Imagebuf_test add benchmarks for iterator traversal - *tests*: Add opencv regression test - *tests*: Improve color management test in imagebufalgo_test - *tests*: Add one more ref output for python-colorconfig test - *tests*: Shuffle some tests between directories - *tests*: Fix docs test, used wrong namespace - *tests/fixes*: Fixes to reduce problems identified by static analysis - *tests*: Add test for filter values and 'filter_list' query - *tests*: Add new heif test output - *tests*: Fix windows quoting for test - *tests*: Remove unused test output ref from old dependency versions - *tests*: Add switch to imageinout_test for enabling floating point exceptions. - *tests*: Fixup after directory refactor of OpenImageIO-images - *ci*: Some straggler repo renames in the workflows - *ci*: CI tests on MacOS ARM, and fixes found consequently - *ci*: Nomenclature change 'os' to 'runner' for clarity - *ci*: Add tiff-misc reference for slightly changed error messages - *ci*: Remove MacOS-11 test - *ci*: Test against gcc-13 - *ci*: Restrict Mac ARM running - *ci*: Rename macro to avoid conflict during CI unity builds - *ci*: Repair Sonar scanner analysis - *ci*: Improve parallel builds by basing on number of cores - *ci*: Update all github actions to their latest versions that's compatible - *ci*: Bump 'latest' test to newer dep versions, document - *ci*: Revert to fix scorecard analysis, try version 2.0.6 (2.6.0.3) - *ci*: Start using macos-14 ARM runners, bump latest OCIO - *ci*: Switch away from deprecated GHA idiom set-output - *ci*: Add vfx platform 2024 - *ci*: Fix Windows CI, need to build newer openexr and adjust boost search - *ci*: Adjust GHA upload-artifact action version - *ci*: Allow triggering CI workflow from web - *ci*: Make one of the Mac tests build for avx2 - *ci*: Enable Windows 2022 CI tests - *ci*: Update scrorecard workflow to fix breakage - *ci*: Fix broken Windows CI by building our own libtiff - *ci*: Typo in build_libtiff.bash - *ci*: For Windows CI, build only release of vcpkg packages - *ci*: New tets: oldest, hobbled, localbuilds - *ci*: Fix GHA CI after they upgraded nodejs - *ci*: Sanitizer new warnings about signed/unsigned offsets in openexr - *ci*: Deal with CentOS 7 EOL and disappearance of yum mirrors - *ci*: CI sanitizer test improvements - *ci*: Add a workflow that builds docs - *ci*: Streamline the old MacOS-12 CI test - *ci*: Test against OpenEXR 3.3 and deal with its 4.0 bump - *ci*: Make scrorecards workflow not fail constantly - *ci*: Limit when automatic docs building ci happens - *ci*: Retire deprecated macos12 runner, try beta macos15 * Platform support: - *win*: Fix building failed from source on Windows ### 📚 Notable documentation changes: - *docs*: Convert code examples within the docs to tests that are built executed as part of the testsuite. - Spruce up the main README and add "Building_the_docs" - *docs*: Make an example of doc-to-test in the imagebufalgo chapter - *docs*: Convert examples within the imagebufalgo chapter. - *docs*: Added tests for Simple Image input and updated rst - *docs*: Convert make_texture doc examples to tests - *docs*: Fix RTD configuration for v2 - *docs*: Update INSTALL.md to reflect the latest versions we've tested against - *docs*: Fix typo - *docs*: Minor change to formatting and naming - *docs*: Fix link to openexr test images - *security*: Document CVE-2023-42295 (2.6.0.1) - *docs*: Fix broken IBA color management documentation - *docs*: Update SECURITY and RELEASING documentation - *docs*: Fix tab that was missing from the rendering on rtd - *docs*: Fix python example - *docs*: Fix some typos and add missing oiiotool expression explanations - *docs*: Update INSTALL.md for windows - *doc*: Add missing documentation of ImageBuf locking methods - *doc*: Fixes to formatting and sphinx warnings - *docs*: Clarify that IBA::rotate params are pixel coordinates - *docs*: Clarify TextureSystem::create use of imagecache when shared=true - *docs*: Fix typo where apostrophe was used for possessive of 'it' - *docs/security*: Document CVE-2024-40630 resolution (2.6.3.0) - *docs*: IBA::st_warp was missing from the documentation - *docs*: Move some docs files around - *docs*: Various minor fixes - *docs*: Add documenting comments where missing in string_view and span - *docs*: Fix typo in description of Strutil::parse_values ### 🏢 Project Administration - *admin*: Repo rename -- fix all URL references - *admin*: Alert slack "release-announcements" channel upon OIIO release - *admin*: Relicense more code under Apache 2.0 - *admin*: Account for duplicate emails in the .mailmap - *admin*: Add a ROADMAP document - *docs*: Better documentation of past CVE fixes in SECURITY.md - *admin*: More CLA explanation and how-to links - *admin*: Add deprecation updates to the RELEASING checklist - *admin*: Document my git-cliff workflow for release notes - *admin*: Change docs and comments references master -> main - *admin*: Update OpenImageIO Roadmap - *admin*: Update SECURITY.md for 3.0 beta @ text @$NetBSD: patch-src_cmake_compiler.cmake,v 1.3 2024/06/26 16:26:24 adam Exp $ Disable custom rpath handling that conflicts with pkgsrc. --- src/cmake/compiler.cmake.orig 2025-08-13 06:30:18.571566460 +0000 +++ src/cmake/compiler.cmake @@@@ -688,36 +688,6 @@@@ endif () ########################################################################### -# Rpath handling at the install step -# -# set (MACOSX_RPATH ON) -if (CMAKE_SKIP_RPATH) - # We need to disallow the user from truly setting CMAKE_SKIP_RPATH, since - # we want to run the generated executables from the build tree in order to - # generate the manual page documentation. However, we make sure the - # install rpath is unset so that the install tree is still free of rpaths - # for linux packaging purposes. - set (CMAKE_SKIP_RPATH FALSE) - unset (CMAKE_INSTALL_RPATH) -else () - if (NOT CMAKE_INSTALL_RPATH) - if(APPLE) - set(BASEPOINT @@loader_path) - else() - set(BASEPOINT $ORIGIN) - endif() - set (CMAKE_INSTALL_RPATH ${BASEPOINT} - ${BASEPOINT}/${CMAKE_INSTALL_LIBDIR} - ${BASEPOINT}/../${CMAKE_INSTALL_LIBDIR}) - endif () - # add the automatically determined parts of the RPATH that - # point to directories outside the build tree to the install RPATH - set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - message (VERBOSE "CMAKE_INSTALL_RPATH = ${CMAKE_INSTALL_RPATH}") -endif () - - -########################################################################### # Generate compile_commands.json for use by editors and tools. set (CMAKE_EXPORT_COMPILE_COMMANDS ON) @ 1.3 log @openimageio: updated to 2.5.12.0 OpenImageIO v2.5.12.0 exr: Add IOProxy support for EXR multipart output pnm: Improvements to pnm plugin: support for uint16 and 32-float, "pnm:bigendian" and "pnm:pfmflip" controls for output. ImageBuf: Improve behavior of IB::nsubimages and other related fixes simd.h: Fix longstanding problem with 16-wide bitcast for 8-wide HW strutil.h: Add Strutil::eval_as_bool tests: Add new heif test output tests: Fix windows quoting for test build: More warning elimination for clang18 build: Add appropriate compiler defines and flags for SIMD with MSVC build: Gcc-14 support, testing, CI docs: Fix stray references to the old repo home @ text @d1 1 a1 1 $NetBSD: patch-src_cmake_compiler.cmake,v 1.2 2023/10/15 19:52:09 ryoon Exp $ d5 1 a5 1 --- src/cmake/compiler.cmake.orig 2024-06-01 19:59:05.000000000 +0000 d7 1 a7 2 @@@@ -632,27 +632,6 @@@@ if (DEFINED ENV{${PROJECT_NAME}_CI}) endif () d10 1 a10 1 -########################################################################### d24 8 a31 1 - set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}") d38 5 a43 2 ########################################################################### @ 1.2 log @openimageio: Update to 2.5.4.0 Changelog: Release 2.5 (2.5.4.0, Oct 1, 2023) -- compared to 2.4 New minimum dependencies and compatibility changes: CMake: minimum needed to build OpenImageIO has been raised from 3.12 to 3.15. #3924 (2.5.2.1) LibRaw: minimum has ben raised from 0.15 to 0.18. #3921 (2.5.2.1) The new OpenEXR minimum is 2.4 (raised from 2.3). #3928 (2.5.2.1) The new fmt library minimum is 7.0 (raised from 6.1) #3973 (2.5.3.0) The new libjpeg-turbo (if used; it is optional) has been raised to 2.1. #3987 (2.5.3.1-beta2) ️ New features and public API changes: TextureSystem color management: #3761 (2.5.1.0) TextureOpt and TextureOptBatch have a new field, colortransformid, which supplies an integer ID for a requested color space transformation to be applied as texture tiles are read. The default value 0 means no transformation because the texture is presumed to be in the working color space (this is the old behavior, and most performant). Tiles from the same texture file but using different color transformations are allowed and will not interfere with each other in the cache. New TextureSystem::get_colortransform_id(from, to) maps from/to named color spaces to a color transform ID that can be passed to texture lookup calls. ImageCache::get_image_handle and TextureSystem::get_texture_handle now take an optional TextureOpt* parameter that can supply additional constraints (such as color transformation) that TS/IC implementations may wish to split into separate handles. This is currently not used, but is reserved so that the API doesn't need to be changed if we use it in the future. texture.h defines symbol OIIO_TEXTURESYSTEM_SUPPORTS_COLORSPACE that can be tested for existence to know if the new fields are in the TextureOpt structure. Extensive support for OpenColorIO 2.2 functionality and improved color management: When building against OCIO 2.2, you can specify/use the new "built-in" configs, including using ocio://default, which will automatically be usd if no config is specified and the $OCIO variable is not set #3662 #3707 (2.5.0.0) OIIO tries to find and honor the common color space aliases "scene_linear", "srgb", "lin_srgb", and "ACEScg". When building against OCIO 2.2+, it will know which of any config's color spaces are equivalent to these, even if they are named something totally different, thanks to the magic of OCIO 2.2 built-in configs. For older OCIO (2.1 or older), it is less robust and may have to make best guesses based on the name of the color spaces it finds. #3707 (2.5.0.0) #3995 (2.5.3.2-rc1) New ColorConfig methods: getAliases() #3662; isColorSpaceLinear() #3662; resolve(name) turns any color space name, alias, role, or OIIO name (like "sRGB") into a canonical color space name; equivalent(n1,n2) returns true if it can tell that the two names refer, ultimately, to equivalent color spaces #3707 (2.5.0.0) New ImageSpec::set_colorspace() method is a more thorough way to set the color space data than simply setting the "oiio:ColorSpace" metadata (though it also does that). #3734 (2.5.0.1) Improve OIIO's ability to guess which of the config's color space names are aliases for common spaces such as srgb, lin_srgb, and acescg (quite robustly if using OCIO >= 2.2, even for totally nonstandard names in the config). #3755 (2.5.0.1) New ColorConfig::getColorSpaceIndex() looks up a color space index by its name, alias, or role. #3758 (2.5.0.1) oiiotool new commands and features: New --iccread and --iccwrite add an ICC profile from an external file to the metadata of an image, or extract the ICC profile metadata and save it as a separate file. #3550 (2.5.0.0) New --parallel-frames parallelizes execution over a frame range rather than over regions within each image operation. This should be used with caution, as it will give incorrect results for an oiiotool command line involving a frame range where the iterations have a data dependency on each other and must be executed in order. But in cases where the order of frame processing doesn't matter and there are many more frames in the sequence than cores, you can get a substantial performance improvement using this flag. #3849 (2.5.2.0) New --no-error-exit causes an error to not exit immediately, but rather to try to execute the remaining command line operations. This is intended primarily for unit tests and debugging. #3643 (2.5.0.0) New --colorconfiginfo prints the full inventory of color management information, including color space aliases, roles, and with improved readability of output for larger configs. #3707 (2.5.0.0) The --resize command takes new optional :from=, :to=, and :edgeclamp= modifiers to give more general and fine control over the specific correspondence between display windows in the input image and resized destination image (including allowing partial pixel offsets). #3751 #3752 (2.5.0.1) New expression substitution additions: New syntax for retrieving metadata {TOP[foo]} is similar to the existing {TOP.foo}, if there is no foo metadata found, the former evaluates to an empty string, whereas the latter is an error. #3619 (2.4.5/2.5.0.0) {NIMAGES} gives current stack depth #3822 (2.5.2.0) {nativeformat} is the pixel data format of the file, whereas the existing format has always returned the data type used in memory. Also, METANATfull metadata keywords for native file metadata, comapred to the previously existing META and METABRIEF which we now clarify reflect the in-memory representation. #3639 (2.5.0.0) --ociodisplay now takes an optio (2.5.0.0) New -otex optional modifier forcefloat=0 can improve memory use for enormous texture conversion. #3829 (2.5.2.0) --printinfo now takes new optional modifiers: :native=1 ensures that the metadata printed the file, not changed by the way the image is stored in memory (for example, it may have been converted to a more convenient in-memory data type); :verbose=1 prints verbose stats even if -v is not used; :stats=1 prints full pixel ul for normal maps. #3945 (by Vlad (Kuzmin) Erium) (2.5.3.0) ImageBufAlgo additions: A new flavor of ociodisplay() now contains an inverse parameter. #3650 (2.5.0.0) New normalize() normalizes image that represent 3D vehelpful for normal maps. #3945 (by Vlad (Kuzmin) Erium) #3963 (2.5.3.0) ImageBuf changes: ImageBuf: Only back IB with IC when passed an IC #3986 (2.5.3.1-beta2) ImageInput / ImageOutput: New ImageOutput::check_open() method can be used by format writers authors to centralize certain validity tests so they don't need to be implemented separately for each file type. This is not meant to be called by client application code, only by format writer authors. #3686 (2.5.0.0) Add an ImageInput::valid_file(IOProxy) overload #3826 (by Jesse Y) (2.5.2.0) and implement its overloads for DDS, PSD, and WEBP #3831 (by Jesse Y) (2.5.2.0) New ImageOutput::check_open() and ImageInput::open_check() can be used by format reader/writer authors to centralize certain validity tests so they don't need to be implemented separately for each file type. This is not meant to be called by client application code, only by format reader/writer authors. #3686 (2.5.0.0) #3967 (2.5.3.0) ImageInput: Add an ImageInput::valid_file(IOProxy) overload #3826 (by Jesse Y) (2.5.2.0) ImageInput: Implement valid_file(IOProxy) overloads for DDS, PSD, and WEBP #3831 (by Jesse Y) (2.5.2.0) New top-level namespace OIIO functions: OIIO::shutdown() method #3882 (by Ray Molenkamp) OIIO::default_thread_pool_shutdown() #2382 OIIO::print() exposes Strutil::print() in the main OIIO namespace. #3667 (2.4.6/2.5.0.0) OIIO::getattribute() new queries: font_list, font_file_list, font_dir_list return, respectively, the list of fonts that OIIO found, the list of full paths to font files, and the list of directories searched for fonts. All return a single string that is a semicolon-separated list of the items. #3633 (2.5.0.0) opencolorio_version returns the human-readable (e.g. "2.2.0") version of OpenColorIO that is being used. #3662 (2.5.0.0) Python bindings: Implement ImageCache.get_imagespec() #3982 (2.5.3.1-beta2) IOProxy support for additional file formats: SGI #3641, RLA #3642, IFF #3647 (2.5.0.0), ICO input #3919 (by jasonbaumeister) (2.5.2.0) Remove long deprecated/nonfunctional C API headers #3567 Performance improvements: Fixed some ImageBuf and IBA internals to avoid unnecessary/redundant zeroing out of newly allocated buffer memory. #3754 (2.5.0.1) oiiotool: --parallel-frames parallelizes execution over a frame range rather than over regions within each image operation. #3849 (2.5.2.0) psd: Improve memory efficiency of PSD read #3807 (2.5.2.0) Improvements to performance and memory when making very large textures #3829 (2.5.2.0) OpenEXR: Change to using exr-core for reading by default #3788 TextureSystem: Improve texture lookup performance by remove redundant instructions from tile hash #3898 (by Curtis Black) (2.5.2.0) oiiotool: --mosaic improvements to type conversion avoid unnecessary copies and format conversions. #3979 (2.5.3.1-beta2) Fixes and feature enhancements: ImageInput: fix typo in debug output #3956 (by Jesse Yurkovich) Python bindings: Add ability to getattribute() of int64 and uint64 data #3555 (2.5.0.0) Fixed ability to add and retrieve uint8[] metadata, which on the python side will be numpy arrays of type uint8 (dtype='B'). This is important for being able to set and retrieve "ICCProfile" metadata. #3556 (2.5.0.0) Eliminate redundant code in Python IBA bindings #3615 Improve error messages for when passing incorrect python array sizes. #3801 (2.5.1.0) Fix arithmetic overflow in oiio_bufinfo (Python interop) #3931 (by Jesse Yurkovich) (2.5.2.0) ImageBuf improvements: Fixes to subtle bugs when ImageBuf is used with IOProxy. #3666 (2.4.6/2.5.0.0) Auto print uncaught ImageBuf errors. When an IB is destroyed, any errors that were never retrieved via geterror() will be printed, to aid users who would not notice the errors otherwise. #3949 (2.5.3.0) oiiotool now does immediate reads without relying on an ImageCache, unless the --cache option is used, which now both enables the use of an underlying IC as well as setting its size. #3986 (2.5.3.1-beta2) ImageBufAlgo improvements: IBAPrep should not zero out deep images when creating a new destination image. #3724 (2.5.0.0/2.4.8.0) Improve error message for IBA::ocio functions #3887 UTF-8 text rendering fixes #3935 (by Nicolas) (2.5.3.0) make_texture() / maketx / TextureSystem / ImageCache: Ensure proper setting of certain metadata when using a texture as a source to build another texture. #3634 (2.4.5/2.5.0.0) Minor improvements in statistics printing for IC. #3654 (2.5.0.0) When creating a texture, don't overwrite an existing DateTime metadata in the source file. #3692 (2.5.0.0) Fix environment mapping in batch mode when >4 channels are requested in a lookup. #3694 (2.5.0.0) Fixed maketx --lightprobe, which never worked properly for images that weren't float pixel data type. #3732 (2.5.0.0/2.4.7.0) Fix bad handling of maketx --cdf, which was trying to take an extra command line argument that it didn't need. #3748 (2.5.0.1) Improve IC statistics appearance by omitting certain meaningless stats when no files wer scenarios with very high thread contention. #3784 (2.4.10.0/2.5.0.3) maketx and oiiotool --otex: Add support for CDFs of bumpslopes channels. Previously, if you used both --bumpslopes and --cdf at the same time, the CDFs we) is used, and when an error occurs, only print the error message and not the full help message. #3649 (2.5.0.0) Fix problems with --point when there is no alpha channel. #3684 (2.4.6/2.5.0.0) --dumpdata fix channel name od config file). Use the new --colorconfiginfo argument to print the full color management information, which is both more readable and more detailed than what --help used to print. #3707 (2.5.0.0) Don't propagate unsupporteius) ICC Profiles found in JPEG, JPEG-2000, PSN, PSD, and TIFF files are now examined and several key fields are extracted as separate metadata. #3554 (2.5.0.0) Various protections against corrupted files #3954 (2.5.3.0) BMP: Fix reading 16bpp images. #3592 (by Aras Pranckevičius) (2.4.5/2.5.0.0) Protect against corrupt pixel coordinates. (TALOS-2022-1630, CVE-2022-38143) #3620 (2.4.5/2.5.0.0) Fix possible write errors, fixes TALOS-2022-1653 / CVE-2022-43594, CVE-2022-43595. #3673 (2.4.6/2.5.0.0) Mark color space as sRGB, which seems likely to be true of any BMP files anybody encounters. #3701 (2.5.0.0) Fix signed integer overflow when computing total number of pixels #3948 (by xiaoxiaoafeifei) (2.5.3.0) DDS: Fix heap overflow in DDS input. #3542 (2.5.0.0) Improved support for DTX5, ATI2/BC5 normal maps, R10G10B10A2 format, RXGB, BC4U, BC5U, A8, improved low bit expansion to 8 bits. #3573 (by Aras Pranckevičius)(2.4.4.2/2.5.0.0) Fix alpha/luminance files, better testing. #3581 (by Aras Pranckevičius) (2.4.5/2.5.0.0) Optimize loading of compressed images, improves 3-5x. #3583 (by Aras Pranckevičius) #3584 (2.4.5/2.5.0.0) Honor ImageInput thread policy #3584 Fix crashes for cubemap files when a cube face was not present, and check for invalid bits per pixel. (TALOS-2022-1634, CVE-2022-41838) (TALOS-2022-1635, CVE-2022-41999) #3625 (2.4.5/2.5.0.0) (TALOS-2022-1635, CVE-2022-41999) #3625 (2.4.5/2.5.0.0) Fix divide-by-0 during DXT4 DDS load #3959 (by Jesse Yurkovich) (2.5.3.0) DPX: Fix possible write errors, fixes TALOS-2022-1651 / CVE-2022-43592 and TALOS-2022-1652 / CVE-2022-43593. #3672 (2.4.6/2.5.0.0) FITS: Ensure that the file is closed if open fails to find the right magic number. #3771 (2.5.1.0) GIF: Fix potential array overrun when writing GIF files. #3789 (2.4.10.0/2.5.1.0) Prevent heap-buffer-overflow #3841 (2.5.2.0) (by xiaoxiaoafeifei) HEIC: Support the ".hif" extension, which seems to be used by some Canon cameras instead of .heif. #3813(by AdamMainsTL) HDR: Fix a 8x (!) read performance regression for HDR files that was introduced in OIIO in 2.4. On top of that, speed up by another 4x beyond what we ever did before by speeding up the RGBE->float conversion. #3588 #3590 (by Aras Pranckevičius) (2.4.5/2.5.0.0) ICO: Heap-buffer-overflow #3872 (by xiaoxiaoafeifei) Fixes CVE-2023-36183. IFF: Protect against 0-sized allocations. #3603 (2.5.0.0) IOProxy support. #3647 (2.4.6/2.5.0.0) FIXME Temporarily disable IOProxy support to avoid bugs in #3760 (2.5.0.1) Fix possible write errors, fixes TALOS-2022-1654 / CVE-2022-43596, TALOS-2022-1655 / CVE-2022-43597 CVE-2022-43598, TALOS-2022-1656 / CVE-2022-43599 CVE-2022-43600 CVE-2022-43601 CVE-2022-43602 #3676 (2.4.6/2.5.0.0) Catch possible exception, identified by static analysis #3681 JPEG jpeg: Fix density calculation for jpeg output #3861 (2.5.2.0) (by Loïc Vital) JPEG2000: Better pixel type promotion logic #3878 (2.5.2.0) OpenEXR: Fix potential use of uninitialized value when closing. #3764 (2.5.0.1) Try to improve exr thread pool weirdness #3864 (2.5.2.0) Controlled shutdown of IlmThread pool in all apps in which we use it. #3805 (2.5.2.0) Correction to dwa vs zip logic when outputting OpenEXR #3884 (2.5.2.0) Enable openexr core library by default when recent enough #3942 (2.5.3.0) PBM: Fix accidental inversion for 1-bit bitmap pbm files. #3731 (2.5.0.0/2.4.8.0) PNG: Fix memory leaks for error conditions. #3543 #3544 (2.5.0.0) Add EXIF write support to PNG output. #3736 (by Joris Nijs) (2.5.0.1) Write out proper tiff header version in png EXIF blobs #3984 (by Jesse Yurkovich) (2.5.3.1-beta2) A variety of minor optimizations to the PNG writer #3980 (2.5.3.2-rc1) Improve PNG write data quality when alpha is low #3985 (2.5.3.2-rc1) PSD: Fix a PSD read error on ARM architecture. #3589 (2.4.5/2.5.0.0) Protect against corrupted embedded thumbnails. (TALOS-2022-1626, CVE-2022-41794) #3629 (2.4.5/2.5.0.0) Fix thumbnail extraction. #3668 (2.4.6/2.5.0.0) When reading, don't reject padded thumbnails. #3677 (2.4.6/2.5.0.0) Fix wrong "oiio:UnassociatedAlpha" metadata. #3750 (2.5.0.1) Handle very wide images with more than 64k resolution in either direction. #3806 (2.5.1.0/2.4.11) Improve memory efficiency of PSD read #3807 (2.5.2.0) Prevent simultaneous psd thumbnail reads from clashing #3877 CMYK PSD files now copy alpha correctly #3918 (by jasonbaumeister) (2.5.2.0) RAW: Add color metadata: pre_mul, cam_mul, cam_xyz, rgb_cam. #3561 #3569 #3572 (2.5.0.0) Update Exif orientation if user flip is set. #3669 (2.4.6/2.5.0.0) Correctly handle 1-channel raw images. #3798 (2.5.1.0/2.4.11.0) Fix LibRaw flip to Exif orientation conversion #3847 #3858 (2.5.2.0) (by Loïc Vital) RLA: Fix potential buffer overrun. (TALOS-2022-1629, CVE-2022-36354) #3624 ( Fix possible invalid read from an empty vector during RLA load #3960 (by Jesse Yurkovich) (2.5.3.0) SGI: IOProxy support. #3641 (2.5.0.0) Targa: Fix incorrect unique_ptr allocation. #3541 (2.5.0.0) Fix string ovted tga files Fixes TALOS-2023-1707 / CVE-2023-24473, TALOS-2023-1708 / CVE-2023-22845. #3768 (2.5.1.0/2.4.8.1) TIFF: Guard against corrupt files with buffer overflows. (TALOS-2022-1627, CVE-2022-41977) #3628 (2.4.5/2.5.0.0) #3632 (2.4.5/2.5.0.0) While building against the new libtiff 4.5, use its new per-tiff error handlers to ensure better thread safety. #3719 (2.5.0.0/2.4.8.0) Better logic for making TIFF PhotometricInterpretation tag and oiio:ColorSpace metadata correspond to each other correctly for TIFF files. #3746 (2.5.0.1) Fix: race condition in TIFF reader, fixes TALOS-2023-1709 / CVE-2023-24472. #3772 (2.5.1.0/2.4.8.1) Disable writing TIFF files with JPEG compression -- it never worked properly and we can't seem to fix it. The fact that nobody noticed that it never worked is taken as evidence that nobody needs it. If asked for, it just uses the default ZIP compression instead. The TIFF reader can still read JPEG-compressed TIFF files just fine, it's only writing that appears problematic. #3791 (2.5.0.4) Zfile: Zfile write safety, fixes TALOS-2022-1657 / CVE-2022-43603. #3670 (2.4.6/2.5.0.0) Exif (all formats that support it, TIFF/JPEG/PSD): Fix EXIF bugs where corrupted exif blocks could overrun memory. (TALOS-2022-1626, CVE-2022-41794) (TALOS-2022-1632, CVE-2022-41684) (TALOS-2022-1636 CVE-2022-41837) #3627 (2.4.5/2.5.0.0) Fix typo that prevented us from correctly naming Exif "CameraElevationAngle" metadata. #3783 (by Fabien Castan) (2.4.10.0/2.5.1.0) Convert paramvalue string to integer when needed #3886 (by Fabien Servant @@ TCS) (2.5.2.0) Squash some alignment problems caught by ubsan #3646 Fix missing OIIO::getattribute support for limits:channels and limits:imagesize_MB. #3617 (2.4.5/2.5.0.0) IBA::render_text and oiiotool --text now can find ".ttc" font files. #3633 (2.5.0.0) Fix ImageOutput::check_open error conditions. #3769 (2.5.1.0) Fix thread safety issue when reading ICC profiles from multiple files simultaneously. This could affect any files with ICC profiles. #3767 (2.5.1.0) Improve searching for fonts for the text rendering functionality. #3802 #3803 (2.5.1.0) Improve OpenCV support -- errors, version, half #3853 (2.5.2.0) Prevent possible deadlock when reading files with wrong extensions #3845 Wait for terminated threads to join in thread_pool::Impl::resize #3879 (by Ray Molenkamp) Internals and developer goodies filesystem.h: Add an optional size parameter to read_text_file() to limit the maximum size that will be allocated and read (default to a limit of 16MB). New read_text_from_command() is similar to read_text_file, but reads from the console output of a shell command. #3635 (2.5.0.0) New Filesystem::is_executable() and find_program(). #3638 (2.4.6/2.5.0.0) Change IOMemReader constructor to take a const buffer pointer. #3665 (2.4.6/2.5.0.0) IOMemReader::pread now detects and correctly handles out-of-range read positions. #3712 (2.4.7/2.5.0.0) fmath.h: Fix a wrong result with fast_exp2() with MSVS and sse4.2. #3804 (by Eric Mehl) (2.5.1.0/2.4.11) Prevent infinite loop in bit_range_convert #3996 (by Jesse Yurkovich) (2.5.3.2-rc1) platform.h: New macros for detecting MSVS 2019 and 2022. #3727 (2.5.0.0/2.4.8.0) simd.h: Fixes to ensure safe compilation for Cuda. #3810 (2.5.1.0/2.4.11) Fix sense of hiding deprecated type names #3870 (2.5.2.0) Fix broken OIIO_NO_NEON definition #3911 span.h: cspan<> template now allows for Extent template argument (as span<> already did). #3685 (2.5.0.0) New custom fmt formatter can print spans. #3685 (2.5.0.0) string_view.h: Avoid sanitizer warning unsigned integer overflow #3678(by wayne-arnold-adsk) strutil.h: Add a new flavor of utf16_to_utf8() to convert between std::u16string and std::string (UTF-8 encoded). Note the contrast between this and the existing flavor that takes a std::wstring with UTF-16 encoding (std::wchar/wstring is not guaranteed to 16 bits on all platforms, but u16char/u16string is). #3553 (2.5.0.0) New trimmed_whitspace(). #3636 (2.4.5/2.5.0.0) Use std::forward properly for sync::print(). #3825 (2.5.2.0) Ensure proper constexpr of string hashing #3901 timer.h: Minor improvements to Timer and LoggedTimer classes. #3753 (2.5.0.1) tiffutils.h: decode_icc_profile extracts several fields from an ICC profile binary blob and adds them as metadata to an ImageSpec. #3554 (2.5.0.0) typedesc.h: Extend TypeDescFromC template to the full set of pixel types. #3726 (2.5.0.0/2.4.8.0) ustring.h: Make std::hash work for ustring, add operator< for ustringhash, add from_hash() to ustringhash, make ustringhash == and != be constexpr for C++17 and beyond. #3577 (2.4.5/2.5.0.0) Custom fmt formatter for ustringhash that prints the string rather than the hash. #3614 (2.4.5/2.5.0.0) Ensure that ustring hashes are always 64 bits, even on 32-bit architectures. #3606 (2.5.0.0) Ensure safe use of this header from Cuda. #3718 (2.4.7/2.5.0.0) ustringhash: Make an explicit constructor from a hash value. #3778 (2.4.9.0/2.5.1.0) String literal operator for ustring and ustringhash #3939 (2.5.3.0) Fix Cuda warnings #3978 (2.5.3.1-beta2) Safety: excise the last instances of unsafe sprintf. #3705 (2.5.0.0) Root out stray uses of deprecated simd type names; OIIO_DISABLE_DEPRECATED #3830 (2.5.2.0) Convert iconvert.cpp stream io and sprintf to modern #3925 oiiotool: Refactor to get rid of the global Oiiotool singleton. #3848 (2.5.2.0) 🏗 Build/test/CI and platform ports: CMake build system and scripts: It is now possible to -DOpenImageIO_VERSION to override the version number being built (use with extreme caution). #3549 #3653 (2.5.0.0) Perform parallel builds with MSVS. #3571 (2.5.0.0) New CMake cache variable FORTIFY_SOURCE, if enabled, builds with the specified gcc _FORTIFY_SOURCE option defined. This may be desirable for people deploying OIIO in security-sensitive environments. #3575 (2.4.5/2.5.0.0) CMake config should not include a find of fmt if it's internalized. #3739 (2.4.7.1/2.5.0.0) New CMake cache variable OIIO_DISABLE_BOOST_STACKTRACE to disable the stacktrace functionality for users who want to avoid the Boost stacktrace library. #3777 (by jreichel-nvidia) (2.4.9.0/2.5.1.0) Check need for libatomic with check_cxx_source_compiles instead of the more expensive check_cxx_source_runs. #3774 (2.4.9.0/2.5.1.0) Fix incorrect CMake variable name to control symbol visibility #3834 (2.5.2.0) Make sure use of ${PROJECT_NAME} doesn't occur before the call to project(). #3651 Fix use of OIIO_LOCAL_DEPS_PATH #3865 Added check for Boost_NO_BOOST_CMAKE, ignore if already set #3961 (by Mikael Sundell) (2.5.3.0) Remove unnecessary headers from strutil.cpp causing build trouble #3976 (by Jesse Yurkovich) (2.5.3.1-beta2) Print build-time warnings for LGPL gotchas #3958 (by Danny Greenstein) (2.5.3.1-beta2) Dependency support: Support for OpenColorIO 2.2. #3644 (2.5.0.0) New CMake option INTERNALIZE_FMT (default ON), if set to OFF, will force OIIO clients to use the system fmt library and will not copy the necessary fmt headers into the OIIO include area. #3598 (2.4.7/2.5.0.0) build_libtiff.bash changed to build shared library by default. #3586 (2.5.0.0) build_openexr.bash changed to build v3.1.5 by default. #3703 (by Michael Oliver) (2.5.0.0) Qt6 support for iv. #3779 (2.4.9.0/2.5.1.0) Fmt 10.0 support #3836 (2.5.2.0) FFmpeg 6.0 support #3812 (2.5.2.0) Disable new warning for fmt headers in gcc13 #3827 (2.5.2.0) Raise minimum CMake dependency from 3.12 to 3.15 #3924 (2.5.2.0) Raise minimum libraw to 0.18 #3921 (2.5.2.0) Raise OpenEXR minimum from 2.3 to 2.4 #3928 (2.5.2.0) Fix WebP linking if CMAKE_FIND_PACKAGE_PREFER_CONFIG is ON #3863 (by Benjamin Buch) Find OpenEXR equally well with our FindOpenEXR and exr's exported config file #3862 (by Benjamin Buch) Fix fmt vs gcc warning that had version typo #3874 Fix broken libheif < 1.13 #3970 (2.5.3.0) Use exported targets for libjpeg-turbo and bump min to 2.1 #3987 (2.5.3.1-beta2) Testing and Continuous integration (CI) systems: Restored sanitizer tests which had been inadvertently disabled. #3545 (2.5.0.0) Added tests for undefined behavior sanitizer. #3565 (2.5.0.0) n files #3607, iinfo #3605 #3613 #3688 #3706, texture statistics #3612, oiiotool unit tests #3616, oiiotool expression substitution #3636, various oiiotool #3626 #3637 #3643 #3649, oiiotool control flow #3643, oiiotool sequence errors and selecting out of range subimages or mip levels #3649, Strutil functionality #3655, ImageCache #3654, environment mapping #3694, texture3d #3699, term output #3714, igrep #3715, oiiotool --pdiff #3723, zover, fixnan ep images, 2D filters #3730, pbm files #3731, maketx --lightprobe #3732 (2.5.0.0), TypeDesc::tostring, python ImageCache and ImageBuf #3745, maketx #3748 (2.5.0.1), ImageBufAlgo python functions #3766 (2.5.1.0), etc. #3745 CI color related tests use the OCIO buit-in configs, when OCIO 2.2+ is available. #3662 (2.5.0.0) Fix compiler warnings #3833 (2.5.2.0) Fix package name for icc #3860 (2.5.2.0) Change the few symbolic links to copies to help Windows #3818 (2.5.2.0) Fix incorrect branch name when cloning openexr-images for the tests #3814 (2.5.2.0) (by Jesse Y) Sonar analysis should exclude stb_sprintf.h #3609 Eliminate xxhash and farmhash code from coverage analysis #3621 No longer add the ppa:ubuntu-toolchain-r/test repository #3671 Test against latest webp, and deal with its master->main repo change #3695 Fix broken Mac CI with proper numpy install #3702 Lock down to older icc so it's not broken #3744 Updates to runners, dependencies #3786 Bump 'latest versions' test to the newest openexr release #3796 Fix broken heif dependency and test #3894 Add test with new aswf containers for VFX Platform 2023 #3875 Simplify build_llvm.bash script #3892 Get rid of long-unused install_test_images.bash #3895 Test against pybind11 v2.11 #3912 Lock down icx version #3929 Fix missing simd test due to copy paste typo #3896 Bump build_openexr and build_opencolorio defaults to latest versions #3920 Test both openexr old and core versions #3604 Add benchmarking of strutil.h ways to concatenate strings. #3787 Make timer_test more robust #3953 (2.5.3.0) Tests for ABI compliance #3983, #3988 (2.5.3.1-beta2) Platform support: Windows: protect against OpenEXR thread deadlock on shutdown. #3582 (2.4.5/2.5.0.0) Windows: Work around a static destruction order issue. #3591 (2.4.5/2.5.0.0) Windows: define NOGDI to keep the inclusion of windows.h from adding as many unneeded symbols. #3596 (by Aras Pranckevičius) (2.4.5/2.5.0.0) Windows: Stop including Windows.h from public OIIO headers. #3597 (by Aras Pranckevičius) (2.5.0.0) Windows: Fix windows.h pre-definitions #3965 (2.5.3.0) Windows on ARM64 build fixes. #3690 (2.4.6/2.5.0.0) Windows: Fix unresolved external symbol for MSVS 2017. #3763 (by Latios96) (2.5.0.1) Windows: Fix build error with MSVC #3832 (by Ray Molenkamp) (2.5.2.0) MinGW: fix incorrect symbol visibility issue for ImageBuf iterators. #3578 Mac: Suppress warnings about deprecated std::codecvt on newest Apple clang. #3709 #3710 (2.4.7/2.5.0.0) Mac: Fixes to make a clean build using Apple Clang 11.0. #3795 (by johnfea) (2.4.10.0/2.5.1.0) Mac: Fixes for latest xcode on MacOS 13.3 Ventura #3854 (2.5.2.0) Mac: Suppress Xcode warnings #3940 (by Anton Dukhovnikov) (2.5.3.0) #3722 (2.4.7/2.5.0.0) Mac: Fixes for latest xcode on MacOS 13.3 Ventura #3854 (2.5.2.0) Fixes to make a clean build on Mac using Apple Clang 11.0. ARM: Fix signed/unsigned mismatch compiler errors in vbool4 methods. ARM: improve SIMD operations for ARM NEON. #3599 (2.4.5/2.5.0.0) ARM: Fix signed/unsigned mismatch compiler errors in vbool4 methods. ARM Mac: Fix build break. #3735 (2.5.0.0/2.4.7.1) Fixes to build properly on OpenBSD. #3808 (by Brad Smith) (2.5.1.0/2.4.11) Squash warning in gcc 12.1 + C++20 #3679 Work around problems with fmt library + NVPTX relating to unknown float128 type. #3823 (by Edoardo Dominici) Silence gcc new/delete warnings for texturesys #3944 (by Shootfast) (2.5.3.0) @ text @d1 1 a1 1 $NetBSD$ d5 1 a5 1 --- src/cmake/compiler.cmake.orig 2023-10-02 01:17:00.000000000 +0000 d7 2 a8 1 @@@@ -600,30 +600,6 @@@@ endif () d11 1 a11 1 ########################################################################### d32 3 a34 7 - - - -########################################################################### # Macro to install targets to the appropriate locations. Use this instead # of the install(TARGETS ...) signature. Note that it adds it to the # export targets list for when we generate config files. @ 1.1 log @openimageio: Update to 2.2.10.1 this fixes the build using the current libraries available in pkgsrc. Release 2.2.10.1 (7 Jan 2021) -- compared to 2.2.10.0 ----------------------------------------------------- * Fix build break against OpenColorIO v2.0 RC1. #2817 Release 2.2.10 (1 Jan 2021) -- compared to 2.2.9 ------------------------------------------------- * GIF: support for UTF-8 filenames on Windows. #2777 * OpenEXR: Fix rare crash during multithreaded output. #2781 * OpenEXR: Fix potential crash parsing OpenEXR header that contains Rational attributes with certain values. #2791 * Improved error reporting for IOFile failures to open the file. #2780 * Build: Fix webp compile break on 32 bit systems. #2783 * Build/Windows: Fix symbol definition conflict with pyconfig.h. #2800 * CI: Test the latest fmt, PugiXML, and pybind11 releases. #2778 * Docs: Add explanation of oiiotool -otex modifiers that were missing from the docs. #2790 Fix some duplicated text. #2785 Release 2.2.9 (1 Dec 2020) -- compared to 2.2.8 ------------------------------------------------- * TIFF: Fix reading files with "separate" planarconfig and rowsperstrip more than 1. #2757 (2.3.0.1/2.2.9) * RAW: add "raw:user_flip" input configuration hint to control this option in the underlying libraw. #2769 (2.3.1.0) * PNG: Read Exif data from PNG files. #2767 * BMP: Fix reading BMP images with bottom-to-top row order. #2776 * Work to ensure that OIIO will build correctly against the upcoming Imath 3.0 and OpenEXR 3.0. * Make the OIIO CMake files work properly if OIIO is a subproject. Also various other CMake script refactoring. #2770 Release 2.2.8 (1 Nov 2020) -- compared to 2.2.7 ------------------------------------------------- * Fix that ImageBuf images backed by ImageCache, could hold an outdated copy of the image if it was in the imagecache once, then changed on disk. #2696 * Fix stack overflow crash in IBA::colorconvert of unusually wide images. #2716 * Fix boost linkage problem on Windows. #2727 * Fix broken reads of 16 bit iff files. #2736 * Fix make_texture incorrectly setting tile sizes. #2737 * Fix incorrect ARM NEON code in simd.h. #2739 * Improve oiiotool --chappend and --siappend, allowing an optional modifier ":n=" to specify the number of images from the stack to be combined by having their channels or subimages appended. #2709 * WebP: add support for requesting compression "lossless". #2726 * Improve build system for finding Python, now if a specific version is not requested, default to whichever is found rather than always defaulting to Python 2.7. #2705 #2764 * Fix deprecation warnings when building with very new PugiXML versions. #2733 * Fix ImageCache bug: add_tile/get_tile not properly honoring when `chend < chbegin` it should get all channels. #2742 * Fix build break when strutil.h was included in Cuda 10.1 code. #2743 * Docs: Make readthedocs generate downloadable htm as well as pdf. #2746 * Improve oiiotool's guessing about the desired output format based on inputs (in the absence of `-d` to specify the format). #2717 * JPEG output: add support for writing progressive JPEGS (set the attribute "jpeg:progressive" to 1). #2749 * WebP input improvements including: RGB images are kept as RGB instead of always adding alpha; more efficient by skipping alpha premultiplication when it's unnecessary; now can read animated WebP images as multi-subimage files. #2730 * Docs: ImageInput chapter now has an example of reading image data into separate per-channel buffers. #2756 * Fixes to build against recent changes in OpenColorIO v2 master. #2765 Release 2.2.7 (1 Oct 2020) -- compared to 2.2.6 ------------------------------------------------- * oiiotool new command: `--pastemeta` takes two images as arguments, and appends all the metadata (only) from the first image onto the second image's pixels and metadata, producing a combined image. #2708 * TIFF: Fix broken reads of multi-subimage non-spectral files (such as photometric YCbCr mode). #2692 * Python: When transferring blocks of pixels (e.g., `ImageInput.read_image()` or `ImageOutput.write_scanline()`), "half" pixels ended up mangled into uint16, but now they use the correct numpy.float16 type. #2694 * Python: The value passed to `attribute(name, typedesc, value)` can now be a tuple, list, numpy array, or scalar value. #2695 * `IBA::contrast_remap()` fixes bug that could crash for very large images #2704 * Warn about recommended minimum versions of some dependencies. * Windows fix: correct OIIO_API declaration on aligned_malloc, aligned_free of platform.h. #2701 * Fix oiiotool crash when --resize was used with multi-subimage files. #2711 * Bug fix in Strutil::splits and splitsv: when input is the empty string, the split should return no pieces. #2712 * Support for libheif 1.9. #2724 * TIFF: Fix spec() and spec_dimensions() for MIPmapped TIFF files, they did not recognize being asked to return the specs for invalid subimage indices. #2723 * TIFF: add ability to output 1bpp TIFF files. #2722 Release 2.2 (1 Sept 2020) -- compared to 2.1 ---------------------------------------------- New minimum dependencies: * pybind11 >= 2.4.2 * openjpeg >= 2.0 (if JPEG-2000 support is desired) #2555 (2.2.2) New major features and public API changes: * Improved IOProxy support: - ImageInput and ImageOutput now have direct API level support for IOProxy in their `open()` and `create()` calls, as well as a new `set_ioproxy()` method in these classes. #2434 (2.2.0) - ImageBuf can now specify a proxy upon construction for reading, and for writing via a `set_write_ioproxy()` method that applies to subsequent `write` call. #2477 (2.2.1). - DPX input now supports IOProxy. #2659 #2665 (2.2.5) - ImageCache (and ImageBuf backed by ImageCache) entries that use IOProxy are careful not to fully "close" their proxies when trying to reclaim space in the file cache (that would be bad, since the proxy can't be re-opened). #2666 (2.2.5) * Improved support for multi-subimage files: - oiiotool: Nearly all operations now allow an optional `:subimages=...` modifier that restricts the operation to be performed on only a subset of named or indexed subimages. See docs for details. #2582 - Python `ImageBuf.write()` variety added that takes an open `ImageOutput`. This is the key to writing a multi-subimage file (such as a multi-part OpenEXR) using the Python ImageBuf interface. #2640 (2.2.4) - Fixes to `--croptofull` and `-o` with multi-subimages. #2684 (2.2.6) * Python bindings: - Python bindings have been added for missing ParamValue constructors. We previously exposed the PV constructors from just a plain int, float, or string, but there wasn't an easy way to construct from arbitrary data like there is in C++. Now there is. #2417 (2.2.0) - `ParamValueList.attribute()`, when being passed attributes containing multiple values, now can have those values passed as Python lists and numpy arrays (previously they had to be tuples). #2437 (2.1.11/2.2.0) - `ImageBufAlgo.color_range_check()` is now available to the Python bindings (was previously only C++). #2602 (2.2.3) - New variety of `ImageBuf.write()` that takes an open `ImageOutput`. This is the key to writing a multi-subimage file (such as a multi-part OpenEXR) using the Python ImageBuf interface. #2640 (2.2.4) * ImageBuf: - Easier direct use of IOProxy with ImageBuf: constructor and reset() for file-reading ImageBuf now take an optional `IProxy*` parameter, and a new `set_write_ioproxy()` method can supply an IOProxy for subsequent `write()`. #2477 (2.2.1) - Add `ImageBuf::setpixel()` methods that use cspan instead of ptr/len. #2443 (2.1.10/2.2.0) - Add "missing" `reset()` varieties so that every IB constructor has a corresponding `reset()` with the same parameters and vice versa. #2460 * ImageBufAlgo: - New `repremult()` is like premult, but will not premult when alpha is zero. #2447 (2.2.0) - New `max()` and `min()` functions take the pixel-by-pixel maximum or minimum of two images. #2470 (2.2.1) * ColorConfig: add OCIO "role" accessors. #2548 * Low-res I/O of images to terminals that support full color and Unicode characters. Just output to a file ending in ".term", and it will convert (on certain terminals) to an image displayed directly in the terminal. #2631 (2.2.4) Try: `oiiotool myfile.exr -o out.term` Performance improvements: * Greatly improved TextureSystem/ImageCache performance in highly threaded situations where access to the cache was a main bottlenecks. In renders of scenes with lots of texture access, with dozens of threads all contending for the cache, we are seeing some cases of 30-40% reduction in total render time. In scenes that are less texture-bottlenecked, or that don't use huge numbers of threads, the improvement is more modest. #2433 (2.2.0) Fixes and feature enhancements: * oiiotool: - Intelligible error messages (rather than crashes) if you attempt to create an image too big to fit in memory. #2414 (2.2.0) - `--create` and `--proxy` take an additional optional modifier: `:type=name` that specifies the type of buffer to be created (the default, as usual, is to create an internal float-based buffer). #2414 (2.2.0) - `-o` optional argument `:type=name` is a new (and preferred) synonym for what used to be `:datatype=`. #2414 (2.2.0) - `--autotrim` now correctly trims to the union of the nonzero regions of all subimages, instead of incorrectly trimming all subimages to the nonzero region of the first subimage. #2497 (2.2.1.2) - `--subimage` now has an optional `:delete=1` modifier that causes the operation to delete one named or indexed subimage (versus the default behavior of extracing one subimage and deleting the others). #2575 (2.2.3) - The list of dependent libraries (part of `oiiotool --help`) now correctly reports the OpenEXR version. #2604 (2.2.3) - Fix: `--eraseattrib` did not correctly apply to all subimages when `-a` or `:allsubimages=1` were used. #2632 (2.2.4) * ImageBuf / ImageBufAlgo: - Huge ImageBuf allocation failures (more than available RAM) now are caught and treated as an ImageBuf error, rather than crashing with an uncaught exception. #2414 (2.2.0) - ImageBuf constructors that are passed an ImageSpec (for creating an allocated writable IB or "wrapping" a user buffer) now check that the spec passed has enough information to know the size of the buffer (i.e., it will be recognized as an error if the width, height, depth, channels, or data type have not been set validly). #2460 - Fix: `ImageBuf::getchannel()` did not honor its `wrap` parameter. #2465 (2.2.1/2.1.12) - Fix: `IBA::reorient()` and `IBA::computePixelHashSHA1()` did not honor their `nthreads` parameter. #2465 (2.2.1/2.1.12) - `resample()` has been modified to more closely match `resize` by using clamp wrap mode to avoid a black fade at the outer edge of the resampled area. #2481 - Fix: `ImageBuf::get_pixels()` did not honor the stride parameters. #2487. (2.1.12/2.2.1) - Fix `resize()` to avoid a crash / stack overflow in certain cases of very big images and very large filter kernels. #2643 (2.2.4) - Minor improvements to ImageBuf error formatting. #2653 (2.2.5) * ImageCache / TextureSystem / maketx: - New IC/TS attribute "trust_file_extensions", if nonzero, is a promise that all files can be counted on for their formats to match their extensions, which eliminates some redundant opens and format checks in the IC/TS and can reduce needless network/filesystem work. Use with caution! #2421 (2.2.0) - texture3d() fixed some cases where derivative results were not correctly copied to the outputs. #2475 (2.2.1) - `maketx`/`IBA::make_texture`: better error detection and messages when using "overscan" textures with formats that can't support it properly. (Punchline: only OpenEXR textures can do it.) #2521 (2.2.0) - Fix possible redundant tile reads in multithread situations (harmless, but makes for redundant I/O). #2557 (2.2.2) * Python: - Fixed a bug that lost certain string arguments, especially when passing a TypeDesc as its string equivalent. #2587 (2.1.16/2.2.3) - Fixed broken bindings of ImageSpec.erase_attribute. #2654 (2.1.19/2.2.6) - Fix missing ImageInput.read_image(). #2677 (2.1.19/2.2.6) * Exif read: guard better against out of range offsets, fixes crashes when reading jpeg files with malformed exif blocks. #2429 (2.1.10/2.2.0) * Fix: `ImageSpec::erase_attribute()` did not honor its `searchtype` parameter. #2465 (2.2.1/2.1.12) * Fix: Some ColorProcessor::apply() methods were not using their `chanstride` parameters correctly. #2475 (2.1.12) * Fix: iinfo return code now properly indicates failures for files that can't be opened. #2511 (2.2.2/2.1.13) * DPX: - IOProxy reading is now supported. #2659 (2.2.5) - DPX: Add support for reading DPX files from IOProxy (such as from a memory buffer). #2659 #2665 (2.1.19/2.2.6) * HDR files: - Improve performance when reading HDR files out of order (when combined with ImageCache, observed to speed up out-of-order HDR reading by 18x). #2662 (2.2.5) * JPEG: - Fix resolution unit metadata that was not properly set in JPEG output. #2516 (2.2.2/2.1.13) - Fix loss of 'config' info upon close/reopen. #2549 (2.2.2) * OpenEXR: - Add support for reading and writing float vector metadata. #2459 #2486 - Fix bug in the channel sorting order when channels are "X" and "Y" (was reversing the order by confusing "Y" for "luminance"). #2595 (2.1.16/2.2.3) - We no longer automatically rename the "worldToNDC" attribute to "worldtoscreen" and vice versa. #2609 (2.2.4) * PNG: - Fix loss of 'config' info upon close/reopen. #2549 (2.2.2) - Add output configuration hint "png:filter" to control PNG filter options. #2650 (2.2.5) - Improved propagation of PNG write errors. #2655 (2.2.5) - Tell libpng to turn off sRGB profile check, which has a known problem of false positives. #2655 (2.2.5) - New output option "png:filter" allows control of the PNG filter options. #2650 (2.1.19/2.2.6) * Raw images: - Support for new Canon .cr3 file, but only if you build against libraw >= 0.20.0 developer snapshot. #2484 (2.2.1) #2613 (2.2.4) - RAW input: set the "raw:flip" attribute if the underlying libraw did a reorientation. #2572 (2.1.15/2.2.3) - Avoid errors (in libraw) that resulted from multiple threads opening raw files at the same time. #2633 (2.2.4) * RLA: - Additional sanity checks and error checks/messages for detecting files that might be first mistaken for RLA files, but actually are not. #2600 (2.2.3) * TIFF: - Internal improvements to handling metadata retrieval for certain unusual tags. #2504 (2.2.2/2.1.13) - Fix subtle bug when reading Exif directory in the header. #2540 (2.2.2) * Video files: - Fix possible infinite loop in the FFMpeg-based reader. #2576 (2.1.15/2.2.3) Developer goodies / internals: * argparse.h: - Complete overhaul of ArgParse to make it more like Python argparse. Please read the extensive comments in argparse.h for documentation. For now, the old ArgParse interface still works, but is considered deprecated. #2531 (2.2.2) #2618 #2622 (2.2.4) * attrdelegate.h: - New `as_vec<>` method returns the whole attribute as a std::vector. #2528 (2.2.2) * filesystem.h: - Catch previously uncaught exceptions that could happen in certain Filesystem utility calls. #2522 (2.2.2/2.1.13) - New `write_text_file()` convenience function for opening, writing, and closing a text file all in one step. #2597 (2.2.3) * fmath.h: - clamp() is 2x faster. #2491 (2.1.12/2.2.2) - Very minor fix to OIIO::clamp(), shouldn't affect normal use with floats at all, but fixed a subtle quasi-bug in OSL. #2594 (2.1.15/2.2.3) - madd() is improved especially on platforms without fma hardware #2492 (2.1.12/2.2.2) - Perf improvements to `fast_sin`, `fast_cos` #2495 (2.1.12/2.2.2) - New `safe_fmod()` is faster than std::fmod. #2495 (2.1.12/2.2.2) - New `fast_neg` is faster than simple negation in many cases, if you don't care that -(0.0) is 0.0 (rather than a true -0.0). #2495 (2.1.12/2.2.2) - Add vint4, vint8, and vint16 versions of `clamp()`. #2617 (2.2.4) * oiioversion.h: - Fix typo that left the OIIO_VERSION_RELEASE_TYPE symbol undefined. #2616 (2.2.4/2.1.16) - Add new `OIIO_MAKE_VERSION(maj,min,patch)` macro that constructs the proper single integer code for a release version. #2641 (2.2.4/2.1.17) * paramlist.h: - New `ParamValueList::find_pv()` method that is similar to `find()` but returns a pointer rather than an iterator and nullptr if the attribute is not found. #2527 (2.2.2/2.1.13) - Add `get_indexed()` method to ParamValueList and AttrDelegate. #2526 (2.2.2/2.1.13) * platform.h: - `OIIO_PRETTY_FUNCTION` definition is more robust for weird compilers (will fall back to `__FUNCTION__` if all else fails). #2413 (2.2.0) - `OIIO_ALIGN` definition is more robust, will fall back to C++11 alignas when not a compiler with special declspecs (instead of being a compile time error!). #2412 (2.2.0) - A variety of `OIIO_PRAGMA_...` macros have been added to help deal with compiler-specific pragmas. #2467 (2.2.1) * simd.h: - vfloat3 has added a `normalize()`, `length()`, and `length2()` methods, to more closely match the syntax of Imath::Vec3f. #2437 (2.1.11/2.2.0) - fix errors in vbool == and !=. #2463 (2.1.11/2.2.1) - Add float3 versions of abs, sign, ceil, floor, and round (they already existed for float4, float8, float16, but not float4). #2612 (2.2.4) - Improved support for ARM NEON SIMD (caveat: this is still not well tested). #2614 (2.2.4) - Improve performance for many float8/int8 functions and operators when running on only 4-wide hardware, by using two 4-wide instructions instead of reverting to scalar. #2621 * span.h: - Allow the constructor from `std::vector` to allow vectors with custom allocators. #2533 (2.2.2) * strutil.h / ustring.h: - New `Strutil::concat()` and `ustring::concat()` concatenate two strings, more efficiently than `sprintf("%s%s")` by avoiding any unnecessary copies or temporary heap allocations. #2478 (2.2.1) - Strutil::upper() and lower() return all-upper and all-lowercase versions of a string (like `to_lower` and `to_upper`, but not in-place modifications of the existing string). #2525 (2.2.2/2.1.13) - `Strutil::repeat()` has been internally rewritten to more efficient by avoiding any unnecessary copies or temporary heap allocations. #2478 (2.2.1) * typedesc.h: - TypeDesc has additional helpers of constexpr values TypeFloat2, TypeVector2, TypeVector4, TypeVector2i, TypePointer. #2592 (2.1.16/2.2.3) * unordered_map_concurrent.h: - Fix missing decrement of `size()` after `erase()`. #2624 (2.2.4) * More reshuffling of printf-style vs fmt-style string formatting. #2424 (2.2.0) #2649 (2.2.4) * Internals: changed a lot of assertions to only happen in debug build mode, and changed a lot that happen in release builds to only print the error but not force a termination. #2435 (2.1.11/2.2.0) * Internals: Replaced most uses of `boost::thread_specific_ptr` with C++11 `thread_local`. #2431 (2.2.0) * oiiotool: Big overhaul and simplification of internals. #2586 #2589 (2.2.3) Build/test system improvements and platform ports: * CMake build system and scripts: - New non-default CMake build flag `EXTRA_WARNINGS`, when turned on, will cause gcc and clang to compile with -Wextra. This identified many new warnings (mostly about unused parameters) and fixes were applied in #2464, #2465, #2471, #2475, #2476. (2.2.1) - FindOpenColorIO.cmake now correctly discerns the OCIO version (2.2.1), and now sets up a true imported target. #2529 (2.2.2) - FindOpenEXR.cmake has better detection of debug openexr libraries. #2505 (2.2.2/2.1.13) - Additional cmake controls to customize required vs optional dependencies: `REQUIRED_DEPS` (list of dependencies normally optional that should be treated as required) and `OPTIONAL_DEPS` (list of dependencies normally required that should be optional). The main use case is to force certain optional deps to be required for your studio, to be sure that missing deps are a full build break, and not a successful build that silently lacks features you need. #2507 (2.2.2/2.1.13) - Fix exported cmake config file, it was not ensuring that the Imath headers properly ended up in the config include path. #2515 (2.2.2/2.1.13) - Change all CMake references to PACKAGE_FOUND to Package_Found (or whatever capitalization matches the actual package name). #2569 (2.2.2) - The exported CMake config files now set cmake variable `OpenImageIO_PLUGIN_SEARCH_PATH` #2584 (2.1.16/2.2.3) - Improved hints printed about missing dependencies. #2682 (2.2.6) * Dependency version support: - Pybind11 is no longer auto-downloaded. It is assumed to be pre-installed. A script `src/build-scripts/build_pybind11.bash` is provided for convenience if you lack a system install. #2503 (2.2.2) Bump the minimum pybind11 version that we accept, to 2.4.2 #2453, and add fixes to allow support of pybind11 2.5. #2637 (2.2.4) - fmt libray: Un-embed fmt headers. If they are not found on the system at build time, they will be auto-downloaded. #2439 (2.2.0) - Support for building against libraw 0.20. #2484 (2.2.1) #2580 (2.2.3) - Build properly against OpenColorIO's current master (which is the in-progress work on OCIO v2). #2530 (2.2.2) - Fix static boost to not overlink on Windows. #2537 (2.2.2) - Fix build breaks against TOT libtiff master, which had `#define` clashes with our GPSTag enum values. #2539 (2.2.2) - Ensure compatibility and clean builds with clang 10. #2518 (2.2.2/2.1.3) - Support verified for gcc 10, added to CI tests. #2590 (2.2.3) - Support for Qt 5.15. #2605 (2.2.3) - Fixes to support OpenColorIO 2.0. #2636 (2.2.4) - Build against more recent versions of fmtlib. #2639 (2.2.4) - Included scripts to download and build libtiff #2543 (2.1.13/2.2.2), PugiXML #2648 (2.2.4), zlib, libpng, libjpeg-turbo. #2663 (2.2.5) - Minor fixes for libheif 1.8. #2685 (2.2.6) - Add a build_libtiff.bash script to make it easy to build the libtiff dependency. #2543 (2.1.13/2.2.2) - "tinyformat" is no longer used, even optionally. We have switched entirely to fmtlib, which is more similar to the upcoming C++20 std::format. #2647 (2.2.4) * Testing and Continuous integration (CI) systems: - Mostly retire TravisCI for ordinary Linux x64 and Mac builds, now we rely on GitHub Actions CI. Nightly test added. Use ASWF docker images to test exactly against VFX Platform 2019 and 2020 configurations. #2563 (2.2.2) #2579 (2.2.3) - Add Travis test for arm64 (aka aarch64) builds. This is still a work in progress, and not all testsuite tests pass. #2634 (2.2.4) - Our CI tests now have a "bleeding edge" matrix entry that tests against the current TOT master build of libtiff, openexr (#2549), and pybind11 (#2556). (2.2.2) - GitHub CI tests, when they fail, leave behind an "artifact" tar file containing the output of the tests, so that they can be easily downloaded and inspected (or used to create new reference output). #2606 (2.2.4) - CI Mac tests switch to Python 3.8. (2.2.4) - Windows CI switched from using Vcpkg to building its own dependencies. #2663 (2.2.5) - Testing of TGA now assumes the test images are in the oiio-images project, not separately downloaded (the download location disappeared from the net). #2512 (2.2.2) - Beef up OpenEXR compliance tests, many more examples from openexr-images, including many corrupted image failure cases. #2607 (2.2.4) * Progress on support for using Conan for dependency installation. This is experimental, it can't yet build all dependencies. Work in progress. #2461 (2.2.1) * The version of gif.h that we embed for GIF output has been updated. #2466 (2.2.1) * The `farmhash` functions have been cleaned up to be more careful that none of their internal symbols are left visible to the linker. #2473 (2.2.1) * Clarification about .so name versioning: In supported releases, .so contains major.minor, but in master (where ABI is not guaranteed stable, we name major.minor.patch). #2488 (2.2.1) * Protect against certain compiler preprocessor errors for user programs that include strutil.h but also include `fmt` on its own. #2498. (2.1.12/2.2.2) * Build: All the `build_foo.bash` helper scripts now use `set -ex` to ensure that if any individual commands in the script fails, the whole thing will exit with a failure. #2520 (2.2.2/2.1.3) * Fix compiler warning about incorrect extra braces. #2554 (2.2.2) * All build-scripts bash scripts now use /usr/bin/env to find bash. #2558 (2.2.2) * Avoid possible link errors by fully hiding IBA functions taking IplImage parameters, when no OpenCV headers are encountered. #2568 (2.2.2) * In (obsolete) FindOpenImageIO.cmake, avoid CMake warnings by changing the name `OPENIMAGEIO_FOUND` -> `OpenImageIO_FOUND`. #2578 (2.2.3) * Moved headers that are not part of OIIO's supported public API, but that still must be installed to be transitively included, do a "detail" subdirectory. #2648 (2.2.4) * Fix many Mingw compiler warnings. #2657 (2.1.19/2.2.5) * Windows: Improve Strutil::get_rest_arguments() handling of long path syntax (`"\\?\"` style). #2661 (2.1.19/2.2.6) * Fix compilation error with armv7 + x86. #2660 (2.2.6) Notable documentation changes: * Many enhancements in the ImageBuf chapter. #2460 (2.1.11/2.2.0) * The `LICENSE-THIRD-PARTY.md` file has been reorganized to be clearer, grouping parts with identical licenses. #2469 (2.2.1) And renamed to "THIRD-PARTY.md" to avoid confusing GitHub's reporting of the project's license. (2.2.6) * Many fixes to the new readthedocs documentation, especially fixes to section cross-references and links. * Improved INSTALL instructions. (2.2.2/2.1.13) * Fix a variety of breaks on ReadTheDocs. #2581 * Improve the way we discuss optional modifiers. * Document the PNG output controls for compression level. #2642 (2.2.4) * Lots of spell check / typo fixes in docs and comments. #2678 (2.2.6) * INSTALL.md: remove misleading old Windows build instructions. #2679 (2.2.6) * New file .git-blame-ignore-revs lists the hashes of commits that only performed bulk reformatting, so that they don't misattribute authorship or modification date. Everybody do this in your local repo: `git config blame.ignoreRevsFile .git-blame-ignore-revs` #2683 (2.2.6) Release 2.1.20 (1 Oct 2020) -- compared to 2.1.19 ------------------------------------------------- * Windows: make sure aligned_malloc and aligned_free are properly declared as OIIO_API. #2701 * Support for libheif 1.8 and 1.9. #2685 #2724 * Fix crash in IBA::contrast_remap for very large images. #2704 * Bug fix in Strutil::splits and splitsv: when input is the empty string, the split should return no pieces. #2712 Release 2.1.19 (1 Sep 2020) -- compared to 2.1.18 ------------------------------------------------- * DPX: Add support for reading DPX files from IOProxy (such as from a memory buffer). #2659 #2665 * PNG: New output option "png:filter" allows control of the PNG filter options. #2650 * Python: Fix binding of ImageSpec.erase_attribute. #2654 * Python: Fix missing ImageInput.read_image(). #2677 * Windows: Improve Strutil::get_rest_arguments() handling of long path syntax (`"\\?\"` style). #2661 * MinGW: Fix a variety of compiler warnings on this platform. #2657 * Fix build on Elbrus 2000 architecture. #2671 Release 2.1.18 (1 Aug 2020) -- compared to 2.1.17 ------------------------------------------------- * Python `ImageBuf.write()` added a variety that takes an open ImageOutput. This is the key to writing multi-subimage files from Python. #2640 * `oiiotool --eraseattrib` fixed: was not applying to all subimages. #2632 * RAW: Improve thread safety when more than one thread might be opening different raw files at the same time. #2633 * unordered_map_concurrent fixed a missing size decrement upon erase(). #2624 * Fixes to support certain recent pybind11 changes. #2637 * Fixes to support OpenColorIO v2. #2636 * Fixes to support more recent fmtlib versions. #2639 * PNG: document the "png:compressionLevel" output hint. #2642 * In oiioversion.h, add a `OIIO_MAKE_VERSION` macro that constructs the integer code for a particular major/minor/patch release. #2641 * 2.1.18.1: Fix version number which for 2.1.18.0 unfortunately still said it was 2.1.17. Release 2.1.17 (1 Jul 2020) -- compared to 2.1.16 ------------------------------------------------- * Build: Use the discovered python binary name, to address the Fedora restriction that you must use "python2" or "python3" by name. #2598 * Docs: ImageBufAlgo::nonzero_region had been inadvertently left out of the Python chapter. * Improve RLA reader's ability to detect corrupt or non-RLA files, which fixes crashes you could get from trying to read non-image files. #2600 * Support for building against Qt 5.15. (Note: Qt support is only needed for the "iv" viewer.) #2605 * Fixes to support LibRaw 0.20 (which is currently in beta3). Note that this will make it incompatible with 0.20 beta1 and beta2, due to a fixed typo of a struct field in one of the LibRaw's headers. #2613 * oiioversion.h: fix typo that left the OIIO_VERSION_RELEASE_TYPE symbol undefined. #2616 Release 2.1.16 (1 Jun 2020) -- compared to 2.1.15 ------------------------------------------------- * OpenEXR: Fix bug in the channel sorting order when channels are "X" and "Y" (was reversing the order by confusing "Y" for "luminance"). #2595 * Python: Fixed a bug that lost certain string arguments, especially when passing a TypeDesc as its string equivalent. #2587 * fmath: Very minor fix to OIIO::clamp(), shouldn't affect normal use with floats at all, but fixed a subtle quasi-bug in OSL. #2594 * TypeDesc has additional helpers of constexpr values TypeFloat2, TypeVector2, TypeVector4, TypeVector2i, TypePointer. #2592 * Build: The exported CMake config files now set cmake variable `OpenImageIO_PLUGIN_SEARCH_PATH` #2584 * Docs: improvements and fixes to broken page rendering. Release 2.1.15 (11 May 2020) -- compared to 2.1.14 -------------------------------------------------- * RAW input: set the "raw:flip" attribute if the underlying libraw did a reorientation. #2572 * Movie files: Fix possible infinite loop in the FFMpeg-based reader. #2576 * Fixes to allow building against the forthcoming LibRaw 0.20 release. #2484 * Documentation fixes. #2581 Release 2.1.14 (1 May 2020) -- compared to 2.1.13 ------------------------------------------------- * JPEG & PNG: Fix loss of 'config' hints upon close and reopen that could happen in cases where scanlines were accessed out of order. #2549 * TIFF: Fix subtle bug when reading certain Exif directories in the header. #2540 * Added OCIO role accessors to the ColorConfig class. #2548 * Improve error messages when overscan textures are not possible. #2521 * Build: fix problems when compiling against current libtiff master (symbol clash on GPSTAG values). #2539 * Build: Fix static boost to not overlink. #2537. * Fix some problems with the docs. #2541 * `AttrDelegate::as_vec<>` returns the whole attribute as a std::vector. #2528 * Add a build_libtiff.bash script to make it easy to build the libtiff dependency. #2543 Release 2.1.13 (1 Apr 2020) -- compared to 2.1.12 ------------------------------------------------- * Fix: iinfo return code now properly indicates failures for files that can't be opened. #2511 * Fix: Catch previously uncaught exceptions that could happen in certain Filesystem utility calls. #2522 * Fi: Some `span<>` methods involving `std::vector` now will work properly with vectors that have custom allocators. #2533 * Fix: ParamValueList `add_or_replace()` was failing to "replace" if the new attribute had a different type than the existing one. #2527 * Fix: Fix resolution unit metadata that was not properly set in JPEG output. #2516 * Build: Additional cmake controls to customize required vs optional dependencies -- `REQUIRED_DEPS` (list of dependencies normally optional that should be treated as required) and `OPTIONAL_DEPS` (list of dependencies normally required that should be optional). The main use case is to force certain optional deps to be required for your studio, to be sure that missing deps are a full build break, and not a successful build that silently lacks features you need. #2507 * Build: Fix exported config file, it was not ensuring that the Imath headers properly ended up in the config include path. #2515 * Build: Ensure compatibility and clean builds with clang 10. #2518 * Build: All the `build_foo.bash` helper scripts now use `set -ex` to ensure that if any individual commands in the script fails, the whole thing will exit with a failure. #2520 * Build correctly against the current master branch of OpenColorIO (previously we were only testing and properly building against the 1.1 release). #2530 * Added Strutil::upper() and lower() functions. #2525 * ParamValueList enhancement: new `find_pv()` method that is similar to `find()` but returns a pointer rather than an iterator and nullptr if the attribute is not found. #2527 * Add `get_indexed()` method to ParamValueList and AttrDelegate. #2526 Release 2.1.12 (2 Mar 2020) -- compared to 2.1.11 ------------------------------------------------- * Fix: plugin.h getsym() didn't pass along its report_error param. #2465 * Fix: ImageBuf::getchannel() did not honor its wrap parameter. #2465 * Fix: ImageSpec::erase_attribute() did not honor its `searchtype` param. #2465 * Fix: IBA::reorient() and IBA::computePixelsHashSHA1() did not honor their `nthreads` parameter. #2465. * IBA::resample() now uses the clamp wrap mode to avoid black fringing and match the behavior of resize(). #2481 * Fix: ImageBuf::get_pixels() did not honor the stride parameters. #2487. * fmath.h perf improvements: clamp() is 2x faster; madd() is improved especially on platforms without fma hardware; perf improvements in `fast_sin`, `fast_cos`; new `safe_fmod` is faster than std::fmod, new `fast_neg` is faster than simple negation in many cases, if you don't care that -(0.0) is 0.0 (rather than a true -0.0). #2491 #2492 #2494 * strutil: New function: concat(). #2478 * Build: un-embed the 'fmt' headers, instead auto-download if not found. #2439 * Build: Protect against certain compiler preprocessor errors for user programs that include strutil.h but also include `fmt` on its own. #2498. Release 2.1.11 (1 Feb 2020) -- compared to 2.1.10 ------------------------------------------------- * Python bindings for `ParamValueList.attribute()`, when being passed attributes containing multiple values, now can have those values passed as Python lists and numpy arrays (previously they had to be tuples). #2437 * OpenEXR support is extended to handle float vector metadata. #2459 * Developer goody: simd.h vfloat3 has added a `normalize()`, `length()`, and `length2()` methods, to more closely match the syntax of Imath::Vec3f. #2437 * Internals: changed a lot of assertions to only happen in debug build mode, and changed a lot that happen in release builds to only print the error but not force a termination. #2435 * simd.h fix errors in vbool == and !=. #2463 * Make sure the embedded 'farmhash' implementation is completely hidden behind proper namespaces. #2473 * Many docs fixes. Release 2.1.10.1 (10 Jan 2019) ------------------------------ * Automatically detect the need to link against libatomic (fixes build on some less common platforms, should not affect Windows, MacOS, or Linux on x86/x86_64 users). #2450 #2455 * Fixes to unordered_map_concurrent.h that affect some users who it for things other than OIIO per se (recent changes to the internals broke its use for the default underlying std::unordered_map). #2454 * Bump the minimum pybind11 version that we auto-download, and also be sure to auto-download if pybind11 is found on the system already but is not an adequately new version. #2453 * If libsquish is found on the system at build time, use it, rather than the "embedded" copy. This can improve build times of OIIO, and also helps us comply with Debian packaging rules that forbid using embedded versions of other Debian packages that can be used as simple dependencies. #2451 * Fixes to formatting of man page generation (resolves warnings on Debian build process). Release 2.1.10 (1 Jan 2020) -- compared to 2.1.9 -------------------------------------------------- * Suppress warnings with old libraw on earlier gcc versions. #2413 * Exif read: guard better against out of range offests, fixes crashes when reading jpeg files with malformed exif blocks. #2429 * Python: add binding for missing ParamValue constructors. #2417 * oiiotool & ImageBuf better error messages (rather than mysterious crash) for certain out of memory conditions. #2414 * oiiotool --create and --pattern take a new optional parameter: `:type=name` that overrides the default behavior of allocating all internal buffers as float. #2414 * Lots of typo fixes in docs, comments, and error messages. #2438 * Fix broken version in the built openimageio.pc PkgConfig file. #2441 * Fix typo in build script that caused it to fail to set the right symbol definition when building static libs. #2442. * More robust OIIO_PRETTY_FUNCTION definition. #2413 * Better fallback for OIIO_ALIGN, rely on C++11. #2412 * Docs: fix some II and IO chapter examples that used old open() API. * Build: bump default version of pybind11 to 2.4.3. #2436 * Add ImageBuf::setpixel() methods that use cspan instead of ptr/len. #2443 * Fixes to cmake config generation. #2448 Release 2.1 (8 Dec 2019) -- compared to 2.0 ---------------------------------------------- New minimum dependencies: * CMake minimum is now 3.12. #2348 (2.1.5) Major new features and performance improvements: * Support for HEIC/HEIF images. HEIC is the still-image sibling of HEVC (a.k.a. H.265), and compresses to about half the size of JPEG but with higher visual quality. #2160 #2188 (2.1.0) * oiiotool new commands: `-evaloff` `-evalon` `--metamerge` `--originoffset` * ImageCache/TextureSystem improved perf of the tile and file caches under heavy thread contention. In the context of a renderer, we have seen improvements of around 7% in overall render time, averaged across a suite of typical production scenes. #2314, #2316 (2.1.3) #2381 #2407 (2.1.8) * Fix huge DPX reading performance regression. Technically this is a bug fix that restores performance we once had, but it's a huge speedup. #2333 (2.1.4) * Reading individual frames from very-multi-image files (movie files) has been greatly sped up (10x or more). #2345 (2.1.4) Public API changes: * ImageSpec new methods `getattribute()` and `getattributetype()`. #2204 (2.1.1) * ImageSpec and ParamValueList now support operator `["name"]` as a way to set and retrieve attributes. For example, myimagespec["compression"] = "zip"; myimagespec["PixelAspectRatio"] = 1.0f; int dither = myimagespec["oiio:dither"].get(); std::string cs = myimagespec["colorspace"]; See the documentation about "Attribute Delegates" for more information, or the new header `attrdelegate.h`. #2204 (2.1.1) #2297 (2.1.3) * ImageSpec::find_attribute now will retrive "datawindow" and "displaywindow" (type int[4] for images int[6] for volumes) giving the OpenEXR-like bounds even though there is no such named metadata for OIIO (the results will assembled from x, y, width, height, etc.). #2110 (2.1.0/2.0.4) * "Compression" names (where applicable) can now have the quality appended to the name (e.g., `"jpeg:85"`) instead of requiring quality to be passed as a separate piece of metadata. #2111 (2.1.0/2.0.5) * Python: define `__version__` for the module. #2096 (2.1.0/2.0.4) * Python error reporting for `ImageOutput` and `ImageBuf.set_pixels` involving transferring pixel arrays have changed from throwing exceptions to reporting errors through the usual OIIO error return codes and queries. #2127 (2.1.0/2.0.5) * New shell environment variable `OPENIMAGEIO_OPTIONS` can now be used to set global `OIIO::attribute()` settings upon startup (comma separated name=value syntax). #2128 (2.1.0/2.0.5) * ImageInput open-with-config new attribute `"missingcolor"` can supply a value for missing tiles or scanlines in a file in lieu of treating it as an error (for example, how OpenEXR allows missing tiles, or when reading an incompletely-written image file). A new global `OIIO::attribute()` setting (same name) also accomplishes the same thing for all files read. Note that this is only advisory, and not all file times are able to do this (OpenEXR is the main one of interest, so that works). #2129 (2.1.0/2.0.5) * `ImageCache::invalidate()` and `TextureSystem::invalidate()` now take an optional `force` parameter (default: true) that if false, will only invalidate a file if it has been updated on disk since it was first opened. #2133, #2166 (2.1.0/2.0.5) * New filter name `"nuke-lanczos6"` matches the "lanczos6" filter from Nuke. In reality, it's identical to our "lanczos3", but the name alias is supposed to make it more clear which one to use to match Nuke, which uses a different nomenclature (our "3" is radius, their "6" is full width). #2136 (2.1.0/2.0.5) * New helper functions in `typedesc.h`: `tostring()` converts nearly any TypeDesc-described data to a readable string, `convert_type()` does data type conversions as instructed by TypeDesc's. #2204 (2.1.1) * ImageBuf: - Construction from an ImageSpec now takes an optional `zero` parameter that directly controls whether the new ImageBuf should have its buffer zeroed out or left uninitialized. #2237 (2.1.2) - `set_write_format()` method has a new flavor that takes a `cspan` that can supply per-channel data types. #2239 (2.1.1) * ColorConfig: - Added `getColorSpaceFamilyByName()`, `getColorSpaceNames()`, `getLookNames()`, `getDisplayNames()`, `getDefaultDisplayName()`, `getViewNames()`, `getDefaultViewName()`. #2248 (2.1.2) - Added Python bindings for ColorConfig. #2248 (2.1.2) * Formal version numbers are now four parts: MAJOR.MINOR.PATCH.TWEAK. #2313,#2319 (2.1.3) * ImageInput now sets "oiio:subimages" attribute to an int representing the number of subimages in a multi-image file -- if known from reading just the header. A positive value can be relied upon (including 1), but a value of 0 or no such metadata does not necessarily mean there are not multiple subimages, it just means it could not be known from inexpensively reading only the header. #2344 (2.1.4) * The `imagesize_t` and `stride_t` values now have revised definitions. It should be fully API/ABI compatible (at least for 64 bit systems), but is a simpler, more modern, more platform-independent definition. #2351 (2.1.5) * `DeepData` has been altered to make pixel indices and total counts int64_t rather than int, in order to be safe for very large images that have > 2 Gpixels. #2363 (2.1.5) * On OSX, we now expect non-embedded plugins to follow the convention of naming runtime-loaded modules `foo.imageio.so` (just like on Linux), whereas we previously used the convention of `foo.imageio.dylib`. Turns out that dylib is supposed to be only for shared libraries, not runtime loadable modules. #2376 (2.1.6) Fixes and feature enhancements: * oiiotool: - New `-evaloff` and `-evalon` lets you disable and enable the expression substitution for regions of arguments (for example, if you have an input image filename that contains `{}` brace characters that you want interpreted literally, not evaluated as an expression). #2100 (2.1.0/2.0.4) - `--dumpdata` has more intelligible output for uint8 images. #2124 (2.1.0/2.0.4) - Fixed but that could prevent `-iconvert oiio:UnassociatedAlpha 1` from correctly propagating to the input reader. #2172 (2.1.0/2.0.6) - `-o:all=1` (which outputs all subimages to separate files) fixed a crash that would occur if any of the subimages were 0x0 (it could happen; now it just skips outputting those subimages). #2171 (2.1.0) - Improved support of files with multiple subimages: Several commands honored `-a` but did not respect individual `allsubimages=` modifiers (--ch, --sattrib, --attrib, --caption, --clear-keywords, --iscolorspace, --orientation, --clamp, -fixnan); Several commands always worked on all subimages, but now properly respect `-a` and `allsubimages=` (--origin, --fullpixels, --croptofull, --trim); Several commands were totally unaware of subimages, but now are so and respect `-a` and `allsubimages=` (--crop, --fullsize, --zover, --fill, --resize, --resample). #2202 #2219, #2242 (2.1.1, 2.1.2) - `--ociodisplay`: empty display or view names imply using the default display or view. #2273 (2.0.10/2.1.3) - `--metamerge` option causes binary image operations to try to "merge" the metadata of their inputs, rather than simply copy the metadata from the first input and ignore the others. #2311 (2.1.3) - `--colormap` now supports a new "turbo" color map option. #2320 (2.1.4) - Expression evaluation has been extended to support operators `//` for integer division (whereas `/` is floating point division), and `%` for integer modulus. #2362 (2.1.5) - New `--originoffset` resets the data window origin relative to its previous value (versus the existing `--origin` that sets it absolutely). #2369 (2.1.5) - `--paste` has two new optional modifiers: `:all=1` pastes the entire stack of images together (versus the default of just pasting the top two images on the stack), and `:mergeroi=1` causes the result to have the merged data window of all inputs, instead of the foreground image clipping against the boundary of the background image data. #2369 (2.1.5) - `--paste` now works with deep images. #2369 (2.1.5) - `--paste` semantics have changed: the meaning of pasting FG into BG at (x,y) now means that the (0,0) origin of FG ends up at (x,y), whereas before it placed the corner of FG's data window at (x,y). This will not change behavior for ordinary images where FG's data window is (0,0), but it makes behavior more sensible for "cropped" or "shrink-wrapped" FG images that have non-zero data window origin. #2369 (2.1.5) - `paste()` is now multithreaded and therefore much faster. #2369 (2.1.5) - `--ociotransform` no longer issues an error message when no valid OCIO configuration is found (because it's not needed for this operation). #2371 (2.1.5) - `--compare` would fail to notice differences in deep images where the corresponding pixels had differing numbers of samples. #2381 (2.1.8) * ImageBuf/ImageBufAlgo: - `IBA::channel_append()` previously always forced its result to be float, if it wasn't previously initialized. Now it uses the usual type-merging logic, making the result the "widest" type of the inputs. #2095 (2.1.0/2.0.4) - IBA `resize()`, `fit()`, and `resample()` are no longer restricted to source and destination images having the same number of channels. #2125 (2.1.0/2.0.5) - Improve numerical precision of the unpremult/premult part of certain color transformations. #2164 (2.1.0) - `ImageBuf::read()` now properly forwards the "progress" parameters to any underlying call to `read_image`. #2196 (2.1.1) - The `OIIO_DISPATCH_COMMON_TYPES2/3` macros used internally by many IBA functions have been expanded to handle a few more cases "natively" without conversion to/from float. This may make a few cases of odd data type combinations have higher precision. #2203 (2.0.8/2.1.1) - IBA `resize()` fix precision issues for 'double' images. #2211 (2.0.8/2.1.1) - `IBA::ociodisplay()`: empty display or view names imply using the default display or view. #2273 (2.0.10/2.1.3) - `IBA::fixNonFinite()`: fixed impicit float/double casts to half. #2301 (2.0.10/2.1.3) - `IBA::color_map()`: now supports a new "turbo" color map option. #2320 (2.1.4) - `IBA::paste()` now works with deep images. #2369 (2.1.5) - `paste` semantics have changed: the meaning of pasting FG into BG at (x,y) now means that the (0,0) origin of FG ends up at (x,y), whereas before it placed the corner of FG's data window at (x,y). This will not change behavior for ordinary images where FG's data window is (0,0), but it makes behavior more sensible for "cropped" or "shrink-wrapped" FG images that have non-zero data window origin. #2369 (2.1.5) - `paste()` is now multithreaded and therefore much faster. #2369 (2.1.5) - `ociotransform()` no longer issues an error message when no valid OCIO configuration is found (because it's not needed for this operation). #2371 (2.1.5) - Python `ociotransform` and `ociolook` mixed up the names and orders of the `inverse` and `unpremult` params, making it so that you couldn't properly specify the inverse. #2371 (2.1.5) - `IBA::compare()` would fail to notice differences in deep images where the corresponding pixels had differing numbers of samples. #2381 (2.1.8) * ImageInput read_image/scanline/tile fixed subtle bugs for certain combination of strides and channel subset reads. #2108 (2.1.0/2.0.4) * ImageCache / TextureSystem / maketx: - More specific error message when tile reads appear to be due to the file having changed or been overwritten on disk since it was first opened. #2115 (2.1.0/2.0.4) - maketx: the `-u` (update mode) is slightly less conservative now, no longer forcing a rebuild of the texture just because the file uses a different relative directory path than last time. #2109 (2.1.0/2.0.4) - Protection against certain divide-by-zero errors when using very blurry latong environment map lookups. #2121 (2.1.0/2.0.5) - `maketx -u` is smarter about which textures to avoid re-making because they are repeats of earlier commands. #2140 (2.1.0/2.05) - Fix possible maketx crash on Windows due to a stack overflow within MSVS's implementation of std::regex_replace! #2173 (2.1.0/2.0.6) - TS: New attribute "max_mip_res" limits filtered texture access to MIP levels that are no higher than this resolution in any dimension. The default is 1<<30, meaning no effective limit. #2174 (2.1.1) - Stats now count the number of `TS::get_texture_info/IC::get_image_info` calls, like it did before for texture, etc. #2223 (2.1.1) - `TS::environment()` can resolve subimage by name, as we do for texture() and texture3d(). #2263 - Improvements to error message propagation. (2.1.3) - Avoid creating a new thread info struct while resolving udims. #2318 (2.1.4) - Work around bug in OpenEXR, where dwaa/dwab compression can crash when used on 1-channel tiled images with a tile size < 16. This can crop up for MIP-maps (high levels where rez < 16), so we detect this case and switch automatically to "zip" compression. #2378 (2.1.6) - When converting images to texture (via maketx or IBA::make_texture), correctly handle color space conversions for greyscale images. #2400 (2.1.8) * iv viewer: - Image info window now sorts the metadata, in the same manner as `iinfo -v` or `oiiotool -info -v`. #2159 (2.1.0/2.0.5) * All command line utilities, when run with just `--help`, will exit with return code 0. In other words, `utility --help` is not an error. #2364 (2.1.5) #2383 (2.1.8) * Python bindings: - Fix inability for Python to set timecode attributes (specifically, it was trouble setting ImageSpec attributes that were unsigned int arrays). #2279 (2.0.9/2.1.3) * Improved performance for ustring creation and lookup. #2315 (2.1.3) * BMP: - Fix bugs related to files with very high resolution (mostly 32 bit int overflow issues and care to use 64 bit fseeks). Also speed up reading and writing very large files. #2404 (2.1.8) * DPX: - Now recognizes the new transfer/colorimetric code for ADX. #2119 (2.1.0/2.0.4) - Fix potential crash when file open fails. #2186 (2.0.7/2.1.1) - Support for reading and writing 1-channel (luma, etc.) images. #2294 (2.0.10/2.1.3) - Fix huge DPX reading performance regression. #2333 (2.1.4) - Fix bugs related to int32 math that would lead to incorrect behavior in very high-resolution files. #2396 (2.1.3) * ffmpeg/Movie files: - Reading individual frames from very-multi-image files (movie files) has been greatly sped up (10x or more). #2345 (2.1.4) - Support for reading movie files that (a) contain alpha channels, and (b) have bit depths > 8 bits per channel. Previously, such files would be read, but would be presented to the app as a 3-channel 8 bit/channel RGB. #2349 (2.1.5) * FITS: - Fix 16 and 32 bit int pixels which FITS spec says are signed, but we were treating as unsigned. #2178 (2.1.0) * HDR/RGBE: - Fix bugs related to files with very high resolution (mostly 32 bit int overflow issues and care to use 64 bit fseek). Also speed up reading and writing very large files. #2406 (2.1.8) * IFF - Detect and error requests to open files for writing with resolutions too high to be properly supported by IFF files. #2397 (2.1.8) - Improve error messages when a file can't be opened. #2398 (2.1.8) * JPEG: - Read-from-memory is now supported via IOProxy use. #2180. (2.1.1) * JPEG-2000: - Disable JPEG-2000 support for the (rare) combination of an older OpenJPEG 1.x and EMBEDPLUGINS=0 mode, which was buggy. The solution if you really need EMBEDPLUGINS and JPEG-2000 support is to please use OpenJPEG >= 2.0. #2183. (2.0.7/2.1.1) * OpenEXR: - Avoid some OpenEXR/libIlmImf internal errors with DWA compression by switching to zip for single channel images with certain small tile sizes. #2147 (2.1.0/2.0.5) - Suppress empty string subimage name (fixes a problem with certain V-Ray written multi-part exr images). #2190 (2.1.1/2.0.7) - Fixed bug that broke th ability to specify compression of multipart OpenEXR files. #2252 (2.1.2) * PNG: - More careful catching and reporting errors and corrupt PNG files. #2167 (2.1.0/2.0.6) - IOProxy reading is now supported. #2180. (2.1.1) * PSD: - When reading PSD files with multiple PhotoShop "layers", properly set ImageSpec x, y to the image plane offset (upper left corner) of the layer, and set and metadata "oiio:subimagename" to the layer name. #2170 (2.1.0) * RAW: - Clarification about color spaces: The open-with-config hint "raw:ColorSpace" is more careful about color primaries versus transfer curve. Asking for "sRGB" (which is the default) gives you true sRGB -- both color primaries and transfer. Asking for "linear" gives you linear transfer with sRGB/Rec709 primaries. The default is true sRGB, because it will behave just like JPEG. #2260 (2.1.2) - Added "raw:half_size" and "raw:user_mul" configuration attributes. #2307 (2.1.3) * RLA: - Improved logic for determining the single best data type to report for all channels. #2282 (2.1.3) * SGI: - Fix bugs when writing extremely high resolution images, due to internal 32 bit arithmetic on file offsets. #2402 (2.1.8) - Speed up reading and writing of SGI files. #2402 (2.1.8) * Targa: - Put in checks to detect and error requests to write Targa with resolutions too high to be supported by the format. #2405 (2.1.8) * TIFF: - Fix problems with JPEG compression in some cases. #2117 (2.1.0/2.0.4) - Fix error where reading just a subset of channels, if that subset did not include the alpha channel but the image was "unassociated alpha", the attempt to automatically associate (i.e. "premultiply" the alpha) upon read would get bogus values because the alpha channel was not actually read. Now in this case it will not do the premultiplication. So if you are purposely reading RGB only from an RGBA file that is specifically "unassociated alpha", beware that you will not get the automatic premultiplication. #2122 (2.1.0/2.0.4) - More careful check and error reporting when user tries to request writing to a TIFF file mixed channel data types (which is not supported by the underlying libtiff). #2112 (2.1.0/2.0.5) - Fix crash reading certain old nconvert-written TIFF files. #2207 (2.0.8/2.1.1) - Fix bugs when reading TIFF "cmyk" files. #2292. (2.0.10/2.1.3) - Correctly handle read and write of 6, 14, and 24 bit per sample images. #2296 (2.1.3) - Fix potential deadlock in TIFF I/O: minor flaw with threadpool method #2327 (2.1.4) * WebP: - Fix bug that gave totally incorrect image read for webp images that had a smaller width than height. #2120 (2.1.0/2.0.4) * zfile: - Put in checks to detect and error requests to write zfiles with resolutions too high to be supported by the format. #2403 (2.1.8) * Fix potential threadpool deadlock issue that could happen if you were (among possibly other things?) simultaneously calling make_texture from multiple application threads. #2132 (2.1.0/2.0.4) * ImageInput/ImageOutput `create()` now properly lets you specify the type for reader/writer from the format name itself (versus just the extension, for example "openexr" versus "exr"). #2185 (2.1.1) * Make all the various "could not open" messages across the writers use the same phrasing. #2189 (2.1.1) * Better care in some image readers/writers to avoid errors stemming from integer overflow when compting the size of large images. #2232 (2.1.2) Build/test system improvements and platform ports: * Major overhaul of the CMake build system now that our CMake minimum is 3.12. #2348 #2352 #2357 #2360 #2368 #2370 #2372 #2373 (2.1.5) #2392 (2.1.8) Highlights: - All optional dependencies (e.g. "Pkg") now can be disabled (even if found) with cmake -DUSE_PKG=0 or environment variable USE_PKG=0. Previously, some packages supported this, others did not. - All dependencies can be given find hints via -DPkg_ROOT=path or by setting environment variable Pkg_ROOT=path. Previously, some did, some didn't, and the ones that did had totally inconsistent names for the path hint variable (PKG_HOME, PKG_ROOT_DIR, PKG_PATH, etc). - Nice color coded status messages making it much more clear which dependencies were found, which were not, which were disabled. - Use standard BUILD_SHARED_LIBS to control shared vs static libraries, replacing the old nonstandard BUILDSTATIC name. - Use correct PUBLIC/PRIVATE marks with target_link_libraries and target_include_directories, and rely on cmake properly understanding the transitive dependencies. - CMAKE_DEBUG_POSTFIX adds an optional suffix to debug libraries. - CMAKE_CXX_STANDARD to control C++ standard (instead of our nonstandard USE_CPP). - CXX_VISIBILITY_PRESET controls symbol visibility defaults now, not our nonstandard HIDE_SYMBOLS. And the default is to keep everything hidden that is not part of the public API. - At config time, `ENABLE_=0` (either as a CMake variable or an env variable) can be used to disable any individual file format or command line utility. E.g., `cmake -DENABLE_PNG=0 -DENABLE_oiiotool=0` This makes it easier to greatly reduce build time if you are 100% sure there are formats or components you don't want or need. - Config based install and usage. * Deprecate "missingmath.h". What little of it is still needed (it mostly addressed shortcomings of old MSVS releases) is now in fmath.h. #2086 * Remove "osdep.h" header that was no longer needed. #2097 * Appveyor scripts have been overhauled and simplified by relying on `vcpkg` to build dependencies. #2113 (2.1.0/2.0.4) * Detect and error if builder is trying to use a pybind11 that's too old. #2144 (2.1.0/2.0.5) * New CMake build-time option `OIIO_LIBNAME_SUFFIX` (default: empty) lets you append an optional name to the libraries produced (to disambiguate two builds at the same facility or distro, much like you could do before for symbols with custom namespaces). #2148 (2.1.0) * On MacOS 10.14 Mojave, fix warnings during `iv` compiler about OpenGL being deprecated in future releases. #2151 (2.1.0/2.0.5) * At build time, the Python version used can be controlled by setting the environment variable `$OIIO_PYTHON_VERSION`, which if set will initialize the default value of the CMake variable `PYTHON_VERSION`. #2161 (2.0.5/2.1.0) * On non-Windows systems, the build now generates a PkgConfig file, installed at `CMAKE_INSTALL_PREFIX/lib/pkgconfig/OpenImageIO.pc`. #2158 (2.0.5/2.1.0) * A new unit test has been backported from master, which tries to perform a series of read/write tests on every file format. In particular, this tests certain error conditions, like files not existing, or the directory not being writable, etc. #2181, #2189 (2.0.8/2.1.1) * Support for CI tests on CircleCI. #2194 (2.1.1) Retired in #2389 (2.1.8). * New build-time flag `USE_WEBP=0` can be used to disable building WebP format support even on platforms where webp libraries are found. #2200 (2.1.1) * Fix compiler warnings on Windows. #2209 #2213 #2214 #2392 * Crashes in the command line utilities now attempt to print a stack trace to aid in debugging (but only if OIIO is built with Boost >= 1.65, because it relies on the Boost stacktrace library). #2229 (2.0.8/2.1.1) * Add gcc9 to Travis tet matrix and fix gcc9 related warnings. #2235 (2.1.2) * VDB reader pulled in the TBB libraries using the wrong CMake variable. #2274 (2.1.3) * The embedded `fmt` implementation has been updated to fix windows warnings. #2280 (2.1.3) * Improvements for finding certain new Boost versions. #2293 (2.0.10/2.1.3) * Build fixes for MinGW. #2304, #2308 (2.0.10/2.1.3) * libraw: Fixes to make it build properly against some changes in the libraw development master. #2306 (2.1.3) * Use GitHub Actions CI. Eliminate Appveyor and some Travis tests. #2334 (2.1.4) #2356 (2.1.5) #2395 (2.1.8) * Updated and improved finding of OpenEXR and `build_openexr.bash` script that we use for CI. #2343 (2.1.4) * Upgrade the pybind11 version that we auto-install when not found (to 2.4.2), and add logic to detect the presence of some pybind11 versions that are known to be (buggily) incompatible with C++11. #2347 (2.1.5) * Fix errors in very new MSVS versions where it identified a suspicious practice of ImageBuf's use of a unique_ptr of an undefined type. Jump through some hoops to make that legal. #2350 (2.1.5) * All Python scripts in the tests have been modified as needed to make them correct for both Python 2.7 and 3.x. #2355, #2358 (2.1.5) * Tests are now safe to run in parallel and in unspecified order. Running with env variable CTEST_PARALLEL_LEVEL=[something more than 1] greatly speeds up the full testsuite on multi-core machines. #2365 (2.1.5) * Bump robin map version to latest release (v0.6.2) #2401 (2.1.8) * Fix compiler warnings in ustring.h when `_LIBCPP_VERSION` is not defined. #2415 (2.1.8.1) * Bump fmt library to v6.1.0. #2423 (2.1.8.1) Developer goodies / internals: * argparse.h: - Add unit tests. #2192 (2.1.1) - Add "%1" which is like "%*" but its list receives only arguments that come *before* any other dash-led arguments. #2192 (2.1.1) - Allow specifiers such as "%d:WIDTH" the part before the colon is the type specifier, the part after the colon is the name of the parameter for documentation purposes. #2312 (2.1.3) * attrdelegate.h: - New header implements "attribute delegates." (Read header for details) #2204 (2.1.1) * dassert.h: - Spruce up assertion macros: more uniform wording, and use pretty function printing to show what function the failure was in. #2262 - The new preferred assertion macros are `OIIO_ASSERT` and `OIIO_DASSERT`. The `OIIO_ASSERT` always tests and prints an error message if the test fails, but now only aborts when compiled without NDEBUG defined (i.e. no abort for release builds), whereas `OIIO_DASSERT` is for debug mode only and does nothing at all (not even perform the test) in release mode. These names and behaviors are preferred over the old `ASSERT` and `DASSERT`, though those deprecated names will continue for at least another major release. #2411 (2.1.8.1) * filesystem.h: - Change many filesystem calls to take string_view arguments. #2388 (2.1.8) - New `fseek()` and `ftell()` that always use 64 bit offsets to be safe for very large files. #2399 (2.1.8) * fmath.h: - `safe_mod()` does integer modulus but protects against mod-by-zero exceptions. #2121 (2.1.0/2.0.5) - pow2roundup/pow2rounddown have been renamed ceil2/floor2 to reflect future C++20 standard. The old names still work, so it's a fully back compatible change. #2199 (2.0.8/2.1.1) - To match C++20 notation, use `rotl()` template innstead of separate rotl32/rotl64 functions. #2299, #2309 (2.1.3) * platform.h: - New `OIIO_RETURNS_NONNULL` macro implements an attribute that marks a function that returns a pointer as guaranteeing that it's never NULL. #2150 (2.1.0/2.0.5) * SHA1.h: - Upgraded this embedded code from version 1.8 (2008) to the newest release, 2.1 (2012). This fixes some Windows warnings. #2342 (2.1.4) * simd.h: - Added vec4 * matrix44 multiplication. #2165 (2.1.0/2.0.6) - Guard against shenanigans when Xlib.h having been included and `#define`ing True and False. #2272 (2.0.9/2.1.3) * strutil.h: - Added `excise_string_after_head()`. #2173 (2.1.0/2.0.6) - Fixed incorrect return type of `stof()`. #2254 (2.1.2) - Added `remove_trailing_whitespace()` and `trim_whitespace()`. #2298 (2.1.3) - `Strutil::wordwrap()` now lets you specify the separation characters more flexibly (rather than being hard-coded to spaces as separators). #2116 (2.1.0/2.0.4) - `Strutil::parse_while()`. #2139 (2.1.0/2.0.5) - Added a variety of `join()` that allows you to set the number of items joined, truncating or padding with default values as needed. #2408 (2.1.8) - Fix `join` to produce a joined string of float-like values with locale-independent formatting. #2408 (2.1.8) - Fix `vsnprintf` to be locale independent. #2410 (2.1.8) - New `lstrip()` and `rstrip()` are just like the existing `strip()`, but operate only on the beginning/left side or ending/right side of the string, respectively. #2409 (2.1.8) * string_view.h: - `string_view` now adds an optional `pos` parameter to the `find_first_of` / `find_last_of` family of methods. #2114 (2.1.0/2.0.4) * sysutil.h: - Added `stacktrace()` and `setup_crash_stacktrace()`. (Only functional if OIIO is built with Boost >= 1.65, because it relies on the Boost stacktrace library). #2229 (2.0.8/2.1.1) * unittest.h: - Add `OIIO_CHECK_IMAGEBUF_STATUS()` test macro. #2394 (2.1.8) * unordered_map_concurrent.h: - Performance improvement by avoiding redundant hashing of keys, and improving the speed and properties of the hash function. #2313, #2316 (2.1.3) * ustring.h: - Bug fix in `ustring::compare(string_view)`, in cases where the string_view was longer than the ustring, but had the same character sequence up to the length of the ustring. #2283 (2.0.10/2.1.3) * Wide use of declaring methods `noexcept` when we want to promise that they won't throw exceptions. #2156, #2243 (2.1.0, 2.1.2) * Changed all (we think) internal string formatting that expects printf formatting notation to use the errorf/sprintf style calls, in anticipation of the error/format (no trailing -f) calls to eventually follow the std::format/python formatting notation. #2393 (2.1.8) Notable documentation changes: * The whole documentation system has been overhauled. The main docs have been converted from LaTeX to Sphinx (using Doxygen and Breathe) for beautiful HTML as well as PDF docs and automatic hosting on https://openimageio.readthedocs.io #2247,2250,2253,2255,2268,2265,2270 * Copyright notices have been changed for clarity and conformance with SPDX conventions. #2264 * New GitHub issue templates, making separate issue types for bug reports, feature requests, build problems, and questions. #2271,#2346 Release 2.0.13 (1 Dec 2019) -- compared to 2.0.12 -------------------------------------------------- * Bug fix in deep image compare (`IBA::compare()` or `oiiotool --compare`) would fail to notice differences in deep images where the corresponding pixels had differing numbers of samples. #2381 (2.1.8/2.0.13) * DPX: Fix bugs related to int32 math that would lead to incorrect behavior in very high-resolution files. #2396 (2.1.3/2.0.13) * When converting images to texture (via maketx or IBA::make_texture), correctly handle color space conversions for greyscale images. #2400 (2.1.8/2.0.13) * Build: suppress warnings with libraw for certain gcc versions. * Build: Fix compiler warnings in ustring.h when `_LIBCPP_VERSION` is not defined. #2415 (2.1.8.1/2.0.13) * filesystem.h: New `fseek()` and `ftell()` that always use 64 bit offsets to be safe for very large files. #2399 (2.1.8/2.0.13) * `Strutil::parse_string()` - fix bugs that would fail for escaped quotes within the string. #2386 (2.1.8/2.0.13) * `Strutil::join()` added a variety that allows you to set the number of items joined, truncating or padding with default values as needed. #2408 (2.1.8/2.0.13) * New `Strutil::lstrip()` and `rstrip()` are just like the existing `strip()`, but operate only on the beginning/left side or ending/right side of the string, respectively. #2409 (2.1.8/2.0.13) Release 2.0.12 (1 Nov, 2019) -- compared to 2.0.11 -------------------------------------------------- * Fix compiler warnings on some platform. #2375 * Work around bug in OpenEXR, where dwaa/dwab compression can crash when used on 1-channel tiled images with a tile size < 16. This can crop up for MIP-maps (high levels where rez < 16), so we detect this case and switch automatically to "zip" compression. #2378 Release 2.0.11 (1 Oct, 2019) -- compared to 2.0.10 ------------------------------------------------- * Fixes to build against LibRaw master. #2306 * Fix DPX reading performance regression. #2333 * Guard against buggy pybind11 versions. #2347 * Fixes for safe Cuda compilation of `invert<>` in fmath.h. #2197 Release 2.0.10 (1 Aug, 2019) -- compared to 2.0.9 ------------------------------------------------- * ColorConfig improvements: (a) new getColorSpaceFamilyByName(); (b) new methods to return the list of all color spaces, looks, displays, or views for a display; (c) all of ColorConfig now exposed to Python. #2248 * `IBA::ociodisplay()` and `oiiotool --ociodisplay`: empty display or view names imply using the default display or view. #2273 * Bug fix in `ustring::compare(string_view)`, in cases where the string_view was longer than the ustring, but had the same character sequence up to the length of the ustring. #2283 * `oiiotool --stats`: Fixed bug where `-iconfig` hints were not being applied to the file as it was opened to compute the stats. #2288 * Bug fix: `IBA::computePixelStats()` was not properly controlling the number of threads with the `nthreads` parameter. #2289 * Bug fix when reading TIFF bugs: In cases where the reader needed to close and re-open the file silently (it could happen for certain scanline traversal patterns), the re-open was not properly honorig any previous "rawcolor" hints from the original open. #2285 * Nuke txWriter updates that expose additional make_texture controls. #2290 * Build system: Improvements for finding certain new Boost versions. #2293 * Build system: Improvements finding OpenEXR installation. * Fix bugs when reading TIFF "cmyk" files. #2292. * DPX: support for reading and writing 1-channel (luma, etc.) DPX images. #2294 * `IBA::fixNonFinite()`: fixed impicit float/double casts to half. #2301 * Build fixes for MinGW. #2304 Release 2.0.9 (4 Jul, 2019) -- compared to 2.0.8 ------------------------------------------------ * RAW: Clarification about color spaces: The open-with-config hint "raw:ColorSpace" is more careful about color primaries versus transfer curve. Asking for "sRGB" (which is the default) gives you true sRGB -- both color primaries and transfer. Asking for "linear" gives you linear transfer with sRGB/Rec709 primaries. The default is true sRGB, because it will behave just like JPEG. #2260 (2.1.2) * Improved oiiotool support of files with multiple subimages: Several commands honored `-a` but did not respect individual `allsubimages=` modifiers (--ch, --sattrib, --attrib, --caption, --clear-keywords, --iscolorspace, --orientation, --clamp, -fixnan); Several commands always worked on all subimages, but now properly respect `-a` and `allsubimages=` (--origin, --fullpixels, --croptofull, --trim); Several commands were totally unaware of subimages, but now are so and respect `-a` and `allsubimages=` (--crop, --fullsize, --zover, --fill, --resize, --resample). #2202 #2219, #2242 * Fix broken ability to specify compression of multipart exr files. #2252 * Fix Strutil::stof() return type error and other windows warnings. #2254 * IBA::colortmatrixtransform() and `oiiotool --ccmatrix` allow you to perform a matrix-based color space transformation. #2168 * Guard simd.h against shenanigans when Xlib.h having been included and `#define`ing True and False. #2272 * RAW: Clarification about color spaces: The open-with-config hint "raw:ColorSpace" is more careful about color primaries versus transfer curve. Asking for "sRGB" (which is the default) gives you true sRGB -- both color primaries and transfer. Asking for "linear" gives you linear transfer with sRGB/Rec709 primaries. The default is true sRGB, because it will behave just like JPEG. #2260 * Fix inability for python to set timecode attributes (specifically, it was trouble setting ImageSpec attributes that were unnsigned int arrays). #2279 Release 2.0.8 (3 May, 2019) -- compared to 2.0.7 ------------------------------------------------ * Fix Windows broken read of JPEG & PNG in some circumstances. #2231 * Some minor fixes to JPEG & PNG reading and file error robustness. #2187 * Fix crash reading certain old nconvert-written TIFF files. #2207 * Internals: The `OIIO_DISPATCH_COMMON_TYPES2/3` macros used by many ImageBufAlgo functions have been expanded to handle a few more cases "natively" without conversion to/from float. This may make a few cases of odd data type combinations have higher precision. #2203 * ImageBufAlgo::resize() fixes precision issues for 'double' images. #2211 * Testing: A new unit test has been backported from master, which tries to perform a series of read/write tests on every file format. In partcular, this tests certain error conditions, like files not existing, or the directory not being writable, etc. #2181 * Crashes in the command line utilities now attempt to print a stack trace to aid in debugging (but only if OIIO is built with Boost >= 1.65, because it relies on the Boost stacktrace library). #2229 * Dev goodies: fmath.h's powwroundup/pow2rounddown have been renamed ceil2/floor2 to reflect future C++ standard. The old names still work, so it's a fully back compatible change. #2199 Release 2.0.7 (1 Apr, 2019) -- compared to 2.0.6 ------------------------------------------------ * DPX: fix potential crash when file open fails. #2186 * EXR: Suppress empty string for subimage name (fixes a problem when reading files written by V-Ray). #2190 * Disable JPEG-2000 support for the (rare) combination of an older OpenJPEG 1.x and EMBEDPLUGINS=0 mode, which was buggy. The solution if you really need EMBEDPLUGINS and JPEG-2000 support is to please use OpenJPEG >= 2.0. #2183. * New build flag `USE_WEBP=0` can be set to 0 to force disabled support of WebP even when the webp package is found. #2200 * Bug fix: `ImageInput::create(name)` and `ImageOutput::create(name)` worked if `name` was a filename (such as `foo.exr`), or the extension (such as `exr`), but previously did not work if it was the name of the format (such as `openexr`), despite having been documented as working in that case. #2185 Release 2.0.6 (1 Mar, 2019) -- compared to 2.0.5 ------------------------------------------------ * PNG: more careful catching of errors and corrupt png files. #2167 * PSD: read now properly extracts layer/subimage name and data window offset coordinates. #2170 * ImageBuf: Fix bug in propagating unassociated alpha behavior request. #2172 * `oiiotool -o:all=1` fix crash when outputting 0x0 subimages. #2171 * Developer goodies: simd.h ops for vec4 * mat44 multiplication. #2165 * Developer goodies: `Strutil::excise_string_after_head()` #2173 * Fix crashes on Windows from certain regex replacement happening as part of MakeTexture (internally avoid MSVS implementation of std::regex). #2173 Release 2.0.5 (1 Feb, 2019) -- compared to 2.0.4 ------------------------------------------------ * `resize()`, `fit()`, and `resample()` are no longer restricted to source and destination images having the same numer of channels. #2125 * Python error reporting for `ImageOutput` and `ImageBuf.set_pixels` involving transferring pixel arrays have changed from throwing exceptions to reporting errors through the usual OIIO error return codes and queries. #2127 * Protection against certain divide-by-zero errors when using very blurry latlong environment map lookups. #2121 * New shell environment variable `OPENIMAGEIO_OPTIONS` can now be used to set global `OIIO::attribute()` settings upon startup (comma separated name=value syntax). #2128 * ImageInput open-with-config new attribute `"missingcolor"` can supply a value for missing tiles or scanlines in a file in lieu of treating it as an error (for example, how OpenEXR allows missing tiles, or when reading an incompletely-written image file). A new global `OIIO::attribute()` setting (same name) also accomplishes the same thing for all files read. Note that this is only advisory, and not all file times are able to do this (OpenEXR is the main one of interest, so that works). #2129 * New filter name `"nuke-lanczos6"` matches the "lanczos6" filter from Nuke. In reality, it's identical to our "lanczos3", but the name alias is supposed to make it more clear which one to use to match Nuke, which uses a different nomenclature (our "3" is radius, their "6" is full width). #2136 * `maketx -u` is smarter about which textures to avoid re-making because they are repeats of earlier commands. #2140 * Detect/error if builder is trying to use a pybind11 that's too old. #2144 * OpenEXR: avoid some OpenEXR/libIlmImf internal errors with DWA compression by switching to zip for single channel images with certain small tile sizes. #2147 * On MacOS 10.14 Mojave, fix warnings during `iv` compile about OpenGL being deprecated in future releases. #2151 * `iv` info window now sorts the metadata. #2159 * At build time, the Python version used can be controlled by setting the environment variable `$OIIO_PYTHON_VERSION`, which if set will initialize the default value of the CMake variable `PYTHON_VERSION`. #2161 (2.0.5) * On non-Windows systems, the build now generates a PkgConfig file, installed at `CMAKE_INSTALL_PREFIX/lib/pkgconfig/OpenImageIO.pc`. #2158 (2.0.5) Release 2.0.4 (Jan 5, 2019) -- compared to 2.0.3 ------------------------------------------------ * Fix potential threadpool deadlock issue that could happen if you were (among possibly other things?) simultaneously calling make_texture from multiple application threads. #2132 * ImageInput read_image/scanline/tile fixed subtle bugs for certain combination of strides and channel subset reads. #2108 * TIFF: Fix problems with JPEG compression in some cases. #2117 * TIFF: Fixed error where reading just a subset of channels, if that subset did not include the alpha channel but the image was "unassociated alpha", the attempt to automatically associate (i.e. "premultiply" the alpha) upon read would get bogus values because the alpha channel was not actually read. Now in this case it will not do the premultiplication. So if you are purposely reading RGB only from an RGBA file that is specifically "unassociated alpha", beware that you will not get the automatic premultiplication. #2122 * Python: define `__version__` for the module. #2096 * IBA::channel_append() previously always forced its result to be float, if it wasn't previously initialized. Now it uses the uaual type-merging logic, making the result the "widest" type of the inputs. #2095 * ImageSpec::find_attribute now will retrive "datawindow" and "displaywindow" (type int[4] for images int[6] for volumes) giving the OpenEXR-like bounds even though there is no such named metadata for OIIO (the results will assembled from x, y, width, height, etc.). #2110 * ImageCache/TextureSystem: more specific error message when tile reads appear to be due to the file having changed or been overwritten on disk since it was first opened. #2115 * oiiotool: New `-evaloff` and `-evalon` lets you disable and enable the expression substitution for regions of arguments (for example, if you have an input image filename that contains `{}` brace characters that you want interpreted literally, not evaluated as an expression). #2100 * oiiotool `--dumpdata` has more intelligible output for uint8 images. #2124 * maketx: the `-u` (update mode) is slightly less conservative now, no longer forcing a rebuild of the texture just because the file uses a different relative directory path than last time. #2109 * WebP: fix bug that gave totally incorrect image read for webp images that had a smaller width than height. #2120 * Developer goodies: string_view now adds an optional `pos` parameter to the `find_first_of`/`find_last_of` family of methods. #2114 * Dev goodies: Strutil::wordwrap() now lets you specify the separation characters more flexibly (rather than being hard-coded to spaces as separators). #2116 Release 2.0 (Dec 1, 2018) -- compared to 1.8.x ---------------------------------------------- New minimum dependencies: * On Windows compiling with MSVS, the new minimum version is MSVS 2015. Major new features and improvements: * ImageInput and ImageOutput static create() and open() methods now return `unique_ptr` rather than raw pointers. #1934, #1945 (1.9.3). * ImageInput improvements to thread safety and concurrency, including some new API calls (see "Public API changes" section below). * ImageBufAlgo overhaul (both C++ and Python): Add IBA functions that return image results directly rather than passing ImageBuf references as parameters for output (the old kind of calls still exist, too, and have their uses). Also in C++, change all IBA functions that took raw pointers to per-channel colors into `span<>` for safety. #1961 (1.9.4) * For some readers and writers, an "IOProxy" can be passed that customizes the I/O methods. An important use of this is to write an image "file" to memory or to read an image "file" from a memory, rather than disk. Currently, OpenEXR supports this for both reading and writing, and PNG supports it for writing. You specify a pointer to the proxy via the configuration option "oiio:ioproxy". #1931 (1.9.3) * New Image Format support: * OpenVDB file read (as volume images or accessing via texture3d()). #2010,2018 (1.9.4) * "null" images -- null reader just returns black (or constant colored) pixels, null writer just returns. This can be used for benchmarking (to eliminate all actual file I/O time), "dry run" where you want to test without creating output files. #1778 (1.9.0), #2042 (1.9.4) * TIFF I/O of multiple scanlines or tiles at once (or whole images, as is typical use case for oiiotool and maketx) is sped up by a large factor on modern multicore systems. We've seen 10x or more faster oiiotool performance for uint8 and uint16 TIFF files using "zip" (deflate) compression, on modern 12-16 core machines. #1853 (1.9.2) * Major refactor of Exif metadata handling, including much more complete metadata support for RAW formats and support of camera "maker notes" for Canon cameras. #1774 (1.9.0) * New `maketx` option `--bumpslopes` specifically for converting bump maps, saves additional channels containing slope distribution moments that can be used in shaders for "bump to roughness" calculations. #1810,#1913,2005 (1.9.2), #2044 (1.9.4) * An official FindOpenImageIO.cmake that we invite you to use in other cmake-based projects that needs to find OIIO. #2027 (1.9.4) Public API changes: * **Python binding overhaul** The Python bindings have been reimplemented with [`pybind11`](https://github.com/pybind/pybind11), no longer with Boost.Python. #1801 (1.9.1) In the process (partly due to what's easy or hard in pybind11, but partly just because it caused us to revisit the python APIs), there are some minor API changes, some of which are breaking! To wit: * All of the functions that are passed or return blocks of pixels (such as `ImageInput.read_image()`) now use Numpy `ndarray` objects indexed as `[y][x][channel]` (no longer using old-style Python `array.array` and flattened to 1D). * Specilized enum type `ImageInput.OpenMode` has been replaced by string parameters, so for example, old `ImageInput.open(filename, ImageInput.Create)` is now `ImageInput.open (filename, "Create")` * Any function that previously took a parameter of type `TypeDesc` or `TypeDesc.BASETYPE` now will accept a string that signifies the type. For example, `ImageBuf.set_write_format("float")` is now a synonym for `ImageBuf.set_write_format(oiio.TypeDesc(oiio.FLOAT))`. * For several color conversion functions, parameter names were changed from "from" to "fromspace" and "to" to "tospace" to avoid a clash with the Python reserved word `from`. #2084 * **ImageInput API changes for thread safety and statelessness** #1927 (1.9.2) * `seek_subimage()` no longer takes an `ImageSpec&`, to avoid the obligatory copy. (If the copy is desired, just call `spec()` to get it afterwards.) * All of the `read_*()` methods now have varieties that take arguments specifying the subimage and mip level. The `read_native_*()` methods supplied by ImageInput subclass implementations now ONLY come in the variety that takes a subimage and miplevel. * All of the `read_*()` calls that take subimage/miplevel explicitly are guaranteed to be stateless and thread-safe against each other (it's not necessary to call `seek_subimage` first, nor to have to lock a mutex to ensure that another thread doesn't change the subimage before you get a chance to call read). For back-compatibility, there are still versions that don't take subimage/miplevel, require a prior call to seek_subimge, and are thus not considered thread-safe. * New methods `spec(subimage,miplevel)` and `spec_dimensions(s,m)` let you retrieve a copy of the ImageSpec for a given subimage and MIP level (thread-safe, and without needing a prior `seek_subimage`) call. Note that to be stateless and thread-safe, these return a COPY of the spec, rather than the reference returned by the stateful `spec()` call that has no arguments and requires a prior `seek_subimage`. However, `spec_dimensions()` does not copy the channel names or the arbitrary metadata, and is thus very inexpensive if the only thing you need from the spec copy is the image dimensions and channel formats. * **ImageInput and ImageOutput create/open changes** * The static `create()` and `open()` methods have been changed so that instead of returning an `ImageInput *` (or `ImageOutput *`) and requiring the caller to correctly manage that resource and eventually destroy it, now they return a `unique_ptr` that automatically deletes when it leaves scope. In the process we also clean up some edge cases on Windows where it was possible for ImageInput/ImageOutput to have been allocated in one DLL's heap but freed in a different DLL's heap, which could cause subtle heap corruption problems. #1934,#1945 (1.9.3). * **ImageBuf** * New method `set_origin()` changes the pixel data window origin. #1949 (1.9.4) * Assignment (`operator=`) is now enabled for ImageBuf, both the copying and moving variety. Also, an explicit copy() method has been added that returns a full copy of the ImageBuf. #1952 (1.9.4) * write() method has had its arguments changed and now takes an optional TypeDesc that lets you specify a requested data type when writing the output file, rather than requiring a previous and separate call to set_write_format(). The old call signature of write() still exists, but it will be considered deprecated in the future. #1953 (1.9.4) * **ImageBufAlgo** * In C++, functions that take raw pointers for per-channel constant values or results are deprecated, in favor of new versions that heavily rely on `span<>` to safely pass array references and their lengths. #1961 (1.9.4) * In both C++ and Python, every IBA function that takes a parameter giving an ImageBuf destination reference for results have an additional variant that directly returns an ImageBuf result. This makes much cleaner, more readable code, in cases where it's not necessary to write partial results into an existing IB. #1961 (1.9.4) * In C++, many IBA functions that came in multiple versions for whether certain parameters could be an image, a per-channel constant, or a single constant, have been replaced by a single version that takes a new parameter-passing helper class, `Image_or_Const` that will match against any of those choices. (No changes are necessary for calling programs, but it makes the header and documentation a lot simpler.) #1961 (1.9.4) * IBA compare(), computePixelStats(), and histogram() now directly return their result structures, intead of requiring the passing of a destination reference. #1961 (1.9.4) * New IBA::fit() resizes and image to just fit in the given size, but preserve its aspect ratio (padding with black as necessary). It's just like what `oiiotool --fit` has always done, but now you can call it directly from C++ or Python. #1993 (1.9.4) * New `contrast_remap()` allows flexible linear or sigmoidal contrast remapping. #2043 (1.9.4) * `ImageBufAlgo::colorconvert` and various `ocio` transformations have changed the default value of their `unpremult` parameter from `false` to `true`, reflecting the fact that we believe this is almost always the more correct choice. Also, if their input image is clearly marked as having unasociated alpha already, they will not bracket the color conversion with the requested unpremult/premult. #1864 (1.9.2) * Updated the OpenCV interoperability with new functions to_OpenCV (make an ImageBuf out of a cv::Mat) and from_OpenCV (fill in a cv::Mat with the contents of an ImageBuf). Deprecated the old from_IplImage and to_IplImage, which are very OpenCV-1.x-centric. (2.0.2) * **ImageCache/TextureSystem:** * ImageCache and TextureSystem now have `close(filename)` and `close_all()` methods, which for one file or all files will close the files and release any open file handles (also unlocking write access to those files on Windows), but without invalidating anything it knows about the ImageSpec or any pixel tiles already read from the files, as would happen with a call to the much more drastic `invalidate()` or `invalidate_all()`. #1950 (1.9.4) * `TextureSystem::create()` has an additional optional argument that allows the caller to pass an existing app-owned custom ImageCache. #2019 (1.9.4) * New `TextureSystem::imagecache()` method returns a blind, non-owning pointer to the underlying ImageCache of that TS. #2019 (1.9.4) * ImageCache: extended add_tile() with an optional `copy` parameter (which defaults to `true`), which when set to `false` will make a tile that references an app buffer without allocating, copying, and owning the memory. In short, this makes it possible to reference existing memory holding an image array, as if it were a texture. #2012 (1.9.4) * `ImageCache::add_file()` extended with an optional `replace` parameter (default: false), that if true, will replace the tile and invalidate the old one. #2021 (1.9.4) * **Changes to string formatting**: #2076 (2.0.1) * New `Strutil::sprintf()` and `ustring::sprintf()` functions are for printf-style formatted errors and warnings. You are encouraged to change your existing `format()` calls to `sprintf()`, since the original `format` may in a later version (2.1?) switch to Python-style formatting commands, but `sprintf` will continue to reliably use C printf style notation. * In ImageInput, ImageOutput, ImageBuf, and ErrorHandler, new `errorf()` and `warningf()` methods similarly provide printf-style formatted errors and warnings. The old `error()/warning()` calls will someday (maybe 2.1?) switch to Python-style formatting commands, but `errorf` will continue to reliably use C printf style notation. * ColorConfig changes: ColorConfig methods now return shared pointers to `ColorProcessor` rather than raw pointers. It is therefore no longer required to make an explicit delete call. Created ColorProcessor objects are now internally cached, so asking for the same color transformation multiple times is no longer expensive. The ColorProcessor interface is now in `color.h` and can be directly used to perform transformations on individual colors (previously it was just an opaque pointer and could only be used to pass into certain IBA functions). The color space names "rgb" and "default" are now understood to be synonyms for the default "linear" color space. #1788 (1.9.0) * Remove long-deprecated API calls: * ImageBuf::get_pixels/get_pixel_channels varieties deprecated since 1.6. * ImageBuf::set_deep_value_uint, deprecated since 1.7. * ImageBuf::deep_alloc, deprecated since 1.7. * ImageBufAlgo::colorconvert variety deprecated since 1.7. * ImageCache::clear, deprecated since 1.7. * ImageCache::add_tile variety deprecated since 1.6. * ROI new methods: contains() #1874, #1878 (1.9.2) * `ImageBufAlgo::pixeladdr()` now takes an additional optional parameter, the channel number. #1880 (1.9.2) * Global OIIO attribute "log_times" (which defaults to 0 but can be overridden by setting the `OPENIMAGEIO_LOG_TIMES` environment variable), when nonzero, instruments ImageBufAlgo functions to record the number of times they are called and how much time they take to execute. A report of these times can be retrieved as a string as the "timing_report" attribute, or it will be printed to stdout automatically if the value of log_times is 2 or more at the time that the application exits. #1885 (1.9.2) * Moved the definition of `ROI` from `imagebuf.h` to `imageio.h` and make most of the methods `constexpr`. #1906 (1.9.2) * Rename/move of `array_view` to `span`. Deprecated `array_view` and moved array_view.h contents to span.h. You should change `array_view` to `span` and `array_view` to `cspan`. #1956,2062 (1.9.4) * ustring: removed `operator int()` that allowed simple int casting such as: ``` ustring u, v; if (u || !v) { ... } ``` This was error-prone, neither std::string nor std::string_view had the equivalent, so we are removing it. The preferred idiom is: ``` if (!u.empty() || v.empty()) { ... } ``` Performance improvements: * ImageBufAlgo::computePixelStats is now multithreaded and should improve by a large factor when running on a machine with many cores. This is particularly noticable for maketx. #1852 (1.9.2) * Color conversions are sped up by 50% for 4 channel float images, about 30% for other combinations of channels or data formats. #1868 (1.9.2) * ImageBuf::get_pixels() sped up by around 3x for the common case of the image being fully in memory (the slower path is now only used for ImageCache-based images). #1872 (1.9.2) * ImageBufAlgo::copy() and crop() sped up for in-memory buffers, by about 35-45% when copying between buffers of the same type, 2-4x when copying between buffers of different data types. #1877 (1.9.2) * ImageBufAlgo::over() when both buffers are in-memory, float, 4-channels, sped up by about 2x. #1879 (1.9.2). * ImageBufAlgo::fill() of a constant color sped up by 1.5-2.5x (depending on the data type involved). #1886 (1.9.2) Fixes and feature enhancements: * oiiotool * `--help` prints important usage tips that explain command parsing, syntax of optional modifiers, and the path to PDF docs. #1811 (1.9.2) * `--colormap` has new maps "inferno", "magma", "plasma", "viridis", which are perceptually uniform, monotonically increasing luminance, look good converted to greyscale, and usable by people with color blindness. #1820 (1.9.2) * oiiotool no longer enables autotile by default. #1856 (1.9.2) * `--colorconvert`, `--tocolorspace`, and all of the `--ocio` commands now take an optional modifier `:unpremult=1` which causes the color conversion to be internally bracketed by unpremult/premult steps (if the image has alpha and is not already marked as having unassociated alpha). You should therefore prefer `--colorconvert:unpremult=1 from to` rather than the more complex `--unpremult --colorconvert from to -premult`. #1864 (1.9.2) * `--autocc` will also cause unpremult/premult to bracket any color transformations it does automatically for read and write (if the image has alpha and does not appear to already be unassociated). #1864 (1.9.2) * `--help` prints the name of the OCIO color config file. #1869 (1.9.2) * Frame sequence wildcard improvements: fix handling of negative frame numbers and ranges, also the `--frames` command line option is not enough to trigger a loop over those frame numbers, even if no other arguments appear to have wildcard structure. #1894 (1.8.10/1.9.2) * `--info -v` now prints metadata in sorted order, making it easier to spot the existance of particular metadata. #1982 (1.9.4) * `--no-autopremult` fixed, it wasn't working properly for cases that were read directly rather than backed by ImageCache. #1984 (1.9.4) * New `--contrast` allows for contrast remapping (linear or sigmoidal). #2043 (1.9.4) * Improved logic for propagating the pixel data format through multiple operations, especially for files with multiple subimages. #1769 (1.9.0/1.8.6) * Outputs are now written to temporary files, then atomically moved to the specified filename at the end. This makes it safe for oiiotool to "overwrite" a file (i.e. `oiiotool in.tif ... -o out.tif`) without problematic situations where the file is truncated or overwritten before the reading is complete. #1797 (1.8.7/1.9.1) * Fixed problem with reading `half` files where very small (denormalized) half values could get squashed to float 0.0 instead of having their values preserved, if certain old versions of libopenjpeg were being used (because they set a CPU flag strangely upon library load and then never changed it back, this is a libopenjpeg bug that has since been fixed). #2048 (2.0) * `-d chan=type` logic fixed for certain cases of specifying the data types of individual channels. #2061 (2.0beta2) * Expression evaluation: metadata names can now be enclosed in single or double quotes if they don't follow "C" identifier naming conventions. For example, `{TOP.'foo/bar'}` retrieves metadata called "foo/bar" rather than trying to retrieve "foo" and divide by bar. #2068 (2.0beta2) * Expression evaluation: When retrieving metadata, timecode data will be expressed properly as a string ("00:00:00:00"). #2068 (2.0beta2) * ImageBufAlgo: * `color_map()` supports new maps "inferno", "magma", "plasma", "viridis". #1820 (1.9.2) * Across many functions, improve channel logic when combining an image with alpha with another image without alpha. #1827 (1.9.2) * `mad()` now takes an `img*color+img` variety. (Previously it supported `img*img+img` and `img*color+color`.) #1866 (1.9.2) * New `fit()` is like resize but fits inside a specified window size, while preserving the aspect ratio of the image appearance. #1993. * New `contrast_remap()` allows flexible linear or sigmoidal contrast remapping. #2043 (1.9.4) * `channel_append()` is no longer limited to requiring the two input images to have the same pixel data type. #2022 (1.9.4) * `isConstantColor()`, `isConstantChannel()`, and `isMonochrome()` have added an optional `threshold` parameter that allows you to compute whether the image is constant or monochrome within a non-zero tolerance (the default is still 0.0, meaning checking for an exact match). #2049 (2.0.0) * `IBA::ociodisplay()` has better behavior when its "fromspace" parameter is left blank -- instead of assuming "linear" (as a space name), it assumes it's whatever space in your OCIO color config has the "linear" role. #2083 (1.8.17/2.0.1) * ImageBuf: * Bug fixed in IB::copy() of rare types. #1829 (1.9.2) * write() automatically tells the ImageCache to 'invalidate' the file being written, so cached images will not retain the prior version of the files. #1916 (1.9.2) * Bug fix to ImageBuf::contains_roi() method -- it erroneously always returned `true`. #1997 (1.8.14/1.9.4) * ImageCache/TextureSystem/maketx: * Improved stats on how long we wait for ImageInput mutexes. #1779 (1.9.0/1.8.6) * Improved performance of IC/TS tile and file caches under heavy contention from many threads. #1780 (1.9.0) * Increased the default `max_tile_channels` limit from 5 to 6. #1803 (1.9.1) * maketx: improved image hashing to avoid some (extremely rare) possible hash collisions. #1819 (1.9.2) * IC/TS performance improvements by changing the underlying hash table implementation. #1823,1824,1825,1826,1830 (1.9.2) * texture()/texture3d(): when requesting a nonexistent "subimage", return the fill color, like we do when requesting nonexistent channels (rather than nondeterministically simply not filling in the result). #1917 (1.9.2) * Relying on some changes to the ImageInput API, there is now much less thread locking to protect the underlying ImageInputs, and this should improve texture and image cache performance when many threads need to read tiles from the same file. #1927 (1.9.2) * `get_image_info()`/`get_texture_info()` is now more flexible about retrieving arrays vs aggregates, in cases where the total number of elements is correct. #1968 (1.9.4) * Fix uninitialized read within the texture system (only affected statistics, never gave wrong texture results). #2000 (1.9.4) * texture3d() transforms lookup points from world into local space if the file has a "worldtolocal" metadata giving a 4x4 matrix. #2009 (1.9.4) * Fix minor texture filtering bug where widely disparate "sblur" and "tblur" values could in some circumstances lead to incorrect texture filter estimation. #2052 (2.0.0) * `ImageCache::invalidate(filename)` did not properly invalidate the "fingerprint" is used to detect duplicate files. #2081 (1.8.17/2.0.1) * iv: * Fix (especially on OSX) for various ways it has been broken since the shift to Qt5. #1946 (1.8.12, 1.9.4) * New optin `--no-autopremult` works like oiiotool, causes images with unassociated alpha to not be automatically premultiplied by alpha as they are read in. #1984 (1.9.4) * All string->numeric parsing and numeric->string formatting is now locale-independent and always uses '.' as decimal marker. #1796 (1.9.0) * Python Imagebuf.get_pixels and set_pixels bugs fixed, in the varieties that take an ROI to describe the region. #1802 (1.9.2) * Python: Implement missing `ImageOutput.open()` call variety for declaring multiple subimages. #2074 (2.0.1) * More robust parsing of XMP metadata for unknown metadata names. #1816 (1.9.2/1.8.7) * Fix ImageSpec constructor from an ROI, display/"full" window did not get the right default origin. #1997 (1.8.14/1.9.4) * ImageSpec::erase_attribute() fix bug where it got case-sensitivity of the search backwards when built using std::regex rather than boost::regex. #2003 (1.8.14/1.9.4) * DPX: * Better catching of write errors, including filling the disk while in the process of writing a DPX file. #2072 (2.0.1) * Field3d: * Prevent crashes when open fails. #1848 (1.9.2/1.8.8) * Fix potential mutex deadlock. #1972 (1.9.4) * GIF: * Fix crash when reading GIF with comment extension but no comment data. #2001 (1.8.14/1.9.4) * JPEG: * When writing, be robust to accidentally setting the "density" metadata to values larger than JPEG's 16 bit integer field will accommodate. #2002 (1.8.14/1.9.4) * Better detection and reporting of error conditions while reading corrupt JPEG files. #2073 (2.0.1) * OpenEXR: * Gracefully detect and reject files with subsampled channels, which is a rarely-to-never-used OpenEXR feature that we don't support properly. #1849 (1.9.2/1.8.8) * Improved handling of UTF-8 filenames on Windows. #1941 (1.9.3, 1.8.12, 1.7.19) * PNG: * Fix redundant png_write_end call. #1910 (1.9.2) * PSD: * Fix parse issue of layer mask data. #1777 (1.9.2) * RAW: * Add "raw:HighlightMode" configuration hint to control libraw's handling of highlight mode processing. #1851 * Important bug fix when dealing with rotated (and vertical) images, which were not being re-oriented properly and could get strangely scrambled. #1854 (1.9.2/1.8.9) * Major rewrite of the way makernotes and camera-specific metadata are handled, resulting in much more (and more accurate) reporting of camera metadata. #1985 (1.9.4) * The "oiio:ColorSpace" metadata is now set correctly when reading raw DSLR images. And we deprecate the old "raw:ColorSpace" metadata, which is useless. #2016 (1.9.4) * Add "raw:aber" configuration hint to control libraw's adjustments for chromatic aberration. This data is of type "float[2]", the first value is the scale factor for red, the second for blue, and both should be very close to 1.0. #2030 (1.9.4) * TIFF: * Improve performance of TIFF scanline output. #1833 (1.9.2) * Bug fix: read_tile() and read_tiles() input of un-premultiplied tiles botched the "shape" of the tile data array. #1907 (1.9.2/1.8.10) * Improvement in speed of reading headers (by removing redundant call to TIFFSetDirectory). #1922 (1.9.2) * When config option "oiio:UnassociatedAlpha" is nonzero (or not set -- which is the default), therefore enabling automatic premultiplication by alpha for any unassociated alpha files, it will set the metadata "tiff:UnassociatedAlpha" to indicate that the original file was unassociated. #1984 (1.9.4) * Bug fixes for TIFF reads of images with unassociated alpha -- there were some edge cases where they pixels failed to automatically premultiply upon read. #2032 (1.9.4) * zfile: more careful gzopen on Windows that could crash when given bogus filename. #1839,2070 (1.9.2/1.8.8/2.0.1) * Windows fix: Safer thread pool destruction on. #2038 (1.9.4) Build/test system improvements and platform ports: * Fixes for Windows build. #1793, #1794 (1.9.0/1.8.6), #2025 (1.9.4) * Fix build bug where if the makefile wrapper got `CODECOV=0`, it would force a "Debug" build (required for code coverage tests) even though code coverage is instructed to be off. (It would be fine if you didn't specify `CODECOV` at all.) #1792 (1.9.0/1.8.6) * Build: Fix broken build when Freetype was not found or disabled. #1800 (1.8.6/1.9.1) * Build: Boost.Python is no longer a dependency, but `pybind11` is. If not found on the system, it will be automatically downloaded. #1801, #2031 (1.9.1) * Time for a multi-core build of OIIO is reduced by 40% by refactoring some extra big modules into more bite-sized pieces. #1806 (1.9.2) * testtex: * Make the "thread workout" cases all honor `--handle`. #1778 (1.9.0) * Only prints detailed stats if `-v` is used, and new option `--invalidate` will invalidate the cache when starting each threadtimes trial. #1828 (1.9.2) * New `--anisoratio` lets you choose anisotropic shape for thread working tests, and make thread_workout samples twice as big to be more typical by interpolating mip levels. #1840 (1.9.2) * TextureSystem stats are printed as well as ImageCache. #1840 (1.9.2) * iv no longer requires GLEW, using QOpenGLFunctions instead. #1840 (1.9.2) * DICOM: Fix dcmtk build errors on some platforms. Also, the minimum dcmtk version we suport is 3.6.1. #1843 (1.9.2/1.8.8) * Build fixes for Hurd OS. #1850 (1.9.2/1.8.8) * Clean up leak sanitizer errors. #1855 (1.9.2) * On Unix/Linux, add explicit DL library dependency to libOpenImageIO.so itself instead of only to the binaries and test utilities. #1860 (1.9.2/1.8.8) * The build now bundles a sample OCIO config in testsuite/common so that we can do OCIO-based unit tests. #1870 (1.9.2) * Properly find newer openjpeg 2.3. #1871 (1.9.2) * Fix testsuite to be Python 2/3 agnostic. #1891 (1.9.2) * Removed `USE_PYTHON3` build flag, which didn't do anything. #1891 (1.9.2) * The `PYTHON_VERSION` build variable is now better at selecting among several installed versions of Python, and all the tests should work fine with Python 3.x now. #2015 (1.9.4) * Remove some lingering support for MSVS < 2013 (which we haven't advertised as working anyway). #1887 (1.9.2) * Windows/MSVC build fix: use the `/bigobj` option on some large modules that need it. #1900, #1902 (1.8.10/1.9.2) * Add up-to-date Nuke versions to FindNuke.cmake. #1920 (1.8.11, 1.9.2) * Allow building against ffmpeg 4.0. #1926,#1936 (1.8.11, 1.9.2) * Disable SSE for 32 bit Windows -- problematic build issues. #1933 (1.9.3, 1.8.12, 1.7.19) * Fixes to the `EMBEDPLUGINS=0` build case, which had at some point stopped working properly. #1942 (1.9.3) * Improvements in finding the location of OpenJPEG with Macports. #1948 (1.8.12, 1.9.4) * Improvement finding libraw properly on Windows. #1959 (1.9.4) * Fix warnings to allow clean gcc8 builds. #1974 (1.9.4) * Make sure we build properly for C++17. (1.9.4) * Check properly for minimal FFMpeg version (2.6). #1981 (1.9.4) * New build option GLIBCXX_USE_CXX11_ABI, when set to 0 will force the old gcc string ABI (even gcc 7+ where the new ABI is the default), and if set to 1 will force the new gcc string ABI (on gcc 5-6, where old ABI is the default). If not set at all, it will respect the default choice for that compiler. #1980 (1.9.4) * TravisCI builds now use an abbreviated test matrix for most ordinary pushes of working branches, but the full test matrix for PRs or pushes to "master" or "RB" branches. #1983 (1.9.4) * Support compilation by clang 7.0. #1995 (1.9.4) * Support for building against OpenEXR 2.3. #2007 (1.9.4) * Use OpenEXR pkgconfig if available. #2008 (1.9.4) * Allow builds outside the source tree to pass testsuite. Defaults to finding test image directories such as oiio-images, openexr-images, and libtiffpic in the usual ".." from the main OIIO source directory, but now it can be overridden with the CMake variable `OIIO_TESTSUITE_IMAGEDIR`. #2026 (1.9.4) * Remove stale python examples from `src/python`. They were untested, undocumented, and probably no longer worked against the current APIs. #2036 (1.9.4) * Fixes for Windows when making Unicode builds, and fix Plugin::dlopen on Windows to properly support UTF-8 filenames. #1454 (2.0.1) * Support added for OpenCV 4.0. (2.0.1) Developer goodies / internals: * **Formatting with clang-format**: All submissions are expected to be formatted using our standard clang-format rules. Please run `make clang-format` prior to submitting code. The TravisCI tests include one entry just to check that the formatting conforms, and will fail if it doesn't, printing the diffs that would bring it to proper formatting. (Note: for small changes, if you don't have clang-format locally, it's ok to submit, then use the diffs from the failures to fix it by hand and resubmit and update.) #2059,2064,2065,2067,2069. * argparse.h: * Add pre- and post-option help printing callbacks. #1811 (1.9.2) * Changed to PIMPL to hide implementation from the public headers. Also modernized internals, no raw new/delete. #1858 (1.9.2) * array_view.h: * Added begin(), end(), cbegin(), cend() methods, and new constructors from pointer pairs and from std::array. (1.9.0/1.8.6) * Deprecated, moved contents to span.h. You should change `array_view` to `span` and `array_view` to `cspan`. #1956 (1.9.4) * color.h: add guards to make this header safe for Cuda compilation. #1905 (1.9.2/1.8.10) * filesystem.h: * IOProxy classes that can abstract file operations for custom I/O substitutions. #1931 (1.9.3) * Proper UTF-8 filenames for unique_path() and temp_directory(), and general UTF-8 cleanup/simplification. #1940 (1.9.3, 1.8.12, 1.7.19) * Remove extraneous calls to exists() that were doubling the number of stat syscalls. #2385 (2.1.8) * fmath.h: * Now defines preprocessor symbol `OIIO_FMATH_H` so other files can easily detect if it has been included. (1.9.0/1.8.6) * Modify to allow Cuda compilation/use of this header. #1888,#1896 (1.9.2/1.8.10) * Improve numeric approximation of fast_atan() and fast_atan2(). #1943 (1.9.3) * fast_cbrt() is a fast approximate cube root (maximum error 8e-14, about 3 times faster than pow computes cube roots). #1955 (1.9.4) * function_view.h: Overhauled fixed with an alternate implementation borrowed from LLVM. (1.9.4) * hash.h: add guards to make this header safe for Cuda compilation. #1905 (1.9.2/1.8.10) * imageio.h: `convert_image()` and `parallel_convert_image` have been simplified to remove optional `alpha_channel` and `z_channel` parameters that were never actually used. The old versions are still present but are deprecated. #2088 (2.0.1) * parallel.h: * `parallel_options` passed to many functions. #1807 (1.9.2) * More careful avoidance of threads not recursively using the thread pool (which could lead to deadlocks). #1807 (1.9.2) * Internals refactor of task_set #1883 (1.9.2). * Make the thread pool better behaved in times if pool congestion -- if there are already way too many items in the task queue, the caller may do the work itself rather than add to the end and have to wait too long to get results. #1884 (1.9.2) * paramlist.h: * ParamValue class has added get_int_indexed() and get_float_indexed() methods. #1773 (1.9.0/1.8.6) * ParamValue restructured to allow additional common data types to store internally rather than requre an allocation. #1812 (1.9.2) * New ParamList convenience methods: remove(), constains(), add_or_replace(). #1813 (1.9.2) * platform.h: * New OIIO_FALLTHROUGH and OIIO_NODISCARD macros, and renamed OIIO_UNUSED_OK to OIIO_MAYBE_UNUSED (to match C++17 naming). #2041 * simd.h: * Fixed build break when AVX512VL is enabled. #1781 (1.9.0/1.8.6) * Minor fixes especially for avx512. #1846 (1.9.2/1.8.8) #1873,#1893 (1.9.2) * span.h: * Used to be array_view. Now it's `span<>` and `span_strided`. Also, `cspan` is a handy alias for `span`. #1956 (1.9.4) * Added begin(), end(), cbegin(), cend() methods, and new constructors from pointer pairs and from std::array. (1.9.0/1.8.6) * Added `==` and `!=` to span and span_strided. #2037 (1.9.4) * strutil.h: * All string->numeric parsing and numeric->string formatting is now locale-independent and always uses '.' as decimal marker. #1796 (1.9.0) * New `Strutil::stof()`, `stoi()`, `stoui()`, `stod()` functions for easy parsing of strings to numbers. Also tests `Strutil::string_is_int()` and `string_is_float()`. #1796 (1.9.0) * New `to_string<>` utility template. #1814 (1.9.2) * Fix to strtof, strtod for non-C locales. #1918 (1.8.11, 1.9.2) * New `iless()` is case-insensitive locale-independent string_view ordering comparison. Also added StringIEqual, StringLess, StringILess functors. (1.9.4) * `join()` is now a template that can act on any iterable container of objects that allow stream output. #2033 (1.9.4) * New `splits()`/`splitsv()` that direction returns a vector of std::string or string_view, respectively. #2033 (1.9.4) * A second version of `extract_from_list_string` that directly returns a std::vector (instead of being passed as a param). #2033 (1.9.4) * `parse_string` now accepts single quotes as well as double quotes to enclose a quoted string. #2066 (2.0beta2) * Fix Strutil::vsnprintf detection of encoding errors on Windows. #2082 (1.8.17/2.0.1) * `parse_string()` - fix bugs that would fail for escaped quotes within the string. #2386 (2.1.8) * thread.h: * Reimplementaiton of `spin_rw_mutex` has much better performance when many threads are accessing at once, especially if most of them are reader threads. #1787 (1.9.0) * task_set: add wait_for_task() method that waits for just one task in the set to finish (versus wait() that waits for all). #1847 (1.9.2) * Fix rare crash in thread pool when lowering the number of threads. #2013 (1.9.4/1.8.15) * unittest.h: * Made references to Strutil fully qualified in OIIO namespace, so that `unittest.h` can be more easily used outside of the OIIO codebase. #1791 (1.9.0) * `OIIO_CHECK_EQUAL_APPROX` - fix namespace ambiguity. #1998 (1.9.4) * `OIIO_CHECK_EQUAL` now can compare two `std::vector`s. #2033 (1.9.4) * Make unit test errors respect whether stdout is a terminal when deciding whether to print in color. #2045 * Extensive use of C++11 `final` and `override` decorators of virtual methods in our internals, especially ImageInput and ImageOutput. #1904 (1.9.2) Notable documentation changes: * A new THIRD-PARTY.md file reproduces the full open source licenses of all code that we distribute with OIIO, incorporate, or derive code from. They are have very similar license terms to the main OIIO license ("New BSD") -- MIT, Mozilla, Apache 2.0, or public domain. OIIO does not use any GPL or other "viral" licenesed code that would change license terms of any code that didn't come directly from those packages. * The CHANGES.md file was getting truly enormous, so we have split the release notes from the 0.x and 1.x releases into separate files found in src/doc. So CHANGES.md only documents 2.0 and beyond. @ text @d5 1 a5 1 --- src/cmake/compiler.cmake.orig 2021-01-08 07:41:40.000000000 +0000 d7 1 a7 1 @@@@ -542,32 +542,6 @@@@ endif () d13 1 a13 1 -set (MACOSX_RPATH ON) d29 1 a29 3 - if (VERBOSE) - message (STATUS "CMAKE_INSTALL_RPATH = ${CMAKE_INSTALL_RPATH}") - endif () @