forked from AcademySoftwareFoundation/OpenImageIO
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCHANGES
1756 lines (1613 loc) · 88.4 KB
/
CHANGES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Changes:
Release 1.3 (in progress -- compared to 1.2.x)
----------------------------------------------
Major new features and improvements:
* Huge overhaul of the Python bindings: TypeDesc, ImageSpec (1.3.2),
ImageInput, ImageOutput (1.3.3), ROI, ImageBuf (1.3.4), ImageBufAlgo
(1.3.6). The Python bindings were pretty rusty, badly tested,
undocumented, and had not kept up with recent changes in the C++ APIs.
That's all fixed now, the Python APIs are finally first-class citizens
(including full functionality, unit tests, and docs), and we intend to
keep it that way.
* The ability for an application to supply custom ImageInput and associate
them with a file extension. Those II's can do anything, including
generate image data procedurally.
* GIF reader
Public API changes:
* Large overhaul of the Python bindings. See the (finally existing!) docs.
* ImageBufAlgo:
* New functions: nonzero_region(); resize() variety that lets you
specify the filter by name; 2-argument (non-in-place) versions of
add, sub, mul, rangecompress, rangeexpand, unpremult, premult, clamp
fixNonFinite; sub() varieties that take float or float* operands.
* Removed several IBA functions that have been deprecated since 1.2.
* Deprecated the single-image in-place versions of add, sub, mul, rangecompress,
rangeexpand, unpremult, premult, clamp fixNonFinite.
* ImageBuf:
* read() and init_spec() are no longer required, somewhat simplifying
application code that uses ImageBuf. All ImageBuf API calls
automatically read the spec and/or pixels from their named file if
they are needed, if it has not already been done. (1.3.4)
* save() is deprecated, and new ImageBuf::write() is now preferred
(naming symmetry). (1.3.4)
* New set_write_format() and IB::set_write_tiles() allow override of
default choices for data format and tile size for subsequent calls
to ImageBuf::write(). (1.3.4)
* ImageCache:
* ImageCache::add_file() lets you seed the ImageCache with a "virtual file"
that will read from a custom ImageInput. This lets you add "procedural
images" to the IC.
* ImageCache::add_tile() lets you add tiles to the ImageCache. The caller
can initialize those tiles with any pixel values it chooses.
* OIIO::declare_imageio_format() exposes a way to give OIIO a custom
ImageInput and/or ImageOutput (via factory functions) and associate them
with particular file extensions. This makes it especially easy for an
app to make a procedural image generator that looks to the entire rest
of OIIO like a regular image file. (1.3.2)
Fixes, minor enhancements, and performance improvements:
* oiiotool improvements:
* --autotrim Shrinks pixel data window upon output to trim black
edges. (1.3.2)
* --siappend Appends subimages of top two images on the stack. (1.2.2)
* --datadump will print all pixel values of an image (debugging tool) (1.3.6)
* --flatten turns a "deep" image into a flat one by depth-compositing within
each pixel (1.3.6).
* Fix memory leak when processing frame range. (1.2.1/1.3.2)
* --help now returns a success error code, not a failure. (1.2.1/1.3.2)
* Fix incorrect help message about --ociolook. (1.2.1/1.3.2)
* Fix typo in "oiio:Colorspace" attribute name that interfered
with correct color space conversion in --colorconvert. (1.2.1)
* Many fixes and improvements to XMP & IPTC metadata handling. (1.2.2)
* Multithread speed improvement when opening files by reducing how
much time ImageInput::create and/or ImageOutput::create hold a
global mutex.
* oiiotool --origin and --fullpixels, when operating on cropped or
overscanned image, could sometimes do the wrong thing. (1.2.2/1.3.3)
* oiiotool --colorconvert did not work properly when the color
transformation was detected to be a no-op. (1.2.2/1.3.3)
* oiiotool --fit did not handle padding or offsets properly. (1.2.2/1.3.3)
* 'oiiotool --pattern checker' was incorrect when nonzero offsets were
used. (1.2.3/1.3.4)
* oiiotool --runstats prints the total time/memory on every iteration
when doing file sequence wildcard iteration. (1.3.4)
* Eliminated a particular situation that might hit an ASSERT. Instead,
bubble up a real error message. (1.3.4)
* oiiotool --resize and --resample fixed for overscan images (1.3.5)
* --ociolook applies OCIO looks. (1.3.6)
* Supports printf-style frame range wildcards ('%04d') in addition to the
'#' style. (1.3.6)
* ImageBufAlgo improvements:
* colorconvert() did not work properly when the color transformation was
detected to be a no-op.
* colorconvert(): added a variety that specifies color spaces by name.
* New ociolook() function applies OCIO "looks." (1.3.6)
* checker() was incorrect when nonzero offsets were used.
* checker() now has default values of 0 for the 'offset' parameters
(and so may be omitted if you want 0 offsets). (1.3.4)
* unsharp_mask() bug when src and dst were different data formats.
(1.2.3/1.3.4)
* Better dealing with cases of IBA functions detecting and issuing
errors when inputs that must be initialized are not. (1.3.4)
* New nonzero_region() returns the shrink-wrapped nonzero pixel data window.
(1.3.2)
* resize() has a new variety that lets you specify the filter by name
(rather than allocating ans passing a Filter2D*).
* resize() and resample() fixed to more robustly handle overscan
images. (1.3.5)
* ImageBuf:
* ImageBuf::write() writes untiled images by default, fixing some
tricky issues when IB's start thinking they're tiled because of
interaction with the ImageCache (which makes everything look tiled).
* ImageBuf::file_format_name() never worked properly, now is fixed (1.3.4)
* Fixed bug that caused incorrect ImageBuf::copy_pixels() when the two
IB's had different data types. (1.3.4/1.2.3)
* Improved iterator's handling of how overscanned pixels interact
with wrap modes. (1.3.6)
* DPX:
* support multi-image (often used for stereo frames).
* Fixed DPX input that didn't recognized offset/cropped images.
(1.2.2/1.3.3, another fix in 1.3.4)
* Fixed DPX output crash with cropped images. (1.2.2/1.3.3)
* OpenEXR: fixed write_scanlines handling of per-channel data types (1.3.6)
* Several OpenEXR 2.0 deep file fixes: only some compression types
supported, write_tiles passed wrong parameters, must suppress some
attribute names. (1.2.3/1.3.6)
* JPEG: fixed that some JPEG files were not being recognized because of
magic number issues.
* TGA: Correctly unassociate alpha if it's from an unasociated file;
also, always write unassociated data because so few Targa readers in
the wild seem to properly handle associated alpha.
* PNG: More correct handling of unassociated alpha.
* TIFF: More correct handling of unassociated alpha.
* PSD: fix handling of associated vs unassociated alpha. (1.2.3)
* ImageCache/TextureSystem: More careful with texture de-duplication --
texture value lookups use de-duplication, but metadata lookups (e.g.,
get_texture_info) uses the metadata from the original file.
* We changed the behavior of range compression/expansion. We swear
the new way is better. This affects ImageBufAlgo::rangecompress and
rangeexpand, oiiotool --rangecompress/--rangeexpand, and maketx --hicomp.
(1.3.3)
* maketx fixed to handle inputs that are a mixture of cropped and
overscanned. (1.3.5)
* Fix segfault if OCIO is set to a non-existant file. (1.3.6)
* Slight performance increase when writing images to disk (1.3.6)
Build/test system improvements:
* Fix broken tests under Windows. (1.3.2)
* Many fixes for compiler warnings on various platforms: fmath_test.cpp,
field3dinput.cpp, sysutil.cpp, argparse.cpp, oiiotool.cpp. (1.2.1/1.3.2)
* Fixes problems on little-endian architecture with texture3d.cpp.
(1.2.1/1.3.2)
* Fix compilation problems on architectures with gcc, but no 'pause'
instruction. (1.2.1/1.3.2)
* Fix build search path for correctly finding libopenjpeg 1.5. (1.2.1)
* Work around bug in older MSVC versions wherein Filesystem::open needed
to explicitly seek to the beginning of a file. (1.2.1/1.3.2)
* Build fixes for FreeBSD. (1.2.1/1.3.2)
* Fix testsuite/oiiotool on Windows -- windows shell doesn't expand
wildcards. (1.2.1/1.3.2)
* Fix warnings for new GCC 4.8 compiler.
* Always search for and use the release HDF5 libraries, not the debugging
ones, even when building debug OIIO (this fixes errors when a system
does not have the debugging HDF5 libraries installed). (1.2.2/1.3.3)
* Extensive unit tests in the testsuite for the Python bindings.
* Fix compiler error on MIPS platform. (1.2.2/1.3.3)
* Add FIELD3D_HOME description to 'make help' (1.2.2/1.3.3)
* Add cmake variables ILMBASE_CUSTOM_INCLUDE_DIR, ILMBASE_CUSTOM_LIB_DIR,
OPENEXR_CUSTOM_INCLUDE_DIR, and OPENEXR_CUSTOM_LIB_DIR to make it
easier to have site-specific hints for these packages' locations. (1.3.4)
* Add BOOST_HOME and OCIO_HOME controls from the top-level Makefile wrapper.
(1.3.4/1.2.3)
* Accommodate new cmake release that slightly changes the HDF5 library
naming. (1.3.5)
* Various fixes to make the code compile properly with libc++ (clang's
rewrite of the C++ standard library). (1.3.6)
* Updated PugiXML (partly to help compilation with libc++) (1.3.6)
Developer goodies:
* Docs improvement: full documentation of ImageBufAlgo. (1.2.1/1.3.2)
* Merge improved "tinyformat" that fixes a bug in some old glibc versions
(1.3.2).
* Now each command line tools explicitly converts to UTF native arguments,
rather than relying on it happening in ArgParse (which no longer does
so). (1.3.2)
* Strutil::contains() and icontains(). (1.2.2/1.3.3)
Release 1.2.2 (1 Oct 2013)
--------------------------
* New features:
* New oiiotool --siappend : append subimages of top two images on stack.
* Utilities: added Strutil::contains() and icontains().
* Fixes:
* Fixes in handling XMP & IPTC metadata.
* oiiotool --origin and --fullpixels did not correctly propagate their
changes to the output images.
* oiiotool --colorconvert (and the underlying ImageBufAlgo::colorconvert)
could crash if given a color conversion recognized as a no-op.
* DPX output could crash when writing crop images.
* DPX input was not recognizing the proper image offset or originalsize.
* oiiotool --fit wasn't padding correctly or modifying offsets properly.
* Build fixes:
* Fix compiler error on MIPS platform.
* Add FIELD3D_HOME description to 'make help'
* Always use the HDF5 release libraries (for Field3D), not the debug ones.
Release 1.2.1 (5 Aug 2013)
---------------------------
* oiiotool: Fix memory leak when processing frame range.
* Docs improvement: full documentation of ImageBufAlgo.
* oiiotool --help now returns a success error code, not a failure.
* oiiotool: fix incorrect help message about --ociolook.
* oiiotool: Fix typo in "oiio:Colorspace" attribute name that interfered
with correct color space conversion in --colorconvert.
* Many fixes for compiler warnings on various platforms: fmath_test.cpp,
field3dinput.cpp, sysutil.cpp, argparse.cpp, oiiotool.cpp.
* Fixes problems on little-endian architecture with texture3d.cpp.
* Fix compilation problems on architectures with gcc, but no 'pause'
instruction.
* Fix build search path for correctly finding libopenjpeg 1.5.
* Work around bug in older MSVC versions wherein Filesystem::open needed
to explicitly seek to the beginning of a file.
* Build fixes for FreeBSD.
* Fix testsuite/oiiotool on Windows -- windows shell doesn't expand wildcards.
Release 1.2 (8 July 2013)
-------------------------
Major new features and improvements:
* New oiiotool commands:
--swap Exchanges the top two items on the image stack.
--fit Resize image to fit into a given resolution (keeping aspect).
--ch Select/cull/reorder/add channels within an image.
--chappend Merge two images by appending their color channels.
--chnames Rename some or all of the color channels in an image.
--zover Depth compositing
--cadd Add constant per-channel values to all pixels
--cmul Multiply an imge by a scalar or per-channel constant.
--fillholes Smoothly interpolate for hole filling.
--resample Similar to --resize, but just uses closest pixel lookup.
--clamp Clamp pixel values
--rangeexpand Expand range for certain HDR processing
--rangecompress Compress range for certain HDR processing
--unpremult Divide colors by alpha (un-premultiply).
--premult Multiply colors by alpha.
--kernel Make a convolution kernel using a filter name.
--convolve Convolve two images.
--blur Blur an image.
--unsharp Sharpen an image using an unsharp mask.
--paste Paste one image on another.
--mosaic Create a rectilinear image mosaic.
--transpose Transpose an image (flip along the diagonal axis)
--chsum Sum all channels in each pixel
--cshift Circular shift an image pixels
--fft --ifft Forward and inverse Fourier transform
--colorcount Counts how many pixels are one of a list of colors.
--rangecheck Counts how many pixels fall outside the given range.
--ociolook Apply OpenColorIO "looks"
* oiiotool can loop over entire numeric frame ranges by specifying
wildcard filenames such as "foo.#.tif" or "bar.1-10#.exr".
* oiiotool --frames and --framepadding give more explicit control over
frame range wildcards.
* Significant performance improvements when reading and writing images
using the ImageBuf::read and ImageCache::get_pixels interfaces, and in
some cases also when using regular ImageInput. This also translates
to improved performance and memory use for oiiotool and maketx.
* At least doubled the performance of maketx for large images when run
on multi-core machines.
* Significant performance improvements when using ImageBuf::Iterator
or ConstIterator to traverse the pixels in an ImageBuf, and the iterators
now support "wrap" modes (black, clamp, periodic, mirror).
* maketx --hicomp does "highlight compensation" by compressing the
HDR value range prior to inter-MIP resizes, then re-expanding the range.
* Field3D writer (it could read f3d files before, but not write them).
* idiff can now compare that are not the same size (treating pixels
beyond the pixel data window is being 0 valued).
* maketx --lightprobe turns a "lightprobe" iamge into a latlong environment
map.
* Significant improvements and fixes to EXIF, IPTC, and XMP metadata
reading and writing.
* Significant thread scalability improvements to TextureSystem and
ImageCache.
* Huge overhaul of functionality, style, and performance of the
entire ImageBufAlgo set of functions (see the "Public API changes"
section below, and the imagebufalgo.h file for details).
Public API changes:
* ImageOutput semantics change: If the spec passed to open() has
spec.format set fo UNKNOWN, then select a default data format for the
output file that is "most likely to be able to be read" and/or "most
typical for files of that format in the wild." Also,
ImageOutput::open() will never fail because a requested data format is
unavailable; if the requested format is not supported, a reasonable
alternate will always be chosen.
* ImageBuf has been changed to a "PIMPL" idiom, wherein all the
internals are no longer exposed in the public API. This allows us to
change ImageBuf internals in the future without breaking API or link
compatibility (and thus giving us more freedom to backport important
improvements to prior releases).
* Overhaul of ImageBufAlgo functions: they all take an ROI parameter;
use the DISPATCH macros to make them work with all pixel data types
where practical (previously, many supported float only); use Iterator
rather than getpixel/setpixel, leading to huge speed improvements;
multithread when operating on enough pixels, leading to huge speed
improvements; work on 3D (volume) images where applicable; always
gracefully handle uninitialized dest image or undefined ROI.
* New ImageBufAlgo functions: channels(), channel_append(), mul(),
paste(), zover(), add() and mul() varieties that that add/multiply a
constant amount to all pixels, fillholes_pp(), resample(), clamp(),
rangecompress(), rangeexpand(), make_kernel(), unsharp_mask(),
transpose(), channel_sum(), circular_shift(), fft(), ifft(),
color_count(), color_range_check().
[look in imagebufalgo.h for documentation.]
* ImageBufAlgo::make_texture() allows you to do the same thing that
maketx does, but from inside an application and without launching a
shell invocation of maketx. Two varieties exist: one that takes a
filename and reads from disk, another that takes an ImageBuf already
in memory.
* ImageBuf Iterator/ConstIterator now take "wrap" mode parameters that
allow out-of-range iterators to be able to retrieve valid data. Supported
wrap modes include black, clamp, periodic, and mirror. This simplifies
a lot of algorithms using IB::Iterator, they can now be written to
rely on wrap behavior rather than being cluttered with checks for
"if (it.exits())" clauses.
* ImageBufAlgo::computePixelHashSHA1 has been refactored to take ROI,
a block size, and thread count, and thus can be parallelized with threads.
The block size means that rather than computing a single SHA-1 for all
the pixels, it computes separate (parallel) SHA-1 for each group of
blocksize scanlines, then returns the SHA-1 of all the individual SHA-1
hashed blocks. This is just as strong a hash as before, thought the value
is different than doing the whole thing at once, but by breaking it into
blocks the computation can be multithreaded.
* ImageBuf::swap() makes it easy to swap two ImageBuf's.
* ImageSpec::get_channelformats is now const (and always should have been).
Fixes, minor enhancements, and performance improvements:
* TextureSystem improvements:
* Make sure "black" wrap wins out over "fill" value when they conflict
(looking up an out-of-range channel beyond the pixel data window).
* "mirror" wrap mode was slightly incorrect and has been fixed.
* oiiotool improvements:
* oiiotool -v breaks down timing by individual function.
* oiiotool has been sped up by forcing read of the whole image up front
for reasonably-sized files (instead of relying on ImageCache).
* oiiotool does not write output images if fatal errors have occurred.
* oiiotool --diff: Better error handling, better error printing, and
now it can compare images with differing data windows or channel
numbers ("missing" channels or pixels are presumed to be 0 for the
purposes of comparing).
* oiiotool --resize (and --fit): properly handle the case of resizing
to the same size as the original image.
* oiiotool -d CHAN=TYPE can set the output for just one channel.
* ImageBufAlgo improvements:
* Internal overhaul of IBA::resize to greatly speed it up.
* Improve IBA::resize to handle the image edge better -- instead of
clamping, just don't consider nonexistant pixels.
* More careful selection of filter when resizing (IBA::resize, oiiotool
--resize and --fit, and maketx).
* Fix IBA::paste() error when the foreground image runs off the end of
the background image.
* Bug fix when computing SHA-1 hash of 0-sized images.
* Image format support improvements:
* Bug fix where some format readers (PNM, SGI, and IFF) would leave the
file handle opened if the ImageInput was destroyed without calling
close() first. Now we guarantee that destroying the II always causes
the file to close().
* DPX: output allocation bug fix; properly set pixel aspect ratio for
DPX write.
* IFF: bug fix for endian swap for IFF file input.
* JPEG2000: fix warnings, make sure event manager transfer object
remains valid.
* OpenEXR: when reading, was botching the ordering of per-channel data
formats.
* SGI write: bug fix for the case of 15 bpp RLE encoding, was
double-swapping bytes.
* Targa: more robust check for presence of alpha channels; bug fix where
R and B channels were reversed for certain kinds of palette images.
* TIFF: Store the orientation flag properly when outputting a TIFF file.
* maketx improvements:
* maketx --chnames allows you to rename the channels when you create a
texture.
* maketx bug fixes: incorrect weighting when resizing MIP levels for
latlong environment map images that could make visible artifacts
on some intermediate MIP levels.
* encode_exif() didn't copy the right number of bytes.
* Python bindings: ImageSpec extra_attribs now properly responds to
iterator calls.
* Fix bug in sRGB -> linear conversion.
* iv: make pixelview display coordinates & color even when outside the
data window.
Build/test system improvements:
* Many fixes to improve builds and eliminate warnings on Windows and MinGW.
* Fix missing InterlockedExchangeAdd64 for Windows XP.
* New make/cmake boags: OIIO_BUILD_TOOLS=0 will exclude building of the
command line tools (just build libraries), OIIO_BUILD_TESTS=0 will
exclude building of unit test binaries.
* Improved matching of testsuite reference images on different platforms.
* Lots of fixes to compiler warnings on newer gcc and clang releases.
* Unit tests for Timer class.
* libOpenImageio/imagespeed_test benchmarks various methods of reading
and writing files and iterating image pixels (to help us know what to
optimize).
* If OpenSSL is available at build time, OIIO will use its SHA-1
implementation instead of our own (theirs is faster). We still fall
back on ours if OpenSSL is not available or when OIIO is built with
USE_OPENSSL=0.
* Allow default the shared library suffix to be overridden with the
CMake variable OVERRIDE_SHARED_LIBRARY_SUFFIX.
* Eliminated all uses of the custom DEBUG symbol, and instead use the
more standard idiom "#ifndef NDEBUG".
* Compatibility fixes for Python3.
* MSVC 2008: Prevent a redefinition error when using boost::shared_ptr.
* Fixes for compatibility with libtiff 4.0.
* Fixes for MSVC debug mode having out-of-bound exceptions.
* Fixes for libjpeg 9.x.
* Compile to treat warnings as errors (you can disable this with
STOP_ON_WARNING=0).
* New filter: "sharp-gaussian".
* Fix various Windows build errors.
* Improvements to the build when finding IlmBase/OpenEXR.
* Various fixes to compile on ARM architecture.
* Fixes to compile on ESA/390 mainframe (!).
* testtex --threadtimes, --trials, --iters, --nodup, --wedge. These
are helpful in using testtext to benchmark the texture system.
* Improvements to make more tests work properly on Windows.
Developer goodies:
* Improved ASSERT and DASSERT macros to not generate warning for certain
debug compiles; key their debug behavior by the absence of the standard
NDEBUG idiom rather than presence of a custom DEBUG symbol; rename the
message variants ASSERT_MSG and DASSERT_MSG.
* Change the default for Sysutil::memory_used to report resident memory
rather than virtual process size.
* Multithread/parallel version of utility function convert_image().
* imagebufalgo.h improvements and expansion of the various DISPATCH_*
macros.
* New Filesystem utilities: parent_path(), get_directory_entries().
* New Strutil utilities: extract_from_list_string
* spinlock tweaks make it faster than TBB's spin locks!
* By default, we no longer build or use TBB (it's considered deprecated,
but in 1.2 can still be turned on with USE_TBB=1).
* In fmath.h, added definitions for safe_inversesqrt, safelog, safe_log2,
safe_log10, safe_logb.
* In typedesc.h, added TypeDesc::tostring() function.
* unordered_map_concurrent.h contains a template for a thread-safe
unordered_map that is very efficient even for large number of threads
simultaneously accessing it.
* Documentation: Finally, a chapter in the PDF docs that fully describes
the ImageBuf class.
Release 1.1.13 (24 Jun 2013)
----------------------------
* Texture: make sure wrap mode "black" wins over "fill" value when they
conflict.
Release 1.1.12 (20 Jun 2013)
----------------------------
* Fix oiiotool '#' wildcard, was broken on Windows.
* Fix an overflow problem that plagued 'maketx' when running on input
larger than 32k x 32k (among other possible failures).
Release 1.1.11 (29 May 2013)
----------------------------
* IFF input: bug in endian swap of 16 bit IFF files.
* oiiotool: fix a minor bug where tiled files were output inappropriately.
(Had been patched in master some time ago.)
* fmath.h additions: safe_inversesqrt, safe_log, safe_log2, safe_log10,
safe_logb. These are versions that clamp their inputs so that they
can't throw exceptions or return Inf or NaN.
* Fix to not incorrectly print ImageCache stats for certain broken files.
Release 1.1.10 (13 Apr 2013)
----------------------------
* IBA::fillholes() and oiiotool --fillholes can smoothly fill in alpha
holes with nearby colors. Great for extrapolating the empty areas of
texture atlas images so that filtered texture lookups pull in a plausible
color at part edges.
* IBA::clamp and oiiotool --clamp clamp pixel values to a scalar or
per-channel min and/or max, or clamp alpha to [0,1].
* IBA::rangecompress()/rangeexpand(), and oiiotool --rangecompress /
--rangeexpand compress the excess >1 values of HDR images to a log
scale (leaving the <= 1 part linear), and re-expand to the usual
linear scale. This is very helpful to reduce ringing artifacts that
can happen when an HDR image is resized with a good filter with negative
lobes (such as lanczos3), by doing a range compression, then the resize,
then range expansion. It's not mathematically correct and loses energy,
but it often makes a much more pleasing result.
* maketx --hicomp does highlight compression -- automatically doing a
range compress before each high-quality resize step, and then a
range expansion and clamp-to-zero (squash negative pixels) after
each resize.
* DPX - when writing DPX files, properly set the pixel aspect ratio.
Release 1.1.9 (2 Apr 2013)
--------------------------
* IBA::resize and oiiotool --resize/--fit: Bug fixes to resize filter
size selection fix artifacts wherein extreme zooms could end up with
black stripes in places where the filters fell entirely between samples.
* oiiotool --fit: fix subtle bugs with aspect ratio preservation for
images with differing data and display windows; and allow "filter=..."
to override the default filter used for fit.
* Resize improvement: fix potential artifacts at the image edges resulting
from odd clamping behavior.
* Even more frame range wildcard flexibility with oiiotool --frames and
--framepadding options.
* oiiotool --resize and --fit (and the underlying IBA::resize()) have been
sped up significantly and are now also multithreaded.
Release 1.1.8 (15 Mar 2013)
---------------------------
* oiiotool --chappend (and ImageBufAlgo::channel_append() underneath) allow
you to take two files and concatenate their color channels.
* oiiotool --chnames allows you to rename some or all of a file's color
channels.
* oiiotool can loop over entire frame ranges by specifying wildcard
filenames such as "foo.#.tif" or "bar.1-10#.exr".
* Cmake: OVERRIDE_SHARED_LIBRARY_SUFFIX allows the shared library suffix
to be overridden (e.g., if you need to force .so names on OSX rather
than the usual default of .dylib).
Release 1.1.7 (21 Feb 2013)
---------------------------
* Back out dangerous change to thread.h that was in 1.1.6, which could
cause performance problems.
* Compile fix for WIN32 in strutil.cpp
* Compile fix for Windows XP - add implementation of InterlockedExchangeAdd64
Release 1.1.6 (11 Feb 2013)
---------------------------
* Fix bug that could generate NaNs or other bad values near the poles of
very blurry environment lookups specifically from OpenEXR latlong env maps.
* Fix bug in oiiotool --crop where it could mis-parse the geometric parameter.
* Fix bug in ImageCache::invalidate() where it did not properly delete the
fingerprint of an invalidated file.
* Cleanup and fixes in the oiiotool command line help messages.
* New function ImageBufAlgo::paste() copies a region from one IB to another.
* oiiotool --fit resizes an image to fit into a given resolution (keeping the
original aspect ratio and padding with black if needed).
* ImageBufAlgo::channels() and "oiiotool --ch" have been extended to allow
new channels (specified to be filled with numeric constants) to also be
named.
* New function ImageBufAlgo::mul() and "oiiotool --cmul" let you multiply
an image by a scalar constant (or per-channel constant).
* Important maketx bug fix: when creating latlong environment maps as
OpenEXR files, it was adding energy near the poles, making low-res
MIP levels too bright near the poles.
* Fix to "oiiotool --text" and "oiiotool --fill" -- both were
incorrectly making the base image black rather than drawing overtop of
the previous image.
* Fix FreeBSD compile when not using TBB.
* New oiiotool --swap exchanges the top two items on the image stack.
Release 1.1.5 (29 Jan 2013)
---------------------------
* Bug fix in ImageBufAlgo::parallel_image utility template -- care when
not enough work chunks to dole out to all the threads (was previously
sending work to threads with nonsensical ROI's, now we just stop when
all the regions have been doled out).
* Additional optional argument to IBA::zover that, when nonzero, will
treat z=0 pixels as infinitely far away, not super close. You can turn
this on from oiiotool with: oiiotool --zover:zeroisinf=1 ...
Release 1.1.4 (27 Jan 2013)
---------------------------
* ImageBufAlgo::make_texture() allows you to do the same thing that
maketx does, but from inside an application and without launching a
shell invocation of maketx.
* oiiotool now recognizes --metamatch and --nometamatch arguments which
cause metadata names matching (or only info NOT matching) the given
regular expression to be printed with --info.
* oiiotool --zover does z (depth) composites (it's like a regular "over",
but uses the z depth at each pixel to determine which of the two images
is the foreground and which is the background).
* ImageBufAlgo::zover() performs z compositing (same as oiiotool --zover).
* ImageBufAlgo::fixNonFinite didn't work properly with 'half' image buffers.
* Performance improvements when reading and writing images.
* Fix error when writing tiled 'float' TIFF images, corrupted output.
(Could easily happen when using 'maketx' to convert float images into
TIFF textures.)
* Eliminate warnings when compiling with Clang 3.2.
* New CMake variable "USE_EXTERNAL_TBB" can optionally be set to force use
of an external TBB library rather than the embedded one.
* Additional testsuite tests (doesn't affect users, but makes bugs easier
to catch).
* Fix build problem with SHA1.cpp on some platforms.
Release 1.1.3 (9 Jan 2013)
---------------------------
* Build fix: incorrectly named OpenEXR 2.x files.
* Bug fix in oiiotool --croptofull on OSX
* Build fixes for MinGW on Windows.
* maketx --fullpixels option ignores any origin or display window in the
source image, pretending the pixel data is the entire 0-1 image range
starting at the origin (useful when the source image is created by an
application that incorrectly writes it out as if it were a crop window).
* maketx no longer will clobber existing ImageDescription metadata
when it adds SHA-1 hash or other info as it creates the texture.
* Many additional Exif and IPTC tags are correctly recognized.
* maketx and oiiotool recognize and take advantage of IPTC:ImageHistory
metadata.
Release 1.1.2 (5 Dec 2012)
--------------------------
* maketx fixes -- was botching creation of textures from source images that
were crop windows (pixel window smaller than display window).
* Minor bug fix to Timer when repeatedly starting and restopping (Apple only).
* Bug fix in ustring:find_last_not_of.
Release 1.1.1 (16 Nov 2012)
---------------------------
* Altered the ImageInput::read_scanlines, read_tiles, read_native_scanlines,
read_native_tiles, read_native_deep_scanlines, read_native_deep_tiles,
and the channel-subset version of ImageSpec::pixel_bytes, so that
instead of specifying channel subsets as (firstchan, nchans), they are
specified as [chbegin, chend), to match how spatial extents are done,
as well as how channel ranges already were specified in ROI and
ImageBuf. We hate changing API meanings, but we really think this is
better and more consistent. Note that the two common uses of channel
subsets were firstchan=0,nchans=nchannels (select all channels) and
firstchan=foo,nchans=1, and we have rigged it so that [chbegin,chend)
returns the same channels in both of these cases (in the latter case,
because we retrieve a minimum of 1 channel), so we believe this is
unlikely to break working code in the vast majority of cases.
* OpenEXR: support reading and writing V2f attributes.
* OIIO::getattribute("extension_list") returns a list of all formats
supported, and all extensions for each format, in the form:
"formatA:ext1,ext2,ext3;formatB:ext4,ext5;..."
* The new ImageCache per-file stats that list numbers of tiles read per
MIPmap level have been reformatted slightly, and now print only for
files that are actually MIP-mapped.
* New ImageCache::get_pixels() variety that can retrieve a subset of
channels.
* Substantial speedup of ImageCache::get_pixels, used to be about 50%
more expensive to call IC::get_pixels compared to a direct call to
ImageInput::read_image; now is only about 15% more expensive to use
the cache.
Release 1.1 (9 Nov 2012)
------------------------
Major new features and improvements:
* Support for reading and writing "deep" images (including OpenEXR 2.0).
* Big ImageCache/TextureSystem improvements:
- Improved accuracy of anisotropic texture filtering, especially when
combined with "blur."
- Improve performance in cases with high numbers of threads using the
TS simultaneously (mostly due to use of reader-writer locks on the
tile cache rather than unique locks).
* New ImageBufAlgo functions:
fromIplImage() : converts/copies an OpenCV image to an ImageBuf.
capture_image() : captures from a camera device (only if OpenCV is found)
over() : Porter/Duff "over" compositing operation
render_text() : render text into an image
histogram() : compute value histogram information for an image
histogram_draw() : compute an image containing a graph of the histogram
of another image
channels() : select, shuffle, truncate, or extend channels of an image.
* New oiiotool commands:
--capture : captures from a camera device (only if OpenCV is found)
--pattern constant : creates a constant-color image
--over : Porter/Duff "over" compositing operation
--text : render text into an image.
--histogram : computes an image containing a graph of the histogram of
the input image.
--fill : fills a region with a solid color
--ch : select, shuffle, truncate, or extend channels
API changes:
* A new static ImageInput::open(filename [,config]) combines the old
create-and-open idiom into a single call, which is also much more
efficient because it won't needlessly open and close the file multiple
times. This is now the preferred method for reading a file, though
the old-style create() and open() still work as always.
* Deep image support: ImageInput adds read_native_deep_scanlines,
read_native_deep_tiles, read_native_deep_image, and ImageOutput adds
write_deep_scanlines, write_deep_tiles, write_deep_image, as well as a
supports("deepdata") query. Also, a 'deep' field has been added to
ImageSpec, and some deep data access functions have been added to
ImageBuf.
* Altered the ImageInput::read_scanlines, read_tiles, read_native_scanlines,
read_native_tiles, read_native_deep_scanlines, read_native_deep_tiles
so that instead of specifying channel subsets as (firstchan, nchans),
they are specified as [chbegin, chend), to match how spatial extents
are done, as well as how channel ranges already were specified in ROI
and ImageBuf. We hate changing API meanings, but we really think this
is better and more consistent. Note that the two common uses of channel
subsets were firstchan=0,nchans=nchannels (select all channels) and
firstchan=foo,nchans=1, and we have rigged it so that [chbegin,chend)
returns the same channels in both of these cases (in the latter case,
because we retrieve a minimum of 1 channel), so we believe this is
unlikely to break working code in the vast majority of cases.
* ImageInput plugins now may supply a valid_file(filename) method which
detects whether a given file is in the right format, less expensively
than doing a full open() and checking for errors. (It's probably the same
cost as before when the file is not the right time, but when it is, it's
less expensive because it can stop as soon as it knows it's the right
type, without needing to do a full header read and ImageSpec setup.)
* New ImageCache::get_pixels() method that can retrieve a subset of
channels.
* Removed various error_message() functions that had been deprecated for
a long time (in favor of newer getmessage() functions).
* Define a namespace alias 'OIIO' that gets you past all the custom
namespacesin a convenient way.
* TextureOpt now contains a 'subimagename' field that allows subimages
to be addressed by name as well as by index (only for multi-image textures,
of course).
* ImageBuf improvements:
- A new constructor allows an ImageBuf to "wrap" an existing buffer
memory owned by the calling application without allocating/copying.
- Renamed the old ImageBuf::copy_pixels -> get_pixels, and it now
works for 3D (volumetric) buffers.
- New ImageBuf::copy(), and eliminated operator= which was confusing.
- New ImageBuf methods: reres(), copy_metadata(), copy_pixels(),
get_pixel_channels().
- ImageBuf::specmod() allows writable access to the ImageSpec (caution!).
- Better error reporting mechanism.
- get_pixels and get_pixel_channels take optional strides.
* ImageBufAlgo changes:
- Many ImageBufAlgo functions now take a 'ROI' that restricts the
operation to a particular range of pixels within the image (usually
defaulting to the whole image), and for some operations a range of
channels.
- zero() and fill() take ROI arguments.
- ImageBufAlgo::CompareResults struct changed the failure and warning
counts to imagesize_t so they can't overflow int for large images.
* OIIO::getattribute("format_list") now can retrieve the comma-separated
list of all known image file formats.
* OIIO::getattribute("extension_list") returns a list of all formats
supported, and all extensions for each format, in the form:
"formatA:ext1,ext2,ext3;formatB:ext4,ext5;..."
Fixes, minor enhancements, and performance improvements:
* ImageCache/TextureSystem:
- Anisotropic texture lookups are more robust when the derivatives are tiny.
- Attribute "deduplicate" controls whether the identical-image
deduplication is enabled (on by default).
- Attribute "substitute_image" lets you force all texture references to a
single image (helpful for debugging).
- Texture files are no longer limited to having tile sizes that are
powers of 2.
- Much faster TIFF texture access (by speeding up switching of MIPmap levels).
- More graceful handling of the inability to free handles or tiles
under extreme conditions. Rather than assert when we can't free
enough to stay within limits, just issue an error and allow the
limits to be exceeded (hopefully only by a little, and temporarily).
- Detailed per-file stats now track the number of tile reads per
MIPmap level.
- Attribute "unassociatedalpha" (when nonzero) requests that
IC images not convert unassociated alpha image to associated alpha.
- Substantial speedup of ImageCache::get_pixels, used to be about 50%
more expensive to call IC::get_pixels compared to a direct call to
ImageInput::read_image; now is only about 15% more expensive to use
the cache.
* iconvert handles the int32 and uint32 cases.
* Bug fix in to_native_rectangle, which could lead to errors in certain
data format conversions.
* iv improvements:
- better behavior after closing the last image of the sequence.
- file load/save dialogs can filter to show just certain image file types.
- remember last open dialog directory
- "About" dialog has a link to the OIIO home page
* Improve ::create to more robustly handle files whose extensions don't
match their actual formats.
* OpenImageIO::geterror() is now thread-specific, so separate threads will
no longer clobber each others' error messages.
* OpenEXR: support for building with OpenEXR 2.x, including use of
multi-part EXR and "deep" data.
* Fix reading bugs in DPX and Cineon.
* DPX: fix endianness problem for 15 bit DPX output.
* PNG: fix handling of gamma for sRGB images.
* oiiotool fixes: print MIP messages correctly (it was only printing for
the first MIP level); make sure stray "oiio:BitsPerSample" in an input
file doesn't mess up the -d flags.
* Field3D fixes: properly catch exceptions thrown by the Field3D open();
conform metadata to Field3D conventions; multi-layer f3d files will
present as a multi-image file with the "oiio:subimagename" giving a
unique name for each layer subimage;
* OpenEXR: suppress format-specific metadata from other formats.
* OpenEXR: support reading and writing V2f attributes.
* Targa: fix several bugs that were preventing certain metadata from being
written properly.
* TIFF: recognize the SAMPLEFORMAT_IEEEFP/bitspersample=16 as an image
composed of "half" pixels; enable PREDICTOR_FLOATINGPOINT to give slightly
better compression of float images.
* Handle UTF-8 paths properly on Windows.
* Removed the obsolete "iprocess" utility.
* Fix allocation and stride bugs when dealing with images having different data
formats per channel, and tiled images with partially filled border tiles.
* Field3D: Bug fix when reading vector f3d files.
* Significant performance improvements of our atomics and spin locks when
compiling with USE_TBB=0.
* Fix quantize() to properly round rather than truncate.
* ImageBufAlgo functions now by convention will save error messages into
the error state of their output ImageBuf parameter.
* Improve I/O error checking -- many file reads/writes did not previously
have their result status checked.
* Fixed missing OpenEXR open() error message.
* Clean up error reporting in iconvert.
* Fixes to handle Windows utf8 filenames properly.
* ImageBufAlgo::compare() gives a sensible error (rather than an assertion)
if the images being compared are not float.
* maketx:
- Better error messages for a variety of things that could go wrong when
reading or writing image files.
- Fixes for bug preventing certain ImageCache efficiencies.
- new option --ignore-unassoc leaves unassociated alpha data as it is
(no auto-conversion to associated alpha) and/or ignores the tags for
an input file that is associated but incorrectly tagged as
unassociated alpha.
- Option --monochrome-detect was buggy for images with alpha.
- Option --constant-color-detect didn't do anything; now it works.
- New option: --compression allows you to override the default compresion.
* oiiotool & info: the --hash command had a bug wherein when applied to
images there were MIP-mapped, would hash the lowest-res MIP level rather
than the highest-res. This could result in two different images, if
they happened to have the same average color, to incorrectly report
the same SHA-1 hash. Note that this did NOT affect non-MIPmapped images,
nor did it affect the SHA-1 hashing that occurred in maketx to allow
the TextureSystem to detect duplicate textures.
Build/test system improvements:
* Various Windows build fixes, including fixes for Windows 7, and
improvements to running the testsuite on Windows.
* Testsuite additions and improvements: png fmath_test
* Compilation fixes on FreeBSD.
* Compilation fixes on GNU Hurd platform.
* Compilation and warning fixes for Clang 3.1.
* Add FIELD3D_HOME build variable to allow explicit path to Field3D
implementation.
* Remove support for Boost < 1.40.
* Improved unit tests for atomics, spin locks, and rw locks.
* Avoid generating iv man pages when USE_QT=0
* New testtex options: --aniso, --stblur
* CMake option 'EXTRA_CPP_DEFINITIONS' lets custom builds inject
site-specific compiler flags.
* Make/cmake option: HIDE_SYMBOLS=1 will try to restrict symbol visibility
so that only symbols intended to be part of the public APIs will be
visible in the library when linked.
* The old DLLPUBLIC and LLEXPORT macros, which could clash with other
packages, have been renamed to OIIO_API and OIIO_EXPORT.
* Greatly reduced output when building with cmake; by default, most
non-error status messages only are printed when VERBOSE=1 compilation
is requested.
Developer goodies:
* Strutil new utilities: iequals, istarts_with, iends_with, to_lower,
to_upper, strip, join.
* Use Chris Foster's 'tinyformat' for type-safe printf-like formatting,
and this now forms the basis of Strutil::format, ustring::format, and
many of the classes' error() methods.
* TypeDesc::equivalent() tests for type equality but allows triples with
different' vector semantics to match.
* In timer.h, a new time_trial() template that makes multiple trial
benchmarks easy.
* Macros for memory and cache alignment (in sysutil.h).
* Extend Filesystem::searchpath_find() to be able to search recursively.
* Strutil::strip() strips whitespace (or other specified character sets) from
the beginning or ending of strings.
* Change threads.h to set USE_TBB=0 if undefined as a compiler flag; this
makes it easier to use threads.h in other applications without worrying
about TBB at all.
* Windows utf8 filename utilities path_to_windows_native and
path_from_windows_native.
Release 1.0.10 (5 Nov 2012)
---------------------------
* ImageCache: more graceful handling of the inability to free handles or
tiles under extreme conditions. Rather than assert when we can't free
enough to stay within limits, just issue an error and allow the limits
to be exceeded (hopefully only by a little, and temporarily).
* ImageCache: Detailed per-file stats now track the number of tile reads
per MIPmap level.
* ImageCache attribute "unassociatedalpha" (when nonzero) requests that
IC images not convert unassociated alpha image to associated alpha.
* maketx option --ignore-unassoc leaves unassociated alpha data as it is
(no auto-conversion to associated alpha) and/or ignores the tags for
an input file that is associated but incorrectly tagged as unassociated
alpha.
* oiiotool & info: the --hash command had a bug wherein when applied to
images there were MIP-mapped, would hash the lowest-res MIP level rather
than the highest-res. This could result in two different images, if
they happened to have the same average color, to incorrectly report
the same SHA-1 hash. Note that this did NOT affect non-MIPmapped images,
nor did it affect the SHA-1 hashing that occurred in maketx to allow
the TextureSystem to detect duplicate textures.
Release 1.0.9 (4 Sep 2012)
----------------------------
* Improve error messages when trying to open an OpenEXR image that doesn't
exist or is not a valid OpenEXR file.
* Make the TextureSystem work properly with MIPmapped images whose tile
size is not a power of 2 (mostly back-ported from master, but with
additional fixes).
Release 1.0.8 (17 July 2012)
----------------------------
* Fix quantization/truncation bug that sometimes left tiny alpha holes in
8 bit images (making some alpha value that should be 255, instead 254).
* TextureSystem: fix fill_channels for monochrome+alpha images to properly
expand to "RRRA."
Release 1.0.7 (8 July 2012)
---------------------------
* Bug fix when reading vector Field3D files.
* Fix input of tiled images with per-channel formats.
* Add testsuite/nonwhole-tiles and testsuite/perchannel.
* Bug fix when reading binary PNM files.
Release 1.0.6 (12 Jun 2012)
---------------------------
* Fix allocation and stride bugs in that could overrun a buffer when
reading tiled images whose resolution was not a whole number of tiles.
* Fix stride bugs when reading scanline images with differing data types
per channel.
* Fixes for FreeBSD compilation.
Release 1.0.5 (3 Jun 2012)
--------------------------
* Various fixes for FreeBSD/kFreeBSD systems.
* Various fixes to compile with Clang 3.1 without warnings.
* Fixed some DPX and Cineon bugs related to channel names.
* Fixed some mangled text in the PDF documentation.
* Developer goodie: TypeDesc::equivalent() tests two TypeDesc's for
equality, but allows 'triples' with differing vector semantics to match.
Release 1.0.4 (2 May 2012)
--------------------------
* DPX fixes for 12 bit DPX and packing methods.
* Cineon fixes: remove buggy 32 and 64 bit output, which wasn't needed;
fix for 10 bit -> 16 bit promotion.
* bmp fix: wasn't setting oiio:BitsPerSample correctly.
* oiiotool fixes: improved argument help and add man page generation;
print data format info correctly for non-byte bit depths; better
inference of output tile size and data format from the inputs (when
not explicitly requested); --resize n% was broken; print data format
info correctly for non-byte bit depths.
* iinfo fixes: make --stats print correctly; print data format info
correctly for non-byte bit depths.
* Fix roundoff error when converting from float buffers to int image files.
* More precise filter normalization in ImageBufAlgo::resize (and therefore
oiiotool --resize).
Release 1.0.3 (16 Apr 2012)
---------------------------
* Fix reading bugs in DPX and Cineon.
* iconvert handles the int32 and uint32 cases.
* Bug fix in to_native_rectangle, which could lead to errors in certain
data format conversions.
* Various Windows build fixes, including fixes for Windows 7.
* Compilation fixes on FreeBSD.
Release 1.0.2 (19 Mar 2012)
----------------------------
* Fixed TARGA reader bug where for 16-bpp, 4-channel images, we weren't
reading the alpha properly.
* Fix ill-formed default output names for maketx (and in the process,
add Filesystem::replace_extension utility).
* Threading performance improvement in the texture system as a result of
wrapping various internal "iequals" calls to pass a static locale
rather than relying on their default behavior that would use a mutex
underneath to access a global locale.
Release 1.0.1 (13 Mar 2012, compared to 1.0.0)
----------------------------------------------
Fixes, minor enhancements, and performance improvements:
* Improvements in anisotropic texture filtering quality.
* oiiotool --hash prints the SHA-1 hash of each input image.
* oiiotool: properly print error message and exit when an input file
cannot be opened.
* Changed the default behavior of idiff and "oiiotool --diff" to print
the pixel difference report only for failures (not for successful
matches), unless in verbose (-v) mode.
Developer goodies:
* dassert.h: New ASSERTMSG and DASSERTMSG allow even more flexible
assertion messages with full printf argument generality.
* Windows compilation fixes.
* Major testsuite overhaul: All tests are copied and run in the
build/ARCH/testsuite directory, no longer leaving any clutter in the
"source" testsuite area. The testing scripts have been cleaned up
and greatly simplified. An individual test can be run using "make
test TEST=name" (also works with regular expressions). The usual
"make test" will exclude tests that are expected to be broken (such
as tests for portions of the system that were not built because their
required libraries were not found), but "make testall" will run all
tests including nominally "broken" ones.
Release 1.0 (25 Feb 2012, compared to 0.10.5)
---------------------------------------------
Major new features and improvements:
* New ImageInput & ImageOutput methods that can efficiently read/write
multiple scanlines or tiles at a time.
* New ImageInput methods that can read a subset of channels from an image.
* WebP format reader/writer.
* PSD (Adobe Photoshop) format reader.
* RLA (Wavefront) format reader/writer.
* Cineon support is re-enabled after various bug fixes.
* New utility: oiiotool. This is still a work in progress, but largely
subsumes the functionality of iprocess, iinfo, iconvert, idiff.