Compare commits
325
Commits
v2.4.0.0-dev
...
dev-2.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b9f903e441 | ||
|
|
3c4c9f3163 | ||
|
|
be39e448f4 | ||
|
|
3dabbd80d4 | ||
|
|
beaa7feb12 | ||
|
|
407b3f9ea9 | ||
|
|
5ae1fe0b2d | ||
|
|
363cf22492 | ||
|
|
b4fedf2ab1 | ||
|
|
b6f5f92add | ||
|
|
09028b27ae | ||
|
|
1f4d7247d4 | ||
|
|
7224c06c03 | ||
|
|
86222fa067 | ||
|
|
75d04f9597 | ||
|
|
553e2ef77e | ||
|
|
f7845333ff | ||
|
|
573f2dfc45 | ||
|
|
51eb7a3ba0 | ||
|
|
5f532c3461 | ||
|
|
8c1ab4bb18 | ||
|
|
2aa4e56a0f | ||
|
|
19f2946bf4 | ||
|
|
7022828ce5 | ||
|
|
70fb4878f1 | ||
|
|
792292179c | ||
|
|
2dd84e1286 | ||
|
|
84027f028b | ||
|
|
be559ed23b | ||
|
|
1b5f278fc0 | ||
|
|
c233694d93 | ||
|
|
4082b689d4 | ||
|
|
a50964ac8c | ||
|
|
ec2fe43d75 | ||
|
|
e023a98a58 | ||
|
|
ef19ba5c5d | ||
|
|
f34df70f6c | ||
|
|
06444a7af6 | ||
|
|
fa1cc230d9 | ||
|
|
21103c7da8 | ||
|
|
36d1d8449c | ||
|
|
581ab53fc9 | ||
|
|
98e554bcdc | ||
|
|
b99b7c57e7 | ||
|
|
6ccee8ffba | ||
|
|
e340504f8d | ||
|
|
fb017b24f4 | ||
|
|
a674f70b2f | ||
|
|
d99dd49f6c | ||
|
|
30a2eb3fc4 | ||
|
|
099c8585e3 | ||
|
|
d5a03e0579 | ||
|
|
e7ec6b3f7a | ||
|
|
244a9d6492 | ||
|
|
b293db1bbe | ||
|
|
f2590bcbc8 | ||
|
|
031dbdfc2a | ||
|
|
2589c70e34 | ||
|
|
173e6e30a1 | ||
|
|
f0b30f3550 | ||
|
|
037f783c6d | ||
|
|
5808911125 | ||
|
|
d56916c525 | ||
|
|
8e2bdd35ab | ||
|
|
077e30c08d | ||
|
|
20e14b8e54 | ||
|
|
8ede469092 | ||
|
|
7b0d6c4588 | ||
|
|
fb3ad5e529 | ||
|
|
75f77bd249 | ||
|
|
28771ee3d7 | ||
|
|
5beaec9dbd | ||
|
|
fad752bac2 | ||
|
|
1f4115f005 | ||
|
|
ba39d09482 | ||
|
|
7bf125c2c1 | ||
|
|
ce85d69d13 | ||
|
|
fdbae68903 | ||
|
|
ee676653ee | ||
|
|
1a66e6090e | ||
|
|
fbb8e01e00 | ||
|
|
7f71640f58 | ||
|
|
28e0820567 | ||
|
|
8c6b526792 | ||
|
|
d3eb4f1f07 | ||
|
|
afcf58e43b | ||
|
|
2bf67bd96e | ||
|
|
31394ebdb9 | ||
|
|
8d09f3984e | ||
|
|
45221dc447 | ||
|
|
7f8db2dbe8 | ||
|
|
84566283b1 | ||
|
|
1ed188e277 | ||
|
|
0b64ec8c66 | ||
|
|
eb4de4241f | ||
|
|
410de67c8c | ||
|
|
89256f6f2d | ||
|
|
169549c5e2 | ||
|
|
af764e9aaa | ||
|
|
dd029cdbb1 | ||
|
|
831263ef67 | ||
|
|
e3c4ff23a4 | ||
|
|
adc159a967 | ||
|
|
72bdc35f19 | ||
|
|
1833916ac5 | ||
|
|
51b2a669fd | ||
|
|
15a7da7e5d | ||
|
|
adef20d4eb | ||
|
|
34d16a5a6a | ||
|
|
8cab83499b | ||
|
|
396057d54c | ||
|
|
5d6bb77c35 | ||
|
|
db679d4e57 | ||
|
|
3e79658454 | ||
|
|
214d62b81d | ||
|
|
b4217ebffa | ||
|
|
766692f9d9 | ||
|
|
0bd647e00a | ||
|
|
420ee218f2 | ||
|
|
b378576471 | ||
|
|
d545fb77bd | ||
|
|
151b69506e | ||
|
|
32d4c25c41 | ||
|
|
05661f8a2b | ||
|
|
af949b73dc | ||
|
|
ce58cc6db1 | ||
|
|
3b9b4f1bb8 | ||
|
|
7f4f9a7adc | ||
|
|
5beebb3df8 | ||
|
|
894e4667c4 | ||
|
|
448e03cb8f | ||
|
|
963632bf4e | ||
|
|
05345677a5 | ||
|
|
d2f16f4037 | ||
|
|
4bf6df17cd | ||
|
|
22762b6bbb | ||
|
|
09203688de | ||
|
|
c22c67842a | ||
|
|
19d65ec1d5 | ||
|
|
45107d2d44 | ||
|
|
ac4c90e87b | ||
|
|
2f1bdb601c | ||
|
|
8ad4afd697 | ||
|
|
8dc01f250e | ||
|
|
87c9f1a26e | ||
|
|
a4bb2367cd | ||
|
|
4a75da3a5f | ||
|
|
c7070e15f4 | ||
|
|
8e568b8c0a | ||
|
|
ccb61011d9 | ||
|
|
5159490195 | ||
|
|
ce467d34ed | ||
|
|
c3e5511ddc | ||
|
|
cb11829541 | ||
|
|
a3c79622d0 | ||
|
|
a346d2c2bc | ||
|
|
538d134c9d | ||
|
|
d4f6f5a1ae | ||
|
|
8b4ecb508a | ||
|
|
cf9ca07ffb | ||
|
|
da257ab644 | ||
|
|
c3ea0329ea | ||
|
|
5a7dedd6d2 | ||
|
|
d92de54ca6 | ||
|
|
6a8b6ffbfd | ||
|
|
af7f0d333f | ||
|
|
54e13fd173 | ||
|
|
f259e59d7d | ||
|
|
06ab90dd7e | ||
|
|
6ebcf0a56c | ||
|
|
cbecc92461 | ||
|
|
ef781a211b | ||
|
|
0234b6dbbe | ||
|
|
a2d5cd9c6d | ||
|
|
9917958a7b | ||
|
|
da1f27af66 | ||
|
|
bec3f038b2 | ||
|
|
02be6659c5 | ||
|
|
ebd24245af | ||
|
|
26ceab5d13 | ||
|
|
b26a2979a4 | ||
|
|
75ab8d8304 | ||
|
|
fec17162c6 | ||
|
|
33f0690772 | ||
|
|
001d3ab123 | ||
|
|
1dc079a489 | ||
|
|
90f5f0fba9 | ||
|
|
309c29f8b5 | ||
|
|
fa59ef61b2 | ||
|
|
fca99cc5eb | ||
|
|
e9ff5306c4 | ||
|
|
ae4d5ca495 | ||
|
|
317a3a0bdc | ||
|
|
c75dbdc66e | ||
|
|
474ed3865b | ||
|
|
a4a6c572d9 | ||
|
|
8be88d269f | ||
|
|
84852ebae5 | ||
|
|
bbd8101a69 | ||
|
|
f62036ab8d | ||
|
|
766deab023 | ||
|
|
4cf32b32f8 | ||
|
|
11b03fc4d5 | ||
|
|
c2a09c2fd0 | ||
|
|
8a1db1b13c | ||
|
|
5167b11277 | ||
|
|
9d8cda7cca | ||
|
|
0f8a453f5a | ||
|
|
1406bb8e66 | ||
|
|
3de6233f41 | ||
|
|
5f92a5af48 | ||
|
|
b5bb85d02b | ||
|
|
01742570d1 | ||
|
|
a0b2611526 | ||
|
|
eac83b2d95 | ||
|
|
2d7660b59c | ||
|
|
716d86f465 | ||
|
|
a16ac8acc7 | ||
|
|
99d6947b8d | ||
|
|
29ddf1e6b7 | ||
|
|
9e77cdecf5 | ||
|
|
6189faeaf7 | ||
|
|
c46a47f00b | ||
|
|
e9881d0e3f | ||
|
|
5d10f088a0 | ||
|
|
581b59d3ad | ||
|
|
ab3f04204b | ||
|
|
2721bd60df | ||
|
|
feca3fe4ff | ||
|
|
16a6951e07 | ||
|
|
fdd2985cfa | ||
|
|
35a68d2581 | ||
|
|
537763e4a3 | ||
|
|
6fc196607c | ||
|
|
e660b7e247 | ||
|
|
4dc6c7816d | ||
|
|
43ff4d4b3f | ||
|
|
cc0a14fd9f | ||
|
|
dc22640b66 | ||
|
|
b22a3fad02 | ||
|
|
7abec22847 | ||
|
|
ef627e53de | ||
|
|
f6971293be | ||
|
|
39689b9c8a | ||
|
|
1983edc550 | ||
|
|
35b4576dd3 | ||
|
|
3a99936a77 | ||
|
|
530bbd3ce3 | ||
|
|
d44de82931 | ||
|
|
d136f98ff6 | ||
|
|
fc5c4844e6 | ||
|
|
ce6b763249 | ||
|
|
0a3a68b57c | ||
|
|
5d9945b55b | ||
|
|
a1ebb935fb | ||
|
|
9cee6827cf | ||
|
|
80fccb90a4 | ||
|
|
3f2e217c60 | ||
|
|
9a8a1e041e | ||
|
|
f1ab555440 | ||
|
|
59f2e89362 | ||
|
|
00fdb92973 | ||
|
|
5bb655ecbd | ||
|
|
38b6e42c83 | ||
|
|
db73f2f1eb | ||
|
|
496777a686 | ||
|
|
8af1d39ac2 | ||
|
|
fa03aac802 | ||
|
|
3c28573b14 | ||
|
|
78b05a1937 | ||
|
|
914407e614 | ||
|
|
d5f7efcb33 | ||
|
|
a831c50e78 | ||
|
|
306a50e230 | ||
|
|
d40a33aece | ||
|
|
2568474d66 | ||
|
|
1e666fca49 | ||
|
|
ee51de91a6 | ||
|
|
c12f89c0a8 | ||
|
|
b558145c71 | ||
|
|
01692cdfe0 | ||
|
|
eb796bbd2c | ||
|
|
88522189b4 | ||
|
|
740dc45c00 | ||
|
|
bf5a076dbb | ||
|
|
70cb7edac4 | ||
|
|
bea411565c | ||
|
|
0621f0a66e | ||
|
|
f320f3d60f | ||
|
|
210e3b15f1 | ||
|
|
52e5c2ab7a | ||
|
|
4dd0da99d7 | ||
|
|
f6b08b1b9f | ||
|
|
a3fd72cfb9 | ||
|
|
5d4bdc6666 | ||
|
|
dfbc4c180f | ||
|
|
9815a69240 | ||
|
|
92faacfbb2 | ||
|
|
e85390ec81 | ||
|
|
40e64bb42b | ||
|
|
58dbf96727 | ||
|
|
31db7bc483 | ||
|
|
46ad94c8a8 | ||
|
|
bc931de72b | ||
|
|
ff8671a371 | ||
|
|
833ad192ce | ||
|
|
037fcb8839 | ||
|
|
963d07d531 | ||
|
|
ecbeda622f | ||
|
|
a6345e095e | ||
|
|
8e470c7616 | ||
|
|
d8810c5365 | ||
|
|
d631f92721 | ||
|
|
7f71282027 | ||
|
|
4f981ba3b7 | ||
|
|
d0a77b9f2f | ||
|
|
292b6ac1c1 | ||
|
|
f8969b894a | ||
|
|
871e88c857 | ||
|
|
dcf48e1f80 | ||
|
|
94be07fbce | ||
|
|
1d0e570a49 | ||
|
|
be2c4e3198 | ||
|
|
5ba33f3886 | ||
|
|
bfa4ba5f2e |
+6
-2
@@ -5,8 +5,11 @@ SpaceBeforeParens: ControlStatements
|
||||
AccessModifierOffset: -4
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignConsecutiveAssignments: true
|
||||
#AlignConsecutiveAssignments: Consecutive
|
||||
#AlignConsecutiveBitFields: Consecutive
|
||||
AlignConsecutiveDeclarations: false
|
||||
AlignEscapedNewlines: Right
|
||||
#AlignConsecutiveDeclarations: None
|
||||
AlignEscapedNewlines: Left
|
||||
AlignOperands: true
|
||||
AlignTrailingComments: true
|
||||
AllowAllArgumentsOnNextLine: true
|
||||
@@ -75,6 +78,7 @@ IncludeCategories:
|
||||
Priority: 1
|
||||
IncludeIsMainRegex: '(Test)?$'
|
||||
IndentCaseLabels: false
|
||||
IndentExternBlock: NoIndent
|
||||
IndentPPDirectives: AfterHash
|
||||
IndentWidth: 4
|
||||
IndentWrappedFunctionNames: false
|
||||
@@ -118,7 +122,7 @@ SpacesInContainerLiterals: true
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets: false
|
||||
Standard: Cpp11
|
||||
Standard: c++14
|
||||
StatementMacros:
|
||||
- Q_UNUSED
|
||||
- QT_REQUIRE_VERSION
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
# Reformatting via clang-format (part 1) (#2059)
|
||||
5e76177f6850a8d04c544dc98128bcdfe55ca40a
|
||||
|
||||
# clang-format stage 2: src/libutil (#2064)
|
||||
1a5b7aa00dd34883a8829875ee05c55b2a1f6736
|
||||
|
||||
# clang-format stage 3 -- src/*.imageio/* (#2065)
|
||||
22e1af2ff0caa2c9aa31c0d7a69eb7762c04302d
|
||||
|
||||
# clang-format of src/libtexture and src/libOpenImageIO (#2067)
|
||||
400e2340cf12ae84792f9a0146426b6022474dc9
|
||||
|
||||
# clang-format, final-ish update (#2069)
|
||||
5af338158ad47fc84e7b0d03086fece04e0e2d24
|
||||
|
||||
# Adjustments from clang-format update
|
||||
3e106c35845715875c3b3ce7b1621cb62ea41f0d
|
||||
|
||||
# clang-format fixes (#2137)
|
||||
e536411711367ed7309ca884ebc9de4cea4d0da0
|
||||
c31816192691562e96b4ebc10dd7e5fd2e9c801b
|
||||
|
||||
# Minor formatting changes in ustring with new clang-format (#2574)
|
||||
9e911bddf275206867643d0009f0bd7b9a20e463
|
||||
9fa2a5d42465870ae370afe5e3298433b2ecb56c
|
||||
|
||||
# Fix broken clang-format test (#2627)
|
||||
7e5b841a80ed63b38f6d343889de615ef8cc4316
|
||||
|
||||
# Adjustments from clang-format update with clang 8
|
||||
e83809b77e4d895dbf48fb6c2b5fb914a5f8eb06
|
||||
|
||||
# Touch up formatting with clang-format
|
||||
f701a76b745b6ddba41c77b24a1ea7e1f48ae0b4
|
||||
|
||||
# clang-format: Adjust alignment of line continuation backslashes (#2664)
|
||||
742173e39588e07cf43cbe7b49dd22d624a48388
|
||||
d8810c5365ea88e2b1bce6155b7b495c18f2f9bc
|
||||
@@ -0,0 +1,882 @@
|
||||
# Copyright 2008-present Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio/blob/master/LICENSE.md
|
||||
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
# Skip jobs when only documentation files are changed
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
- '**.rst'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
- '**.rst'
|
||||
schedule:
|
||||
# This is an obsolete branch with only occasional patches -- run weekly
|
||||
# is plenty.
|
||||
- cron: "0 10 * * 0"
|
||||
|
||||
jobs:
|
||||
linux-gcc48:
|
||||
name: "Linux 2017-ish: gcc4.8/C++11 py2.7 boost-1.66 exr-2.3"
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: aswf/ci-osl:2019
|
||||
env:
|
||||
CXX: /usr/bin/g++
|
||||
CC: /usr/bin/gcc
|
||||
CMAKE_CXX_STANDARD: 11
|
||||
MY_CMAKE_FLAGS: -DBUILD_FMT_VERSION=6.2.1
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: |
|
||||
echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: ccache
|
||||
id: ccache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ${{ github.job }}-${{ steps.ccache_cache_keys.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ github.job }}-
|
||||
- name: Build setup
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
run: |
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
- name: Build
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
vfxplatform-2019:
|
||||
name: "Linux VFX Platform 2019: gcc6/C++14 py2.7 boost1.66 exr2.3 ocio1.1"
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: aswf/ci-osl:2019
|
||||
env:
|
||||
CXX: g++
|
||||
CC: gcc
|
||||
CMAKE_CXX_STANDARD: 14
|
||||
USE_SIMD: sse4.2
|
||||
PUGIXML_VERSION: v1.9
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: |
|
||||
echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: ccache
|
||||
id: ccache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ${{ github.job }}-${{ steps.ccache_cache_keys.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ github.job }}-
|
||||
- name: Build setup
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
run: |
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
- name: Build
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
vfxplatform-2020:
|
||||
name: "Linux VFX Platform 2020: gcc6/C++14 py3.7 boost1.70 exr2.4 ocio1.1"
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: aswf/ci-osl:2020
|
||||
env:
|
||||
CXX: g++
|
||||
CC: gcc
|
||||
CMAKE_CXX_STANDARD: 14
|
||||
PYTHON_VERSION: 3.7
|
||||
USE_SIMD: avx
|
||||
WEBP_VERSION: v1.1.0
|
||||
MY_CMAKE_FLAGS: -DBUILD_FMT_VERSION=7.0.1
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: |
|
||||
echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: ccache
|
||||
id: ccache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ${{ github.job }}-${{ steps.ccache_cache_keys.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ github.job }}-
|
||||
- name: setup
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: dependencies
|
||||
run: |
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
- name: Build
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
vfxplatform-2021:
|
||||
# Test VFX Platform 2021 -- mainly, that means gcc9 and C++17.
|
||||
name: "Linux VFX Platform 2021: gcc9/C++17 py3.7 boost1.73 exr2.5 ocio2.0 qt5.15"
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: aswf/ci-osl:2021
|
||||
env:
|
||||
CXX: g++
|
||||
CC: gcc
|
||||
CMAKE_CXX_STANDARD: 17
|
||||
PYTHON_VERSION: 3.7
|
||||
USE_SIMD: avx2,f16c
|
||||
WEBP_VERSION: v1.1.0
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: |
|
||||
echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: ccache
|
||||
id: ccache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ${{ github.job }}-${{ steps.ccache_cache_keys.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ github.job }}-
|
||||
- name: Build setup
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
run: |
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
- name: Build
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
vfxplatform-2022:
|
||||
name: "Linux VFX Platform 2022: gcc9/C++17 py3.9 boost1.76 exr3.1 ocio2.1 qt5.15"
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: aswf/ci-osl:2022-clang11
|
||||
env:
|
||||
CXX: g++
|
||||
CC: gcc
|
||||
CMAKE_CXX_STANDARD: 17
|
||||
PYTHON_VERSION: 3.9
|
||||
PYBIND11_VERSION: v2.6.2
|
||||
USE_SIMD: avx2,f16c
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: |
|
||||
echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: ccache
|
||||
id: ccache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ${{ github.job }}-${{ steps.ccache_cache_keys.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ github.job }}-
|
||||
- name: Build setup
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
run: |
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
- name: Build
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
linux-gcc7-cpp14-debug:
|
||||
# Test against gcc7, and also at the same time, do a Debug build.
|
||||
name: "Linux debug gcc7/C++14, sse4.2, exr2.4"
|
||||
runs-on: ubuntu-18.04
|
||||
env:
|
||||
CXX: g++-7
|
||||
CMAKE_CXX_STANDARD: 14
|
||||
USE_SIMD: sse4.2
|
||||
OPENEXR_VERSION: v2.4.3
|
||||
CMAKE_BUILD_TYPE: Debug
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: |
|
||||
echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: ccache
|
||||
id: ccache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ${{ github.job }}-${{ steps.ccache_cache_keys.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ github.job }}-
|
||||
- name: Build setup
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
run: |
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
- name: Build
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
linux-gcc8:
|
||||
# Test against gcc8.
|
||||
name: "Linux gcc8: gcc8 C++17 avx exr2.5"
|
||||
runs-on: ubuntu-18.04
|
||||
env:
|
||||
CXX: g++-8
|
||||
CMAKE_CXX_STANDARD: 17
|
||||
USE_SIMD: avx
|
||||
OPENEXR_VERSION: v2.5.6
|
||||
PYBIND11_VERSION: v2.5.0
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: |
|
||||
echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: ccache
|
||||
id: ccache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ${{ github.job }}-${{ steps.ccache_cache_keys.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ github.job }}-
|
||||
- name: Build setup
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
run: |
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
- name: Build
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
linux-gcc10-cpp11:
|
||||
# Test gcc10 but in C++11 mode
|
||||
name: "Linux gcc10 / C++11 avx2"
|
||||
runs-on: ubuntu-20.04
|
||||
env:
|
||||
CXX: g++-10
|
||||
CMAKE_CXX_STANDARD: 11
|
||||
USE_SIMD: avx2,f16c
|
||||
PYTHON_VERSION: 3.8
|
||||
USE_OPENVDB: 0
|
||||
# The old installed OpenVDB has a TLS conflict with Python 3.8
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: |
|
||||
echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: ccache
|
||||
id: ccache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ${{ github.job }}-${{ steps.ccache_cache_keys.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ github.job }}-
|
||||
- name: Build setup
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
run: |
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
- name: Build
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
linux-latest-releases:
|
||||
# Test against latest supported releases of toolchain and dependencies.
|
||||
name: "Linux latest releases: gcc10 C++17 avx2 exr3.1 ocio2.0"
|
||||
runs-on: ubuntu-20.04
|
||||
env:
|
||||
CXX: g++-10
|
||||
CMAKE_CXX_STANDARD: 17
|
||||
USE_SIMD: avx2,f16c
|
||||
LIBRAW_VERSION: 0.20.2
|
||||
LIBTIFF_VERSION: v4.3.0
|
||||
OPENCOLORIO_VERSION: v2.1.0
|
||||
OPENEXR_VERSION: v3.1.2
|
||||
PUGIXML_VERSION: v1.11.4
|
||||
PTEX_VERSION: v2.4.0
|
||||
PYBIND11_VERSION: v2.8.0
|
||||
PYTHON_VERSION: 3.8
|
||||
WEBP_VERSION: v1.2.1
|
||||
MY_CMAKE_FLAGS: -DBUILD_FMT_VERSION=8.0.0
|
||||
USE_OPENVDB: 0
|
||||
# The old installed OpenVDB has a TLS conflict with Python 3.8
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: |
|
||||
echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: ccache
|
||||
id: ccache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ${{ github.job }}-${{ steps.ccache_cache_keys.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ github.job }}-
|
||||
- name: Build setup
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
run: |
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
- name: Build
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
linux-bleeding-edge:
|
||||
# Test against development master for relevant dependencies, latest
|
||||
# supported releases of everything else.
|
||||
name: "Linux bleeding edge: gcc11 C++20 py38 OCIO/libtiff/exr-master boost1.71 avx2"
|
||||
runs-on: ubuntu-20.04
|
||||
env:
|
||||
CXX: g++-11
|
||||
CMAKE_CXX_STANDARD: 20
|
||||
USE_SIMD: avx2,f16c
|
||||
LIBRAW_VERSION: master
|
||||
LIBTIFF_VERSION: master
|
||||
OPENCOLORIO_VERSION: main
|
||||
OPENEXR_VERSION: main
|
||||
PUGIXML_VERSION: master
|
||||
PTEX_VERSION: main
|
||||
PYBIND11_VERSION: master
|
||||
PYTHON_VERSION: 3.8
|
||||
WEBP_VERSION: master
|
||||
MY_CMAKE_FLAGS: -DBUILD_FMT_VERSION=8.1.1
|
||||
USE_OPENVDB: 0
|
||||
# The old installed OpenVDB has a TLS conflict with Python 3.8
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: |
|
||||
echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: CCache
|
||||
id: ccache
|
||||
if: always()
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ${{ github.job }}-${{ steps.ccache_cache_keys.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ github.job }}-
|
||||
- name: Build setup
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
run: |
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
- name: Build
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
linux-oldest:
|
||||
# Oldest versions of the dependencies that we can muster, and various
|
||||
# things disabled (no SSE, OCIO, or OpenCV, don't embed plugins).
|
||||
name: "Linux oldest/hobbled: gcc4.8/C++11 py2.7 boost-1.66 exr-2.2 no-sse no-ocio"
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: aswf/ci-osl:2019
|
||||
env:
|
||||
CXX: /usr/bin/g++
|
||||
CC: /usr/bin/gcc
|
||||
CMAKE_CXX_STANDARD: 11
|
||||
USE_SIMD: 0
|
||||
USE_JPEGTURBO: 0
|
||||
USE_OPENCOLORIO: 0
|
||||
USE_OPENCV: 0
|
||||
EMBEDPLUGINS: 0
|
||||
OPENEXR_VERSION: v2.2.1
|
||||
PTEX_VERSION: v2.3.1
|
||||
PYBIND11_VERSION: v2.4.2
|
||||
WEBP_VERSION: v1.0.0
|
||||
MY_CMAKE_FLAGS: -DBUILD_FMT_VERSION=6.1.2
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: |
|
||||
echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: ccache
|
||||
id: ccache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ${{ github.job }}-${{ steps.ccache_cache_keys.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ github.job }}-
|
||||
- name: Build setup
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
run: |
|
||||
sudo rm -rf /usr/local/include/OpenEXR
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
- name: Build
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
macos-py38:
|
||||
name: "Mac py38"
|
||||
runs-on: macOS-latest
|
||||
env:
|
||||
CXX: clang++
|
||||
PYTHON_VERSION: 3.8
|
||||
CMAKE_CXX_STANDARD: 14
|
||||
ENABLE_FIELD3D: OFF
|
||||
ENABLE_OPENVDB: OFF
|
||||
# No OpenVDB because on Homebrew, OpenVDB still uses OpenEXR 2.5
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: |
|
||||
echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: ccache
|
||||
id: ccache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /Users/runner/.ccache
|
||||
key: ${{ github.job }}-${{ steps.ccache_cache_keys.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ github.job }}-
|
||||
- name: Build setup
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
run: |
|
||||
src/build-scripts/install_homebrew_deps.bash
|
||||
src/build-scripts/install_test_images.bash
|
||||
- name: Build
|
||||
run: |
|
||||
export PYTHONPATH=/usr/local/lib/python${PYTHON_VERSION}/site-packages:$PYTHONPATH
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
windows-vs2019:
|
||||
name: "Windows VS2019"
|
||||
runs-on: windows-2019
|
||||
env:
|
||||
PYTHON_VERSION: 3.7
|
||||
CMAKE_GENERATOR: "Visual Studio 16 2019"
|
||||
OPENEXR_VERSION: v2.5.6
|
||||
CTEST_ARGS: "--timeout 120 --repeat after-timeout:5"
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Setup Nuget.exe
|
||||
uses: nuget/setup-nuget@v1
|
||||
- name: Build setup
|
||||
shell: bash
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
src/build-scripts/gh-win-installdeps.bash
|
||||
- name: Build
|
||||
shell: bash
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
shell: bash
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
windows-vs2017:
|
||||
name: "Windows VS2017"
|
||||
runs-on: windows-2016
|
||||
env:
|
||||
PYTHON_VERSION: 3.7
|
||||
CMAKE_GENERATOR: "Visual Studio 15 2017 Win64"
|
||||
OPENEXR_VERSION: v2.5.6
|
||||
CTEST_ARGS: "--timeout 120 --repeat after-timeout:5"
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Setup Nuget.exe
|
||||
uses: nuget/setup-nuget@v1
|
||||
- name: Build setup
|
||||
shell: bash
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
src/build-scripts/gh-win-installdeps.bash
|
||||
- name: Build
|
||||
shell: bash
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
shell: bash
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
sanitizer:
|
||||
# Run sanitizers.
|
||||
name: "Sanitizers"
|
||||
runs-on: ubuntu-18.04
|
||||
container:
|
||||
image: aswf/ci-osl:2020
|
||||
env:
|
||||
CXX: g++
|
||||
CC: gcc
|
||||
CMAKE_CXX_STANDARD: 14
|
||||
PYTHON_VERSION: 3.7
|
||||
USE_PYTHON: 0
|
||||
SANITIZE: address
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: |
|
||||
echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: ccache
|
||||
id: ccache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ${{ github.job }}-${{ steps.ccache_cache_keys.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ github.job }}-
|
||||
- name: Build setup
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
run: |
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
- name: Build
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
linux-clang10-cpp14:
|
||||
# Test compiling with clang on Linux.
|
||||
name: "Linux clang10: clang10 C++14 avx2 exr2.5 ocio2.0"
|
||||
runs-on: ubuntu-18.04
|
||||
container:
|
||||
image: aswf/ci-osl:2021-clang10
|
||||
env:
|
||||
CXX: clang++
|
||||
CMAKE_CXX_STANDARD: 14
|
||||
PYTHON_VERSION: 3.7
|
||||
USE_SIMD: avx2,f16c
|
||||
PYBIND11_VERSION: v2.6.1
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: |
|
||||
echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: ccache
|
||||
id: ccache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ${{ github.job }}-${{ steps.ccache_cache_keys.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ github.job }}-
|
||||
- name: Build setup
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
run: |
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
- name: Build
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
linux-clang11-cpp17:
|
||||
# Test compiling with clang and C++17 on Linux.
|
||||
name: "Linux clang11: clang11 C++17 avx2 exr3.1 ocio2.0"
|
||||
runs-on: ubuntu-18.04
|
||||
container:
|
||||
image: aswf/ci-osl:2021-clang11
|
||||
env:
|
||||
CXX: clang++
|
||||
CMAKE_CXX_STANDARD: 17
|
||||
PYTHON_VERSION: 3.7
|
||||
USE_SIMD: avx2,f16c
|
||||
PYBIND11_VERSION: v2.6.1
|
||||
OPENEXR_VERSION: v3.1.1
|
||||
USE_OPENVDB: 0
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: |
|
||||
echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: ccache
|
||||
id: ccache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ${{ github.job }}-${{ steps.ccache_cache_keys.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ github.job }}-
|
||||
- name: Build setup
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
run: |
|
||||
sudo rm -rf /usr/local/include/OpenEXR
|
||||
sudo rm -rf /usr/local/lib64/cmake/{IlmBase,OpenEXR}
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
- name: Build
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
linux-static:
|
||||
# Test building static libs.
|
||||
name: "Linux static libs: gcc7 C++14 exr2.2"
|
||||
runs-on: ubuntu-18.04
|
||||
env:
|
||||
CXX: g++-7
|
||||
CMAKE_CXX_STANDARD: 14
|
||||
BUILD_SHARED_LIBS: OFF
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_keys
|
||||
run: |
|
||||
echo "::set-output name=date::`date -u +'%Y-%m-%dT%H:%M:%SZ'`"
|
||||
- name: ccache
|
||||
id: ccache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ${{ github.job }}-${{ steps.ccache_cache_keys.outputs.date }}
|
||||
restore-keys: |
|
||||
${{ github.job }}-
|
||||
- name: Build setup
|
||||
run: |
|
||||
src/build-scripts/ci-startup.bash
|
||||
- name: Dependencies
|
||||
run: |
|
||||
src/build-scripts/gh-installdeps.bash
|
||||
- name: Build
|
||||
run: |
|
||||
src/build-scripts/ci-build.bash
|
||||
- name: Testsuite
|
||||
run: |
|
||||
src/build-scripts/ci-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
build/*/testsuite/*/*.*
|
||||
build/*/CMake*.{txt,log}
|
||||
|
||||
# This is an old branch, we don't need to patrol its formatting.
|
||||
# clang-format:
|
||||
# # Test formatting. This test entry doesn't do a full build, it just runs
|
||||
# # clang-format on everything, and passes if nothing is misformatted.
|
||||
# # Upon failure, the build artifact will be the full source code with the
|
||||
# # formatting fixed (diffs will also appear in the console output).
|
||||
# name: "clang-format verification"
|
||||
# runs-on: ubuntu-18.04
|
||||
# container:
|
||||
# image: aswf/ci-osl:2021-clang11
|
||||
# env:
|
||||
# BUILDTARGET: clang-format
|
||||
# PYTHON_VERSION: 3.7
|
||||
# steps:
|
||||
# - uses: actions/checkout@v2
|
||||
# - name: Build setup
|
||||
# run: |
|
||||
# src/build-scripts/ci-startup.bash
|
||||
# - name: Dependencies
|
||||
# run: |
|
||||
# src/build-scripts/gh-installdeps.bash
|
||||
# - name: Build
|
||||
# run: |
|
||||
# src/build-scripts/ci-build.bash
|
||||
# - uses: actions/upload-artifact@v2
|
||||
# if: failure()
|
||||
# with:
|
||||
# name: ${{ github.job }}
|
||||
# path: src/*/*.{cpp,h}
|
||||
@@ -1,434 +0,0 @@
|
||||
# Copyright 2008-present Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio/blob/master/LICENSE.md
|
||||
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
# Skip jobs when only documentation files are changed
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
- '**.rst'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
- '**.rst'
|
||||
schedule:
|
||||
# Full nightly build
|
||||
- cron: "0 4 * * *"
|
||||
|
||||
|
||||
jobs:
|
||||
linux-gcc48:
|
||||
name: "Linux 2017-ish: gcc4.8/C++11 py2.7 boost-1.66 exr-2.3"
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: aswf/ci-osl:2019
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: all
|
||||
env:
|
||||
CXX: /usr/bin/g++
|
||||
CC: /usr/bin/gcc
|
||||
CMAKE_CXX_STANDARD: 11
|
||||
MY_CMAKE_FLAGS: -DBUILD_FMT_VERSION=6.2.1
|
||||
run: |
|
||||
source src/build-scripts/ci-startup.bash
|
||||
source src/build-scripts/gh-installdeps-centos.bash
|
||||
source src/build-scripts/ci-build-and-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/*/testsuite/*/*.*
|
||||
|
||||
vfxplatform-2019:
|
||||
name: "Linux VFX Platform 2019: gcc6/C++14 py2.7 boost-1.66 exr-2.3"
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: aswf/ci-osl:2019
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: all
|
||||
env:
|
||||
CXX: g++
|
||||
CC: gcc
|
||||
CMAKE_CXX_STANDARD: 14
|
||||
USE_SIMD: sse4.2
|
||||
run: |
|
||||
source src/build-scripts/ci-startup.bash
|
||||
source src/build-scripts/gh-installdeps-centos.bash
|
||||
source src/build-scripts/ci-build-and-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/*/testsuite/*/*.*
|
||||
|
||||
vfxplatform-2020:
|
||||
name: "Linux VFX Platform 2020: gcc6/C++14 py3.7 boost-1.70 exr-2.4"
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: aswf/ci-osl:2020
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: all
|
||||
env:
|
||||
CXX: g++
|
||||
CC: gcc
|
||||
CMAKE_CXX_STANDARD: 14
|
||||
PYTHON_VERSION: 3.7
|
||||
USE_SIMD: avx
|
||||
run: |
|
||||
source src/build-scripts/ci-startup.bash
|
||||
source src/build-scripts/gh-installdeps-centos.bash
|
||||
source src/build-scripts/ci-build-and-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/*/testsuite/*/*.*
|
||||
|
||||
vfxplatform-2021:
|
||||
# Test what's anticipated to be VFX Platform 2021 -- mainly, that means
|
||||
# gcc9 and C++17.
|
||||
name: "Linux VFX Platform 2021: gcc9/C++17 py3.7 boost-1.70 exr-2.5"
|
||||
runs-on: ubuntu-18.04
|
||||
container:
|
||||
image: aswf/ci-osl:2021
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: all
|
||||
env:
|
||||
CXX: g++
|
||||
CC: gcc
|
||||
CMAKE_CXX_STANDARD: 17
|
||||
PYTHON_VERSION: 3.7
|
||||
USE_SIMD: avx2,f16c
|
||||
OPENEXR_BRANCH: v2.5.0
|
||||
run: |
|
||||
source src/build-scripts/ci-startup.bash
|
||||
source src/build-scripts/gh-installdeps-centos.bash
|
||||
source src/build-scripts/ci-build-and-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/*/testsuite/*/*.*
|
||||
|
||||
linux-gcc7-cpp14-debug:
|
||||
# Test against gcc7, and also at the same time, do a Debug build.
|
||||
name: "Linux debug gcc7/C++14, sse4.2, exr2.4"
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: all
|
||||
env:
|
||||
CXX: g++-7
|
||||
CMAKE_CXX_STANDARD: 14
|
||||
USE_SIMD: sse4.2
|
||||
DEBUG: 1
|
||||
run: |
|
||||
source src/build-scripts/ci-startup.bash
|
||||
source src/build-scripts/gh-installdeps.bash
|
||||
source src/build-scripts/ci-build-and-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/*/testsuite/*/*.*
|
||||
|
||||
linux-gcc8:
|
||||
# Test against gcc8.
|
||||
name: "Linux gcc8: gcc8 C++17 avx exr2.5"
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: all
|
||||
env:
|
||||
CXX: g++-8
|
||||
CMAKE_CXX_STANDARD: 17
|
||||
USE_SIMD: avx
|
||||
OPENEXR_BRANCH: v2.5.0
|
||||
run: |
|
||||
source src/build-scripts/ci-startup.bash
|
||||
source src/build-scripts/gh-installdeps.bash
|
||||
source src/build-scripts/ci-build-and-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/*/testsuite/*/*.*
|
||||
|
||||
linux-latest-releases:
|
||||
# Test against latest supported releases of toolchain and dependencies.
|
||||
name: "Linux latest releases: gcc10 C++17 avx2 exr2.5"
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: all
|
||||
env:
|
||||
CXX: g++-10
|
||||
CMAKE_CXX_STANDARD: 17
|
||||
USE_SIMD: avx2,f16c
|
||||
OPENEXR_BRANCH: v2.5.0
|
||||
PYBIND11_VERSION: 2.5.0
|
||||
LIBRAW_BRANCH: 0.20.0
|
||||
MY_CMAKE_FLAGS: -DBUILD_FMT_VERSION=7.0.1
|
||||
run: |
|
||||
source src/build-scripts/ci-startup.bash
|
||||
source src/build-scripts/gh-installdeps.bash
|
||||
source src/build-scripts/ci-build-and-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/*/testsuite/*/*.*
|
||||
|
||||
linux-bleeding-edge:
|
||||
# Test against development master for relevant dependencies, latest
|
||||
# supported releases of everything else.
|
||||
# We don't need to run this on every push or PR -- only run on nightly
|
||||
# test, or if the branch name contains certain substring: gh, release,
|
||||
# bleeding.
|
||||
name: "Linux bleeding edge: gcc10 C++17 avx2 OCIO/libtiff/exr master"
|
||||
runs-on: ubuntu-18.04
|
||||
if: github.event_name == 'schedule' || contains(github.ref, 'release') || contains(github.ref, 'gh') || contains(github.ref, 'bleeding') || contains(github.ref, 'RB') || contains(github.ref, 'master')
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: all
|
||||
env:
|
||||
CXX: g++-10
|
||||
CMAKE_CXX_STANDARD: 17
|
||||
USE_SIMD: avx2,f16c
|
||||
OPENEXR_BRANCH: master
|
||||
OCIO_BRANCH: master
|
||||
LIBTIFF_BRANCH: master
|
||||
PYBIND11_BRANCH: master
|
||||
LIBRAW_BRANCH: master
|
||||
MY_CMAKE_FLAGS: -DBUILD_FMT_VERSION=master
|
||||
run: |
|
||||
source src/build-scripts/ci-startup.bash
|
||||
source src/build-scripts/gh-installdeps.bash
|
||||
source src/build-scripts/ci-build-and-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/*/testsuite/*/*.*
|
||||
|
||||
linux-oldest:
|
||||
# Oldest versions of the dependencies that we can muster, and various
|
||||
# things disabled (no SSE, OCIO, or OpenCV, don't embed plugins).
|
||||
# We don't need to run this on every push or PR -- only run on nightly
|
||||
# test, or if the branch name contains certain substrings: gh, release,
|
||||
# old.
|
||||
name: "Linux oldest/hobbled: gcc4.8/C++11 py2.7 boost-1.66 exr-2.2 no-sse no-ocio"
|
||||
if: github.event_name == 'schedule' || contains(github.ref, 'release') || contains(github.ref, 'gh') || contains(github.ref, 'RB') || contains(github.ref, 'master')
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: aswf/ci-osl:2019
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: all
|
||||
env:
|
||||
CXX: /usr/bin/g++
|
||||
CC: /usr/bin/gcc
|
||||
CMAKE_CXX_STANDARD: 11
|
||||
USE_SIMD: 0
|
||||
USE_JPEGTURBO: 0
|
||||
USE_OPENCOLORIO: 0
|
||||
USE_OPENCV: 0
|
||||
EMBEDPLUGINS: 0
|
||||
OPENEXR_BRANCH: v2.2.0
|
||||
MY_CMAKE_FLAGS: -DBUILD_FMT_VERSION=6.1.2
|
||||
run: |
|
||||
source src/build-scripts/ci-startup.bash
|
||||
source src/build-scripts/gh-installdeps-centos.bash
|
||||
source src/build-scripts/ci-build-and-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/*/testsuite/*/*.*
|
||||
|
||||
macos-py37:
|
||||
name: "Mac py38"
|
||||
runs-on: macOS-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: all
|
||||
env:
|
||||
CXX: clang++
|
||||
PYTHON_VERSION: 3.8
|
||||
CMAKE_CXX_STANDARD: 14
|
||||
ENABLE_FIELD3D: OFF
|
||||
ENABLE_WEBP: OFF
|
||||
# ^^ webp seems broken on GH CI Mac. Investigate later.
|
||||
run: |
|
||||
source src/build-scripts/ci-startup.bash
|
||||
source src/build-scripts/install_homebrew_deps.bash
|
||||
pip3.8 install numpy
|
||||
src/build-scripts/install_test_images.bash
|
||||
export PYTHONPATH=/usr/local/lib/python3.8/site-packages:$PYTHONPATH
|
||||
source src/build-scripts/ci-build-and-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/*/testsuite/*/*.*
|
||||
|
||||
windows-vs2019:
|
||||
name: "Windows VS2019"
|
||||
runs-on: windows-2019
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Setup Nuget.exe
|
||||
uses: warrenbuckley/Setup-Nuget@v1
|
||||
- name: all
|
||||
shell: bash
|
||||
env:
|
||||
PYTHON_VERSION: 3.6
|
||||
CMAKE_GENERATOR: "Visual Studio 16 2019"
|
||||
OPENEXR_BRANCH: v2.4.1
|
||||
SKIP_TESTS: 1
|
||||
run: |
|
||||
source src/build-scripts/ci-startup.bash
|
||||
source src/build-scripts/gh-win-installdeps.bash
|
||||
source src/build-scripts/ci-build-and-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/*/testsuite/*/*.*
|
||||
|
||||
windows-vs2017:
|
||||
name: "Windows VS2017"
|
||||
runs-on: windows-2016
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Setup Nuget.exe
|
||||
uses: warrenbuckley/Setup-Nuget@v1
|
||||
- name: all
|
||||
shell: bash
|
||||
env:
|
||||
PYTHON_VERSION: 3.6
|
||||
CMAKE_GENERATOR: "Visual Studio 15 2017 Win64"
|
||||
OPENEXR_BRANCH: v2.4.1
|
||||
SKIP_TESTS: 1
|
||||
#MY_CMAKE_FLAGS: -DUSE_PYTHON=0
|
||||
USE_NINJA: 0
|
||||
run: |
|
||||
source src/build-scripts/ci-startup.bash
|
||||
source src/build-scripts/gh-win-installdeps.bash
|
||||
source src/build-scripts/ci-build-and-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/*/testsuite/*/*.*
|
||||
|
||||
sanitizer:
|
||||
# Run sanitizers. These don't need to run on every push. Just PRs, nightly
|
||||
# builds, or if the branch name contains one of several tokens: san,
|
||||
# gh, RB, release, or master.
|
||||
name: "Sanitizers"
|
||||
runs-on: ubuntu-18.04
|
||||
if: github.event_name == 'pull_request' || github.event_name == 'schedule' || contains(github.ref, 'san') || contains(github.ref, 'RB') || contains(github.ref, 'release') || contains(github.ref, 'master') || contains(github.ref, 'gh')
|
||||
container:
|
||||
image: aswf/ci-osl:2020
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: all
|
||||
env:
|
||||
CXX: g++
|
||||
CC: gcc
|
||||
CMAKE_CXX_STANDARD: 14
|
||||
PYTHON_VERSION: 3.7
|
||||
USE_PYTHON: 0
|
||||
SANITIZE: address
|
||||
run: |
|
||||
source src/build-scripts/ci-startup.bash
|
||||
source src/build-scripts/gh-installdeps-centos.bash
|
||||
source src/build-scripts/ci-build-and-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/*/testsuite/*/*.*
|
||||
|
||||
linux-clang9:
|
||||
# Test compiling with clang9 on Linux.
|
||||
name: "Linux clang: clang9 C++14 avx2 exr2.4"
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: all
|
||||
env:
|
||||
CXX: clang++
|
||||
LLVM_VERSION: 9.0.0
|
||||
CMAKE_CXX_STANDARD: 14
|
||||
USE_SIMD: avx2,f16c
|
||||
OPENEXR_BRANCH: v2.4.1
|
||||
OCIO_BRANCH: 1c624651b7
|
||||
# Pick an OCIO commit that includes a warning fix we need for clang
|
||||
run: |
|
||||
source src/build-scripts/ci-startup.bash
|
||||
source src/build-scripts/gh-installdeps.bash
|
||||
source src/build-scripts/ci-build-and-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/*/testsuite/*/*.*
|
||||
|
||||
linux-static:
|
||||
# Test building static libs. We don't need to run this on every push --
|
||||
# only run on PRs, nightly test, or if the branch name contains
|
||||
# "gh", "master", "release", or "static".
|
||||
name: "Linux static libs: gcc7 C++14 exr2.4"
|
||||
if: github.event_name == 'pull_request' || github.event_name == 'schedule' || contains(github.ref, 'static') || contains(github.ref, 'release') || contains(github.ref, 'RB') || contains(github.ref, 'master') || contains(github.ref, 'gh')
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: all
|
||||
env:
|
||||
CXX: g++-7
|
||||
CMAKE_CXX_STANDARD: 14
|
||||
BUILD_SHARED_LIBS: OFF
|
||||
run: |
|
||||
source src/build-scripts/ci-startup.bash
|
||||
source src/build-scripts/gh-installdeps.bash
|
||||
source src/build-scripts/ci-build-and-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/*/testsuite/*/*.*
|
||||
|
||||
clang-format:
|
||||
# Test formatting. This test entry doesn't do a full build, it just runs
|
||||
# clang-format on everything, and passes if nothing is misformatted.
|
||||
# Upon failure, the build artifact will be the full source code with the
|
||||
# formatting fixed (diffs will also appear in the console output).
|
||||
name: "clang-format verification"
|
||||
runs-on: ubuntu-18.04
|
||||
container:
|
||||
image: aswf/ci-osl:2021
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: all
|
||||
env:
|
||||
BUILDTARGET: clang-format
|
||||
PYTHON_VERSION: 3.7
|
||||
SKIP_TESTS: 1
|
||||
run: |
|
||||
source src/build-scripts/ci-startup.bash
|
||||
source src/build-scripts/gh-installdeps-centos.bash
|
||||
source src/build-scripts/ci-build-and-test.bash
|
||||
- uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: src/*/*.{cpp,h}
|
||||
+1
-1
@@ -12,7 +12,7 @@ sphinx:
|
||||
# Optionally build your docs in additional formats such as PDF and ePub
|
||||
formats:
|
||||
- pdf
|
||||
|
||||
- htmlzip
|
||||
|
||||
# Optionally set the version of Python and requirements required to build your docs
|
||||
python:
|
||||
|
||||
-202
@@ -1,202 +0,0 @@
|
||||
# Copyright 2008-present Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio/blob/master/LICENSE.md
|
||||
|
||||
# .travis.yml for OIIO
|
||||
|
||||
language: cpp
|
||||
osx_image: xcode10
|
||||
dist: xenial
|
||||
|
||||
|
||||
# Add-ons: specify apt packages for Linux
|
||||
# We actaully specify packages per-matrix-entry, so these don't do anything
|
||||
# except to tag them (&add-sources, &common-packages, &common-boost-packages)
|
||||
# so they can be referened later ('*') to save repetition.
|
||||
addons:
|
||||
apt:
|
||||
sources: &add-sources
|
||||
- ubuntu-toolchain-r-test
|
||||
packages: &common-packages
|
||||
- libilmbase-dev
|
||||
- libopenexr-dev
|
||||
- libopencolorio-dev
|
||||
- libgif-dev
|
||||
- libopenjpeg-dev
|
||||
- libwebp-dev
|
||||
- libfreetype6-dev
|
||||
- libjpeg-turbo8-dev
|
||||
- dcmtk
|
||||
- locales
|
||||
- python-numpy
|
||||
- libraw-dev
|
||||
- ninja-build
|
||||
# - qtbase5-dev # FIXME: enable Qt5 on Linux
|
||||
# - bzip2
|
||||
# - libtinyxml-dev
|
||||
# - liblcms2-dev
|
||||
# - libyaml-cpp-dev
|
||||
packages: &common-boost-packages
|
||||
- libboost1.58-dev
|
||||
- libboost-filesystem1.58
|
||||
- libboost-regex1.58
|
||||
- libboost-system1.58
|
||||
- libboost-thread1.58
|
||||
packages: &old-boost-packages
|
||||
- libboost1.55-dev
|
||||
- libboost-filesystem1.55
|
||||
- libboost-regex1.55
|
||||
- libboost-system1.55
|
||||
- libboost-thread1.55
|
||||
|
||||
cache:
|
||||
ccache: true
|
||||
apt: true
|
||||
directories:
|
||||
- $HOME/.ccache
|
||||
- $PWD/oiio-images
|
||||
- $PWD/libtiffpic
|
||||
|
||||
before_install:
|
||||
- source src/build-scripts/ci-startup.bash
|
||||
- export WHICHGCC=${WHICHGCC:="4.8"}
|
||||
- if [ "$CXX" == "g++" ]; then export CXX="g++-${WHICHGCC}" ; fi
|
||||
|
||||
install:
|
||||
- if [[ $TRAVIS_OS_NAME == osx ]] ; then source src/build-scripts/install_homebrew_deps.bash ; fi
|
||||
- if [[ "$BUILD_CMAKE" == "1" ]] ; then source src/build-scripts/build_cmake.bash ; fi
|
||||
- if [[ "$OPENEXR_VERSION" || "$OPENEXR_BRANCH" ]] ; then CXX="ccache $CXX" source src/build-scripts/build_openexr.bash ; fi
|
||||
- if [[ "$OCIO_VERSION" || "$OCIO_BRANCH" ]] ; then CXX="ccache $CXX" source src/build-scripts/build_ocio.bash ; fi
|
||||
- if [[ $TRAVIS_OS_NAME == linux ]] ; then source src/build-scripts/build_pybind11.bash ; fi
|
||||
- src/build-scripts/install_test_images.bash
|
||||
|
||||
# before_script:
|
||||
|
||||
script:
|
||||
- export LD_LIBRARY_PATH=$OpenImageIO_ROOT/lib:$LD_LIBRARY_PATH
|
||||
- export DYLD_LIBRARY_PATH=$OpenImageIO_ROOT/lib:$DYLD_LIBRARY_PATH
|
||||
- source src/build-scripts/ci-build-and-test.bash
|
||||
|
||||
|
||||
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- /RB-/
|
||||
- /lg-/
|
||||
|
||||
jobs:
|
||||
fast_finish: true
|
||||
allow_failures:
|
||||
- name: "Linux ARM64"
|
||||
include:
|
||||
# test default compile: C++11, optimized, default compilers, SSE2
|
||||
# - name: "VFX Platform 2017 (gcc48, py27, exr2.2)"
|
||||
# os: linux
|
||||
# dist: trusty
|
||||
# compiler: gcc
|
||||
# env: WHICHGCC=4.8 OPENEXR_BRANCH=v2.2.0 BUILD_CMAKE=1
|
||||
# addons:
|
||||
# apt:
|
||||
# sources: *add-sources
|
||||
# packages:
|
||||
# - *common-packages
|
||||
# - *old-boost-packages
|
||||
# - g++-4.8
|
||||
|
||||
# - name: "Mac (latest clang, py37)"
|
||||
# os: osx
|
||||
# compiler: clang
|
||||
# env: PYTHON_VERSION=3.7
|
||||
# Make sure Python 2.7 still works on OSX, but only for PRs, master/RB
|
||||
# pushes, or if the branch name includes "python".
|
||||
# - name: "Mac py27 (latest clang)"
|
||||
# os: osx
|
||||
# compiler: clang
|
||||
# env: PYTHON_VERSION=2.7
|
||||
# # if: branch =~ /(master|RB|travis|python)/ OR type = pull_request
|
||||
|
||||
# One more, just for the heck of it, turn all SIMD off, and also make
|
||||
# sure we're falling back on libjpeg, not jpeg-turbo, no OCIO support,
|
||||
# and don't embed the plugins (to make sure that doesn't rust away). I
|
||||
# guess this should/could be both platforms, but in the interest of
|
||||
# making the tests go faster, don't bother doing it on OSX.
|
||||
# Only build this case for PRs, direct pushes to master or RB branches,
|
||||
# or if the branch name includes "simd". Other ordinary work branch
|
||||
# pushes don't need to run this.
|
||||
# - name: "Oldest everything: gcc4.8, boost 1.55, no simd, no jpegturbo, no OCIO, dso plugins, exr2.2"
|
||||
# os: linux
|
||||
# dist: trusty
|
||||
# compiler: gcc
|
||||
# env: WHICHGCC=4.8 USE_SIMD=0 USE_JPEGTURBO=0 USE_OPENCOLORIO=0 EMBEDPLUGINS=0 OPENEXR_BRANCH=v2.2.0 BUILD_CMAKE=1
|
||||
# # if: branch =~ /(master|RB|travis|simd)/ OR type = pull_request
|
||||
# addons:
|
||||
# apt:
|
||||
# sources: *add-sources
|
||||
# packages:
|
||||
# - *common-packages
|
||||
# - *old-boost-packages
|
||||
# - g++-4.8
|
||||
|
||||
# test ARM64 architecture
|
||||
- name: "Linux ARM64"
|
||||
os: linux
|
||||
arch: arm64
|
||||
dist: bionic
|
||||
compiler: gcc
|
||||
env: WHICHGCC=7 BUILD_CMAKE=1
|
||||
addons:
|
||||
apt:
|
||||
#sources: *add-sources
|
||||
packages:
|
||||
- libuv1
|
||||
- rhash
|
||||
- libstdc++6
|
||||
- libboost-all-dev
|
||||
- libtiff-dev
|
||||
- libilmbase-dev
|
||||
- libopenexr-dev
|
||||
- libjpeg-turbo8-dev
|
||||
- libgif-dev
|
||||
- libopencolorio-dev
|
||||
#- libopenjpeg-dev
|
||||
- libwebp-dev
|
||||
- libheif-dev
|
||||
#- libfreetype6-dev
|
||||
#- libjpeg-turbo8-dev
|
||||
- libdcmtk-dev
|
||||
#- locales
|
||||
#- python-numpy
|
||||
- libraw-dev
|
||||
- ninja-build
|
||||
- python3
|
||||
- libpython3-dev
|
||||
- libopenvdb-dev
|
||||
- libsquish-dev
|
||||
- qt5-default
|
||||
|
||||
# Static analysis: build with clang-tidy.
|
||||
# Disabled -- this takes so long to run, it can't complete in Travis's
|
||||
# 50 minute time limit. Left here just to show how it should work.
|
||||
# - name: "Static analysis / clang-tidy"
|
||||
# os: linux
|
||||
# compiler: gcc
|
||||
# env: CLANG_TIDY=1 CLANG_TIDY_FIX=1 SKIP_TESTS=1
|
||||
# if: branch =~ /(master|RB|travis|tidy)/ OR type = pull_request
|
||||
# Build with EMBEDPLUGINS=0, both platforms.
|
||||
# FIXME: doesn't work yet on Travis
|
||||
# - os: linux
|
||||
# compiler: gcc
|
||||
# env: EMBEDPLUGINS=0
|
||||
# FIXME: don't have OSX EMBEDPLUGINS=0 working yet on Travis (though
|
||||
# it works fine on my laptop).
|
||||
# - os: osx
|
||||
# compiler: clang
|
||||
# env: EMBEDPLUGINS=0
|
||||
|
||||
notifications:
|
||||
email:
|
||||
recipients:
|
||||
- lg@openimageio.org
|
||||
on_success: change
|
||||
on_failure: always
|
||||
+461
-65
@@ -1,16 +1,348 @@
|
||||
Release 2.2 (1 Sept 2020??) -- compared to 2.1
|
||||
Release 2.2.21 (1 Jul 2022) -- compared to 2.2.20
|
||||
--------------------------------------------------
|
||||
* BMP: gain the ability to read some very old varieties of BMP files. #3375
|
||||
* BMP: better detection of corrupted files with nonsensical image dimensions
|
||||
or total size. #3434
|
||||
* BMP: protect against corrupted files that have palette indices out of bound.
|
||||
#3435
|
||||
* ffmpeg: Support for ffmpeg 5.0. #3282
|
||||
* ffmpeg: protect against possible double-free. #3376
|
||||
* ffmpeg: make the supported file extension check be case-insensitive. This
|
||||
prevents movie files from being incorrectly unable to recognize their format
|
||||
if they have the wrong capitalization of the file extension. #3364
|
||||
* hdr/rgbe files: Avoid possible Windows crash when dealing with characters
|
||||
with the high bit set. #3310
|
||||
* TIFF: fix read problems with TIFF files with non-zero y offset. #3419
|
||||
* Dev goodies: ustring has added a from_hash() static method #3397, and a
|
||||
ustringhash helper class #3436.
|
||||
* simd.h fixes for armv7 and aarch32. #3361
|
||||
|
||||
Release 2.2.20 (1 Feb 2022) -- compared to 2.2.19
|
||||
--------------------------------------------------
|
||||
* Fix some address sanitizer failures. #3160
|
||||
* Build/CI: Deal with OpenColor renaming its master branch to main. #3169
|
||||
* Windows: Fix error when compiling with MSVC. #3168
|
||||
* Fix excessive memory usage when saving EXR with many channels. #3176
|
||||
* TIFF: now works for 16-bit palette images. #3260
|
||||
* Fix ImageBuf::read bug for images of mixed per-channel data types. #3088
|
||||
|
||||
Release 2.2.19 (1 Nov 2021) -- compared to 2.2.18
|
||||
--------------------------------------------------
|
||||
* Better catching of exceptions thrown by OCIO 1.x if it encounters 2.0 config
|
||||
files. #3089
|
||||
* Address new warnings revealed by clang 13. #3122
|
||||
* Fixed some minor python binding bugs. #3074 #3094
|
||||
* Fix when building with Clang on big-endian architectures. #3133
|
||||
* Fix occasional build breaks related to OpenCV headers. #3135
|
||||
* Improvements to NetBSD and OpenBSD support. #3137.
|
||||
* Fixes to work with the libraw 202110 snapshot. #3143
|
||||
|
||||
Release 2.2.18 (1 Sep 2021) -- compared to 2.2.17
|
||||
--------------------------------------------------
|
||||
* Honor env variable `CUE_THREADS` (used by OpenCue) to set the default size
|
||||
of OIIO's thread pool. #3038
|
||||
* Compatibility with OpenColorIO 2.1. #3050
|
||||
* Dev: Extend Sysutil::getenv() to take a default if the environment variable
|
||||
is not found. #3047 #3048
|
||||
|
||||
Release 2.2.17 (1 Aug 2021) -- compared to 2.2.16
|
||||
--------------------------------------------------
|
||||
* Output to DPX files now supports IOProxy. (Input already did.) #3013
|
||||
* typedesc.h: TypeDesc can now describe 2D and 3D bounding boxes, as arrays
|
||||
of 2 VEC2 aggregates (for 2D) or VEC3 aggregates (for 3D) with "BOX"
|
||||
semantic. The shorthand for these are `TypeBox2`, `TypeBox3` (for float),
|
||||
and `TypeBox2i` and `TypeBox3i` for integer or pixel coordinte
|
||||
boxes. #3008
|
||||
* Build: Fixes for building against fmt 8.0.0. #3007
|
||||
* Build: Finding boost is more flexible when desiring static libraries. #3031
|
||||
|
||||
Release 2.2.16 (1 Jul 2021) -- compared to 2.2.15
|
||||
--------------------------------------------------
|
||||
* New UDIM texture name patterns recognized: `%(UDIM)d` is the Houdini
|
||||
convention, and `_u##v##` is for Animal Logic's internal renderer. #3006
|
||||
(2.2.16)
|
||||
* When doing color space transforms on images with > 4 channels -- the
|
||||
additional channels are now copied unaltered, rather than leaving them
|
||||
black. #2987 (2.2.16)
|
||||
* FFMpeg: fix some encodings that didn't correctly recognize that they were
|
||||
more than 8 bits, or had alpha. #2989 (2.2.16)
|
||||
* farmhash.h: Clean up all non-namespaced preprocessor symbols that are set
|
||||
by this header and may pollute the caller's symbols. #3002 (2.2.16)
|
||||
* Fix crashes on M1 (ARM) based Mac. #2990 (2.2.16)
|
||||
* Bug fix: avid divide-by-0 error computing chunk size for invalid image
|
||||
sizes. #2983 (2.2.16)
|
||||
* `make_texture` (and `maketx` and `oiiotool -otex`) no longer crash if you
|
||||
try to make a texture out of a "deep" image; instead it will return an
|
||||
error message. #2991 (2.2.16)
|
||||
* filesystem.h: Improve exception safety in Filesystem directory iteration.
|
||||
#2998 (2.2.16)
|
||||
* Build: Improve finding of OpenJPEG. #2979 (2.2.16)
|
||||
* Build: Support for building OIIO with gcc 11. #2995 (2.2.16)
|
||||
* Build: Fixes to accommodate Imath 3.1 upcoming changes. #2996 (2.2.16)
|
||||
* Build: Finding FFMpeg now correctly detects the version. #2994 (2.2.16)
|
||||
* Build: clang + C++17 + LibRaw < 0.20 are mutually incompatible. Detect
|
||||
this combination and warn / disable libraw under those conditions. #3003
|
||||
(2.2.16)
|
||||
* Build: Fix CMake behavior for `REQUIRED_DEPS` due to a typo. #3011 (2.2.16)
|
||||
* Build: Fixes for detecting and using Ptex, among other things got the
|
||||
version wrong. #3001 (2.2.16)
|
||||
* Testing: If a feature is disabled, skip its tests rather than reporting
|
||||
them as broken. #2988 (2.2.16)
|
||||
* CI: Test the combination of clang and C++17. #3003 (2.2.16)
|
||||
|
||||
Release 2.2.15 (1 Jun 2021) -- compared to 2.2.14
|
||||
--------------------------------------------------
|
||||
* BMP improvements: now support reading rle-compressed BMP files; writing
|
||||
single channel grayscale images now save as 8bpp palette images intead of
|
||||
24bpp; and reading 8bpp where all palette entries have R==G==B looks like
|
||||
a 1-channel grayscale instead of 3-channel RGB. #2976
|
||||
* Bug: IBA::render_text did not properly account for alpha of the draw
|
||||
color. #2981
|
||||
* Bug: Fix runaway parsing time for pathological XMP metadata. #2968
|
||||
* Bug: Fixed a crash is ImageCacheFile::read_unmipped when sampling
|
||||
* Fix exported cmake config files, which could fail if Imath and OpenEXR
|
||||
weren't the at the same version number. #2975
|
||||
* Build: Modernize cmake to use targets for PNG and ZLIB. #2957
|
||||
* Build: Fix to accommodate upcoming OpenColorIO 2.1 deprecation of
|
||||
parseColorSpaceFromString. #2961
|
||||
* Build: Changes to make it build against TBB 2021. #2985
|
||||
* Dev: Add Strutil functions: find, rfind, ifind, irfind. #2960
|
||||
non-zero-base channels. (#2962)
|
||||
|
||||
Release 2.2.14 (1 May 2021) -- compared to 2.2.13
|
||||
--------------------------------------------------
|
||||
* JPEG: Improve readin of files with mildly corrupted headers. #2927
|
||||
* TIFF: Support IOProxy for input. #2921
|
||||
* BMP: Improve performance by eliminating wasteful per-scanline allocation
|
||||
and needless data copying. #2934
|
||||
* Build/CI: Fix all the build_*.bash scripts to not use cmake --config flag,
|
||||
which was harmlessly ignored but is flagged as an error for CMake 3.20.
|
||||
#2931
|
||||
* Build: More fixes related to supporting a wide range of OpenEXR versions,
|
||||
and making our exported cmake configs correctly transmit dependencies on
|
||||
OpenEXR include paths. #2935 #2941 #2942 #2947
|
||||
* ImageBufAlgo::fillholes_pushpull: added logic to correctly set the spec's
|
||||
alpha_channel field when generating sub-images. #2939
|
||||
* Python: MakeTxBumpWithSlopes enum value had been inadvertently omitted
|
||||
from the Python bindings. #2951
|
||||
|
||||
Release 2.2.13 (1 Apr 2021) -- compared to 2.2.12
|
||||
--------------------------------------------------
|
||||
* Get ready for upcoming Imath/OpenEXR 3.0 release. #2883 #2894 #2897
|
||||
* GIF: Fix error checking for non-existant GIF files. #2886
|
||||
* Fix crash related to ImageBuf:set_write_format() when used in conjunction
|
||||
with a file format that doesn't support per-channel data types. #2885
|
||||
* Make RAW files handle Unicode filenames on Windows. #2888
|
||||
* Make sure OIIO builds cleanly with C++20. #2891
|
||||
* BMP: Several bug fixes when reading an older (V1) variety of BMP files.
|
||||
#2899
|
||||
* Targa: fix reading tga files with 0-sized thumbnails. #2903
|
||||
* TIFF: fix reading of certain tiled TIFF files with the vertical image size
|
||||
is not a whole multiple of the tile size. #2895
|
||||
* Avoid OpenColorIO v2 exception when color-conversion of single points (we
|
||||
didn't pass a correct stride, thinking that stride isn't used for a single
|
||||
point). #2911
|
||||
* make_texture: When outputting to a 'half' data format file, clamp filtered
|
||||
values to the half range so large values don't inadvertently get converted
|
||||
to half 'infinite' values. #2892
|
||||
* Improvements to ustring internals to ensure that no two ustrings ever end
|
||||
up with the same hash() value. #2870
|
||||
* Fixes for compiler errors when compiling farmhash.h using C++11 mode with
|
||||
newer gcc (6+). #2914
|
||||
|
||||
Release 2.2.12 (1 Mar 2021) -- compared to 2.2.11
|
||||
--------------------------------------------------
|
||||
* Bug fix: Improve parsing of XMP records in metadata: more correct handling
|
||||
of lists/sequences, better inference of types that look like int or float
|
||||
(rather than forcing unknown fields into strings), fixed bugs in parsing
|
||||
rational values. #2865
|
||||
* Bug fix: Fix loading PSB files with cinf tags. #2877
|
||||
* Build: Improvements to building or linking static libraries. #2854
|
||||
* Build: Change default STOP_ON_WARNING to OFF for release branches
|
||||
(including this one) so that small change in compiler warnings after our
|
||||
release don't break anybody's builds. (Though we still stop on warnings
|
||||
for CI builds). #2861
|
||||
* Build: More clear warnings about using OpenVDB 8+ when building for C++11,
|
||||
because OpenVDB 8 requires C++14 or higher. #2860
|
||||
* Build: The pkgconfig OpenImageIO.pc was specifying the include path
|
||||
incorrectly. #2869
|
||||
* Build: More gracefully handle building against a custom Imath/OpenEXR even
|
||||
when another exists in the system area. #2876
|
||||
* Build: Minor fixes to build cleanly against the upcoming Imath 3.0. #2878
|
||||
* Dev: hash.h: Make many of the hash functions constexpr. #2843
|
||||
* Dev: Better unit tests to verify correctness and stability over time of
|
||||
the hash functions. #2853
|
||||
* Dev: unordered_map_concurrent.h: New methods find_or_insert, nobin_mask().
|
||||
#2867
|
||||
* CI: Speed up CI builds by not building OpenEXR example programes. #2857
|
||||
* CI: Speed up CI by using GitHub 'cache' actions + ccache. #2859
|
||||
* CI: Separate stages (setup, deps, build, test) into separate GHA "steps"
|
||||
for better logging and understanding of the timing and performance. #2862
|
||||
* CI: Now actively testing libheif in Linux CI. #2866
|
||||
* CI: Remove the last vestiges of Travis-CI, which we no longer use. #2871
|
||||
* CI: For failed tests, add CMake cache and log part of the saved artifacts.
|
||||
* PSA: Avoid libheif 1.10 on Mac, it is broken. Libheif 1.11 is fine.
|
||||
|
||||
Release 2.2.11.1 (1 Feb 2021) -- compared to 2.2.11.0
|
||||
-----------------------------------------------------
|
||||
* Fix build break against Qt 5.15.2 (deprecated enum). #2852
|
||||
|
||||
Release 2.2.11 (1 Feb 2021) -- compared to 2.2.10
|
||||
--------------------------------------------------
|
||||
* Enabled AVIF decoding of heic files (requires libheif >= 1.7 and for it
|
||||
to have been built with an AV1 encoder/decoder). #2811 #2812 #2814 #2818
|
||||
* `oiiotool --help` now prints the OCIO version (where it prints the config
|
||||
file and known color space). #2849
|
||||
* Bug fix: ImageBufAlgo::ociolook() and ociofiletransform() internally
|
||||
reversed the order of their `inverse` and `unpremult` arguments, making it
|
||||
hard to select the inverse transformation. #2844
|
||||
* Fix memory leak during decoding of some invalid Exif blocks. #2824
|
||||
* Build: Fixed warnings when building against python 2.x. #2815
|
||||
* Build: No longer directly link against python libraries when unnecessary.
|
||||
#2807
|
||||
* Build: Better finding of OpenJpeg 2.4. #2829
|
||||
* Build: On Windows, fix some linkage problems by changing the pybind11
|
||||
bindings to make a CMake "shared" library rather than "module". Sounds
|
||||
wrong, but seems to work. We will reverse if this causes problems. #2830
|
||||
* Build: On Mac, libheif 1.10 is very broken. Don't use that version. #2847
|
||||
* Build: Fix build break against changes coming in future libtiff, where it
|
||||
is changing from some libtiff-defined integer types to the equivalent
|
||||
stdint.h types. #2848
|
||||
* Build: Some final touches to prepare for release of OpenColor 2.0. #2849
|
||||
* Build: Fixes to support the libraw 202101 snapshot (their in-progress
|
||||
0.21.0). #2850
|
||||
* CI: Got Windows CI fully working, bit by bit. #2796 #2805 #2821 #2826
|
||||
#2834 #2835 #2836 #2840
|
||||
* Dev: Some internal rearrangement of span.h and string_view.h (that should
|
||||
not break source or ABI compatibility). `std::size()` and `std::ssize()`
|
||||
should work with OIIO::span and OIIO::string_view now. #2827
|
||||
* Dev: ustring internals now have a way to ask for the list of ustrings
|
||||
whose hashses collided. #2786
|
||||
* Dev: New Filesystem::generic_filepath() returnss a filepath in generic
|
||||
format (not OS specific). #2819
|
||||
* Dev: ArgParse::abort() lets the response to a command line argument signal
|
||||
that no further arguments should be parsed. #2820
|
||||
* Dev: In oiioversion.h, added macros `OIIO_VERSION_GREATER_EQUAL` and
|
||||
`OIIO_VERSION_LESS`. #2831
|
||||
* Dev: In platform.h, added macro OIIO_INLINE_CONSTEXPR, which is equivalent
|
||||
to `inline constexpr` for C++17, but just constexpr for C++ <= 14. #2832
|
||||
|
||||
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:
|
||||
* New 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. ImageBuf similarly can specify
|
||||
a proxy upon construction for reading, and for writing via a
|
||||
`set_write_ioproxy()` method that applies to subsequent `write` call.
|
||||
#2434 (2.2.0), #2477 (2.2.1).
|
||||
* 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,
|
||||
@@ -21,7 +353,7 @@ New major features and public API changes:
|
||||
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)
|
||||
- Add a version of `ImageBuf.write()` that takes an open `ImageOutput`.
|
||||
- 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:
|
||||
@@ -39,10 +371,6 @@ New major features and public API changes:
|
||||
- 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
|
||||
* oiiotool subimage support:
|
||||
- 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
|
||||
* 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.
|
||||
@@ -99,6 +427,7 @@ Fixes and feature enhancements:
|
||||
#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
|
||||
@@ -112,7 +441,13 @@ Fixes and feature enhancements:
|
||||
(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)
|
||||
* Exif read: guard better against out of range offests, fixes crashes when
|
||||
* 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)
|
||||
@@ -120,8 +455,16 @@ Fixes and feature enhancements:
|
||||
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 propery set in JPEG output.
|
||||
- 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:
|
||||
@@ -133,6 +476,13 @@ Fixes and feature enhancements:
|
||||
"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)
|
||||
@@ -150,7 +500,7 @@ Fixes and feature enhancements:
|
||||
- Fix subtle bug when reading Exif directory in the header. #2540
|
||||
(2.2.2)
|
||||
* Video files:
|
||||
- Fix posible infinite loop in the FFMpeg-based reader. #2576
|
||||
- Fix possible infinite loop in the FFMpeg-based reader. #2576
|
||||
(2.1.15/2.2.3)
|
||||
|
||||
Developer goodies / internals:
|
||||
@@ -235,8 +585,6 @@ Developer goodies / internals:
|
||||
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)
|
||||
* 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)
|
||||
* oiiotool: Big overhaul and simplification of internals. #2586 #2589 (2.2.3)
|
||||
|
||||
Build/test system improvements and platform ports:
|
||||
@@ -264,21 +612,7 @@ Build/test system improvements and platform ports:
|
||||
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)
|
||||
* 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)
|
||||
- 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
|
||||
@@ -298,6 +632,37 @@ Build/test system improvements and platform ports:
|
||||
- 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)
|
||||
@@ -309,11 +674,8 @@ Build/test system improvements and platform ports:
|
||||
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 inculde `fmt` on its own. #2498.
|
||||
that include strutil.h but also include `fmt` on its own. #2498.
|
||||
(2.1.12/2.2.2)
|
||||
* Testing of TGA now assumes the test images are in the oiio-images project,
|
||||
not separately downloaded (the download location disappered from the net).
|
||||
#2512 (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)
|
||||
@@ -324,27 +686,57 @@ Build/test system improvements and platform ports:
|
||||
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)
|
||||
* Beef up OpenEXR compliance tests, many more examples from openexr-images,
|
||||
including many corrupted image failure cases. #2607 (2.2.4)
|
||||
* "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)
|
||||
* 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
|
||||
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.
|
||||
@@ -359,11 +751,13 @@ Release 2.1.18 (1 Aug 2020) -- compared to 2.1.17
|
||||
* 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
|
||||
retriction that you must use "python2" or "python3" by name. #2598
|
||||
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
|
||||
@@ -376,8 +770,8 @@ Release 2.1.17 (1 Jul 2020) -- compared to 2.1.16
|
||||
* 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
|
||||
--------------------------------------------------
|
||||
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
|
||||
@@ -394,7 +788,7 @@ 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 posible infinite loop in the FFMpeg-based reader. #2576
|
||||
* 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
|
||||
|
||||
@@ -412,6 +806,8 @@ Release 2.1.14 (1 May 2020) -- compared to 2.1.13
|
||||
* 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
|
||||
-------------------------------------------------
|
||||
@@ -423,7 +819,7 @@ Release 2.1.13 (1 Apr 2020) -- compared to 2.1.12
|
||||
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 propery set in JPEG output.
|
||||
* 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
|
||||
@@ -433,7 +829,7 @@ Release 2.1.13 (1 Apr 2020) -- compared to 2.1.12
|
||||
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 iclude path. #2515
|
||||
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
|
||||
@@ -466,7 +862,7 @@ Release 2.1.12 (2 Mar 2020) -- compared to 2.1.11
|
||||
* 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 inculde `fmt` on its own. #2498.
|
||||
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
|
||||
-------------------------------------------------
|
||||
@@ -494,7 +890,7 @@ Release 2.1.10.1 (10 Jan 2019)
|
||||
* 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 vesion that we auto-download, and also be sure
|
||||
* 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
|
||||
@@ -565,7 +961,7 @@ Public API changes:
|
||||
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"`) insead of requiring quality to be passed
|
||||
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`
|
||||
@@ -634,7 +1030,7 @@ Fixes and feature enhancements:
|
||||
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:UnassociatedApha 1` from
|
||||
- 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
|
||||
@@ -680,11 +1076,11 @@ Fixes and feature enhancements:
|
||||
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 uaual type-merging
|
||||
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 numer of channels.
|
||||
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)
|
||||
@@ -758,7 +1154,7 @@ Fixes and feature enhancements:
|
||||
#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 unnsigned int
|
||||
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:
|
||||
@@ -786,7 +1182,7 @@ Fixes and feature enhancements:
|
||||
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 fseeks). Also speed up
|
||||
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
|
||||
@@ -921,7 +1317,7 @@ Build/test system improvements and platform ports:
|
||||
* 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 partcular, this tests
|
||||
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).
|
||||
@@ -945,7 +1341,7 @@ Build/test system improvements and platform ports:
|
||||
#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 verson that we auto-install when not found (to 2.4.2),
|
||||
* 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
|
||||
@@ -973,7 +1369,7 @@ Developer goodies / internals:
|
||||
- New header implements "attribute delegates." (Read header for details)
|
||||
#2204 (2.1.1)
|
||||
* dassert.h:
|
||||
- Spruce up assrtion macros: more uniform wording, and use pretty
|
||||
- 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
|
||||
@@ -990,11 +1386,11 @@ Developer goodies / internals:
|
||||
* fmath.h:
|
||||
- `safe_mod()` does integer modulus but protects against mod-by-zero
|
||||
exceptions. #2121 (2.1.0/2.0.5)
|
||||
- powwroundup/pow2rounddown have been renamed ceil2/floor2 to reflect
|
||||
- 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 funnctions. #2299, #2309 (2.1.3)
|
||||
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
|
||||
@@ -1035,12 +1431,12 @@ Developer goodies / internals:
|
||||
- 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 functionn. #2313, #2316
|
||||
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
|
||||
sequennce up to the length of the ustring. #2283 (2.0.10/2.1.3)
|
||||
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
|
||||
@@ -1107,7 +1503,7 @@ Release 2.0.10 (1 Aug, 2019) -- compared to 2.0.9
|
||||
* `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 sequennce up to
|
||||
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
|
||||
@@ -1917,7 +2313,7 @@ Developer goodies / internals:
|
||||
#1904 (1.9.2)
|
||||
|
||||
Notable documentation changes:
|
||||
* A new LICENSE-THIRD-PARTY.md file reproduces the full open source licenses
|
||||
* 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
|
||||
|
||||
+34
-258
@@ -3,16 +3,22 @@
|
||||
# https://github.com/OpenImageIO/oiio/blob/master/LICENSE.md
|
||||
|
||||
cmake_minimum_required (VERSION 3.12)
|
||||
project (OpenImageIO VERSION 2.2.4.0
|
||||
project (OpenImageIO VERSION 2.2.21.0
|
||||
HOMEPAGE_URL "https://openimageio.org"
|
||||
LANGUAGES CXX C)
|
||||
set (PROJ_NAME OIIO) # short name, caps
|
||||
string (TOLOWER ${PROJ_NAME} PROJ_NAME_LOWER) # short name lower case
|
||||
string (TOUPPER ${PROJ_NAME} PROJ_NAME_UPPER) # short name upper case
|
||||
set (PROJECT_VERSION_RELEASE_TYPE "dev") # "dev", "betaX", "RCY", ""
|
||||
set (PROJECT_VERSION_RELEASE_TYPE "") # "dev", "betaX", "RCY", ""
|
||||
set (${PROJECT_NAME}_VERSION_RELEASE_TYPE ${PROJECT_VERSION_RELEASE_TYPE})
|
||||
set (PROJECT_AUTHORS "Contributors to the OpenImageIO project")
|
||||
set (${PROJECT_NAME}_SUPPORTED_RELEASE 0) # Change to 1 after release branch
|
||||
set (${PROJECT_NAME}_SUPPORTED_RELEASE 1) # Change to 1 after release branch
|
||||
|
||||
# Identify whether this is included as a subproject of something else
|
||||
if (NOT "${CMAKE_PROJECT_NAME}" STREQUAL "${PROJECT_NAME}")
|
||||
set (${PROJECT_NAME}_IS_SUBPROJECT ON)
|
||||
message (STATUS "${PROJECT_NAME} is configuring as a CMake subproject")
|
||||
endif ()
|
||||
|
||||
# If the user wants to use Conan to build dependencies, they will have done
|
||||
# this prior to the cmake config:
|
||||
@@ -25,9 +31,6 @@ if (EXISTS ${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
|
||||
conan_basic_setup()
|
||||
endif()
|
||||
|
||||
message (STATUS "Building ${PROJECT_NAME} ${PROJECT_VERSION}")
|
||||
message (STATUS "CMake version is ${CMAKE_VERSION}")
|
||||
|
||||
if (NOT CMAKE_BUILD_TYPE)
|
||||
set (CMAKE_BUILD_TYPE "Release")
|
||||
endif ()
|
||||
@@ -73,9 +76,6 @@ set (PLUGIN_SEARCH_PATH "" CACHE STRING "Default plugin search path")
|
||||
file (TO_NATIVE_PATH "${PLUGIN_SEARCH_PATH}" PLUGIN_SEARCH_PATH_NATIVE)
|
||||
set (CMAKE_DEBUG_POSTFIX "" CACHE STRING "Library naming postfix for Debug builds (e.g., '_debug')")
|
||||
|
||||
set(OIIO_TESTSUITE_IMAGEDIR "${PROJECT_SOURCE_DIR}/.." CACHE PATH
|
||||
"Location of oiio-images, openexr-images, libtiffpic, etc.." )
|
||||
|
||||
option (OIIO_THREAD_ALLOW_DCLP "OIIO threads may use DCLP for speed" ON)
|
||||
if (NOT OIIO_THREAD_ALLOW_DCLP)
|
||||
add_definitions ("-DOIIO_THREAD_ALLOW_DCLP=0")
|
||||
@@ -104,23 +104,31 @@ list (APPEND CMAKE_MODULE_PATH
|
||||
|
||||
include (GNUInstallDirs)
|
||||
|
||||
# Utilities
|
||||
include (colors)
|
||||
include (check_is_enabled)
|
||||
include (checked_find_package)
|
||||
include (fancy_add_executable)
|
||||
include (add_oiio_plugin)
|
||||
|
||||
# All the C++ and compiler related options and adjustments live here
|
||||
# All the C++ and compiler related options and adjustments
|
||||
include (compiler)
|
||||
|
||||
include (oiio_macros)
|
||||
|
||||
# All the dependency finding and options are here
|
||||
include (externalpackages)
|
||||
|
||||
# Utilities related to finding python and making python bindings
|
||||
# Utilities and options related to finding python and making python bindings
|
||||
include (pythonutils)
|
||||
|
||||
# We want CTest for testing, so this must be added before all the calls to
|
||||
# add_subdirectory, or their add_test commands will not register.
|
||||
include (CTest)
|
||||
# Dependency finding utilities and all dependency-related options
|
||||
include (externalpackages)
|
||||
|
||||
# Include all our testing apparatus and utils, but not if it's a subproject
|
||||
if (NOT ${PROJECT_NAME}_IS_SUBPROJECT)
|
||||
include (testing)
|
||||
else ()
|
||||
macro (oiio_add_tests)
|
||||
endmacro ()
|
||||
macro (oiio_add_all_tests)
|
||||
endmacro ()
|
||||
endif ()
|
||||
|
||||
|
||||
include_directories (
|
||||
@@ -128,6 +136,7 @@ include_directories (
|
||||
"${CMAKE_SOURCE_DIR}/src/include"
|
||||
"${CMAKE_BINARY_DIR}/src/include"
|
||||
"${CMAKE_BINARY_DIR}/include"
|
||||
"${CMAKE_BINARY_DIR}/include/OpenImageIO"
|
||||
)
|
||||
|
||||
# Tell CMake to process the sub-directories
|
||||
@@ -183,7 +192,7 @@ if (NOT EMBEDPLUGINS AND NOT BUILD_OIIOUTIL_ONLY)
|
||||
endforeach ()
|
||||
endif ()
|
||||
|
||||
if (USE_PYTHON AND NOT BUILD_OIIOUTIL_ONLY)
|
||||
if (USE_PYTHON AND Python_Development_FOUND AND NOT BUILD_OIIOUTIL_ONLY)
|
||||
add_subdirectory (src/python)
|
||||
endif ()
|
||||
|
||||
@@ -204,12 +213,12 @@ if (OIIO_SITE AND EXISTS "${PROJECT_SOURCE_DIR}/site/${OIIO_SITE}/cmake/sitecust
|
||||
endif ()
|
||||
|
||||
# install pkgconfig file
|
||||
IF ( NOT MSVC )
|
||||
if (NOT MSVC)
|
||||
configure_file(src/build-scripts/OpenImageIO.pc.in "${CMAKE_BINARY_DIR}/OpenImageIO.pc" @ONLY)
|
||||
install (FILES "${CMAKE_BINARY_DIR}/OpenImageIO.pc"
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
|
||||
COMPONENT developer)
|
||||
ENDIF()
|
||||
endif()
|
||||
|
||||
# Oddball: install the FindOpenImageIO.cmake file
|
||||
install (FILES src/cmake/modules/FindOpenImageIO.cmake
|
||||
@@ -256,242 +265,9 @@ install (EXPORT OIIO_EXPORTED_TARGETS
|
||||
NAMESPACE ${PROJECT_NAME}::)
|
||||
|
||||
|
||||
#########################################################################
|
||||
# Testing
|
||||
#
|
||||
# Just call oiio_add_tests(testname...) for each test. Additional
|
||||
# optional arguments include:
|
||||
# FOUNDVAR specifies the name of a CMAKE variable; if not defined,
|
||||
# the test will not be added for 'make test' (helpful
|
||||
# for excluding tests for libraries not found).
|
||||
# IMAGEDIR specifies a directory for test images, one level higher
|
||||
# than where the oiio top level source lives -- a
|
||||
# message will be printed if not found.
|
||||
# URL URL where the test images can be found, will be
|
||||
# incorporated into the error message if the test
|
||||
# image directory is not found.
|
||||
# LABEL If set to "broken", will designate the test as one
|
||||
# that is known to be broken, so will only be run
|
||||
# for "make testall", but not "make test".
|
||||
#
|
||||
oiio_add_all_tests()
|
||||
|
||||
# Make a build/platform/testsuite directory, and copy the master runtest.py
|
||||
# there. The rest is up to the tests themselves.
|
||||
file (MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/testsuite")
|
||||
file (COPY "${CMAKE_CURRENT_SOURCE_DIR}/testsuite/common"
|
||||
DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/testsuite")
|
||||
add_custom_command (OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/testsuite/runtest.py"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/testsuite/runtest.py"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/testsuite/runtest.py"
|
||||
MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/testsuite/runtest.py")
|
||||
add_custom_target ( CopyFiles ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/testsuite/runtest.py" )
|
||||
|
||||
# Tests that require oiio-images:
|
||||
oiio_add_tests (gpsread
|
||||
oiiotool oiiotool-attribs oiiotool-copy
|
||||
oiiotool-readerror oiiotool-xform
|
||||
oiiotool-fixnan ## maketx & oiiotool-maketx depend on this
|
||||
maketx oiiotool-maketx
|
||||
misnamed-file
|
||||
missingcolor
|
||||
texture-interp-bicubic
|
||||
texture-blurtube
|
||||
texture-crop texture-cropover
|
||||
texture-derivs texture-fill texture-filtersize
|
||||
texture-flipt texture-gettexels texture-gray
|
||||
texture-mip-nomip texture-mip-trilinear
|
||||
texture-overscan texture-pointsample
|
||||
texture-uint8
|
||||
texture-width0blur
|
||||
texture-fat texture-skinny texture-wrapfill
|
||||
texture-missing texture-res texture-maxres
|
||||
texture-udim texture-udim2
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images"
|
||||
)
|
||||
|
||||
# Remaining freestanding tests:
|
||||
oiio_add_tests (nonwhole-tiles
|
||||
oiiotool-composite
|
||||
oiiotool-pattern
|
||||
oiiotool-subimage oiiotool-text
|
||||
diff
|
||||
dither dup-channels
|
||||
jpeg-corrupt
|
||||
null
|
||||
rational
|
||||
)
|
||||
|
||||
# Travis + old libjpeg seems to not catch an error in this test, skip it
|
||||
# for that case.
|
||||
if (JPEG_TURBO_FOUND OR NOT DEFINED ENV{TRAVIS})
|
||||
oiio_add_tests (jpeg-corrupt-header)
|
||||
endif()
|
||||
|
||||
# Add tests that require the Python bindings if we built the Python
|
||||
# bindings. This is mostly the test that are specifically about testing
|
||||
# the Python bindings themselves, but also a handful of tests that are
|
||||
# mainly about other things but happen to use Python in order to perform
|
||||
# thee test.
|
||||
# We also exclude these tests if this is a sanitizer build on Linux,
|
||||
# because the Python interpreter itself won't be linked with the right asan
|
||||
# libraries to run correctly.
|
||||
if (USE_PYTHON AND NOT BUILD_OIIOUTIL_ONLY AND NOT SANITIZE_ON_LINUX)
|
||||
oiio_add_tests (
|
||||
python-typedesc python-paramlist
|
||||
python-imagespec python-roi python-deep python-colorconfig
|
||||
python-imageinput python-imageoutput
|
||||
python-imagebuf python-imagebufalgo
|
||||
IMAGEDIR oiio-images
|
||||
)
|
||||
if (NOT ${PROJECT_NAME}_IS_SUBPROJECT)
|
||||
include (packaging)
|
||||
endif ()
|
||||
|
||||
oiio_add_tests (oiiotool-color
|
||||
FOUNDVAR OPENCOLORIO_FOUND)
|
||||
|
||||
# Advanced tests that are done by hand and for releases:
|
||||
# FIXME -- at some point, try to fix these or provide new ref images
|
||||
if (NOT DEFINED ENV{TRAVIS})
|
||||
oiio_add_tests (
|
||||
texture-half texture-uint16
|
||||
texture-interp-bilinear
|
||||
texture-interp-closest
|
||||
texture-mip-onelevel
|
||||
)
|
||||
endif ()
|
||||
if (NOT DEFINED ENV{TRAVIS} AND NOT DEFINED ENV{CIRCLECI} AND NOT DEFINED ENV{GITHUB_ACTIONS})
|
||||
oiio_add_tests (texture-icwrite)
|
||||
endif ()
|
||||
|
||||
# List testsuites for specific formats or features which might be not found
|
||||
# or be intentionally disabled, or which need special external reference
|
||||
# images from the web that if not found, should skip the tests:
|
||||
|
||||
oiio_add_tests (bmp
|
||||
ENABLEVAR ENABLE_BMP
|
||||
IMAGEDIR bmpsuite
|
||||
URL http://entropymine.com/jason/bmpsuite/bmpsuite.zip)
|
||||
oiio_add_tests (dpx
|
||||
ENABLEVAR ENABLE_DPX
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (field3d texture-field3d
|
||||
FOUNDVAR Field3D_FOUND ENABLEVAR ENABLE_FIELD3D)
|
||||
oiio_add_tests (fits
|
||||
ENABLEVAR ENABLE_FITS
|
||||
IMAGEDIR fits-images
|
||||
URL http://www.cv.nrao.edu/fits/data/tests/)
|
||||
oiio_add_tests (gif
|
||||
FOUNDVAR GIF_FOUND ENABLEVAR ENABLE_GIF
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (heif
|
||||
FOUNDVAR Libheif_FOUND ENABLEVAR ENABLE_Libheif
|
||||
URL https://github.com/nokiatech/heif/tree/gh-pages/content)
|
||||
oiio_add_tests (ico
|
||||
ENABLEVAR ENABLE_ICO
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (iff
|
||||
ENABLEVAR ENABLE_IFF
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (jpeg2000
|
||||
FOUNDVAR OPENJPEG_FOUND
|
||||
IMAGEDIR j2kp4files_v1_5
|
||||
URL http://www.itu.int/net/ITU-T/sigdb/speimage/ImageForm-s.aspx?val=10100803)
|
||||
oiio_add_tests (openexr-suite openexr-multires openexr-chroma
|
||||
openexr-v2 openexr-window openexr-damaged perchannel
|
||||
oiiotool-deep
|
||||
IMAGEDIR openexr-images
|
||||
URL http://www.openexr.com/downloads.html)
|
||||
oiio_add_tests (openvdb
|
||||
FOUNDVAR OpenVDB_FOUND ENABLEVAR ENABLE_OpenVDB)
|
||||
oiio_add_tests (png
|
||||
ENABLEVAR ENABLE_PNG
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (pnm
|
||||
ENABLEVAR ENABLE_PNM
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (psd psd-colormodes
|
||||
ENABLEVAR ENABLE_PSD
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (ptex
|
||||
FOUNDVAR PTEX_FOUND ENABLEVAR ENABLE_PTEX)
|
||||
oiio_add_tests (raw
|
||||
FOUNDVAR LIBRAW_FOUND ENABLEVAR ENABLE_LIBRAW
|
||||
IMAGEDIR oiio-images/raw
|
||||
URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (rla
|
||||
ENABLEVAR ENABLE_RLA
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (sgi
|
||||
ENABLEVAR ENABLE_SGI
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (targa-tgautils
|
||||
ENABLEVAR ENABLE_TARGA
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (tiff-suite tiff-depths tiff-misc
|
||||
IMAGEDIR libtiffpic
|
||||
URL http://www.simplesystems.org/libtiff/images.html)
|
||||
oiio_add_tests (webp
|
||||
FOUNDVAR Webp_FOUND ENABLEVAR ENABLE_Webp
|
||||
IMAGEDIR oiio-images/webp URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (zfile ENABLEVAR ENABLE_ZFILE
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
|
||||
if (SPI_TESTS)
|
||||
oiio_add_tests (oiiotool-spi
|
||||
FOUNDVAR SPI_TESTS
|
||||
IMAGEDIR spi-oiio-tests
|
||||
URL "noplace -- it's SPI specific tests")
|
||||
endif ()
|
||||
|
||||
|
||||
|
||||
#########################################################################
|
||||
# Packaging
|
||||
set (CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
|
||||
set (CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
|
||||
set (CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
|
||||
# "Vendor" is only used in copyright notices, so we use the same thing that
|
||||
# the rest of the copyright notices say.
|
||||
set (CPACK_PACKAGE_VENDOR ${PROJECT_AUTHORS})
|
||||
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "OpenImageIO is an open source library for reading and writing image file formats, a nice format-agnostic image viewer, and other image-related classes and utilities.")
|
||||
set (CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/src/doc/Description.txt")
|
||||
set (CPACK_PACKAGE_FILE_NAME ${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR})
|
||||
#SET (CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_SOURCE_DIR}")
|
||||
file (MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/cpack")
|
||||
file (COPY "${PROJECT_SOURCE_DIR}/LICENSE.md" DESTINATION "${CMAKE_BINARY_DIR}/cpack")
|
||||
file (RENAME "${CMAKE_BINARY_DIR}/cpack/LICENSE.md" "${CMAKE_BINARY_DIR}/cpack/License.txt")
|
||||
set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_BINARY_DIR}/cpack/License.txt")
|
||||
file (COPY "${PROJECT_SOURCE_DIR}/README.md" DESTINATION "${CMAKE_BINARY_DIR}/cpack")
|
||||
set (CPACK_RESOURCE_FILE_README "${CMAKE_BINARY_DIR}/cpack/README.md")
|
||||
set (CPACK_RESOURCE_FILE_WELCOME "${PROJECT_SOURCE_DIR}/src/doc/Welcome.txt")
|
||||
#SET (CPACK_STRIP_FILES Do we need this?)
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||
set (CPACK_GENERATOR "TGZ;STGZ;RPM;DEB")
|
||||
set (CPACK_SOURCE_GENERATOR "TGZ")
|
||||
endif ()
|
||||
if (APPLE)
|
||||
set (CPACK_GENERATOR "TGZ;STGZ;PackageMaker")
|
||||
set (CPACK_SOURCE_GENERATOR "TGZ")
|
||||
endif ()
|
||||
if (WIN32)
|
||||
set (CPACK_GENERATOR "NSIS")
|
||||
set(CPACK_PACKAGE_EXECUTABLES "iv" "iv - Image Viewer")
|
||||
# set(CPACK_CREATE_DESCTOP_LINKS "iv" "iv - Image Viewer")
|
||||
set(CPACK_NSIS_MODIFY_PATH ON)
|
||||
include (InstallRequiredSystemLibraries)
|
||||
endif ()
|
||||
set (CPACK_SOURCE_PACKAGE_FILE_NAME ${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}-source)
|
||||
#set (CPACK_SOURCE_STRIP_FILES Do we need this?)
|
||||
set (CPACK_SOURCE_IGNORE_FILES ".*~")
|
||||
set (CPACK_COMPONENT_UNSPECIFIED_HIDDEN TRUE)
|
||||
set (CPACK_COMPONENT_UNSPECIFIED_REQUIRED TRUE)
|
||||
set (CPACK_COMPONENTS_ALL user developer documentation Unspecified)
|
||||
set (CPACK_COMPONENT_USER_DISPLAY_NAME "Applications")
|
||||
set (CPACK_COMPONENT_DEVELOPER_DISPLAY_NAME "Developer files")
|
||||
set (CPACK_COMPONENT_DOCUMENTATION_DISPLAY_NAME "Documentation")
|
||||
set (CPACK_COMPONENT_USER_DESCRIPTION
|
||||
"Applications: oiotool, iv, iinfo, iconvert, idiff, igrep, maketx and libraries")
|
||||
set (CPACK_COMPONENT_DEVELOPER_DESCRIPTION "Include files")
|
||||
set (CPACK_COMPONENT_DOCUMENTATION_DESCRIPTION "OpenImageIO documentation")
|
||||
set (CPACK_COMPONENT_DEVELOPER_DEPENDS user)
|
||||
include (CPack)
|
||||
|
||||
+8
-10
@@ -111,13 +111,11 @@ component that deserves extended discussion or debate among the wider OIIO
|
||||
community, then it may be prudent to email oiio-dev pointing everybody to
|
||||
the pull request URL and discussing any issues you think are important.
|
||||
|
||||
6. All pull requests automatically launch jobs on [TravisCI](https://travis-ci.org)
|
||||
for Linux and MacOS and on [Appveyor](http://appveyor.com) for Windows.
|
||||
This ensures that the build completes and that the tests suite runs
|
||||
correctly, for a varity of platform, compiler, library, and flag combinations.
|
||||
The status of the CI tests for your PR will be displayed on the GitHub PR
|
||||
page. We will not accept PRs that don't build cleanly or pass the existing
|
||||
testsuite.
|
||||
6. All pull requests automatically launch CI jobs on GitHub Actions to
|
||||
ensure that the build completes and that the tests suite runs correctly, for
|
||||
a varity of platform, compiler, library, and flag combinations. The status
|
||||
of the CI tests for your PR will be displayed on the GitHub PR page. We will
|
||||
not accept PRs that don't build cleanly or pass the existing testsuite.
|
||||
|
||||
7. The reviewer will look over the code and critique on the "comments" area.
|
||||
Reviewers may ask for changes, explain problems they found, congratulate the
|
||||
@@ -145,7 +143,7 @@ and it will automatically reformat your code according to the configuration
|
||||
file found in the `.clang-format` file at the root directory of the OIIO
|
||||
source code checkout.
|
||||
|
||||
One of the TravisCI test matrix entries runs clang-format and fails if any
|
||||
One of the CI test matrix entries runs clang-format and fails if any
|
||||
diffs were generated (that is, if any of your code did not 100% conform to
|
||||
the `.clang-format` formatting configuration). If it fails, clicking on that
|
||||
test log will show you the diffs generated, so that you can easily correct
|
||||
@@ -153,9 +151,9 @@ it on your end and update the PR with the formatting fixes.
|
||||
|
||||
If you don't have clang-format set up on your machine, and your patch is not
|
||||
very long, you may find that it's more convenient to just submit it and hope
|
||||
for the best, and if it doesn't pass the Travis test, look at the diffs in
|
||||
for the best, and if it doesn't pass the CI test, look at the diffs in
|
||||
the log and make the corrections by hand and then submit an update to the
|
||||
patch (i.e. relying on Travis to run clang-format for you).
|
||||
patch (i.e. relying on CI to run clang-format for you).
|
||||
|
||||
Because the basic formatting is automated by clang-format, we won't
|
||||
enumerate the rules here.
|
||||
|
||||
+19
@@ -13,6 +13,7 @@ lg@openimageio.org
|
||||
* Alexander Murashko
|
||||
* Alexandre Gauthier
|
||||
* Alexis Oblet
|
||||
* Alister Chowdhury
|
||||
* Alexy Pawlow
|
||||
* Aman Shah
|
||||
* Ananth Garre
|
||||
@@ -20,14 +21,19 @@ lg@openimageio.org
|
||||
* Basileios Anastasatos
|
||||
* Bastien Montagne
|
||||
* Ben De Luca
|
||||
* Biswapriyo Nath
|
||||
* Blair Tennessy
|
||||
* Blazej Floch
|
||||
* Brad Smith
|
||||
* Brecht Van Lommel
|
||||
* Brent Davis
|
||||
* Brian Hall
|
||||
* Brice Gros
|
||||
* Carl Rand
|
||||
* Cassian Andrei
|
||||
* Chad Dombrova
|
||||
* Changlin Hsieh
|
||||
* Chris Crosetto
|
||||
* Chris Foster
|
||||
* Chris Kulla
|
||||
* Christoph Willing
|
||||
@@ -42,9 +48,11 @@ lg@openimageio.org
|
||||
* Deepak Gopinath
|
||||
* Delai Felinto
|
||||
* Dennis Schridde
|
||||
* Dieter De Baets
|
||||
* Dinko Galetik
|
||||
* Dominik Bartkiewicz
|
||||
* Duncan Chan
|
||||
* Dustin Rodrigues
|
||||
* Edgar Velazquez-Armendariz
|
||||
* Eloi Du Bois
|
||||
* Elvic Liang
|
||||
@@ -52,6 +60,7 @@ lg@openimageio.org
|
||||
* Fabien Servant
|
||||
* Frédéric Devernay
|
||||
* Fredrik Averpil
|
||||
* Gaurav Bansal
|
||||
* Ghislain Antony Vaillant
|
||||
* Gonzalo Garramuño
|
||||
* Grégoire De Lillo
|
||||
@@ -62,10 +71,13 @@ lg@openimageio.org
|
||||
* Henri Fousse
|
||||
* Harry Mallon
|
||||
* Hugh Macdonald
|
||||
* Imarz
|
||||
* Irena Damsky
|
||||
* Ismael Cortes
|
||||
* Jan Hettenkofer
|
||||
* Jep Hill
|
||||
* Jeph Alapat
|
||||
* Jens Lindgren
|
||||
* Jeremy Rose
|
||||
* Jeremy Selan
|
||||
* Jim Hourihan
|
||||
@@ -78,6 +90,7 @@ lg@openimageio.org
|
||||
* Justina Mikonyte
|
||||
* Kazuki Takahashi
|
||||
* Kevin Brightwell
|
||||
* Kimball Thurston
|
||||
* Konrad Kleine
|
||||
* Krzysztof Blicharski
|
||||
* Larry Gritz (project leader)
|
||||
@@ -88,6 +101,7 @@ lg@openimageio.org
|
||||
* Lucille Caillaud
|
||||
* Lukas Schrangl
|
||||
* Lukasz Maliszewski
|
||||
* Luke Emrose
|
||||
* M Joonas Pihlaja
|
||||
* Malcolm Humphreys
|
||||
* Manuel Gamito
|
||||
@@ -111,16 +125,19 @@ lg@openimageio.org
|
||||
* Nick Black
|
||||
* Nicolas Burtnyk
|
||||
* Nixon Kwok
|
||||
* Northon Patrick
|
||||
* Nuno Cardoso
|
||||
* Ott Tinn
|
||||
* Pascal Lecocq
|
||||
* Patrick Hodoul
|
||||
* Patrick Piché
|
||||
* Paul Molodowitch
|
||||
* Pavel Karneliuk
|
||||
* Pete Larabell
|
||||
* Philip Nemec
|
||||
* Pino Toscano
|
||||
* Puneet Jain
|
||||
* Radu Arjocu
|
||||
* Ramon Montoya
|
||||
* Ray Molenkamp
|
||||
* Richard Shaw
|
||||
@@ -139,6 +156,7 @@ lg@openimageio.org
|
||||
* Shane Ambler
|
||||
* Simon Boorer
|
||||
* Solomon Boulos
|
||||
* SRHMorris
|
||||
* Stefan Bruens
|
||||
* Stefan Stavrev
|
||||
* Thiago Ize
|
||||
@@ -156,3 +174,4 @@ lg@openimageio.org
|
||||
* Xo Wang
|
||||
* Yang Yang
|
||||
* Yann Lanthony
|
||||
* zomgrolf
|
||||
|
||||
+36
-106
@@ -2,7 +2,7 @@ Installation instructions for OpenImageIO
|
||||
=========================================
|
||||
|
||||
# Table of Contents
|
||||
1. [OpenImageIO's Dependences](#dependencies)
|
||||
1. [OpenImageIO's Dependencies](#dependencies)
|
||||
2. [Installing binaries from package managers](#installingfrompackagemanagers)
|
||||
3. [Building OIIO from source](#buildingfromsource)
|
||||
|
||||
@@ -14,12 +14,12 @@ NEW or CHANGED MINIMUM dependencies since the last major release are **bold**.
|
||||
|
||||
### Required dependencies -- OIIO will not build at all without these
|
||||
|
||||
* C++11 (also builds with C++14 and C++17)
|
||||
* Compilers: gcc 4.8.2 - 10.1, clang 3.3 - 10.0, MSVS 2015 - 2019,
|
||||
* C++11 (also builds with C++14, C++17, and C++20)
|
||||
* Compilers: gcc 4.8.2 - 11.2, clang 3.3 - 13, MSVS 2015 - 2019,
|
||||
icc version 13 or higher
|
||||
* CMake >= 3.12 (tested through 3.18)
|
||||
* OpenEXR >= 2.0 (recommended: 2.2 or higher; tested through 2.5)
|
||||
* libTIFF >= 3.9 (recommended: 4.0+; tested through 4.1.0)
|
||||
* CMake >= 3.12 (tested through 3.21)
|
||||
* OpenEXR/Imath >= 2.0 (recommended: 2.2 or higher; tested through 3.1)
|
||||
* libTIFF >= 3.9 (recommended: 4.0+; tested through 4.3)
|
||||
|
||||
### Optional dependencies -- features may be disabled if not found
|
||||
* If you are building the `iv` viewer (which will be disabled if any of
|
||||
@@ -27,38 +27,49 @@ NEW or CHANGED MINIMUM dependencies since the last major release are **bold**.
|
||||
* Qt >= 5.6 (tested through 5.15)
|
||||
* OpenGL
|
||||
* If you are building the Python bindings or running the testsuite:
|
||||
* Python >= 2.7 (tested against 2.7, 3.6, 3.7, 3.8)
|
||||
* pybind11 >= 2.4.2 (Tested through 2.5.)
|
||||
* Python >= 2.7 (tested against 2.7, 3.6, 3.7, 3.8, 3.9)
|
||||
* pybind11 >= 2.4.2 (Tested through 2.8.)
|
||||
* NumPy
|
||||
* If you want support for camera "RAW" formats:
|
||||
* LibRaw >= 0.15 (tested 0.15 - 0.20; LibRaw >= 0.18 is necessary for
|
||||
ACES support and much better recognition of camera metadata)
|
||||
ACES support and much better recognition of camera metadata; if
|
||||
building with C++17 or higher, LibRaw >= 0.20 is necessary)
|
||||
* If you want support for a wide variety of video formats:
|
||||
* ffmpeg >= 2.6 (tested through 4.3)
|
||||
* ffmpeg >= 2.6 (tested through 5.0)
|
||||
* If you want support for jpeg 2000 images:
|
||||
* **OpenJpeg >= 2.0** (tested through 2.3)
|
||||
* **OpenJpeg >= 2.0** (tested through 2.4)
|
||||
* If you want support for Field3D files:
|
||||
* Field3D
|
||||
* Field3D (tested through 1.7.3)
|
||||
* If you want support for OpenVDB files:
|
||||
* OpenVDB >= 5.0 (tested through 7.0) and Intel TBB >= 2018 (tested
|
||||
through 2020_U1)
|
||||
* OpenVDB >= 5.0 (tested through 8.1) and Intel TBB >= 2018 (tested
|
||||
through 2021)
|
||||
* Note that OpenVDB 8.0+ requires C++14 or higher.
|
||||
* If you want support for converting to and from OpenCV data structures,
|
||||
or for capturing images from a camera:
|
||||
* OpenCV 2.x, 3.x, or 4.x (tested through 4.3)
|
||||
* OpenCV 2.x, 3.x, or 4.x (tested through 4.5)
|
||||
* If you want support for GIF images:
|
||||
* giflib >= 4.1 (tested through 5.2; 5.0+ is strongly recommended for
|
||||
stability and thread safety)
|
||||
* If you want support for HEIF/HEIC images:
|
||||
* libheif >= 1.3 (tested through 1.6; older versions may also work, we
|
||||
haven't tested)
|
||||
* If you want support for HEIF/HEIC or AVIF images:
|
||||
* libheif >= 1.3 (1.7 required for AVIF support, tested through 1.11)
|
||||
* libheif must be built with an AV1 encoder/decoder for AVIF support.
|
||||
* Avoid libheif 1.10 on Mac, it is very broken. Libheif 1.11 is fine.
|
||||
* If you want support for DDS files:
|
||||
* libsquish >= 1.13 (tested through 1.15)
|
||||
* But... if not found on the system, an embedded version will be used.
|
||||
* If you want support for DICOM medical image files:
|
||||
* DCMTK >= 3.6.1 (tested through 3.6.5)
|
||||
* If you want support for WebP images:
|
||||
* WebP >= 0.6.1 (tested through 1.1.0)
|
||||
* If you want support for OpenColorIO color transformations:
|
||||
* OpenColorIO >= 1.1 (also tested against the current master that will
|
||||
become OCIO 2.0).
|
||||
* OpenColorIO >= 1.1 (tested through 2.1)
|
||||
* If you want support for Ptex:
|
||||
* Ptex >= 2.3.1 (probably works for older; tested through 2.4.0)
|
||||
* We use PugiXML for XML parsing. There is a version embedded in the OIIO
|
||||
tree, but if you want to use an external, system-installed version (as
|
||||
may be required by some software distrbutions with policies against
|
||||
embedding other projects), then just build with `-DUSE_EXTERNAL_PUGIXML=1`.
|
||||
Any PugiXML >= 1.8 should be fine (we have tested through 1.11).
|
||||
|
||||
|
||||
|
||||
@@ -81,7 +92,7 @@ If all you want to do is install the OIIO libraries, headers, and command
|
||||
line tools as quickly as possible (don't need OIIO source or any custom
|
||||
build options), maybe one of these packages managers will do it for you:
|
||||
|
||||
* vckpg (https://github.com/Microsoft/vcpkg)
|
||||
* vcpkg (https://github.com/Microsoft/vcpkg)
|
||||
* https://github.com/Microsoft/vcpkg/tree/master/ports/openimageio
|
||||
* `.\vcpkg install openimageio [tools]`
|
||||
* For a full list of supported build features: `.\vcpkg search openimageio`
|
||||
@@ -215,7 +226,7 @@ Additionally, a few helpful modifiers alter some build-time options:
|
||||
| make USE_PYTHON=0 ... | Don't build the Python binding |
|
||||
| make BUILD_SHARED_LIBS=0 | Build static library instead of shared |
|
||||
| make LINKSTATIC=1 ... | Link with static external libraries when possible |
|
||||
| make SOVERSION=nn ... | Include the specifed major version number in the shared object metadata |
|
||||
| make SOVERSION=nn ... | Include the specified major version number in the shared object metadata |
|
||||
| make NAMESPACE=name | Wrap everything in another namespace |
|
||||
|
||||
The command 'make help' will list all possible options.
|
||||
@@ -243,91 +254,10 @@ or, if you are using CMake directly,
|
||||
Building on Windows
|
||||
-------------------
|
||||
|
||||
**Method 1 - Default**
|
||||
**Method 1 - from source**
|
||||
|
||||
1. Check out the trunk or a branch of your choice. The remainder of
|
||||
these instructions assume that you checked out the trunk to the
|
||||
D:\OIIO\trunk directory.
|
||||
|
||||
2. Download the package with precompiled external libraries from
|
||||
http://www.openimageio.org/external.zip
|
||||
|
||||
Next, unpack it. The directory with downloaded code from the repository
|
||||
and the directory with unpacked libraries should be siblings. For example,
|
||||
|
||||
```
|
||||
D:
|
||||
\OIIO
|
||||
\trunk // this is my tree
|
||||
\src // directory with src files for OIIO
|
||||
\build // directory that is created by cmake
|
||||
\external // this is extracted external package
|
||||
\dist
|
||||
\windows
|
||||
\glew-1.5.1
|
||||
\ilmbase-1.0.1
|
||||
\jpeg-6b
|
||||
\libpng-1.2.3
|
||||
\openexr-1.6.1
|
||||
\tbb-21_20080605oss
|
||||
\zlib-1.2.3
|
||||
\tiff-3.8.2
|
||||
```
|
||||
|
||||
3. Download precompiled Qt4 binaries for Windows from here:
|
||||
http://qt.windows.binaries.googlepages.com/index.html
|
||||
|
||||
Unpack it (it doesn't matter where). After unpacking, add the path to
|
||||
the Qt bin directory to the PATH variable. For example, if you unpacked
|
||||
this package to the D:\qt-win directory, you should add D:\qt-win\bin to
|
||||
your PATH. It's important to add the Qt bin directory to PATH because
|
||||
the FindQt4 module uses it to search for qmake applications.
|
||||
|
||||
4. Also, just to be safe, add QTDIR to the environment variables. It
|
||||
should point to directory where you unpacked Qt.
|
||||
|
||||
5. Download precompiled BOOST 1.53 or newer libraries from
|
||||
http://www.boostpro.com/download
|
||||
|
||||
Install it on your system. Choose two versions: Multithread Debug, DLL
|
||||
and Multithread, DLL for Your Visual Studio version.
|
||||
|
||||
6. Download precompiled BOOST 1.53 or newer libraries from here (unfficial
|
||||
mirror) or from here (unofficial mirror, registration required). Install
|
||||
it on Your system. Choose two versions: Multithread Debug, DLL and
|
||||
Multithread, DLL for Your Visual Studio version.
|
||||
|
||||
7. Install cmake. You can download precompiled binaries from here:
|
||||
http://www.cmake.org/cmake/resources/software.html
|
||||
After installing, run cmake-gui. Set the field that specifies the source
|
||||
code location (for example, to D:\OIIO\trunk\src). Then set the field
|
||||
that specifies where to build binaries to the directory you want to
|
||||
build project for OIIO (for example, D:\OIIO\trunk\build).
|
||||
|
||||
8. Set the THIRD_PARTY_TOOLS_HOME environment variable to the directory
|
||||
where are stored unpacked external libraries (for example,
|
||||
D:\OIIO\external\dist\windows). You can add variables by clicking Add
|
||||
entry button.
|
||||
|
||||
9. Hit the Configure button. Cmake should automatically find externals
|
||||
libraries and prepare the environment for creating the OIIO project. If
|
||||
the configuration process ends without errors go to next step. If not,
|
||||
read the instructions from the end of this tutorial.
|
||||
|
||||
10. Hit the Generate button. Cmake will build Visual Studio a solution in
|
||||
the build directory.
|
||||
|
||||
11. That's all. You can open the OpenImageIO solution and start developing
|
||||
OIIO! Potential problems:
|
||||
|
||||
|
||||
It may happen that cmake won't find zlib, png, tiff or jpeg
|
||||
libraries. If so you have to set CMAKE_PREFIX_PATH to point to the
|
||||
directory where the missing libraries are stored. For example, if cmake
|
||||
can't find ZLIB, add to CMAKE_PREFIX_PATH the
|
||||
D:\OIIO\external\dist\windows\zlib-1.2.3 directory. If it can't find
|
||||
ZLIB and PNG, add
|
||||
D:\OIIO\external\dist\windows\zlib-1.2.3;D:\OIIO\external\dist\windows\libpng-1.2.3.
|
||||
I really need someone to write correct, modern docs about how to build
|
||||
from source on Windows.
|
||||
|
||||
**Method 2 - Using vcpkg**
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ endif
|
||||
|
||||
MY_MAKE_FLAGS ?=
|
||||
MY_NINJA_FLAGS ?=
|
||||
MY_CMAKE_FLAGS += -g3
|
||||
MY_CMAKE_FLAGS ?=
|
||||
BUILDSENTINEL ?= Makefile
|
||||
NINJA ?= ninja
|
||||
CMAKE ?= cmake
|
||||
@@ -95,7 +95,7 @@ MY_CMAKE_FLAGS += -DPYLIB_INCLUDE_SONAME:BOOL=${PYLIB_INCLUDE_SONAME}
|
||||
endif
|
||||
|
||||
ifneq (${USE_EXTERNAL_PUGIXML},)
|
||||
MY_CMAKE_FLAGS += -DUSE_EXTERNAL_PUGIXML:BOOL=${USE_EXTERNAL_PUGIXML} -DPUGIXML_HOME=${PUGIXML_HOME}
|
||||
MY_CMAKE_FLAGS += -DUSE_EXTERNAL_PUGIXML:BOOL=${USE_EXTERNAL_PUGIXML}
|
||||
endif
|
||||
|
||||
ifneq (${OPENEXR_ROOT},)
|
||||
|
||||
@@ -2,8 +2,7 @@ README for OpenImageIO
|
||||
======================
|
||||
|
||||
[](https://github.com/OpenImageIO/oiio/blob/master/LICENSE.md)
|
||||
[](https://travis-ci.org/OpenImageIO/oiio)
|
||||
[](https://ci.appveyor.com/api/projects/status/a0l32ti7gcoergtf/branch/master)
|
||||
[](https://github.com/OpenImageIO/oiio/actions/workflows/ci.yml)
|
||||
[](https://bestpractices.coreinfrastructure.org/projects/2694)
|
||||
|
||||
|
||||
@@ -19,7 +18,7 @@ OpenImageIO consists of:
|
||||
* Simple but powerful ImageInput and ImageOutput APIs that provide
|
||||
an abstraction for reading and writing image files of nearly any
|
||||
format, without the calling application needing to know any of the
|
||||
details of these file formats, and indeed without the calling
|
||||
details of these file formats, and indeed without the calling
|
||||
application needing to be aware of which formats are available.
|
||||
|
||||
* A library that manages subclasses of ImageInput and ImageOutput that
|
||||
@@ -32,8 +31,8 @@ OpenImageIO consists of:
|
||||
including TIFF, JPEG/JFIF, OpenEXR, PNG, HDR/RGBE, ICO, BMP, Targa,
|
||||
JPEG-2000, RMan Zfile, FITS, DDS, Softimage PIC, PNM, DPX, Cineon,
|
||||
IFF, Field3D, OpenVDB, Ptex, Photoshop PSD, Wavefront RLA, SGI, WebP,
|
||||
GIF, DICOM, HEIC/HEIF, many "RAW" digital camera formats, and a variety of
|
||||
movie formats (readable as individual frames). More are being developed
|
||||
GIF, DICOM, HEIF/HEIC/AVIF, many "RAW" digital camera formats, and a variety
|
||||
of movie formats (readable as individual frames). More are being developed
|
||||
all the time.
|
||||
|
||||
* Several command line image tools based on these classes, including
|
||||
@@ -83,7 +82,7 @@ particular licensing terms in your own application.
|
||||
Some code and resources are distributed along with OIIO that have highly
|
||||
compatible, though slightly different, licenses (generally MIT or Apache).
|
||||
See the PDF documentation Acknowledgements section, and the
|
||||
[LICENSE-THIRD-PARTY](LICENSE-THIRD-PARTY.md) file for details.
|
||||
[THIRD-PARTY](THIRD-PARTY.md) file for details.
|
||||
|
||||
|
||||
Building and Installation
|
||||
@@ -113,7 +112,7 @@ Simple "how do I...", "I'm having trouble", or "is this a bug" questions are
|
||||
best asked on the [oiio-dev developer mail
|
||||
list](http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org).
|
||||
That's where the most people will see it and potentially be able to answer
|
||||
your question quickly (moreso than a GH "issue").
|
||||
your question quickly (more so than a GH "issue").
|
||||
|
||||
Bugs, build problems, and discovered vulnerabilities that you are relatively
|
||||
certain is a legit problem in the code, and for which you can give clear
|
||||
@@ -146,4 +145,3 @@ Mail list subscriptions and archives:
|
||||
* Developer mail list: http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
|
||||
|
||||
* Just release announcements: http://lists.openimageio.org/listinfo.cgi/oiio-announce-openimageio.org
|
||||
|
||||
|
||||
@@ -21,12 +21,19 @@ SPDX-License-Identifier: BSD-3-Clause
|
||||
OIIO, but since some elements are derived from that, we still acknowledge
|
||||
the original copyright here.
|
||||
|
||||
* Open Shading Language. Copyright Sony Pictures Imageworks Inc.
|
||||
* Open Shading Language. Copyright contributors to the OSL project.
|
||||
https://github.com/AcademySoftwareFoundation/OpenShadingLanguage
|
||||
|
||||
A few parts here and there, notably parts of fmath.h and many of the CMake
|
||||
files, contain code that was originally developed for Open Shading
|
||||
Language but subsequently moved to OIIO.
|
||||
|
||||
* OpenColorIO (c) Copyright contributors to the OpenColorIO Project.
|
||||
https://github.com/AcademySoftwareFoundation/OpenColorIO
|
||||
|
||||
The sample OpenColorIO configurations in our testsuite are borrowed from
|
||||
this ASWF project, also BSD-3-Clause licensed.
|
||||
|
||||
* DPX reader/writer (c) Copyright 2009 Patrick A. Palmer.
|
||||
https://github.com/patrickpalmer/dpx
|
||||
|
||||
-117
@@ -1,117 +0,0 @@
|
||||
version: '{branch}-{build}'
|
||||
image: Previous Visual Studio 2015
|
||||
clone_folder: C:\projects\oiio
|
||||
test: off
|
||||
configuration:
|
||||
- Release
|
||||
# - Debug
|
||||
platform:
|
||||
- x64
|
||||
# branches:
|
||||
# only:
|
||||
# - master
|
||||
environment:
|
||||
matrix:
|
||||
- CMAKE_PLATFORM: "Visual Studio 14 2015 Win64"
|
||||
PYTHON_DIR: "C:\\Python27-x64"
|
||||
tbs_arch: "x64"
|
||||
tbs_tools: "msvc14"
|
||||
tbs_static_runtime: 0
|
||||
MY_CMAKE_FLAGS: -DUSE_PYTHON=0
|
||||
USE_PYTHON: 0
|
||||
|
||||
|
||||
cache:
|
||||
- C:\tools\vcpkg\installed
|
||||
#- C:\tools\vcpkg -> appveyor.yml
|
||||
#- C:\projects\ext -> appveyor.yml
|
||||
# The -> means that the cache dir is discarded if appveyor.yml has changed
|
||||
|
||||
install:
|
||||
- ps: $OIIO_INSTALL_BEGIN=Get-Date
|
||||
- cinstall: python
|
||||
- git submodule update --init --recursive
|
||||
- set CMAKE_PREFIX_PATH=C:/Sys;%APPVEYOR_BUILD_FOLDER%/ext;c:/tools/vcpkg/installed/%platform%-windows
|
||||
- set CMAKE_LIBRARY_PATH=C:/Sys/lib;%APPVEYOR_BUILD_FOLDER%/ext/lib
|
||||
- set CMAKE_INCLUDE_PATH=C:/Sys/include;%APPVEYOR_BUILD_FOLDER%/ext/include
|
||||
- mkdir c:\sys
|
||||
- mkdir ext
|
||||
- cd ext
|
||||
- mkdir lib
|
||||
- mkdir include
|
||||
|
||||
# Boost
|
||||
# 1.63 is already installed on appveyor, just use it
|
||||
- set BOOST_ROOT=C:\Libraries\boost_1_66_0
|
||||
- set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;%BOOST_ROOT%
|
||||
|
||||
# Install a bunch of vcpkg dependencies. We rely on the run-to-run caching
|
||||
# of these, but if the cache is flushed, it takes too long to rebuild them
|
||||
# all, so we stage it.
|
||||
- vcpkg list
|
||||
- vcpkg update
|
||||
# - vcpkg help triplet
|
||||
|
||||
# Dependencies that don't take too long, just build them unconditionally.
|
||||
- vcpkg install zlib:"%platform%"-windows
|
||||
- vcpkg install tiff:"%platform%"-windows
|
||||
- vcpkg install libpng:"%platform%"-windows
|
||||
- vcpkg install openexr:"%platform%"-windows
|
||||
- vcpkg install freetype:"%platform%"-windows
|
||||
- vcpkg install giflib:"%platform%"-windows
|
||||
- vcpkg install libwebp:"%platform%"-windows
|
||||
- vcpkg install openjpeg:"%platform%"-windows
|
||||
- vcpkg install ptex:"%platform%"-windows
|
||||
- vcpkg install libraw:x64-windows
|
||||
- vcpkg install pybind11:x64-windows
|
||||
|
||||
# Qt
|
||||
- set CMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH%;C:\Qt\5.12
|
||||
|
||||
|
||||
# Expensive optional deps only build if there's plenty of time left.
|
||||
# If we run out the clock, the cache won't be saved.
|
||||
# - ps: |
|
||||
# $OIIO_BUILD_NOW=Get-Date
|
||||
# if (($OIIO_BUILD_NOW-$OIIO_INSTALL_BEGIN).TotalMinutes -gt 15) {
|
||||
# Add-AppveyorMessage -Message "OIIO low on time, skippping dependency qt5-base"
|
||||
# } else {
|
||||
# vcpkg install qt5-base:x64-windows
|
||||
# }
|
||||
|
||||
# Wish list:
|
||||
# OpenCV
|
||||
# ffmpeg
|
||||
# OpenColorIO
|
||||
|
||||
- cd ..
|
||||
- dir C:\Sys
|
||||
# - dir C:\Sys\include
|
||||
# - dir C:\Sys\lib
|
||||
- vcpkg list
|
||||
- dir c:\tools\vcpkg
|
||||
- dir c:\tools\vcpkg\installed\x64-windows
|
||||
- dir C:\projects\oiio\ext
|
||||
- dir C:\projects\oiio\ext\include
|
||||
- dir C:\projects\oiio\ext\lib
|
||||
|
||||
|
||||
build_script:
|
||||
- echo Running cmake...
|
||||
- cd c:\projects\oiio
|
||||
- mkdir build
|
||||
- mkdir build\windows64
|
||||
- cd build\windows64
|
||||
- cmake -G "%CMAKE_PLATFORM%" -DCMAKE_TOOLCHAIN_FILE=c:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake \
|
||||
-DCMAKE_INSTALL_PREFIX=C:\projects\oiio\dist\windows64 \
|
||||
-DUSE_PYTHON=0 -DUSE_PTEX=0 \
|
||||
-DPYTHON_INCLUDE_DIR:PATH=%PYTHON_DIR%/include -DPYTHON_LIBRARY:FILEPATH=%PYTHON_DIR%/libs/python27.lib -DPYTHON_EXECUTABLE:FILEPATH=%PYTHON_DIR%/python.exe -DCMAKE_LIBRARY_PATH=%CMAKE_LIBRARY_PATH% -DCMAKE_INCLUDE_PATH=%CMAKE_INCLUDE_PATH% -DCMAKE_PREFIX_PATH=%CMAKE_PREFIX_PATH% -DOPENEXR_ROOT_DIR=C:\projects\oiio\ext -DVERBOSE=1 -DBUILD_MISSING_DEPS=1 ../..
|
||||
- dir c:\projects\oiio
|
||||
- dir c:\projects\oiio\build
|
||||
- dir c:\projects\oiio\build\windows64
|
||||
- cmake --build . --config %CONFIGURATION% --target install
|
||||
- dir c:\projects\oiio\dist\windows64
|
||||
|
||||
|
||||
matrix:
|
||||
fast_finish: true
|
||||
+12
-1
@@ -81,7 +81,6 @@ else
|
||||
$(error Unknown SP_OS=${SP_OS} platform=${platform})
|
||||
endif # endif ${SP_OS}
|
||||
|
||||
PYTHON_VERSION ?= 2.7
|
||||
MY_CMAKE_FLAGS += -DSP_OS=${SP_OS} -DSP_PLATFORM=${SP_PLATFORM}
|
||||
MY_CMAKE_FLAGS += -DSP_PROC=${SP_PROC} -DSP_REZ_OS=${SP_REZ_OS}
|
||||
MY_CMAKE_FLAGS += -DSPI_COMPILER_PLATFORM=${SPI_COMPILER_PLATFORM}
|
||||
@@ -94,6 +93,7 @@ SPCOMP2_ROOT ?= /shots/spi/home/lib/SpComp2
|
||||
|
||||
## Rhel7 (current)
|
||||
ifeq (${SP_OS}, rhel7)
|
||||
PYTHON_VERSION ?= 2.7
|
||||
USE_SIMD ?= sse4.1,aes
|
||||
CMAKE ?= cmake
|
||||
USE_NINJA ?= 1
|
||||
@@ -130,6 +130,9 @@ ifeq (${SP_OS}, rhel7)
|
||||
else ifeq (${COMPILER},clang10)
|
||||
LLVM_DIRECTORY := /shots/spi/home/software/packages/llvm/10.0.0-1/${SPI_COMPILER_PLATFORM}
|
||||
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang -DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
||||
else ifeq (${COMPILER},clang11)
|
||||
LLVM_DIRECTORY := /shots/spi/home/software/packages/llvm/11.0.0/${SPI_COMPILER_PLATFORM}
|
||||
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=${LLVM_DIRECTORY}/bin/clang -DCMAKE_CXX_COMPILER=${LLVM_DIRECTORY}/bin/clang++
|
||||
else ifeq (${COMPILER},clang)
|
||||
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
|
||||
else ifeq (${COMPILER}, gcc6)
|
||||
@@ -318,6 +321,14 @@ else ifeq (${platform}, macosx)
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8
|
||||
USE_LIBCPLUSPLUS := 0
|
||||
else ifeq (${COMPILER}, gcc9)
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=gcc-9 -DCMAKE_CXX_COMPILER=g++-9
|
||||
USE_LIBCPLUSPLUS := 0
|
||||
else ifeq (${COMPILER}, gcc10)
|
||||
MY_CMAKE_FLAGS += \
|
||||
-DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10
|
||||
USE_LIBCPLUSPLUS := 0
|
||||
else ifeq (${COMPILER},clang7)
|
||||
MY_CMAKE_FLAGS += -DCMAKE_C_COMPILER=/usr/local/opt/llvm@7/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=/usr/local/llvm@7/bin/clang++
|
||||
|
||||
+31
-16
@@ -3,9 +3,13 @@
|
||||
// https://github.com/OpenImageIO/oiio/blob/master/LICENSE.md
|
||||
|
||||
|
||||
#include "bmp_pvt.h"
|
||||
#include <cstdio>
|
||||
|
||||
#include <OpenImageIO/fmath.h>
|
||||
#include <OpenImageIO/imageio.h>
|
||||
|
||||
#include "bmp_pvt.h"
|
||||
|
||||
|
||||
OIIO_PLUGIN_NAMESPACE_BEGIN
|
||||
|
||||
@@ -91,7 +95,8 @@ DibInformationHeader::read_header(FILE* fd)
|
||||
if (!fread(fd, &size))
|
||||
return false;
|
||||
|
||||
if (size == WINDOWS_V3 || size == WINDOWS_V4 || size == WINDOWS_V5) {
|
||||
if (size == WINDOWS_V3 || size == WINDOWS_V4 || size == WINDOWS_V5
|
||||
|| size == UNDOCHEADER52 || size == UNDOCHEADER56) {
|
||||
if (!fread(fd, &width) || !fread(fd, &height) || !fread(fd, &cplanes)
|
||||
|| !fread(fd, &bpp) || !fread(fd, &compression)
|
||||
|| !fread(fd, &isize) || !fread(fd, &hres) || !fread(fd, &vres)
|
||||
@@ -99,16 +104,24 @@ DibInformationHeader::read_header(FILE* fd)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (size == WINDOWS_V4 || size == WINDOWS_V5 || size == UNDOCHEADER52
|
||||
|| size == UNDOCHEADER56) {
|
||||
if (!fread(fd, &red_mask) || !fread(fd, &green_mask)
|
||||
|| !fread(fd, &blue_mask)) {
|
||||
return false;
|
||||
}
|
||||
if (size != UNDOCHEADER52 && !fread(fd, &alpha_mask)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (size == WINDOWS_V4 || size == WINDOWS_V5) {
|
||||
if (!fread(fd, &red_mask) || !fread(fd, &blue_mask)
|
||||
|| !fread(fd, &green_mask) || !fread(fd, &alpha_mask)
|
||||
|| !fread(fd, &cs_type) || !fread(fd, &red_x)
|
||||
|| !fread(fd, &red_y) || !fread(fd, &red_z)
|
||||
|| !fread(fd, &green_x) || !fread(fd, &green_y)
|
||||
|| !fread(fd, &green_z) || !fread(fd, &blue_x)
|
||||
|| !fread(fd, &blue_y) || !fread(fd, &blue_z)
|
||||
|| !fread(fd, &gamma_x) || !fread(fd, &gamma_y)
|
||||
|| !fread(fd, &gamma_z)) {
|
||||
if (!fread(fd, &cs_type) || !fread(fd, &red_x) || !fread(fd, &red_y)
|
||||
|| !fread(fd, &red_z) || !fread(fd, &green_x)
|
||||
|| !fread(fd, &green_y) || !fread(fd, &green_z)
|
||||
|| !fread(fd, &blue_x) || !fread(fd, &blue_y)
|
||||
|| !fread(fd, &blue_z) || !fread(fd, &gamma_x)
|
||||
|| !fread(fd, &gamma_y) || !fread(fd, &gamma_z)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -120,14 +133,16 @@ DibInformationHeader::read_header(FILE* fd)
|
||||
}
|
||||
}
|
||||
} else if (size == OS2_V1) {
|
||||
// some of theses fields are smaller then in WINDOWS_Vx headers,
|
||||
// so we use hardcoded counts
|
||||
width = 0;
|
||||
height = 0;
|
||||
if (!fread(fd, &width, 2) || !fread(fd, &height, 2)
|
||||
// some of theses fields are smaller than in WINDOWS_Vx headers,
|
||||
// so we read into 16 bit ints and copy.
|
||||
uint16_t width16 = 0;
|
||||
uint16_t height16 = 0;
|
||||
if (!fread(fd, &width16) || !fread(fd, &height16)
|
||||
|| !fread(fd, &cplanes) || !fread(fd, &bpp)) {
|
||||
return false;
|
||||
}
|
||||
width = width16;
|
||||
height = height16;
|
||||
}
|
||||
if (bigendian())
|
||||
swap_endian();
|
||||
|
||||
+32
-96
@@ -4,24 +4,26 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
#include <OpenImageIO/filesystem.h>
|
||||
#include <OpenImageIO/imageio.h>
|
||||
|
||||
OIIO_PLUGIN_NAMESPACE_BEGIN
|
||||
|
||||
|
||||
// Docs reminders:
|
||||
// https://en.wikipedia.org/wiki/BMP_file_format
|
||||
// https://web.archive.org/web/20150127132443/https://forums.adobe.com/message/3272950
|
||||
|
||||
|
||||
namespace bmp_pvt {
|
||||
|
||||
// size of the BMP file header (the first header that occur in BMP file)
|
||||
const int BMP_HEADER_SIZE = 14;
|
||||
|
||||
// sizes of various DIB haders
|
||||
const int OS2_V1 = 12;
|
||||
const int WINDOWS_V3 = 40;
|
||||
const int WINDOWS_V4 = 108;
|
||||
const int WINDOWS_V5 = 124;
|
||||
const int OS2_V1 = 12;
|
||||
const int WINDOWS_V3 = 40;
|
||||
const int UNDOCHEADER52 = 52; // 0x34
|
||||
const int UNDOCHEADER56 = 56; // 0x38
|
||||
const int WINDOWS_V4 = 108;
|
||||
const int WINDOWS_V5 = 124;
|
||||
|
||||
// bmp magic numbers
|
||||
const int16_t MAGIC_BM = 0x4D42;
|
||||
@@ -30,7 +32,11 @@ const int16_t MAGIC_CI = 0x4943;
|
||||
const int16_t MAGIC_CP = 0x5043;
|
||||
const int16_t MAGIC_PT = 0x5450;
|
||||
|
||||
//const int32_t RLE4_COMPRESSION = 2;
|
||||
const int32_t NO_COMPRESSION = 0; // BI_RGB
|
||||
const int32_t RLE8_COMPRESSION = 1; // BI_RLE8
|
||||
const int32_t RLE4_COMPRESSION = 2; // BI_RLE4
|
||||
|
||||
|
||||
|
||||
// store informations about BMP file
|
||||
class BmpFileHeader {
|
||||
@@ -48,7 +54,7 @@ public:
|
||||
int32_t fsize; // size of the BMP file
|
||||
int16_t res1; // reserved
|
||||
int16_t res2; // reserved
|
||||
int32_t offset; //offset of image data
|
||||
int32_t offset; // offset of image data (pixels)
|
||||
private:
|
||||
void swap_endian(void);
|
||||
};
|
||||
@@ -62,19 +68,21 @@ public:
|
||||
// writes informations about bitmap
|
||||
bool write_header(FILE* fd);
|
||||
|
||||
int32_t size; // size of the header
|
||||
int32_t width; // bitmap width in pixels
|
||||
int32_t height; // bitmap height in pixels
|
||||
int16_t cplanes; // number of color planes - always 1
|
||||
int16_t bpp; // number of bits per pixel, image color depth
|
||||
int32_t compression; // compression used in file
|
||||
int32_t isize; // size of the raw image data
|
||||
int32_t hres; // horizontal resolution in pixels per meter
|
||||
int32_t vres; // vertical resolutions in pixels per meter
|
||||
int32_t cpalete; // number of entries in the color palete
|
||||
int32_t important; // number of importatn color used,
|
||||
// 0 - all colors are important,
|
||||
// in most cases ignored
|
||||
int32_t size; // size of the header
|
||||
int32_t width; // bitmap width in pixels
|
||||
int32_t height; // bitmap height in pixels
|
||||
int16_t cplanes; // number of color planes - always 1
|
||||
int16_t bpp; // number of bits per pixel, image color depth
|
||||
|
||||
// Added after Version 1 of the format
|
||||
int32_t compression = 0; // compression used in file
|
||||
int32_t isize = 0; // size of the raw image data
|
||||
int32_t hres = 0; // horizontal resolution in pixels per meter
|
||||
int32_t vres = 0; // vertical resolutions in pixels per meter
|
||||
int32_t cpalete = 0; // number of entries in the color palette
|
||||
int32_t important = 0; // number of important color used,
|
||||
// 0 - all colors are important,
|
||||
// in most cases ignored
|
||||
|
||||
// added in Version 4 of the format
|
||||
int32_t red_mask;
|
||||
@@ -116,76 +124,4 @@ struct color_table {
|
||||
|
||||
|
||||
|
||||
class BmpInput final : public ImageInput {
|
||||
public:
|
||||
BmpInput() { init(); }
|
||||
virtual ~BmpInput() { close(); }
|
||||
virtual const char* format_name(void) const override { return "bmp"; }
|
||||
virtual bool valid_file(const std::string& filename) const override;
|
||||
virtual bool open(const std::string& name, ImageSpec& spec) override;
|
||||
virtual bool close(void) override;
|
||||
virtual bool read_native_scanline(int subimage, int miplevel, int y, int z,
|
||||
void* data) override;
|
||||
|
||||
private:
|
||||
int64_t m_padded_scanline_size;
|
||||
int m_pad_size;
|
||||
FILE* m_fd;
|
||||
bmp_pvt::BmpFileHeader m_bmp_header;
|
||||
bmp_pvt::DibInformationHeader m_dib_header;
|
||||
std::string m_filename;
|
||||
std::vector<bmp_pvt::color_table> m_colortable;
|
||||
int64_t m_image_start;
|
||||
void init(void)
|
||||
{
|
||||
m_padded_scanline_size = 0;
|
||||
m_pad_size = 0;
|
||||
m_fd = NULL;
|
||||
m_filename.clear();
|
||||
m_colortable.clear();
|
||||
}
|
||||
|
||||
bool read_color_table(void);
|
||||
};
|
||||
|
||||
|
||||
|
||||
class BmpOutput final : public ImageOutput {
|
||||
public:
|
||||
BmpOutput() { init(); }
|
||||
virtual ~BmpOutput() { close(); }
|
||||
virtual const char* format_name(void) const override { return "bmp"; }
|
||||
virtual int supports(string_view feature) const override;
|
||||
virtual bool open(const std::string& name, const ImageSpec& spec,
|
||||
OpenMode mode) override;
|
||||
virtual bool close(void) override;
|
||||
virtual bool write_scanline(int y, int z, TypeDesc format, const void* data,
|
||||
stride_t xstride) override;
|
||||
virtual bool write_tile(int x, int y, int z, TypeDesc format,
|
||||
const void* data, stride_t xstride,
|
||||
stride_t ystride, stride_t zstride) override;
|
||||
|
||||
private:
|
||||
int64_t m_padded_scanline_size;
|
||||
FILE* m_fd;
|
||||
std::string m_filename;
|
||||
bmp_pvt::BmpFileHeader m_bmp_header;
|
||||
bmp_pvt::DibInformationHeader m_dib_header;
|
||||
int64_t m_image_start;
|
||||
unsigned int m_dither;
|
||||
std::vector<unsigned char> m_tilebuffer;
|
||||
|
||||
void init(void)
|
||||
{
|
||||
m_padded_scanline_size = 0;
|
||||
m_fd = NULL;
|
||||
m_filename.clear();
|
||||
}
|
||||
|
||||
void create_and_write_file_header(void);
|
||||
|
||||
void create_and_write_bitmap_header(void);
|
||||
};
|
||||
|
||||
|
||||
OIIO_PLUGIN_NAMESPACE_END
|
||||
|
||||
+271
-41
@@ -1,12 +1,69 @@
|
||||
// Copyright 2008-present Contributors to the OpenImageIO project.
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
// https://github.com/OpenImageIO/oiio/blob/master/LICENSE.md
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
#include <OpenImageIO/filesystem.h>
|
||||
#include <OpenImageIO/imageio.h>
|
||||
|
||||
#include "bmp_pvt.h"
|
||||
|
||||
OIIO_PLUGIN_NAMESPACE_BEGIN
|
||||
|
||||
using namespace bmp_pvt;
|
||||
|
||||
|
||||
class BmpInput final : public ImageInput {
|
||||
public:
|
||||
BmpInput() { init(); }
|
||||
virtual ~BmpInput() { close(); }
|
||||
virtual const char* format_name(void) const override { return "bmp"; }
|
||||
virtual bool valid_file(const std::string& filename) const override;
|
||||
virtual bool open(const std::string& name, ImageSpec& newspec) override;
|
||||
virtual bool open(const std::string& name, ImageSpec& newspec,
|
||||
const ImageSpec& config) override;
|
||||
virtual bool close(void) override;
|
||||
virtual bool read_native_scanline(int subimage, int miplevel, int y, int z,
|
||||
void* data) override;
|
||||
|
||||
private:
|
||||
int64_t m_padded_scanline_size;
|
||||
int m_pad_size;
|
||||
FILE* m_fd;
|
||||
bmp_pvt::BmpFileHeader m_bmp_header;
|
||||
bmp_pvt::DibInformationHeader m_dib_header;
|
||||
std::string m_filename;
|
||||
std::vector<bmp_pvt::color_table> m_colortable;
|
||||
std::vector<unsigned char> fscanline; // temp space: read from file
|
||||
std::vector<unsigned char> m_uncompressed; // uncompressed palette image
|
||||
bool m_allgray;
|
||||
|
||||
void init(void)
|
||||
{
|
||||
m_padded_scanline_size = 0;
|
||||
m_pad_size = 0;
|
||||
m_fd = NULL;
|
||||
m_filename.clear();
|
||||
m_colortable.clear();
|
||||
m_allgray = false;
|
||||
fscanline.shrink_to_fit();
|
||||
m_uncompressed.shrink_to_fit();
|
||||
}
|
||||
|
||||
bool read_color_table();
|
||||
bool color_table_is_all_gray();
|
||||
bool read_rle_image();
|
||||
|
||||
// Safe, clamped access to color table
|
||||
const bmp_pvt::color_table& colortable(int i)
|
||||
{
|
||||
return m_colortable[clamp(i, 0, int(m_colortable.size() - 1))];
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
// Obligatory material to make this a recognizeable imageio plugin
|
||||
OIIO_PLUGIN_EXPORTS_BEGIN
|
||||
|
||||
@@ -24,7 +81,7 @@ bmp_input_imageio_create()
|
||||
return new BmpInput;
|
||||
}
|
||||
|
||||
OIIO_EXPORT const char* bmp_input_extensions[] = { "bmp", nullptr };
|
||||
OIIO_EXPORT const char* bmp_input_extensions[] = { "bmp", "dib", nullptr };
|
||||
|
||||
OIIO_PLUGIN_EXPORTS_END
|
||||
|
||||
@@ -44,11 +101,28 @@ BmpInput::valid_file(const std::string& filename) const
|
||||
|
||||
|
||||
bool
|
||||
BmpInput::open(const std::string& name, ImageSpec& spec)
|
||||
BmpInput::open(const std::string& name, ImageSpec& newspec)
|
||||
{
|
||||
ImageSpec emptyconfig;
|
||||
return open(name, newspec, emptyconfig);
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool
|
||||
BmpInput::open(const std::string& name, ImageSpec& newspec,
|
||||
const ImageSpec& config)
|
||||
{
|
||||
// saving 'name' for later use
|
||||
m_filename = name;
|
||||
|
||||
// BMP cannot be 1-channel, but config hint "bmp:monochrome_detect" is a
|
||||
// hint to try to detect when all palette entries are gray and pretend
|
||||
// that it's a 1-channel image to allow the calling app to save memory
|
||||
// and time. It does this by default, but setting the hint to 0 turns
|
||||
// this behavior off.
|
||||
bool monodetect = config["bmp:monochrome_detect"].get<int>(1);
|
||||
|
||||
m_fd = Filesystem::fopen(m_filename, "rb");
|
||||
if (!m_fd) {
|
||||
errorf("Could not open file \"%s\"", name);
|
||||
@@ -67,21 +141,41 @@ BmpInput::open(const std::string& name, ImageSpec& spec)
|
||||
close();
|
||||
return false;
|
||||
}
|
||||
// Strutil::print(
|
||||
// "Header: magic={:x} {}{} fsize={} res1={} res2={} offset={}\n",
|
||||
// m_bmp_header.magic, char(m_bmp_header.magic & 0xff),
|
||||
// char(m_bmp_header.magic >> 8), m_bmp_header.fsize, m_bmp_header.res1,
|
||||
// m_bmp_header.res2, m_bmp_header.offset);
|
||||
if (!m_dib_header.read_header(m_fd)) {
|
||||
errorf("\"%s\": wrong bitmap header size", m_filename);
|
||||
close();
|
||||
return false;
|
||||
}
|
||||
// Strutil::print(
|
||||
// "Header: size={}(0x{:02x}) width={} height={} cplanes={} bpp={}\n",
|
||||
// m_dib_header.size, m_dib_header.size, m_dib_header.width,
|
||||
// m_dib_header.height, m_dib_header.cplanes, m_dib_header.bpp);
|
||||
|
||||
const int nchannels = (m_dib_header.bpp == 32) ? 4 : 3;
|
||||
const int height = (m_dib_header.height >= 0) ? m_dib_header.height
|
||||
: -m_dib_header.height;
|
||||
: -m_dib_header.height;
|
||||
m_spec = ImageSpec(m_dib_header.width, height, nchannels, TypeDesc::UINT8);
|
||||
m_spec.attribute("XResolution", (int)m_dib_header.hres);
|
||||
m_spec.attribute("YResolution", (int)m_dib_header.vres);
|
||||
m_spec.attribute("ResolutionUnit", "m");
|
||||
if (m_dib_header.hres > 0 && m_dib_header.vres > 0) {
|
||||
m_spec.attribute("XResolution", (int)m_dib_header.hres);
|
||||
m_spec.attribute("YResolution", (int)m_dib_header.vres);
|
||||
m_spec.attribute("ResolutionUnit", "m");
|
||||
}
|
||||
if (m_spec.width < 1 || m_spec.height < 1 || m_spec.nchannels < 1
|
||||
|| m_spec.image_bytes() < 1
|
||||
|| m_spec.image_pixels() > std::numeric_limits<uint32_t>::max()) {
|
||||
errorfmt(
|
||||
"Invalid image size {} x {} ({} chans, {}), is likely corrupted",
|
||||
m_spec.width, m_spec.height, m_spec.nchannels, m_spec.format);
|
||||
close();
|
||||
return false;
|
||||
}
|
||||
|
||||
// comupting size of one scanline - this is the size of one scanline that
|
||||
// computing size of one scanline - this is the size of one scanline that
|
||||
// is stored in the file, not in the memory
|
||||
int swidth = 0;
|
||||
switch (m_dib_header.bpp) {
|
||||
@@ -97,6 +191,11 @@ BmpInput::open(const std::string& name, ImageSpec& spec)
|
||||
m_padded_scanline_size = (m_spec.width + 3) & ~3;
|
||||
if (!read_color_table())
|
||||
return false;
|
||||
m_allgray = monodetect && color_table_is_all_gray();
|
||||
if (m_allgray) {
|
||||
m_spec.nchannels = 1; // make it look like a 1-channel image
|
||||
m_spec.default_channel_names();
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
swidth = (m_spec.width + 1) / 2;
|
||||
@@ -110,18 +209,104 @@ BmpInput::open(const std::string& name, ImageSpec& spec)
|
||||
if (!read_color_table())
|
||||
return false;
|
||||
break;
|
||||
default:
|
||||
errorfmt("Unsupported BMP bit depth: {}", m_dib_header.bpp);
|
||||
return false;
|
||||
}
|
||||
if (m_dib_header.bpp <= 16)
|
||||
m_spec.attribute("bmp:bitsperpixel", m_dib_header.bpp);
|
||||
switch (m_dib_header.size) {
|
||||
case OS2_V1: m_spec.attribute("bmp:version", 1); break;
|
||||
case WINDOWS_V3: m_spec.attribute("bmp:version", 3); break;
|
||||
case WINDOWS_V4: m_spec.attribute("bmp:version", 4); break;
|
||||
case WINDOWS_V5: m_spec.attribute("bmp:version", 5); break;
|
||||
}
|
||||
|
||||
// file pointer is set to the beginning of image data
|
||||
// we save this position - it will be helpfull in read_native_scanline
|
||||
m_image_start = Filesystem::ftell(m_fd);
|
||||
// Bite the bullet and uncompress now, for simplicity
|
||||
if (m_dib_header.compression == RLE4_COMPRESSION
|
||||
|| m_dib_header.compression == RLE8_COMPRESSION) {
|
||||
if (!read_rle_image()) {
|
||||
errorfmt("BMP error reading rle-compressed image");
|
||||
close();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
spec = m_spec;
|
||||
newspec = m_spec;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool
|
||||
BmpInput::read_rle_image()
|
||||
{
|
||||
int rletype = m_dib_header.compression == RLE4_COMPRESSION ? 4 : 8;
|
||||
m_spec.attribute("bmp:compression", rletype == 4 ? "rle4" : "rle8");
|
||||
m_uncompressed.clear();
|
||||
m_uncompressed.resize(m_spec.height * m_spec.width);
|
||||
// Note: the clear+resize zeroes out the buffer
|
||||
bool err = false;
|
||||
int y = 0, x = 0;
|
||||
while (!err && !feof(m_fd)) {
|
||||
unsigned char rle_pair[2];
|
||||
if (fread(rle_pair, 1, 2, m_fd) != 2) {
|
||||
err = true;
|
||||
break;
|
||||
}
|
||||
int npixels = rle_pair[0];
|
||||
int value = rle_pair[1];
|
||||
if (npixels == 0 && value == 0) {
|
||||
// [0,0] is end of line marker
|
||||
x = 0;
|
||||
++y;
|
||||
} else if (npixels == 0 && value == 1) {
|
||||
// [0,1] is end of bitmap marker
|
||||
break;
|
||||
} else if (npixels == 0 && value == 2) {
|
||||
// [0,2] is a "delta" -- two more bytes reposition the
|
||||
// current pixel position that we're reading.
|
||||
unsigned char offset[2];
|
||||
err |= (fread(offset, 1, 2, m_fd) != 2);
|
||||
x += offset[0];
|
||||
y += offset[1];
|
||||
} else if (npixels == 0) {
|
||||
// [0,n>2] is an "absolute" run of pixel data.
|
||||
// n is the number of pixel indices that follow, but note
|
||||
// that it pads to word size.
|
||||
int npixels = value;
|
||||
int nbytes = (rletype == 4)
|
||||
? round_to_multiple((npixels + 1) / 2, 2)
|
||||
: round_to_multiple(npixels, 2);
|
||||
unsigned char absolute[256];
|
||||
err |= (fread(absolute, 1, nbytes, m_fd) != size_t(nbytes));
|
||||
for (int i = 0; i < npixels; ++i, ++x) {
|
||||
if (rletype == 4)
|
||||
value = (i & 1) ? (absolute[i / 2] & 0x0f)
|
||||
: (absolute[i / 2] >> 4);
|
||||
else
|
||||
value = absolute[i];
|
||||
if (x < m_spec.width)
|
||||
m_uncompressed[y * m_spec.width + x] = value;
|
||||
}
|
||||
} else {
|
||||
// [n>0,p] is a run of n pixels.
|
||||
for (int i = 0; i < npixels; ++i, ++x) {
|
||||
int v;
|
||||
if (rletype == 4)
|
||||
v = (i & 1) ? (value & 0x0f) : (value >> 4);
|
||||
else
|
||||
v = value;
|
||||
if (x < m_spec.width)
|
||||
m_uncompressed[y * m_spec.width + x] = v;
|
||||
}
|
||||
}
|
||||
}
|
||||
return !err;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool
|
||||
BmpInput::read_native_scanline(int subimage, int miplevel, int y, int /*z*/,
|
||||
void* data)
|
||||
@@ -133,15 +318,28 @@ BmpInput::read_native_scanline(int subimage, int miplevel, int y, int /*z*/,
|
||||
if (y < 0 || y > m_spec.height)
|
||||
return false;
|
||||
|
||||
size_t scanline_bytes = m_spec.scanline_bytes();
|
||||
uint8_t* mscanline = (uint8_t*)data;
|
||||
if (m_dib_header.compression == RLE4_COMPRESSION
|
||||
|| m_dib_header.compression == RLE8_COMPRESSION) {
|
||||
for (int x = 0; x < m_spec.width; ++x) {
|
||||
int p = m_uncompressed[(m_spec.height - 1 - y) * m_spec.width + x];
|
||||
auto& c = colortable(p);
|
||||
mscanline[3 * x] = c.r;
|
||||
mscanline[3 * x + 1] = c.g;
|
||||
mscanline[3 * x + 2] = c.b;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// if the height is positive scanlines are stored bottom-up
|
||||
if (m_dib_header.width >= 0)
|
||||
if (m_dib_header.height >= 0)
|
||||
y = m_spec.height - y - 1;
|
||||
const int64_t scanline_off = y * m_padded_scanline_size;
|
||||
|
||||
std::unique_ptr<unsigned char[]> fscanline(
|
||||
new unsigned char[m_padded_scanline_size]);
|
||||
Filesystem::fseek(m_fd, m_image_start + scanline_off, SEEK_SET);
|
||||
size_t n = fread(fscanline.get(), 1, m_padded_scanline_size, m_fd);
|
||||
fscanline.resize(m_padded_scanline_size);
|
||||
Filesystem::fseek(m_fd, m_bmp_header.offset + scanline_off, SEEK_SET);
|
||||
size_t n = fread(fscanline.data(), 1, m_padded_scanline_size, m_fd);
|
||||
if (n != (size_t)m_padded_scanline_size) {
|
||||
if (feof(m_fd))
|
||||
errorf("Hit end of file unexpectedly");
|
||||
@@ -157,13 +355,10 @@ BmpInput::read_native_scanline(int subimage, int miplevel, int y, int /*z*/,
|
||||
for (unsigned int i = 0; i < m_spec.scanline_bytes();
|
||||
i += m_spec.nchannels)
|
||||
std::swap(fscanline[i], fscanline[i + 2]);
|
||||
memcpy(data, fscanline.get(), m_spec.scanline_bytes());
|
||||
memcpy(data, fscanline.data(), m_spec.scanline_bytes());
|
||||
return true;
|
||||
}
|
||||
|
||||
size_t scanline_bytes = m_spec.scanline_bytes();
|
||||
std::unique_ptr<unsigned char[]> mscanline(
|
||||
new unsigned char[scanline_bytes]);
|
||||
if (m_dib_header.bpp == 16) {
|
||||
const uint16_t RED = 0x7C00;
|
||||
const uint16_t GREEN = 0x03E0;
|
||||
@@ -176,22 +371,39 @@ BmpInput::read_native_scanline(int subimage, int miplevel, int y, int /*z*/,
|
||||
}
|
||||
}
|
||||
if (m_dib_header.bpp == 8) {
|
||||
for (unsigned int i = 0, j = 0; j < scanline_bytes; ++i, j += 3) {
|
||||
mscanline[j] = m_colortable[fscanline[i]].r;
|
||||
mscanline[j + 1] = m_colortable[fscanline[i]].g;
|
||||
mscanline[j + 2] = m_colortable[fscanline[i]].b;
|
||||
if (m_allgray) {
|
||||
// Keep it as 1-channel image because all colors are gray
|
||||
for (unsigned int i = 0; i < scanline_bytes; ++i) {
|
||||
mscanline[i] = colortable(fscanline[i]).r;
|
||||
}
|
||||
} else {
|
||||
// Expand palette image into 3-channel RGB (existing code)
|
||||
for (unsigned int i = 0, j = 0; j < scanline_bytes; ++i, j += 3) {
|
||||
auto& c = colortable(fscanline[i]);
|
||||
mscanline[j] = c.r;
|
||||
mscanline[j + 1] = c.g;
|
||||
mscanline[j + 2] = c.b;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (m_dib_header.bpp == 4) {
|
||||
for (unsigned int i = 0, j = 0; j + 6 < scanline_bytes; ++i, j += 6) {
|
||||
uint8_t mask = 0xF0;
|
||||
mscanline[j] = m_colortable[(fscanline[i] & mask) >> 4].r;
|
||||
mscanline[j + 1] = m_colortable[(fscanline[i] & mask) >> 4].g;
|
||||
mscanline[j + 2] = m_colortable[(fscanline[i] & mask) >> 4].b;
|
||||
mask = 0x0F;
|
||||
mscanline[j + 3] = m_colortable[fscanline[i] & mask].r;
|
||||
mscanline[j + 4] = m_colortable[fscanline[i] & mask].g;
|
||||
mscanline[j + 5] = m_colortable[fscanline[i] & mask].b;
|
||||
for (unsigned int i = 0, j = 0; j < scanline_bytes; ++i, j += 6) {
|
||||
uint8_t mask = 0xF0;
|
||||
{
|
||||
auto& c = colortable((fscanline[i] & mask) >> 4);
|
||||
mscanline[j] = c.r;
|
||||
mscanline[j + 1] = c.g;
|
||||
mscanline[j + 2] = c.b;
|
||||
}
|
||||
if (j + 3 >= scanline_bytes)
|
||||
break;
|
||||
mask = 0x0F;
|
||||
{
|
||||
auto& c = colortable(fscanline[i] & mask);
|
||||
mscanline[j + 3] = c.r;
|
||||
mscanline[j + 4] = c.g;
|
||||
mscanline[j + 5] = c.b;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (m_dib_header.bpp == 1) {
|
||||
@@ -202,13 +414,13 @@ BmpInput::read_native_scanline(int subimage, int miplevel, int y, int /*z*/,
|
||||
int index = 0;
|
||||
if (fscanline[i] & (1 << j))
|
||||
index = 1;
|
||||
mscanline[k] = m_colortable[index].r;
|
||||
mscanline[k + 1] = m_colortable[index].g;
|
||||
mscanline[k + 2] = m_colortable[index].b;
|
||||
auto& c = colortable(index);
|
||||
mscanline[k] = c.r;
|
||||
mscanline[k + 1] = c.g;
|
||||
mscanline[k + 2] = c.b;
|
||||
}
|
||||
}
|
||||
}
|
||||
memcpy(data, &mscanline[0], scanline_bytes);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -233,10 +445,15 @@ BmpInput::read_color_table(void)
|
||||
// if this field is 0 - color table has max colors:
|
||||
// pow(2, m_dib_header.cpalete) otherwise color table have
|
||||
// m_dib_header.cpalete entries
|
||||
if (m_dib_header.cpalete < 0
|
||||
|| m_dib_header.cpalete > (1 << m_dib_header.bpp)) {
|
||||
errorf("Possible corrupted header, invalid palette size");
|
||||
return false;
|
||||
}
|
||||
const int32_t colors = (m_dib_header.cpalete) ? m_dib_header.cpalete
|
||||
: 1 << m_dib_header.bpp;
|
||||
size_t entry_size = 4;
|
||||
// if the file is OS V2 bitmap color table entr has only 3 bytes, not four
|
||||
size_t entry_size = 4;
|
||||
// if the file is OS V2 bitmap color table entry has only 3 bytes, not four
|
||||
if (m_dib_header.size == OS2_V1)
|
||||
entry_size = 3;
|
||||
m_colortable.resize(colors);
|
||||
@@ -244,8 +461,9 @@ BmpInput::read_color_table(void)
|
||||
size_t n = fread(&m_colortable[i], 1, entry_size, m_fd);
|
||||
if (n != entry_size) {
|
||||
if (feof(m_fd))
|
||||
errorf(
|
||||
"Hit end of file unexpectedly while reading color table");
|
||||
errorfmt(
|
||||
"Hit end of file unexpectedly while reading color table on color {}/{} (read {}, expected {})",
|
||||
i, colors, n, entry_size);
|
||||
else
|
||||
errorf("read error while reading color table");
|
||||
return false; // Read failed
|
||||
@@ -254,4 +472,16 @@ BmpInput::read_color_table(void)
|
||||
return true; // ok
|
||||
}
|
||||
|
||||
bool
|
||||
BmpInput::color_table_is_all_gray(void)
|
||||
{
|
||||
size_t ncolors = m_colortable.size();
|
||||
for (size_t i = 0; i < ncolors; i++) {
|
||||
color_table& color = m_colortable[i];
|
||||
if (color.b != color.g || color.g != color.r)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
OIIO_PLUGIN_NAMESPACE_END
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
// https://github.com/OpenImageIO/oiio/blob/master/LICENSE.md
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
#include <OpenImageIO/filesystem.h>
|
||||
#include <OpenImageIO/imageio.h>
|
||||
#include <OpenImageIO/strutil.h>
|
||||
|
||||
#include "bmp_pvt.h"
|
||||
@@ -11,6 +15,47 @@ OIIO_PLUGIN_NAMESPACE_BEGIN
|
||||
using namespace bmp_pvt;
|
||||
|
||||
|
||||
class BmpOutput final : public ImageOutput {
|
||||
public:
|
||||
BmpOutput() { init(); }
|
||||
virtual ~BmpOutput() { close(); }
|
||||
virtual const char* format_name(void) const override { return "bmp"; }
|
||||
virtual int supports(string_view feature) const override;
|
||||
virtual bool open(const std::string& name, const ImageSpec& spec,
|
||||
OpenMode mode) override;
|
||||
virtual bool close(void) override;
|
||||
virtual bool write_scanline(int y, int z, TypeDesc format, const void* data,
|
||||
stride_t xstride) override;
|
||||
virtual bool write_tile(int x, int y, int z, TypeDesc format,
|
||||
const void* data, stride_t xstride,
|
||||
stride_t ystride, stride_t zstride) override;
|
||||
|
||||
private:
|
||||
int64_t m_padded_scanline_size;
|
||||
FILE* m_fd;
|
||||
std::string m_filename;
|
||||
bmp_pvt::BmpFileHeader m_bmp_header;
|
||||
bmp_pvt::DibInformationHeader m_dib_header;
|
||||
int64_t m_image_start;
|
||||
unsigned int m_dither;
|
||||
std::vector<unsigned char> m_tilebuffer;
|
||||
std::vector<unsigned char> m_scratch;
|
||||
std::vector<unsigned char> m_buf; // more tmp space for write_scanline
|
||||
|
||||
void init(void)
|
||||
{
|
||||
m_padded_scanline_size = 0;
|
||||
m_fd = NULL;
|
||||
m_filename.clear();
|
||||
}
|
||||
|
||||
void create_and_write_file_header(void);
|
||||
|
||||
void create_and_write_bitmap_header(void);
|
||||
};
|
||||
|
||||
|
||||
|
||||
// Obligatory material to make this a recognizeable imageio plugin
|
||||
OIIO_PLUGIN_EXPORTS_BEGIN
|
||||
|
||||
@@ -46,7 +91,8 @@ BmpOutput::open(const std::string& name, const ImageSpec& spec, OpenMode mode)
|
||||
m_filename = name;
|
||||
m_spec = spec;
|
||||
|
||||
if (m_spec.nchannels != 3 && m_spec.nchannels != 4) {
|
||||
if (m_spec.nchannels != 1 && m_spec.nchannels != 3
|
||||
&& m_spec.nchannels != 4) {
|
||||
errorf("%s does not support %d-channel images\n", format_name(),
|
||||
m_spec.nchannels);
|
||||
return false;
|
||||
@@ -68,12 +114,13 @@ BmpOutput::open(const std::string& name, const ImageSpec& spec, OpenMode mode)
|
||||
return false;
|
||||
}
|
||||
|
||||
// Scanline size is rounded up to align to 4-byte boundary
|
||||
m_padded_scanline_size = round_to_multiple(m_spec.scanline_bytes(), 4);
|
||||
|
||||
create_and_write_file_header();
|
||||
create_and_write_bitmap_header();
|
||||
|
||||
// Scanline size is rounded up to align to 4-byte boundary
|
||||
m_padded_scanline_size = ((m_spec.width * m_spec.nchannels) + 3) & ~3;
|
||||
m_image_start = Filesystem::ftell(m_fd);
|
||||
m_image_start = Filesystem::ftell(m_fd);
|
||||
|
||||
// If user asked for tiles -- which this format doesn't support, emulate
|
||||
// it by buffering the whole image.
|
||||
@@ -100,21 +147,20 @@ BmpOutput::write_scanline(int y, int z, TypeDesc format, const void* data,
|
||||
int64_t scanline_off = y * m_padded_scanline_size;
|
||||
Filesystem::fseek(m_fd, m_image_start + scanline_off, SEEK_SET);
|
||||
|
||||
std::vector<unsigned char> scratch;
|
||||
data = to_native_scanline(format, data, xstride, scratch, m_dither, y, z);
|
||||
std::vector<unsigned char> buf;
|
||||
buf.reserve(m_padded_scanline_size); // reserve enough for padded scanline
|
||||
buf.assign((const unsigned char*)data,
|
||||
(const unsigned char*)data + m_spec.scanline_bytes());
|
||||
buf.resize(m_padded_scanline_size, 0); // pad with zeroes if needed
|
||||
m_scratch.clear();
|
||||
data = to_native_scanline(format, data, xstride, m_scratch, m_dither, y, z);
|
||||
m_buf.assign((const unsigned char*)data,
|
||||
(const unsigned char*)data + m_spec.scanline_bytes());
|
||||
m_buf.resize(m_padded_scanline_size, 0); // pad with zeroes if needed
|
||||
|
||||
// Swap RGB pixels into BGR format
|
||||
if (m_spec.nchannels >= 3)
|
||||
for (int i = 0, iend = buf.size() - 2; i < iend; i += m_spec.nchannels)
|
||||
std::swap(buf[i], buf[i + 2]);
|
||||
for (int i = 0, iend = m_buf.size() - 2; i < iend;
|
||||
i += m_spec.nchannels)
|
||||
std::swap(m_buf[i], m_buf[i + 2]);
|
||||
|
||||
size_t byte_count = fwrite(&buf[0], 1, buf.size(), m_fd);
|
||||
return byte_count == buf.size(); // true if wrote all bytes (no error)
|
||||
size_t byte_count = fwrite(&m_buf[0], 1, m_buf.size(), m_fd);
|
||||
return byte_count == m_buf.size(); // true if wrote all bytes (no error)
|
||||
}
|
||||
|
||||
|
||||
@@ -157,13 +203,13 @@ void
|
||||
BmpOutput::create_and_write_file_header(void)
|
||||
{
|
||||
m_bmp_header.magic = MAGIC_BM;
|
||||
int64_t data_size = int64_t(m_spec.width) * m_spec.height
|
||||
* m_spec.nchannels;
|
||||
int64_t file_size = data_size + BMP_HEADER_SIZE + WINDOWS_V3;
|
||||
m_bmp_header.fsize = file_size;
|
||||
m_bmp_header.res1 = 0;
|
||||
m_bmp_header.res2 = 0;
|
||||
m_bmp_header.offset = BMP_HEADER_SIZE + WINDOWS_V3;
|
||||
int64_t data_size = m_padded_scanline_size * m_spec.height;
|
||||
int palettesize = (m_spec.nchannels == 1) ? 4 * 256 : 0;
|
||||
int64_t file_size = data_size + BMP_HEADER_SIZE + WINDOWS_V3 + palettesize;
|
||||
m_bmp_header.fsize = file_size;
|
||||
m_bmp_header.res1 = 0;
|
||||
m_bmp_header.res2 = 0;
|
||||
m_bmp_header.offset = BMP_HEADER_SIZE + WINDOWS_V3 + palettesize;
|
||||
|
||||
m_bmp_header.write_header(m_fd);
|
||||
}
|
||||
@@ -177,18 +223,24 @@ BmpOutput::create_and_write_bitmap_header(void)
|
||||
m_dib_header.width = m_spec.width;
|
||||
m_dib_header.height = m_spec.height;
|
||||
m_dib_header.cplanes = 1;
|
||||
m_dib_header.compression = 0;
|
||||
m_dib_header.compression = NO_COMPRESSION;
|
||||
|
||||
m_dib_header.bpp = m_spec.nchannels << 3;
|
||||
if (m_spec.nchannels == 1) {
|
||||
// Special case -- write a 1-channel image as a gray palette
|
||||
m_dib_header.bpp = 8;
|
||||
m_dib_header.cpalete = 256;
|
||||
m_dib_header.important = 256;
|
||||
} else {
|
||||
m_dib_header.bpp = m_spec.nchannels * 8;
|
||||
m_dib_header.cpalete = 0;
|
||||
m_dib_header.important = 0;
|
||||
}
|
||||
|
||||
m_dib_header.isize = m_spec.width * m_spec.height * m_spec.nchannels;
|
||||
m_dib_header.hres = 0;
|
||||
m_dib_header.vres = 0;
|
||||
m_dib_header.cpalete = 0;
|
||||
m_dib_header.important = 0;
|
||||
m_dib_header.isize = int32_t(m_spec.image_pixels());
|
||||
m_dib_header.hres = 0;
|
||||
m_dib_header.vres = 0;
|
||||
|
||||
ParamValue* p = NULL;
|
||||
p = m_spec.find_attribute("ResolutionUnit", TypeDesc::STRING);
|
||||
ParamValue* p = m_spec.find_attribute("ResolutionUnit", TypeDesc::STRING);
|
||||
if (p && p->data()) {
|
||||
std::string res_units = *(char**)p->data();
|
||||
if (Strutil::iequals(res_units, "m")
|
||||
@@ -204,6 +256,13 @@ BmpOutput::create_and_write_bitmap_header(void)
|
||||
}
|
||||
|
||||
m_dib_header.write_header(m_fd);
|
||||
|
||||
// Write palette, if there is one. This is only used for grayscale
|
||||
// images, and the palette is just the 256 possible gray values.
|
||||
for (int i = 0; i < m_dib_header.cpalete; ++i) {
|
||||
unsigned char val[4] = { uint8_t(i), uint8_t(i), uint8_t(i), 255 };
|
||||
fwrite(&val, 1, 4, m_fd);
|
||||
}
|
||||
}
|
||||
|
||||
OIIO_PLUGIN_NAMESPACE_END
|
||||
|
||||
@@ -7,4 +7,4 @@ Name: OpenImageIO
|
||||
Description: OpenImageIO is a library for reading and writing images.
|
||||
Version: @PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@.@PROJECT_VERSION_TWEAK@
|
||||
Libs: -L${libdir} -lOpenImageIO
|
||||
Cflags: -I${includedir}/OpenImageIO
|
||||
Cflags: -I${includedir}
|
||||
|
||||
Executable
+53
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Utility script to download and build OpenJPEG
|
||||
#
|
||||
# Copyright Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio
|
||||
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
# Repo and branch/tag/commit of OpenJPEG to download if we don't have it yet
|
||||
OPENJPEG_REPO=${OPENJPEG_REPO:=https://github.com/uclouvain/openjpeg.git}
|
||||
OPENJPEG_VERSION=${OPENJPEG_VERSION:=v2.4.0}
|
||||
|
||||
# Where to put OpenJPEG repo source (default to the ext area)
|
||||
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
OPENJPEG_SRC_DIR=${OPENJPEG_SRC_DIR:=${LOCAL_DEPS_DIR}/OpenJPEG}
|
||||
OPENJPEG_BUILD_DIR=${OPENJPEG_BUILD_DIR:=${OPENJPEG_SRC_DIR}/build}
|
||||
OPENJPEG_INSTALL_DIR=${OPENJPEG_INSTALL_DIR:=${LOCAL_DEPS_DIR}/dist}
|
||||
#OPENJPEG_CONFIG_OPTS=${OPENJPEG_CONFIG_OPTS:=}
|
||||
|
||||
pwd
|
||||
echo "OpenJPEG install dir will be: ${OPENJPEG_INSTALL_DIR}"
|
||||
|
||||
mkdir -p ./ext
|
||||
pushd ./ext
|
||||
|
||||
# Clone OpenJPEG project from GitHub and build
|
||||
if [[ ! -e ${OPENJPEG_SRC_DIR} ]] ; then
|
||||
echo "git clone ${OPENJPEG_REPO} ${OPENJPEG_SRC_DIR}"
|
||||
git clone ${OPENJPEG_REPO} ${OPENJPEG_SRC_DIR}
|
||||
fi
|
||||
cd ${OPENJPEG_SRC_DIR}
|
||||
echo "git checkout ${OPENJPEG_VERSION} --force"
|
||||
git checkout ${OPENJPEG_VERSION} --force
|
||||
|
||||
mkdir -p ${OPENJPEG_BUILD_DIR} && true
|
||||
cd ${OPENJPEG_BUILD_DIR}
|
||||
time cmake -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${OPENJPEG_INSTALL_DIR} \
|
||||
-DBUILD_CODEC=OFF \
|
||||
${OPENJPEG_CONFIG_OPTS} ..
|
||||
time cmake --build . --config Release --target install
|
||||
|
||||
# ls -R ${OPENJPEG_INSTALL_DIR}
|
||||
popd
|
||||
|
||||
|
||||
# Set up paths. These will only affect the caller if this script is
|
||||
# run with 'source' rather than in a separate shell.
|
||||
export OpenJPEG_ROOT=$OPENJPEG_INSTALL_DIR
|
||||
|
||||
Executable
+48
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Utility script to download and build Ptex
|
||||
#
|
||||
# Copyright Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio
|
||||
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
# Repo and branch/tag/commit of ptex to download if we don't have it yet
|
||||
: ${PTEX_REPO:=https://github.com/wdas/ptex.git}
|
||||
: ${PTEX_VERSION:=v2.4.0}
|
||||
: ${PTEX_SRC_DIR:=${PWD}/ext/ptex}
|
||||
: ${PTEX_BUILD_DIR:=${PTEX_SRC_DIR}/build}
|
||||
: ${PTEX_INSTALL_DIR:=${PWD}/ext/dist}
|
||||
|
||||
pwd
|
||||
echo "Ptex install dir will be: ${PTEX_INSTALL_DIR}"
|
||||
|
||||
mkdir -p ./ext
|
||||
pushd ./ext
|
||||
|
||||
# Clone ptex project from GitHub and build
|
||||
if [[ ! -e ${PTEX_SRC_DIR} ]] ; then
|
||||
echo "git clone ${PTEX_REPO} ${PTEX_SRC_DIR}"
|
||||
git clone ${PTEX_REPO} ${PTEX_SRC_DIR}
|
||||
fi
|
||||
cd ${PTEX_SRC_DIR}
|
||||
echo "git checkout ${PTEX_VERSION} --force"
|
||||
git checkout ${PTEX_VERSION} --force
|
||||
|
||||
mkdir -p ${PTEX_BUILD_DIR}
|
||||
cd ${PTEX_BUILD_DIR}
|
||||
time cmake -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${PTEX_INSTALL_DIR} \
|
||||
${PTEX_CONFIG_OPTS} ..
|
||||
time cmake --build . --config Release --target install
|
||||
|
||||
# ls -R ${PTEX_INSTALL_DIR}
|
||||
popd
|
||||
|
||||
|
||||
# Set up paths. These will only affect the caller if this script is
|
||||
# run with 'source' rather than in a separate shell.
|
||||
export Ptex_ROOT=$PTEX_INSTALL_DIR
|
||||
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PTEX_INSTALL_DIR}/lib:${PTEX_INSTALL_DIR}/lib64
|
||||
@@ -22,7 +22,7 @@ fi
|
||||
if [[ `uname` == "Linux" && `uname -m` == "aarch64" ]] ; then
|
||||
mkdir -p ${CMAKE_INSTALL_DIR} || true
|
||||
curl --location https://anaconda.org/conda-forge/cmake/3.17.0/download/linux-aarch64/cmake-3.17.0-h28c56e5_0.tar.bz2 -o cmake-3.17.0-h28c56e5_0.tar.bz2
|
||||
tar -xjvf cmake-3.17.0-h28c56e5_0.tar.bz2 -C ${CMAKE_INSTALL_DIR}
|
||||
tar -xjf cmake-3.17.0-h28c56e5_0.tar.bz2 -C ${CMAKE_INSTALL_DIR}
|
||||
export PATH=${CMAKE_INSTALL_DIR}/bin:$PATH
|
||||
|
||||
# In case we ever need to build from scratch:
|
||||
|
||||
Executable
+44
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio
|
||||
|
||||
# Utility script to download and build giflib
|
||||
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
GIFLIB_REPO=${GIFLIB_REPO:=https://gitlab.com/giflib/giflib.git}
|
||||
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
GIFLIB_BUILD_DIR=${GIFLIB_BUILD_DIR:=${LOCAL_DEPS_DIR}/giflib}
|
||||
GIFLIB_INSTALL_DIR=${GIFLIB_INSTALL_DIR:=${PWD}/ext/dist}
|
||||
GIFLIB_VERSION=${GIFLIB_VERSION:=5.2.1}
|
||||
GIFLIB_CC=${GIFLIB_CC:=gcc}
|
||||
BASEDIR=`pwd`
|
||||
pwd
|
||||
echo "giflib install dir will be: ${GIFLIB_INSTALL_DIR}"
|
||||
|
||||
mkdir -p ${LOCAL_DEPS_DIR}
|
||||
pushd ${LOCAL_DEPS_DIR}
|
||||
|
||||
# Clone giflib project and build
|
||||
curl --location https://downloads.sourceforge.net/project/giflib/giflib-${GIFLIB_VERSION}.tar.gz -o giflib.tar.gz
|
||||
tar xzf giflib.tar.gz
|
||||
pushd giflib-${GIFLIB_VERSION}
|
||||
cp Makefile Makefile.old
|
||||
curl --location https://sourceforge.net/p/giflib/bugs/_discuss/thread/4e811ad29b/c323/attachment/Makefile.patch -o Makefile.patch
|
||||
patch -p0 < Makefile.patch
|
||||
popd
|
||||
|
||||
cd giflib-${GIFLIB_VERSION}
|
||||
time make PREFIX=${GIFLIB_INSTALL_DIR} CC=${GIFLIB_CC} install
|
||||
|
||||
popd
|
||||
|
||||
# ls -R ${GIFLIB_INSTALL_DIR} && true
|
||||
|
||||
# Set up paths. These will only affect the caller if this script is
|
||||
# run with 'source' rather than in a separate shell.
|
||||
export GIF_ROOT=$GIFLIB_INSTALL_DIR
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${GIFLIB_INSTALL_DIR}/lib
|
||||
Executable
+53
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Utility script to download and build libjpeg-turbo
|
||||
#
|
||||
# Copyright Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio
|
||||
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
# Repo and branch/tag/commit of libjpeg-turbo to download if we don't have it yet
|
||||
LIBJPEGTURBO_REPO=${LIBJPEGTURBO_REPO:=https://github.com/libjpeg-turbo/libjpeg-turbo.git}
|
||||
LIBJPEGTURBO_VERSION=${LIBJPEGTURBO_VERSION:=2.0.5}
|
||||
|
||||
# Where to put libjpeg-turbo repo source (default to the ext area)
|
||||
LIBJPEGTURBO_SRC_DIR=${LIBJPEGTURBO_SRC_DIR:=${PWD}/ext/libjpeg-turbo}
|
||||
# Temp build area (default to a build/ subdir under source)
|
||||
LIBJPEGTURBO_BUILD_DIR=${LIBJPEGTURBO_BUILD_DIR:=${LIBJPEGTURBO_SRC_DIR}/build}
|
||||
# Install area for libjpeg-turbo (default to ext/dist)
|
||||
LIBJPEGTURBO_INSTALL_DIR=${LIBJPEGTURBO_INSTALL_DIR:=${PWD}/ext/dist}
|
||||
#LIBJPEGTURBO_CONFIG_OPTS=${LIBJPEGTURBO_CONFIG_OPTS:=}
|
||||
|
||||
pwd
|
||||
echo "libjpeg-turbo install dir will be: ${LIBJPEGTURBO_INSTALL_DIR}"
|
||||
|
||||
mkdir -p ./ext
|
||||
pushd ./ext
|
||||
|
||||
# Clone libjpeg-turbo project from GitHub and build
|
||||
if [[ ! -e ${LIBJPEGTURBO_SRC_DIR} ]] ; then
|
||||
echo "git clone ${LIBJPEGTURBO_REPO} ${LIBJPEGTURBO_SRC_DIR}"
|
||||
git clone ${LIBJPEGTURBO_REPO} ${LIBJPEGTURBO_SRC_DIR}
|
||||
fi
|
||||
cd ${LIBJPEGTURBO_SRC_DIR}
|
||||
echo "git checkout ${LIBJPEGTURBO_VERSION} --force"
|
||||
git checkout ${LIBJPEGTURBO_VERSION} --force
|
||||
|
||||
mkdir -p ${LIBJPEGTURBO_BUILD_DIR}
|
||||
cd ${LIBJPEGTURBO_BUILD_DIR}
|
||||
time cmake -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${LIBJPEGTURBO_INSTALL_DIR} \
|
||||
${LIBJPEGTURBO_CONFIG_OPTS} ..
|
||||
time cmake --build . --config Release --target install
|
||||
|
||||
# ls -R ${LIBJPEGTURBO_INSTALL_DIR}
|
||||
popd
|
||||
|
||||
|
||||
# Set up paths. These will only affect the caller if this script is
|
||||
# run with 'source' rather than in a separate shell.
|
||||
export JPEGTurbo_ROOT=$LIBJPEGTURBO_INSTALL_DIR
|
||||
|
||||
Executable
+55
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Utility script to download and build libpng
|
||||
#
|
||||
# Copyright Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio
|
||||
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
# Repo and branch/tag/commit of libpng to download if we don't have it yet
|
||||
LIBPNG_REPO=${LIBPNG_REPO:=https://github.com/glennrp/libpng.git}
|
||||
LIBPNG_VERSION=${LIBPNG_VERSION:=v1.6.35}
|
||||
|
||||
# Where to put libpng repo source (default to the ext area)
|
||||
LIBPNG_SRC_DIR=${LIBPNG_SRC_DIR:=${PWD}/ext/libpng}
|
||||
# Temp build area (default to a build/ subdir under source)
|
||||
LIBPNG_BUILD_DIR=${LIBPNG_BUILD_DIR:=${LIBPNG_SRC_DIR}/build}
|
||||
# Install area for libpng (default to ext/dist)
|
||||
LIBPNG_INSTALL_DIR=${LIBPNG_INSTALL_DIR:=${PWD}/ext/dist}
|
||||
#LIBPNG_CONFIG_OPTS=${LIBPNG_CONFIG_OPTS:=}
|
||||
|
||||
pwd
|
||||
echo "libpng install dir will be: ${LIBPNG_INSTALL_DIR}"
|
||||
|
||||
mkdir -p ./ext
|
||||
pushd ./ext
|
||||
|
||||
# Clone libpng project from GitHub and build
|
||||
if [[ ! -e ${LIBPNG_SRC_DIR} ]] ; then
|
||||
echo "git clone ${LIBPNG_REPO} ${LIBPNG_SRC_DIR}"
|
||||
git clone ${LIBPNG_REPO} ${LIBPNG_SRC_DIR}
|
||||
fi
|
||||
cd ${LIBPNG_SRC_DIR}
|
||||
echo "git checkout ${LIBPNG_VERSION} --force"
|
||||
git checkout ${LIBPNG_VERSION} --force
|
||||
|
||||
mkdir -p ${LIBPNG_BUILD_DIR}
|
||||
cd ${LIBPNG_BUILD_DIR}
|
||||
time cmake -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${LIBPNG_INSTALL_DIR} \
|
||||
-DPNG_EXECUTABLES=OFF \
|
||||
-DPNG_TESTS=OFF \
|
||||
${LIBPNG_CONFIG_OPTS} ..
|
||||
time cmake --build . --config Release --target install
|
||||
|
||||
# ls -R ${LIBPNG_INSTALL_DIR}
|
||||
popd
|
||||
|
||||
|
||||
# Set up paths. These will only affect the caller if this script is
|
||||
# run with 'source' rather than in a separate shell.
|
||||
export PNG_ROOT=$LIBPNG_INSTALL_DIR
|
||||
|
||||
@@ -7,8 +7,7 @@ set -ex
|
||||
|
||||
# Which LibRaw to retrieve, how to build it
|
||||
LIBRAW_REPO=${LIBRAW_REPO:=https://github.com/LibRaw/LibRaw.git}
|
||||
LIBRAW_VERSION=${LIBRAW_VERSION:=0.19.5}
|
||||
LIBRAW_BRANCH=${LIBRAW_BRANCH:=${LIBRAW_VERSION}}
|
||||
LIBRAW_VERSION=${LIBRAW_VERSION:=0.20.2}
|
||||
|
||||
# Where to install the final results
|
||||
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
@@ -18,7 +17,7 @@ LIBRAW_INSTALL_DIR=${LIBRAW_INSTALL_DIR:=${LOCAL_DEPS_DIR}/libraw-install}
|
||||
LIBRAW_BUILD_TYPE=${LIBRAW_BUILD_TYPE:=Release}
|
||||
|
||||
pwd
|
||||
echo "Building LibRaw ${LIBRAW_BRANCH}"
|
||||
echo "Building LibRaw ${LIBRAW_VERSION}"
|
||||
echo " build dir will be: ${LIBRAW_BUILD_DIR}"
|
||||
echo " install dir will be: ${LIBRAW_INSTALL_DIR}"
|
||||
echo " build type is ${LIBRAW_BUILD_TYPE}"
|
||||
@@ -34,7 +33,7 @@ mkdir -p ${LIBRAW_INSTALL_DIR} && true
|
||||
mkdir -p ${LIBRAW_BUILD_DIR} && true
|
||||
|
||||
pushd ${LIBRAW_SOURCE_DIR}
|
||||
git checkout ${LIBRAW_BRANCH} --force
|
||||
git checkout ${LIBRAW_VERSION} --force
|
||||
|
||||
aclocal
|
||||
autoreconf --install
|
||||
|
||||
@@ -8,10 +8,11 @@ set -ex
|
||||
LIBTIFF_REPO=${LIBTIFF_REPO:=https://gitlab.com/libtiff/libtiff.git}
|
||||
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
LIBTIFF_BUILD_DIR=${LIBTIFF_BUILD_DIR:=${LOCAL_DEPS_DIR}/libtiff}
|
||||
LIBTIFF_INSTALL_DIR=${LIBTIFF_INSTALL_DIR:=${LOCAL_DEPS_DIR}/libtiff/dist}
|
||||
LIBTIFF_VERSION=${LIBTIFF_VERSION:=4.1.0}
|
||||
LIBTIFF_BRANCH=${LIBTIFF_BRANCH:=v${LIBTIFF_VERSION}}
|
||||
LIBTIFF_CXX_FLAGS=${LIBTIFF_CXX_FLAGS:="-Wno-unused-function -Wno-deprecated-declarations -Wno-cast-qual -Wno-write-strings"}
|
||||
LIBTIFF_INSTALL_DIR=${LIBTIFF_INSTALL_DIR:=${PWD}/ext/dist}
|
||||
LIBTIFF_VERSION=${LIBTIFF_VERSION:=v4.1.0}
|
||||
if [[ `uname` == `Linux` ]] ; then
|
||||
LIBTIFF_CXX_FLAGS=${LIBTIFF_CXX_FLAGS:="-O3 -Wno-unused-function -Wno-deprecated-declarations -Wno-cast-qual -Wno-write-strings"}
|
||||
fi
|
||||
LIBTIFF_BUILDOPTS="${LIBTIFF_BUILDOPTS}"
|
||||
BASEDIR=`pwd`
|
||||
pwd
|
||||
@@ -27,21 +28,24 @@ if [[ ! -e libtiff ]] ; then
|
||||
fi
|
||||
cd libtiff
|
||||
|
||||
echo "git checkout ${LIBTIFF_BRANCH} --force"
|
||||
git checkout ${LIBTIFF_BRANCH} --force
|
||||
echo "git checkout ${LIBTIFF_VERSION} --force"
|
||||
git checkout ${LIBTIFF_VERSION} --force
|
||||
mkdir -p build
|
||||
cd build
|
||||
time cmake --config Release -DCMAKE_INSTALL_PREFIX=${LIBTIFF_INSTALL_DIR} -DCMAKE_CXX_FLAGS="${LIBTIFF_CXX_FLAGS}" ${LIBTIFF_BUILDOPTS} ..
|
||||
time cmake -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${LIBTIFF_INSTALL_DIR} \
|
||||
-DCMAKE_CXX_FLAGS="${LIBTIFF_CXX_FLAGS}" \
|
||||
${LIBTIFF_BUILDOPTS} ..
|
||||
time cmake --build . --config Release --target install
|
||||
popd
|
||||
|
||||
ls -R ${LIBTIFF_INSTALL_DIR}
|
||||
# ls -R ${LIBTIFF_INSTALL_DIR}
|
||||
|
||||
#echo "listing .."
|
||||
#ls ..
|
||||
|
||||
# Set up paths. These will only affect the caller if this script is
|
||||
# run with 'source' rather than in a separate shell.
|
||||
export TIFF_ROOT=$LIBTIFF_INSTALL_DIR
|
||||
export LIBTIFF_ROOT=$LIBTIFF_INSTALL_DIR
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${LIBTIFF_INSTALL_DIR}/lib
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ if [[ `uname` == "Linux" ]] ; then
|
||||
fi
|
||||
echo LLVMTAR = $LLVMTAR
|
||||
curl --location http://releases.llvm.org/${LLVM_VERSION}/${LLVMTAR} -o $LLVMTAR
|
||||
ls -l $LLVMTAR
|
||||
# ls -l $LLVMTAR
|
||||
tar xf $LLVMTAR
|
||||
rm -f $LLVMTAR
|
||||
echo "Installed ${LLVM_VERSION} in ${LLVM_INSTALL_DIR}"
|
||||
@@ -38,5 +38,5 @@ if [[ `uname` == "Linux" ]] ; then
|
||||
mv clang+llvm*/* $LLVM_INSTALL_DIR
|
||||
export LLVM_DIRECTORY=$LLVM_INSTALL_DIR
|
||||
export PATH=${LLVM_INSTALL_DIR}/bin:$PATH
|
||||
ls -a $LLVM_DIRECTORY
|
||||
# ls -a $LLVM_DIRECTORY
|
||||
fi
|
||||
|
||||
Executable
+26
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
DOWNLOADS_DIR=${DOWNLOADS_DIR:=${LOCAL_DEPS_DIR}/downloads}
|
||||
NINJA_REPO=${NINJA_REPO:=https://github.com/ninja-build/ninja}
|
||||
NINJA_VERSION=${NINJA_VERSION:=1.10.2}
|
||||
NINJA_BRANCH=${NINJA_BRANCH:=v${NINJA_VERSION}}
|
||||
NINJA_INSTALL_DIR=${NINJA_INSTALL_DIR:=${LOCAL_DEPS_DIR}/dist/bin}
|
||||
|
||||
if [ ! -f $DOWNLOADS_DIR/ninja-${NINJA_VERSION}.zip ]; then
|
||||
curl --location ${NINJA_REPO}/archive/${NINJA_BRANCH}.tar.gz -o $DOWNLOADS_DIR/ninja-${NINJA_BRANCH}.tar.gz
|
||||
fi
|
||||
|
||||
tar xf $DOWNLOADS_DIR/ninja-${NINJA_BRANCH}.tar.gz
|
||||
pushd ninja-${NINJA_VERSION}
|
||||
|
||||
./configure.py --bootstrap
|
||||
|
||||
mkdir -p ${NINJA_INSTALL_DIR}
|
||||
cp ninja ${NINJA_INSTALL_DIR}
|
||||
|
||||
popd
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Utility script to download and build OpenColorIO
|
||||
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
OCIO_REPO=${OCIO_REPO:=https://github.com/AcademySoftwareFoundation/OpenColorIO.git}
|
||||
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
OCIO_BUILD_DIR=${OCIO_BUILD_DIR:=${LOCAL_DEPS_DIR}/OpenColorIO}
|
||||
OCIO_INSTALL_DIR=${OCIO_INSTALL_DIR:=${LOCAL_DEPS_DIR}/OpenColorIO/dist}
|
||||
OCIO_VERSION=${OCIO_VERSION:=1.1.1}
|
||||
OCIO_BRANCH=${OCIO_BRANCH:=v${OCIO_VERSION}}
|
||||
OCIO_CXX_FLAGS=${OCIO_CXX_FLAGS:="-Wno-unused-function -Wno-deprecated-declarations -Wno-cast-qual -Wno-write-strings"}
|
||||
# Just need libs:
|
||||
OCIO_BUILDOPTS="-DOCIO_BUILD_APPS=OFF -DOCIO_BUILD_NUKE=OFF \
|
||||
-DOCIO_BUILD_DOCS=OFF -DOCIO_BUILD_TESTS=OFF \
|
||||
-DOCIO_BUILD_PYTHON=OFF -DOCIO_BUILD_PYGLUE=OFF \
|
||||
-DOCIO_BUILD_JAVA=OFF \
|
||||
-DOCIO_BUILD_STATIC=${OCIO_BUILD_STATIC:=OFF}"
|
||||
BASEDIR=`pwd`
|
||||
pwd
|
||||
echo "OpenColorIO install dir will be: ${OCIO_INSTALL_DIR}"
|
||||
|
||||
mkdir -p ${LOCAL_DEPS_DIR}
|
||||
pushd ${LOCAL_DEPS_DIR}
|
||||
|
||||
# Clone OpenColorIO project from GitHub and build
|
||||
if [[ ! -e OpenColorIO ]] ; then
|
||||
echo "git clone ${OCIO_REPO} OpenColorIO"
|
||||
git clone ${OCIO_REPO} OpenColorIO
|
||||
fi
|
||||
cd OpenColorIO
|
||||
|
||||
echo "git checkout ${OCIO_BRANCH} --force"
|
||||
git checkout ${OCIO_BRANCH} --force
|
||||
mkdir -p build
|
||||
cd build
|
||||
time cmake --config Release -DCMAKE_INSTALL_PREFIX=${OCIO_INSTALL_DIR} -DCMAKE_CXX_FLAGS="${OCIO_CXX_FLAGS}" ${OCIO_BUILDOPTS} ..
|
||||
time cmake --build . --config Release --target install
|
||||
popd
|
||||
|
||||
ls -R ${OCIO_INSTALL_DIR}
|
||||
|
||||
#echo "listing .."
|
||||
#ls ..
|
||||
|
||||
# Set up paths. These will only affect the caller if this script is
|
||||
# run with 'source' rather than in a separate shell.
|
||||
export OpenColorIO_ROOT=$OCIO_INSTALL_DIR
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${OCIO_INSTALL_DIR}/lib
|
||||
|
||||
Executable
+59
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Utility script to download and build OpenColorIO
|
||||
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
# Which OCIO to retrieve, how to build it
|
||||
OPENCOLORIO_REPO=${OPENCOLORIO_REPO:=https://github.com/AcademySoftwareFoundation/OpenColorIO.git}
|
||||
OPENCOLORIO_VERSION=${OPENCOLORIO_VERSION:=v2.0.1}
|
||||
|
||||
# Where to install the final results
|
||||
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
OPENCOLORIO_SOURCE_DIR=${OPENCOLORIO_BUILD_DIR:=${LOCAL_DEPS_DIR}/OpenColorIO}
|
||||
OPENCOLORIO_BUILD_DIR=${OPENCOLORIO_BUILD_DIR:=${LOCAL_DEPS_DIR}/OpenColorIO-build}
|
||||
OPENCOLORIO_INSTALL_DIR=${OPENCOLORIO_INSTALL_DIR:=${LOCAL_DEPS_DIR}/dist}
|
||||
OPENCOLORIO_CXX_FLAGS=${OPENCOLORIO_CXX_FLAGS:="-Wno-unused-function -Wno-deprecated-declarations -Wno-cast-qual -Wno-write-strings"}
|
||||
# Just need libs:
|
||||
OPENCOLORIO_BUILDOPTS="-DOCIO_BUILD_APPS=OFF -DOCIO_BUILD_NUKE=OFF \
|
||||
-DOCIO_BUILD_DOCS=OFF -DOCIO_BUILD_TESTS=OFF \
|
||||
-DOCIO_BUILD_GPU_TESTS=OFF \
|
||||
-DOCIO_BUILD_PYTHON=OFF -DOCIO_BUILD_PYGLUE=OFF \
|
||||
-DOCIO_BUILD_JAVA=OFF \
|
||||
-DOCIO_BUILD_STATIC=${OCIO_BUILD_STATIC:=OFF}"
|
||||
BASEDIR=`pwd`
|
||||
pwd
|
||||
echo "OpenColorIO install dir will be: ${OPENCOLORIO_INSTALL_DIR}"
|
||||
|
||||
mkdir -p ${LOCAL_DEPS_DIR}
|
||||
pushd ${LOCAL_DEPS_DIR}
|
||||
|
||||
# Clone OpenColorIO project from GitHub and build
|
||||
if [[ ! -e OpenColorIO ]] ; then
|
||||
echo "git clone ${OPENCOLORIO_REPO} OpenColorIO"
|
||||
git clone ${OPENCOLORIO_REPO} OpenColorIO
|
||||
fi
|
||||
cd OpenColorIO
|
||||
|
||||
echo "git checkout ${OPENCOLORIO_VERSION} --force"
|
||||
git checkout ${OPENCOLORIO_VERSION} --force
|
||||
mkdir -p build
|
||||
cd build
|
||||
time cmake -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${OPENCOLORIO_INSTALL_DIR} \
|
||||
-DCMAKE_CXX_FLAGS="${OPENCOLORIO_CXX_FLAGS}" \
|
||||
${OPENCOLORIO_BUILDOPTS} ..
|
||||
time cmake --build . --config Release --target install
|
||||
popd
|
||||
|
||||
# ls -R ${OPENCOLORIO_INSTALL_DIR}
|
||||
|
||||
#echo "listing .."
|
||||
#ls ..
|
||||
|
||||
# Set up paths. These will only affect the caller if this script is
|
||||
# run with 'source' rather than in a separate shell.
|
||||
export OpenColorIO_ROOT=$OPENCOLORIO_INSTALL_DIR
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${OPENCOLORIO_INSTALL_DIR}/lib
|
||||
|
||||
@@ -6,15 +6,14 @@
|
||||
set -ex
|
||||
|
||||
# Which OpenEXR to retrieve, how to build it
|
||||
OPENEXR_REPO=${OPENEXR_REPO:=https://github.com/openexr/openexr.git}
|
||||
OPENEXR_VERSION=${OPENEXR_VERSION:=2.4.1}
|
||||
OPENEXR_BRANCH=${OPENEXR_BRANCH:=v${OPENEXR_VERSION}}
|
||||
OPENEXR_REPO=${OPENEXR_REPO:=https://github.com/AcademySoftwareFoundation/openexr.git}
|
||||
OPENEXR_VERSION=${OPENEXR_VERSION:=v2.4.1}
|
||||
|
||||
# Where to install the final results
|
||||
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
OPENEXR_SOURCE_DIR=${OPENEXR_SOURCE_DIR:=${LOCAL_DEPS_DIR}/openexr}
|
||||
OPENEXR_BUILD_DIR=${OPENEXR_BUILD_DIR:=${LOCAL_DEPS_DIR}/openexr-build}
|
||||
OPENEXR_INSTALL_DIR=${OPENEXR_INSTALL_DIR:=${LOCAL_DEPS_DIR}/openexr-install}
|
||||
OPENEXR_INSTALL_DIR=${OPENEXR_INSTALL_DIR:=${LOCAL_DEPS_DIR}/dist}
|
||||
OPENEXR_BUILD_TYPE=${OPENEXR_BUILD_TYPE:=Release}
|
||||
CMAKE_GENERATOR=${CMAKE_GENERATOR:="Unix Makefiles"}
|
||||
OPENEXR_CMAKE_FLAGS=${OPENEXR_CMAKE_FLAGS:=""}
|
||||
@@ -22,9 +21,9 @@ OPENEXR_CXX_FLAGS=${OPENEXR_CXX_FLAGS:=""}
|
||||
BASEDIR=$PWD
|
||||
|
||||
pwd
|
||||
echo "Building OpenEXR ${OPENEXR_BRANCH}"
|
||||
echo "EXR build dir will be: ${OPENEXR_BUILD_DIR}"
|
||||
echo "EXR install dir will be: ${OPENEXR_INSTALL_DIR}"
|
||||
echo "Building OpenEXR ${OPENEXR_VERSION}"
|
||||
echo "OpenEXR build dir will be: ${OPENEXR_BUILD_DIR}"
|
||||
echo "OpenEXR install dir will be: ${OPENEXR_INSTALL_DIR}"
|
||||
echo "CMAKE_PREFIX_PATH is ${CMAKE_PREFIX_PATH}"
|
||||
echo "OpenEXR Build type is ${OPENEXR_BUILD_TYPE}"
|
||||
|
||||
@@ -42,19 +41,21 @@ mkdir -p ${OPENEXR_INSTALL_DIR} && true
|
||||
mkdir -p ${OPENEXR_BUILD_DIR} && true
|
||||
|
||||
pushd ${OPENEXR_SOURCE_DIR}
|
||||
git checkout ${OPENEXR_BRANCH} --force
|
||||
git checkout ${OPENEXR_VERSION} --force
|
||||
|
||||
if [[ ${OPENEXR_BRANCH} == "v2.2.0" ]] || [[ ${OPENEXR_BRANCH} == "v2.2.1" ]] ; then
|
||||
if [[ ${OPENEXR_VERSION} == "v2.2.0" ]] || [[ ${OPENEXR_VERSION} == "v2.2.1" ]] \
|
||||
|| [[ ${OPENEXR_VERSION} == "v2.2.2" ]] ; then
|
||||
mkdir -p ${OPENEXR_BUILD_DIR}/IlmBase && true
|
||||
mkdir -p ${OPENEXR_BUILD_DIR}/OpenEXR && true
|
||||
cd ${OPENEXR_BUILD_DIR}/IlmBase
|
||||
cmake --config ${OPENEXR_BUILD_TYPE} ${OPENEXR_GENERATOR_CMD} \
|
||||
cmake -DCMAKE_BUILD_TYPE=${OPENEXR_BUILD_TYPE} ${OPENEXR_GENERATOR_CMD} \
|
||||
-DCMAKE_INSTALL_PREFIX="${OPENEXR_INSTALL_DIR}" \
|
||||
-DCMAKE_CXX_FLAGS="${OPENEXR_CXX_FLAGS}" \
|
||||
-DCMAKE_CXX_STANDARD=11 \
|
||||
${OPENEXR_CMAKE_FLAGS} ${OPENEXR_SOURCE_DIR}/IlmBase
|
||||
time cmake --build . --target install --config ${OPENEXR_BUILD_TYPE}
|
||||
cd ${OPENEXR_BUILD_DIR}/OpenEXR
|
||||
cmake --config ${OPENEXR_BUILD_TYPE} ${OPENEXR_GENERATOR_CMD} \
|
||||
cmake -DCMAKE_BUILD_TYPE=${OPENEXR_BUILD_TYPE} ${OPENEXR_GENERATOR_CMD} \
|
||||
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}\;${OPENEXR_INSTALL_DIR}" \
|
||||
-DCMAKE_INSTALL_PREFIX="${OPENEXR_INSTALL_DIR}" \
|
||||
-DILMBASE_PACKAGE_PREFIX="${OPENEXR_INSTALL_DIR}" \
|
||||
@@ -62,10 +63,10 @@ if [[ ${OPENEXR_BRANCH} == "v2.2.0" ]] || [[ ${OPENEXR_BRANCH} == "v2.2.1" ]] ;
|
||||
-DCMAKE_CXX_FLAGS="${OPENEXR_CXX_FLAGS}" \
|
||||
${OPENEXR_CMAKE_FLAGS} ${OPENEXR_SOURCE_DIR}/OpenEXR
|
||||
time cmake --build . --target install --config ${OPENEXR_BUILD_TYPE}
|
||||
elif [[ ${OPENEXR_BRANCH} == "v2.3.0" ]] ; then
|
||||
elif [[ ${OPENEXR_VERSION} == "v2.3.0" ]] ; then
|
||||
# Simplified setup for 2.3+
|
||||
cd ${OPENEXR_BUILD_DIR}
|
||||
cmake --config ${OPENEXR_BUILD_TYPE} -G "$CMAKE_GENERATOR" \
|
||||
cmake -DCMAKE_BUILD_TYPE=${OPENEXR_BUILD_TYPE} -G "$CMAKE_GENERATOR" \
|
||||
-DCMAKE_INSTALL_PREFIX="${OPENEXR_INSTALL_DIR}" \
|
||||
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \
|
||||
-DILMBASE_PACKAGE_PREFIX="${OPENEXR_INSTALL_DIR}" \
|
||||
@@ -78,7 +79,7 @@ elif [[ ${OPENEXR_BRANCH} == "v2.3.0" ]] ; then
|
||||
else
|
||||
# Simplified setup for 2.4+
|
||||
cd ${OPENEXR_BUILD_DIR}
|
||||
cmake --config ${OPENEXR_BUILD_TYPE} -G "$CMAKE_GENERATOR" \
|
||||
cmake -DCMAKE_BUILD_TYPE=${OPENEXR_BUILD_TYPE} -G "$CMAKE_GENERATOR" \
|
||||
-DCMAKE_INSTALL_PREFIX="${OPENEXR_INSTALL_DIR}" \
|
||||
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \
|
||||
-DILMBASE_PACKAGE_PREFIX="${OPENEXR_INSTALL_DIR}" \
|
||||
@@ -86,6 +87,8 @@ else
|
||||
-DBUILD_TESTING=0 \
|
||||
-DPYILMBASE_ENABLE=0 \
|
||||
-DOPENEXR_VIEWERS_ENABLE=0 \
|
||||
-DINSTALL_OPENEXR_EXAMPLES=0 \
|
||||
-DOPENEXR_INSTALL_EXAMPLES=0 \
|
||||
-DCMAKE_INSTALL_LIBDIR=lib \
|
||||
-DCMAKE_CXX_FLAGS="${OPENEXR_CXX_FLAGS}" \
|
||||
${OPENEXR_CMAKE_FLAGS} ${OPENEXR_SOURCE_DIR}
|
||||
|
||||
@@ -4,22 +4,22 @@
|
||||
#
|
||||
# Copyright Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/imageworks/OpenShadingLanguage
|
||||
# https://github.com/OpenImageIO/oiio
|
||||
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
# Repo and branch/tag/commit of pugixml to download if we don't have it yet
|
||||
PUGIXML_REPO=${PUGIXML_REPO:=https://github.com/zeux/pugixml.git}
|
||||
PUGIXML_VERSION=${PUGIXML_VERSION:=1.10}
|
||||
PUGIXML_BRANCH=${PUGIXML_BRANCH:=v${PUGIXML_VERSION}}
|
||||
PUGIXML_VERSION=${PUGIXML_VERSION:=v1.11.4}
|
||||
|
||||
# Where to put pugixml repo source (default to the ext area)
|
||||
PUGIXML_SRC_DIR=${PUGIXML_SRC_DIR:=${PWD}/ext/pugixml}
|
||||
# Temp build area (default to a build/ subdir under source)
|
||||
PUGIXML_BUILD_DIR=${PUGIXML_BUILD_DIR:=${PUGIXML_SRC_DIR}/build}
|
||||
# Install area for pugixml (default to ext/dist)
|
||||
PUGIXML_INSTALL_DIR=${PUGIXML_INSTALL_DIR:=${PWD}/ext/dist}
|
||||
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
PUGIXML_INSTALL_DIR=${PUGIXML_INSTALL_DIR:=${LOCAL_DEPS_DIR}/dist}
|
||||
#PUGIXML_BUILD_OPTS=${PUGIXML_BUILD_OPTS:=}
|
||||
|
||||
pwd
|
||||
@@ -34,19 +34,19 @@ if [[ ! -e ${PUGIXML_SRC_DIR} ]] ; then
|
||||
git clone ${PUGIXML_REPO} ${PUGIXML_SRC_DIR}
|
||||
fi
|
||||
cd ${PUGIXML_SRC_DIR}
|
||||
echo "git checkout ${PUGIXML_BRANCH} --force"
|
||||
git checkout ${PUGIXML_BRANCH} --force
|
||||
echo "git checkout ${PUGIXML_VERSION} --force"
|
||||
git checkout ${PUGIXML_VERSION} --force
|
||||
|
||||
mkdir -p ${PUGIXML_BUILD_DIR}
|
||||
cd ${PUGIXML_BUILD_DIR}
|
||||
time cmake --config Release \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
time cmake -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${PUGIXML_INSTALL_DIR} \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_TESTS=OFF \
|
||||
${PUGIXML_BUILD_OPTS} ..
|
||||
time cmake --build . --config Release --target install
|
||||
|
||||
ls -R ${PUGIXML_INSTALL_DIR}
|
||||
# ls -R ${PUGIXML_INSTALL_DIR}
|
||||
popd
|
||||
|
||||
#echo "listing .."
|
||||
@@ -55,4 +55,4 @@ popd
|
||||
# Set up paths. These will only affect the caller if this script is
|
||||
# run with 'source' rather than in a separate shell.
|
||||
export pugixml_ROOT=$PUGIXML_INSTALL_DIR
|
||||
|
||||
export LD_LIBRARY_PATH=$pugixml_ROOT/lib:$pugixml_ROOT/lib64:$LD_LIBRARY_PATH
|
||||
|
||||
@@ -7,8 +7,7 @@ set -ex
|
||||
|
||||
# Repo and branch/tag/commit of pybind11 to download if we don't have it yet
|
||||
PYBIND11_REPO=${PYBIND11_REPO:=https://github.com/pybind/pybind11.git}
|
||||
PYBIND11_VERSION=${PYBIND11_VERSION:=2.4.3}
|
||||
PYBIND11_BRANCH=${PYBIND11_BRANCH:=v${PYBIND11_VERSION}}
|
||||
PYBIND11_VERSION=${PYBIND11_VERSION:=v2.5.0}
|
||||
|
||||
# Where to put pybind11 repo source (default to the ext area)
|
||||
PYBIND11_SRC_DIR=${PYBIND11_SRC_DIR:=${PWD}/ext/pybind11}
|
||||
@@ -35,18 +34,18 @@ if [[ ! -e ${PYBIND11_SRC_DIR} ]] ; then
|
||||
git clone ${PYBIND11_REPO} ${PYBIND11_SRC_DIR}
|
||||
fi
|
||||
cd ${PYBIND11_SRC_DIR}
|
||||
echo "git checkout ${PYBIND11_BRANCH} --force"
|
||||
git checkout ${PYBIND11_BRANCH} --force
|
||||
echo "git checkout ${PYBIND11_VERSION} --force"
|
||||
git checkout ${PYBIND11_VERSION} --force
|
||||
|
||||
mkdir -p ${PYBIND11_BUILD_DIR}
|
||||
cd ${PYBIND11_BUILD_DIR}
|
||||
time cmake --config Release \
|
||||
time cmake -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${PYBIND11_INSTALL_DIR} \
|
||||
-DPYBIND11_TEST=OFF \
|
||||
${PYBIND11_BUILD_OPTS} ..
|
||||
time cmake --build . --config Release --target install
|
||||
|
||||
ls -R ${PYBIND11_INSTALL_DIR}
|
||||
# ls -R ${PYBIND11_INSTALL_DIR}
|
||||
popd
|
||||
|
||||
#echo "listing .."
|
||||
|
||||
Executable
+62
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Utility script to download and build webp
|
||||
#
|
||||
# Copyright Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio
|
||||
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
# Repo and branch/tag/commit of webp to download if we don't have it yet
|
||||
WEBP_REPO=${WEBP_REPO:=https://github.com/webmproject/libwebp.git}
|
||||
WEBP_VERSION=${WEBP_VERSION:=v1.1.0}
|
||||
|
||||
# Where to put webp repo source (default to the ext area)
|
||||
LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=${PWD}/ext}
|
||||
WEBP_SRC_DIR=${WEBP_SRC_DIR:=${LOCAL_DEPS_DIR}/webp}
|
||||
WEBP_BUILD_DIR=${WEBP_BUILD_DIR:=${WEBP_SRC_DIR}/build}
|
||||
WEBP_INSTALL_DIR=${WEBP_INSTALL_DIR:=${LOCAL_DEPS_DIR}/dist}
|
||||
#WEBP_CONFIG_OPTS=${WEBP_CONFIG_OPTS:=}
|
||||
|
||||
pwd
|
||||
echo "webp install dir will be: ${WEBP_INSTALL_DIR}"
|
||||
|
||||
mkdir -p ./ext
|
||||
pushd ./ext
|
||||
|
||||
# Clone webp project from GitHub and build
|
||||
if [[ ! -e ${WEBP_SRC_DIR} ]] ; then
|
||||
echo "git clone ${WEBP_REPO} ${WEBP_SRC_DIR}"
|
||||
git clone ${WEBP_REPO} ${WEBP_SRC_DIR}
|
||||
fi
|
||||
cd ${WEBP_SRC_DIR}
|
||||
echo "git checkout ${WEBP_VERSION} --force"
|
||||
git checkout ${WEBP_VERSION} --force
|
||||
|
||||
mkdir -p ${WEBP_BUILD_DIR}
|
||||
cd ${WEBP_BUILD_DIR}
|
||||
time cmake -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${WEBP_INSTALL_DIR} \
|
||||
-DWEBP_BUILD_ANIM_UTILS=OFF \
|
||||
-DWEBP_BUILD_CWEBP=OFF \
|
||||
-DWEBP_BUILD_DWEBP=OFF \
|
||||
-DWEBP_BUILD_VWEBP=OFF \
|
||||
-DWEBP_BUILD_GIF2WEBPx=OFF \
|
||||
-DWEBP_BUILD_IMG2WEBP=OFF \
|
||||
-DWEBP_BUILD_EXTRAS=OFF \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
${WEBP_CONFIG_OPTS} ..
|
||||
time cmake --build . --config Release --target install
|
||||
|
||||
|
||||
|
||||
# ls -R ${WEBP_INSTALL_DIR}
|
||||
popd
|
||||
|
||||
|
||||
# Set up paths. These will only affect the caller if this script is
|
||||
# run with 'source' rather than in a separate shell.
|
||||
export WebP_ROOT=$WEBP_INSTALL_DIR
|
||||
|
||||
Executable
+53
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Utility script to download and build zlib
|
||||
#
|
||||
# Copyright Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio
|
||||
|
||||
# Exit the whole script if any command fails.
|
||||
set -ex
|
||||
|
||||
# Repo and branch/tag/commit of zlib to download if we don't have it yet
|
||||
ZLIB_REPO=${ZLIB_REPO:=https://github.com/madler/zlib.git}
|
||||
ZLIB_VERSION=${ZLIB_VERSION:=v1.2.11}
|
||||
|
||||
# Where to put zlib repo source (default to the ext area)
|
||||
ZLIB_SRC_DIR=${ZLIB_SRC_DIR:=${PWD}/ext/zlib}
|
||||
# Temp build area (default to a build/ subdir under source)
|
||||
ZLIB_BUILD_DIR=${ZLIB_BUILD_DIR:=${ZLIB_SRC_DIR}/build}
|
||||
# Install area for zlib (default to ext/dist)
|
||||
ZLIB_INSTALL_DIR=${ZLIB_INSTALL_DIR:=${PWD}/ext/dist}
|
||||
#ZLIB_CONFIG_OPTS=${ZLIB_CONFIG_OPTS:=}
|
||||
|
||||
pwd
|
||||
echo "zlib install dir will be: ${ZLIB_INSTALL_DIR}"
|
||||
|
||||
mkdir -p ./ext
|
||||
pushd ./ext
|
||||
|
||||
# Clone zlib project from GitHub and build
|
||||
if [[ ! -e ${ZLIB_SRC_DIR} ]] ; then
|
||||
echo "git clone ${ZLIB_REPO} ${ZLIB_SRC_DIR}"
|
||||
git clone ${ZLIB_REPO} ${ZLIB_SRC_DIR}
|
||||
fi
|
||||
cd ${ZLIB_SRC_DIR}
|
||||
echo "git checkout ${ZLIB_VERSION} --force"
|
||||
git checkout ${ZLIB_VERSION} --force
|
||||
|
||||
mkdir -p ${ZLIB_BUILD_DIR} && true
|
||||
cd ${ZLIB_BUILD_DIR}
|
||||
time cmake -DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${ZLIB_INSTALL_DIR} \
|
||||
${ZLIB_CONFIG_OPTS} ..
|
||||
time cmake --build . --config Release --target install
|
||||
|
||||
# ls -R ${ZLIB_INSTALL_DIR}
|
||||
popd
|
||||
|
||||
|
||||
# Set up paths. These will only affect the caller if this script is
|
||||
# run with 'source' rather than in a separate shell.
|
||||
export ZLIB_ROOT=$ZLIB_INSTALL_DIR
|
||||
|
||||
@@ -4,27 +4,9 @@
|
||||
# any command in it fails. This is crucial for CI tests.
|
||||
set -ex
|
||||
|
||||
# This script is run when CI system first starts up.
|
||||
# It expects that ci-setenv.bash was run first, so $PLATFORM and $ARCH
|
||||
# have been set.
|
||||
|
||||
if [[ -e src/build-scripts/ci-setenv.bash ]] ; then
|
||||
source src/build-scripts/ci-setenv.bash
|
||||
fi
|
||||
|
||||
if [[ ! -e build/$PLATFORM ]] ; then
|
||||
mkdir -p build/$PLATFORM
|
||||
fi
|
||||
if [[ ! -e dist/$PLATFORM ]] ; then
|
||||
mkdir -p dist/$PLATFORM
|
||||
fi
|
||||
|
||||
if [[ "$USE_SIMD" != "" ]] ; then
|
||||
MY_CMAKE_FLAGS="$MY_CMAKE_FLAGS -DUSE_SIMD=$USE_SIMD"
|
||||
fi
|
||||
if [[ "$DEBUG" == "1" ]] ; then
|
||||
export CMAKE_BUILD_TYPE=Debug
|
||||
fi
|
||||
|
||||
pushd build/$PLATFORM
|
||||
cmake ../.. -G "$CMAKE_GENERATOR" \
|
||||
@@ -40,17 +22,13 @@ if [[ "$BUILDTARGET" != "none" ]] ; then
|
||||
time cmake --build . --target ${BUILDTARGET:=install} --config ${CMAKE_BUILD_TYPE}
|
||||
fi
|
||||
popd
|
||||
#make $MAKEFLAGS VERBOSE=1 $BUILD_FLAGS config
|
||||
#make $MAKEFLAGS $PAR_MAKEFLAGS $BUILD_FLAGS $BUILDTARGET
|
||||
|
||||
#echo "OpenImageIO_ROOT $OpenImageIO_ROOT"
|
||||
#ls -R -l "$OpenImageIO_ROOT"
|
||||
|
||||
if [[ "${SKIP_TESTS:=0}" == "0" ]] ; then
|
||||
$OpenImageIO_ROOT/bin/oiiotool --help || true
|
||||
TESTSUITE_CLEANUP_ON_SUCCESS=1
|
||||
echo "Parallel test " ${CTEST_PARALLEL_LEVEL}
|
||||
make $BUILD_FLAGS test
|
||||
if [[ "${DEBUG_CI:=0}" != "0" ]] ; then
|
||||
echo "PATH=$PATH"
|
||||
echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
|
||||
echo "PYTHONPATH=$PYTHONPATH"
|
||||
echo "ldd oiiotool"
|
||||
ldd $OpenImageIO_ROOT/bin/oiiotool
|
||||
fi
|
||||
|
||||
if [[ "$BUILDTARGET" == clang-format ]] ; then
|
||||
@@ -61,7 +39,3 @@ if [[ "$BUILDTARGET" == clang-format ]] ; then
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# if [[ "$CODECOV" == 1 ]] ; then
|
||||
# bash <(curl -s https://codecov.io/bash)
|
||||
# fi
|
||||
@@ -5,20 +5,21 @@
|
||||
# with 'source', not in a separate shell.
|
||||
|
||||
# Figure out the platform
|
||||
if [[ $TRAVIS_OS_NAME == osx || $RUNNER_OS == macOS ]] ; then
|
||||
export ARCH=macosx
|
||||
if [[ $RUNNER_OS == macOS ]] ; then
|
||||
export ARCH=macosx
|
||||
elif [[ $RUNNER_OS == Linux ]] ; then
|
||||
export ARCH=linux64
|
||||
elif [[ $RUNNER_OS == Windows ]] ; then
|
||||
export ARCH=windows64
|
||||
elif [[ `uname -m` == aarch64 ]] ; then
|
||||
export ARCH=aarch64
|
||||
elif [[ $TRAVIS_OS_NAME == linux || $RUNNER_OS == Linux || $CIRCLECI == true ]] ; then
|
||||
export ARCH=linux64
|
||||
elif [[ $RUNNER_OS == Windows ]] ; then
|
||||
export ARCH=windows64
|
||||
else
|
||||
export ARCH=unknown
|
||||
exit -1
|
||||
fi
|
||||
export PLATFORM=$ARCH
|
||||
|
||||
if [[ "$DEBUG" == 1 ]] ; then
|
||||
if [[ "${DEBUG:=0}" != "0" ]] ; then
|
||||
export PLATFORM=${PLATFORM}.debug
|
||||
fi
|
||||
|
||||
@@ -26,8 +27,15 @@ echo "Architecture is $ARCH"
|
||||
echo "Build platform name is $PLATFORM"
|
||||
|
||||
# Environment variables we always need
|
||||
export PATH=/usr/local/bin/_ccache:/usr/lib/ccache:$PATH
|
||||
export USE_CCACHE=${USE_CCACHE:=1}
|
||||
export CCACHE_CPP2=1
|
||||
export CCACHE_CPP2=
|
||||
export CCACHE_DIR=/tmp/ccache
|
||||
if [[ "${RUNNER_OS}" == "macOS" ]] ; then
|
||||
export CCACHE_DIR=$HOME/.ccache
|
||||
fi
|
||||
mkdir -p $CCACHE_DIR
|
||||
|
||||
export OpenImageIO_ROOT=$PWD/dist/$PLATFORM
|
||||
export DYLD_LIBRARY_PATH=$OpenImageIO_ROOT/lib:$DYLD_LIBRARY_PATH
|
||||
export LD_LIBRARY_PATH=$OpenImageIO_ROOT/lib:$LD_LIBRARY_PATH
|
||||
@@ -47,25 +55,25 @@ export CMAKE_GENERATOR=${CMAKE_GENERATOR:=Ninja}
|
||||
export CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:=Release}
|
||||
export CMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD:=11}
|
||||
|
||||
if [[ $TRAVIS == true && "$ARCH" == aarch64 ]] ; then
|
||||
export PARALLEL=4
|
||||
elif [[ $TRAVIS == true ]] ; then
|
||||
export PARALLEL=2
|
||||
elif [[ $CIRCLECI == true ]] ; then
|
||||
export PARALLEL=4
|
||||
elif [[ $GITHUB_ACTIONS == true ]] ; then
|
||||
export PARALLEL=4
|
||||
fi
|
||||
export PARALLEL=${PARALLEL:=4}
|
||||
export PAR_MAKEFLAGS=-j${PARALLEL}
|
||||
export CMAKE_BUILD_PARALLEL_LEVEL=${CMAKE_BUILD_PARALLEL_LEVEL:=${PARALLEL}}
|
||||
export CTEST_PARALLEL_LEVEL=${CTEST_PARALLEL_LEVEL:=${PARALLEL}}
|
||||
|
||||
export LOCAL_DEPS_DIR=${LOCAL_DEPS_DIR:=$HOME/ext}
|
||||
export PATH=${LOCAL_DEPS_DIR}/bin:$PATH
|
||||
export LD_LIBRARY_PATH=${LOCAL_DEPS_DIR}/lib:$LD_LIBRARY_PATH
|
||||
export DYLD_LIBRARY_PATH=${LOCAL_DEPS_DIR}/lib:$DYLD_LIBRARY_PATH
|
||||
export PATH=${LOCAL_DEPS_DIR}/dist/bin:$PATH
|
||||
export LD_LIBRARY_PATH=${LOCAL_DEPS_DIR}/dist/lib:$LD_LIBRARY_PATH
|
||||
export LD_LIBRARY_PATH=${LOCAL_DEPS_DIR}/dist/lib64:$LD_LIBRARY_PATH
|
||||
export DYLD_LIBRARY_PATH=${LOCAL_DEPS_DIR}/dist/lib:$DYLD_LIBRARY_PATH
|
||||
|
||||
export OCIO="$PWD/testsuite/common/OpenColorIO/nuke-default/config.ocio"
|
||||
export TESTSUITE_CLEANUP_ON_SUCCESS=${TESTSUITE_CLEANUP_ON_SUCCESS:=1}
|
||||
|
||||
mkdir -p build/$PLATFORM dist/$PLATFORM
|
||||
|
||||
echo "HOME = $HOME"
|
||||
echo "PWD = $PWD"
|
||||
echo "LOCAL_DEPS_DIR = $LOCAL_DEPS_DIR"
|
||||
echo "uname -a: " `uname -a`
|
||||
echo "uname -m: " `uname -m`
|
||||
echo "uname -s: " `uname -s`
|
||||
@@ -79,3 +87,6 @@ if [[ `uname -s` == "Linux" ]] ; then
|
||||
elif [[ $ARCH == macosx ]] ; then
|
||||
sysctl machdep.cpu.features
|
||||
fi
|
||||
|
||||
# Save the env for use by other stages
|
||||
src/build-scripts/save-env.bash
|
||||
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Important: set -ex causes this whole script to terminate with error if
|
||||
# any command in it fails. This is crucial for CI tests.
|
||||
set -ex
|
||||
|
||||
$OpenImageIO_ROOT/bin/oiiotool --help || true
|
||||
|
||||
echo "Parallel test " ${CTEST_PARALLEL_LEVEL}
|
||||
pushd build/$PLATFORM
|
||||
time ctest -C ${CMAKE_BUILD_TYPE} -E broken --force-new-ctest-process \
|
||||
--output-on-failure --timeout ${CTEST_TEST_TIMEOUT:=180} ${CTEST_ARGS}
|
||||
popd
|
||||
|
||||
|
||||
# if [[ "$CODECOV" == 1 ]] ; then
|
||||
# bash <(curl -s https://codecov.io/bash)
|
||||
# fi
|
||||
@@ -1,48 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
|
||||
set -ex
|
||||
|
||||
echo "Which g++ " `which g++`
|
||||
g++ --version && true
|
||||
ls /usr/bin/g++* && true
|
||||
/usr/bin/g++ --version && true
|
||||
|
||||
export PATH=/opt/rh/devtoolset-6/root/usr/bin:/usr/local/bin:$PATH
|
||||
#ls /opt/rh/devtoolset-6/root/usr/bin && true
|
||||
#ls /usr/local/bin
|
||||
|
||||
ls /etc/yum.repos.d
|
||||
|
||||
sudo yum install -y giflib giflib-devel && true
|
||||
sudo yum install -y opencv opencv-devel && true
|
||||
sudo yum install -y Field3D Field3D-devel && true
|
||||
|
||||
#sudo rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro && true
|
||||
#sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm && true
|
||||
sudo yum install -y ffmpeg ffmpeg-devel && true
|
||||
|
||||
|
||||
|
||||
if [[ "$CXX" == "clang++" ]] ; then
|
||||
source src/build-scripts/build_llvm.bash
|
||||
fi
|
||||
|
||||
|
||||
src/build-scripts/install_test_images.bash
|
||||
|
||||
source src/build-scripts/build_pybind11.bash
|
||||
|
||||
if [[ "$OPENEXR_BRANCH" || "$OPENEXR_VERSION" ]] ; then
|
||||
source src/build-scripts/build_openexr.bash
|
||||
fi
|
||||
|
||||
if [[ "$LIBTIFF_BRANCH" || "$LIBTIFF_VERSION" ]] ; then
|
||||
source src/build-scripts/build_libtiff.bash
|
||||
fi
|
||||
|
||||
if [[ "$OCIO_BRANCH" || "$OCIO_VERSION" ]] ; then
|
||||
# Temporary (?) fix: GH ninja having problems, fall back to make
|
||||
CMAKE_GENERATOR="Unix Makefiles" \
|
||||
source src/build-scripts/build_ocio.bash
|
||||
fi
|
||||
@@ -3,96 +3,136 @@
|
||||
|
||||
set -ex
|
||||
|
||||
#dpkg --list
|
||||
|
||||
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
|
||||
time sudo apt-get update
|
||||
#
|
||||
# Install system packages when those are acceptable for dependencies.
|
||||
#
|
||||
if [[ "$ASWF_ORG" != "" ]] ; then
|
||||
# Using ASWF CentOS container
|
||||
|
||||
time sudo apt-get -q install -y \
|
||||
git \
|
||||
cmake \
|
||||
ninja-build \
|
||||
g++ \
|
||||
ccache \
|
||||
libboost-dev libboost-thread-dev \
|
||||
libboost-filesystem-dev libboost-regex-dev \
|
||||
libtiff-dev \
|
||||
libilmbase-dev libopenexr-dev \
|
||||
python-dev python-numpy \
|
||||
libgif-dev \
|
||||
libpng-dev \
|
||||
libraw-dev \
|
||||
libwebp-dev \
|
||||
libfreetype6-dev \
|
||||
libavcodec-dev libavformat-dev libswscale-dev libavutil-dev \
|
||||
locales \
|
||||
libopencolorio-dev \
|
||||
wget \
|
||||
libtbb-dev \
|
||||
libopenvdb-dev \
|
||||
libopencv-dev \
|
||||
ptex-base \
|
||||
dcmtk \
|
||||
libsquish-dev \
|
||||
qt5-default \
|
||||
libhdf5-dev
|
||||
export PATH=/opt/rh/devtoolset-6/root/usr/bin:/usr/local/bin:$PATH
|
||||
|
||||
# Disable libheif on CI for now... seems to make crashes in CI tests.
|
||||
# Works fine for me in real life. Investigate.
|
||||
#if [[ "$USE_LIBHEIF" != "0" ]] ; then
|
||||
# sudo add-apt-repository ppa:strukturag/libde265
|
||||
# sudo add-apt-repository ppa:strukturag/libheif
|
||||
# time sudo apt-get -q install -y libheif-dev
|
||||
#fi
|
||||
#ls /etc/yum.repos.d
|
||||
|
||||
export CMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu:$CMAKE_PREFIX_PATH
|
||||
sudo yum install -y giflib giflib-devel && true
|
||||
sudo yum install -y opencv opencv-devel && true
|
||||
sudo yum install -y Field3D Field3D-devel && true
|
||||
sudo yum install -y ffmpeg ffmpeg-devel && true
|
||||
if [[ "${EXTRA_DEP_PACKAGES}" != "" ]] ; then
|
||||
time sudo yum install -y ${EXTRA_DEP_PACKAGES}
|
||||
fi
|
||||
else
|
||||
# Using native Ubuntu runner
|
||||
|
||||
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
|
||||
time sudo apt-get update
|
||||
|
||||
time sudo apt-get -q install -y \
|
||||
git cmake ninja-build ccache g++ \
|
||||
libboost-dev libboost-thread-dev \
|
||||
libboost-filesystem-dev libboost-regex-dev \
|
||||
libilmbase-dev libopenexr-dev \
|
||||
libtbb-dev \
|
||||
libtiff-dev libgif-dev libpng-dev libraw-dev libwebp-dev \
|
||||
libavcodec-dev libavformat-dev libswscale-dev libavutil-dev \
|
||||
dcmtk libsquish-dev libopenvdb-dev \
|
||||
libfreetype6-dev \
|
||||
locales wget \
|
||||
libopencolorio-dev \
|
||||
libopencv-dev \
|
||||
qt5-default \
|
||||
libhdf5-dev
|
||||
if [[ "${EXTRA_DEP_PACKAGES}" != "" ]] ; then
|
||||
time sudo apt-get -q install -y ${EXTRA_DEP_PACKAGES}
|
||||
fi
|
||||
|
||||
# Nonstandard python versions
|
||||
if [[ "${PYTHON_VERSION}" == "3.9" ]] ; then
|
||||
time sudo apt-get -q install -y python3.9-dev python3-numpy
|
||||
pip3 --version
|
||||
pip3 install numpy
|
||||
elif [[ "$PYTHON_VERSION" == "2.7" ]] ; then
|
||||
time sudo apt-get -q install -y python-dev python-numpy
|
||||
else
|
||||
pip3 install numpy
|
||||
fi
|
||||
|
||||
if [[ "$USE_LIBHEIF" != "0" ]] ; then
|
||||
sudo add-apt-repository ppa:strukturag/libde265
|
||||
sudo add-apt-repository ppa:strukturag/libheif
|
||||
time sudo apt-get -q install -y libheif-dev
|
||||
fi
|
||||
|
||||
export CMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu:$CMAKE_PREFIX_PATH
|
||||
|
||||
if [[ "$CXX" == "g++-4.8" ]] ; then
|
||||
time sudo apt-get install -y g++-4.8
|
||||
elif [[ "$CXX" == "g++-6" ]] ; then
|
||||
time sudo apt-get install -y g++-6
|
||||
elif [[ "$CXX" == "g++-7" ]] ; then
|
||||
time sudo apt-get install -y g++-7
|
||||
elif [[ "$CXX" == "g++-8" ]] ; then
|
||||
time sudo apt-get install -y g++-8
|
||||
elif [[ "$CXX" == "g++-9" ]] ; then
|
||||
time sudo apt-get install -y g++-9
|
||||
elif [[ "$CXX" == "g++-10" ]] ; then
|
||||
time sudo apt-get install -y g++-10
|
||||
elif [[ "$CXX" == "g++-11" ]] ; then
|
||||
time sudo apt-get install -y g++-11
|
||||
fi
|
||||
|
||||
if [[ "$CXX" == "g++-4.8" ]] ; then
|
||||
time sudo apt-get install -y g++-4.8
|
||||
elif [[ "$CXX" == "g++-6" ]] ; then
|
||||
time sudo apt-get install -y g++-6
|
||||
elif [[ "$CXX" == "g++-7" ]] ; then
|
||||
time sudo apt-get install -y g++-7
|
||||
elif [[ "$CXX" == "g++-8" ]] ; then
|
||||
time sudo apt-get install -y g++-8
|
||||
elif [[ "$CXX" == "g++-9" ]] ; then
|
||||
time sudo apt-get install -y g++-9
|
||||
elif [[ "$CXX" == "g++-10" ]] ; then
|
||||
time sudo apt-get install -y g++-10
|
||||
fi
|
||||
|
||||
# time sudo apt-get install -y clang
|
||||
# time sudo apt-get install -y llvm
|
||||
#time sudo apt-get install -y libopenjpeg-dev
|
||||
#time sudo apt-get install -y libjpeg-turbo8-dev
|
||||
echo "Which python3 " `which python3`
|
||||
python3 --version && true
|
||||
cmake --version
|
||||
|
||||
#dpkg --list
|
||||
|
||||
if [[ "$CXX" == "clang++" ]] ; then
|
||||
#
|
||||
# If we're using clang to compile on native Ubuntu, we need to install it.
|
||||
# If on an ASWF CentOS docker container, it already is installed.
|
||||
#
|
||||
if [[ "$CXX" == "clang++" && "$ASWF_ORG" == "" ]] ; then
|
||||
source src/build-scripts/build_llvm.bash
|
||||
fi
|
||||
|
||||
|
||||
|
||||
#
|
||||
# Packages we need to build from scratch.
|
||||
#
|
||||
|
||||
source src/build-scripts/build_pybind11.bash
|
||||
|
||||
if [[ "$OPENEXR_VERSION" != "" ]] ; then
|
||||
source src/build-scripts/build_openexr.bash
|
||||
fi
|
||||
|
||||
if [[ "$WEBP_VERSION" != "" ]] ; then
|
||||
source src/build-scripts/build_webp.bash
|
||||
fi
|
||||
|
||||
if [[ "$LIBTIFF_VERSION" != "" ]] ; then
|
||||
source src/build-scripts/build_libtiff.bash
|
||||
fi
|
||||
|
||||
if [[ "$LIBRAW_VERSION" != "" ]] ; then
|
||||
source src/build-scripts/build_libraw.bash
|
||||
fi
|
||||
|
||||
if [[ "$PUGIXML_VERSION" != "" ]] ; then
|
||||
source src/build-scripts/build_pugixml.bash
|
||||
export MY_CMAKE_FLAGS+=" -DUSE_EXTERNAL_PUGIXML=1 "
|
||||
fi
|
||||
|
||||
if [[ "$OPENCOLORIO_VERSION" != "" ]] ; then
|
||||
source src/build-scripts/build_opencolorio.bash
|
||||
fi
|
||||
|
||||
if [[ "$PTEX_VERSION" != "" ]] ; then
|
||||
source src/build-scripts/build_Ptex.bash
|
||||
fi
|
||||
|
||||
src/build-scripts/install_test_images.bash
|
||||
|
||||
CXX="ccache $CXX" source src/build-scripts/build_pybind11.bash
|
||||
|
||||
if [[ "$OPENEXR_BRANCH" || "$OPENEXR_VERSION" ]] ; then
|
||||
CXX="ccache $CXX" source src/build-scripts/build_openexr.bash
|
||||
fi
|
||||
|
||||
if [[ "$LIBTIFF_BRANCH" || "$LIBTIFF_VERSION" ]] ; then
|
||||
CXX="ccache $CXX" source src/build-scripts/build_libtiff.bash
|
||||
fi
|
||||
|
||||
if [[ "$LIBRAW_BRANCH" || "$LIBRAW_VERSION" ]] ; then
|
||||
CXX="ccache $CXX" source src/build-scripts/build_libraw.bash
|
||||
fi
|
||||
|
||||
if [[ "$OCIO_BRANCH" || "$OCIO_VERSION" ]] ; then
|
||||
# Temporary (?) fix: GH ninja having problems, fall back to make
|
||||
CMAKE_GENERATOR="Unix Makefiles" \
|
||||
source src/build-scripts/build_ocio.bash
|
||||
fi
|
||||
# Save the env for use by other stages
|
||||
src/build-scripts/save-env.bash
|
||||
|
||||
@@ -4,93 +4,127 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio/blob/master/LICENSE.md
|
||||
|
||||
if [[ ! -e build/$PLATFORM ]] ; then
|
||||
mkdir -p build/$PLATFORM
|
||||
fi
|
||||
if [[ ! -e dist/$PLATFORM ]] ; then
|
||||
mkdir -p dist/$PLATFORM
|
||||
fi
|
||||
|
||||
# DEP_DIR="$PWD/ext/dist"
|
||||
DEP_DIR="$PWD/dist/$PLATFORM"
|
||||
mkdir -p "$DEP_DIR"
|
||||
mkdir -p ext && true
|
||||
INT_DIR="build/$PLATFORM"
|
||||
VCPKG_INSTALLATION_ROOT=/c/vcpkg
|
||||
|
||||
export CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH:=.}
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;$DEP_DIR"
|
||||
export BOOST_ROOT=${BOOST_ROOT_1_72_0}
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;$BOOST_ROOT"
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;$VCPKG_INSTALLATION_ROOT/installed/x64-windows"
|
||||
export PATH="$PATH:$DEP_DIR/bin:$DEP_DIR/lib:$VCPKG_INSTALLATION_ROOT/installed/x64-windows/bin:/bin"
|
||||
export PATH="$PATH:$DEP_DIR/bin:$DEP_DIR/lib:$VCPKG_INSTALLATION_ROOT/installed/x64-windows/bin:/bin:$PWD/ext/dist/bin:$PWD/ext/dist/lib"
|
||||
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DEP_DIR/bin:$VCPKG_INSTALLATION_ROOT/installed/x64-windows/bin"
|
||||
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DEP_DIR/lib:$VCPKG_INSTALLATION_ROOT/installed/x64-windows/lib"
|
||||
|
||||
# export MY_CMAKE_FLAGS="$MY_CMAKE_FLAGS -DCMAKE_TOOLCHAIN_FILE=$VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake"
|
||||
# export OPENEXR_CMAKE_FLAGS="$OPENEXR_CMAKE_FLAGS -DCMAKE_TOOLCHAIN_FILE=$VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake"
|
||||
|
||||
ls -l "C:/Program Files (x86)/Microsoft Visual Studio/*/Enterprise/VC/Tools/MSVC" && true
|
||||
ls -l "C:/Program Files (x86)/Microsoft Visual Studio" && true
|
||||
#ls -l "C:/Program Files (x86)/Microsoft Visual Studio/*/Enterprise/VC/Tools/MSVC" && true
|
||||
#ls -l "C:/Program Files (x86)/Microsoft Visual Studio" && true
|
||||
|
||||
|
||||
if [[ "$PYTHON_VERSION" == "3.6" ]] ; then
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;/c/hostedtoolcache/windows/Python/3.6.8/x64"
|
||||
else
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;/c/hostedtoolcache/windows/Python/3.7.9/x64"
|
||||
export Python_EXECUTABLE="/c/hostedtoolcache/windows/Python/3.7.9/x64/python.exe"
|
||||
export PYTHONPATH=$OpenImageIO_ROOT/lib/python${PYTHON_VERSION}/site-packages
|
||||
fi
|
||||
pip install numpy
|
||||
|
||||
|
||||
########################################################################
|
||||
# Dependency method #1: Use vcpkg (disabled)
|
||||
#
|
||||
# Currently we are not using this, but here it is for reference:
|
||||
#
|
||||
echo "All pre-installed VCPkg installs:"
|
||||
vcpkg list
|
||||
vcpkg update
|
||||
echo "---------------"
|
||||
# vcpkg update
|
||||
#
|
||||
|
||||
# vcpkg install zlib:x64-windows
|
||||
time vcpkg install boost-asio:x64-windows
|
||||
time vcpkg install boost-container:x64-windows
|
||||
time vcpkg install boost-filesystem:x64-windows
|
||||
time vcpkg install boost-math:x64-windows
|
||||
time vcpkg install boost-regex:x64-windows
|
||||
time vcpkg install boost-stacktrace:x64-windows
|
||||
time vcpkg install boost-system:x64-windows
|
||||
time vcpkg install boost-thread:x64-windows
|
||||
time vcpkg install boost-tokenizer:x64-windows
|
||||
|
||||
# # vcpkg install zlib:x64-windows
|
||||
vcpkg install tiff:x64-windows
|
||||
vcpkg install libpng:x64-windows
|
||||
vcpkg install giflib:x64-windows
|
||||
# vcpkg install libpng:x64-windows
|
||||
# vcpkg install giflib:x64-windows
|
||||
vcpkg install freetype:x64-windows
|
||||
# vcpkg install openexr:x64-windows
|
||||
# vcpkg install libjpeg-turbo:x64-windows
|
||||
|
||||
vcpkg install libraw:x64-windows
|
||||
vcpkg install openjpeg:x64-windows
|
||||
vcpkg install libsquish:x64-windows
|
||||
# vcpkg install ffmpeg:x64-windows # takes FOREVER!
|
||||
# vcpkg install webp:x64-windows # No such vcpkg package?a
|
||||
|
||||
echo "$VCPKG_INSTALLATION_ROOT"
|
||||
ls "$VCPKG_INSTALLATION_ROOT"
|
||||
echo "$VCPKG_INSTALLATION_ROOT/installed/x64-windows"
|
||||
ls "$VCPKG_INSTALLATION_ROOT/installed/x64-windows"
|
||||
echo "$VCPKG_INSTALLATION_ROOT/installed/x64-windows/lib"
|
||||
ls "$VCPKG_INSTALLATION_ROOT/installed/x64-windows/lib"
|
||||
echo "$VCPKG_INSTALLATION_ROOT/installed/x64-windows/bin"
|
||||
ls "$VCPKG_INSTALLATION_ROOT/installed/x64-windows/bin"
|
||||
|
||||
# # vcpkg install openexr:x64-windows
|
||||
vcpkg install libjpeg-turbo:x64-windows
|
||||
#
|
||||
# vcpkg install libraw:x64-windows
|
||||
# vcpkg install openjpeg:x64-windows
|
||||
# vcpkg install libsquish:x64-windows
|
||||
# # vcpkg install ffmpeg:x64-windows # takes FOREVER!
|
||||
# # vcpkg install webp:x64-windows # No such vcpkg package?a
|
||||
#
|
||||
# #echo "$VCPKG_INSTALLATION_ROOT"
|
||||
# #ls "$VCPKG_INSTALLATION_ROOT"
|
||||
# #echo "$VCPKG_INSTALLATION_ROOT/installed/x64-windows"
|
||||
# #ls "$VCPKG_INSTALLATION_ROOT/installed/x64-windows"
|
||||
# #echo "$VCPKG_INSTALLATION_ROOT/installed/x64-windows/lib"
|
||||
# #ls "$VCPKG_INSTALLATION_ROOT/installed/x64-windows/lib"
|
||||
# #echo "$VCPKG_INSTALLATION_ROOT/installed/x64-windows/bin"
|
||||
# #ls "$VCPKG_INSTALLATION_ROOT/installed/x64-windows/bin"
|
||||
#
|
||||
# # export PATH="$PATH:$DEP_DIR/bin:$VCPKG_INSTALLATION_ROOT/installed/x64-windows/bin"
|
||||
# export PATH="$DEP_DIR/lib:$DEP_DIR/bin:$PATH:$VCPKG_INSTALLATION_ROOT/installed/x64-windows/lib"
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;$VCPKG_INSTALLATION_ROOT/installed/x64-windows/lib"
|
||||
# export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$VCPKG_INSTALLATION_ROOT/installed/x64-windows/lib:$DEP_DIR/lib:$DEP_DIR/bin"
|
||||
#
|
||||
echo "All VCPkg installs:"
|
||||
vcpkg list
|
||||
#
|
||||
########################################################################
|
||||
|
||||
# curl --location https://ffmpeg.zeranoe.com/builds/win64/shared/ffmpeg-4.2.1-win64-shared.zip -o ffmpeg-libs.zip
|
||||
# unzip ffmpeg-libs.zip
|
||||
curl --location https://ffmpeg.zeranoe.com/builds/win64/dev/ffmpeg-4.2.1-win64-dev.zip -o ffmpeg-dev.zip
|
||||
unzip ffmpeg-dev.zip
|
||||
ls
|
||||
ls -R *ffmpeg*
|
||||
FFmpeg_ROOT=$PWD/ffmpeg-4.2.1-win64-dev
|
||||
|
||||
########################################################################
|
||||
# Dependency method #2: Build from source ourselves
|
||||
#
|
||||
#
|
||||
|
||||
# src/build-scripts/build_zlib.bash
|
||||
# export ZLIB_ROOT=$PWD/ext/dist
|
||||
|
||||
# src/build-scripts/build_libpng.bash
|
||||
# export PNG_ROOT=$PWD/ext/dist
|
||||
|
||||
# We're currently getting libtiff from vcpkg
|
||||
#src/build-scripts/build_libtiff.bash
|
||||
#export TIFF_ROOT=$PWD/ext/dist
|
||||
|
||||
# We're currently getting jpeg from vcpkg
|
||||
# LIBJPEGTURBO_CONFIG_OPTS=-DWITH_SIMD=OFF
|
||||
# # ^^ because we're too lazy to build nasm
|
||||
# src/build-scripts/build_libjpeg-turbo.bash
|
||||
# export JPEGTurbo_ROOT=$PWD/ext/dist
|
||||
|
||||
source src/build-scripts/build_pybind11.bash
|
||||
#export pybind11_ROOT=$PWD/ext/dist
|
||||
|
||||
|
||||
# curl --location https://ffmpeg.zeranoe.com/builds/win64/dev/ffmpeg-4.2.1-win64-dev.zip -o ffmpeg-dev.zip
|
||||
# unzip ffmpeg-dev.zip
|
||||
# FFmpeg_ROOT=$PWD/ffmpeg-4.2.1-win64-dev
|
||||
|
||||
echo "CMAKE_PREFIX_PATH = $CMAKE_PREFIX_PATH"
|
||||
|
||||
mkdir ext
|
||||
|
||||
# ZLib
|
||||
pushd ext
|
||||
git clone -b v1.2.11 https://github.com/madler/zlib.git
|
||||
cd zlib
|
||||
mkdir -p $INT_DIR
|
||||
cd $INT_DIR
|
||||
cmake ../.. -G "$CMAKE_GENERATOR" -DCMAKE_CONFIGURATION_TYPES="$CMAKE_BUILD_TYPE" -DCMAKE_PREFIX_PATH="$DEP_DIR" -DCMAKE_INSTALL_PREFIX="$DEP_DIR"
|
||||
cmake --build . --config $CMAKE_BUILD_TYPE --target install
|
||||
popd
|
||||
export MY_CMAKE_FLAGS="$MY_CMAKE_FLAGS -DZLIB_LIBRARY=$DEP_DIR/lib/zlib.lib"
|
||||
export OPENEXR_CMAKE_FLAGS="$OPENEXR_CMAKE_FLAGS -DZLIB_LIBRARY=$DEP_DIR/lib/zlib.lib"
|
||||
|
||||
source src/build-scripts/build_pybind11.bash
|
||||
|
||||
OPENEXR_CXX_FLAGS=" /W1 /EHsc /DWIN32=1 "
|
||||
#OPENEXR_BUILD_TYPE=$CMAKE_BUILD_TYPE
|
||||
OPENEXR_INSTALL_DIR=$DEP_DIR
|
||||
OPENEXR_BRANCH=v2.4.0
|
||||
source src/build-scripts/build_openexr.bash
|
||||
export PATH="$OPENEXR_INSTALL_DIR/bin:$OPENEXR_INSTALL_DIR/lib:$PATH"
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PATH
|
||||
@@ -102,22 +136,13 @@ echo "DEP_DIR $DEP_DIR :"
|
||||
ls -R -l "$DEP_DIR"
|
||||
|
||||
|
||||
# export PATH="$PATH:$DEP_DIR/bin:$VCPKG_INSTALLATION_ROOT/installed/x64-windows/bin"
|
||||
export PATH="$DEP_DIR/lib:$DEP_DIR/bin:$PATH:$VCPKG_INSTALLATION_ROOT/installed/x64-windows/lib"
|
||||
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$VCPKG_INSTALLATION_ROOT/installed/x64-windows/lib:$DEP_DIR/lib:$DEP_DIR/bin"
|
||||
|
||||
src/build-scripts/install_test_images.bash
|
||||
|
||||
ls /c/hostedtoolcache/windows/Python
|
||||
echo "/c/hostedtoolcache/windows/Python/3.6.8/x64"
|
||||
ls /c/hostedtoolcache/windows/Python/3.6.8/x64
|
||||
|
||||
|
||||
# source src/build-scripts/build_openexr.bash
|
||||
# export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;$ILMBASE_ROOT;$OPENEXR_ROOT"
|
||||
# source src/build-scripts/build_ocio.bash
|
||||
# source src/build-scripts/build_opencolorio.bash
|
||||
|
||||
|
||||
if [[ "$PYTHON_VERSION" == "3.6" ]] ; then
|
||||
export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;/c/hostedtoolcache/windows/Python/3.6.8/x64"
|
||||
fi
|
||||
# Save the env for use by other stages
|
||||
src/build-scripts/save-env.bash
|
||||
|
||||
@@ -16,53 +16,40 @@ if [[ `which brew` == "" ]] ; then
|
||||
fi
|
||||
|
||||
|
||||
brew update >/dev/null
|
||||
#brew update >/dev/null
|
||||
echo ""
|
||||
echo "Before my brew installs:"
|
||||
brew list --versions
|
||||
|
||||
if [[ "$BUILDTARGET" == "clang-format" ]] ; then
|
||||
# If we are running for the sake of clang-format only, just install the
|
||||
# bare minimum packages and return.
|
||||
brew install --display-times ilmbase openexr llvm clang-format libtiff libpng boost ninja giflib
|
||||
brew install --display-times python pybind11 && true
|
||||
brew upgrade --display-times python && true
|
||||
brew link --overwrite python
|
||||
brew upgrade --display-times cmake && true
|
||||
else
|
||||
# All cases except for clang-format target, we need the dependencies.
|
||||
brew install --display-times gcc ccache cmake ninja boost && true
|
||||
brew link --overwrite gcc
|
||||
brew install --display-times python && true
|
||||
brew upgrade --display-times python && true
|
||||
brew link --overwrite python
|
||||
brew upgrade --display-times cmake && true
|
||||
brew install --display-times libtiff ilmbase openexr opencolorio
|
||||
brew install --display-times libpng giflib webp jpeg-turbo openjpeg
|
||||
brew install --display-times freetype libraw dcmtk pybind11 numpy && true
|
||||
brew install --display-times ffmpeg libheif libsquish
|
||||
brew install --display-times openvdb tbb
|
||||
brew install --display-times opencv qt ptex
|
||||
brew install --display-times field3d && true
|
||||
fi
|
||||
|
||||
if [[ "$LINKSTATIC" == "1" ]] ; then
|
||||
brew install --display-times little-cms2 tinyxml szip
|
||||
brew install --display-times homebrew/dupes/bzip2
|
||||
brew install --display-times yaml-cpp --with-static-lib
|
||||
fi
|
||||
if [[ "$CLANG_TIDY" != "" ]] ; then
|
||||
# If we are running for the sake of clang-tidy only, we will need
|
||||
# a modern clang version not just the xcode one.
|
||||
brew install --display-times llvm
|
||||
fi
|
||||
# All cases except for clang-format target, we need the dependencies.
|
||||
brew install --display-times -q gcc ccache cmake ninja boost || true
|
||||
brew link --overwrite gcc
|
||||
brew unlink python@2.7 || true
|
||||
brew unlink python@3.9 || true
|
||||
brew unlink python@3.8 || true
|
||||
brew link --overwrite --force python@${PYTHON_VERSION} || true
|
||||
brew upgrade --display-times -q cmake || true
|
||||
brew install --display-times -q libtiff imath openexr opencolorio
|
||||
brew install --display-times -q libpng giflib webp jpeg-turbo openjpeg
|
||||
brew install --display-times -q freetype libraw dcmtk pybind11 numpy || true
|
||||
brew install --display-times -q ffmpeg libheif libsquish ptex || true
|
||||
brew install --display-times -q tbb || true
|
||||
# No OpenVDB until it's upgraded to use Imath 3
|
||||
# brew install --display-times -q openvdb || true
|
||||
brew install --display-times -q opencv || true
|
||||
brew install --display-times -q qt@5
|
||||
brew install --display-times -q field3d || true
|
||||
|
||||
echo ""
|
||||
echo "After brew installs:"
|
||||
brew list --versions
|
||||
|
||||
# Needed on some systems
|
||||
pip install numpy
|
||||
if [[ $PYTHON_VERSION != "2.7" ]] ; then
|
||||
pip3 install numpy
|
||||
else
|
||||
pip install numpy
|
||||
fi
|
||||
|
||||
# Set up paths. These will only affect the caller if this script is
|
||||
# run with 'source' rather than in a separate shell.
|
||||
@@ -73,5 +60,9 @@ export PATH=/usr/local/opt/llvm/bin:$PATH ;
|
||||
|
||||
# If field3d and hdf5 get even slightly out of sync, hdf5 will throw fits.
|
||||
# This is unnecessary, so we disable the step to make CI more likely to
|
||||
# pass in cases where they don't exactly match on the Travis/GH instances.
|
||||
# pass in cases where they don't exactly match on the CI instances.
|
||||
export HDF5_DISABLE_VERSION_CHECK=1
|
||||
|
||||
|
||||
# Save the env for use by other stages
|
||||
src/build-scripts/save-env.bash
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if [[ ! -e ../oiio-images ]] ; then
|
||||
git clone https://github.com/OpenImageIO/oiio-images.git ../oiio-images
|
||||
git clone -b RB-2.2 https://github.com/OpenImageIO/oiio-images.git ../oiio-images
|
||||
fi
|
||||
|
||||
if [[ ! -e ../libtiffpic ]] ; then
|
||||
@@ -12,3 +12,9 @@ fi
|
||||
if [[ ! -e ../openexr-images ]] ; then
|
||||
git clone https://github.com/openexr/openexr-images.git ../openexr-images
|
||||
fi
|
||||
|
||||
if [[ ! -e ../bmpsuite ]] ; then
|
||||
mkdir ../bmpsuite
|
||||
curl -o bmpsuite.zip http://entropymine.com/jason/bmpsuite/bmpsuite.zip
|
||||
unzip bmpsuite.zip -d ../bmpsuite
|
||||
fi
|
||||
|
||||
Executable
+19
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Save the env for use by other stages. Exclude things that we know aren't
|
||||
# needed.
|
||||
printenv \
|
||||
| sort \
|
||||
| grep -v ASWF_ \
|
||||
| grep -v GITHUB_ \
|
||||
| grep -v NVIDIA_ \
|
||||
| grep -v RUNNER_ \
|
||||
| grep -v _= \
|
||||
| fgrep -v "\*" \
|
||||
>> $GITHUB_ENV
|
||||
|
||||
|
||||
echo "save-env: GITHUB_ENV=${GITHUB_ENV}"
|
||||
cat $GITHUB_ENV
|
||||
echo "---------"
|
||||
|
||||
@@ -223,40 +223,40 @@ CineonInput::open(const std::string& name, ImageSpec& newspec)
|
||||
// per-file attribs
|
||||
#define CINEON_SET_ATTRIB_S(x, n, s) m_spec.attribute(s, m_cin.header.x(n))
|
||||
#define CINEON_SET_ATTRIB(x, n) CINEON_SET_ATTRIB_S(x, n, "cineon:" #x)
|
||||
#define CINEON_SET_ATTRIB_BYTE(x) \
|
||||
if (m_cin.header.x() != 0xFF) \
|
||||
#define CINEON_SET_ATTRIB_BYTE(x) \
|
||||
if (m_cin.header.x() != 0xFF) \
|
||||
CINEON_SET_ATTRIB(x, )
|
||||
#define CINEON_SET_ATTRIB_INT(x) \
|
||||
if (static_cast<unsigned int>(m_cin.header.x()) != 0xFFFFFFFF) \
|
||||
#define CINEON_SET_ATTRIB_INT(x) \
|
||||
if (static_cast<unsigned int>(m_cin.header.x()) != 0xFFFFFFFF) \
|
||||
CINEON_SET_ATTRIB(x, )
|
||||
#define CINEON_SET_ATTRIB_FLOAT(x) \
|
||||
if (!std::isinf(m_cin.header.x())) \
|
||||
#define CINEON_SET_ATTRIB_FLOAT(x) \
|
||||
if (!std::isinf(m_cin.header.x())) \
|
||||
CINEON_SET_ATTRIB(x, )
|
||||
#define CINEON_SET_ATTRIB_COORDS(x) \
|
||||
m_cin.header.x(floats); \
|
||||
if (!std::isinf(floats[0]) && !std::isinf(floats[1]) \
|
||||
&& !(floats[0] == 0. && floats[1] == 0.)) \
|
||||
#define CINEON_SET_ATTRIB_COORDS(x) \
|
||||
m_cin.header.x(floats); \
|
||||
if (!std::isinf(floats[0]) && !std::isinf(floats[1]) \
|
||||
&& !(floats[0] == 0. && floats[1] == 0.)) \
|
||||
m_spec.attribute("cineon:" #x, TypeDesc(TypeDesc::FLOAT, 2), &floats[0])
|
||||
#define CINEON_SET_ATTRIB_STR(X, x) \
|
||||
if (m_cin.header.x[0] && m_cin.header.x[0] != char(-1)) \
|
||||
#define CINEON_SET_ATTRIB_STR(X, x) \
|
||||
if (m_cin.header.x[0] && m_cin.header.x[0] != char(-1)) \
|
||||
m_spec.attribute("cineon:" #X, m_cin.header.x)
|
||||
|
||||
// per-element attribs
|
||||
#define CINEON_SET_ATTRIB_N(x, a, t, c) \
|
||||
for (int i = 0; i < m_cin.header.NumberOfElements(); i++) { \
|
||||
c(x) a[i] = m_cin.header.x(i); \
|
||||
} \
|
||||
m_spec.attribute("cineon:" #x, \
|
||||
TypeDesc(TypeDesc::t, m_cin.header.NumberOfElements()), \
|
||||
#define CINEON_SET_ATTRIB_N(x, a, t, c) \
|
||||
for (int i = 0; i < m_cin.header.NumberOfElements(); i++) { \
|
||||
c(x) a[i] = m_cin.header.x(i); \
|
||||
} \
|
||||
m_spec.attribute("cineon:" #x, \
|
||||
TypeDesc(TypeDesc::t, m_cin.header.NumberOfElements()), \
|
||||
&a)
|
||||
#define CINEON_CHECK_ATTRIB_FLOAT(x) if (!std::isinf(m_cin.header.x(i)))
|
||||
#define CINEON_SET_ATTRIB_FLOAT_N(x) \
|
||||
#define CINEON_SET_ATTRIB_FLOAT_N(x) \
|
||||
CINEON_SET_ATTRIB_N(x, floats, FLOAT, CINEON_CHECK_ATTRIB_FLOAT)
|
||||
#define CINEON_CHECK_ATTRIB_INT(x) if (m_cin.header.x(i) != 0xFFFFFFFF)
|
||||
#define CINEON_SET_ATTRIB_INT_N(x) \
|
||||
#define CINEON_SET_ATTRIB_INT_N(x) \
|
||||
CINEON_SET_ATTRIB_N(x, ints, UINT32, CINEON_CHECK_ATTRIB_INT)
|
||||
#define CINEON_CHECK_ATTRIB_BYTE(x) if (m_cin.header.x(i) != 0xFF)
|
||||
#define CINEON_SET_ATTRIB_BYTE_N(x) \
|
||||
#define CINEON_SET_ATTRIB_BYTE_N(x) \
|
||||
CINEON_SET_ATTRIB_N(x, ints, UINT32, CINEON_CHECK_ATTRIB_BYTE)
|
||||
|
||||
CINEON_SET_ATTRIB_STR(Version, version);
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include <limits>
|
||||
|
||||
#include <OpenImageIO/strutil.h>
|
||||
#include <OpenImageIO/sysutil.h>
|
||||
|
||||
#include "CineonHeader.h"
|
||||
#include "EndianSwap.h"
|
||||
@@ -540,7 +541,6 @@ void cineon::IndustryHeader::SetFilmEdgeCode(const char *edge)
|
||||
|
||||
void cineon::GenericHeader::SetCreationTimeDate(const long sec)
|
||||
{
|
||||
struct tm *tm_time;
|
||||
char str[32];
|
||||
|
||||
#ifdef _WIN32
|
||||
@@ -548,8 +548,9 @@ void cineon::GenericHeader::SetCreationTimeDate(const long sec)
|
||||
#endif
|
||||
|
||||
const time_t t = time_t(sec);
|
||||
tm_time = ::localtime(&t);
|
||||
::strftime(str, 32, "%Y:%m:%d:%H:%M:%S%Z", tm_time);
|
||||
struct tm localtm;
|
||||
OIIO::Sysutil::get_local_time(&t, &localtm);
|
||||
::strftime(str, 32, "%Y:%m:%d:%H:%M:%S%Z", &localtm);
|
||||
OIIO::Strutil::safe_strcpy(this->creationDate, str, 11);
|
||||
OIIO::Strutil::safe_strcpy(this->creationTime, str + 11, 12);
|
||||
}
|
||||
@@ -557,7 +558,6 @@ void cineon::GenericHeader::SetCreationTimeDate(const long sec)
|
||||
|
||||
void cineon::GenericHeader::SetSourceTimeDate(const long sec)
|
||||
{
|
||||
struct tm *tm_time;
|
||||
char str[32];
|
||||
|
||||
#ifdef _WIN32
|
||||
@@ -565,8 +565,9 @@ void cineon::GenericHeader::SetSourceTimeDate(const long sec)
|
||||
#endif
|
||||
|
||||
const time_t t = time_t(sec);
|
||||
tm_time = ::localtime(&t);
|
||||
::strftime(str, 32, "%Y:%m:%d:%H:%M:%S%Z", tm_time);
|
||||
struct tm localtm;
|
||||
OIIO::Sysutil::get_local_time(&t, &localtm);
|
||||
::strftime(str, 32, "%Y:%m:%d:%H:%M:%S%Z", &localtm);
|
||||
OIIO::Strutil::safe_strcpy(this->sourceDate, str, 11);
|
||||
OIIO::Strutil::safe_strcpy(this->sourceTime, str + 11, 12);
|
||||
}
|
||||
|
||||
@@ -83,12 +83,13 @@ namespace cineon
|
||||
void RleCompress(IB *src, IB *dst, const int bufsize, const int len, BufferAccess &access)
|
||||
{
|
||||
IB ch;
|
||||
int count;
|
||||
// int count;
|
||||
int i;
|
||||
int index = bufsize - 1;
|
||||
bool start = true;
|
||||
//bool match = true;
|
||||
|
||||
#if 0 /* This seems to not be used */
|
||||
// for each data type, have maximum length of rle datum
|
||||
// subtract one so it the LSBit can be used to state
|
||||
int maxCount;
|
||||
@@ -102,13 +103,13 @@ namespace cineon
|
||||
maxCount = 0xffff - 1;
|
||||
else
|
||||
maxCount = 1000000; // high number for floats, doubles
|
||||
|
||||
#endif
|
||||
|
||||
for (i = len - 1; i >= 0; i--)
|
||||
{
|
||||
if (start)
|
||||
{
|
||||
count = 1;
|
||||
// count = 1;
|
||||
start = false;
|
||||
ch = src[i];
|
||||
dst[index--] = ch;
|
||||
|
||||
@@ -3,13 +3,26 @@
|
||||
include(CMakeFindDependencyMacro)
|
||||
|
||||
# add here all the find_dependency() whenever switching to config based dependencies
|
||||
# e.g. if switching to Boost::Boost instead of using ${Boost_LIBRARY_DIRS} the add:
|
||||
# find_dependency(Boost @Boost_VERSION@)
|
||||
if (@OpenEXR_VERSION@ VERSION_GREATER_EQUAL 3.0)
|
||||
find_dependency(Imath @Imath_VERSION@
|
||||
HINTS @Imath_DIR@)
|
||||
elseif (@OpenEXR_VERSION@ VERSION_GREATER_EQUAL 2.4 AND @FOUND_OPENEXR_WITH_CONFIG@)
|
||||
find_dependency(IlmBase @OpenEXR_VERSION@
|
||||
HINTS @IlmBase_DIR@ @OpenEXR_DIR@)
|
||||
find_dependency(OpenEXR @OpenEXR_VERSION@
|
||||
HINTS @OpenEXR_DIR@)
|
||||
find_dependency(ZLIB @ZLIB_VERSION@) # Because OpenEXR doesn't do it
|
||||
find_dependency(Threads) # Because OpenEXR doesn't do it
|
||||
endif ()
|
||||
|
||||
set_and_check (@PROJECT_NAME@_INCLUDE_DIR "@CMAKE_INSTALL_FULL_INCLUDEDIR@")
|
||||
set_and_check (@PROJECT_NAME@_INCLUDES "@CMAKE_INSTALL_FULL_INCLUDEDIR@")
|
||||
set_and_check (@PROJECT_NAME@_LIB_DIR "@CMAKE_INSTALL_FULL_LIBDIR@")
|
||||
set (@PROJECT_NAME@_PLUGIN_SEARCH_PATH "@PLUGIN_SEARCH_PATH_NATIVE@")
|
||||
set (@PROJECT_NAME@_PLUGIN_SEARCH_PATH "@PLUGIN_SEARCH_PATH_NATIVE@")
|
||||
|
||||
if (NOT @FOUND_OPENEXR_WITH_CONFIG@)
|
||||
list (APPEND @PROJECT_NAME@_INCLUDES ${IMATH_INCLUDES} ${OPENEXR_INCLUDES})
|
||||
endif ()
|
||||
|
||||
#...logic to determine installedPrefix from the own location...
|
||||
#set (@PROJECT_NAME@_CONFIG_DIR "${installedPrefix}/@CONFIG_INSTALL_DIR@")
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
# Copyright Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio
|
||||
|
||||
|
||||
# Macro to add a build target for an IO plugin.
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# add_oiio_plugin ( source1 [source2 ...]
|
||||
# [ NAME targetname ... ]
|
||||
# [ SRC source1 ... ]
|
||||
# [ INCLUDE_DIRS include_dir1 ... ]
|
||||
# [ LINK_LIBRARIES external_lib1 ... ]
|
||||
# [ DEFINITIONS -DFOO=bar ... ])
|
||||
#
|
||||
# The plugin name can be specified with NAME, otherwise is inferred from the
|
||||
# subdirectory name. The source files of the binary can be specified with
|
||||
# SRC, otherwise are inferred to be all the .cpp files within the
|
||||
# subdirectory. Optional compile DEFINITIONS, private INCLUDE_DIRS, and
|
||||
# private LINK_LIBRARIES may also be specified. The source is automatically
|
||||
# linked against OpenImageIO.
|
||||
#
|
||||
# The plugin may be disabled individually using any of the usual
|
||||
# check_is_enabled() conventions (e.g. -DENABLE_<format>=OFF).
|
||||
#
|
||||
# What goes on under the covers is quite different depending on whether
|
||||
# EMBEDPLUGINS is 0 or 1. If EMBEDPLUGINS is 0 (in which case this is
|
||||
# expected to be called *after* the OpenImageIO target is declared), it will
|
||||
# create a new target to build the full plugin. On the other hand, if
|
||||
# EMBEDPLUGINS is 1 (in which case this should be called *before* the
|
||||
# OpenImageIO target is declared), it will merely append the required
|
||||
# definitions, includes, and libraries to lists format_plugin_blah that will
|
||||
# be handed off too the setup of the later OpenImageIO target.
|
||||
#
|
||||
macro (add_oiio_plugin)
|
||||
cmake_parse_arguments (_plugin "" "NAME" "SRC;INCLUDE_DIRS;LINK_LIBRARIES;DEFINITIONS" ${ARGN})
|
||||
# Arguments: <prefix> <options> <one_value_keywords> <multi_value_keywords> args...
|
||||
get_filename_component (_plugin_name ${CMAKE_CURRENT_SOURCE_DIR} NAME_WE)
|
||||
if (NOT _plugin_NAME)
|
||||
# If NAME is not supplied, infer target name (and therefore the
|
||||
# executable name) from the directory name.
|
||||
get_filename_component (_plugin_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
|
||||
endif ()
|
||||
# if (NOT _plugin_SRC)
|
||||
# # If SRC is not supplied, assume local cpp files are its source.
|
||||
# file (GLOB _plugin_SRC *.cpp)
|
||||
# endif ()
|
||||
check_is_enabled (${_plugin_name} _enable_plugin)
|
||||
if (_enable_plugin)
|
||||
if (EMBEDPLUGINS)
|
||||
# Add each source file to the libOpenImageIO_srcs, but it takes some
|
||||
# bending over backwards to change it in the parent scope.
|
||||
set (_plugin_all_source ${libOpenImageIO_srcs})
|
||||
foreach (_plugin_source_file ${_plugin_UNPARSED_ARGUMENTS} )
|
||||
list (APPEND _plugin_all_source "${CMAKE_CURRENT_SOURCE_DIR}/${_plugin_source_file}")
|
||||
endforeach ()
|
||||
set (libOpenImageIO_srcs "${_plugin_all_source}" PARENT_SCOPE)
|
||||
set (format_plugin_definitions ${format_plugin_definitions} ${_plugin_DEFINITIONS} PARENT_SCOPE)
|
||||
set (format_plugin_include_dirs ${format_plugin_include_dirs} ${_plugin_INCLUDE_DIRS} PARENT_SCOPE)
|
||||
set (format_plugin_libs ${format_plugin_libs} ${_plugin_LINK_LIBRARIES} PARENT_SCOPE)
|
||||
else ()
|
||||
# Get the name of the current directory and use it as the target name.
|
||||
get_filename_component (_plugin_name ${CMAKE_CURRENT_SOURCE_DIR} NAME)
|
||||
add_library (${_plugin_name} MODULE ${_plugin_UNPARSED_ARGUMENTS})
|
||||
target_compile_definitions (${_plugin_name} PRIVATE
|
||||
${_plugin_DEFINITIONS}
|
||||
OpenImageIO_EXPORTS)
|
||||
target_include_directories (${_plugin_name} PRIVATE ${_plugin_INCLUDE_DIRS})
|
||||
target_link_libraries (${_plugin_name} PUBLIC OpenImageIO
|
||||
PRIVATE ${_plugin_LINK_LIBRARIES})
|
||||
set_target_properties (${_plugin_name} PROPERTIES PREFIX "" FOLDER "Plugins")
|
||||
install_targets (${_plugin_name})
|
||||
endif ()
|
||||
else ()
|
||||
message (STATUS "${ColorRed}Disabling ${_plugin_name} ${ColorReset}")
|
||||
string (TOUPPER ${_plugin_name} _plugin_name_upper)
|
||||
set (format_plugin_definitions ${format_plugin_definitions} DISABLE_${_plugin_name_upper} PARENT_SCOPE)
|
||||
endif ()
|
||||
endmacro ()
|
||||
@@ -5,7 +5,7 @@
|
||||
# Is the named package "enabled" via our disabling convention? If either
|
||||
# USE_pkgname (or the all-uppercase USE_PKGNAME, or ENABLE_pkgname, or
|
||||
# ENABLE_PKGNAME) exists as either a CMake or environment variable, is
|
||||
# nonempty by contains a non-true/nonnzero value, store false in the
|
||||
# nonempty by contains a non-true/nonzero value, store false in the
|
||||
# variable named by <enablevar>, otherwise store true.
|
||||
function (check_is_enabled pkgname enablevar)
|
||||
string (TOUPPER ${pkgname} pkgname_upper)
|
||||
|
||||
@@ -0,0 +1,170 @@
|
||||
# Copyright Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio/blob/master/LICENSE.md
|
||||
|
||||
|
||||
set (REQUIRED_DEPS "" CACHE STRING
|
||||
"Additional dependencies to consider required (semicolon-separated list, or ALL)")
|
||||
set (OPTIONAL_DEPS "" CACHE STRING
|
||||
"Additional dependencies to consider optional (semicolon-separated list, or ALL)")
|
||||
option (ALWAYS_PREFER_CONFIG "Prefer a dependency's exported config file if it's available" OFF)
|
||||
|
||||
# checked_find_package(Pkgname ...) is a wrapper for find_package, with the
|
||||
# following extra features:
|
||||
# * If either `USE_Pkgname` or the all-uppercase `USE_PKGNAME` (or
|
||||
# `ENABLE_Pkgname` or `ENABLE_PKGNAME`) exists as either a CMake or
|
||||
# environment variable, is nonempty by contains a non-true/nonzero
|
||||
# value, do not search for or use the package. The optional ENABLE <var>
|
||||
# arguments allow you to override the name of the enabling variable. In
|
||||
# other words, support for the dependency is presumed to be ON, unless
|
||||
# turned off explicitly from one of these sources.
|
||||
# * Print a message if the package is enabled but not found. This is based
|
||||
# on ${Pkgname}_FOUND or $PKGNAME_FOUND.
|
||||
# * Optional DEFINITIONS <string> are passed to add_definitions if the
|
||||
# package is found.
|
||||
# * Optional PRINT <list> is a list of variables that will be printed
|
||||
# if the package is found, if VERBOSE is on.
|
||||
# * Optional DEPS <list> is a list of hard dependencies; for each one, if
|
||||
# dep_FOUND is not true, disable this package with an error message.
|
||||
# * Optional ISDEPOF <downstream> names another package for which the
|
||||
# present package is only needed because it's a dependency, and
|
||||
# therefore if <downstream> is disabled, we don't bother with this
|
||||
# package either.
|
||||
# * Optional VERSION_MIN and VERSION_MAX, if supplied, give minimum and
|
||||
# maximum versions that will be accepted. The min is inclusive, the max
|
||||
# is exclusive (i.e., check for min <= version < max). Note that this is
|
||||
# not the same as providing a version number to find_package, which
|
||||
# checks compatibility, not minimum. Sometimes we really do just want to
|
||||
# say a minimum or a range. (N.B. When our minimum CMake >= 3.19, the
|
||||
# built-in way to do this is with version ranges passed to
|
||||
# find_package.)
|
||||
# * Optional RECOMMEND_MIN, if supplied, gives a minimum recommended
|
||||
# version, accepting but warning if it is below this number (even
|
||||
# if above the true minimum version accepted). The warning message
|
||||
# can give an optional explanation, passed as RECOMMEND_MIN_REASON.
|
||||
# * Optional PREFER_CONFIG, if supplied, tries to use an exported config
|
||||
# file from the package before using a FindPackage.cmake module.
|
||||
#
|
||||
# N.B. This needs to be a macro, not a function, because the find modules
|
||||
# will set(blah val PARENT_SCOPE) and we need that to be the global scope,
|
||||
# not merely the scope for this function.
|
||||
macro (checked_find_package pkgname)
|
||||
cmake_parse_arguments(_pkg # prefix
|
||||
# noValueKeywords:
|
||||
"REQUIRED;PREFER_CONFIG"
|
||||
# singleValueKeywords:
|
||||
"ENABLE;ISDEPOF;VERSION_MIN;VERSION_MAX;RECOMMEND_MIN;RECOMMEND_MIN_REASON"
|
||||
# multiValueKeywords:
|
||||
"DEFINITIONS;PRINT;DEPS"
|
||||
# argsToParse:
|
||||
${ARGN})
|
||||
string (TOLOWER ${pkgname} pkgname_lower)
|
||||
string (TOUPPER ${pkgname} pkgname_upper)
|
||||
if (NOT VERBOSE)
|
||||
set (${pkgname}_FIND_QUIETLY true)
|
||||
set (${pkgname_upper}_FIND_QUIETLY true)
|
||||
endif ()
|
||||
if ("${pkgname}" IN_LIST REQUIRED_DEPS OR "ALL" IN_LIST REQUIRED_DEPS)
|
||||
set (_pkg_REQUIRED 1)
|
||||
endif ()
|
||||
if ("${pkgname}" IN_LIST OPTIONAL_DEPS OR "ALL" IN_LIST OPTIONAL_DEPS)
|
||||
set (_pkg_REQUIRED 0)
|
||||
endif ()
|
||||
set (_quietskip false)
|
||||
check_is_enabled (${pkgname} _enable)
|
||||
set (_disablereason "")
|
||||
foreach (_dep ${_pkg_DEPS})
|
||||
if (_enable AND NOT ${_dep}_FOUND)
|
||||
set (_enable false)
|
||||
set (ENABLE_${pkgname} OFF PARENT_SCOPE)
|
||||
set (_disablereason "(because ${_dep} was not found)")
|
||||
endif ()
|
||||
endforeach ()
|
||||
if (_pkg_ISDEPOF)
|
||||
check_is_enabled (${_pkg_ISDEPOF} _dep_enabled)
|
||||
if (NOT _dep_enabled)
|
||||
set (_enable false)
|
||||
set (_quietskip true)
|
||||
endif ()
|
||||
endif ()
|
||||
set (_config_status "")
|
||||
if (_enable OR _pkg_REQUIRED)
|
||||
if (${pkgname}_FOUND OR ${pkgname_upper}_FOUND)
|
||||
# was already found
|
||||
elseif (_pkg_PREFER_CONFIG OR ALWAYS_PREFER_CONFIG)
|
||||
find_package (${pkgname} CONFIG ${_pkg_UNPARSED_ARGUMENTS})
|
||||
if (${pkgname}_FOUND OR ${pkgname_upper}_FOUND)
|
||||
set (_config_status "from CONFIG")
|
||||
endif ()
|
||||
endif ()
|
||||
if (NOT (${pkgname}_FOUND OR ${pkgname_upper}_FOUND))
|
||||
find_package (${pkgname} ${_pkg_UNPARSED_ARGUMENTS})
|
||||
endif()
|
||||
if ((${pkgname}_FOUND OR ${pkgname_upper}_FOUND)
|
||||
AND ${pkgname}_VERSION
|
||||
AND (_pkg_VERSION_MIN OR _pkg_VERSION_MAX))
|
||||
if ((_pkg_VERSION_MIN AND ${pkgname}_VERSION VERSION_LESS _pkg_VERSION_MIN)
|
||||
OR (_pkg_VERSION_MAX AND ${pkgname}_VERSION VERSION_GREATER _pkg_VERSION_MAX))
|
||||
message (STATUS "${ColorRed}${pkgname} ${${pkgname}_VERSION} is outside the required range ${_pkg_VERSION_MIN}...${_pkg_VERSION_MAX} ${ColorReset}")
|
||||
unset (${pkgname}_FOUND)
|
||||
unset (${pkgname}_VERSION)
|
||||
unset (${pkgname_upper}_FOUND)
|
||||
unset (${pkgname_upper}_VERSION)
|
||||
endif ()
|
||||
endif ()
|
||||
if (${pkgname}_FOUND OR ${pkgname_upper}_FOUND)
|
||||
foreach (_vervar ${pkgname_upper}_VERSION ${pkgname}_VERSION_STRING
|
||||
${pkgname_upper}_VERSION_STRING)
|
||||
if (NOT ${pkgname}_VERSION AND ${_vervar})
|
||||
set (${pkgname}_VERSION ${${_vervar}})
|
||||
endif ()
|
||||
endforeach ()
|
||||
message (STATUS "${ColorGreen}Found ${pkgname} ${${pkgname}_VERSION} ${_config_status}${ColorReset}")
|
||||
if (VERBOSE)
|
||||
set (_vars_to_print ${pkgname}_INCLUDES ${pkgname_upper}_INCLUDES
|
||||
${pkgname}_INCLUDE_DIR ${pkgname_upper}_INCLUDE_DIR
|
||||
${pkgname}_INCLUDE_DIRS ${pkgname_upper}_INCLUDE_DIRS
|
||||
${pkgname}_LIBRARIES ${pkgname_upper}_LIBRARIES
|
||||
${_pkg_PRINT})
|
||||
list (REMOVE_DUPLICATES _vars_to_print)
|
||||
foreach (_v IN LISTS _vars_to_print)
|
||||
if (NOT "${${_v}}" STREQUAL "")
|
||||
message (STATUS " ${_v} = ${${_v}}")
|
||||
endif ()
|
||||
endforeach ()
|
||||
endif ()
|
||||
add_definitions (${_pkg_DEFINITIONS})
|
||||
if (_pkg_RECOMMEND_MIN)
|
||||
if (${${pkgname}_VERSION} VERSION_LESS ${_pkg_RECOMMEND_MIN})
|
||||
message (STATUS "${ColorYellow}Recommend ${pkgname} >= ${_pkg_RECOMMEND_MIN} ${_pkg_RECOMMEND_MIN_REASON} ${ColorReset}")
|
||||
endif ()
|
||||
endif ()
|
||||
else ()
|
||||
message (STATUS "${ColorRed}${pkgname} library not found ${ColorReset}")
|
||||
if (${pkgname}_ROOT)
|
||||
message (STATUS "${ColorRed} ${pkgname}_ROOT was: ${${pkgname}_ROOT} ${ColorReset}")
|
||||
elseif ($ENV{${pkgname}_ROOT})
|
||||
message (STATUS "${ColorRed} ENV ${pkgname}_ROOT was: ${${pkgname}_ROOT} ${ColorReset}")
|
||||
else ()
|
||||
message (STATUS "${ColorRed} Try setting ${pkgname}_ROOT ? ${ColorReset}")
|
||||
endif ()
|
||||
if (EXISTS "${PROJECT_SOURCE_DIR}/src/build-scripts/build_${pkgname}.bash")
|
||||
message (STATUS "${ColorRed} Maybe this will help: src/build-scripts/build_${pkgname}.bash ${ColorReset}")
|
||||
elseif (EXISTS "${PROJECT_SOURCE_DIR}/src/build-scripts/build_${pkgname_upper}.bash")
|
||||
message (STATUS "${ColorRed} Maybe this will help: src/build-scripts/build_${pkgname_upper}.bash ${ColorReset}")
|
||||
elseif (EXISTS "${PROJECT_SOURCE_DIR}/src/build-scripts/build_${pkgname_lower}.bash")
|
||||
message (STATUS "${ColorRed} Maybe this will help: src/build-scripts/build_${pkgname_lower}.bash ${ColorReset}")
|
||||
elseif (EXISTS "${PROJECT_SOURCE_DIR}/src/build-scripts/build_lib${pkgname_lower}.bash")
|
||||
message (STATUS "${ColorRed} Maybe this will help: src/build-scripts/build_lib${pkgname_lower}.bash ${ColorReset}")
|
||||
endif ()
|
||||
if (_pkg_REQUIRED)
|
||||
message (FATAL_ERROR "${ColorRed}${pkgname} is required, aborting.${ColorReset}")
|
||||
endif ()
|
||||
endif()
|
||||
else ()
|
||||
if (NOT _quietskip)
|
||||
message (STATUS "${ColorRed}Not using ${pkgname} -- disabled ${_disablereason} ${ColorReset}")
|
||||
endif ()
|
||||
endif ()
|
||||
endmacro()
|
||||
|
||||
+53
-46
@@ -80,7 +80,11 @@ endif ()
|
||||
###########################################################################
|
||||
# Turn on more detailed warnings and optionally consider warnings as errors
|
||||
#
|
||||
option (STOP_ON_WARNING "Stop building if there are any compiler warnings" ON)
|
||||
if (${PROJECT_NAME}_SUPPORTED_RELEASE)
|
||||
option (STOP_ON_WARNING "Stop building if there are any compiler warnings" OFF)
|
||||
else ()
|
||||
option (STOP_ON_WARNING "Stop building if there are any compiler warnings" ON)
|
||||
endif()
|
||||
option (EXTRA_WARNINGS "Enable lots of extra pedantic warnings" OFF)
|
||||
if (NOT MSVC)
|
||||
add_compile_options ("-Wall")
|
||||
@@ -89,9 +93,9 @@ if (NOT MSVC)
|
||||
endif ()
|
||||
if (STOP_ON_WARNING OR DEFINED ENV{CI})
|
||||
add_compile_options ("-Werror")
|
||||
# N.B. Force CI builds (Travis defines $CI) to use -Werror, even if
|
||||
# STOP_ON_WARNING has been switched off by default, which we may do
|
||||
# in release branches.
|
||||
# N.B. Force CI builds to use -Werror, even if STOP_ON_WARNING has
|
||||
# been switched off by default, which we may do in release
|
||||
# branches.
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
@@ -116,7 +120,7 @@ if (${CXX_VISIBILITY_PRESET} STREQUAL "hidden" AND
|
||||
(CMAKE_SYSTEM_NAME MATCHES "Linux|kFreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "GNU"))
|
||||
# Linux/FreeBSD/Hurd: also hide all the symbols of dependent libraries
|
||||
# to prevent clashes if an app using this project is linked against
|
||||
# other verions of our dependencies.
|
||||
# other versions of our dependencies.
|
||||
set (VISIBILITY_MAP_COMMAND "-Wl,--version-script=${VISIBILITY_MAP_FILE}")
|
||||
endif ()
|
||||
|
||||
@@ -143,7 +147,7 @@ if (CMAKE_COMPILER_IS_CLANG OR CMAKE_COMPILER_IS_APPLECLANG)
|
||||
add_compile_options ("-Wno-unused-local-typedefs")
|
||||
endif ()
|
||||
if (CLANG_VERSION_STRING VERSION_GREATER_EQUAL 3.9)
|
||||
# Don't warn about using unknown preprocessor symbols in #if'set
|
||||
# Don't warn about using unknown preprocessor symbols in `#if`
|
||||
add_compile_options ("-Wno-expansion-to-defined")
|
||||
endif ()
|
||||
endif ()
|
||||
@@ -189,9 +193,9 @@ endif ()
|
||||
# Use ccache if found
|
||||
#
|
||||
# This can really speed up compilation by caching object files that have
|
||||
# been compiled previously with idential arguments and inputs. Putting this
|
||||
# been compiled previously with identical arguments and inputs. Putting this
|
||||
# logic here makes it work even if the user is unaware of ccache. If it's
|
||||
# not found on the system, it will simply be silnetly not used.
|
||||
# not found on the system, it will simply be silently not used.
|
||||
option (USE_CCACHE "Use ccache if found" ON)
|
||||
find_program (CCACHE_FOUND ccache)
|
||||
if (CCACHE_FOUND AND USE_CCACHE)
|
||||
@@ -236,8 +240,8 @@ endif ()
|
||||
###########################################################################
|
||||
# SIMD and machine architecture options.
|
||||
#
|
||||
# The USE_SIMD optinon may be set to a comma-separated list of machine /
|
||||
# instruction set optinos, such as "avx3,f16c". The list will be parsed and
|
||||
# The USE_SIMD option may be set to a comma-separated list of machine /
|
||||
# instruction set options, such as "avx3,f16c". The list will be parsed and
|
||||
# the proper compiler directives added to generate code for those ISA
|
||||
# capabilities.
|
||||
#
|
||||
@@ -432,43 +436,46 @@ endif ()
|
||||
# correct any deviations. If clang-format is found on the system, a
|
||||
# "clang-format" build target will trigger a reformatting.
|
||||
#
|
||||
set (CLANG_FORMAT_EXE_HINT "" CACHE PATH "clang-format executable's directory (will search if not specified")
|
||||
set (CLANG_FORMAT_INCLUDES "src/*.h" "src/*.cpp"
|
||||
CACHE STRING "Glob patterns to include for clang-format")
|
||||
set (CLANG_FORMAT_EXCLUDES "*pugixml*" "*SHA1*" "*/farmhash.cpp"
|
||||
"src/dpx.imageio/libdpx/*"
|
||||
"src/cineon.imageio/libcineon/*"
|
||||
"src/dds.imageio/squish/*"
|
||||
"src/gif.imageio/gif.h"
|
||||
"src/hdr.imageio/rgbe.cpp"
|
||||
"src/libutil/stb_sprintf.h"
|
||||
CACHE STRING "Glob patterns to exclude for clang-format")
|
||||
find_program (CLANG_FORMAT_EXE
|
||||
NAMES clang-format bin/clang-format
|
||||
HINTS ${CLANG_FORMAT_EXE_HINT} ENV CLANG_FORMAT_EXE_HINT
|
||||
ENV LLVM_DIRECTORY
|
||||
NO_DEFAULT_PATH
|
||||
DOC "Path to clang-format executable")
|
||||
find_program (CLANG_FORMAT_EXE NAMES clang-format bin/clang-format)
|
||||
if (CLANG_FORMAT_EXE)
|
||||
message (STATUS "clang-format found: ${CLANG_FORMAT_EXE}")
|
||||
# Start with the list of files to include when formatting...
|
||||
file (GLOB_RECURSE FILES_TO_FORMAT ${CLANG_FORMAT_INCLUDES})
|
||||
# ... then process any list of excludes we are given
|
||||
foreach (_pat ${CLANG_FORMAT_EXCLUDES})
|
||||
file (GLOB_RECURSE _excl ${_pat})
|
||||
list (REMOVE_ITEM FILES_TO_FORMAT ${_excl})
|
||||
endforeach ()
|
||||
#message (STATUS "clang-format file list: ${FILES_TO_FORMAT}")
|
||||
file (COPY ${CMAKE_CURRENT_SOURCE_DIR}/.clang-format
|
||||
DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
||||
add_custom_target (clang-format
|
||||
COMMAND "${CLANG_FORMAT_EXE}" -i -style=file ${FILES_TO_FORMAT} )
|
||||
else ()
|
||||
message (STATUS "clang-format not found.")
|
||||
# Note: skip all of this checking, setup, and cmake-format target if this
|
||||
# is being built as a subproject.
|
||||
if (NOT ${PROJECT_NAME}_IS_SUBPROJECT)
|
||||
set (CLANG_FORMAT_EXE_HINT "" CACHE PATH "clang-format executable's directory (will search if not specified")
|
||||
set (CLANG_FORMAT_INCLUDES "src/*.h" "src/*.cpp"
|
||||
CACHE STRING "Glob patterns to include for clang-format")
|
||||
set (CLANG_FORMAT_EXCLUDES "*pugixml*" "*SHA1*" "*/farmhash.cpp"
|
||||
"src/dpx.imageio/libdpx/*"
|
||||
"src/cineon.imageio/libcineon/*"
|
||||
"src/dds.imageio/squish/*"
|
||||
"src/gif.imageio/gif.h"
|
||||
"src/hdr.imageio/rgbe.cpp"
|
||||
"src/libutil/stb_sprintf.h"
|
||||
CACHE STRING "Glob patterns to exclude for clang-format")
|
||||
find_program (CLANG_FORMAT_EXE
|
||||
NAMES clang-format bin/clang-format
|
||||
HINTS ${CLANG_FORMAT_EXE_HINT} ENV CLANG_FORMAT_EXE_HINT
|
||||
ENV LLVM_DIRECTORY
|
||||
NO_DEFAULT_PATH
|
||||
DOC "Path to clang-format executable")
|
||||
find_program (CLANG_FORMAT_EXE NAMES clang-format bin/clang-format)
|
||||
if (CLANG_FORMAT_EXE)
|
||||
message (STATUS "clang-format found: ${CLANG_FORMAT_EXE}")
|
||||
# Start with the list of files to include when formatting...
|
||||
file (GLOB_RECURSE FILES_TO_FORMAT ${CLANG_FORMAT_INCLUDES})
|
||||
# ... then process any list of excludes we are given
|
||||
foreach (_pat ${CLANG_FORMAT_EXCLUDES})
|
||||
file (GLOB_RECURSE _excl ${_pat})
|
||||
list (REMOVE_ITEM FILES_TO_FORMAT ${_excl})
|
||||
endforeach ()
|
||||
#message (STATUS "clang-format file list: ${FILES_TO_FORMAT}")
|
||||
file (COPY ${CMAKE_CURRENT_SOURCE_DIR}/.clang-format
|
||||
DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
||||
add_custom_target (clang-format
|
||||
COMMAND "${CLANG_FORMAT_EXE}" -i -style=file ${FILES_TO_FORMAT} )
|
||||
else ()
|
||||
message (STATUS "clang-format not found.")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
|
||||
###########################################################################
|
||||
# Another way to sneak in custom compiler and DSO linking flags.
|
||||
#
|
||||
@@ -528,7 +535,7 @@ endif ()
|
||||
###########################################################################
|
||||
# Any extra logic to be run only for CI builds goes here.
|
||||
#
|
||||
if (DEFINED ENV{TRAVIS} OR DEFINED ENV{APPVEYOR} OR DEFINED ENV{CI} OR DEFINED ENV{GITHUB_ACTIONS})
|
||||
if (DEFINED ENV{CI} OR DEFINED ENV{GITHUB_ACTIONS})
|
||||
add_definitions ("-D${PROJ_NAME}_CI=1" "-DBUILD_CI=1")
|
||||
if (APPLE)
|
||||
# Keep Mono framework from being incorrectly searched for include
|
||||
|
||||
+108
-143
@@ -25,118 +25,6 @@ set (OIIO_LOCAL_DEPS_PATH "${CMAKE_SOURCE_DIR}/ext/dist" CACHE STRING
|
||||
"Local area for dependencies added to CMAKE_PREFIX_PATH")
|
||||
list (APPEND CMAKE_PREFIX_PATH ${CMAKE_SOURCE_DIR}/ext/dist)
|
||||
|
||||
set (REQUIED_DEPS "" CACHE STRING
|
||||
"Additional dependencies to consider required (semicolon-separated list, or ALL)")
|
||||
set (OPTIONAL_DEPS "" CACHE STRING
|
||||
"Additional dependencies to consider optional (semicolon-separated list, or ALL)")
|
||||
|
||||
|
||||
# checked_find_package(pkgname ..) is a wrapper for find_package, with the
|
||||
# following extra features:
|
||||
# * If either `USE_pkgname` or the all-uppercase `USE_PKGNAME` (or
|
||||
# `ENABLE_pkgname` or `ENABLE_PKGNAME`) exists as either a CMake or
|
||||
# environment variable, is nonempty by contains a non-true/nonnzero
|
||||
# value, do not search for or use the package. The optional ENABLE <var>
|
||||
# arguments allow you to override the name of the enabling variable. In
|
||||
# other words, support for the dependency is presumed to be ON, unless
|
||||
# turned off explicitly from one of these sources.
|
||||
# * Print a message if the package is enabled but not found. This is based
|
||||
# on ${pkgname}_FOUND or $PKGNNAME_FOUND.
|
||||
# * Optional DEFINITIONS <string> are passed to add_definitions if the
|
||||
# package is found.
|
||||
# * Optional PRINT <list> is a list of variables that will be printed
|
||||
# if the package is found, if VERBOSE is on.
|
||||
# * Optional DEPS <list> is a list of hard dependencies; for each one, if
|
||||
# dep_FOUND is not true, disable this package with an error message.
|
||||
# * Optional ISDEPOF <downstream> names another package for which the
|
||||
# present package is only needed because it's a dependency, and
|
||||
# therefore if <downstream> is disabled, we don't bother with this
|
||||
# package either.
|
||||
#
|
||||
# N.B. This needs to be a macro, not a function, because the find modules
|
||||
# will set(blah val PARENT_SCOPE) and we need that to be the global scope,
|
||||
# not merely the scope for this function.
|
||||
macro (checked_find_package pkgname)
|
||||
cmake_parse_arguments(_pkg "REQUIRED" "ENABLE;ISDEPOF" "DEFINITIONS;PRINT;DEPS" ${ARGN})
|
||||
# Arguments: <prefix> noValueKeywords singleValueKeywords multiValueKeywords argsToParse
|
||||
string (TOUPPER ${pkgname} pkgname_upper)
|
||||
if (NOT VERBOSE)
|
||||
set (${pkgname}_FIND_QUIETLY true)
|
||||
set (${pkgname_upper}_FIND_QUIETLY true)
|
||||
endif ()
|
||||
if ("${pkgname}" IN_LIST REQUIRED_DEPS OR "ALL" IN_LIST REQUIRED_DEPS)
|
||||
set (_pkg_REQUIRED 1)
|
||||
endif ()
|
||||
if ("${pkgname}" IN_LIST OPTIONAL_DEPS OR "ALL" IN_LIST OPTIONAL_DEPS)
|
||||
set (_pkg_REQUIRED 0)
|
||||
endif ()
|
||||
set (_quietskip false)
|
||||
check_is_enabled (${pkgname} _enable)
|
||||
set (_disablereason "")
|
||||
foreach (_dep ${_pkg_DEPS})
|
||||
if (_enable AND NOT ${_dep}_FOUND)
|
||||
set (_enable false)
|
||||
set (ENABLE_${pkgname} OFF PARENT_SCOPE)
|
||||
set (_disablereason "(because ${_dep} was not found)")
|
||||
endif ()
|
||||
endforeach ()
|
||||
if (_pkg_ISDEPOF)
|
||||
check_is_enabled (${_pkg_ISDEPOF} _dep_enabled)
|
||||
if (NOT _dep_enabled)
|
||||
set (_enable false)
|
||||
set (_quietskip true)
|
||||
endif ()
|
||||
endif ()
|
||||
if (_enable OR _pkg_REQUIRED)
|
||||
find_package (${pkgname} ${_pkg_UNPARSED_ARGUMENTS})
|
||||
if (${pkgname}_FOUND OR ${pkgname_upper}_FOUND)
|
||||
foreach (_vervar ${pkgname_upper}_VERSION ${pkgname}_VERSION_STRING
|
||||
${pkgname_upper}_VERSION_STRING)
|
||||
if (NOT ${pkgname}_VERSION AND ${_vervar})
|
||||
set (${pkgname}_VERSION ${${_vervar}})
|
||||
endif ()
|
||||
endforeach ()
|
||||
message (STATUS "${ColorGreen}Found ${pkgname} ${${pkgname}_VERSION} ${ColorReset}")
|
||||
if (VERBOSE)
|
||||
set (_vars_to_print ${pkgname}_INCLUDES ${pkgname_upper}_INCLUDES
|
||||
${pkgname}_INCLUDE_DIR ${pkgname_upper}_INCLUDE_DIR
|
||||
${pkgname}_INCLUDE_DIRS ${pkgname_upper}_INCLUDE_DIRS
|
||||
${pkgname}_LIBRARIES ${pkgname_upper}_LIBRARIES
|
||||
${_pkg_PRINT})
|
||||
list (REMOVE_DUPLICATES _vars_to_print)
|
||||
foreach (_v IN LISTS _vars_to_print)
|
||||
if (NOT "${${_v}}" STREQUAL "")
|
||||
message (STATUS " ${_v} = ${${_v}}")
|
||||
endif ()
|
||||
endforeach ()
|
||||
endif ()
|
||||
add_definitions (${_pkg_DEFINITIONS})
|
||||
else ()
|
||||
message (STATUS "${ColorRed}${pkgname} library not found ${ColorReset}")
|
||||
if (${pkgname}_ROOT)
|
||||
message (STATUS "${ColorRed} ${pkgname}_ROOT was: ${${pkgname}_ROOT} ${ColorReset}")
|
||||
elseif ($ENV{${pkgname}_ROOT})
|
||||
message (STATUS "${ColorRed} ENV ${pkgname}_ROOT was: ${${pkgname}_ROOT} ${ColorReset}")
|
||||
else ()
|
||||
message (STATUS "${ColorRed} Try setting ${pkgname}_ROOT ? ${ColorReset}")
|
||||
endif ()
|
||||
if (EXISTS "${PROJECT_SOURCE_DIR}/src/build-scripts/build_${pkgname}.bash")
|
||||
message (STATUS "${ColorRed} Maybe this will help: src/build-scripts/build_${pkgname}.bash ${ColorReset}")
|
||||
endif ()
|
||||
if (_pkg_REQUIRED)
|
||||
message (FATAL_ERROR "${ColorRed}${pkgname} is required, aborting.${ColorReset}")
|
||||
endif ()
|
||||
endif()
|
||||
else ()
|
||||
if (NOT _quietskip)
|
||||
message (STATUS "${ColorRed}Not using ${pkgname} -- disabled ${_disablereason} ${ColorReset}")
|
||||
endif ()
|
||||
endif ()
|
||||
endmacro()
|
||||
|
||||
|
||||
|
||||
|
||||
include (ExternalProject)
|
||||
|
||||
option (BUILD_MISSING_DEPS "Try to download and build any missing dependencies" OFF)
|
||||
@@ -144,16 +32,24 @@ option (BUILD_MISSING_DEPS "Try to download and build any missing dependencies"
|
||||
|
||||
###########################################################################
|
||||
# Boost setup
|
||||
if (LINKSTATIC)
|
||||
set (Boost_USE_STATIC_LIBS ON)
|
||||
if (MSVC)
|
||||
add_definitions (-DBOOST_ALL_NO_LIB=1)
|
||||
endif ()
|
||||
else ()
|
||||
if (MSVC)
|
||||
if (MSVC)
|
||||
# Disable automatic linking using pragma comment(lib,...) of boost libraries upon including of a header
|
||||
add_definitions (-DBOOST_ALL_NO_LIB=1)
|
||||
endif ()
|
||||
|
||||
# If the build system hasn't been specifically told how to link Boost, link it the same way as other
|
||||
# OIIO dependencies:
|
||||
if (NOT DEFINED Boost_USE_STATIC_LIBS)
|
||||
set (Boost_USE_STATIC_LIBS "${LINKSTATIC}")
|
||||
endif ()
|
||||
|
||||
if (MSVC)
|
||||
# Not linking Boost as static libraries: either an explicit setting or LINKSTATIC is FALSE:
|
||||
if (NOT Boost_USE_STATIC_LIBS)
|
||||
add_definitions (-DBOOST_ALL_DYN_LINK=1)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if (BOOST_CUSTOM)
|
||||
set (Boost_FOUND true)
|
||||
# N.B. For a custom version, the caller had better set up the variables
|
||||
@@ -168,10 +64,12 @@ else ()
|
||||
# to set the expected variables printed below. So until that's fixed
|
||||
# force FindBoost.cmake to use the original brute force path.
|
||||
set (Boost_NO_BOOST_CMAKE ON)
|
||||
checked_find_package (Boost 1.53 REQUIRED
|
||||
COMPONENTS ${Boost_COMPONENTS}
|
||||
PRINT Boost_INCLUDE_DIRS Boost_LIBRARIES
|
||||
)
|
||||
checked_find_package (Boost REQUIRED
|
||||
VERSION_MIN 1.53
|
||||
COMPONENTS ${Boost_COMPONENTS}
|
||||
RECOMMEND_MIN 1.66
|
||||
RECOMMEND_MIN_REASON "Boost 1.66 is the oldest version our CI tests against"
|
||||
PRINT Boost_INCLUDE_DIRS Boost_LIBRARIES )
|
||||
endif ()
|
||||
|
||||
# On Linux, Boost 1.55 and higher seems to need to link against -lrt
|
||||
@@ -192,13 +90,23 @@ link_directories ("${Boost_LIBRARY_DIRS}")
|
||||
# that we will not complete the build if they are not found.
|
||||
|
||||
checked_find_package (ZLIB REQUIRED) # Needed by several packages
|
||||
checked_find_package (TIFF 3.0 REQUIRED)
|
||||
checked_find_package (TIFF REQUIRED
|
||||
VERSION_MIN 3.9
|
||||
RECOMMEND_MIN 4.0
|
||||
RECOMMEND_MIN_REASON "to support >4GB files")
|
||||
|
||||
# IlmBase & OpenEXR
|
||||
checked_find_package (OpenEXR 2.0 REQUIRED)
|
||||
# We use Imath so commonly, may as well include it everywhere.
|
||||
include_directories ("${OPENEXR_INCLUDES}" "${ILMBASE_INCLUDES}"
|
||||
"${ILMBASE_INCLUDES}/OpenEXR")
|
||||
checked_find_package (OpenEXR REQUIRED
|
||||
VERSION_MIN 2.0
|
||||
RECOMMEND_MIN 2.2
|
||||
RECOMMEND_MIN_REASON "for DWA compression"
|
||||
PRINT IMATH_INCLUDES OPENEXR_INCLUDES)
|
||||
# Force Imath includes to be before everything else to ensure that we have
|
||||
# the right Imath/OpenEXR version, not some older version in the system
|
||||
# library. This shoudn't be necessary, except for the common case of people
|
||||
# building against Imath/OpenEXR 3.x when there is still a system-level
|
||||
# install version of 2.x.
|
||||
include_directories(BEFORE ${IMATH_INCLUDES} ${OPENEXR_INCLUDES})
|
||||
if (CMAKE_COMPILER_IS_CLANG AND OPENEXR_VERSION VERSION_LESS 2.3)
|
||||
# clang C++ >= 11 doesn't like 'register' keyword in old exr headers
|
||||
add_compile_options (-Wno-deprecated-register)
|
||||
@@ -207,11 +115,18 @@ if (MSVC AND NOT LINKSTATIC)
|
||||
add_definitions (-DOPENEXR_DLL) # Is this needed for new versions?
|
||||
endif ()
|
||||
|
||||
if (OPENEXR_VERSION VERSION_GREATER_EQUAL 2.5.99)
|
||||
set (OIIO_USING_IMATH 3)
|
||||
else ()
|
||||
set (OIIO_USING_IMATH 2)
|
||||
endif ()
|
||||
|
||||
|
||||
# JPEG -- prefer Turbo-JPEG to regular libjpeg
|
||||
checked_find_package (JPEGTurbo
|
||||
DEFINITIONS -DUSE_JPEG_TURBO=1
|
||||
PRINT JPEG_INCLUDES JPEG_LIBRARIES)
|
||||
PRINT JPEG_INCLUDES JPEG_INCLUDE_DIRS
|
||||
JPEG_LIBRARIES)
|
||||
if (NOT JPEG_FOUND) # Try to find the non-turbo version
|
||||
checked_find_package (JPEG REQUIRED)
|
||||
endif ()
|
||||
@@ -222,9 +137,14 @@ endif ()
|
||||
option (USE_EXTERNAL_PUGIXML "Use an externally built shared library version of the pugixml library" OFF)
|
||||
if (USE_EXTERNAL_PUGIXML)
|
||||
checked_find_package (pugixml REQUIRED
|
||||
VERSION_MIN 1.8
|
||||
DEFINITIONS -DUSE_EXTERNAL_PUGIXML=1)
|
||||
else ()
|
||||
message (STATUS "Using internal PugiXML")
|
||||
endif()
|
||||
|
||||
# From pythonutils.cmake
|
||||
find_python()
|
||||
|
||||
|
||||
###########################################################################
|
||||
@@ -251,24 +171,69 @@ checked_find_package (OpenCV
|
||||
# Intel TBB
|
||||
set (TBB_USE_DEBUG_BUILD OFF)
|
||||
checked_find_package (TBB 2017
|
||||
DEFINITIONS -DUSE_TBB=1
|
||||
ISDEPOF OpenVDB)
|
||||
DEFINITIONS -DUSE_TBB=1
|
||||
PREFER_CONFIG)
|
||||
|
||||
checked_find_package (DCMTK 3.6.1) # For DICOM images
|
||||
checked_find_package (FFmpeg 2.6)
|
||||
checked_find_package (DCMTK VERSION_MIN 3.6.1) # For DICOM images
|
||||
checked_find_package (FFmpeg VERSION_MIN 2.6)
|
||||
checked_find_package (Field3D
|
||||
DEPS HDF5
|
||||
DEFINITIONS -DUSE_FIELD3D=1)
|
||||
checked_find_package (GIF 4)
|
||||
checked_find_package (Libheif 1.3) # For HEIF/HEIC format
|
||||
checked_find_package (GIF
|
||||
VERSION_MIN 4
|
||||
RECOMMEND_MIN 5.0
|
||||
RECOMMEND_MIN_REASON "for stability and thread safety")
|
||||
|
||||
# For HEIF/HEIC/AVIF formats
|
||||
checked_find_package (Libheif VERSION_MIN 1.3
|
||||
RECOMMEND_MIN 1.7
|
||||
RECOMMEND_MIN_REASON "for AVIF support")
|
||||
if (APPLE AND LIBHEIF_VERSION VERSION_GREATER_EQUAL 1.10 AND LIBHEIF_VERSION VERSION_LESS 1.11)
|
||||
message (WARNING "Libheif 1.10 on Apple is known to be broken, disabling libheif support")
|
||||
set (Libheif_FOUND 0)
|
||||
endif ()
|
||||
|
||||
checked_find_package (LibRaw
|
||||
PRINT LibRaw_r_LIBRARIES)
|
||||
checked_find_package (OpenJpeg 2.0)
|
||||
checked_find_package (OpenVDB 5.0
|
||||
DEPS TBB
|
||||
DEFINITIONS -DUSE_OPENVDB=1)
|
||||
checked_find_package (PTex)
|
||||
checked_find_package (Webp)
|
||||
RECOMMEND_MIN 0.18
|
||||
RECOMMEND_MIN_REASON "for ACES support and better camera metadata"
|
||||
PRINT LibRaw_r_LIBRARIES)
|
||||
if (LibRaw_FOUND AND LibRaw_VERSION VERSION_LESS 0.20 AND CMAKE_CXX_STANDARD VERSION_GREATER_EQUAL 17)
|
||||
message (STATUS "${ColorYellow}WARNING When building for C++17, LibRaw should be 0.20 or higher (found ${LibRaw_VERSION}). You may get errors, depending on the compiler.${ColorReset}")
|
||||
# Currently, we issue the above warning and let them take their chances.
|
||||
# If we wish to disable the LibRaw<0.20/C++17 combination that may fail,
|
||||
# just uncomment the following two lines.
|
||||
# set (LibRaw_FOUND 0)
|
||||
# set (LIBRAW_FOUND 0)
|
||||
endif ()
|
||||
|
||||
checked_find_package (OpenJPEG VERSION_MIN 2.0)
|
||||
|
||||
checked_find_package (OpenVDB
|
||||
VERSION_MIN 5.0
|
||||
DEPS TBB
|
||||
DEFINITIONS -DUSE_OPENVDB=1)
|
||||
if (OpenVDB_FOUND AND OpenVDB_VERSION VERSION_GREATER_EQUAL 8.0
|
||||
AND CMAKE_CXX_STANDARD VERSION_LESS 14)
|
||||
set (OpenVDB_FOUND OFF)
|
||||
add_definitions (-UUSE_OPENVDB)
|
||||
message (WARNING
|
||||
"${ColorYellow}OpenVDB 8.0+ requires C++14 or higher (was ${CMAKE_CXX_STANDARD}). "
|
||||
"To build against this OpenVDB ${OpenVDB_VERSION}, you need to set "
|
||||
"build option CMAKE_CXX_STANDARD=14 (or higher). The minimum requirements "
|
||||
"for that are gcc >= 5.1, clang >= 3.5, Apple clang >= 7, icc >= 7, MSVS >= 2017. "
|
||||
"If you must use C++11, you need to build against OpenVDB 7 or earlier. ${ColorReset}")
|
||||
message (STATUS "${ColorRed}Not using OpenVDB -- OpenVDB ${OpenVDB_VERSION} requires C++14 or later. ${ColorReset}")
|
||||
endif ()
|
||||
|
||||
checked_find_package (Ptex PREFER_CONFIG)
|
||||
if (NOT Ptex_FOUND OR NOT Ptex_VERSION)
|
||||
# Fallback for inadequate Ptex exported configs. This will eventually
|
||||
# disappear when we can 100% trust Ptex's exports.
|
||||
unset (Ptex_FOUND)
|
||||
checked_find_package (Ptex)
|
||||
endif ()
|
||||
|
||||
checked_find_package (WebP)
|
||||
|
||||
option (USE_R3DSDK "Enable R3DSDK (RED camera) support" OFF)
|
||||
checked_find_package (R3DSDK) # RED camera
|
||||
@@ -348,7 +313,7 @@ endif ()
|
||||
|
||||
option (BUILD_FMT_FORCE "Force local download/build of fmt even if installed" OFF)
|
||||
option (BUILD_MISSING_FMT "Local download/build of fmt if not installed" ON)
|
||||
set (BUILD_FMT_VERSION "6.1.2" CACHE STRING "Preferred fmtlib/fmt version, when downloading/building our own")
|
||||
set (BUILD_FMT_VERSION "7.1.3" CACHE STRING "Preferred fmtlib/fmt version, when downloading/building our own")
|
||||
|
||||
macro (find_or_download_fmt)
|
||||
# If we weren't told to force our own download/build of fmt, look
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
# Copyright Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio
|
||||
|
||||
# Macro to add an executable build target. The executable name can be
|
||||
# specified with NAME, otherwise is inferred from the subdirectory name. The
|
||||
# source files of the binary can be specified with SRC, otherwise are
|
||||
# inferred to be all the .cpp files within the subdirectory. Optional
|
||||
# compile DEFINITIONS, private INCLUDE_DIRS, and private LINK_LIBRARIES may
|
||||
# also be specified.
|
||||
#
|
||||
# The executable may be disabled individually using any of the usual
|
||||
# check_is_enabled() conventions (e.g. -DENABLE_<executable>=OFF).
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# fancy_add_executable ([ NAME targetname ... ]
|
||||
# [ SRC source1 ... ]
|
||||
# [ INCLUDE_DIRS include_dir1 ... ]
|
||||
# [ DEFINITIONS -DFOO=bar ... ])
|
||||
# [ LINK_LIBRARIES external_lib1 ... ]
|
||||
#
|
||||
macro (fancy_add_executable)
|
||||
cmake_parse_arguments (_target "" "NAME" "SRC;INCLUDE_DIRS;SYSTEM_INCLUDE_DIRS;LINK_LIBRARIES;DEFINITIONS" ${ARGN})
|
||||
# Arguments: <prefix> <options> <one_value_keywords> <multi_value_keywords> args...
|
||||
if (NOT _target_NAME)
|
||||
# If NAME is not supplied, infer target name (and therefore the
|
||||
# executable name) from the directory name.
|
||||
get_filename_component (_target_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
|
||||
endif ()
|
||||
if (NOT _target_SRC)
|
||||
# If SRC is not supplied, assume local cpp files are its source.
|
||||
file (GLOB _target_SRC *.cpp)
|
||||
endif ()
|
||||
check_is_enabled (${_target_NAME} _target_NAME_enabled)
|
||||
if (_target_NAME_enabled)
|
||||
add_executable (${_target_NAME} ${_target_SRC})
|
||||
if (_target_INCLUDE_DIRS)
|
||||
target_include_directories (${_target_NAME} PRIVATE ${_target_INCLUDE_DIRS})
|
||||
endif ()
|
||||
if (_target_SYSTEM_INCLUDE_DIRS)
|
||||
target_include_directories (${_target_NAME} SYSTEM PRIVATE ${_target_SYSTEM_INCLUDE_DIRS})
|
||||
endif ()
|
||||
if (_target_DEFINITIONS)
|
||||
target_compile_definitions (${_target_NAME} PRIVATE ${_target_DEFINITIONS})
|
||||
endif ()
|
||||
if (_target_LINK_LIBRARIES)
|
||||
target_link_libraries (${_target_NAME} PRIVATE ${_target_LINK_LIBRARIES})
|
||||
endif ()
|
||||
set_target_properties (${_target_NAME} PROPERTIES FOLDER "Tools")
|
||||
install_targets (${_target_NAME})
|
||||
else ()
|
||||
message (STATUS "${ColorRed}Disabling ${_target_NAME} ${ColorReset}")
|
||||
endif ()
|
||||
endmacro ()
|
||||
@@ -39,6 +39,7 @@ else ()
|
||||
HINTS ${_FFMPEG_AVCODEC_INCLUDE_DIRS}
|
||||
PATH_SUFFIXES ffmpeg libav
|
||||
)
|
||||
set (FFMPEG_INCLUDES ${FFMPEG_AVCODEC_INCLUDE_DIR})
|
||||
|
||||
find_library(FFMPEG_LIBAVCODEC
|
||||
NAMES avcodec
|
||||
@@ -55,15 +56,61 @@ else ()
|
||||
find_library(FFMPEG_LIBSWSCALE
|
||||
NAMES swscale
|
||||
HINTS ${_FFMPEG_SWSCALE_LIBRARY_DIRS} )
|
||||
endif ()
|
||||
|
||||
include (FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args (FFmpeg
|
||||
if (FFMPEG_INCLUDES)
|
||||
file(STRINGS "${FFMPEG_INCLUDES}/libavcodec/version.h" TMP
|
||||
REGEX "^#define LIBAVCODEC_VERSION_MAJOR .*$")
|
||||
string (REGEX MATCHALL "[0-9]+[.0-9]+" LIBAVCODEC_VERSION_MAJOR ${TMP})
|
||||
file(STRINGS "${FFMPEG_INCLUDES}/libavcodec/version.h" TMP
|
||||
REGEX "^#define LIBAVCODEC_VERSION_MINOR .*$")
|
||||
string (REGEX MATCHALL "[0-9]+[.0-9]+" LIBAVCODEC_VERSION_MINOR ${TMP})
|
||||
file(STRINGS "${FFMPEG_INCLUDES}/libavcodec/version.h" TMP
|
||||
REGEX "^#define LIBAVCODEC_VERSION_MICRO .*$")
|
||||
string (REGEX MATCHALL "[0-9]+[.0-9]+" LIBAVCODEC_VERSION_MICRO ${TMP})
|
||||
set (LIBAVCODEC_VERSION "${LIBAVCODEC_VERSION_MAJOR}.${LIBAVCODEC_VERSION_MINOR}.${LIBAVCODEC_VERSION_MICRO}")
|
||||
if (LIBAVCODEC_VERSION VERSION_GREATER_EQUAL 59.18.100)
|
||||
set (FFMPEG_VERSION 5.0)
|
||||
elseif (LIBAVCODEC_VERSION VERSION_GREATER_EQUAL 58.134.100)
|
||||
set (FFMPEG_VERSION 4.4)
|
||||
elseif (LIBAVCODEC_VERSION VERSION_GREATER_EQUAL 58.91.100)
|
||||
set (FFMPEG_VERSION 4.3)
|
||||
elseif (LIBAVCODEC_VERSION VERSION_GREATER_EQUAL 58.54.100)
|
||||
set (FFMPEG_VERSION 4.2)
|
||||
elseif (LIBAVCODEC_VERSION VERSION_GREATER_EQUAL 58.35.100)
|
||||
set (FFMPEG_VERSION 4.1)
|
||||
elseif (LIBAVCODEC_VERSION VERSION_GREATER_EQUAL 58.18.100)
|
||||
set (FFMPEG_VERSION 4.0)
|
||||
elseif (LIBAVCODEC_VERSION VERSION_GREATER_EQUAL 57.107.100)
|
||||
set (FFMPEG_VERSION 3.4)
|
||||
elseif (LIBAVCODEC_VERSION VERSION_GREATER_EQUAL 57.89.100)
|
||||
set (FFMPEG_VERSION 3.3)
|
||||
elseif (LIBAVCODEC_VERSION VERSION_GREATER_EQUAL 57.64.100)
|
||||
set (FFMPEG_VERSION 3.2)
|
||||
elseif (LIBAVCODEC_VERSION VERSION_GREATER_EQUAL 57.48.100)
|
||||
set (FFMPEG_VERSION 3.1)
|
||||
elseif (LIBAVCODEC_VERSION VERSION_GREATER_EQUAL 57.24.100)
|
||||
set (FFMPEG_VERSION 3.0)
|
||||
elseif (LIBAVCODEC_VERSION VERSION_GREATER_EQUAL 56.60.100)
|
||||
set (FFMPEG_VERSION 2.8)
|
||||
elseif (LIBAVCODEC_VERSION VERSION_GREATER_EQUAL 56.41.100)
|
||||
set (FFMPEG_VERSION 2.7)
|
||||
elseif (LIBAVCODEC_VERSION VERSION_GREATER_EQUAL 56.26.100)
|
||||
set (FFMPEG_VERSION 2.6)
|
||||
else ()
|
||||
set (FFMPEG_VERSION 1.0)
|
||||
endif ()
|
||||
set (FFmpeg_VERSION ${FFMPEG_VERSION})
|
||||
endif ()
|
||||
|
||||
include (FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args (FFmpeg
|
||||
REQUIRED_VARS FFMPEG_LIBAVCODEC
|
||||
FFMPEG_LIBAVFORMAT
|
||||
FFMPEG_AVCODEC_INCLUDE_DIR
|
||||
)
|
||||
)
|
||||
|
||||
if (FFmpeg_FOUND)
|
||||
if (FFmpeg_FOUND)
|
||||
set(FFMPEG_INCLUDE_DIR ${FFMPEG_AVCODEC_INCLUDE_DIR})
|
||||
set(FFMPEG_INCLUDES ${FFMPEG_AVCODEC_INCLUDE_DIR})
|
||||
set(FFMPEG_LIBRARIES
|
||||
@@ -72,10 +119,9 @@ else ()
|
||||
${FFMPEG_LIBAVUTIL}
|
||||
${FFMPEG_LIBSWSCALE}
|
||||
)
|
||||
endif ()
|
||||
|
||||
endif ()
|
||||
|
||||
|
||||
mark_as_advanced (
|
||||
FFMPEG_INCLUDES FFMPEG_LIBRARIES
|
||||
)
|
||||
|
||||
@@ -86,7 +86,12 @@ MARK_AS_ADVANCED(LibRaw_VERSION_STRING
|
||||
|
||||
if (LINKSTATIC)
|
||||
# Necessary?
|
||||
find_package (Jasper)
|
||||
find_library (LCMS2_LIBRARIES NAMES lcms2)
|
||||
set (LibRaw_r_LIBRARIES ${LibRaw_r_LIBRARIES} ${JASPER_LIBRARIES} ${LCMS2_LIBRARIES})
|
||||
if (LCMS2_LIBRARIES)
|
||||
set (LibRaw_r_LIBRARIES ${LibRaw_r_LIBRARIES} ${LCMS2_LIBRARIES})
|
||||
endif()
|
||||
if (MSVC)
|
||||
set (LibRaw_r_DEFINITIONS ${LibRaw_r_DEFINITIONS} -DLIBRAW_NODLL)
|
||||
set (LibRaw_DEFINITIONS ${LibRaw_DEFINITIONS} -DLIBRAW_NODLL)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Module to find OpenColorIO
|
||||
#
|
||||
# This module will first look into the directories hinted by the variables:
|
||||
# - OpenColorIO_ROOT, OPENCOLORIO_INCLUDE_PATH, OPENCOLORIO_LIBRARY_PATH
|
||||
# - OpenColorIO_ROOT
|
||||
#
|
||||
# This module defines the following variables:
|
||||
#
|
||||
@@ -23,8 +23,23 @@ find_path (OPENCOLORIO_INCLUDE_DIR
|
||||
/opt/local/include
|
||||
DOC "The directory where OpenColorIO/OpenColorIO.h resides")
|
||||
|
||||
if (EXISTS "${OPENCOLORIO_INCLUDE_DIR}/OpenColorIO/OpenColorABI.h")
|
||||
# Search twice, because this symbol changed between OCIO 1.x and 2.x
|
||||
file(STRINGS "${OPENCOLORIO_INCLUDE_DIR}/OpenColorIO/OpenColorABI.h" TMP
|
||||
REGEX "^#define OCIO_VERSION_STR[ \t].*$")
|
||||
if (NOT TMP)
|
||||
file(STRINGS "${OPENCOLORIO_INCLUDE_DIR}/OpenColorIO/OpenColorABI.h" TMP
|
||||
REGEX "^#define OCIO_VERSION[ \t].*$")
|
||||
endif ()
|
||||
string (REGEX MATCHALL "([0-9]+)\\.([0-9]+)\\.[0-9]+" OPENCOLORIO_VERSION ${TMP})
|
||||
set (OPENCOLORIO_VERSION_MAJOR ${CMAKE_MATCH_1})
|
||||
set (OPENCOLORIO_VERSION_MINOR ${CMAKE_MATCH_2})
|
||||
endif ()
|
||||
|
||||
find_library (OPENCOLORIO_LIBRARY
|
||||
NAMES OCIO OpenColorIO
|
||||
NAMES
|
||||
OpenColorIO
|
||||
OpenColorIO_${OPENCOLORIO_VERSION_MAJOR}_${OPENCOLORIO_VERSION_MINOR}
|
||||
HINTS
|
||||
${OPENCOLORIO_LIBRARY_PATH}
|
||||
ENV OPENCOLORIO_LIBRARY_PATH
|
||||
@@ -35,19 +50,13 @@ find_library (OPENCOLORIO_LIBRARY
|
||||
/opt/local/lib
|
||||
DOC "The OCIO library")
|
||||
|
||||
if (EXISTS "${OPENCOLORIO_INCLUDE_DIR}/OpenColorIO/OpenColorABI.h")
|
||||
file(STRINGS "${OPENCOLORIO_INCLUDE_DIR}/OpenColorIO/OpenColorABI.h" TMP
|
||||
REGEX "^#define OCIO_VERSION[ \t].*$")
|
||||
string (REGEX MATCHALL "[0-9]+[.0-9]+" OPENCOLORIO_VERSION ${TMP})
|
||||
endif ()
|
||||
|
||||
find_package_handle_standard_args (OpenColorIO
|
||||
REQUIRED_VARS OPENCOLORIO_INCLUDE_DIR OPENCOLORIO_LIBRARY
|
||||
FOUND_VAR OPENCOLORIO_FOUND
|
||||
VERSION_VAR OPENCOLORIO_VERSION
|
||||
)
|
||||
|
||||
if (OPENCOLORIO_FOUND)
|
||||
if (OpenColorIO_FOUND)
|
||||
set (OPENCOLORIO_INCLUDES ${OPENCOLORIO_INCLUDE_DIR})
|
||||
set (OPENCOLORIO_LIBRARIES ${OPENCOLORIO_LIBRARY})
|
||||
set (OPENCOLORIO_DEFINITIONS "")
|
||||
@@ -59,10 +68,15 @@ if (OPENCOLORIO_FOUND)
|
||||
set_property(TARGET OpenColorIO::OpenColorIO APPEND PROPERTY
|
||||
IMPORTED_LOCATION "${OPENCOLORIO_LIBRARIES}")
|
||||
if (LINKSTATIC)
|
||||
set_target_properties(OpenColorIO::OpenColorIO PROPERTIES
|
||||
INTERFACE_COMPILE_DEFINITIONS "-DOpenColorIO_STATIC")
|
||||
target_compile_definitions(OpenColorIO::OpenColorIO
|
||||
INTERFACE "-DOpenColorIO_STATIC")
|
||||
endif()
|
||||
endif ()
|
||||
if (NOT TARGET OpenColorIO::OpenColorIOHeaders)
|
||||
add_library(OpenColorIO::OpenColorIOHeaders INTERFACE IMPORTED)
|
||||
set_target_properties(OpenColorIO::OpenColorIOHeaders PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${OPENCOLORIO_INCLUDES}")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if (OpenColorIO_FOUND AND LINKSTATIC)
|
||||
|
||||
@@ -1,15 +1,118 @@
|
||||
# Module to find OpenEXR.
|
||||
# Module to find OpenEXR and Imath.
|
||||
#
|
||||
# I'm afraid this is a mess, due to needing to support a wide range of
|
||||
# OpenEXR versions.
|
||||
#
|
||||
# For OpenEXR & Imath 3.0, this will establish the following imported
|
||||
# targets:
|
||||
#
|
||||
# Imath::Imath
|
||||
# Imath::Half
|
||||
# OpenEXR::OpenEXR
|
||||
# OpenEXR::Iex
|
||||
# OpenEXR::IlmThread
|
||||
#
|
||||
# For OpenEXR 2.4 & 2.5, it will establish the following imported targets:
|
||||
#
|
||||
# IlmBase::Imath
|
||||
# IlmBase::Half
|
||||
# IlmBase::Iex
|
||||
# IlmBase::IlmThread
|
||||
# OpenEXR::IlmImf
|
||||
#
|
||||
# For all versions -- but for OpenEXR < 2.4 the only thing this sets --
|
||||
# are the following CMake variables:
|
||||
#
|
||||
# This module will set
|
||||
# OPENEXR_FOUND true, if found
|
||||
# OPENEXR_INCLUDES directory where headers are found
|
||||
# OPENEXR_INCLUDES directory where OpenEXR headers are found
|
||||
# OPENEXR_LIBRARIES libraries for OpenEXR + IlmBase
|
||||
# ILMBASE_LIBRARIES libraries just IlmBase
|
||||
# OPENEXR_VERSION OpenEXR version (accurate for >= 2.0.0,
|
||||
# otherwise will just guess 1.6.1)
|
||||
# IMATH_INCLUDES directory where Imath headers are found
|
||||
# ILMBASE_INCLUDES directory where IlmBase headers are found
|
||||
# ILMBASE_LIBRARIES libraries just IlmBase
|
||||
#
|
||||
#
|
||||
|
||||
# First, try to fine just the right config files
|
||||
find_package(Imath CONFIG)
|
||||
if (NOT TARGET Imath::Imath)
|
||||
# Couldn't find Imath::Imath, maybe it's older and has IlmBase?
|
||||
find_package(IlmBase CONFIG)
|
||||
endif ()
|
||||
find_package(OpenEXR CONFIG)
|
||||
|
||||
if (TARGET OpenEXR::OpenEXR AND TARGET Imath::Imath)
|
||||
# OpenEXR 3.x if both of these targets are found
|
||||
set (FOUND_OPENEXR_WITH_CONFIG 1)
|
||||
if (NOT OpenEXR_FIND_QUIETLY)
|
||||
message (STATUS "Found CONFIG for OpenEXR 3 (OPENEXR_VERSION=${OpenEXR_VERSION})")
|
||||
endif ()
|
||||
|
||||
# Mimic old style variables
|
||||
set (OPENEXR_VERSION ${OpenEXR_VERSION})
|
||||
get_target_property(IMATH_INCLUDES Imath::Imath INTERFACE_INCLUDE_DIRECTORIES)
|
||||
get_target_property(ILMBASE_INCLUDES Imath::Imath INTERFACE_INCLUDE_DIRECTORIES)
|
||||
get_target_property(ILMBASE_IMATH_LIBRARY Imath::Imath INTERFACE_LINK_LIBRARIES)
|
||||
get_target_property(IMATH_LIBRARY Imath::Imath INTERFACE_LINK_LIBRARIES)
|
||||
get_target_property(OPENEXR_IEX_LIBRARY OpenEXR::Iex INTERFACE_LINK_LIBRARIES)
|
||||
get_target_property(OPENEXR_ILMTHREAD_LIBRARY OpenEXR::IlmThread INTERFACE_LINK_LIBRARIES)
|
||||
set (ILMBASE_LIBRARIES ${ILMBASE_IMATH_LIBRARY})
|
||||
set (ILMBASE_FOUND true)
|
||||
|
||||
get_target_property(OPENEXR_INCLUDES OpenEXR::OpenEXR INTERFACE_INCLUDE_DIRECTORIES)
|
||||
get_target_property(OPENEXR_ILMIMF_LIBRARY OpenEXR::OpenEXR INTERFACE_LINK_LIBRARIES)
|
||||
set (OPENEXR_LIBRARIES ${OPENEXR_ILMIMF_LIBRARY} ${OPENEXR_IEX_LIBRARY} ${OPENEXR_ILMTHREAD_LIBRARY} ${ILMBASE_LIBRARIES})
|
||||
set (OPENEXR_FOUND true)
|
||||
|
||||
# Link with pthreads if required
|
||||
find_package (Threads)
|
||||
if (CMAKE_USE_PTHREADS_INIT)
|
||||
list (APPEND ILMBASE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
|
||||
endif ()
|
||||
|
||||
elseif (TARGET OpenEXR::IlmImf AND TARGET IlmBase::Imath AND
|
||||
(OPENEXR_VERSION VERSION_GREATER_EQUAL 2.4 OR OpenEXR_VERSION VERSION_GREATER_EQUAL 2.4))
|
||||
# OpenEXR 2.4 or 2.5 with exported config
|
||||
set (FOUND_OPENEXR_WITH_CONFIG 1)
|
||||
if (NOT OpenEXR_FIND_QUIETLY)
|
||||
message (STATUS "Found CONFIG for OpenEXR 2 (OPENEXR_VERSION=${OpenEXR_VERSION})")
|
||||
endif ()
|
||||
|
||||
# Mimic old style variables
|
||||
get_target_property(ILMBASE_INCLUDES IlmBase::IlmBaseConfig INTERFACE_INCLUDE_DIRECTORIES)
|
||||
get_target_property(IMATH_INCLUDES IlmBase::IlmBaseConfig INTERFACE_INCLUDE_DIRECTORIES)
|
||||
get_target_property(ILMBASE_Imath_LIBRARY IlmBase::Imath INTERFACE_LINK_LIBRARIES)
|
||||
get_target_property(ILMBASE_IMATH_LIBRARY IlmBase::Imath INTERFACE_LINK_LIBRARIES)
|
||||
get_target_property(ILMBASE_HALF_LIBRARY IlmBase::Half INTERFACE_LINK_LIBRARIES)
|
||||
get_target_property(OPENEXR_IEX_LIBRARY IlmBase::Iex INTERFACE_LINK_LIBRARIES)
|
||||
get_target_property(OPENEXR_ILMTHREAD_LIBRARY IlmBase::IlmThread INTERFACE_LINK_LIBRARIES)
|
||||
set (ILMBASE_LIBRARIES ${ILMBASE_IMATH_LIBRARY} ${ILMBASE_HALF_LIBRARY} ${OPENEXR_IEX_LIBRARY} ${OPENEXR_ILMTHREAD_LIBRARY})
|
||||
set (ILMBASE_FOUND true)
|
||||
|
||||
get_target_property(OPENEXR_INCLUDES OpenEXR::IlmImfConfig INTERFACE_INCLUDE_DIRECTORIES)
|
||||
get_target_property(OPENEXR_ILMIMF_LIBRARY OpenEXR::IlmImf INTERFACE_LINK_LIBRARIES)
|
||||
set (OPENEXR_LIBRARIES ${OPENEXR_ILMIMF_LIBRARY} ${ILMBASE_LIBRARIES})
|
||||
set (OPENEXR_FOUND true)
|
||||
|
||||
# Link with pthreads if required
|
||||
find_package (Threads)
|
||||
if (CMAKE_USE_PTHREADS_INIT)
|
||||
list (APPEND ILMBASE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
|
||||
endif ()
|
||||
|
||||
# Correct for how old OpenEXR config exports set the directory one
|
||||
# level lower than we prefer it.
|
||||
string(REGEX REPLACE "include/OpenEXR$" "include" ILMBASE_INCLUDES "${ILMBASE_INCLUDES}")
|
||||
string(REGEX REPLACE "include/OpenEXR$" "include" IMATH_INCLUDES "${IMATH_INCLUDES}")
|
||||
string(REGEX REPLACE "include/OpenEXR$" "include" OPENEXR_INCLUDES "${OPENEXR_INCLUDES}")
|
||||
|
||||
else ()
|
||||
# OpenEXR 2.x older versions without a config or whose configs we don't
|
||||
# trust.
|
||||
|
||||
set (FOUND_OPENEXR_WITH_CONFIG 0)
|
||||
|
||||
# Other standard issue macros
|
||||
include (FindPackageHandleStandardArgs)
|
||||
include (SelectLibraryConfigurations)
|
||||
@@ -131,17 +234,20 @@ find_package_handle_standard_args (OpenEXR
|
||||
REQUIRED_VARS ILMBASE_INCLUDE_PATH OPENEXR_INCLUDE_PATH
|
||||
OPENEXR_IMATH_LIBRARY OPENEXR_ILMIMF_LIBRARY
|
||||
OPENEXR_IEX_LIBRARY OPENEXR_HALF_LIBRARY
|
||||
VERSION_VAR OPENEXR_VERSION
|
||||
)
|
||||
|
||||
if (OPENEXR_FOUND)
|
||||
set (OpenEXR_VERSION ${OPENEXR_VERSION})
|
||||
set (ILMBASE_FOUND TRUE)
|
||||
set (ILMBASE_INCLUDES ${ILMBASE_INCLUDE_PATH})
|
||||
set (IMATH_INCLUDES ${ILMBASE_INCLUDE_PATH})
|
||||
set (OPENEXR_INCLUDES ${OPENEXR_INCLUDE_PATH})
|
||||
set (ILMBASE_INCLUDE_DIR ${ILMBASE_INCLUDE_PATH})
|
||||
set (IMATH_INCLUDE_DIR ${ILMBASE_INCLUDE_PATH})
|
||||
set (OPENEXR_INCLUDE_DIR ${OPENEXR_INCLUDE_PATH})
|
||||
set (ILMBASE_LIBRARIES ${OPENEXR_IMATH_LIBRARY} ${OPENEXR_IEX_LIBRARY} ${OPENEXR_HALF_LIBRARY} ${OPENEXR_ILMTHREAD_LIBRARY} ${ILMBASE_PTHREADS} CACHE STRING "The libraries needed to use IlmBase")
|
||||
set (OPENEXR_LIBRARIES ${OPENEXR_ILMIMF_LIBRARY} ${ILMBASE_LIBRARIES} ${ZLIB_LIBRARIES} CACHE STRING "The libraries needed to use OpenEXR")
|
||||
set (FINDOPENEXR_FALLBACK TRUE)
|
||||
endif ()
|
||||
|
||||
mark_as_advanced(
|
||||
@@ -153,3 +259,5 @@ mark_as_advanced(
|
||||
|
||||
# Restore the original CMAKE_FIND_LIBRARY_SUFFIXES
|
||||
set (CMAKE_FIND_LIBRARY_SUFFIXES ${_openexr_orig_suffixes})
|
||||
|
||||
endif ()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Module to find OpenJpeg.
|
||||
#
|
||||
# This module will first look into the directories defined by the variables:
|
||||
# - OpenJpeg_ROOT
|
||||
# - OpenJPEG_ROOT
|
||||
#
|
||||
# This module defines the following variables:
|
||||
#
|
||||
@@ -56,18 +56,21 @@ endmacro ()
|
||||
|
||||
# Generic search paths
|
||||
set (OpenJpeg_include_paths
|
||||
/usr/local/include/openjpeg-2.4
|
||||
/usr/local/include/openjpeg-2.3
|
||||
/usr/local/include/openjpeg-2.2
|
||||
/usr/local/include/openjpeg-2.1
|
||||
/usr/local/include/openjpeg-2.0
|
||||
/usr/local/include/openjpeg
|
||||
/usr/local/include
|
||||
/usr/include/openjpeg-2.4
|
||||
/usr/include/openjpeg-2.3
|
||||
/usr/include/openjpeg-2.2
|
||||
/usr/include/openjpeg-2.1
|
||||
/usr/include/openjpeg
|
||||
/usr/include
|
||||
/opt/local/include
|
||||
/opt/local/include/openjpeg-2.4
|
||||
/opt/local/include/openjpeg-2.3
|
||||
/opt/local/include/openjpeg-2.2
|
||||
/opt/local/include/openjpeg-2.1
|
||||
@@ -80,20 +83,21 @@ set (OpenJpeg_library_paths
|
||||
/sw/lib
|
||||
/opt/local/lib)
|
||||
|
||||
if (OpenJpeg_ROOT)
|
||||
if (OpenJPEG_ROOT)
|
||||
set (OpenJpeg_library_paths
|
||||
${OpenJpeg_ROOT}/lib
|
||||
${OpenJpeg_ROOT}/lib64
|
||||
${OpenJpeg_ROOT}/bin
|
||||
${OpenJPEG_ROOT}/lib
|
||||
${OpenJPEG_ROOT}/lib64
|
||||
${OpenJPEG_ROOT}/bin
|
||||
${OpenJpeg_library_paths}
|
||||
)
|
||||
set (OpenJpeg_include_paths
|
||||
${OpenJpeg_ROOT}/include/openjpeg-2.3
|
||||
${OpenJpeg_ROOT}/include/openjpeg-2.2
|
||||
${OpenJpeg_ROOT}/include/openjpeg-2.1
|
||||
${OpenJpeg_ROOT}/include/openjpeg-2.0
|
||||
${OpenJpeg_ROOT}/include/openjpeg
|
||||
${OpenJpeg_ROOT}/include
|
||||
${OpenJPEG_ROOT}/include/openjpeg-2.4
|
||||
${OpenJPEG_ROOT}/include/openjpeg-2.3
|
||||
${OpenJPEG_ROOT}/include/openjpeg-2.2
|
||||
${OpenJPEG_ROOT}/include/openjpeg-2.1
|
||||
${OpenJPEG_ROOT}/include/openjpeg-2.0
|
||||
${OpenJPEG_ROOT}/include/openjpeg
|
||||
${OpenJPEG_ROOT}/include
|
||||
${OpenJpeg_include_paths}
|
||||
)
|
||||
endif()
|
||||
@@ -149,7 +153,7 @@ else ()
|
||||
endif ()
|
||||
|
||||
# Use the standard function to handle OPENJPEG_FOUND
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS (OpenJpeg
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS (OpenJPEG
|
||||
VERSION_VAR OPENJPEG_VERSION
|
||||
REQUIRED_VARS OPENJPEG_INCLUDE_DIR ${OpenJpeg_libvars})
|
||||
|
||||
@@ -92,13 +92,13 @@ if (PTEX_INCLUDE_DIR AND EXISTS "${PTEX_INCLUDE_DIR}/PtexVersion.h" )
|
||||
file(STRINGS "${PTEX_INCLUDE_DIR}/PtexVersion.h" TMP REGEX "^#define PtexAPIVersion.*$")
|
||||
string(REGEX MATCHALL "[0-9]+" API ${TMP})
|
||||
|
||||
file(STRINGS "${PTEX_INCLUDE_DIR}/PtexVersion.h" TMP REGEX "^#define PtexFileMajorVersion.*$")
|
||||
file(STRINGS "${PTEX_INCLUDE_DIR}/PtexVersion.h" TMP REGEX "^#define PtexLibraryMajorVersion.*$")
|
||||
string(REGEX MATCHALL "[0-9]+" MAJOR ${TMP})
|
||||
|
||||
file(STRINGS "${PTEX_INCLUDE_DIR}/PtexVersion.h" TMP REGEX "^#define PtexFileMinorVersion.*$")
|
||||
file(STRINGS "${PTEX_INCLUDE_DIR}/PtexVersion.h" TMP REGEX "^#define PtexLibraryMinorVersion.*$")
|
||||
string(REGEX MATCHALL "[0-9]+" MINOR ${TMP})
|
||||
|
||||
set(PTEX_VERSION ${API}.${MAJOR}.${MINOR})
|
||||
set(PTEX_VERSION ${MAJOR}.${MINOR})
|
||||
|
||||
elseif (PTEX_INCLUDE_DIR AND EXISTS "${PTEX_INCLUDE_DIR}/Ptexture.h" )
|
||||
|
||||
@@ -111,13 +111,13 @@ elseif (PTEX_INCLUDE_DIR AND EXISTS "${PTEX_INCLUDE_DIR}/Ptexture.h" )
|
||||
file(STRINGS "${PTEX_INCLUDE_DIR}/Ptexture.h" TMP REGEX "^#define PtexFileMinorVersion.*$")
|
||||
string(REGEX MATCHALL "[0-9]+" MINOR ${TMP})
|
||||
|
||||
set(PTEX_VERSION ${API}.${MAJOR}.${MINOR})
|
||||
set(PTEX_VERSION ${MAJOR}.${MINOR})
|
||||
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
find_package_handle_standard_args(PTex
|
||||
find_package_handle_standard_args(Ptex
|
||||
REQUIRED_VARS
|
||||
PTEX_INCLUDE_DIR
|
||||
PTEX_LIBRARY
|
||||
@@ -126,7 +126,19 @@ find_package_handle_standard_args(PTex
|
||||
)
|
||||
|
||||
if (PTEX_FOUND)
|
||||
set(Ptex_FOUND TRUE)
|
||||
set(PTEX_LIBRARIES ${PTEX_LIBRARY})
|
||||
set(PTEX_INCLUDES ${PTEX_INCLUDE_DIR})
|
||||
set(Ptex_VERSION ${PTEX_VERSION})
|
||||
if (NOT TARGET Ptex::Ptex_dynamic)
|
||||
add_library(Ptex::Ptex_dynamic UNKNOWN IMPORTED)
|
||||
set_target_properties(Ptex::Ptex_dynamic PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${PTEX_INCLUDES}")
|
||||
if (PTEX_LIBRARIES)
|
||||
set_property(TARGET Ptex::Ptex_dynamic APPEND PROPERTY
|
||||
IMPORTED_LOCATION "${PTEX_LIBRARIES}")
|
||||
endif ()
|
||||
endif ()
|
||||
else ()
|
||||
set (PTEX_INCLUDE_DIR "")
|
||||
endif()
|
||||
@@ -134,7 +134,7 @@ if(NOT TBB_FOUND)
|
||||
# Find the TBB include dir
|
||||
##################################
|
||||
|
||||
find_path(TBB_INCLUDE_DIRS tbb/tbb.h
|
||||
find_path(TBB_INCLUDE_DIRS tbb/tbb_stddef.h
|
||||
HINTS ${TBB_INCLUDE_DIR} ${TBB_SEARCH_DIR}
|
||||
PATHS ${TBB_DEFAULT_SEARCH_DIR})
|
||||
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
# Module to find Webp
|
||||
#
|
||||
# This module will first look into the directories defined by the variables:
|
||||
# - Webp_ROOT, WEBP_INCLUDE_PATH, WEBP_LIBRARY_PATH
|
||||
#
|
||||
# This module defines the following variables:
|
||||
#
|
||||
# WebP_FOUND True if Webp was found.
|
||||
# WEBP_INCLUDES Where to find Webp headers
|
||||
# WEBP_LIBRARIES List of libraries to link against when using Webp
|
||||
#
|
||||
# This doesn't work, because the webp headers don't seem to include any
|
||||
# definitions giving the version:
|
||||
# WEBP_VERSION Version of Webp (e.g., 3.6.2)
|
||||
|
||||
include (FindPackageHandleStandardArgs)
|
||||
|
||||
find_path (WEBP_INCLUDE_DIR webp/encode.h
|
||||
HINTS
|
||||
${WEBP_INCLUDE_PATH}
|
||||
ENV WEBP_INCLUDE_PATH
|
||||
DOC "The directory where Webp headers reside")
|
||||
|
||||
find_library (WEBP_LIBRARY webp
|
||||
HINTS
|
||||
${WEBP_LIBRARY_PATH}
|
||||
ENV WEBP_LIBRARY_PATH)
|
||||
find_library (WEBPDEMUX_LIBRARY webpdemux
|
||||
HINTS
|
||||
${WEBP_LIBRARY_PATH}
|
||||
ENV WEBP_LIBRARY_PATH)
|
||||
|
||||
include (FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args (WebP
|
||||
REQUIRED_VARS WEBP_INCLUDE_DIR
|
||||
WEBP_LIBRARY WEBPDEMUX_LIBRARY
|
||||
)
|
||||
|
||||
if (WebP_FOUND)
|
||||
set (WEBP_INCLUDES "${WEBP_INCLUDE_DIR}")
|
||||
set (WEBP_LIBRARIES ${WEBP_LIBRARY} ${WEBPDEMUX_LIBRARY})
|
||||
|
||||
if (NOT TARGET WebP::WebP)
|
||||
add_library(WebP::WebP UNKNOWN IMPORTED)
|
||||
set_target_properties(WebP::WebP PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES ${WEBP_INCLUDES})
|
||||
set_property(TARGET WebP::WebP APPEND PROPERTY
|
||||
IMPORTED_LOCATION ${WEBP_LIBRARY})
|
||||
endif ()
|
||||
if (NOT TARGET WebP::WebPDemux)
|
||||
add_library(WebP::WebPDemux UNKNOWN IMPORTED)
|
||||
set_target_properties(WebP::WebPDemux PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES ${WEBP_INCLUDES})
|
||||
set_property(TARGET WebP::WebPDemux APPEND PROPERTY
|
||||
IMPORTED_LOCATION ${WEBPDEMUX_LIBRARY})
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
mark_as_advanced (
|
||||
WEBP_INCLUDE_DIR
|
||||
WEBP_LIBRARY
|
||||
WEBPDEMUX_LIBRARY
|
||||
)
|
||||
@@ -1,49 +0,0 @@
|
||||
# Module to find Webp
|
||||
#
|
||||
# This module will first look into the directories defined by the variables:
|
||||
# - Webp_ROOT, WEBP_INCLUDE_PATH, WEBP_LIBRARY_PATH
|
||||
#
|
||||
# This module defines the following variables:
|
||||
#
|
||||
# Webp_FOUND True if Webp was found.
|
||||
# WEBP_INCLUDES Where to find Webp headers
|
||||
# WEBP_LIBRARIES List of libraries to link against when using Webp
|
||||
# WEBP_VERSION Version of Webp (e.g., 3.6.2)
|
||||
|
||||
include (FindPackageHandleStandardArgs)
|
||||
|
||||
find_path (WEBP_INCLUDE_DIR webp/encode.h
|
||||
HINTS
|
||||
${WEBP_INCLUDE_PATH}
|
||||
ENV WEBP_INCLUDE_PATH
|
||||
DOC "The directory where Webp headers reside")
|
||||
|
||||
find_library (WEBP_LIBRARY webp
|
||||
HINTS
|
||||
${WEBP_LIBRARY_PATH}
|
||||
ENV WEBP_LIBRARY_PATH
|
||||
DOC "The directory where Webp libraries reside")
|
||||
|
||||
include (FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args (Webp
|
||||
REQUIRED_VARS WEBP_INCLUDE_DIR
|
||||
WEBP_LIBRARY
|
||||
)
|
||||
|
||||
if (Webp_FOUND)
|
||||
set (WEBP_INCLUDES "${WEBP_INCLUDE_DIR}")
|
||||
set (WEBP_LIBRARIES "${WEBP_LIBRARY}")
|
||||
|
||||
if (NOT TARGET Webp::Webp)
|
||||
add_library(Webp::Webp UNKNOWN IMPORTED)
|
||||
set_target_properties(Webp::Webp PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${WEBP_INCLUDES}")
|
||||
set_property(TARGET Webp::Webp APPEND PROPERTY
|
||||
IMPORTED_LOCATION "${WEBP_LIBRARIES}")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
mark_as_advanced (
|
||||
WEBP_INCLUDE_DIR
|
||||
WEBP_LIBRARY
|
||||
)
|
||||
@@ -0,0 +1,79 @@
|
||||
# Copyright Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio
|
||||
|
||||
# Find the pugixml XML parsing library.
|
||||
#
|
||||
# Sets the usual variables expected for find_package scripts:
|
||||
#
|
||||
# PUGIXML_INCLUDES - header location
|
||||
# PUGIXML_LIBRARIES - library to link against
|
||||
# PUGIXML_FOUND - true if pugixml was found.
|
||||
|
||||
# First try the config files and hope they're good enough
|
||||
find_package (pugixml CONFIG)
|
||||
|
||||
if (TARGET pugixml::pugixml)
|
||||
# New pugixml (>= 1.11) has nice config files we can rely on and makes a
|
||||
# pugixml::pugixml target.
|
||||
if (VERBOSE)
|
||||
message (STATUS "Found CONFIG for pugixml (>=1.11)")
|
||||
endif ()
|
||||
|
||||
set (PUGIXML_FOUND true)
|
||||
set (pugixml_FOUND true)
|
||||
get_target_property(PUGIXML_INCLUDES pugixml::pugixml INTERFACE_INCLUDE_DIRECTORIES)
|
||||
get_target_property(PUGIXML_LIBRARIES pugixml::pugixml INTERFACE_LINK_LIBRARIES)
|
||||
|
||||
# elseif (TARGET pugixml)
|
||||
# # But older pugixml (<= 1.10) has mediocre config files that are not
|
||||
# # reliable in practice. They also only define a "pugixml" target but
|
||||
# # not "pugixml::pugixml". So just fall through to the "no config" case
|
||||
# # below, and figure everything out by hand.
|
||||
|
||||
else ()
|
||||
# If no config file is found for PugiXML, do it the old fashioned way.
|
||||
find_path (PUGIXML_INCLUDE_DIR
|
||||
NAMES pugixml.hpp
|
||||
PATH_SUFFIXES pugixml-1.8 pugixml-1.9 pugixml-1.10)
|
||||
set (pugixml_required_vars PUGIXML_INCLUDE_DIR)
|
||||
find_library (PUGIXML_LIBRARY
|
||||
NAMES pugixml
|
||||
PATH_SUFFIXES pugixml-1.8 pugixml-1.9 pugixml-1.10)
|
||||
|
||||
if (PUGIXML_INCLUDE_DIR)
|
||||
file (STRINGS "${PUGIXML_INCLUDE_DIR}/pugixml.hpp" TMP REGEX "define PUGIXML_VERSION .*$")
|
||||
string (REGEX MATCHALL "[0-9]+" PUGIXML_CODED_VERSION ${TMP})
|
||||
if (PUGIXML_CODED_VERSION VERSION_GREATER_EQUAL 1000)
|
||||
math (EXPR PUGIXML_VERSION_MAJOR "${PUGIXML_CODED_VERSION} / 1000")
|
||||
math (EXPR PUGIXML_VERSION_MINOR "(${PUGIXML_CODED_VERSION} % 1000) / 10")
|
||||
else ()
|
||||
math (EXPR PUGIXML_VERSION_MAJOR "${PUGIXML_CODED_VERSION} / 100")
|
||||
math (EXPR PUGIXML_VERSION_MINOR "(${PUGIXML_CODED_VERSION} % 100) / 10")
|
||||
endif ()
|
||||
set (PUGIXML_VERSION ${PUGIXML_VERSION_MAJOR}.${PUGIXML_VERSION_MINOR})
|
||||
endif ()
|
||||
|
||||
# Support the REQUIRED and QUIET arguments, and set PUGIXML_FOUND if found.
|
||||
include (FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args (pugixml DEFAULT_MSG
|
||||
PUGIXML_LIBRARY PUGIXML_INCLUDE_DIR)
|
||||
|
||||
if (PUGIXML_FOUND OR pugixml_FOUND)
|
||||
set (PUGIXML_INCLUDES ${PUGIXML_INCLUDE_DIR})
|
||||
set (PUGIXML_LIBRARIES ${PUGIXML_LIBRARY})
|
||||
|
||||
if (NOT TARGET pugixml::pugixml)
|
||||
add_library(pugixml::pugixml UNKNOWN IMPORTED)
|
||||
set_target_properties(pugixml::pugixml PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${PUGIXML_INCLUDES}")
|
||||
if (PUGIXML_LIBRARIES)
|
||||
set_property(TARGET pugixml::pugixml APPEND PROPERTY
|
||||
IMPORTED_LOCATION "${PUGIXML_LIBRARIES}")
|
||||
endif ()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
mark_as_advanced (PUGIXML_LIBRARY PUGIXML_INCLUDE_DIR)
|
||||
|
||||
endif()
|
||||
@@ -1,257 +0,0 @@
|
||||
# Copyright 2008-present Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio/blob/master/LICENSE.md
|
||||
|
||||
|
||||
# Macro to add a build target for an IO plugin.
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# add_oiio_plugin ( source1 [source2 ...]
|
||||
# [ NAME targetname ... ]
|
||||
# [ SRC source1 ... ]
|
||||
# [ INCLUDE_DIRS include_dir1 ... ]
|
||||
# [ LINK_LIBRARIES external_lib1 ... ]
|
||||
# [ DEFINITIONS -DFOO=bar ... ])
|
||||
#
|
||||
# The plugin name can be specified with NAME, otherwise is inferred from the
|
||||
# subdirectory name. The source files of the binary can be specifeied with
|
||||
# SRC, otherwise are inferred to be all the .cpp files within the
|
||||
# subdirectory. Optional compile DEFINITIONS, private INCLUDE_DIRS, and
|
||||
# priviate LINK_LIBRARIES may also be specified. The source is automatically
|
||||
# linked against OpenImageIO.
|
||||
#
|
||||
# The plugin may be disabled individually using any of the usual
|
||||
# check_is_enabled() conventions (e.g. -DENABLE_<format>=OFF).
|
||||
#
|
||||
# What goes on under the covers is quite different depending on whether
|
||||
# EMBEDPLUGINS is 0 or 1. If EMBEDPLUGINS is 0 (in which case this is
|
||||
# expected to be called *after* the OpenImageIO target is declared), it will
|
||||
# create a new target to build the full plugin. On the other hand, if
|
||||
# EMBEDPLUGINS is 1 (in which case this should be called *before* the
|
||||
# OpenImageIO target is declared), it will merely append the required
|
||||
# definitions, includs, and libraries to lists format_plugin_blah that will
|
||||
# be handed off too the setup of the later OpenImageIO target.
|
||||
#
|
||||
macro (add_oiio_plugin)
|
||||
cmake_parse_arguments (_plugin "" "NAME" "SRC;INCLUDE_DIRS;LINK_LIBRARIES;DEFINITIONS" ${ARGN})
|
||||
# Arguments: <prefix> <options> <one_value_keywords> <multi_value_keywords> args...
|
||||
get_filename_component (_plugin_name ${CMAKE_CURRENT_SOURCE_DIR} NAME_WE)
|
||||
if (NOT _plugin_NAME)
|
||||
# If NAME is not supplied, infer target name (and therefore the
|
||||
# executable name) from the directory name.
|
||||
get_filename_component (_plugin_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
|
||||
endif ()
|
||||
# if (NOT _plugin_SRC)
|
||||
# # If SRC is not supplied, assume local cpp files are its source.
|
||||
# file (GLOB _plugin_SRC *.cpp)
|
||||
# endif ()
|
||||
check_is_enabled (${_plugin_name} _enable_plugin)
|
||||
if (_enable_plugin)
|
||||
if (EMBEDPLUGINS)
|
||||
# Add each source file to the libOpenImageIO_srcs, but it takes some
|
||||
# bending over backwards to change it in the parent scope.
|
||||
set (_plugin_all_source ${libOpenImageIO_srcs})
|
||||
foreach (_plugin_source_file ${_plugin_UNPARSED_ARGUMENTS} )
|
||||
list (APPEND _plugin_all_source "${CMAKE_CURRENT_SOURCE_DIR}/${_plugin_source_file}")
|
||||
endforeach ()
|
||||
set (libOpenImageIO_srcs "${_plugin_all_source}" PARENT_SCOPE)
|
||||
set (format_plugin_definitions ${format_plugin_definitions} ${_plugin_DEFINITIONS} PARENT_SCOPE)
|
||||
set (format_plugin_include_dirs ${format_plugin_include_dirs} ${_plugin_INCLUDE_DIRS} PARENT_SCOPE)
|
||||
set (format_plugin_libs ${format_plugin_libs} ${_plugin_LINK_LIBRARIES} PARENT_SCOPE)
|
||||
else ()
|
||||
# Get the name of the current directory and use it as the target name.
|
||||
get_filename_component (_plugin_name ${CMAKE_CURRENT_SOURCE_DIR} NAME)
|
||||
add_library (${_plugin_name} MODULE ${_plugin_UNPARSED_ARGUMENTS})
|
||||
target_compile_definitions (${_plugin_name} PRIVATE
|
||||
${_plugin_DEFINITIONS}
|
||||
OpenImageIO_EXPORTS)
|
||||
target_include_directories (${_plugin_name} PRIVATE ${_plugin_INCLUDE_DIRS})
|
||||
target_link_libraries (${_plugin_name} PUBLIC OpenImageIO
|
||||
PRIVATE ${_plugin_LINK_LIBRARIES})
|
||||
set_target_properties (${_plugin_name} PROPERTIES PREFIX "" FOLDER "Plugins")
|
||||
install_targets (${_plugin_name})
|
||||
endif ()
|
||||
else ()
|
||||
message (STATUS "${ColorRed}Disabling ${_plugin_name} ${ColorReset}")
|
||||
string (TOUPPER ${_plugin_name} _plugin_name_upper)
|
||||
set (format_plugin_definitions ${format_plugin_definitions} DISABLE_${_plugin_name_upper} PARENT_SCOPE)
|
||||
endif ()
|
||||
endmacro ()
|
||||
|
||||
|
||||
|
||||
# Macro to add an executable build target. The executable name can be
|
||||
# specified with NAME, otherwise is inferred from the subdirectory name. The
|
||||
# source files of the binary can be specifeied with SRC, otherwise are
|
||||
# inferred to be all the .cpp files within the subdirectory. Optional
|
||||
# compile DEFINITIONS, private INCLUDE_DIRS, and priviate LINK_LIBRARIES may
|
||||
# also be specified.
|
||||
#
|
||||
# The executable may be disabled individually using any of the usual
|
||||
# check_is_enabled() conventions (e.g. -DENABLE_<executable>=OFF).
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# fancy_add_executable ([ NAME targetname ... ]
|
||||
# [ SRC source1 ... ]
|
||||
# [ INCLUDE_DIRS include_dir1 ... ]
|
||||
# [ DEFINITIONS -DFOO=bar ... ])
|
||||
# [ LINK_LIBRARIES external_lib1 ... ]
|
||||
#
|
||||
macro (fancy_add_executable)
|
||||
cmake_parse_arguments (_target "" "NAME" "SRC;INCLUDE_DIRS;SYSTEM_INCLUDE_DIRS;LINK_LIBRARIES;DEFINITIONS" ${ARGN})
|
||||
# Arguments: <prefix> <options> <one_value_keywords> <multi_value_keywords> args...
|
||||
if (NOT _target_NAME)
|
||||
# If NAME is not supplied, infer target name (and therefore the
|
||||
# executable name) from the directory name.
|
||||
get_filename_component (_target_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
|
||||
endif ()
|
||||
if (NOT _target_SRC)
|
||||
# If SRC is not supplied, assume local cpp files are its source.
|
||||
file (GLOB _target_SRC *.cpp)
|
||||
endif ()
|
||||
check_is_enabled (${_target_NAME} _target_NAME_enabled)
|
||||
if (_target_NAME_enabled)
|
||||
add_executable (${_target_NAME} ${_target_SRC})
|
||||
if (_target_INCLUDE_DIRS)
|
||||
target_include_directories (${_target_NAME} PRIVATE ${_target_INCLUDE_DIRS})
|
||||
endif ()
|
||||
if (_target_SYSTEM_INCLUDE_DIRS)
|
||||
target_include_directories (${_target_NAME} SYSTEM PRIVATE ${_target_SYSTEM_INCLUDE_DIRS})
|
||||
endif ()
|
||||
if (_target_DEFINITIONS)
|
||||
target_compile_definitions (${_target_name} PRIVATE ${_target_DEFINITIONS})
|
||||
endif ()
|
||||
if (_target_LINK_LIBRARIES)
|
||||
target_link_libraries (${_target_NAME} PRIVATE ${_target_LINK_LIBRARIES})
|
||||
endif ()
|
||||
set_target_properties (${_target_NAME} PROPERTIES FOLDER "Tools")
|
||||
install_targets (${_target_NAME})
|
||||
else ()
|
||||
message (STATUS "${ColorRed}Disabling ${_target_NAME} ${ColorReset}")
|
||||
endif ()
|
||||
endmacro ()
|
||||
|
||||
|
||||
|
||||
# oiio_set_testenv() - add environment variables to a test
|
||||
#
|
||||
# Usage:
|
||||
# oiio_set_testenv ( testname
|
||||
# testsuite - The root of all tests ${CMAKE_SOURCE_DIR}/testsuite
|
||||
# testsrcdir - Current test directory in ${CMAKE_SOURCE_DIR}
|
||||
# testdir - Current test sandbox in ${CMAKE_BINARY_DIR}
|
||||
# IMAGEDIR - Optional path to image reference/compare directory)
|
||||
#
|
||||
macro (oiio_set_testenv testname testsuite testsrcdir testdir IMAGEDIR)
|
||||
set_property(TEST ${testname} PROPERTY ENVIRONMENT
|
||||
"OIIO_TESTSUITE_ROOT=${testsuite}"
|
||||
";OIIO_TESTSUITE_SRC=${testsrcdir}"
|
||||
";OIIO_TESTSUITE_CUR=${testdir}")
|
||||
if (NOT ${IMAGEDIR} STREQUAL "")
|
||||
set_property(TEST ${testname} APPEND PROPERTY ENVIRONMENT
|
||||
"OIIO_TESTSUITE_IMAGEDIR=${IMAGEDIR}")
|
||||
endif()
|
||||
endmacro ()
|
||||
|
||||
|
||||
# oiio_add_tests() - add a set of test cases.
|
||||
#
|
||||
# Usage:
|
||||
# oiio_add_tests ( test1 [ test2 ... ]
|
||||
# [ IMAGEDIR name_of_reference_image_directory ]
|
||||
# [ URL http://find.reference.cases.here.com ]
|
||||
# [ FOUNDVAR variable_name ... ]
|
||||
# [ ENABLEVAR variable_name ... ]
|
||||
# )
|
||||
#
|
||||
# The optional argument IMAGEDIR is used to check whether external test images
|
||||
# (not supplied with OIIO) are present, and to disable the test cases if
|
||||
# they're not. If IMAGEDIR is present, URL should also be included to tell
|
||||
# the user where to find such tests.
|
||||
#
|
||||
# The optional FOUNDVAR introduces variables (typically Foo_FOUND) that if
|
||||
# not existing and true, will skip the test.
|
||||
#
|
||||
# The optional ENABLEVAR introduces variables (typically ENABLE_Foo) that
|
||||
# if existing and yet false, will skip the test.
|
||||
#
|
||||
macro (oiio_add_tests)
|
||||
cmake_parse_arguments (_ats "" "" "URL;IMAGEDIR;LABEL;FOUNDVAR;ENABLEVAR;TESTNAME" ${ARGN})
|
||||
# Arguments: <prefix> <options> <one_value_keywords> <multi_value_keywords> args...
|
||||
set (_ats_testdir "${OIIO_TESTSUITE_IMAGEDIR}/${_ats_IMAGEDIR}")
|
||||
# If there was a FOUNDVAR param specified and that variable name is
|
||||
# not defined, mark the test as broken.
|
||||
foreach (_var ${_ats_FOUNDVAR})
|
||||
if (NOT ${_var})
|
||||
set (_ats_LABEL "broken")
|
||||
endif ()
|
||||
endforeach ()
|
||||
foreach (_var ${_ats_ENABLEVAR})
|
||||
if ((NOT "${${_var}}" STREQUAL "" AND NOT "${${_var}}") OR
|
||||
(NOT "$ENV{${_var}}" STREQUAL "" AND NOT "$ENV{${_var}}"))
|
||||
set (_ats_LABEL "broken")
|
||||
endif ()
|
||||
endforeach ()
|
||||
if (_ats_IMAGEDIR AND NOT EXISTS ${_ats_testdir})
|
||||
# If the directory containig reference data (images) for the test
|
||||
# isn't found, point the user at the URL.
|
||||
message (STATUS "\n\nDid not find ${_ats_testdir}")
|
||||
message (STATUS " -> Will not run tests ${_ats_UNPARSED_ARGUMENTS}")
|
||||
message (STATUS " -> You can find it at ${_ats_URL}\n")
|
||||
else ()
|
||||
# Add the tests if all is well.
|
||||
set (_has_generator_expr TRUE)
|
||||
foreach (_testname ${_ats_UNPARSED_ARGUMENTS})
|
||||
set (_testsuite "${CMAKE_SOURCE_DIR}/testsuite")
|
||||
set (_testsrcdir "${_testsuite}/${_testname}")
|
||||
set (_testdir "${CMAKE_BINARY_DIR}/testsuite/${_testname}")
|
||||
if (_ats_TESTNAME)
|
||||
set (_testname "${_ats_TESTNAME}")
|
||||
endif ()
|
||||
if (_ats_LABEL MATCHES "broken")
|
||||
set (_testname "${_testname}-broken")
|
||||
endif ()
|
||||
|
||||
set (_runtest ${PYTHON_EXECUTABLE} "${CMAKE_SOURCE_DIR}/testsuite/runtest.py" ${_testdir})
|
||||
if (MSVC_IDE)
|
||||
set (_runtest ${_runtest} --devenv-config $<CONFIGURATION>
|
||||
--solution-path "${CMAKE_BINARY_DIR}" )
|
||||
endif ()
|
||||
|
||||
file (MAKE_DIRECTORY "${_testdir}")
|
||||
|
||||
add_test ( NAME ${_testname}
|
||||
COMMAND ${_runtest} )
|
||||
|
||||
oiio_set_testenv("${_testname}" "${_testsuite}"
|
||||
"${_testsrcdir}" "${_testdir}" "${_ats_testdir}")
|
||||
|
||||
# For texture tests, add a second test using batch mode as well.
|
||||
if (_testname MATCHES "texture")
|
||||
set (_testname ${_testname}.batch)
|
||||
set (_testdir ${_testdir}.batch)
|
||||
set (_runtest ${PYTHON_EXECUTABLE} "${CMAKE_SOURCE_DIR}/testsuite/runtest.py" ${_testdir})
|
||||
if (MSVC_IDE)
|
||||
set (_runtest ${_runtest} --devenv-config $<CONFIGURATION>
|
||||
--solution-path "${CMAKE_BINARY_DIR}" )
|
||||
endif ()
|
||||
file (MAKE_DIRECTORY "${_testdir}")
|
||||
add_test ( NAME "${_testname}"
|
||||
COMMAND env TESTTEX_BATCH=1 ${_runtest} )
|
||||
|
||||
oiio_set_testenv("${_testname}" "${_testsuite}"
|
||||
"${_testsrcdir}" "${_testdir}.batch" "${_ats_testdir}")
|
||||
endif ()
|
||||
|
||||
#if (VERBOSE)
|
||||
# message (STATUS "TEST ${_testname}: ${_runtest}")
|
||||
#endif ()
|
||||
endforeach ()
|
||||
if (VERBOSE)
|
||||
message (STATUS "TESTS: ${_ats_UNPARSED_ARGUMENTS}")
|
||||
endif ()
|
||||
endif ()
|
||||
endmacro ()
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
# Copyright Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio/
|
||||
|
||||
#########################################################################
|
||||
# Packaging
|
||||
set (CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
|
||||
set (CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
|
||||
set (CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
|
||||
# "Vendor" is only used in copyright notices, so we use the same thing that
|
||||
# the rest of the copyright notices say.
|
||||
set (CPACK_PACKAGE_VENDOR ${PROJECT_AUTHORS})
|
||||
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "OpenImageIO is an open source library for reading and writing image file formats, a nice format-agnostic image viewer, and other image-related classes and utilities.")
|
||||
set (CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/src/doc/Description.txt")
|
||||
set (CPACK_PACKAGE_FILE_NAME ${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR})
|
||||
#SET (CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_SOURCE_DIR}")
|
||||
file (MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/cpack")
|
||||
file (COPY "${PROJECT_SOURCE_DIR}/LICENSE.md" DESTINATION "${CMAKE_BINARY_DIR}/cpack")
|
||||
file (RENAME "${CMAKE_BINARY_DIR}/cpack/LICENSE.md" "${CMAKE_BINARY_DIR}/cpack/License.txt")
|
||||
set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_BINARY_DIR}/cpack/License.txt")
|
||||
file (COPY "${PROJECT_SOURCE_DIR}/README.md" DESTINATION "${CMAKE_BINARY_DIR}/cpack")
|
||||
set (CPACK_RESOURCE_FILE_README "${CMAKE_BINARY_DIR}/cpack/README.md")
|
||||
set (CPACK_RESOURCE_FILE_WELCOME "${PROJECT_SOURCE_DIR}/src/doc/Welcome.txt")
|
||||
#SET (CPACK_STRIP_FILES Do we need this?)
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||
set (CPACK_GENERATOR "TGZ;STGZ;RPM;DEB")
|
||||
set (CPACK_SOURCE_GENERATOR "TGZ")
|
||||
endif ()
|
||||
if (APPLE)
|
||||
set (CPACK_GENERATOR "TGZ;STGZ;PackageMaker")
|
||||
set (CPACK_SOURCE_GENERATOR "TGZ")
|
||||
endif ()
|
||||
if (WIN32)
|
||||
set (CPACK_GENERATOR "NSIS")
|
||||
set(CPACK_PACKAGE_EXECUTABLES "iv" "iv - Image Viewer")
|
||||
# set(CPACK_CREATE_DESCTOP_LINKS "iv" "iv - Image Viewer")
|
||||
set(CPACK_NSIS_MODIFY_PATH ON)
|
||||
include (InstallRequiredSystemLibraries)
|
||||
endif ()
|
||||
set (CPACK_SOURCE_PACKAGE_FILE_NAME ${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}-source)
|
||||
#set (CPACK_SOURCE_STRIP_FILES Do we need this?)
|
||||
set (CPACK_SOURCE_IGNORE_FILES ".*~")
|
||||
set (CPACK_COMPONENT_UNSPECIFIED_HIDDEN TRUE)
|
||||
set (CPACK_COMPONENT_UNSPECIFIED_REQUIRED TRUE)
|
||||
set (CPACK_COMPONENTS_ALL user developer documentation Unspecified)
|
||||
set (CPACK_COMPONENT_USER_DISPLAY_NAME "Applications")
|
||||
set (CPACK_COMPONENT_DEVELOPER_DISPLAY_NAME "Developer files")
|
||||
set (CPACK_COMPONENT_DOCUMENTATION_DISPLAY_NAME "Documentation")
|
||||
set (CPACK_COMPONENT_USER_DESCRIPTION
|
||||
"Applications: oiiotool, iv, iinfo, iconvert, idiff, igrep, maketx and libraries")
|
||||
set (CPACK_COMPONENT_DEVELOPER_DESCRIPTION "Include files")
|
||||
set (CPACK_COMPONENT_DOCUMENTATION_DESCRIPTION "OpenImageIO documentation")
|
||||
set (CPACK_COMPONENT_DEVELOPER_DEPENDS user)
|
||||
include (CPack)
|
||||
+49
-40
@@ -4,18 +4,19 @@
|
||||
|
||||
# Python-related options.
|
||||
option (USE_PYTHON "Build the Python bindings" ON)
|
||||
set (PYTHON_VERSION "2.7" CACHE STRING "Target version of python to find")
|
||||
set (PYTHON_VERSION "" CACHE STRING "Target version of python to find")
|
||||
option (PYLIB_INCLUDE_SONAME "If ON, soname/soversion will be set for Python module library" OFF)
|
||||
option (PYLIB_LIB_PREFIX "If ON, prefix the Python module with 'lib'" OFF)
|
||||
set (PYMODULE_SUFFIX "" CACHE STRING "Suffix to add to Python module init namespace")
|
||||
if (WIN32)
|
||||
set (PYLIB_LIB_TYPE SHARED CACHE STRING "Type of library to build for python module (MODULE or SHARED)")
|
||||
else ()
|
||||
set (PYLIB_LIB_TYPE MODULE CACHE STRING "Type of library to build for python module (MODULE or SHARED)")
|
||||
endif ()
|
||||
|
||||
|
||||
# Find Python. This macro should only be called if python is required. If
|
||||
# Python cannot be found, it will be a fatal error.
|
||||
# Variables set by this macro:
|
||||
# PYTHON_INCLUDES_PATH - directory where python headers are found
|
||||
# PYTHON_LIBRARIES - python libraries to link
|
||||
# PYTHON_SITE_DIR - our own install dir where our python moduels go
|
||||
macro (find_python)
|
||||
if (NOT VERBOSE)
|
||||
set (PythonInterp_FIND_QUIETLY true)
|
||||
@@ -24,31 +25,38 @@ macro (find_python)
|
||||
|
||||
# Attempt to find the desired version, but fall back to other
|
||||
# additional versions.
|
||||
checked_find_package (PythonInterp ${PYTHON_VERSION} REQUIRED)
|
||||
unset (_req)
|
||||
if (USE_PYTHON)
|
||||
set (_req REQUIRED)
|
||||
if (PYTHON_VERSION)
|
||||
list (APPEND _req EXACT)
|
||||
endif ()
|
||||
endif ()
|
||||
checked_find_package (Python ${PYTHON_VERSION}
|
||||
${_req}
|
||||
COMPONENTS Interpreter Development
|
||||
PRINT Python_VERSION Python_EXECUTABLE
|
||||
Python_LIBRARIES
|
||||
Python_Development_FOUND
|
||||
Python_Interpreter_FOUND )
|
||||
|
||||
# The version that was found may not be the default or user
|
||||
# defined one.
|
||||
set (PYTHON_VERSION_FOUND ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR})
|
||||
set (PYTHON_VERSION_FOUND ${Python_VERSION_MAJOR}.${Python_VERSION_MINOR})
|
||||
|
||||
if (NOT ${PYTHON_VERSION} VERSION_EQUAL ${PYTHON_VERSION_FOUND} )
|
||||
message (WARNING "The requested version ${PYTHON_VERSION} was not found.")
|
||||
message (WARNING "Using ${PYTHON_VERSION_FOUND} instead.")
|
||||
endif ()
|
||||
|
||||
checked_find_package (PythonLibs ${PYTHON_VERSION_FOUND} REQUIRED)
|
||||
if (VERBOSE)
|
||||
message (STATUS " Python include dirs ${PYTHON_INCLUDE_PATH}")
|
||||
message (STATUS " Python libraries ${PYTHON_LIBRARIES}")
|
||||
message (STATUS " Python site packages dir ${PYTHON_SITE_DIR}")
|
||||
message (STATUS " Python to include 'lib' prefix: ${PYLIB_LIB_PREFIX}")
|
||||
message (STATUS " Python to include SO version: ${PYLIB_INCLUDE_SONAME}")
|
||||
message (STATUS " Python version ${PYTHON_VERSION_STRING}")
|
||||
message (STATUS " Python version major: ${PYTHON_VERSION_MAJOR} minor: ${PYTHON_VERSION_MINOR}")
|
||||
endif ()
|
||||
# Give hints to subsequent pybind11 searching to ensure that it finds
|
||||
# exactly the same version that we found.
|
||||
set (PythonInterp_FIND_VERSION PYTHON_VERSION_FOUND)
|
||||
set (PythonInterp_FIND_VERSION_MAJOR ${Python_VERSION_MAJOR})
|
||||
|
||||
if (NOT DEFINED PYTHON_SITE_DIR)
|
||||
set (PYTHON_SITE_DIR "${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION_FOUND}/site-packages")
|
||||
endif ()
|
||||
if (VERBOSE)
|
||||
message (STATUS " Python site packages dir ${PYTHON_SITE_DIR}")
|
||||
message (STATUS " Python to include 'lib' prefix: ${PYLIB_LIB_PREFIX}")
|
||||
message (STATUS " Python to include SO version: ${PYLIB_INCLUDE_SONAME}")
|
||||
endif ()
|
||||
endmacro()
|
||||
|
||||
|
||||
@@ -66,20 +74,19 @@ macro (setup_python_module)
|
||||
set_property (SOURCE ${lib_SOURCES} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-macro-redefined ")
|
||||
endif ()
|
||||
|
||||
# Add the library itself
|
||||
add_library (${target_name} MODULE ${lib_SOURCES})
|
||||
|
||||
# Set up include dirs for python & pybind11
|
||||
target_include_directories (${target_name} SYSTEM PRIVATE ${PYTHON_INCLUDE_PATH})
|
||||
pybind11_add_module(${target_name} ${PYLIB_LIB_TYPE} ${lib_SOURCES})
|
||||
|
||||
# # Add the library itself
|
||||
# add_library (${target_name} MODULE ${lib_SOURCES})
|
||||
#
|
||||
# Declare the libraries it should link against
|
||||
target_link_libraries (${target_name} PRIVATE
|
||||
pybind11::pybind11 ${lib_LIBS} ${SANITIZE_LIBRARIES})
|
||||
if (APPLE)
|
||||
set_target_properties (${target_name} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
|
||||
else ()
|
||||
target_link_libraries (${target_name} PRIVATE ${PYTHON_LIBRARIES})
|
||||
endif ()
|
||||
target_link_libraries (${target_name}
|
||||
PRIVATE ${lib_LIBS} ${SANITIZE_LIBRARIES})
|
||||
|
||||
# if (APPLE)
|
||||
# set_target_properties (${target_name} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
|
||||
# endif ()
|
||||
|
||||
|
||||
# Exclude the 'lib' prefix from the name
|
||||
if (NOT PYLIB_LIB_PREFIX)
|
||||
@@ -87,7 +94,8 @@ macro (setup_python_module)
|
||||
PRIVATE "PYMODULE_NAME=${lib_MODULE}")
|
||||
set_target_properties (${target_name} PROPERTIES
|
||||
OUTPUT_NAME ${lib_MODULE}
|
||||
PREFIX "")
|
||||
# PREFIX ""
|
||||
)
|
||||
else ()
|
||||
target_compile_definitions(${target_name}
|
||||
PRIVATE "PYMODULE_NAME=Py${lib_MODULE}")
|
||||
@@ -96,6 +104,7 @@ macro (setup_python_module)
|
||||
PREFIX lib)
|
||||
endif ()
|
||||
|
||||
# This is only needed for SpComp2
|
||||
if (PYLIB_INCLUDE_SONAME)
|
||||
if (VERBOSE)
|
||||
message(STATUS "Setting Py${lib_MODULE} SOVERSION to: ${SOVERSION}")
|
||||
@@ -105,11 +114,11 @@ macro (setup_python_module)
|
||||
SOVERSION ${SOVERSION} )
|
||||
endif()
|
||||
|
||||
if (WIN32)
|
||||
set_target_properties (${target_name} PROPERTIES
|
||||
DEBUG_POSTFIX "_d"
|
||||
SUFFIX ".pyd")
|
||||
endif()
|
||||
# if (WIN32)
|
||||
# set_target_properties (${target_name} PROPERTIES
|
||||
# DEBUG_POSTFIX "_d"
|
||||
# SUFFIX ".pyd")
|
||||
# endif()
|
||||
|
||||
# In the build area, put it in lib/python so it doesn't clash with the
|
||||
# non-python libraries of the same name (which aren't prefixed by "lib"
|
||||
|
||||
@@ -0,0 +1,310 @@
|
||||
# Copyright Contributors to the OpenImageIO project.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# https://github.com/OpenImageIO/oiio/
|
||||
|
||||
include (CTest)
|
||||
|
||||
# Make a build/platform/testsuite directory, and copy the master runtest.py
|
||||
# there. The rest is up to the tests themselves.
|
||||
file (MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/testsuite")
|
||||
file (COPY "${CMAKE_CURRENT_SOURCE_DIR}/testsuite/common"
|
||||
DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/testsuite")
|
||||
add_custom_command (OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/testsuite/runtest.py"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/testsuite/runtest.py"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/testsuite/runtest.py"
|
||||
MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/testsuite/runtest.py")
|
||||
add_custom_target ( CopyFiles ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/testsuite/runtest.py" )
|
||||
|
||||
set(OIIO_TESTSUITE_IMAGEDIR "${PROJECT_SOURCE_DIR}/.." CACHE PATH
|
||||
"Location of oiio-images, openexr-images, libtiffpic, etc.." )
|
||||
|
||||
|
||||
|
||||
# oiio_set_testenv() - add environment variables to a test
|
||||
#
|
||||
# Usage:
|
||||
# oiio_set_testenv ( testname
|
||||
# testsuite - The root of all tests ${CMAKE_SOURCE_DIR}/testsuite
|
||||
# testsrcdir - Current test directory in ${CMAKE_SOURCE_DIR}
|
||||
# testdir - Current test sandbox in ${CMAKE_BINARY_DIR}
|
||||
# IMAGEDIR - Optional path to image reference/compare directory)
|
||||
#
|
||||
macro (oiio_set_testenv testname testsuite testsrcdir testdir IMAGEDIR)
|
||||
set_property(TEST ${testname} PROPERTY ENVIRONMENT
|
||||
"OIIO_TESTSUITE_ROOT=${testsuite}"
|
||||
";OIIO_TESTSUITE_SRC=${testsrcdir}"
|
||||
";OIIO_TESTSUITE_CUR=${testdir}")
|
||||
if (NOT ${IMAGEDIR} STREQUAL "")
|
||||
set_property(TEST ${testname} APPEND PROPERTY ENVIRONMENT
|
||||
"OIIO_TESTSUITE_IMAGEDIR=${IMAGEDIR}")
|
||||
endif()
|
||||
endmacro ()
|
||||
|
||||
|
||||
|
||||
# oiio_add_tests() - add a set of test cases.
|
||||
#
|
||||
# Usage:
|
||||
# oiio_add_tests ( test1 [ test2 ... ]
|
||||
# [ IMAGEDIR name_of_reference_image_directory ]
|
||||
# [ URL http://find.reference.cases.here.com ]
|
||||
# [ FOUNDVAR variable_name ... ]
|
||||
# [ ENABLEVAR variable_name ... ]
|
||||
# )
|
||||
#
|
||||
# The optional argument IMAGEDIR is used to check whether external test images
|
||||
# (not supplied with OIIO) are present, and to disable the test cases if
|
||||
# they're not. If IMAGEDIR is present, URL should also be included to tell
|
||||
# the user where to find such tests.
|
||||
#
|
||||
# The optional FOUNDVAR introduces variables (typically Foo_FOUND) that if
|
||||
# not existing and true, will skip the test.
|
||||
#
|
||||
# The optional ENABLEVAR introduces variables (typically ENABLE_Foo) that
|
||||
# if existing and yet false, will skip the test.
|
||||
#
|
||||
macro (oiio_add_tests)
|
||||
cmake_parse_arguments (_ats "" "" "URL;IMAGEDIR;LABEL;FOUNDVAR;ENABLEVAR;TESTNAME" ${ARGN})
|
||||
# Arguments: <prefix> <options> <one_value_keywords> <multi_value_keywords> args...
|
||||
set (_ats_testdir "${OIIO_TESTSUITE_IMAGEDIR}/${_ats_IMAGEDIR}")
|
||||
# If there was a FOUNDVAR param specified and that variable name is
|
||||
# not defined, mark the test as broken.
|
||||
foreach (_var ${_ats_FOUNDVAR})
|
||||
if (NOT ${_var})
|
||||
set (_ats_LABEL "broken")
|
||||
endif ()
|
||||
endforeach ()
|
||||
set (_test_disabled 0)
|
||||
foreach (_var ${_ats_ENABLEVAR})
|
||||
if ((NOT "${${_var}}" STREQUAL "" AND NOT "${${_var}}") OR
|
||||
(NOT "$ENV{${_var}}" STREQUAL "" AND NOT "$ENV{${_var}}"))
|
||||
set (_ats_LABEL "broken")
|
||||
set (_test_disabled 1)
|
||||
endif ()
|
||||
endforeach ()
|
||||
if (_test_disabled)
|
||||
message (STATUS "Skipping test(s) ${_ats_UNPARSED_ARGUMENTS} because of disabled ${_ats_ENABLEVAR}")
|
||||
elseif (_ats_IMAGEDIR AND NOT EXISTS ${_ats_testdir})
|
||||
# If the directory containing reference data (images) for the test
|
||||
# isn't found, point the user at the URL.
|
||||
message (STATUS "\n\nDid not find ${_ats_testdir}")
|
||||
message (STATUS " -> Will not run tests ${_ats_UNPARSED_ARGUMENTS}")
|
||||
message (STATUS " -> You can find it at ${_ats_URL}\n")
|
||||
else ()
|
||||
# Add the tests if all is well.
|
||||
set (_has_generator_expr TRUE)
|
||||
foreach (_testname ${_ats_UNPARSED_ARGUMENTS})
|
||||
set (_testsuite "${CMAKE_SOURCE_DIR}/testsuite")
|
||||
set (_testsrcdir "${_testsuite}/${_testname}")
|
||||
set (_testdir "${CMAKE_BINARY_DIR}/testsuite/${_testname}")
|
||||
if (_ats_TESTNAME)
|
||||
set (_testname "${_ats_TESTNAME}")
|
||||
endif ()
|
||||
if (_ats_LABEL MATCHES "broken")
|
||||
set (_testname "${_testname}-broken")
|
||||
endif ()
|
||||
|
||||
set (_runtest ${Python_EXECUTABLE} "${CMAKE_SOURCE_DIR}/testsuite/runtest.py" ${_testdir})
|
||||
if (MSVC_IDE)
|
||||
set (_runtest ${_runtest} --devenv-config $<CONFIGURATION>
|
||||
--solution-path "${CMAKE_BINARY_DIR}" )
|
||||
endif ()
|
||||
|
||||
file (MAKE_DIRECTORY "${_testdir}")
|
||||
|
||||
add_test ( NAME ${_testname}
|
||||
COMMAND ${_runtest} )
|
||||
|
||||
oiio_set_testenv("${_testname}" "${_testsuite}"
|
||||
"${_testsrcdir}" "${_testdir}" "${_ats_testdir}")
|
||||
|
||||
# For texture tests, add a second test using batch mode as well.
|
||||
if (_testname MATCHES "texture")
|
||||
set (_testname ${_testname}.batch)
|
||||
set (_testdir ${_testdir}.batch)
|
||||
set (_runtest ${Python_EXECUTABLE} "${CMAKE_SOURCE_DIR}/testsuite/runtest.py" ${_testdir})
|
||||
if (MSVC_IDE)
|
||||
set (_runtest ${_runtest} --devenv-config $<CONFIGURATION>
|
||||
--solution-path "${CMAKE_BINARY_DIR}" )
|
||||
endif ()
|
||||
file (MAKE_DIRECTORY "${_testdir}")
|
||||
add_test ( NAME "${_testname}"
|
||||
COMMAND env TESTTEX_BATCH=1 ${_runtest} )
|
||||
|
||||
oiio_set_testenv("${_testname}" "${_testsuite}"
|
||||
"${_testsrcdir}" "${_testdir}.batch" "${_ats_testdir}")
|
||||
endif ()
|
||||
|
||||
#if (VERBOSE)
|
||||
# message (STATUS "TEST ${_testname}: ${_runtest}")
|
||||
#endif ()
|
||||
endforeach ()
|
||||
if (VERBOSE)
|
||||
message (STATUS "TESTS: ${_ats_UNPARSED_ARGUMENTS}")
|
||||
endif ()
|
||||
endif ()
|
||||
endmacro ()
|
||||
|
||||
|
||||
|
||||
# The tests are organized into a macro so it can be called after all the
|
||||
# directories with plugins are included.
|
||||
#
|
||||
macro (oiio_add_all_tests)
|
||||
# Tests that require oiio-images:
|
||||
oiio_add_tests (gpsread
|
||||
oiiotool oiiotool-attribs oiiotool-copy
|
||||
oiiotool-xform
|
||||
maketx oiiotool-maketx
|
||||
misnamed-file
|
||||
texture-crop texture-cropover
|
||||
texture-filtersize
|
||||
texture-overscan
|
||||
texture-wrapfill
|
||||
texture-res texture-maxres
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images"
|
||||
)
|
||||
|
||||
# Remaining freestanding tests:
|
||||
oiio_add_tests (
|
||||
cmake-consumer
|
||||
nonwhole-tiles
|
||||
oiiotool-composite
|
||||
oiiotool-fixnan
|
||||
oiiotool-pattern
|
||||
oiiotool-readerror
|
||||
oiiotool-subimage oiiotool-text
|
||||
diff
|
||||
dither dup-channels
|
||||
jpeg-corrupt
|
||||
missingcolor
|
||||
null
|
||||
rational
|
||||
texture-derivs texture-fill
|
||||
texture-flipt texture-gettexels texture-gray
|
||||
texture-interp-bicubic
|
||||
texture-blurtube
|
||||
texture-half texture-uint16
|
||||
texture-interp-bilinear
|
||||
texture-interp-closest
|
||||
texture-mip-nomip texture-mip-onelevel
|
||||
texture-mip-trilinear
|
||||
texture-missing
|
||||
texture-pointsample
|
||||
texture-udim texture-udim2
|
||||
texture-uint8
|
||||
texture-width0blur
|
||||
texture-fat texture-skinny
|
||||
)
|
||||
|
||||
# Add tests that require the Python bindings if we built the Python
|
||||
# bindings. This is mostly the test that are specifically about testing
|
||||
# the Python bindings themselves, but also a handful of tests that are
|
||||
# mainly about other things but happen to use Python in order to perform
|
||||
# thee test.
|
||||
# We also exclude these tests if this is a sanitizer build on Linux,
|
||||
# because the Python interpreter itself won't be linked with the right asan
|
||||
# libraries to run correctly.
|
||||
if (USE_PYTHON AND NOT BUILD_OIIOUTIL_ONLY AND NOT SANITIZE_ON_LINUX)
|
||||
oiio_add_tests (
|
||||
python-typedesc python-paramlist
|
||||
python-imagespec python-roi python-deep python-colorconfig
|
||||
python-imageinput python-imageoutput
|
||||
python-imagebuf python-imagebufalgo
|
||||
IMAGEDIR oiio-images
|
||||
)
|
||||
endif ()
|
||||
|
||||
oiio_add_tests (oiiotool-color
|
||||
FOUNDVAR OPENCOLORIO_FOUND)
|
||||
|
||||
if (NOT DEFINED ENV{CI} AND NOT DEFINED ENV{GITHUB_ACTIONS})
|
||||
oiio_add_tests (texture-icwrite)
|
||||
endif ()
|
||||
|
||||
# List testsuites for specific formats or features which might be not found
|
||||
# or be intentionally disabled, or which need special external reference
|
||||
# images from the web that if not found, should skip the tests:
|
||||
oiio_add_tests (bmp
|
||||
ENABLEVAR ENABLE_BMP
|
||||
IMAGEDIR bmpsuite
|
||||
URL http://entropymine.com/jason/bmpsuite/bmpsuite.zip)
|
||||
oiio_add_tests (dpx
|
||||
ENABLEVAR ENABLE_DPX
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (field3d texture-field3d
|
||||
FOUNDVAR Field3D_FOUND ENABLEVAR ENABLE_FIELD3D)
|
||||
oiio_add_tests (fits
|
||||
ENABLEVAR ENABLE_FITS
|
||||
IMAGEDIR fits-images
|
||||
URL http://www.cv.nrao.edu/fits/data/tests/)
|
||||
oiio_add_tests (gif
|
||||
FOUNDVAR GIF_FOUND ENABLEVAR ENABLE_GIF
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (heif
|
||||
FOUNDVAR Libheif_FOUND ENABLEVAR ENABLE_Libheif
|
||||
URL https://github.com/nokiatech/heif/tree/gh-pages/content)
|
||||
oiio_add_tests (ico
|
||||
ENABLEVAR ENABLE_ICO
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (iff
|
||||
ENABLEVAR ENABLE_IFF
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (jpeg2000
|
||||
FOUNDVAR OPENJPEG_FOUND
|
||||
IMAGEDIR j2kp4files_v1_5
|
||||
URL http://www.itu.int/net/ITU-T/sigdb/speimage/ImageForm-s.aspx?val=10100803)
|
||||
oiio_add_tests (openexr-suite openexr-multires openexr-chroma
|
||||
openexr-v2 openexr-window perchannel
|
||||
oiiotool-deep
|
||||
IMAGEDIR openexr-images
|
||||
URL http://www.openexr.com/downloads.html)
|
||||
if (NOT DEFINED ENV{CI} AND NOT DEFINED ENV{GITHUB_ACTIONS})
|
||||
oiio_add_tests (openexr-damaged
|
||||
IMAGEDIR openexr-images
|
||||
URL http://www.openexr.com/downloads.html)
|
||||
endif ()
|
||||
oiio_add_tests (openvdb
|
||||
FOUNDVAR OpenVDB_FOUND ENABLEVAR ENABLE_OpenVDB)
|
||||
oiio_add_tests (png
|
||||
ENABLEVAR ENABLE_PNG
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (pnm
|
||||
ENABLEVAR ENABLE_PNM
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (psd psd-colormodes
|
||||
ENABLEVAR ENABLE_PSD
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (ptex
|
||||
FOUNDVAR PTEX_FOUND ENABLEVAR ENABLE_PTEX)
|
||||
oiio_add_tests (raw
|
||||
FOUNDVAR LIBRAW_FOUND ENABLEVAR ENABLE_LIBRAW
|
||||
IMAGEDIR oiio-images/raw
|
||||
URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (rla
|
||||
ENABLEVAR ENABLE_RLA
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (sgi
|
||||
ENABLEVAR ENABLE_SGI
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (targa-tgautils
|
||||
ENABLEVAR ENABLE_TARGA
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (tiff-suite tiff-depths tiff-misc
|
||||
IMAGEDIR libtiffpic
|
||||
URL http://www.simplesystems.org/libtiff/images.html)
|
||||
oiio_add_tests (webp
|
||||
FOUNDVAR WebP_FOUND ENABLEVAR ENABLE_WebP
|
||||
IMAGEDIR oiio-images/webp URL "Recent checkout of oiio-images")
|
||||
oiio_add_tests (zfile ENABLEVAR ENABLE_ZFILE
|
||||
IMAGEDIR oiio-images URL "Recent checkout of oiio-images")
|
||||
|
||||
if (SPI_TESTS)
|
||||
oiio_add_tests (oiiotool-spi
|
||||
FOUNDVAR SPI_TESTS
|
||||
IMAGEDIR spi-oiio-tests
|
||||
URL "noplace -- it's SPI specific tests")
|
||||
endif ()
|
||||
|
||||
endmacro()
|
||||
@@ -139,10 +139,10 @@ DDSInput::open(const std::string& name, ImageSpec& newspec)
|
||||
}
|
||||
|
||||
// due to struct packing, we may get a corrupt header if we just load the
|
||||
// struct from file; to adress that, read every member individually
|
||||
// struct from file; to address that, read every member individually
|
||||
// save some typing
|
||||
#define RH(memb) \
|
||||
if (!fread(&m_dds.memb, sizeof(m_dds.memb), 1)) \
|
||||
#define RH(memb) \
|
||||
if (!fread(&m_dds.memb, sizeof(m_dds.memb), 1)) \
|
||||
return false
|
||||
|
||||
RH(fourCC);
|
||||
@@ -431,7 +431,7 @@ DDSInput::seek_subimage(int subimage, int miplevel)
|
||||
// create imagespec for the 3x2 cube map layout
|
||||
#ifdef DDS_3X2_CUBE_MAP_LAYOUT
|
||||
m_spec = ImageSpec(w * 3, h * 2, m_nchans, TypeDesc::UINT8);
|
||||
#else // 1x6 layout
|
||||
#else // 1x6 layout
|
||||
m_spec = ImageSpec(w, h * 6, m_nchans, TypeDesc::UINT8);
|
||||
#endif // DDS_3X2_CUBE_MAP_LAYOUT
|
||||
m_spec.depth = d;
|
||||
@@ -667,7 +667,7 @@ DDSInput::read_native_tile(int subimage, int miplevel, int x, int y, int z,
|
||||
internal_seek_subimage(((x / m_spec.tile_width) << 1)
|
||||
+ y / m_spec.tile_height,
|
||||
m_miplevel, w, h, d);
|
||||
#else // 1x6 layout
|
||||
#else // 1x6 layout
|
||||
internal_seek_subimage(y / m_spec.tile_height, m_miplevel, w, h, d);
|
||||
#endif // DDS_3X2_CUBE_MAP_LAYOUT
|
||||
if (!w && !h && !d)
|
||||
|
||||
@@ -53,6 +53,6 @@ private:
|
||||
bool m_transparent;
|
||||
};
|
||||
|
||||
} // namespace sqish
|
||||
} // namespace squish
|
||||
|
||||
#endif // ndef SQUISH_COLOURSET_H
|
||||
|
||||
@@ -6,7 +6,7 @@ project(documentation)
|
||||
|
||||
set (public_docs
|
||||
"${OpenImageIO_SOURCE_DIR}/LICENSE.md"
|
||||
"${OpenImageIO_SOURCE_DIR}/LICENSE-THIRD-PARTY.md"
|
||||
"${OpenImageIO_SOURCE_DIR}/THIRD-PARTY.md"
|
||||
"${OpenImageIO_SOURCE_DIR}/CHANGES.md"
|
||||
CHANGES-0.x.md
|
||||
CHANGES-1.x.md
|
||||
@@ -21,10 +21,7 @@ endif()
|
||||
# generate man pages using txt2man and a tiny python script to munge the
|
||||
# result of "$tool --help"
|
||||
find_program(TXT2MAN txt2man)
|
||||
if (NOT PYTHONINTERP_FOUND)
|
||||
find_package(PythonInterp)
|
||||
endif ()
|
||||
if (UNIX AND TXT2MAN AND PYTHONINTERP_FOUND)
|
||||
if (UNIX AND TXT2MAN AND Python_Interpreter_FOUND)
|
||||
message (STATUS "Unix man page documentation will be generated")
|
||||
set (cli_tools oiiotool iinfo maketx idiff igrep iconvert)
|
||||
|
||||
@@ -37,7 +34,7 @@ if (UNIX AND TXT2MAN AND PYTHONINTERP_FOUND)
|
||||
list (APPEND manpage_files ${outfile})
|
||||
add_custom_command (OUTPUT ${outfile}
|
||||
COMMAND ${tool} --help |
|
||||
${PYTHON_EXECUTABLE} "${documentation_SOURCE_DIR}/help2man_preformat.py" |
|
||||
${Python_EXECUTABLE} "${documentation_SOURCE_DIR}/help2man_preformat.py" |
|
||||
${TXT2MAN} -v OpenImageIO -s 1 -t ${tool} > ${outfile}
|
||||
DEPENDS ${tool} help2man_preformat.py)
|
||||
endforeach()
|
||||
|
||||
@@ -2155,6 +2155,7 @@ INCLUDE_FILE_PATTERNS = *.h
|
||||
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
|
||||
|
||||
PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS \
|
||||
OIIO_DOXYGEN_ONLY:=1 \
|
||||
OIIO_NO_SANITIZE_ADDRESS:= \
|
||||
OIIO_API:= \
|
||||
OIIO_HOSTDEVICE= \
|
||||
|
||||
+155
-18
@@ -24,6 +24,28 @@ It only supports unsigned integer 1-, 2-, 4-, and 8- bits per channel; only
|
||||
grayscale, RGB, and RGBA; does not support MIPmaps, multiimage, or
|
||||
tiles.
|
||||
|
||||
**Configuration settings for BMP input**
|
||||
|
||||
When opening a BMP ImageInput with a *configuration* (see
|
||||
Section :ref:`sec-inputwithconfig`), the following special configuration
|
||||
options are supported:
|
||||
|
||||
.. list-table::
|
||||
:widths: 30 10 65
|
||||
:header-rows: 1
|
||||
|
||||
* - Input Configuration Attribute
|
||||
- Type
|
||||
- Meaning
|
||||
* - ``bmp:monochrome_detect``
|
||||
- int
|
||||
- If nonzero, try to detect when all palette entries are gray and pretend
|
||||
that it's a 1-channel image to allow the calling app to save memory
|
||||
and time (even though the BMP format does not actually support
|
||||
grayscale images per se. It is 1 by default, but by setting the hint
|
||||
to 0, you can disable this behavior.
|
||||
|
||||
**BMP Attributes**
|
||||
|
||||
.. list-table::
|
||||
:widths: 30 10 65
|
||||
@@ -41,7 +63,24 @@ tiles.
|
||||
* - ``ResolutionUnit``
|
||||
- string
|
||||
- always ``"m"`` (pixels per meter)
|
||||
* - ``bmp:bitsperpixel``
|
||||
- int
|
||||
- When not a whole number of bytes per channel, this describes the
|
||||
bits per pixel in the file (16 for R4G4B4, 8 for a 256-color palette
|
||||
image, 4 for a 16-color palette image, 1 for a 2-color palette image).
|
||||
* - ``bmp:version``
|
||||
- int
|
||||
- Version of the BMP file format
|
||||
|
||||
**BMP Limitations**
|
||||
|
||||
* OIIO's current implementation will only write uncompessed 8bpp (from a
|
||||
1-channel source), 24bpp (if 3 channel), or 32bpp (if 4 channel). Reads,
|
||||
however, can handle RLE compression as well as 1, 4, or 16 bpp input.
|
||||
* Only 1, 3, and 4-channel images are supported with BMP due to limitations
|
||||
of the file format itself.
|
||||
* BMP only supports uint8 pixel data types. Requests for other pixel data
|
||||
types will automatically be converted to uint8.
|
||||
|
||||
|
|
||||
|
||||
@@ -163,6 +202,10 @@ options are supported:
|
||||
- If nonzero, reading images with non-RGB color models (such as YCbCr)
|
||||
will return unaltered pixel values (versus the default OIIO behavior
|
||||
of automatically converting to RGB).
|
||||
* - ``oiio:ioproxy``
|
||||
- ptr
|
||||
- Pointer to a ``Filesystem::IOProxy`` that will handle the I/O, for
|
||||
example by reading from memory rather than the file system.
|
||||
|
||||
|
||||
**Configuration settings for DPX output**
|
||||
@@ -183,6 +226,17 @@ control aspects of the writing itself:
|
||||
will keep unaltered pixel values (versus the default OIIO behavior
|
||||
of automatically converting from RGB to the designated color space
|
||||
as the pixels are written).
|
||||
* - ``oiio:ioproxy``
|
||||
- ptr
|
||||
- Pointer to a ``Filesystem::IOProxy`` that will handle the I/O, for
|
||||
example by writing to memory rather than the file system.
|
||||
|
||||
**Custom I/O Overrides**
|
||||
|
||||
DPX input and output both support the "custom I/O" feature via the
|
||||
special ``"oiio:ioproxy"`` attributes (see Sections
|
||||
:ref:`sec-imageoutput-ioproxy` and :ref:`sec-imageinput-ioproxy`) as well as
|
||||
the `set_ioproxy()` methods.
|
||||
|
||||
**DPX Attributes**
|
||||
|
||||
@@ -503,10 +557,13 @@ despite its technical limitations.
|
||||
- Frames per second
|
||||
* - ``oiio:Movie``
|
||||
- int
|
||||
- If nonzero, indicates that it's an animated GIF.
|
||||
* - ``gif:LoopCount``
|
||||
- If nonzero, indicates that it's a multi-subimage file indended to represent an animation.
|
||||
* - ``oiio:LoopCount``
|
||||
- int
|
||||
- Number of times the animation should be played (0-65535, 0 stands for infinity).
|
||||
* - ``gif:LoopCount``
|
||||
- int
|
||||
- Deprecated synonym for ``oiio:LoopCount``.
|
||||
* - ``ImageDescription``
|
||||
- string
|
||||
- The GIF comment field.
|
||||
@@ -565,17 +622,18 @@ preferred except when legacy file access is required.
|
||||
|
||||
.. _sec-bundledplugins-heif:
|
||||
|
||||
HEIF/HEIC
|
||||
HEIF/HEIC/AVIF
|
||||
===============================================
|
||||
|
||||
HEIF is a container format for images compressed with the HEIC compression
|
||||
standard (same compression as HEVC/H.265). It is used commonly for iPhone
|
||||
camera pictures, but it is not Apple-specific and will probably become more
|
||||
popualar on other platforms in coming years. HEIF files usually use the file
|
||||
extension :file:`.HEIC`.
|
||||
HEIF is a container format for images compressed with various compression
|
||||
standards (HEIC is based on HEVC/H.265, AVIF is based on AV1). HEIC is used
|
||||
commonly for iPhone camera pictures, but it is not Apple-specific and will
|
||||
probably become more popular on other platforms in coming years. HEIF files
|
||||
usually use the file extension :file:`.HEIC` or :file:`.AVIF` depending on their
|
||||
main compression type.
|
||||
|
||||
HEIC compression is lossy, but is higher visual quality than JPEG while
|
||||
taking only half the file size. Currently, OIIO's HEIF reader supports
|
||||
HEIC and AVIF compression formats are lossy, but are higher visual quality than
|
||||
JPEG while taking <= half the file size. Currently, OIIO's HEIF reader supports
|
||||
reading files as RGB or RGBA, uint8 pixel values. Multi-image files are
|
||||
currently supported for reading, but not yet writing. All pixel data is
|
||||
uint8, though we hope to add support for HDR (more than 8 bits) in the
|
||||
@@ -596,9 +654,9 @@ control aspects of the writing itself:
|
||||
- HEIF header data or explanation
|
||||
* - ``Compression``
|
||||
- string
|
||||
- If supplied, must be ``"heic"``, but may optionally have a quality
|
||||
value appended, like ``"heic:90"``. Quality can be 1-100, with 100
|
||||
meaning lossless. The default is 75.
|
||||
- If supplied, can be ``"heic"`` or ``"avif"``, but may optionally have a
|
||||
quality value appended, like ``"heic:90"``. Quality can be 1-100, with
|
||||
100 meaning lossless. The default is 75.
|
||||
|
||||
|
||||
|
||||
@@ -729,6 +787,36 @@ anywhere near the acceptance of the original JPEG/JFIF format.
|
||||
Appendix :ref:`chap-stdmetadata` is properly translated when using
|
||||
JPEG files.
|
||||
|
||||
**Configuration settings for JPEG output**
|
||||
|
||||
When opening a JPEG ImageOutput, the following special metadata tokens
|
||||
control aspects of the writing itself:
|
||||
|
||||
.. list-table::
|
||||
:widths: 30 10 65
|
||||
:header-rows: 1
|
||||
|
||||
* - Output Configuration Attribute
|
||||
- Type
|
||||
- Meaning
|
||||
* - ``oiio:dither``
|
||||
- int
|
||||
- If nonzero and outputting UINT8 values in the file, will add a small
|
||||
amount of random dither to combat the appearance of banding.
|
||||
* - ``oiio:ioproxy``
|
||||
- ptr
|
||||
- Pointer to a ``Filesystem::IOProxy`` that will handle the I/O, for
|
||||
example by reading from memory rather than the file system.
|
||||
* - ``jpeg:progressive``
|
||||
- int
|
||||
- If nonzero, will write a progressive JPEG file.
|
||||
|
||||
|
||||
**Custom I/O Overrides**
|
||||
|
||||
JPEG input (but, currently, not output) supports the "custom I/O" feature
|
||||
via the `ImageInput::set_ioproxy()` method and the special
|
||||
``"oiio:ioproxy"`` attributes (see Section :ref:`sec-imageinput-ioproxy`).
|
||||
|
||||
**Limitations**
|
||||
|
||||
@@ -1032,8 +1120,9 @@ control aspects of the writing itself:
|
||||
**Custom I/O Overrides**
|
||||
|
||||
OpenEXR input and output both support the "custom I/O" feature via the
|
||||
special ``"oiio:ioproxy"`` attributes (see
|
||||
Sections :ref:`sec-imageoutput-ioproxy` and :ref:`sec-imageinput-ioproxy`).
|
||||
special ``"oiio:ioproxy"`` attributes (see Sections
|
||||
:ref:`sec-imageoutput-ioproxy` and :ref:`sec-imageinput-ioproxy`) as well as
|
||||
the `set_ioproxy()` methods.
|
||||
|
||||
**A note on channel names**
|
||||
|
||||
@@ -1187,6 +1276,14 @@ control aspects of the writing itself:
|
||||
- Compression level for zip/deflate compression, on a scale from 0
|
||||
(fastest, minimal compression) to 9 (slowest, maximal compression).
|
||||
The default is 6. PNG compression is always lossless.
|
||||
* - ``png:filter``
|
||||
- int
|
||||
- Controls the "row filters" that prepare the image for optimal
|
||||
compression. The default is 0 (``PNG_NO_FILTERS``), but other values
|
||||
(which may be "or-ed" or summed to combine their effects) are 8
|
||||
(``PNG_FILTER_NONE``), 16 (``PNG_FILTER_SUB``), 32
|
||||
(``PNG_FILTER_UP``), 64 (``PNG_FILTER_AVG``), or 128
|
||||
(``PNG_FILTER_PAETH``).
|
||||
* - ``oiio:ioproxy``
|
||||
- ptr
|
||||
- Pointer to a ``Filesystem::IOProxy`` that will handle the I/O, for
|
||||
@@ -1198,8 +1295,11 @@ control aspects of the writing itself:
|
||||
|
||||
**Custom I/O Overrides**
|
||||
|
||||
PNG output supports the "custom I/O" feature via the special
|
||||
``"oiio:ioproxy"`` attributes (see Section :ref:`sec-imageoutput-ioproxy`).
|
||||
PNG input and output both support the "custom I/O" feature via the special
|
||||
``"oiio:ioproxy"`` attributes (see Sections :ref:`sec-imageoutput-ioproxy`
|
||||
and :ref:`sec-imageinput-ioproxy`) as well as the `set_ioproxy()` methods.
|
||||
|
||||
|
||||
|
||||
**Limitations**
|
||||
|
||||
@@ -1408,6 +1508,10 @@ options are supported:
|
||||
- int
|
||||
- Set libraw highlight mode processing: 0 = clip, 1 = unclip, 2 =
|
||||
blend, 3+ = rebuild. (Default: 0.)
|
||||
* - ``raw:user_flip``
|
||||
- int
|
||||
- Set libraw user flip value : -1 ignored, other values are between [0; 8] with the same
|
||||
definition than the Exif orientation code.
|
||||
|
||||
|
||||
|
||||
@@ -1776,6 +1880,10 @@ options are supported:
|
||||
- If nonzero, reading images with non-RGB color models (such as YCbCr)
|
||||
will return unaltered pixel values (versus the default OIIO behavior
|
||||
of automatically converting to RGB).
|
||||
* - ``oiio:ioproxy``
|
||||
- ptr
|
||||
- Pointer to a ``Filesystem::IOProxy`` that will handle the I/O, for
|
||||
example by reading from memory rather than the file system.
|
||||
|
||||
**Configuration settings for TIFF output**
|
||||
|
||||
@@ -1860,6 +1968,12 @@ part of the format name):
|
||||
``T85``
|
||||
``thunderscan``
|
||||
|
||||
**Custom I/O Overrides**
|
||||
|
||||
TIFF input (but, currently, not output) supports the "custom I/O" feature
|
||||
via the `ImageInput::set_ioproxy()` method and the special
|
||||
``"oiio:ioproxy"`` attributes (see Section :ref:`sec-imageinput-ioproxy`).
|
||||
|
||||
**Limitations**
|
||||
|
||||
OpenImageIO's TIFF reader and writer have some limitations you should be
|
||||
@@ -2000,8 +2114,31 @@ aware of:
|
||||
Webp
|
||||
===============================================
|
||||
|
||||
FIXME
|
||||
WebP is an image file format developed by Google that is intended to be an
|
||||
open standard for lossy-compressed images for use on the web.
|
||||
|
||||
.. list-table::
|
||||
:widths: 30 10 65
|
||||
:header-rows: 1
|
||||
|
||||
* - ImageSpec Attribute
|
||||
- Type
|
||||
- WebP header data or explanation
|
||||
* - ``oiio:Movie``
|
||||
- int
|
||||
- If nonzero, indicates that it's a multi-subimage file indended to
|
||||
represent an animation.
|
||||
* - ``oiio:LoopCount``
|
||||
- int
|
||||
- Number of times the animation should be played (0-65535, 0 stands for infinity).
|
||||
* - ``gif:LoopCount``
|
||||
- int
|
||||
- Deprecated synonym for ``oiio:LoopCount``.
|
||||
|
||||
**Limitations**
|
||||
|
||||
* WebP only supports 3-channel (RGB) or 4-channel (RGBA) images and must
|
||||
be 8-bit unsigned integer pixel values (uint8).
|
||||
|
||||
|
||||
|
|
||||
|
||||
@@ -70,6 +70,7 @@ sys.path.insert(0, os.path.join(os.path.abspath(os.path.dirname(__file__)), '../
|
||||
|
||||
extensions = [
|
||||
'breathe',
|
||||
'sphinx_tabs.tabs'
|
||||
]
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
|
||||
+1
-1
@@ -29,4 +29,4 @@ http://creativecommons.org/licenses/by/3.0/
|
||||
|
||||
OpenImageIO incorporates code from several other software packages with
|
||||
compatible licenses. Copies of their licenses are reproduced here:
|
||||
https://github.com/OpenImageIO/oiio/blob/master/LICENSE-THIRD-PARTY.md
|
||||
https://github.com/OpenImageIO/oiio/blob/master/THIRD-PARTY.md
|
||||
|
||||
@@ -10,7 +10,7 @@ import sys
|
||||
|
||||
lines = [l.rstrip().replace('\t', ' '*8) for l in sys.stdin.readlines()]
|
||||
|
||||
print('TITLE')
|
||||
print('NAME')
|
||||
print(lines[0])
|
||||
print()
|
||||
|
||||
|
||||
+24
-24
@@ -42,37 +42,37 @@ Making an empty or uninitialized ImageBuf
|
||||
Constructing a readable ImageBuf
|
||||
--------------------------------
|
||||
|
||||
.. doxygenfunction:: OIIO::ImageBuf::ImageBuf(string_view, int, int, ImageCache*, const ImageSpec*, Filesystem::IOProxy*)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::reset(string_view, int, int, ImageCache*, const ImageSpec*, Filesystem::IOProxy*)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::ImageBuf(string_view name, int subimage = 0, int miplevel = 0, ImageCache *imagecache = nullptr, const ImageSpec *config = nullptr, Filesystem::IOProxy *ioproxy = nullptr)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::reset(string_view name, int subimage = 0, int miplevel = 0, ImageCache *imagecache = nullptr, const ImageSpec *config = nullptr, Filesystem::IOProxy *ioproxy = nullptr)
|
||||
|
||||
|
||||
Constructing a writable ImageBuf
|
||||
--------------------------------------------------
|
||||
|
||||
.. doxygenfunction:: OIIO::ImageBuf::ImageBuf(const ImageSpec&, InitializePixels)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::reset(const ImageSpec&, InitializePixels)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::ImageBuf(const ImageSpec &spec, InitializePixels zero = InitializePixels::Yes)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::reset(const ImageSpec &spec, InitializePixels zero = InitializePixels::Yes)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::make_writable
|
||||
|
||||
|
||||
Constructing an ImageBuf that "wraps" an application buffer
|
||||
-------------------------------------------------------------
|
||||
|
||||
.. doxygenfunction:: OIIO::ImageBuf::ImageBuf(const ImageSpec&, void*)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::reset(const ImageSpec&, void*)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::ImageBuf(const ImageSpec &spec, void *buffer)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::reset(const ImageSpec &spec, void *buffer)
|
||||
|
||||
|
||||
|
||||
Reading and Writing disk images
|
||||
-------------------------------
|
||||
|
||||
.. doxygenfunction:: OIIO::ImageBuf::read(int, int, bool, TypeDesc, ProgressCallback, void*)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::read(int, int, int, int, bool, TypeDesc, ProgressCallback, void*)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::read(int subimage = 0, int miplevel = 0, bool force = false, TypeDesc convert = TypeDesc::UNKNOWN, ProgressCallback progress_callback = nullptr, void *progress_callback_data = nullptr)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::read(int subimage, int miplevel, int chbegin, int chend, bool force, TypeDesc convert, ProgressCallback progress_callback = nullptr, void *progress_callback_data = nullptr)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::init_spec
|
||||
|
||||
.. doxygenfunction:: OIIO::ImageBuf::write(string_view, TypeDesc, string_view, ProgressCallback, void*) const
|
||||
.. doxygenfunction:: OIIO::ImageBuf::write(ImageOutput*, ProgressCallback, void*) const
|
||||
.. doxygenfunction:: OIIO::ImageBuf::set_write_format(TypeDesc)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::set_write_format(cspan<TypeDesc>)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::write(string_view filename, TypeDesc dtype = TypeUnknown, string_view fileformat = string_view(), ProgressCallback progress_callback = nullptr, void *progress_callback_data = nullptr) const
|
||||
.. doxygenfunction:: OIIO::ImageBuf::write(ImageOutput *out, ProgressCallback progress_callback = nullptr, void *progress_callback_data = nullptr) const
|
||||
.. doxygenfunction:: OIIO::ImageBuf::set_write_format(TypeDesc format)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::set_write_format(cspan<TypeDesc> format)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::set_write_tiles
|
||||
.. doxygenfunction:: OIIO::ImageBuf::set_write_ioproxy
|
||||
|
||||
@@ -133,17 +133,17 @@ Getting and setting information about an ImageBuf
|
||||
.. doxygenfunction:: OIIO::ImageBuf::contains_roi
|
||||
.. doxygenfunction:: OIIO::ImageBuf::pixeltype
|
||||
.. doxygenfunction:: OIIO::ImageBuf::threads() const
|
||||
.. doxygenfunction:: OIIO::ImageBuf::threads(int) const
|
||||
.. doxygenfunction:: OIIO::ImageBuf::threads(int n) const
|
||||
|
||||
|
||||
|
||||
Copying ImageBuf's and blocks of pixels
|
||||
========================================
|
||||
|
||||
.. doxygenfunction:: OIIO::ImageBuf::operator=(const ImageBuf&)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::operator=(ImageBuf&&)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::copy(const ImageBuf&, TypeDesc)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::copy(TypeDesc) const
|
||||
.. doxygenfunction:: OIIO::ImageBuf::operator=(const ImageBuf &src)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::operator=(ImageBuf &&src)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::copy(const ImageBuf &src, TypeDesc format = TypeUnknown)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::copy(TypeDesc format) const
|
||||
.. doxygenfunction:: OIIO::ImageBuf::copy_metadata
|
||||
.. doxygenfunction:: OIIO::ImageBuf::copy_pixels
|
||||
.. doxygenfunction:: OIIO::ImageBuf::swap
|
||||
@@ -156,15 +156,15 @@ Getting and setting pixel values
|
||||
**Getting and setting individual pixels -- slow**
|
||||
|
||||
.. doxygenfunction:: OIIO::ImageBuf::getchannel
|
||||
.. doxygenfunction:: OIIO::ImageBuf::getpixel(int, int, int, float*, int, WrapMode) const
|
||||
.. doxygenfunction:: OIIO::ImageBuf::getpixel(int x, int y, int z, float *pixel, int maxchannels = 1000, WrapMode wrap = WrapBlack) const
|
||||
|
||||
.. doxygenfunction:: OIIO::ImageBuf::interppixel
|
||||
.. doxygenfunction:: OIIO::ImageBuf::interppixel_bicubic
|
||||
.. doxygenfunction:: OIIO::ImageBuf::interppixel_NDC
|
||||
.. doxygenfunction:: OIIO::ImageBuf::interppixel_bicubic_NDC
|
||||
|
||||
.. doxygenfunction:: OIIO::ImageBuf::setpixel(int, int, int, const float*, int)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::setpixel(int, const float*, int)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::setpixel(int x, int y, int z, cspan<float> pixel)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::setpixel(int i, cspan<float> pixel)
|
||||
|
||||
|
|
||||
|
||||
@@ -183,10 +183,10 @@ Deep data in an ImageBuf
|
||||
.. doxygenfunction:: OIIO::ImageBuf::set_deep_samples
|
||||
.. doxygenfunction:: OIIO::ImageBuf::deep_insert_samples
|
||||
.. doxygenfunction:: OIIO::ImageBuf::deep_erase_samples
|
||||
.. doxygenfunction:: OIIO::ImageBuf::deep_value(int, int, int, int, int) const
|
||||
.. doxygenfunction:: OIIO::ImageBuf::deep_value_uint(int, int, int, int, int) const
|
||||
.. doxygenfunction:: OIIO::ImageBuf::set_deep_value(int, int, int, int, int, float)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::set_deep_value(int, int, int, int, int, uint32_t)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::deep_value(int x, int y, int z, int c, int s) const
|
||||
.. doxygenfunction:: OIIO::ImageBuf::deep_value_uint(int x, int y, int z, int c, int s) const
|
||||
.. doxygenfunction:: OIIO::ImageBuf::set_deep_value(int x, int y, int z, int c, int s, float value)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::set_deep_value(int x, int y, int z, int c, int s, uint32_t value)
|
||||
.. doxygenfunction:: OIIO::ImageBuf::deep_pixel_ptr
|
||||
|
||||
.. cpp:function:: DeepData& OIIO::ImageBuf::deepdata()
|
||||
|
||||
+132
-111
@@ -33,15 +33,25 @@ Most ImageBufAlgo functions that produce image data come in two forms:
|
||||
error, the result image returned can have any error conditions checked with
|
||||
`has_error()` and `geterror()`.
|
||||
|
||||
.. code-block:: cpp
|
||||
.. tabs::
|
||||
|
||||
// Method 1: Return an image result
|
||||
ImageBuf fg ("fg.exr"), bg ("bg.exr");
|
||||
ImageBuf dst = ImageBufAlgo::over (fg, bg);
|
||||
if (dst.has_error())
|
||||
std::cout << "error: " << dst.geterror() << "\n";
|
||||
.. code-tab:: c++
|
||||
|
||||
// Method 1: Return an image result
|
||||
ImageBuf dst = ImageBufAlgo::over (fg, bg);
|
||||
if (dst.has_error())
|
||||
std::cout << "error: " << dst.geterror() << "\n";
|
||||
|
||||
.. code-tab:: py
|
||||
|
||||
# Method 1: Return an image result
|
||||
fg = ImageBuf("fg.exr")
|
||||
bg = ImageBuf("bg.exr")
|
||||
dst = ImageBufAlgo.over (fg, bg)
|
||||
if dst.has_error() :
|
||||
print("error:", dst.geterror())
|
||||
|
||||
|
||||
2. Pass a destination ImageBuf reference as the first parameter.
|
||||
|
||||
The function is passed a *destination* ImageBuf where the results will
|
||||
@@ -50,15 +60,26 @@ Most ImageBufAlgo functions that produce image data come in two forms:
|
||||
destination ImageBuf (the one that is being altered) will have an error
|
||||
message set.
|
||||
|
||||
.. code-block:: cpp
|
||||
|
||||
// Method 2: Write into an existing image
|
||||
ImageBuf fg ("fg.exr"), bg ("bg.exr");
|
||||
ImageBuf dst; // will be the output image
|
||||
bool ok = ImageBufAlgo::over (dst, fg, bg);
|
||||
if (! ok)
|
||||
std::cout << "error: " << dst.geterror() << "\n";
|
||||
.. tabs::
|
||||
|
||||
.. code-tab:: c++
|
||||
|
||||
// Method 2: Write into an existing image
|
||||
ImageBuf fg ("fg.exr"), bg ("bg.exr");
|
||||
ImageBuf dst; // will be the output image
|
||||
bool ok = ImageBufAlgo::over (dst, fg, bg);
|
||||
if (! ok)
|
||||
std::cout << "error: " << dst.geterror() << "\n";
|
||||
|
||||
.. code-tab:: py
|
||||
|
||||
# Method 2: Write into an existing image
|
||||
fg = ImageBuf("fg.exr")
|
||||
bg = ImageBuf("bg.exr")
|
||||
dst = ImageBuf() # will be the output image
|
||||
ok = ImageBufAlgo.over (dst, fg, bg)
|
||||
if not ok :
|
||||
print("error:", dst.geterror())
|
||||
|
||||
|
||||
The first option (return an ImageBuf directly) is a more compact and
|
||||
@@ -151,7 +172,7 @@ pre-allocated `dst` nor a non-default ROI.
|
||||
zero() -- create a black image
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. doxygenfunction:: zero(ROI, int)
|
||||
.. doxygenfunction:: zero(ROI roi, int nthreads = 0)
|
||||
|
||||
..
|
||||
|
||||
@@ -176,7 +197,7 @@ zero() -- create a black image
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: zero(ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: zero(ImageBuf &dst, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
@@ -207,7 +228,7 @@ fill() -- fill a region with a solid color or gradient
|
||||
checker() -- make a checker pattern
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. doxygenfunction:: checker(int, int, int, cspan<float>, cspan<float>, int, int, int, ROI, int)
|
||||
.. doxygenfunction:: checker(int width, int height, int depth, cspan<float> color1, cspan<float> color2, int xoffset, int yoffset, int zoffset, ROI roi, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -225,7 +246,7 @@ checker() -- make a checker pattern
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: checker(ImageBuf&, int, int, int, cspan<float>, cspan<float>, int, int, int, ROI, int)
|
||||
.. doxygenfunction:: checker(ImageBuf &dst, int width, int height, int depth, cspan<float> color1, cspan<float> color2, int xoffset = 0, int yoffset = 0, int zoffset = 0, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
@@ -234,7 +255,7 @@ checker() -- make a checker pattern
|
||||
noise() -- make a noise pattern
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. doxygenfunction:: noise(string_view, float, float, bool, int, ROI, int)
|
||||
.. doxygenfunction:: noise(string_view noisetype, float A = 0.0f, float B = 0.1f, bool mono = false, int seed = 0, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -272,7 +293,7 @@ noise() -- make a noise pattern
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: noise(ImageBuf&, string_view, float, float, bool, int, ROI, int)
|
||||
.. doxygenfunction:: noise(ImageBuf &dst, string_view noisetype, float A = 0.0f, float B = 0.1f, bool mono = false, int seed = 0, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
|
||||
|
||||
@@ -329,7 +350,7 @@ Drawing shapes: points, lines, boxes
|
||||
Drawing text
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. doxygenfunction:: render_text(ImageBuf&, int, int, string_view, int, string_view, cspan<float>, TextAlignX, TextAlignY, int, ROI, int)
|
||||
.. doxygenfunction:: render_text(ImageBuf &dst, int x, int y, string_view text, int fontsize = 16, string_view fontname = "", cspan<float> textcolor = 1.0f, TextAlignX alignx = TextAlignX::Left, TextAlignY aligny = TextAlignY::Baseline, int shadow = 0, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -386,7 +407,7 @@ Image transformations and data movement
|
||||
Shuffling channels
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. doxygenfunction:: channels(const ImageBuf&, int, cspan<int>, cspan<float>, cspan<std::string>, bool, int)
|
||||
.. doxygenfunction:: channels(const ImageBuf &src, int nchannels, cspan<int> channelorder, cspan<float> channelvalues = {}, cspan<std::string> newchannelnames = {}, bool shuffle_channel_names = false, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -419,12 +440,12 @@ Shuffling channels
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: channels(ImageBuf&, const ImageBuf&, int, cspan<int>, cspan<float>, cspan<std::string>, bool, int)
|
||||
.. doxygenfunction:: channels(ImageBuf &dst, const ImageBuf &src, int nchannels, cspan<int> channelorder, cspan<float> channelvalues = {}, cspan<std::string> newchannelnames = {}, bool shuffle_channel_names = false, int nthreads = 0)
|
||||
|
||||
|
|
||||
|
||||
|
||||
.. doxygenfunction:: channel_append(const ImageBuf&, const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: channel_append(const ImageBuf &A, const ImageBuf &B, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -435,12 +456,12 @@ Shuffling channels
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: channel_append(ImageBuf&, const ImageBuf&, const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: channel_append(ImageBuf &dst, const ImageBuf &A, const ImageBuf &B, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
|
||||
|
||||
|
||||
.. doxygenfunction:: copy(const ImageBuf&, TypeDesc, ROI, int)
|
||||
.. doxygenfunction:: copy(const ImageBuf &src, TypeDesc convert = TypeUnknown, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -451,12 +472,12 @@ Shuffling channels
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: copy(ImageBuf&, const ImageBuf&, TypeDesc, ROI, int)
|
||||
.. doxygenfunction:: copy(ImageBuf &dst, const ImageBuf &src, TypeDesc convert = TypeUnknown, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
|
||||
|
||||
|
||||
.. doxygenfunction:: crop(const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: crop(const ImageBuf &src, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -467,12 +488,12 @@ Shuffling channels
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: crop(ImageBuf&, const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: crop(ImageBuf &dst, const ImageBuf &src, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
|
||||
|
||||
|
||||
.. doxygenfunction:: cut(const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: cut(const ImageBuf &src, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -484,7 +505,7 @@ Shuffling channels
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: cut(ImageBuf&, const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: cut(ImageBuf &dst, const ImageBuf &src, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
|
||||
|
||||
@@ -558,7 +579,7 @@ Shuffling channels
|
||||
|
||||
|
||||
|
||||
.. doxygenfunction:: reorient(const ImageBuf&, int)
|
||||
.. doxygenfunction:: reorient(const ImageBuf &src, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -568,13 +589,13 @@ Shuffling channels
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: reorient(ImageBuf&, const ImageBuf&, int)
|
||||
.. doxygenfunction:: reorient(ImageBuf &dst, const ImageBuf &src, int nthreads = 0)
|
||||
|
||||
|
|
||||
|
||||
|
||||
|
||||
.. doxygenfunction:: circular_shift(const ImageBuf&, int, int, int, ROI, int)
|
||||
.. doxygenfunction:: circular_shift(const ImageBuf &src, int xshift, int yshift, int zshift = 0, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -594,7 +615,7 @@ Shuffling channels
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: circular_shift(ImageBuf&, const ImageBuf&, int, int, int, ROI, int)
|
||||
.. doxygenfunction:: circular_shift(ImageBuf &dst, const ImageBuf &src, int xshift, int yshift, int zshift = 0, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
|
|
||||
@@ -634,7 +655,7 @@ Shuffling channels
|
||||
|
|
||||
|
||||
|
||||
.. doxygenfunction:: resample(const ImageBuf&, bool, ROI, int)
|
||||
.. doxygenfunction:: resample(const ImageBuf &src, bool interpolate = true, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -646,7 +667,7 @@ Shuffling channels
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: resample(ImageBuf&, const ImageBuf&, bool, ROI, int)
|
||||
.. doxygenfunction:: resample(ImageBuf &dst, const ImageBuf &src, bool interpolate = true, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
|
|
||||
@@ -687,7 +708,7 @@ Shuffling channels
|
||||
Image arithmetic
|
||||
================
|
||||
|
||||
.. doxygenfunction:: add(Image_or_Const, Image_or_Const, ROI, int)
|
||||
.. doxygenfunction:: add(Image_or_Const A, Image_or_Const B, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -705,14 +726,14 @@ Image arithmetic
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: add(ImageBuf&, Image_or_Const, Image_or_Const, ROI, int)
|
||||
.. doxygenfunction:: add(ImageBuf &dst, Image_or_Const A, Image_or_Const B, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: sub(Image_or_Const, Image_or_Const, ROI, int)
|
||||
.. doxygenfunction:: sub(Image_or_Const A, Image_or_Const B, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -723,13 +744,13 @@ Image arithmetic
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: sub(ImageBuf&, Image_or_Const, Image_or_Const, ROI, int)
|
||||
.. doxygenfunction:: sub(ImageBuf &dst, Image_or_Const A, Image_or_Const B, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: absdiff(Image_or_Const, Image_or_Const, ROI, int)
|
||||
.. doxygenfunction:: absdiff(Image_or_Const A, Image_or_Const B, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -740,12 +761,12 @@ Image arithmetic
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: absdiff(ImageBuf&, Image_or_Const, Image_or_Const, ROI, int)
|
||||
.. doxygenfunction:: absdiff(ImageBuf &dst, Image_or_Const A, Image_or_Const B, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: abs(const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: abs(const ImageBuf &A, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -755,13 +776,13 @@ Image arithmetic
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: abs(ImageBuf&, const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: abs(ImageBuf &dst, const ImageBuf &A, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: mul(Image_or_Const, Image_or_Const, ROI, int)
|
||||
.. doxygenfunction:: mul(Image_or_Const A, Image_or_Const B, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -777,13 +798,13 @@ Image arithmetic
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: mul(ImageBuf&, Image_or_Const, Image_or_Const, ROI, int)
|
||||
.. doxygenfunction:: mul(ImageBuf &dst, Image_or_Const A, Image_or_Const B, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: div(Image_or_Const, Image_or_Const, ROI, int)
|
||||
.. doxygenfunction:: div(Image_or_Const A, Image_or_Const B, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -799,12 +820,12 @@ Image arithmetic
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: div(ImageBuf&, Image_or_Const, Image_or_Const, ROI, int)
|
||||
.. doxygenfunction:: div(ImageBuf &dst, Image_or_Const A, Image_or_Const B, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: mad(Image_or_Const, Image_or_Const, Image_or_Const, ROI, int)
|
||||
.. doxygenfunction:: mad(Image_or_Const A, Image_or_Const B, Image_or_Const C, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -823,12 +844,12 @@ Image arithmetic
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: mad(ImageBuf&, Image_or_Const, Image_or_Const, Image_or_Const, ROI, int)
|
||||
.. doxygenfunction:: mad(ImageBuf &dst, Image_or_Const A, Image_or_Const B, Image_or_Const C, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: over(const ImageBuf&, const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: over(const ImageBuf &A, const ImageBuf &B, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -839,12 +860,12 @@ Image arithmetic
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: over(ImageBuf&, const ImageBuf&, const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: over(ImageBuf &dst, const ImageBuf &A, const ImageBuf &B, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: zover(const ImageBuf&, const ImageBuf&, bool, ROI, int)
|
||||
.. doxygenfunction:: zover(const ImageBuf &A, const ImageBuf &B, bool z_zeroisinf = false, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -855,12 +876,12 @@ Image arithmetic
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: zover(ImageBuf&, const ImageBuf&, const ImageBuf&, bool, ROI, int)
|
||||
.. doxygenfunction:: zover(ImageBuf &dst, const ImageBuf &A, const ImageBuf &B, bool z_zeroisinf = false, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: invert(const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: invert(const ImageBuf &A, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -889,12 +910,12 @@ Image arithmetic
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: invert(ImageBuf&, const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: invert(ImageBuf &dst, const ImageBuf &A, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: pow(const ImageBuf&, cspan<float>, ROI, int)
|
||||
.. doxygenfunction:: pow(const ImageBuf &A, cspan<float> B, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -906,12 +927,12 @@ Image arithmetic
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: pow(ImageBuf&, const ImageBuf&, cspan<float>, ROI, int)
|
||||
.. doxygenfunction:: pow(ImageBuf &dst, const ImageBuf &A, cspan<float> B, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: channel_sum(const ImageBuf&, cspan<float>, ROI, int)
|
||||
.. doxygenfunction:: channel_sum(const ImageBuf &src, cspan<float> weights = 1.0f, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -924,13 +945,13 @@ Image arithmetic
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: channel_sum(ImageBuf&, const ImageBuf&, cspan<float>, ROI, int)
|
||||
.. doxygenfunction:: channel_sum(ImageBuf &dst, const ImageBuf &src, cspan<float> weights = 1.0f, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: max(Image_or_Const, Image_or_Const, ROI, int)
|
||||
.. doxygenfunction:: min(Image_or_Const, Image_or_Const, ROI, int)
|
||||
.. doxygenfunction:: max(Image_or_Const A, Image_or_Const B, ROI roi = {}, int nthreads = 0)
|
||||
.. doxygenfunction:: min(Image_or_Const A, Image_or_Const B, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -948,13 +969,13 @@ Image arithmetic
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: max(ImageBuf&, Image_or_Const, Image_or_Const, ROI, int)
|
||||
.. doxygenfunction:: min(ImageBuf&, Image_or_Const, Image_or_Const, ROI, int)
|
||||
.. doxygenfunction:: max(ImageBuf &dst, Image_or_Const A, Image_or_Const B, ROI roi = {}, int nthreads = 0)
|
||||
.. doxygenfunction:: min(ImageBuf &dst, Image_or_Const A, Image_or_Const B, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: clamp(const ImageBuf&, cspan<float>, cspan<float>, bool, ROI, int)
|
||||
.. doxygenfunction:: clamp(const ImageBuf &src, cspan<float> min = -std::numeric_limits<float>::max(), cspan<float> max = std::numeric_limits<float>::max(), bool clampalpha01 = false, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -975,12 +996,12 @@ Image arithmetic
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: clamp(ImageBuf&, const ImageBuf&, cspan<float>, cspan<float>, bool, ROI, int)
|
||||
.. doxygenfunction:: clamp(ImageBuf &dst, const ImageBuf &src, cspan<float> min = -std::numeric_limits<float>::max(), cspan<float> max = std::numeric_limits<float>::max(), bool clampalpha01 = false, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: contrast_remap(const ImageBuf&, cspan<float>, cspan<float>, cspan<float>, cspan<float>, cspan<float>, cspan<float>, ROI, int)
|
||||
.. doxygenfunction:: contrast_remap(const ImageBuf &src, cspan<float> black = 0.0f, cspan<float> white = 1.0f, cspan<float> min = 0.0f, cspan<float> max = 1.0f, cspan<float> scontrast = 1.0f, cspan<float> sthresh = 0.5f, ROI = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1018,7 +1039,7 @@ Image arithmetic
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: contrast_remap(ImageBuf&, const ImageBuf&, cspan<float>, cspan<float>, cspan<float>, cspan<float>, cspan<float>, cspan<float>, ROI, int)
|
||||
.. doxygenfunction:: contrast_remap(ImageBuf &dst, const ImageBuf &src, cspan<float> black = 0.0f, cspan<float> white = 1.0f, cspan<float> min = 0.0f, cspan<float> max = 1.0f, cspan<float> scontrast = 1.0f, cspan<float> sthresh = 0.5f, ROI = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
@@ -1089,7 +1110,7 @@ Image arithmetic
|
||||
Image comparison and statistics
|
||||
===============================
|
||||
|
||||
.. doxygenfunction:: computePixelStats(const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: computePixelStats
|
||||
..
|
||||
|
||||
The PixelStats structure is defined as follows::
|
||||
@@ -1123,7 +1144,7 @@ Image comparison and statistics
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: compare(const ImageBuf&, const ImageBuf&, float, float, ROI, int)
|
||||
.. doxygenfunction:: compare(const ImageBuf &A, const ImageBuf &B, float failthresh, float warnthresh, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
The CompareResults structure is defined as follows::
|
||||
@@ -1157,13 +1178,13 @@ Image comparison and statistics
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: compare_Yee(const ImageBuf&, const ImageBuf&, CompareResults&, float, float, ROI, int)
|
||||
.. doxygenfunction:: compare_Yee
|
||||
..
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: isConstantColor(const ImageBuf&, float, span<float>, ROI, int)
|
||||
.. doxygenfunction:: isConstantColor
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1182,7 +1203,7 @@ Image comparison and statistics
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: isConstantChannel(const ImageBuf&, int, float, float, ROI, int)
|
||||
.. doxygenfunction:: isConstantChannel
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1199,7 +1220,7 @@ Image comparison and statistics
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: isMonochrome(const ImageBuf&, float, ROI, int)
|
||||
.. doxygenfunction:: isMonochrome
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1213,7 +1234,7 @@ Image comparison and statistics
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: color_count(const ImageBuf&, imagesize_t*, int, cspan<float>, cspan<float>, ROI, int)
|
||||
.. doxygenfunction:: color_count
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1235,7 +1256,7 @@ Image comparison and statistics
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: color_range_check(const ImageBuf&, imagesize_t*, imagesize_t*, imagesize_t*, cspan<float>, cspan<float>, ROI, int)
|
||||
.. doxygenfunction:: color_range_check
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1285,7 +1306,7 @@ Image comparison and statistics
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: histogram(const ImageBuf&, int, int, float, float, bool, ROI, int)
|
||||
.. doxygenfunction:: histogram
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1310,7 +1331,7 @@ Image comparison and statistics
|
||||
Convolutions and frequency-space algorithms
|
||||
===========================================
|
||||
|
||||
.. doxygenfunction:: make_kernel(string_view, float, float, float, bool)
|
||||
.. doxygenfunction:: make_kernel
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1320,7 +1341,7 @@ Convolutions and frequency-space algorithms
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: convolve(const ImageBuf&, const ImageBuf&, bool, ROI, int)
|
||||
.. doxygenfunction:: convolve(const ImageBuf &src, const ImageBuf &kernel, bool normalize = true, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1344,13 +1365,13 @@ Convolutions and frequency-space algorithms
|
||||
|
||||
Result-as-parameter version:
|
||||
|
||||
.. doxygenfunction:: convolve(ImageBuf&, const ImageBuf&, const ImageBuf&, bool, ROI, int)
|
||||
.. doxygenfunction:: convolve(ImageBuf &dst, const ImageBuf &src, const ImageBuf &kernel, bool normalize = true, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: laplacian(const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: laplacian(const ImageBuf &src, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1370,7 +1391,7 @@ Convolutions and frequency-space algorithms
|
||||
| original | Laplacian image |
|
||||
+-----------------+-----------------+
|
||||
|
||||
.. doxygenfunction:: laplacian(ImageBuf&, const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: laplacian(ImageBuf &dst, const ImageBuf &src, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
@@ -1416,7 +1437,7 @@ Convolutions and frequency-space algorithms
|
||||
Image Enhancement / Restoration
|
||||
===============================
|
||||
|
||||
.. doxygenfunction:: fixNonFinite(const ImageBuf&, NonFiniteFixMode, int*, ROI, int)
|
||||
.. doxygenfunction:: fixNonFinite(const ImageBuf &src, NonFiniteFixMode mode = NONFINITE_BOX3, int *pixelsFixed = nullptr, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1428,12 +1449,12 @@ Image Enhancement / Restoration
|
||||
std::cout << "Repaired " << pixelsFixed << " non-finite pixels\n";
|
||||
|
||||
Result-as-parameter version:
|
||||
.. doxygenfunction:: fixNonFinite(ImageBuf&, const ImageBuf&, NonFiniteFixMode, int*, ROI, int)
|
||||
.. doxygenfunction:: fixNonFinite(ImageBuf &dst, const ImageBuf &src, NonFiniteFixMode mode = NONFINITE_BOX3, int *pixelsFixed = nullptr, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: fillholes_pushpull(const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: fillholes_pushpull(const ImageBuf &src, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1442,12 +1463,12 @@ Image Enhancement / Restoration
|
||||
ImageBuf Filled = ImageBufAlgo::fillholes_pushpull (Src);
|
||||
|
||||
Result-as-parameter version:
|
||||
.. doxygenfunction:: fillholes_pushpull(ImageBuf&, const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: fillholes_pushpull(ImageBuf &dst, const ImageBuf &src, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: median_filter(ImageBuf&, const ImageBuf&, int, int, ROI, int)
|
||||
.. doxygenfunction:: median_filter(const ImageBuf &src, int width = 3, int height = -1, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1472,12 +1493,12 @@ Image Enhancement / Restoration
|
||||
+-----------------+-----------------+-----------------+
|
||||
|
||||
Result-as-parameter version:
|
||||
.. doxygenfunction:: median_filter(ImageBuf&, const ImageBuf&, int, int, ROI, int)
|
||||
.. doxygenfunction:: median_filter(ImageBuf &dst, const ImageBuf &src, int width = 3, int height = -1, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: unsharp_mask(const ImageBuf&, string_view, float, float, float, ROI, int)
|
||||
.. doxygenfunction:: unsharp_mask(const ImageBuf &src, string_view kernel = "gaussian", float width = 3.0f, float contrast = 1.0f, float threshold = 0.0f, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1486,7 +1507,7 @@ Image Enhancement / Restoration
|
||||
ImageBuf Sharp = ImageBufAlgo::unsharp_mask (Blurry, "gaussian", 5.0f);
|
||||
|
||||
Result-as-parameter version:
|
||||
.. doxygenfunction:: unsharp_mask(ImageBuf&, const ImageBuf&, string_view, float, float, float, ROI, int)
|
||||
.. doxygenfunction:: unsharp_mask(ImageBuf &dst, const ImageBuf &src, string_view kernel = "gaussian", float width = 3.0f, float contrast = 1.0f, float threshold = 0.0f, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
|
||||
|
||||
@@ -1494,20 +1515,20 @@ Image Enhancement / Restoration
|
||||
Morphological filters
|
||||
=====================
|
||||
|
||||
.. doxygenfunction:: dilate(const ImageBuf&, int, int, ROI, int)
|
||||
.. doxygenfunction:: dilate(const ImageBuf &src, int width = 3, int height = -1, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Result-as-parameter version:
|
||||
.. doxygenfunction:: dilate(ImageBuf&, const ImageBuf&, int, int, ROI, int)
|
||||
.. doxygenfunction:: dilate(ImageBuf &dst, const ImageBuf &src, int width = 3, int height = -1, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: erode(const ImageBuf&, int, int, ROI, int)
|
||||
.. doxygenfunction:: erode(const ImageBuf &src, int width = 3, int height = -1, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Result-as-parameter version:
|
||||
.. doxygenfunction:: erode(ImageBuf&, const ImageBuf&, int, int, ROI, int)
|
||||
.. doxygenfunction:: erode(ImageBuf &dst, const ImageBuf &src, int width = 3, int height = -1, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
|
||||
|
||||
@@ -1605,7 +1626,7 @@ Color space conversion
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: colormatrixtransform(const ImageBuf&, const Imath::M44f&, bool, ROI, int)
|
||||
.. doxygenfunction:: colormatrixtransform(const ImageBuf &src, const Imath::M44f &M, bool unpremult = true, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1631,12 +1652,12 @@ Color space conversion
|
||||
+-----------------+-----------------+
|
||||
|
||||
Result-as-parameter version:
|
||||
.. doxygenfunction:: colormatrixtransform(ImageBuf&, const ImageBuf&, const Imath::M44f&, bool, ROI, int)
|
||||
.. doxygenfunction:: colormatrixtransform(ImageBuf &dst, const ImageBuf &src, const Imath::M44f &M, bool unpremult = true, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: ociolook(const ImageBuf&, string_view, string_view, string_view, bool, bool, string_view, string_view, ColorConfig*, ROI, int)
|
||||
.. doxygenfunction:: ociolook(const ImageBuf &src, string_view looks, string_view fromspace, string_view tospace, bool unpremult = true, bool inverse = false, string_view context_key = "", string_view context_value = "", ColorConfig *colorconfig = nullptr, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1646,11 +1667,11 @@ Color space conversion
|
||||
true, false, "SHOT", "pe0012");
|
||||
|
||||
Result-as-parameter version:
|
||||
.. doxygenfunction:: ociolook(ImageBuf&, const ImageBuf&, string_view, string_view, string_view, bool, bool, string_view, string_view, ColorConfig*, ROI, int)
|
||||
.. doxygenfunction:: ociolook(ImageBuf &dst, const ImageBuf &src, string_view looks, string_view fromspace, string_view tospace, bool unpremult = true, bool inverse = false, string_view context_key = "", string_view context_value = "", ColorConfig *colorconfig = nullptr, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: ociodisplay(const ImageBuf&, string_view, string_view, string_view, string_view, bool, string_view, string_view, ColorConfig*, ROI, int)
|
||||
.. doxygenfunction:: ociodisplay(const ImageBuf &src, string_view display, string_view view, string_view fromspace = "", string_view looks = "", bool unpremult = true, string_view context_key = "", string_view context_value = "", ColorConfig *colorconfig = nullptr, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1660,12 +1681,12 @@ Color space conversion
|
||||
"", true, "SHOT", "pe0012");
|
||||
|
||||
Result-as-parameter version:
|
||||
.. doxygenfunction:: ociodisplay(ImageBuf&, const ImageBuf&, string_view, string_view, string_view, string_view, bool, string_view, string_view, ColorConfig*, ROI, int)
|
||||
.. doxygenfunction:: ociodisplay(ImageBuf &dst, const ImageBuf &src, string_view display, string_view view, string_view fromspace = "", string_view looks = "", bool unpremult = true, string_view context_key = "", string_view context_value = "", ColorConfig *colorconfig = nullptr, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: ociofiletransform(const ImageBuf&, string_view, bool, bool, ColorConfig*, ROI, int)
|
||||
.. doxygenfunction:: ociofiletransform(const ImageBuf &src, string_view name, bool unpremult = true, bool inverse = false, ColorConfig *colorconfig = nullptr, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1675,7 +1696,7 @@ Color space conversion
|
||||
|
||||
|
||||
Result-as-parameter version:
|
||||
.. doxygenfunction:: ociofiletransform(ImageBuf&, const ImageBuf&, string_view, bool, bool, ColorConfig*, ROI, int)
|
||||
.. doxygenfunction:: ociofiletransform(ImageBuf &dst, const ImageBuf &src, string_view name, bool unpremult = true, bool inverse = false, ColorConfig *colorconfig = nullptr, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
@@ -1761,7 +1782,7 @@ Functions specific to deep images
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: deepen(const ImageBuf&, float, ROI, int)
|
||||
.. doxygenfunction:: deepen(const ImageBuf &src, float zvalue = 1.0f, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1770,12 +1791,12 @@ Functions specific to deep images
|
||||
ImageBuf Deep = ImageBufAlgo::deepen (Flat);
|
||||
|
||||
Result-as-parameter version:
|
||||
.. doxygenfunction:: deepen(ImageBuf&, const ImageBuf&, float, ROI, int)
|
||||
.. doxygenfunction:: deepen(ImageBuf &dst, const ImageBuf &src, float zvalue = 1.0f, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: flatten(const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: flatten(const ImageBuf &src, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1784,12 +1805,12 @@ Functions specific to deep images
|
||||
ImageBuf Flat = ImageBufAlgo::flatten (Deep);
|
||||
|
||||
Result-as-parameter version:
|
||||
.. doxygenfunction:: flatten(ImageBuf&, const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: flatten(ImageBuf &dst, const ImageBuf &src, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: deep_merge(const ImageBuf&, const ImageBuf&, bool, ROI, int)
|
||||
.. doxygenfunction:: deep_merge(const ImageBuf &A, const ImageBuf &B, bool occlusion_cull = true, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1799,13 +1820,13 @@ Functions specific to deep images
|
||||
ImageBuf Merged = ImageBufAlgo::deep_merge (DeepA, DeepB);
|
||||
|
||||
Result-as-parameter version:
|
||||
.. doxygenfunction:: deep_merge(ImageBuf&, const ImageBuf&, const ImageBuf&, bool, ROI, int)
|
||||
.. doxygenfunction:: deep_merge(ImageBuf &dst, const ImageBuf &A, const ImageBuf &B, bool occlusion_cull = true, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
||||
|
||||
|
|
||||
|
||||
.. doxygenfunction:: deep_holdout(const ImageBuf&, const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: deep_holdout(const ImageBuf &src, const ImageBuf &holdout, ROI roi = {}, int nthreads = 0)
|
||||
..
|
||||
|
||||
Examples::
|
||||
@@ -1815,7 +1836,7 @@ Functions specific to deep images
|
||||
ImageBuf Merged = ImageBufAlgo::deep_holdout (Src, Holdout);
|
||||
|
||||
Result-as-parameter version:
|
||||
.. doxygenfunction:: deep_holdout(ImageBuf&, const ImageBuf&, const ImageBuf&, ROI, int)
|
||||
.. doxygenfunction:: deep_holdout(ImageBuf &dst, const ImageBuf &src, const ImageBuf &holdout, ROI roi = {}, int nthreads = 0)
|
||||
|
||||
|
|
||||
|
||||
|
||||
@@ -299,6 +299,37 @@ Please consult Section :ref:`ImageInput Class Reference` for detailed
|
||||
descriptions of the stride parameters to each ``read`` function.
|
||||
|
||||
|
||||
Reading channels to separate buffers
|
||||
------------------------------------
|
||||
|
||||
While specifying data strides allows writing entire pixels to buffers with
|
||||
arbitrary layouts, it is not possible to separate those pixels into multiple
|
||||
buffers (i.e. to write image data to a separate or planar memory layout:
|
||||
RRRRGGGGBBBB instead of the interleaved RGBRGBRGBRGB).
|
||||
|
||||
A workaround for this is to call ``read_scanlines``, ``read_tiles`` or
|
||||
``read_image`` repeatedly with arguments ``chbegin`` and ``chend`` of
|
||||
``0 <= chbegin < spec.nchannels`` and ``chend == chbegin + 1``::
|
||||
|
||||
// one buffer for all three channels
|
||||
unsigned char pixels[spec.width * spec.height * spec.nchannels];
|
||||
|
||||
for (int channel = 0; channel < spec.nchannels; ++channel) {
|
||||
file->read_image(
|
||||
// reading one channel at a time
|
||||
channel, channel + 1,
|
||||
TypeDesc::UINT8,
|
||||
// writing the data to offsets spaced `spec.width * spec.height`
|
||||
// apart
|
||||
&pixels[spec.width * spec.height * channel]);
|
||||
}
|
||||
|
||||
For many formats, this is nearly as fast as reading the image with
|
||||
interleaved pixel data if the format stores the pixels in an interleaved
|
||||
layout and even slightly faster if the pixels are stored in separate planes
|
||||
in the file.
|
||||
|
||||
|
||||
Reading metadata
|
||||
--------------------------------
|
||||
|
||||
|
||||
@@ -318,6 +318,39 @@ Please consult Section~\ref{sec:imageinput:reference} for detailed
|
||||
descriptions of the stride parameters to each {\cf read} function.
|
||||
|
||||
|
||||
\subsection{Reading channels to separate buffers}
|
||||
\label{sec:imageinput:separate}
|
||||
|
||||
While specifying data strides allows writing entire pixels to buffers with
|
||||
arbitrary layouts, it is not possible to separate those pixels into multiple
|
||||
buffers (i.e. to write image data to a separate or planar memory layout:
|
||||
RRRRGGGGBBBB instead of the interleaved RGBRGBRGBRGB).
|
||||
|
||||
A workaround for this is to call {\cf read_scanlines}, {\cf read_tiles} or
|
||||
{\cf read_image} repeatedly with arguments {\cf chbegin} and {\cf chend} of
|
||||
{\cf 0 <= chbegin < spec.nchannels} and {\cf chend == chbegin + 1}:
|
||||
|
||||
\begin{code}
|
||||
// one buffer for all three channels
|
||||
unsigned char pixels[spec.width * spec.height * spec.nchannels];
|
||||
|
||||
for (int channel = 0; channel < spec.nchannels; ++channel) {
|
||||
file->read_image(
|
||||
// reading one channel at a time
|
||||
channel, channel + 1,
|
||||
TypeDesc::UINT8,
|
||||
// writing the data to offsets spaced `spec.width * spec.height`
|
||||
// apart
|
||||
&pixels[spec.width * spec.height * channel]);
|
||||
}
|
||||
\end{code}
|
||||
|
||||
For many formats, this is nearly as fast as reading the image with
|
||||
interleaved pixel data if the format stores the pixels in an interleaved
|
||||
layout and even slightly faster if the pixels are stored in separate planes
|
||||
in the file.
|
||||
|
||||
|
||||
\subsection{Reading metadata}
|
||||
\label{sec:imageinput:metadata}
|
||||
|
||||
|
||||
+18
-5
@@ -41,9 +41,11 @@ in the outer OpenImageIO scope:
|
||||
|
||||
TypeUnknown TypeFloat TypeColor TypePoint TypeVector TypeNormal
|
||||
TypeMatrix33 TypeMatrix44 TypeMatrix TypeHalf
|
||||
TypeInt TypeUInt TypeInt16 TypeUInt16 TypeInt8 TypeUInt8
|
||||
TypeFloat2 TypeVector2 TypeFloat4 TypeVector2i
|
||||
TypeInt TypeUInt TypeInt32 TypeUInt32 TypeInt64 TypeUInt64
|
||||
TypeInt16 TypeUInt16 TypeInt8 TypeUInt8
|
||||
TypeFloat2 TypeVector2 TypeVector2i TypeFloat4
|
||||
TypeString TypeTimeCode TypeKeyCode
|
||||
TypeBox2 TypeBox2i TypeBox3 TypeBox3i
|
||||
TypeRational TypePointer
|
||||
|
||||
The only types commonly used to store *pixel values* in image files
|
||||
@@ -193,7 +195,7 @@ These helper functions are not part of any other OpenImageIO class, they
|
||||
just exist in the OpenImageIO namespace as general utilities. (See
|
||||
:ref:`sec-pythonmiscapi` for the corresponding Python bindings.)
|
||||
|
||||
.. doxygenfunction:: OIIO::attribute(string_view, TypeDesc, const void*)
|
||||
.. doxygenfunction:: OIIO::attribute(string_view, TypeDesc, const void *)
|
||||
|
||||
.. cpp:function:: bool OIIO::attribute(string_view name, int val)
|
||||
bool OIIO::attribute(string_view name, float val)
|
||||
@@ -202,7 +204,7 @@ just exist in the OpenImageIO namespace as general utilities. (See
|
||||
Shortcuts for setting an attribute to a single int, float, or string.
|
||||
|
||||
|
||||
.. doxygenfunction:: OIIO::getattribute(string_view, TypeDesc, void*)
|
||||
.. doxygenfunction:: OIIO::getattribute(string_view, TypeDesc, void *)
|
||||
|
||||
|
||||
.. cpp:function:: bool getattribute (string_view name, int &val)
|
||||
@@ -265,6 +267,10 @@ just exist in the OIIO namespace as general utilities. (See
|
||||
|
||||
.. doxygenfunction:: declare_imageio_format
|
||||
|
||||
|
||||
.. doxygenfunction:: is_imageio_format_name
|
||||
|
||||
|
||||
|
|
||||
|
||||
|
||||
@@ -304,7 +310,7 @@ inside the source code.
|
||||
imagecache->attribute ("options", value);
|
||||
|
||||
|
||||
``OPENIMAGEIO_TEXTURESYSTEM_OPTIONS``
|
||||
``OPENIMAGEIO_TEXTURE_OPTIONS``
|
||||
|
||||
Allows you to seed the options for any TextureSystem created.
|
||||
|
||||
@@ -316,3 +322,10 @@ inside the source code.
|
||||
will be passed to a call to::
|
||||
|
||||
texturesys->attribute ("options", value);
|
||||
|
||||
``OPENIMAGEIO_THREADS``, ``CUE_THREADS``
|
||||
|
||||
Either of these sets the default number of threads that OpenImageIO will
|
||||
use for its thread pool. If both are set, ``OPENIMAGEIO_THREADS`` will
|
||||
take precedence. If neither is set, the default will be 0, which means
|
||||
to use as many threads as there are physical cores on the machine.
|
||||
|
||||
@@ -90,4 +90,7 @@ OpenImageIO |version|
|
||||
https://breathe.readthedocs.io/en/latest/directives.html
|
||||
RST:
|
||||
|
||||
sphinx-tabs plugin for Sphinx:
|
||||
https://pypi.org/project/sphinx-tabs/
|
||||
https://sphinx-tabs.readthedocs.io/en/latest/#
|
||||
|
||||
|
||||
+1
-16
@@ -32,10 +32,7 @@ ordinary images into texture files: :program:`maketx` and
|
||||
straightforward and foolproof, in that you can't accidentally forget
|
||||
to turn it into a texture, as you might do with and much later
|
||||
:program:`oiiotool` was extended to be capable of directly writing
|
||||
texture files. If you are simply converting an image into a texture,
|
||||
:program:`maketx` is more straightforward and foolproof, in that you
|
||||
can't accidentally forget to turn it into a texture, as you might do
|
||||
with
|
||||
texture files.
|
||||
|
||||
|
||||
|
||||
@@ -309,11 +306,6 @@ Command-line arguments are:
|
||||
identical, and outputs the texture as a single-channel image instead.
|
||||
That is, it changes RGB images that are gray into single-channel gray
|
||||
scale images.
|
||||
|
||||
Detects multi-channel images in which all color components are
|
||||
identical, and outputs the texture as a single-channel image instead.
|
||||
That is, it changes RGB images that are gray into single-channel gray
|
||||
scale images.
|
||||
|
||||
.. option:: --opaque-detect
|
||||
|
||||
@@ -323,13 +315,6 @@ Command-line arguments are:
|
||||
A=1 for all pixels will be output just as RGB. The purpose is to save
|
||||
disk space, texture I/O bandwidth, and texturing time for those textures
|
||||
where alpha was present in the input, but clearly not necessary.
|
||||
|
||||
Detects images that have a designated alpha channel for which the alpha
|
||||
value for all pixels is 1.0 (fully opaque), and omits the alpha channel
|
||||
from the output texture. So, for example, an RGBA input texture where
|
||||
A=1 for all pixels will be output just as RGB. The purpose is to save
|
||||
disk space, texture I/O bandwidth, and texturing time for those textures
|
||||
where alpha was present in the input, but clearly not necessary.
|
||||
|
||||
.. option:: --ignore-unassoc
|
||||
|
||||
|
||||
@@ -254,7 +254,6 @@ against dynamic libraries:
|
||||
* libpng © 1998-2008 Glenn Randers-Pehrson, et al. http://www.libpng.org
|
||||
* Boost © various authors. http://www.boost.org
|
||||
* GLEW © 2002-2007 Milan Ikits, et al. http://glew.sourceforge.net
|
||||
* Jasper © 2001-2006 Michael David Adams, et al. http://www.ece.uvic.ca/~mdadams/jasper/
|
||||
* Ptex © 2009 Disney Enterprises, Inc. http://ptex.us
|
||||
* Field3D © 2009 Sony Pictures Imageworks. http://sites.google.com/site/field3d/
|
||||
* GIFLIB © 1997 Eric S. Raymond (MIT Licensed). http://giflib.sourceforge.net/
|
||||
@@ -263,6 +262,7 @@ against dynamic libraries:
|
||||
* FreeType © 1996-2002, 2006 by David Turner, Robert Wilhelm, and Werner Lemberg. Distributed under the FreeType license (BSD compatible).
|
||||
* JPEG-Turbo © 2009--2015 D. R. Commander. Distributed under the BSD license.
|
||||
* pybind11 © 2016 Wenzel Jakob. Distributed under the BSD license. https://github.com/pybind/pybind11
|
||||
* OpenJPEG © Universite catholique de Louvain (UCL), et al. Distributed under the BSD 2-clause license. https://github.com/uclouvain/openjpeg
|
||||
* OpenVDB © 2012-2018 DreamWorks Animation LLC, Mozilla Public License 2.0. https://www.openvdb.org/
|
||||
* Thread Building Blocks © Intel. Apache 2.0 license. https://www.threadingbuildingblocks.org/
|
||||
* libheif \copyright 2017-2018 Struktur AG (LGPL). https://github.com/strukturag/libheif
|
||||
|
||||
+73
-22
@@ -265,7 +265,7 @@ evaluation with the `--evaloff` end `--evalon` flags. For example::
|
||||
> oiiotool ERROR: expression : syntax error at char 1 of `weird'
|
||||
|
||||
$ oiiotool --info --evaloff "{weird}.exr"
|
||||
> weird.exr : 2048 x 1536, 3 channel, half openexr
|
||||
> {weird.exr} : 2048 x 1536, 3 channel, half openexr
|
||||
|
||||
|
||||
.. _sec-oiiotool-subimage-modifier:
|
||||
@@ -290,7 +290,8 @@ subimage of their input, discarding the others. For example::
|
||||
oiiotool multipart.exr --colorconvert lnf aces -o out.exr
|
||||
|
||||
In this example, only the first subimage in `multipart.exr` will be color
|
||||
transformed and output to `out.exr`.
|
||||
transformed and output to `out.exr`. Any other subimages in the input will
|
||||
not be used or copied.
|
||||
|
||||
Using the `-a` command tells :program:`oiiotool` to try to preserve all
|
||||
subimges from the inputs and apply all computations to all subimages::
|
||||
@@ -306,7 +307,7 @@ to certain subimages. The argument is a comma-separated list of any of the
|
||||
following: (a) an integer index of a subimage to include, or a minus sign
|
||||
(`-`) followed by an integer index of a subimage to exclude; (b) the name
|
||||
(as returned by the metadata "oiio:subimagename") of a subimage to include,
|
||||
or to excludeif preceded by a `-`; (c) the special string "all", meaning all
|
||||
or to exclude if preceded by a `-`; (c) the special string "all", meaning all
|
||||
subimages. Examples::
|
||||
|
||||
# Color convert only subimages 0, 3, and 4, leave the rest as-is
|
||||
@@ -627,6 +628,17 @@ it "Z" so it will be recognized as a depth channel::
|
||||
|
||||
|
||||
|
||||
Copy metadata from one image to another
|
||||
---------------------------------------
|
||||
|
||||
Suppose you have a (non-OIIO) application that consumes input Exr files and
|
||||
produces output Exr files, but along the way loses crucial metadata from
|
||||
the input files that you want carried along. This command will add all the
|
||||
metadata from the first image to the pixels of the second image:
|
||||
|
||||
oiiotool metaonly.exr pixelsonly.exr --pastemeta -o combined.exr
|
||||
|
||||
|
||||
Fade between two images
|
||||
-----------------------
|
||||
|
||||
@@ -1205,12 +1217,17 @@ Writing images
|
||||
`:updatemode=` *int*
|
||||
If nonzero, do not create and overwrite the existing texture if it
|
||||
appears to already match the source pixels. (default: 0)
|
||||
`:constant_color_detect=` *int*
|
||||
Detect images that are entirely one color, and change them to be low
|
||||
resolution. (default: 0)
|
||||
`:monochrome_detect=` *int*
|
||||
Detect monochrome (R=G=B) images and turn them into 1-channel
|
||||
textures. (default: 0)
|
||||
`:opaque_detect=` *int*
|
||||
Detect opaque (A=1) images and drop the alpha channel from the
|
||||
texture. (default: 0)
|
||||
`:compute_average=` *int*
|
||||
Compute and store the average color of the texture. (default: 1)
|
||||
`:unpremult=` *int*
|
||||
Unpremultiply colors before any per-MIP-level color conversions, and
|
||||
re-premultiply after. (default: 0)
|
||||
@@ -1250,19 +1267,25 @@ Writing images
|
||||
|
||||
.. option:: -d <datatype>
|
||||
-d <channelname>=<datatype>
|
||||
-d <subimagename>.*=<datatype>
|
||||
-d <subimagename>.<channelname>=<datatype>
|
||||
|
||||
Attempts to set the pixel data type of all subsequent outputs. If no
|
||||
channel is named, sets *all* channels to be the specified data type. If
|
||||
a specific channel is named, then the data type will be overridden for
|
||||
just that channel (multiple `-d` commands may be used).
|
||||
channel or subimage name is given, sets *all* channels to be the
|
||||
specified data type. If a specific channel is named, then the data type
|
||||
will be overridden for just that channel (multiple `-d` commands may be
|
||||
used). If both a subimage name and channel name are specified, the hint
|
||||
is only for the named channel when encountered in a named subimage. And
|
||||
if the specification is of the form `subimagename.*=type`, then all
|
||||
channels of that subimage will be output with the given type.
|
||||
|
||||
Valid types are: `UINT8`, `sint8`, `uint16`, `sint16`, `half`, `float`,
|
||||
Valid types are: `uint8`, `sint8`, `uint16`, `sint16`, `half`, `float`,
|
||||
`double`. The types `uint10` and `uint12` may be used to request 10- or
|
||||
12-bit unsigned integers. If the output file format does not support
|
||||
them, `uint16` will be substituted.
|
||||
|
||||
If the `-d` option is not supplied, the output data type will be the
|
||||
same as the data format of the input files, if possible.
|
||||
If the `-d` option is not supplied, the output data type will be
|
||||
deduced from the data format of the input files, if possible.
|
||||
|
||||
In any case, if the output file type does not support the requested data
|
||||
type, it will instead use whichever supported data type results in the
|
||||
@@ -1586,8 +1609,16 @@ current top image.
|
||||
|
||||
.. option:: --siappend
|
||||
|
||||
Replaces the top two images on the stack with a single new image
|
||||
comprised of the subimages of both images appended together.
|
||||
Replaces the top two (or more) images on the stack with a single new
|
||||
multi-subimage comprised of the original images appended together as
|
||||
subimages within the same single image.
|
||||
|
||||
Optional appended modifiers include:
|
||||
|
||||
`:n=` *number-of-subimages*
|
||||
Specify the number (if more than 2) of images to combine into a
|
||||
single multi-subimage image. This will be clamped between 2 and the
|
||||
total number of images on the stack.
|
||||
|
||||
.. option:: --siappendall
|
||||
|
||||
@@ -1617,11 +1648,16 @@ current top image.
|
||||
|
||||
.. option:: --chappend
|
||||
|
||||
Replaces the top two images on the stack with a new image comprised of
|
||||
the channels of both images appended together.
|
||||
Replaces the top two (or more) images on the stack with a single new
|
||||
image comprised of the channels of the input images appended together.
|
||||
|
||||
Optional appended modifiers include:
|
||||
|
||||
`:n=` *number-of-subimages*
|
||||
Specify the number (if more than 2) of images whose channels should
|
||||
be combined into a single image. This will be clamped between 2 and
|
||||
the total number of images on the stack.
|
||||
|
||||
`:subimages=` *indices-or-names*
|
||||
Include/exclude subimages (see :ref:`sec-oiiotool-subimage-modifier`).
|
||||
|
||||
@@ -2223,6 +2259,23 @@ current top image.
|
||||
oiiotool img*.exr -paste:mergeroi=1:all=1 +0+0 -o combined.exr
|
||||
|
||||
|
||||
.. option:: --pastemeta <location>
|
||||
|
||||
Takes two images -- the first will be a source of metadata only, and the
|
||||
second the source of pixels -- and produces a new copy of the second
|
||||
image with the metadata from the first image added.
|
||||
|
||||
The output image's pixels will come only from the second input. Metadata
|
||||
from the second input will be preserved if no identically-named metadata
|
||||
was present in the first input image.
|
||||
|
||||
Examples::
|
||||
|
||||
# Add all the metadata from meta.exr to pixels.exr and write the
|
||||
# combined image to out.exr.
|
||||
oiiotool meta.exr pixels.exr --pastemeta -o out.exr
|
||||
|
||||
|
||||
.. option:: --mosaic <size>
|
||||
|
||||
Removes :math:`w \times h` images, dictated by the *size*, and turns
|
||||
@@ -3262,7 +3315,7 @@ bottom you will see the list of all color spaces, looks, and displays that
|
||||
location. Without this, the default is to use the `$OCIO` environment
|
||||
variable as a guide for the location of the configuration file.
|
||||
|
||||
.. option:: --colorconvert <fromspace tospace>
|
||||
.. option:: --colorconvert <fromspace> <tospace>
|
||||
|
||||
Replace the current image with a new image whose pixels are transformed
|
||||
from the named *fromspace* color space into the named *tospace*
|
||||
@@ -3360,7 +3413,9 @@ bottom you will see the list of all color spaces, looks, and displays that
|
||||
|
||||
Assume the image is in the named color space. If no `from=` is
|
||||
supplied, it will try to deduce it from the image's metadata or
|
||||
previous `--iscolorspace` directives.
|
||||
previous `--iscolorspace` directives. If no such hints are available,
|
||||
it will assume the pixel data are in the default linear scene-referred
|
||||
color space.
|
||||
|
||||
- `to=` *val*
|
||||
|
||||
@@ -3413,7 +3468,9 @@ bottom you will see the list of all color spaces, looks, and displays that
|
||||
`from=` *val*
|
||||
Assume the image is in the named color space. If no `from=` is
|
||||
supplied, it will try to deduce it from the image's metadata or
|
||||
previous `--iscolorspace` directives.
|
||||
previous `--iscolorspace` directives. If no such hints are
|
||||
available, it will assume the pixel data are in the default linear
|
||||
scene-referred color space.
|
||||
|
||||
`key=` *name*, `value=` *str*
|
||||
Adds a key/value pair to the "context" that OpenColorIO will used
|
||||
@@ -3462,12 +3519,6 @@ bottom you will see the list of all color spaces, looks, and displays that
|
||||
`:subimages=` *indices-or-names*
|
||||
Include/exclude subimages (see :ref:`sec-oiiotool-subimage-modifier`).
|
||||
|
||||
This command is only meaningful if OIIO was compiled with OCIO support
|
||||
and the environment variable `$OCIO` is set to point to a valid
|
||||
OpenColorIO configuration file. If you ask for :program:`oiiotool` help
|
||||
(`oiiotool --help`), at the very bottom you will see the list of all
|
||||
looks that :program:`oiiotool` knows about.
|
||||
|
||||
Examples::
|
||||
|
||||
oiiotool in.jpg --ociofiletransform footransform.csp -o out.jpg
|
||||
|
||||
@@ -1015,13 +1015,13 @@ the Python versions allocate and return an array holding the pixel values
|
||||
|
||||
|
||||
|
||||
.. py:method:: ImageInput.read_image (format="float")
|
||||
ImageInput.read_image (chbegin, chend, format="float")
|
||||
ImageInput.read_image (subimage, miplevel, chbegin, chend, format="float")
|
||||
.. py:method:: ImageInput.read_image (format='float')
|
||||
ImageInput.read_image (chbegin, chend, format='float')
|
||||
ImageInput.read_image (subimage, miplevel, chbegin, chend, format='float')
|
||||
|
||||
Read the entire image and return the pixels as a NumPy array of values
|
||||
of the given `type` (described by a `TypeDesc` or a string, float by
|
||||
default). If the `type` is `TypeUnknown`, the pixels will be returned in
|
||||
of the given `format` (described by a `TypeDesc` or a string, float by
|
||||
default). If the `format` is `unknown`, the pixels will be returned in
|
||||
the native format of the file. If an error occurs, `None` will be
|
||||
returned.
|
||||
|
||||
@@ -2430,7 +2430,7 @@ Image transformations and data movement
|
||||
|
||||
|
||||
|
||||
.. py:method:: bool ImageBufAlgo.paste (dst, xbegin, ybegin, zbegin, chbegin, src, ROI srcroi=ROI.All, nthreads=0)
|
||||
.. py:method:: bool ImageBufAlgo.paste (dst, xbegin, ybegin, zbegin, chbegin, src, srcroi=ROI.All, nthreads=0)
|
||||
|
||||
Copy the specified region of `src` into `dst` with the given offset
|
||||
(`xbegin`, `ybegin`, `zbegin`).
|
||||
@@ -3609,6 +3609,19 @@ details.
|
||||
formats = oiio.get_string_attribute ("format_list")
|
||||
|
||||
|
||||
.. py:method:: is_imageio_format_name (name)
|
||||
|
||||
Returns True if `name` is the name of a known and supported file format,
|
||||
`False` if it is not.
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
>>> print (oiio.is_imageio_format_name('tiff'))
|
||||
True
|
||||
>>> print (oiio.is_imageio_format_name('Bob'))
|
||||
False
|
||||
|
||||
|
||||
.. _sec-pythonrecipes:
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
breathe == 4.16.0
|
||||
sphinx >= 3.0
|
||||
breathe == 4.27.0
|
||||
sphinx-tabs
|
||||
|
||||
@@ -114,6 +114,11 @@ the frame refresh rate. (It's technically a rational, but it may be retrieved
|
||||
as a float also, if you are ok with imprecision.)
|
||||
\apiend
|
||||
|
||||
\apiitem{"oiio:LoopCount" : int}
|
||||
If nonzero, a hint that a multi-image file that represents an animation is
|
||||
supposed to be displayed and looped this number of times.
|
||||
\apiend
|
||||
|
||||
\section{Color information}
|
||||
\label{metadata:colorspace}
|
||||
|
||||
|
||||
+61
-26
@@ -130,10 +130,12 @@ structure:
|
||||
will return `false`. Note: When not NULL, the data must point to
|
||||
`nchannels` contiguous floats.
|
||||
|
||||
- `float bias` :
|
||||
..
|
||||
- `float bias` :
|
||||
For shadow map lookups only, this gives the "shadow bias" amount.
|
||||
|
||||
- `int samples` :
|
||||
..
|
||||
- `int samples` :
|
||||
For shadow map lookups only, the number of samples to use for the lookup.
|
||||
|
||||
- `Wrap rwrap, float rblur, rwidth` :
|
||||
@@ -141,6 +143,38 @@ structure:
|
||||
texture lookups. These are not used for 2D texture or environment
|
||||
lookups.
|
||||
|
||||
- `MipMode mipmode` :
|
||||
Determines if/how MIP-maps are used:
|
||||
|
||||
- `MipModeDefault` : The default high-quality lookup (same as Aniso).
|
||||
|
||||
- `MipModeNoMIP` : Just use highest-res image, no MIP mapping
|
||||
|
||||
- `MipModeOneLevel` : Use just one mipmap level
|
||||
|
||||
- `MipModeTrilinear` : Use two MIPmap levels (trilinear)
|
||||
|
||||
- `MipModeAniso` : Use two MIPmap levels w/ anisotropic
|
||||
|
||||
- `InterpMode interpmode` :
|
||||
Determines how we sample within a mipmap level:
|
||||
|
||||
- `InterpClosest` : Force closest texel.
|
||||
|
||||
- `InterpBilinear` : Force bilinear lookup within a mip level.
|
||||
|
||||
- `InterpBicubic` : Force cubic lookup within a mip level.
|
||||
|
||||
- `InterpSmartBicubic` : Bicubic when maxifying, else bilinear (default).
|
||||
|
||||
- `int anisotropic` :
|
||||
Maximum anisotropic ratio (default: 32).
|
||||
|
||||
- `bool conservative_filter` :
|
||||
When true (the default), filters conservatively in a way that chooses to
|
||||
sometimes over-blur rather than alias.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -195,19 +229,18 @@ batch of lookups from the same texture at once. The members of
|
||||
TextureOptBatch correspond to the similarly named members of the
|
||||
single-point TextureOpt, so we refer you to Section :ref:`sec-textureopt`
|
||||
for detailed explanations, and this section will only explain the
|
||||
differences between batched and single-point options.
|
||||
differences between batched and single-point options. Members include:
|
||||
|
||||
|
||||
.. cpp:member:: int firstchannel
|
||||
int subimage
|
||||
ustring subimagename
|
||||
Tex::Wrap swrap, twrap, rwrap
|
||||
Tex::MipMode mipmode
|
||||
Tex::InterpMode interpmode
|
||||
int anisotropic
|
||||
bool conservative_filter
|
||||
float fill
|
||||
const float *missingcolor
|
||||
- `int firstchannel` :
|
||||
- `int subimage, ustring subimagename` :
|
||||
- `Wrap swrap, twrap, rwrap` :
|
||||
- `float fill` :
|
||||
- `const float* missingcolor` :
|
||||
- `MipMode mipmode` :
|
||||
- `InterpMode interpmode` :
|
||||
- `int anisotropic` :
|
||||
- `bool conservative_filter` :
|
||||
|
||||
These fields are all scalars --- a single value for each TextureOptBatch
|
||||
--- which means that the value of these options must be the same for
|
||||
@@ -216,17 +249,17 @@ differences between batched and single-point options.
|
||||
example) differing wrap modes or subimages from point to point, then you
|
||||
must split them into separate batch calls.
|
||||
|
||||
.. cpp:member:: float sblur[Tex::BatchWidth]
|
||||
float tblur[Tex::BatchWidth]
|
||||
float rblur[Tex::BatchWidth]
|
||||
- `float sblur[Tex::BatchWidth]` :
|
||||
- `float tblur[Tex::BatchWidth]` :
|
||||
- `float rblur[Tex::BatchWidth]` :
|
||||
|
||||
These arrays hold the `s`, and `t` blur amounts, for each sample in the
|
||||
batch, respectively. (And the `r` blur amount, used only for volumetric
|
||||
`texture3d()` lookups.)
|
||||
|
||||
.. cpp:member:: float swidth[Tex::BatchWidth]
|
||||
float twidth[Tex::BatchWidth]
|
||||
float rwidth[Tex::BatchWidth]
|
||||
- `float swidth[Tex::BatchWidth]` :
|
||||
- `float twidth[Tex::BatchWidth]` :
|
||||
- `float rwidth[Tex::BatchWidth]` :
|
||||
|
||||
These arrays hold the `s`, and `t` filtering width multiplier for
|
||||
derivatives, for each sample in the batch, respectively. (And the `r`
|
||||
@@ -320,13 +353,15 @@ occur if the texture filename initially passed to `texture()` does not
|
||||
exist as a concrete file and contains one or more of the following
|
||||
substrings:
|
||||
|
||||
======== ========================
|
||||
`<UDIM>` 1001 + utile + vtile*10
|
||||
`<u>` utile
|
||||
`<v>` vtile
|
||||
`<U>` utile + 1
|
||||
`<V>` vtile + 1
|
||||
======== ========================
|
||||
========== ========================
|
||||
`<UDIM>` 1001 + utile + vtile*10
|
||||
`<u>` utile
|
||||
`<v>` vtile
|
||||
`<U>` utile + 1
|
||||
`<V>` vtile + 1
|
||||
`_u##v##` utile, vtile
|
||||
`%(UDIM)d` 1001 + utile + vtile*10
|
||||
========== ========================
|
||||
|
||||
where the tile numbers are derived from the input u,v texture
|
||||
coordinates as follows::
|
||||
|
||||
@@ -6,4 +6,4 @@ add_oiio_plugin (dpxinput.cpp dpxoutput.cpp
|
||||
libdpx/DPX.cpp libdpx/OutStream.cpp libdpx/RunLengthEncoding.cpp
|
||||
libdpx/Codec.cpp libdpx/Reader.cpp libdpx/Writer.cpp libdpx/DPXHeader.cpp
|
||||
libdpx/ElementReadStream.cpp libdpx/InStream.cpp libdpx/DPXColorConverter.cpp
|
||||
LINK_LIBRARIES ${OPENEXR_LIBRARIES})
|
||||
)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include <cmath>
|
||||
#include <iomanip>
|
||||
#include <memory>
|
||||
|
||||
#include <OpenEXR/ImfTimeCode.h> //For TimeCode support
|
||||
|
||||
@@ -24,6 +25,10 @@ public:
|
||||
DPXInput() { init(); }
|
||||
virtual ~DPXInput() { close(); }
|
||||
virtual const char* format_name(void) const override { return "dpx"; }
|
||||
virtual int supports(string_view feature) const override
|
||||
{
|
||||
return (feature == "ioproxy");
|
||||
}
|
||||
virtual bool valid_file(const std::string& filename) const override;
|
||||
virtual bool open(const std::string& name, ImageSpec& newspec) override;
|
||||
virtual bool open(const std::string& name, ImageSpec& newspec,
|
||||
@@ -35,6 +40,11 @@ public:
|
||||
void* data) override;
|
||||
virtual bool read_native_scanlines(int subimage, int miplevel, int ybegin,
|
||||
int yend, int z, void* data) override;
|
||||
virtual bool set_ioproxy(Filesystem::IOProxy* ioproxy) override
|
||||
{
|
||||
m_io = ioproxy;
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
int m_subimage;
|
||||
@@ -43,6 +53,9 @@ private:
|
||||
std::vector<unsigned char> m_userBuf;
|
||||
bool m_rawcolor;
|
||||
std::vector<unsigned char> m_decodebuf; // temporary decode buffer
|
||||
std::unique_ptr<Filesystem::IOProxy> m_io_local;
|
||||
Filesystem::IOProxy* m_io = nullptr;
|
||||
int64_t m_io_offset = 0;
|
||||
|
||||
/// Reset everything to initial state
|
||||
///
|
||||
@@ -50,12 +63,13 @@ private:
|
||||
{
|
||||
m_subimage = -1;
|
||||
if (m_stream) {
|
||||
m_stream->Close();
|
||||
delete m_stream;
|
||||
m_stream = nullptr;
|
||||
m_dpx.SetInStream(nullptr);
|
||||
}
|
||||
m_userBuf.clear();
|
||||
m_rawcolor = false;
|
||||
m_io = nullptr;
|
||||
}
|
||||
|
||||
/// Helper function - retrieve string for libdpx characteristic
|
||||
@@ -103,18 +117,19 @@ OIIO_PLUGIN_EXPORTS_END
|
||||
bool
|
||||
DPXInput::valid_file(const std::string& filename) const
|
||||
{
|
||||
InStream* stream = new InStream();
|
||||
if (!stream)
|
||||
Filesystem::IOProxy* io
|
||||
= new Filesystem::IOFile(filename, Filesystem::IOProxy::Mode::Read);
|
||||
std::unique_ptr<Filesystem::IOProxy> io_uptr(io);
|
||||
if (!io || io->mode() != Filesystem::IOProxy::Mode::Read)
|
||||
return false;
|
||||
bool ok = false;
|
||||
if (stream->Open(filename.c_str())) {
|
||||
dpx::Reader dpx;
|
||||
dpx.SetInStream(stream);
|
||||
ok = dpx.ReadHeader();
|
||||
stream->Close();
|
||||
}
|
||||
delete stream;
|
||||
return ok;
|
||||
|
||||
std::unique_ptr<InStream> stream_uptr(new InStream(io));
|
||||
if (!stream_uptr)
|
||||
return false;
|
||||
|
||||
dpx::Reader dpx;
|
||||
dpx.SetInStream(stream_uptr.get());
|
||||
return dpx.ReadHeader(); // IOFile is automatically closed when destructed
|
||||
}
|
||||
|
||||
|
||||
@@ -122,9 +137,19 @@ DPXInput::valid_file(const std::string& filename) const
|
||||
bool
|
||||
DPXInput::open(const std::string& name, ImageSpec& newspec)
|
||||
{
|
||||
// open the image
|
||||
m_stream = new InStream();
|
||||
if (!m_stream->Open(name.c_str())) {
|
||||
if (!m_io) {
|
||||
// If no proxy was supplied, create a file reader
|
||||
m_io = new Filesystem::IOFile(name, Filesystem::IOProxy::Mode::Read);
|
||||
m_io_local.reset(m_io);
|
||||
}
|
||||
if (!m_io || m_io->mode() != Filesystem::IOProxy::Mode::Read) {
|
||||
errorf("Could not open file \"%s\"", name);
|
||||
return false;
|
||||
}
|
||||
m_io_offset = m_io->tell();
|
||||
|
||||
m_stream = new InStream(m_io);
|
||||
if (!m_stream) {
|
||||
errorf("Could not open file \"%s\"", name);
|
||||
return false;
|
||||
}
|
||||
@@ -154,6 +179,9 @@ DPXInput::open(const std::string& name, ImageSpec& newspec,
|
||||
m_rawcolor = config.get_int_attribute("dpx:RawColor")
|
||||
|| config.get_int_attribute("dpx:RawData") // deprecated
|
||||
|| config.get_int_attribute("oiio:RawColor");
|
||||
auto ioparam = config.find_attribute("oiio:ioproxy", TypeDesc::PTR);
|
||||
if (ioparam)
|
||||
m_io = ioparam->get<Filesystem::IOProxy*>();
|
||||
return open(name, newspec);
|
||||
}
|
||||
|
||||
@@ -371,24 +399,24 @@ DPXInput::seek_subimage(int subimage, int miplevel)
|
||||
// set without checking for bogus attributes
|
||||
#define DPX_SET_ATTRIB_N(x) DPX_SET_ATTRIB(x, subimage)
|
||||
// set with checking for bogus attributes
|
||||
#define DPX_SET_ATTRIB_BYTE(x) \
|
||||
if (m_dpx.header.x() != 0xFF) \
|
||||
#define DPX_SET_ATTRIB_BYTE(x) \
|
||||
if (m_dpx.header.x() != 0xFF) \
|
||||
DPX_SET_ATTRIB(x, )
|
||||
#define DPX_SET_ATTRIB_INT_N(x) \
|
||||
if (m_dpx.header.x(subimage) != 0xFFFFFFFF) \
|
||||
#define DPX_SET_ATTRIB_INT_N(x) \
|
||||
if (m_dpx.header.x(subimage) != 0xFFFFFFFF) \
|
||||
DPX_SET_ATTRIB(x, subimage)
|
||||
#define DPX_SET_ATTRIB_INT(x) \
|
||||
if (m_dpx.header.x() != 0xFFFFFFFF) \
|
||||
#define DPX_SET_ATTRIB_INT(x) \
|
||||
if (m_dpx.header.x() != 0xFFFFFFFF) \
|
||||
DPX_SET_ATTRIB(x, )
|
||||
#define DPX_SET_ATTRIB_FLOAT_N(x) \
|
||||
if (!std::isnan(m_dpx.header.x(subimage))) \
|
||||
#define DPX_SET_ATTRIB_FLOAT_N(x) \
|
||||
if (!std::isnan(m_dpx.header.x(subimage))) \
|
||||
DPX_SET_ATTRIB(x, subimage)
|
||||
#define DPX_SET_ATTRIB_FLOAT(x) \
|
||||
if (!std::isnan(m_dpx.header.x())) \
|
||||
#define DPX_SET_ATTRIB_FLOAT(x) \
|
||||
if (!std::isnan(m_dpx.header.x())) \
|
||||
DPX_SET_ATTRIB(x, )
|
||||
// see comment above Copyright, Software and DocumentName
|
||||
#define DPX_SET_ATTRIB_STR(X, x) \
|
||||
if (m_dpx.header.x[0] && m_dpx.header.x[0] != char(-1)) \
|
||||
#define DPX_SET_ATTRIB_STR(X, x) \
|
||||
if (m_dpx.header.x[0] && m_dpx.header.x[0] != char(-1)) \
|
||||
m_spec.attribute("dpx:" #X, m_dpx.header.x)
|
||||
|
||||
DPX_SET_ATTRIB_INT(EncryptKey);
|
||||
@@ -548,6 +576,18 @@ DPXInput::seek_subimage(int subimage, int miplevel)
|
||||
bool
|
||||
DPXInput::close()
|
||||
{
|
||||
if (m_io_local) {
|
||||
// If we allocated our own ioproxy, close it.
|
||||
m_io_local.reset();
|
||||
m_io = nullptr;
|
||||
}
|
||||
// N.B. If we were passed an ioproxy from the user (m_io != nullptr, but
|
||||
// m_io_local was not set), don't actually close it, it belongs to the
|
||||
// caller. And in the case of an ImageCache file, it's possible that the
|
||||
// IC won't close this ImageInput until after the owner of the IOProxy
|
||||
// destroyed it. So don't mess with it here in close() at all, because
|
||||
// we just can't be sure if it's still alive or not.
|
||||
|
||||
init(); // Reset to initial state
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ public:
|
||||
if (feature == "multiimage" || feature == "alpha"
|
||||
|| feature == "nchannels" || feature == "random_access"
|
||||
|| feature == "rewrite" || feature == "displaywindow"
|
||||
|| feature == "origin")
|
||||
|| feature == "origin" || feature == "ioproxy")
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
@@ -48,9 +48,14 @@ public:
|
||||
virtual bool write_tile(int x, int y, int z, TypeDesc format,
|
||||
const void* data, stride_t xstride,
|
||||
stride_t ystride, stride_t zstride) override;
|
||||
virtual bool set_ioproxy(Filesystem::IOProxy* ioproxy) override
|
||||
{
|
||||
m_io = ioproxy;
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
OutStream* m_stream;
|
||||
OutStream* m_stream = nullptr;
|
||||
dpx::Writer m_dpx;
|
||||
std::vector<unsigned char> m_buf;
|
||||
std::vector<unsigned char> m_scratch;
|
||||
@@ -69,6 +74,8 @@ private:
|
||||
bool m_write_pending; // subimage buffer needs to be written
|
||||
unsigned int m_dither;
|
||||
std::vector<unsigned char> m_tilebuffer;
|
||||
std::unique_ptr<Filesystem::IOProxy> m_io_local;
|
||||
Filesystem::IOProxy* m_io = nullptr;
|
||||
|
||||
// Initialize private members to pre-opened state
|
||||
void init(void)
|
||||
@@ -83,6 +90,8 @@ private:
|
||||
m_subimages_to_write = 0;
|
||||
m_subimage_specs.clear();
|
||||
m_write_pending = false;
|
||||
m_io_local.reset();
|
||||
m_io = nullptr;
|
||||
}
|
||||
|
||||
// Is the output file currently opened?
|
||||
@@ -125,11 +134,7 @@ OIIO_PLUGIN_EXPORTS_END
|
||||
|
||||
|
||||
|
||||
DPXOutput::DPXOutput()
|
||||
: m_stream(NULL)
|
||||
{
|
||||
init();
|
||||
}
|
||||
DPXOutput::DPXOutput() { init(); }
|
||||
|
||||
|
||||
|
||||
@@ -190,13 +195,24 @@ DPXOutput::open(const std::string& name, const ImageSpec& userspec,
|
||||
|
||||
if (is_opened())
|
||||
close(); // Close any already-opened file
|
||||
m_stream = new OutStream();
|
||||
if (!m_stream->Open(name.c_str())) {
|
||||
errorf("Could not open \"%s\"", name);
|
||||
delete m_stream;
|
||||
m_stream = nullptr;
|
||||
|
||||
const ParamValue* param = userspec.find_attribute("oiio:ioproxy",
|
||||
TypeDesc::PTR);
|
||||
if (param)
|
||||
m_io = param->get<Filesystem::IOProxy*>();
|
||||
|
||||
if (!m_io) {
|
||||
// If no proxy was supplied, create a file reader
|
||||
m_io = new Filesystem::IOFile(name, Filesystem::IOProxy::Mode::Write);
|
||||
m_io_local.reset(m_io);
|
||||
}
|
||||
|
||||
if (!m_io || m_io->mode() != Filesystem::IOProxy::Mode::Write) {
|
||||
errorf("Could not open file \"%s\"", name);
|
||||
return false;
|
||||
}
|
||||
|
||||
m_stream = new OutStream(m_io);
|
||||
m_dpx.SetOutStream(m_stream);
|
||||
m_dpx.Start();
|
||||
m_subimage = 0;
|
||||
|
||||
@@ -51,7 +51,7 @@ namespace dpx
|
||||
// is one that approximates the 'true' floating-point scale factor.
|
||||
// 8->16 : 65535.0 / 255.0. 10->16 : 65535.0 / 1023.0.
|
||||
// For performance considerations, we choose to emulate this
|
||||
// floating-poing scaling with pure integer math, using a trick
|
||||
// floating-point scaling with pure integer math, using a trick
|
||||
// where we duplicate portions of the MSB in the LSB.
|
||||
//
|
||||
// For bit depth demotions, simple truncation is used.
|
||||
|
||||
@@ -146,7 +146,7 @@ namespace dpx
|
||||
/*!
|
||||
* \brief returns a char * of the default DPX file extension
|
||||
*
|
||||
* \return .dpx file extenion
|
||||
* \return .dpx file extension
|
||||
*/
|
||||
inline const char *DefaultExtension();
|
||||
|
||||
@@ -400,7 +400,7 @@ namespace dpx
|
||||
*
|
||||
* \param element element number (0-7)
|
||||
* \param data buffer
|
||||
* \param alignment -- defines the imageAlignement to make sure the image is on typically an 8K alignement.
|
||||
* \param alignment -- defines the imageAlignment to make sure the image is on typically an 8K alignment.
|
||||
* \return success true/false
|
||||
*/
|
||||
bool WriteElement(const int element, void *data);
|
||||
|
||||
@@ -293,14 +293,14 @@ namespace dpx {
|
||||
case kCbYCrY: // 4:2:2 -> RGB, requires allocation
|
||||
return pixels * 3 * bytes;
|
||||
|
||||
case kCbYCr: // 4:4:4 -> RGB, can get away with sviweling
|
||||
case kCbYCr: // 4:4:4 -> RGB, can get away with swiveling
|
||||
case kRGB: // redundant
|
||||
return pixels * -3 * bytes;
|
||||
|
||||
case kCbYACrYA: // 4:2:2:4 -> RGBA, requires allocation
|
||||
return pixels * 4 * bytes;
|
||||
|
||||
case kCbYCrA: // 4:4:4:4 -> RGBA, can get away with sviweling
|
||||
case kCbYCrA: // 4:4:4:4 -> RGBA, can get away with swiveling
|
||||
case kRGBA: // redundant
|
||||
case kABGR: // only needs swapping
|
||||
return pixels * -4 * bytes;
|
||||
@@ -592,14 +592,14 @@ namespace dpx {
|
||||
case kCbYCrY: // RGB -> 4:2:2, requires allocation
|
||||
return pixels * 2 * bytes;
|
||||
|
||||
case kCbYCr: // RGB -> 4:4:4, can get away with sviweling
|
||||
case kCbYCr: // RGB -> 4:4:4, can get away with swiveling
|
||||
case kRGB: // redundant
|
||||
return pixels * -3 * bytes;
|
||||
|
||||
case kCbYACrYA: // RGBA -> 4:2:2:4, requires allocation
|
||||
return pixels * 4 * bytes;
|
||||
|
||||
case kCbYCrA: // RGBA -> 4:4:4:4, can get away with sviweling
|
||||
case kCbYCrA: // RGBA -> 4:4:4:4, can get away with swiveling
|
||||
case kRGBA: // redundant
|
||||
case kABGR: // only needs swapping
|
||||
return pixels * -4 * bytes;
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#include <ctime>
|
||||
#include <limits>
|
||||
|
||||
#include <OpenImageIO/sysutil.h>
|
||||
|
||||
#include "DPXHeader.h"
|
||||
#include "EndianSwap.h"
|
||||
@@ -764,32 +765,32 @@ static void EmptyString(char *str, const int len)
|
||||
|
||||
void dpx::GenericHeader::SetCreationTimeDate(const long sec)
|
||||
{
|
||||
struct tm *tm_time;
|
||||
char str[32];
|
||||
|
||||
char str[32];
|
||||
|
||||
#ifdef _WIN32
|
||||
_tzset();
|
||||
#endif
|
||||
|
||||
const time_t t = time_t(sec);
|
||||
tm_time = ::localtime(&t);
|
||||
::strftime(str, 32, "%Y:%m:%d:%H:%M:%S%Z", tm_time);
|
||||
const time_t t = time_t(sec);
|
||||
struct tm localtm;
|
||||
OIIO::Sysutil::get_local_time(&t, &localtm);
|
||||
::strftime(str, 32, "%Y:%m:%d:%H:%M:%S%Z", &localtm);
|
||||
OIIO::Strutil::safe_strcpy(this->creationTimeDate, str, 24);
|
||||
}
|
||||
|
||||
|
||||
void dpx::GenericHeader::SetSourceTimeDate(const long sec)
|
||||
{
|
||||
struct tm *tm_time;
|
||||
char str[32];
|
||||
|
||||
char str[32];
|
||||
|
||||
#ifdef _WIN32
|
||||
_tzset();
|
||||
#endif
|
||||
|
||||
const time_t t = time_t(sec);
|
||||
tm_time = ::localtime(&t);
|
||||
::strftime(str, 32, "%Y:%m:%d:%H:%M:%S%Z", tm_time);
|
||||
const time_t t = time_t(sec);
|
||||
struct tm localtm;
|
||||
OIIO::Sysutil::get_local_time(&t, &localtm);
|
||||
::strftime(str, 32, "%Y:%m:%d:%H:%M:%S%Z", &localtm);
|
||||
OIIO::Strutil::safe_strcpy(this->sourceTimeDate, str, 24);
|
||||
}
|
||||
|
||||
|
||||
@@ -1171,13 +1171,13 @@ namespace dpx
|
||||
|
||||
/*!
|
||||
* \brief Get the shutter angle of the motion picture camera
|
||||
* \return degress of the temporal sampling aperture
|
||||
* \return degrees of the temporal sampling aperture
|
||||
*/
|
||||
inline R32 ShutterAngle() const;
|
||||
|
||||
/*!
|
||||
* \brief Set the shutter angle of the motion picture camera
|
||||
* \param angle degress of the temporal sampling aperture
|
||||
* \param angle degrees of the temporal sampling aperture
|
||||
*/
|
||||
inline void SetShutterAngle(const R32 angle);
|
||||
|
||||
@@ -1262,25 +1262,25 @@ namespace dpx
|
||||
inline void SetFieldNumber(const U8 fn);
|
||||
|
||||
/*!
|
||||
* \brief Get the video sournce
|
||||
* \brief Get the video source
|
||||
* \return signal
|
||||
*/
|
||||
inline VideoSignal Signal() const;
|
||||
|
||||
/*!
|
||||
* \brief Set the video sournce
|
||||
* \brief Set the video source
|
||||
* \param vs signal
|
||||
*/
|
||||
inline void SetSignal(const VideoSignal vs);
|
||||
|
||||
/*!
|
||||
* \brief Get the clock rate at which samples were aquired
|
||||
* \brief Get the clock rate at which samples were acquired
|
||||
* \return rate
|
||||
*/
|
||||
inline R32 HorizontalSampleRate() const;
|
||||
|
||||
/*!
|
||||
* \brief Set the clock rate at which samples were aquired
|
||||
* \brief Set the clock rate at which samples were acquired
|
||||
* \param rate rate
|
||||
*/
|
||||
inline void SetHorizontalSampleRate(const R32 rate);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user