[Oiio-announce] OpenImageIO 1.7 release!
Larry Gritz
lg at larrygritz.com
Sat Oct 1 11:24:03 PDT 2016
OpenImageIO 1.7 is now the official supported release. (No longer beta or release candidate.) Release notes are at the end of this message.
The new tag is Release-1.7.7, the "release" branch has been updated to point there. We promise that there will be no further additions to RB-1.7 that break backwards compatibility of APIs or linkage. We will continue to add bug fixes and low-risk non-API-breaking additions to the top of RB-1.7, with new official release tags approximately monthly.
Release 1.6 is now deprecated. We will still backport bug fixes, but generally only when requested. As time goes on, the threshold for how small and critical the bug fix must be will increase, and eventually no more changes will be made to 1.6.
Meanwhile, the "master" branch is a hotbed of new development, eventually to be 1.8. The software itself is solid, but we make no promises about API or ABI changes that can break compatibility within the master branch.
IMPORTANT NOTE about C++ standard and library compatibility:
* OIIO 1.7 can compile both with C++03 as well as C++11, supports Boost releases as old as 1.42, OpenEXR as old as 1.6. It can be compiled with gcc as old as 4.4 (maybe older), crazy old versions of clang, and MSVS 2012 (or maybe even earlier).
* OIIO 1.8 -- the current master -- will very soon require C++11 as a minimum, remove support for OpenEXR 1.x and Boost versions earlier than 1.50 (maybe 1.55, I haven't decided). It will require a minimum of gcc 4.8.2, clang 3.4, or MSVS 2015.
If you need to keep using older libraries, compilers, or C++ standard, please stick to something on the RB-1.7 branch, because master will soon not work for you. The 1.7 releases will never lose compatibility with those older libraries, and will continue to be actively supported through the majority of 2017.
Release 1.7 (1 Oct 2016) -- compared to 1.6.x
----------------------------------------------
Major new features and improvements:
* New oiiotool commands:
* `-otex` and `-oenv` allow oiiotool to directly output proper texture
maps, and it can now do everything that maketx can do. #1351 (1.7.2)
* `--line` can draw polylines into an image. #1319 (1.7.1)
* `--box` can draw a filled or unfilled box into an image. #1319 (1.7.1)
* `--laplacian` computes the Laplacian. #1332 (1.7.1)
* `--deep_merge` does a full merge/composite of deep images. #1388 (1.7.2)
* `-i` inputs a file. Options `autocc=`, `now=`, `info=` control aspects
of reading that one file. #1389 (1.7.2)
* `--dilate` and `--erode` perform the basic morphological operations
of dilation and erosion. #1486 (1.7.5)
* New ImageBufAlgo functions: render_point(), render_line(), render_box()
#1319 (1.7.1); laplacian() #1332 (1.7.2); copy() #1388 (1.7.2);
deep_merge() #1388,1393 (1.7.2); dilate() and erode() (1.7.5).
* UDIM support for textures: filenames like `"tex_<UDIM>.exr"` will
automatically be resolved to the correct UTIM tile based on the s,t
coordinates. #1426 (1.7.3)
* Behavior change: When reading files without explicit channel names,
single channel images now name their channel "Y" (no longer "A",
which was confusing to algorithms that treat alpha in special ways).
Similarly, 2-channel images name their channels "R" and "G". #1434 (1.7.3)
Public API changes:
* DeepData internals and API overhaul: struct internals hidden, now you
must use the API; DeepData declaration is now in deepdata.h, not in
imageio.h; DD methods now allow insertion and erasure of individual
samples. #1289 (1.7.0) New DeepData methods: split, sort, merge_overlaps,
merge_deep_pixels, occlusion_cull. #1388,1393 (1.7.2)
* imageio.h: Removed items deprecated since 1.4: a version of convert_types()
that took alpha and z channel indices (but never used them). #1291
* fmath.h: Removed safe_sqrtf, safe_acosf, fast_expf, which have been
deprecated since 1.5. (1.7.0) #1291
* Removed ImageBufAlgo::flipflop(), which was deprecated since 1.5 and
is now called rotate180. #1291 (1.7.0)
* Several varieties of ImageCache and TextureSystem getattribute methods
were noticed to not be properly declared 'const'. This was fixed.
#1300 (1.7.0/1.6.9)
* For API calls that are deprecated but not yet removed, we now mark
them with deprecated attributes for compilers that support it,
meaning that you will get compile warnings and explanations when you
use deprecated OIIO API functions. #1313,#1318 (1.7.1)
* ImageBuf::contains_roi() reveals whether an ROI is completely contained
in the data region of the IB. #1310 (1.7.1)
* TypeDesc::is_signed() return true of the TypeDesc returns a type that
can represent negative values. #1320
* Python: improve: reading with request for type UNKNOWN returns native
data in an unsigned char array. Also, requesting HALF returns the half
bits in an unsigned short array (since there is no 'half' type in Python).
#1362 (1.7.2/1.6.11)
* Deprecate ImageCache/TextureSystem clear() methods, which never did
anything useful. #1347 (1.7.3)
* ImageSpec::set_format() clears any per-channel format information. #1446
(1.7.4)
* OIIO::getattribute("library_list", ...) can retrieve a list of all the
dependent libraries used when OIIO was built. #1458 (1.7.5)
* simd::mask4 class has been renamed simd::bool4 (though the old name
is still typedef'ed to work for now). #1484 (1.7.5)
* Python bindings for ImageBuf.reset() now properly understands the
argument names and default values. #1492 (1.7.6)
Fixes, minor enhancements, and performance improvements:
* oiiotool:
* oiiotool --subimage now takes as an argument either the subimage
numeric index, or a subimage name. #1287 (1.7.0)
* oiiotool's image cache was smaller than intended because of typo.
(1.7.0/1.6.9)
* Allow command-line expression metadata names to contain ':'. #1321
(1.7.1/1.6.10)
* --info more clearly prints info about subimage formats. #1320 (1.7.1)
* --ch: when the channels were only renamed, not reordered, the
renaming didn't happen properly. #1326 (1.7.1/1.6.10)
* Improved error message propagation from the underlying IBA functions
and from errors encounered during --stats. #1338 (1.7.2)
* --dumpdata:empty=0 now does something for non-deep files: skips
reporting of pixels where all channels are black. Also fixed errors
for dumpdata of deep, but non-float, files. #1355 (1.7.2/1.6.11)
* '--attrib:type=t name value' lets you explicitly name the top of
the attribute you're seting. This helps for ambiguous cases, and also
lets you create aggregate types (such as 'matrix' or 'int[2]' --
the value can be a comma-separated list in those cases). #1351 (1.7.2)
* --fixnan can now take option "error", meaning that upon finding a
NaN, the program considers it an error (rather than fixing).
#1351 (1.7.2)
* -o now takes optional arguments that control the output of just that
one file, including :datatype=, :bits=, :dither=, :autocc=,
:autocrop=, :autotrim=, :separate=, :contig=. #1351 (1.7.2)
* --resize and --fit sped up by approximately 2x. #1372 (1.7.2)
* --runstats not tracks and reports max memory usage. #1385 (1.7.2)
* New --cache and --autotile options let you set the ImageCache size and
autotile options. #1385 (1.7.2)
* --native results in slightly different behavior: does not force float,
but still uses the ImageCache as backing if the native data type
is one of the types directly supported by IC. #1385 (1.7.2)
* --fixnan now works with deep images. #1397 (1.7.3)
* --stats when used with deep images, if it encounters any nonfinite
values, will print the location of a representative one. #1397 (1.7.3)
* --add, --sub, and --absdiff, when its two image operands have differing
number of channels, now try to do the "correct" thing and have the
result have the larger number of channels, treating any "missing"
channels in either input as if they were 0-valued. #1402 (1.7.3)
* --attrib:type-timecode lets you set timecodes in "human-readable" form:
oiiotool in.exr -attrib:type=timecode TimeCode 11:34:03:00 -o out.exr
#1415 (1.7.3)
* -info -v will print timecodes in human-readable form. #1415 (1.7.3)
* Bug fix: --fullsize didn't work properly when followed by --attrib.
#1418 (1.7.3/1.6.14)
* Easily understandable warnings for common mistakes: no output specified,
an image that's modified but never output, or when -autocc causes
output to be a data format that overrides a previous -d directive.
#1419 (1.7.3)
* --origin, --croptofull, and --trim all do their thing to all subimages,
if the image at the top of the stack has multiple subimages.
#1440 (1.7.3)
* --crop operates on all subimages if either the -a flag was used, or
if the specific optinoal override `--crop:allsubimages=1` is used.
#1440 (1.7.3)
* --trim will trim all subimages to the same region, containing the
union of all nonzero pixels in all subimages. #1440 (1.7.3)
* --help now prints all of the dependent libraries for individual
formats. #1458 (1.7.5)
* Bug fix: make sure to propagate per-channel formats from input
to output. #1491 (1.7.6)
* -o:all=n will output all images currently on the stack, and the
filename argument will be assumed to be a pattern containing a %d,
which will be substituted with the index of the image (beginning with
n). For example, to take a multi-image TIFF and extract all the
subimages separately,
oiiotool multi.tif -sisplit -o:all=1 sub%04d.tif
will output the subimges as sub0001.tif, sub0002.tif, and so on.
#1494 (1.7.6)
* --mosaic MxN would fail mysteriously if the number of images on the
stack was less then M*N. This has been fixed to handle too-few images
gracefully and just leave blank spaces as needed. #1501 (1.7.7)
* ImageBuf:
* ImageBuf::iterator performance is improved -- roughly cutting in half
the overhead of iterating over pixels. #1308 (1.7.1/1.6.10)
* ImageBuf reads from disk have been improved substantially (in some
cases cutting read time in half) in many cases. #1328 (1.7.1)
* ImageBuf::copy_pixels() has been sped up. #1358 (1.7.2)
* ImageBufAlgo:
* The varieties of add(), sub(), mul(), and div() that take an
image operand and a per-channel constant operand have all been
modified to work properly for "deep" images. #1297 (1.7.0/1.6.10)
* mad() is sped up significantly (10x) for the common case of float
images already stored in memory (not cached). #1310 (1.6.1)
* render_point(), render_line(), render_box() can be used to render
points, lines, and boxes into an image. #1319 (1.7.1)
* channels(): when the channels were only renamed, not reordered,
the renaming didn't happen properly. #1326 (1.7.1/1.6.10)
* computePixelStats: Improved numerical accuracy to avoid getting
NaN values from imprecision. #1333 (1.7.2/1.6.11)
* laplacian() computes the laplacian of an image. #1332 (1.7.2)
* fixNonFinite() takes a new option: NONFINITE_ERROR, which will
return an error if nonfinite values are encountered. #1351 (1.7.2)
* convolve() and unsharp_mask() have been sped up by about 35% for
common cases. #1357 (1.7.2)
* IBA::resize sped up by approximately 2x. #1372 (1.7.2)
* IBA::fixNonFinite() now works with deep images. #1397 (1.7.3)
* dilate() and erode() perform basic morphological operations.
#1486 (1.7.5)
* ImageCache / TextureSystem:
* Less unnecessary pausing after read errors when falure_retries == 0.
#1336 (1.7.2/1.6.11)
* Texture: slight improvement in texture sharpness. #1369 (1.7.2/1.6.11)
* New statistics related to redundant tile reads. #1417 (1.7.3)
* TextureSystem option "flip_t", if nonzero, will flip the vertical
direction of all texture lookups. Use this for renderers that adhere
to the convention that the t=0 texture coordinate is the visible
"bottom" of the texture. #1428 (1.7.3) #1462 (1.7.5)
* UDIM support for textures: filenames like `"tex_<UDIM>.exr"` will
automatically be resolved to the correct UTIM tile based on the
s,t coordinates. #1426 (1.7.3)
* Avoid repeated broken texture error messages. #1423 (1.7.3)
* New IC/TS attribute: "max_errors_per_file" limits how many error
messages are printed for each file. #1423 (1.7.3)
* Improved statistics: for the "top 3" stats, print the top 3 that aren't
broken. Also print a count & list of broken/invalid files. #1433
(1.7.3/1.6.15)
* Add ability to retrieve various per-file statistics. #1438 (1.7.3/1.6.15)
* IC will clamp the max_open_files to the maximum allowed by the
system, so you can no longer crash a program by incorrectly
setting this limit too high. #1457 (1.7.5)
* IC/TS statistics now report separately the total size of images
referenced, in terms of in-cache data size, as well as on-disk
size (the latter may be compressed). #1481 (1.7.5)
* maketx:
* maketx -u now remakes the file if command line arguments or OIIO
version changes, even if the files' dates appear to match.
#1281 (1.7.0)
* Remove long-obsolete and non-functional command line options: --new,
--old, --hash. #1351 (1.7.2)
* iinfo:
* More clearly prints info about subimage formats. #1320 (1.7.1)
* Print timecodes in human-readable form. #1415 (1.7.3)
* ImageOutput: fix cases with native data but non-contiguous strides.
#1416 (1.7.3/1.6.15)
* Cineon:
* Improved deduction/setting of color space info. #1466 (1.7.5)
* GIF:
* GIF reader failed to set spec full_width, full_height. #1348
(1.7.2/1.6.11)
* JPEG:
* Fix bad memory access crash when reading specific JPEG files that were
written without their comment field including a null character to
end the string. #1365 (1.7.2/1.6.11)
* Change in behavior writing JPEG files when XResolution & YResolution
are not provided, but a PixelAspectRatio is requested. Previously, we
obeyed the JPEG/JFIF spec exactly, but it turns out that popular apps
including PhotoShop and Nuke use the field differently than the spec
dictates. So now we conform to how these apps work, rather than to
the letter of the spec. #1412 (1.7.3/1.6.15)
* OpenEXR:
* Fix broken multipart output when parts had different pixel data
types. #1306,#1316 (1.7.1/1.6.10)
* Improved error reporting for bad tile reads. #1338 (1.7.2/1.6.11)
* Fix errors reading tiles for mixed-format EXR files. #1352 (1.7.2/1.6.11)
* The global OIIO::attribute("exr_threads") has been modified so that 0
means to use full available hardware, -1 disables the OpenEXR
thread pool and execute in the caller thread. #1381 (1.7.2)
* When writing EXR, double check that there are no repeated channel
names, and if so, rename them so the data is not lost (since the
underlying libIlmImf will silently drop channels with repeated
names). #1435 (1.7.3)
* More robust detected of when OpenEXR is tiled (for weird files).
#1441 (1.7.3/1.6.15) (and a fix in #1448/1.7.4)
* Fixed minor bug with OpenEXR output with correctly setting
PixelAspectRatio based on the "XResolution" and "YResolution"
attributes. #1453 (Fixes #1214) (1.7.4/1.6.16)
* Fix setting "chromaticity" metadata in EXR files. #1487 (1.7.5)
* When writing OpenEXR, accept compression requests with quality numbers
appended to the compression algorithm name, such as "dwaa:200" to mean
dwaa compression with a dwaCompressionLevel set to 200. #1493 (1.7.6)
* PNG:
* Per the PNG spec, name 2-channel images Y,A. #1435 (1.7.3)
* Enforce that alpha premultiplication on output MUST consider alpha
to be the last channel of 2 or 4 channel images, no other cases
(as dictated by the PNG spec). #1435 (1.7.3)
* PNM:
* Fixed byte swapping when reading 16 but PNM files. #1352 (1.7.2/1.6.11)
* RAW:
* Changes to how we instruct libraw to process images when reading:
Now, by default, auto-bright adjustment is off, camera white
balance is on, and maximum threshoding is set to 0. There are
"open with config" overrides for all of these, for anybody who
doesn't like the default. #1490 (1.7.6)
* RLA:
* Fixes for both reading and writing of RLA images that are cropped
(i.e., data window is a subset of display window). #1224 (1.7.0/1.6.10)
* TIFF:
* When outputting a TIFF file, a special attribute "tiff:half", if
set to nonzero, will enable writing of 16-bit float pixel data
(obviously, only if the spec.format is HALF). #1283 (1.7.0)
* TIFF input: erase redundant IPTC:Caption and IPTC:OriginatingProgram
if they are identical to existing ImageDescription and Software
metadata, respectively. (1.7.0/1.6.9)
* Output: "tiff:zipquality" attribute controls time-vs-quality for
ZIP compression (1-9, defualt 6, higher means more compression).
#1295 (1.7.1)
* Fix typo that made TIFF files incorrectly name color space metadata
"oiio::ColorSpace" instead of "oiio:ColorSpace". #1394 (1.7.2)
* More robust handling of non-zero origin of full/display window.
#1414 (1.6.14/1.7.3)
* Video formats:
* The ffmpeg-based reader had a variety of fixes. #1288 (1.7.0)
* Support for reading 10-bit and 12-bit movies. #1430 (1.7.5)
* Improved accuracy of "lanczos3" filter; speed up blackman-harris filter.
#1379 (1.7.2)
* Speed up linear<->sRGB color conversions (as used by any of the IBA color
conversion functions as well as oiiotool --colorconvert and friends),
approximately doubling the speed when no OpenColorIO config is found.
#1383 (1.7.2)
* ImageInput::create() and ImageOutput::create() will now gracefully
handle unexpected exceptions inside an ImageInput or ImageOutput
constructor -- return an error rather than crashing. #1456 (1.7.4/1.6.16)
* Nuke txWriter adds UI to let you choose which type of texture you are
building (ordinary 2D texture, latlong env map, etc). #1488 (1.7.6)
Build/test system improvements:
* Default build is now C++11! #1344 (1.7.2) You can still (for now) build
for C++03 using 'make USE_CPP11=0' or 'cmake -DOIIO_BUID_CPP11=0', but
some time soon we will be C++11 minimum.
* Fix build break against Boost 1.60. #1299,#1300 (1.7.0/1.6.9/1.5.23)
* filesystem_test now much more comprehensively tests the contents of
Filesystem. #1302 (1.7.0)
* fmath_test adds benchmarks for various data conversions. #1305 (1.7.0)
* Travis: add DEBUG builds to the matrix to fix any warnings or failures
that only show up for DEBUG builds. #1309 (1.7.1/1.6.10)
* Fix build issues on some platforms for SHA1.h, by adding proper include
of `<climits>`. #1298,#1311,#1312 (1.7.1/1.6.10)
* Cleanup of include logic in simd.h that fixed build problems for gcc < 4.4.
#1314 (1.7.1/1.6.10)
* Fix build breaks for certain 32 bit platforms. #1315,#1322 (1.7.1/1.6.10)
* imagespeed_test can not specify the data conversion type for reads,
can optionally allow skipping the IB iteration tests, and can set the
IC tile cache size. #1323 (1.7.1)
* Fix build breaks for gcc 6. #1339 (1.7.2/1.6.11) #1436 (1.7.3/1.6.15)
* Fix errors in finding the correct locaiton of pugixml.hpp when using
USE_EXTERNAL_PUGIXML=1. #1339 (1.7.2/1.6.11)
* Rewrite of FindOpenEXR.cmake. Solves many problems and is simpler.
No more FindIlmbase.cmake at all. #1346 (1.7.2/1.6.11)
* 'make CODECOV=1; make CODECOV=1 test' can build and test in a way that
provides a code coverage report. #1356 (1.7.2)
* Fix Filesystem::open() issues with UTF-8 filenames on MinGW.
#1353,#1357 (1.7.2/1.6.11)
* Allow build against a wider range of ffmpeg versions. #1359 (1.7.2)
* Build correctly against FFMPEG 3.0. #1374 (1.7.2)
* If found, libjpeg-turbo is used rather than libjpeg; this gives about a
2x speed improvement for reading & writing JPEG files. #1390 (1.7.2/1.6.13)
* USE_CPP11=... and USE_CPP14=... are the build flags for both the Make
wrapper and the CMake scripts. (Before, it was confusing to have USE_CPP11
for make but OIIO_BUILD_CPP11 for CMake. Now they are one.) #1391 (1.7.2)
* Improved LINKSTATIC=1, now mostly works. #1395 (1.7.3)
* Big CMake refactor, got rid of redundancies. #1395 (1.7.3)
* Remove old embedded Ptex, now must find Ptex externally. Also modified
the build scripts to correctly handle newer versions of Ptex. #1400
(1.7.3/1.6.13)
* Got Appveyor building OIIO. This is a continuous integration service
much like Travis, but it's for Windows. Hopefully this means that it will
be much harder for us to make changes that inadvertently break the build
on Windows. #1399 (1.7.3)
* Make FindOpenEXR.cmake more robust when the version number is embedded
in the library name. #1401 (1.7.3/1.6.15)
* Clear up some inconsistencies in the CMake files and the Makefile wrapper:
the flag to compile with libc++ is now always called USE_LIBCPLUSPLUS,
not sometimes OIIO_BUILD_LIBCPLUSPLUS. #1404 (1.7.3)
* Overhaul OpenCV dependency finding and make it work with OpenCV 3.x.
#1409 (1.7.3/1.6.13)
* Allow custom JPEG_PATH to hint location of JPEG library. #1411
(1.7.3/1.6.13)
* Windows UTF-8 filename safety fixes. #1420 (1.7.3/1.6.14)
* Various Windows compilation & warning fixes. #1443 (1.7.3/1.6.15)
* Now builds correctly against OpenJPEG 2.x, it previously only supported
OpenJPEG 1.x. #1452 (Fixes #957, #1449) (1.7.4/1.6.16)
* Fix Filesystem::searchpath_find on Windows with UTF-8 paths.
#1469 (1.7.51.6.17)
* Improved the way OpenEXR installations are found. #1464 (1.7.5)
Developer goodies / internals:
* thread.h has had all the atomic operations split into a separate atomic.h.
#1443 (1.7.3)
* atomic.h: add atomic and, or, and xor. #1417 (1.7.2/1.6.14);
* parallel_image has been improved in several ways: can choose split
direction; raised minimum chunk size to prevent thread fan-out for
images too small to benefit; uses the calling thread as part of the
pool. #1303 (1.7.0)
* timer.h: DoNotOptimize() and clobber_all_memory() help to disable certain
optimizations that would interfere with micro-benchmarks. #1305 (1.7.0)
* simd.h improvements: select(); round(); float4::store(half*),
int4::store(unsigned short*), int4::store(unsigned char*). #1305 (1.7.0)
Define insert, extract, and ^ (xor), and ~ (bit complement) for mask4,
and add ~ for int4. #1331 (1.7.2); madd, msub, nmadd, nmsub, rint,
andnot #1377 (1.7.2); exp, log #1384 (1.7.2); simd::float3 is like float4,
but only loads and stores 3 components, it's a good Vec3f replacement (but
padded) #1473 (1.7.5); matrix44 4x4 matrix class #1473 (1.7.5);
mask4 renamed to bool4, and addition of float8, int8, bool8 classes
for 8-wide AVX/AVX2 SIMD #1484 (1.7.5).
* fmath.h: convert_types has new special cases that vastly speed up
float <-> uint16, uint8, and half buffer conversions #1305 (1.7.0);
ifloor (1.7.2); SIMD versions of fast_log2, fast_log, fast_exp2,
fast_exp, fast_pow_pos #1384 (1.7.2); fix sign of expm1 for small
arguments #1482 (1.7.5); added fast_log1p #1483 (1.75).
* Fix pesky precision discrepancy in internal convert_type<> that used
slightly different math when converting one value at a time, versus
converting whole arrays. #1350 (1.7.2)
* thread.h: add mutex_pool #1425 (1.7.3/1.6.15)
* compute_test: new unit test can be used to benchmark computation
times. #1310 (1.7.1)
* filesystem.h: Filesystem::file_size() returns file size in bytes;
Filesystem::read_bytes() reads the first n (or all) bytes from a file
into a buffer. #1451 (1.7.4/1.6.16)
* strutil.h: Strutil::extract_from_list_string is more flixible by
allowing the vals list to start empty, in which case it will add as
many values as it finds rather than only replacing existing
values #1319 (1.7.1); Strutil::replace #1422 (1.7.3/1.6.15);
utf_to_unicode now takes a string_view rather than a std::string&
#1450 (1.7.4); add Strutil::base64_encode() #1450 (1.7.4).
* sysutil.h: Sysutil::getenv() safely gets an env variable as a string_view
#1451 (1.7.4/1.6.16); terminal_columns() now has a correct implementation
on Windows #1460 (1.7.5); max_open_files() retrieves the maximum number
of files the process may open simultaneously #1457 (1.7.5).
* platform.h: better distinguishing beteen Apple and Generic clang,
separately set OIIO_CLANG_VERSION and OIIO_APPLE_CLANG_VERSION. Also change
OIIO_GNUC_VERSION to 0 for clang, only nonzero for true gcc. #1380 (1.7.2)
* ImageCache: remove unused shadow matrix fields, save space. #1424 (1.7.3)
* Many documentation files (such as README, CHANGES, LICENSE, CREDITS,
and INSTALL) have been changed from plain text to MarkDown. #1442 (1.7.3)
* Sysutil::Term class makes it easy to use color output on the terminal.
#1479 (1.7.5)
--
Larry Gritz
lg at larrygritz.com
More information about the oiio-announce
mailing list