forked from AcademySoftwareFoundation/OpenImageIO
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCHANGES
2801 lines (2615 loc) · 145 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.6 (in progress) -- compared to 1.5.x
----------------------------------------------
Major new features and improvements:
* New oiiotool functionality:
* Expression evaluation/substitution on the oiiotool command line.
Anything enclosed in braces { } in a command line argument will be
substituted by the evaluation of the enclosed expression. Expressions
may be numbers, simple arithmetic (like 'expr+expr'), or retrieving
image metadata from named images or images on the stack.
Please see the PDF documentation, Section 12.1 for details and
examples.
* --absdiff, --absdiffc compute the absolute difference (abs(A-B)) of
two images, or between an image and a constant color. #1029 (1.6.0)
* --abs computes the absolute value of an image. #1029 (1.6.0)
* --div, divc divide one image by another (pixel by pixel), or divides
the pixels of an image by a constant color. #1029 (1.6.0)
* --addc, --subc, --mulc, --powc are the new names for --cadd, --csub,
--cmul, and --cpow. The old ones will continue to work but are
considered depcrected. #1030 (1.6.0)
* --pattern supports new patterns: "fill" makes a solid, vertical or
horizontal gradient, or four-corner interpolated image (just like
the --fill commmand) (1.6.0); "noise" can generate uniform, gaussian,
or salt & pepper noise (1.6.2).
* --fill, in addition to taking optional parameter color=... to give a
solid color for the fill region, now also takes top=...:bottom=... to
make a vertical gradient, left=...:right=... to make a horizontal
gradient, and topleft=...:topright=...:bottomleft=...:bottomright=...
to make a 4-corner gradient. (1.6.0)
* --noise adds noise to the current image: additive uniform or gaussian
noise, or making "salt & pepper" noise. (1.6.2)
* New ImageBufAlgo functions:
* absdiff() computes the absolute difference (abs(A-B)) of two images,
or between an image and a constant color. #1029 (1.6.0)
* abs() computes the absolute value of an image. #1029 (1.6.0)
* div() divides one image by another (pixel by pixel), or divides all
the pixels of an image by a constant color. #1029 (1.6.0)
* fill() has been extended with new varieties that take 2 colors (making
a vertical gradient) and 4 colors (one for each ROI corner, for a
bilinearly interpolated gradient). (1.6.0)
* noise() injects noise into an image -- uniform, gaussian/normal,
or salt & pepper noise. (1.6.2)
Public API changes:
* Clarified in the docs that TextureSystem::get_texture_info and
ImageCache::get_image_info "exists" queries should return true, and
place in *data the value 1 or 0 depending on whether the image exists
and can be read. (1.6.0/1.5.10)
* Removed deprecated header "string_ref.h" (use string_view.h). (1.6.1)
* ImageCache: Added get_perthread_info() and get_image_handle() to return
opaque perthread and file handle pointers, much like TextureSystem
already had, and added handle-based versions of get_image_info(),
get_imagespec(), imagespec(), get_pixels(), and get_tile(), in addition
to the existing name-based versions of those methods. #1057 (1.6.1)
* TextureSystem: added handle-based versions of get_texture_info(),
get_imagespec(), imagespec(), and get_texels(), in addition to the
existing name-based versions of those methods. Note that texture(),
environment(), and texture3d() already had both named-based and
handle-based varieties. #1057 (1.6.1) #1083 (1.6.2)
* Clarified in the docs that TextureSystem::get_texture_info and
ImageCache::get_image_info "exists" queries should return true, and
place in *data the value 1 or 0 depending on whether the image exists
and can be read. #1046 (1.6.0/1.5.10)
* IC/TS: add create_thread_info() and destroy_thread_info() methods that
allow an app to manage the per-thread records needed by the IC.
#1080 (1.6.2)
* Removed deprecated header string_ref.h. (Should use string_view.h)
#1047 (1.6.0)
* New ImageOutput::supports() tags: supports("alpha") should be true for
image formats that support an alpha channel, supports("nchannels") should
be true for output formats that support an arbitrary number of output
channels. (1.6.2/1.5.13)
* ImageSpec::metadata_val() is now static, rather than simply const,
since it doesn't need access to *this at all. #1063 (1.6.1)
* Added a new variety of ImageSpec::find_attribute that takes a temporary
ImageIOParameter as scratch space. The advantage of this call is that it
can retrieve items from the named ImageSpec fields, such as "width",
"full_x", etc. Also, the get_int_attribute, get_float_attribute, and
get_string_attribute can now retrieve these fixed fields as well.
#1063 (1.6.1)
* Python bindings:
* Added previously-M.I.A. ImageSpec::erase_attribute(). #1063 (1.6.1)
* ImageInput and ImageOutput supports() method has been changed to accept
a string_view (rather than a const std::string&), and return an int
(rather than a bool). (1.6.2)
* Add ImageBuf::make_writeable(), which forces IC-backed read-only
ImageBuf to read into locally allocated pixels so they can be
subsequently altered. #1087 (1.6.2)
Fixes, minor enhancements, and performance improvements:
* oiiotool
* Bug fix for frame sequences -- could crash in Windows. #1060 (1.6.1)
* Gracefully handle requests to save an image with more channels than
the output file format can handle. Instead of being a fatal error,
now it's just a warning, and extra channels are dropped. It tries to
to find R, G, B, and A channels, saving them. If those names are
not found, it just saves the first 3 (or 4) channels. #1058 (1.6.1)
* Improve error messages when files can't be read. It is now easier
to to distinguish files that don't exist from those that are an
unknown format from those that are corrupted or have read
errors. #1065 (1.6.1)
* Flag errors properly when -d specifies an unknown data format name.
#1077 (1.6.2/1.5.13)
* oiiotool numeric wildcard improvement: allow more digits to match.
#1082 (1.6.2/1.5.13)
* maketx & TextureSystem:
* Fix broken bicubic texture sampling with non-power-of-two sized
tiles. #1035 (1.6.0/1.5.10)
* maketx: when the source image was a crop (data window != display
window), and the sharpening filters were used, it would
incorrectly issue an "unknown filter name" error. #1059 (1.6.1/1.5.12)
* maketx: Flag errors properly when -d specifies an unknown data
format name. #1077 (1.5.13)
* maketx now writes to a temporary file, then moving it to the final
requested output filename only when the write completed without
error. This prevents situations where maketx crashes or is killed
and leaves behind a file that looks correct but is actually
corrupted or truncated. #1072 (1.6.2/1.5.13)
* OpenEXR:
* Improved handling of density and aspect ratio. #1042 (1.6.0)
* Fix read_deep_tiles() error when not starting at the image origin.
#1040 (1.6.0/1.5.10)
* Fix output of multi-part exr file when some parts are tiled and
others aren't. #1040 (1.6.0/1.5.10)
* write_tile() with AutoStride calculated the wrong default strides
for "edge" tiles when the image width or length was not an integer
multiple of the tile size. Also clarified the PDF and imageio.h
docs in how they explain strides for this case. #1055 (1.6.1/1.5.12)
* JPEG:
* Now properly read/write xdensity and ydensity (what OIIO and TIFF
call "XResolution" and "YResolution" and, therefore,
"PixelAspectRatio". #1042 #1066 (1.6.0, 1.6.1)
* Support JPEG files encoded as CMYK (by converting to RGB upon read)
#1044 (1.6.1)
* TIFF:
* Improved handling of density and aspect ratio. #1042 (1.6.0)
* Improved proper handling of the interplay between "XResolution",
"YResolution", and "PixelAspectRatio". #1042 (1.6.0)
Build/test system improvements:
* Python plugin is now build as a cmake "module" rather than "library",
which fixes some things on OSX. #1043 (1.6.0/1.5.10)
* Various build fixes for Windows. #1052 #1054 (1.6.1)
* New CMake build-time option to specify the default plugin search path.
#1056 (1.6.1/1.5.12)
* Fix build breaks for very old versions of Ilmbase (1.6 and earlier)
that lack a definition of V4f used by our simd.h. #1048 (1.6.1/1.5.11)
* Fix signed/unsigned warning on 32 bit platforms in jpeginput.cpp.
#1049 (1.6.1/1.5.11)
* New CMake build-time option to specify the default plugin search path.
#1056 (1.6.1/1.5.12)
* Fix gcc 5.0 compiler warning in PtexHalf.cpp. (1.6.1/1.5.12)
* Remove dependency of OpenSSL by default. #1086 (1.6.2/1.5.13)
Developer goodies / internals:
* Strutil additions: parse_until, parse_nested (1.6.1)
* Made TypeDesc::equivalent accept comparisons of arrays of unspecified
length with ones of definite length. #1072 (1.6.2/1.5.13)
* Add Filesystem::rename() utility. #1070 (1.6.2/1.5.13)
* New SIMD methods: insert<>, xyz0, vreduce_add, dot, dot3, vdot, vdot3,
AxBxCxDx, blend0not (1.6.2)
* array_view enhancements that let you initialize an array_view<const float>
from a const std::vector<float>&. #1084 (1.6.2/1.5.14)
* hash.h contains several new hashes in namespaces 'OIIO::xxhash' and
'OIIO::farmhash'. Also, Strutil::strhash now uses farmhash rather than
the Jenkins one-at-a-time hash, bringing big speed improvements
(including ustring creation). Beware that the strhash value returned
will be different than they were before. #1090 (1.6.3)
Release 1.5.13 (10 Mar 2015) -- compared to 1.5.12)
----------------------------------------------
* oiiotool: Bug fix for frame sequences -- could crash in Windows. #1060
* New ImageOutput::supports() tags: supports("alpha") should be true for
image formats that support an alpha channel, supports("nchannels") should
be true for output formats that support an arbitrary number of output
channels. #1058
* oiiotool: Gracefully handle requests to save an image with more channels
than the output file format can handle. Instead of being a fatal error,
now it's just a warning, and extra channels are dropped. It tries to
to find R, G, B, and A channels, saving them. If those names are
not found, it just saves the first 3 (or 4) channels. #1058
* Improved handling of "PixelAspectRatio" for JPEG, TIFF, and OpenEXR.
#1042 #1066
* oiiotool: Improve error messages when files can't be read. It is now
easier to to distinguish files that don't exist from those that
are an unknown format from those that are corrupted or have read
errors. #1065
* maketx now writes to a temporary file, then moving it to the final
requested output filename only when the write completed without error.
This prevents situations where maketx crashes or is killed and leaves
behind a file that looks correct but is actually corrupted or
truncated. #1072
* Python: added previously-M.I.A. ImageSpec.erase_attribute(). #1063
* Add Filesystem::rename() utility. #1070
* Made TypeDesc::equivalent accept comparisons of arrays of unspecified
length with ones of definite length. #1072
* oiiotool & maketx have improved error message when unknown data format
names are requested with "-d". #1077
* oiiotool numeric wildcard improvement: allow more digits to match. #1082
* Remove dependency of OpenSSL by default. #1086
Release 1.5.12 (11 Feb 2015) -- compared to 1.5.11)
----------------------------------------------
* Various build fixes for Windows. #1052 #1054
* New CMake build-time option to specify the default plugin search path.
#1056 (1.5.12)
* OpenEXR: fixed write_tile() with AutoStride calculated the wrong
default strides for "edge" tiles when the image width or length was
not an integer multiple of the tile size. Also clarified the PDF and
imageio.h docs in how they explain strides for this case. #1055 (1.5.12)
* maketx: when the source image was a crop (data window != display window),
and the sharpening filters were used, it would incorrectly issue an
"unknown filter name" error. #1059 (1.5.12)
* Fix gcc 5.0 compiler warning in PtexHalf.cpp. (1.5.12)
Release 1.5.11 (28 Jan 2015) -- compared to 1.5.10)
----------------------------------------------
* Fix build breaks for very old versions of Ilmbase (1.6 and earlier)
that lack a definition of V4f used by our simd.h. #1048
* Fix signed/unsigned warning on 32 bit platforms in jpeginput.cpp. #1049
Release 1.5 (26 Jan 2015) -- compared to 1.4.x
----------------------------------------------
Major new features and improvements:
* New oiiotool functionality/commands:
* --rotate90, --rotate180, --rotate270 rotate the image in 90 degree
axially-aligned increments with no filtering. (1.5.2)
* --reorient will perform whatever series of rotations or flips are
necessary to move the pixels to match the "Orientation" metadata that
describes the desired display orientation. (1.5.2)
* --autoorient will automatically do the equivalent of --reorient on
every image as it is read in, if it has a nonstandard orientation.
(This is generally a good idea to use if you are using oiiotool to
combine images that may have different orientations.) (1.5.2)
* --rotate rotates an image by arbitrary angle and center point,
with high-quality filtering. #932 (1.5.3)
* --warp transforms an image using a 3x3 matrix, with high-quality
filtering. #932 (1.5.3)
* --median performs a median filter. (1.5.4)
* New ImageBufAlgo functions:
* rotate90(), rotate180(), rotate270() rotate the image in 90 degree
axially-aligned increments with no filtering. (1.5.2)
* reorient() will perform whatever series of rotations or flips are
necessary to move the pixels to match the "Orientation" metadata that
describes the desired display orientation. (1.5.2)
* rotate() performs rotation with arbitrary angle and center point,
with high-quality filtering. #932 (1.5.3)
* warp() transforms an image by a 3x3 matrix, with high-quality
filtering. #932 (1.5.3)
* median_filter performs a median filter. (1.5.4)
* Significant internal speedups by utilizing SIMD instructions (SSE) in
the TextureSystem (1.5.5 / #948, 1.5.6 / #990). To use this to its
fullest extent, build OIIO with the make/cmake option USE_SIMD=arch,
where arch is sse2, ssse3, sse4.1, sse4.2, depending on what machines
you'll be deploying to. (Note that x86_64 automatically implies at
least sse2.) We're finding that this has approximately doubled the
speed of the math part of texture mapping (it doesn't speed up the disk
I/O, of course). (1.5.5)
* Basic support for many movie files via a plugin using 'ffmpeg'. Works
with avi, mov, qt, mp4, m4a, 3gp, 3g2, mj2, m4v, mpg, and more. Movie
files simply look like multi-image files to OIIO. There isn't really
support for audio yet, and although this lets you retrieve and process
individual frames of a movie file, OIIO is still not meant to be a
video-processing library. Currently, these formats can be read, but
there is no write support (maybe coming soon). #928 #1010 (1.5.5)
* Nuke plugins -- a txReader plugins that will read OIIO texture files,
and a txWriter that will output proper (tiled & mip-mapped) texture files
from Nuke. Contributed by Nathan Rusch / Luma Pictures. #973 (1.5.6)
Public API changes:
* TextureSystem API calls have been modified: the nchannels, dresultds,
dresultdt fields have been removed from TextureOpt and are now passed
explicitly as arguments to texture(), environment(), and texture3d().
Some long-deprecated methods of TextureSystem have been removed, and
also some new API calls have been added that provide multi-point
texturing given a TextureHandle/PerThread rather than a ustring
filename. (1.5.5) (#948)
* New filters available to direct users of filter.{h,cpp} and for
ImageBufAlgo, oiiotoo, and maketx: "cubic", "keys", "simon", "rifman".
(1.5.0/1.4.9) (#874)
* Global attribute "read_chunk" can set the default number of scanlines
read at a time internally by read_image() calls. #925
* The Python ImageBuf class did not expose an equivalent to the C++
ImageBuf::get_pixels. This is exposed now. #931 (1.5.3)
* The Filter API now uses string_view. (1.5.3)
* ImageBuf and ImageBufAlgo now use string_view extensively. (1.5.4)
* ImageInput::supports() and ImageOutput::supports() now accept new tags:
"arbitrary_metadata" reveals if the format allows arbitrarily-named
metadata; "exif" if the format can store camera Exif data; "iptc" if
the format can store IPTC metadata. #1001 (1.5.7)
* Removed ImageBuf and ImageBufAlgo functions that have been deprecated
since OIIO 1.3. #1016 (1.5.8)
* ImageCache::add_file has been extended to allow an ImageSpec pointer
as "configuration", which will be passed along to the underlying
ImageInput::open() when the file is first opened. This allows you to
use the same kind of configuration options/hints that you would with a
raw ImageInput. (1.5.8)
* ImageBuf constructor and reset methods have been extended to allow an
ImageSpec pointer as "configuration", which will be passed along to
the underlying ImageCache and/or ImageInput::open() when the file is
first opened. This allows you to use the same kind of configuration
options/hints that you would with a raw ImageInput. (1.5.8)
* The DeepData helper structure now has methods to set (already allocated)
deep values, as well as to retrieve uint values. (1.5.8)
* ImageBuf methods to get and set deep values and to allocate the DeepData
structure. (1.5.8)
* ImageBuf::interppixel_NDC has been changed to consider the coordinates
relate to full (aka display) window, rather than data window. (1.5.8)
* ImageBuf::interppixel_bicubic and interppixel_bicubic_NDC added to
sample an image with B-spline bicubic interpolation. (1.5.8)
* Clarified in the docs that TextureSystem::get_texture_info and
ImageCache::get_image_info "exists" queries should return true, and
place in *data the value 1 or 0 depending on whether the image exists
and can be read. (1.5.10)
* Clarified in the docs that TextureSystem::get_texture_info and
ImageCache::get_image_info "exists" queries should return true, and
place in *data the value 1 or 0 depending on whether the image exists
and can be read. (1.5.10)
Fixes, minor enhancements, and performance improvements:
* ImageBufAlgo:
* flip(), flop(), flipflop() have been rewritten to work more
sensibly for cropped images. In particular, the transformation now
happens with respect to the display (full) window, rather than
simply flipping or flopping within the data window. (1.5.2)
* channels() now works properly with "deep" images. (1.5.8)
* oiiotool:
* oiiotool --nosoftwareattrib suppresses the altering of Software and
ImageHistory fields upon output. (1.5.1)
* oiiotool --ch now will search for channel names case-insensitively,
if the channel names are not first found with case-sensitive
compares. #897 (1.5.1/1.4.11)
* oiiotool --wildcardoff/--wildcardon can selectively disable and
re-enable the frame sequence numeric wildcards (useful if you have
a filename or other argument that must actually contain '#' or '@'
characters). #892 (1.5.1/1.4.11)
* oiiotool --no-autopremult/--autopremult can disable and re-enable
the automatic premultiplication of color by opacity, in files where
they are stored not-premultiplied and you wish to preserve the
original un-premultiplied values. #906 (1.5.1/1.4.11)
* oiiotool --sansattrib omits "-attrib" and "-sattrib" and their
arguments from the command line that is put in the Software and
ImageHistory metadata (makes it less pointlessly verbose). (1.5.1)
* Now get helpful error messages if input images are corrupt or
incomplete. (1.5.1)
* oiiotool --flip, --flop, --flipflop, and --transpose now have more
sensible behavior for cropped images. (1.5.2)
* oiiotool --orientcw, --orientccw, and --orient180 are the new names
for --rotcw, --rotccw, --rot180. The old names were confusing, and now
it is more clear that these merely adust the Orientation metadata that
suggests viewing orientation, rather than actually rotating the image
data. (1.5.2)
* oiiotool color conversion ops crashed when inputs were files with
MIPmap levels (such as textures). #930 (1.5.3/1.4.13)
* More graceful handling when outputting an image with negative pixel
window origin to a file format that doesn't support this feature.
(1.5.3)
* oiiotool --unsharp_mask:kernel=median will perform a median filter
for the blurring step (rather than a gaussian or other convolution
filter), which tends to sharpen small details but not over-sharpen
long edges as the traditional unsharp mask often does. (1.5.4)
* oiiotool's help message now says explicitly if it was compiled without
any support for OpenColorIO. (1.5.5/1.4.15)
* oiiotool -stats, on deep files, now prints a histogram of the number
of samples per pixel. #992 (1.5.6)
* oiiotool --dump of "deep" files improves output with int32 channels
(1.5.6).
* oiiotool --stats of "deep" files prints a histogram of samples/pixel
(1.5.6).
* oiiotool -subimage has better error detection and reporting for
requests for nonexistant subimages. #1005 (1.5.7)
* oiiotool --ch is a bit more flexible in its channel-shuffling syntax:
you are now able to say newchannel=oldchannel, both shuffling and
renaming channels simultaneously, thus removing a frequent necessity
of a --chnames action following a --ch. (1.5.8)
* oiiotool -d now supports uint32, sint32. #1013 (1.5.8)
* oiiotool -native forces native data format read in cases where going
through the ImageCache would have sacrificed precision or range.
#1014 (1.5.8)
* oiiotool --resize (and similar, such as --fix, --resample, etc.) size
specifiers now allow percentage values that are not the same in each
direction, such as "200%x50%", which would double horizontal resolution
while cutting vertical resolution in half. #1017 (1.5.8)
* oiiotool --ch now works properly with "deep" images. (1.5.8)
* maketx & TextureSystem:
* texture lookups have roughly doubled in performance because of SSE
optimization. (1.5.5 / #948, 1.5.6 / #990).
* maketx: Fix case typo for LatLong env map creation when in 'prman'
mode. #877. (1.5.1/1.4.10)
* maketx --attrib, --sattrib, and --sansattrib now work like
oiiotool; in other words, you can use command line arguments to add
or alter metadata in the process of creating a texture. #901 (1.5.1)
* maketx --sharpen <AMT> adds slight sharpening and emphasis of
higher frequencies when creating MIP-maps. #958 (1.5.5)
* Fix crash when using maketx --checknan (1.5.5)
* maketx now embeds metadata hints ("oiio:ConstantColor") for
constant textures (all pixels are identical). The texture system
notices this hint and will automatically replace texture lookups
(as long as wrap mode is not black) with this constant value, about
10x faster than a real texture lookup would have been. This sounds
silly, but in production sometimes you end up with uniform textures
and this helps. Also, you can retrieve the constant color via
get_texture_info of "constantcolor" and "constantalpha" (though the
retrieval will only succeed if the metadata is present, even if
the texture is actually constant). #1006 (1.5.7)
* maketx now embeds metadata hints ("oiio:AverageColor") containing
the average value of the texture. This can be retrieved with
get_texture_info of "averagecolor" and "averagealpha". #1006 (1.5.7)
* Python:
* Bug fix: the Python binding of ImageInput.read_scanlines did not
properly honor any channel subset specified. (1.5.5/1.4.15)
* All of the expensive functions in the Python bindings now release the
Python GIL (global interpreter lock) as much as possible. This allows
other Python threads to make progress even when OIIO is doing a
lengthy operation such as file I/O or an expensive image processing
operation. (1.5.5)
* Bug fix in ImageInput: could crash if calling ImageInput.read_*
functions without specifying a data format. #998 (1.5.6)
* Bug fix in ImageOutput: could crash if calling ImageInput.write_*
functions if the buffer format did not match the file data format.
#999 (1.5.6)
* OpenEXR:
* Improve the quality of lossy b44 compression by more correctly
using the pLinear value of channels (we were incorrectly using the
flag to indicate linear channels, but it's really for channels
that are perceptually linear). (#867) (1.5.0/1.4.9)
* Fix potential build breaks due to incorrect use of
Imf::isDeepData() which apparently was not intended to be an
externally-visible function. (1.5.0/1.4.9) (#875)
* Fix crashes/exceptions when passing string array attributes
for OpenEXR output. #907 (1.5.1/1.4.11)
* Improved ordering of channel names for OpenEXR files with many
"layers". #904 (1.5.1/1.4.11)
* Fixed issue where a stringvec of 16 items was mishandled as a
matrix. #929 (1.5.3/1.4.13)
* OpenEXR 2.2 support, including the new DWAA/DWAB compression modes.
(1.5.4)
* Fix bug that prevented proper saving/reporting of subimage name
for multi-subimage OpenEXR files. (1.5.5).
* Fix read_deep_tiles() error when not starting at the image origin.
#1040 (1.6.0/1.5.10)
* Fix output of multi-part exr file when some parts are tiled and
others aren't. #1040 (1.6.0/1.5.10)
* JPEG:
* Fix broken recognition of .jfi extension. (#876)
* Read and write ICC profiles as attribute "ICCProfile". (#911)
* Fix seek_subimage for JPEG input -- did not properly return the
spec. (1.5.2/1.4.12)
* Support for reporting and controlling chroma-subsampling value,
via the "jpeg:subsampling" attribute. #978 (1.5.5)
* PNG:
* Read and write ICC profiles as attribute "ICCProfile". (#911)
* TIFF:
* Read and write ICC profiles as attribute "ICCProfile". (#911)
* Graceful handling of output of images with negative data window
origin. (1.5.3)
* Improved precision when auto-premultiplying 8 bit unassociated alpha
images (if the user is reading them into a higher-precision buffer).
#960, #962 (1.5.2)
* Change default compression (if otherwise unspecified) to "zip". (1.5.6)
* Robust to Exif blocks with corrupted GPS data. #1008 (1.5.8/1.4.16)
* Fixes to allow proper output of TIFF files with uint32 or int32 pixels
(1.5.8)
* RAW:
* Fix for portrait-orientation image reads. (#878) (1.5.1/1.4.10)
* Fix bug with "open with config" options. #996 (1.5.6)
* RLA: Fix bug that caused RLA output to not respect requests for 10 bit
output (would force it to 16 in that case). #899 (1.5.1)
* ImageSpec::get_float_attribute() is now better about retrieving values
that were stored as integers, even though you are querying them as
floats. (#862) (1.5.0/1.4.9)
* ImageCache fix for when files are not found, then subsequently the
searchpath is changed. #913 (1.4.12/1.5.2)
* Fixed some alloca calls that did not get the right amount of memory.
(#866) (1.5.0/1.4.9)
* Fix an off-by-one loop in IBA::resize that would not get the wrong
image result, but might trigger debuggers to flag it as touching the
wrong memory. (#868) (1.5.0/1.4.9)
* Better exception safety in Filesystem::scan_for_matching_filenames().
#902 (1.5.1/1.4.11)
* Python: ImageBuf.get_pixels() is now implemented, was previously omitted.
(1.5.2)
* TextureSystem: anisotropic texture lookups are slightly sped up (~7%)
by using some approximate math (but not visibly different) #953. (1.5.5)
* Better exception safety in Filesystem::exists() and similar functions.
#1026 (1.5.8/1.4.16)
Build/test system improvements:
* Fix several compiler warnings and build breakages for a variety of
platforms and compiler versions. (#858, #861) (1.5.0/1.4.8)
* Move around some cpack-related components. (#863) (1.5.0/1.4.9)
* Allow in-source build (not recommended, but necessary for Macports).
(#863) (1.5.0/1.4.9)
* Fixes to docs-building makefiles. (#873) (1.5.0/1.4.9)
* More robust build when OpenEXR and IlmBase have installed their
respective header files in different directories rather than the
expected behavior of being installed together. (#861) (1.5.0/1.4.9)
* Fix build break in DEBUG compiles for ustring internals. (#869) (1.5.0/1.4.9)
* Fix warnings about potentially uninitialized variables. (#871) (1.5.0/1.4.9)
* Make thread.h use more modern gcc intrinsics when gcc >= 4.8, this
allows correct thread.h operations for PPC and MIPS platforms that
were't working before. (#865) (1.5.0/1.4.9)
* Fix Windows build when OIIO_STATIC_BUILD is used. (#872) (1.5.0/1.4.9)
* Fixes to get a clean compile on Windows + MSVC 9. (#859) (1.5.0/1.4.8)
* Fixes to get a clean compile on Windows + MSVC 9. (#872) (1.5.0/1.4.9)
* Make 3.0 compatibility fixes on OSX. (1.5.1/1.4.10)
* Fix segfaults on 32 bit systems with gcc 4.2. #889 (1.5.1/1.4.11)
* Fixes to Filesystem internals to work with older Boost releases older
than 1.45. #891 (1.5.1/1.4.11)
* Fixes to find libraw properly with Visual Studio 2010. #895 (1.5.1/1.4.11)
* Fix bad casts in thread.h that broke some platforms. #896 (1.5.1/1.4.11)
* Several fixes for Windows build, including properly finding OpenEXR
libraries when OpenEXR 2.1 is used. (1.5.1/1.4.11)
* Fixes to fmath.h to work with MSVC 2013 (some long-omitted math ops that
we'd always needed to define for Windows only are finally supported
in MSVC 2013). #912 (1.4.12/1.5.2) #927 (1.4.13/1.5.3)
* Fix for Linux + Boost >= 1.55 combination: need to link with -lrt.
#914 (1.4.12/1.5.2)
* Fix Ptex + static linkage. (1.4.12/1.5.2)
* Rudimentary support for C++11: building with USE_CPP11=1 tries to set
compiler flags (for gcc and clang, anyway) to use C++11 mode, and also
building with USE_LIBCPLUSPLUS=1 tries to link with libc++ if you are
using clang. (1.5.2)
* Fixes for Boost Filesystem 1.46-1.49. (1.5.2/1.4.12)
* testtex new options: --nchannels (forces num channels to look up, rather
than always doing what's in the file), --derivs (force the kind of texture
calls that return derivs of the texture lookups. (1.5.4)
* Make it able to compile against giflib >= 5.1. #975 (1.4.14/1.5.5)
* Add an option to link against static Ilmbase and OpenEXR libraries (1.5.5).
* Add testtex options -interpmode and -mipmode. #988 (1.5.6)
* Build against Python 3 if the make/cmake build flag USE_PYTHON3=1 is used.
(1.5.6)
* grid.tx and checker.tx have been moved from ../oiio/images to
testsuite/common/texture (allow it to be versioned along with any changes
to maketx. (1.5.7)
* Support for freetype 2.5.4. #1012 (1.5.8/1.4.16)
* Python plugin is now build as a cmake "module" rather than "library",
which fixes some things on OSX. #1043 (1.6.0/1.5.10)
Developer goodies / internals:
* New Strutil string comparison functions: starts_with, ends_with.
(1.5.1/1.4.10)
* New Strutil simple parsing functions: skip_whitespace, parse_char,
parse_until_char, parse_prefix, parse_int, parse_float, parse_string,
parse_word, parse_identifier, parse_until. (1.5.1/1.4.10, 1.5.2/1.4.11)
* New Filesystem functions: create_directory, copy, remove, remove_all,
temp_directory_path, unique_path. (1.5.1/1.4.10)
* thread.h: add atomic_exchange() function. #898 (1.5.1/1.4.11)
* Improved error propagation through ImageCache, ImageBuf, and oiiotool.
(1.5.1)
* Moved certain platform-dependent macros from sysutil.h to platform.h
(1.5.4/1.4.16)
* ustring: add comparisons between ustrings versus char* and string_view.
(1.5.4)
* New simd.h exposes float4, int4, and mask4 classes that utilize SSE
instructions for big speedups. (1.5.5 / #948, #954, #955)
* Big reorganization of fmath.h, moved stuff around, organized, added lots
of safe_blah() functions that clamp to valid ranges and fast_blah()
functions that are approximations that may differ slightly several
decimal places in but are much faster than the full precision libm/IEEE
versions. #953, #956 (1.5.5)
* New utility function: premult(), which can premultiply non-alpha, non-z
channels by alpha, for a whole buffer (with strides, any data type).
#962 (1.5.5)
* Timer API now has queries for ticks as well as seconds. (1.5.5)
* platform.h now has macros to mark functions as pure, const, nothrow,
or unused. (1.5.5)
* Filesystem::read_text_file reads a whole text file into a string
efficiently. (1.5.8)
Release 1.4.16 (19 Jan 2015 -- compared to 1.4.15)
--------------------------------------------------
* Fix gcc 4.9 warnings.
* Improved error propagation through ImageCache, ImageBuf, and oiiotool.
* TIFF more robust to Exif blocks with corrupted GPS data. #1008
* Support for freetype 2.5.4. #1012
* Better exception safety in Filesystem::exists() and similar functions. #1026
Release 1.4.15 (24 Nov 2014 -- compared to 1.4.14)
--------------------------------------------------
* OpenEXR: fix botched writing of subimage name.
* 'oiiotool --help' now says explicitly if it was built without OpenColorIO
enabled.
* Python read_scanlines() did not honor the channel subset.
* RAW file reading: the open-with-config variety had the wrong function
signature, and therefore did not properly override the base class, causing
configuration hints to be ignored.
* Bug fix in Python ImageInput: could crash if calling ImageInput.read_*
functions without specifying a data format. #998
* Bug fix in Python ImageOutput: could crash if calling ImageInput.write_*
functions if the buffer format did not match the file data format. #999
* RAW: Fix bug with "open with config" options. #996
Release 1.4.14 (20 Oct 2014 -- compared to 1.4.13)
--------------------------------------------------
* GIF: Fix to make it able to compile against giflib >= 5.1. #975
* JPEG support for reporting and controlling chroma-subsampling value,
via the "jpeg:subsampling" attribute. #978
Release 1.4.13 (12 Sep 2014 -- compared to 1.4.12)
--------------------------------------------------
* Now builds against OpenEXR 2.2, including support for the new
DWAA and DWAB compression modes.
* OpenEXR: fixed issue where a stringvec of 16 items was mishandled as
a matrix.
* Fix fmath.h to move the 'using' statements around properly.
* Fix oiiotool color conversion bug that crashed when the input image was
a file with MIP levels.
* TIFF output now gracefully handles negative origins without hitting an
assertion.
* Developer details: platform macros moved from sysutil.h to platform.h.
(But sysutil.h now includes platform.h, so you shouldn't notice.)
* Developer details: ustring now has comparisons between ustrings versus
char* and string_view.
Release 1.4.12 (31 Jul 2014 -- compared to 1.4.11)
--------------------------------------------------
* ImageCache fix for when files are not found, then subsequently the
searchpath is changed. #913 (1.4.12/1.5.2)
* Fixes to fmath.h to work with MSVC 2013 (some long-omitted math ops that
we'd always needed to define for Windows only are finally supported
in MSVC 2013). #912 (1.4.12/1.5.2)
* Fix for Linux + Boost >= 1.55 combination: need to link with -lrt.
#914 (1.4.12/1.5.2)
* Fix Ptex + static linkage. (1.4.12/1.5.2)
Release 1.4.11 (9 Jul 2014 -- compared to 1.4.10)
-------------------------------------------------
* OpenEXR output fix for crashes/exceptions when passing string array
attributes. #907
* Improved ordering of channel names for OpenEXR files with many "layers".
#904
* oiiotool --ch now will search for channel names case-insensitively,
if the channel names are not first found with case-sensitive compares. #897
* oiiotool --wildcardoff/--wildcardon can selectively disable and re-enable
the frame sequence numeric wildcards (useful if you have a filename or
other argument that must actually contain '#' or '@' characters). #892
* oiiotool --no-autopremult/--autopremult can disable and re-enable
the automatic premultiplication of color by opacity, in files where
they are stored not-premultiplied and you wish to preserve the original
un-premultiplied values. #906
* Fix segfaults on 32 bit systems with gcc 4.2. #889
* Fixes to Filesystem internals to work with older Boost releases < 1.45. #891
* Fixes to find libraw properly with Visual Studio 2010. #895
* Fix bad casts in thread.h that broke some platforms. #896
* Strutil: add another variety of parse_identifier with an expanded
character set.
* thread.h: add atomic_exchange() function. #898
* Several fixes for Windows build, including properly finding OpenEXR
libraries when OpenEXR 2.1 is used.
* Better exception safety in Filesystem::scan_for_matching_filenames(). #902
Release 1.4.10 (20 Jun 2014 -- compared to 1.4.9)
-------------------------------------------------
* Fix for portrait-orientation RAW image reads. (#878)
* maketx: Fix case typo for LatLong env map creation when in 'prman'
mode (#877).
* New Strutil string comparison functions: starts_with, ends_with.
* Make 3.0 compatibility fixes on OSX.
* New Strutil simple parsing functions: skip_whitespace, parse_char,
parse_until_char, parse_prefix, parse_int, parse_float, parse_string,
parse_word, parse_identifier, parse_until.
* New Filesystem functions: create_directory, copy, remove, remove_all,
temp_directory_path, unique_path.
Release 1.4.9 (6 Jun 2014 -- compared to 1.4.8)
-----------------------------------------------
* Allow in-source build (not recommended, but necessary for MacPorts). (#863)
* CPack improvements. (#863)
* Fixes to docs-building makefiles. (#873)
* Make ImageSpec::get_float_attribute correctly convert many integer types.
(#862)
* Fixed some alloca calls that did not get the right amount of memory. (#866)
* OpenEXR: Improve the quality of lossy b44 compression by more correctly
using the pLinear value of channels (we were incorrectly using the flag
to indicate linear channels, but it's really for channels that are
perceptually linear). (#867)
* More robust build when OpenEXR and IlmBase have installed their
respective header files in different directories rather than the
expected behavior of being installed together. (#861)
* Fix an off-by-one loop in IBA::resize that would not get the wrong
image result, but might trigger debuggers to flag it as touching the
wrong memory. (#868)
* Fix build break in DEBUG compiles for ustring internals. (#869)
* Fix warnings about potentially uninitialized variables. (#871)
* Make thread.h use more modern gcc intrinsics when gcc >= 4.8, this
allows correct thread.h operations for PPC and MIPS platforms that
were't working before. (#865)
* Fix Windows build when OIIO_STATIC_BUILD is used. (#872)
* Fixes to get a clean compile on Windows + MSVC 9. (#872)
* New filters available to direct users of filter.{h,cpp} and for
ImageBufAlgo, oiiotoo, and maketx: "cubic", "keys", "simon", "rifman". (#874)
* OpenEXR: Fix potential build breaks due to incorrect use of
Imf::isDeepData() which apparently was not intended to be an
externally-visible function. (#875)
* JPEG: Fix broken recognition of .jfi extension. (#876)
Release 1.4.8 (23 May 2014 -- compared to 1.4.7)
------------------------------------------------
* Fix several compiler warnings and build breakages for a variety of
platforms and compiler versions. No new feature or true bug fixes.
#857, #858, #859
Release 1.4 (19 May 2014) -- compared to 1.3.x
----------------------------------------------
Major new features and improvements:
* The PNM reader now supports "PFM" files, which are the floating point
extension to PNM. (1.4.1)
* Preliminary support for reading a wide variety of digital camera "RAW"
files. (1.4.1)
* New oiiotool commands:
--cpow : raise pixel values to a power (1.4.1)
--label : give a name to the top-of-stack image, can be referred
to later in the command line (1.4.1)
--cut : combine --crop, --origin +0+0, and --fullpixels. (1.4.3)
--pdiff : perceptual diff (#815) (1.4.4)
--polar, --unpolar : complex <-> polar conversion. (#831) (1.4.5)
* oiiotool --resize and --fit, and also maketx when using "good" filters
for downsizing, have been significantly sped up. When downsizing
with large filters, we have seen up to 3x improvement. (#808) (1.4.3)
Public API changes:
* New ImageBufAlgo functions:
- pow() raises pixel values to a power. (1.4.1)
- cut() cuts a region of pixels and moves it to the origin (combines
crop, reset origin, and set full res = data resolution). (1.4.3)
- complex_to_polar() and polar_to_complex() convert from (real,imag)
to (amplitude,phase) and back. (#831) (1.4.5)
* New string_view class (in string_view.h) describes a non-owning
reference to a string. The string_view is now used in many places
throughout OIIO's APIs that used to pass parameters or return values
as char* or std::string&. Read string_view.h for an explanation of why
this is good. (1.4.2, 1.4.3) (N.B. this was called string_ref until 1.4.6,
when it was renamed string_view to conform to C++17 draft nomenclature.)
* New array_view<>, array_view_strided<>, strided_ptr<>, and image_view<>
templates are great utility for passing bounded and strided arrays. (1.4.3)
* Removed deprecated PT_* definitions from typedesc.h.
* Removed the quantization-related fields from ImageSpec. (1.4.3)
* Dither: If ImageOutput::open() is passed an ImageSpec containing the
attribute "oiio:dither" and it is nonzero, then any write_*() calls
that convert a floating point buffer to UINT8 output in the file will
have a hashed dither added to the pixel values prior to quantization
in order to prevent the appearance of visible banding. The specific
nonzero value passed for the attribute will serve as a hash seed so
that the pattern is repeatable (or not). (1.4.3)
Fixes, minor enhancements, and performance improvements:
* Improved oiiotool features:
* --stats on deep files now prints additional info, such as the minimum
and maximum depth and on which pixels they were encountered, as well
as which pixel had the maximum number of depth samples. (1.4.1)
* --resize and --resample allow WIDTHx0 or 0xHEIGHT, where the '0'
value will be interpreted as automatically computing the missing
dimension to preserve the aspect ratio of the source image.
(#797, #807) (1.4.3)
* Fixed possible crash when using --origin with tiled, cached
images. (1.3.12/1.4.2)
* --pdiff does a perceptual diff (like 'idiff -p'). (#815) (1.4.4)
* --dumpdata takes a noptional modifier empty=0 that will cause empty
deep pixels to not produce any output. (#821) (1.4.5)
* --dumpdata correctly prints values of uint32 channels. #989 (1.5.6)
deep pixels to not produce any output. (#821) (1.4.5)
* --polar, --unpolar convert from complex (real,imag) to polar
(amplitude, phase) and vice versa. (#831) (1.4.5)
* View wildcards: similar to frame range wildcards, "%V" is replaced by
new names, "%v" by the first letter of each view. The view list is
{"left","right"} by default, but may be set with the --views argument.
(1.4.5)
* --over and --zover set the resulting display/full window to the union
of those of the inputs; previously it set the display window to that
of the foreground image, which is often a poor default. (1.4.7)
* ImageCache/TextureSystem:
- The multi-point version of environment() was broken. (1.3.9/1.4.1)
- Don't honor the SHA-1 fingerprint found in a file if the "Software"
metadata doesn't indicate that the file was written by maketx or
oiiotool. (1.4.3)
* OpenEXR:
- Multi-part EXR (2.0) didn't write the required "name" attribute for
each part. (1.3.10/1.4.1)
- Fix crashing bug when reading stringvector attributes in the
file. (1.3.11/1.4.2)
- Add .sxr and .mxr as possible filename extensions (1.3.12/1.4.2)
- Smarter channel ordering of input of files with ZBack, RA, GA, or BA
channels (#822) (1.4.5).
- Adhere to the misunderstood limitation that OpenEXR library doesn't
allow random writes to scanline files. (1.4.6)
- More robust with certain malformed metadata. (#841) (1.4.6)
* TIFF: Give a more explicit error message for unsupported tile sizes (1.4.4)
* GIF: Fixes to subimage generation; GIF frames are treated as sequential
windows to be drawn on canvas rather than as independent images; respect
"disposal" method; initial canvas is now transparent and all GIFs are
presented as 4-channel images. (#828) (1.4.5)
* iconvert: properly handle multi-image files for formats that can't
append subimages. (1.3.10/1.4.1)
* iv info window should print native file info, not translated
ImageBuf/ImageCache info. (1.3.10/1.4.1)
* Fix ImageCache::get_pixels() for the chbegin != 0 case, when cache
and output buffer types were not identical. (1.3.10/1.4.1)
* DPX:
- Fixed several places in the where it could have had buffer
overruns when processing certain malformed string fields. (1.4.1)
- Fixed inappropriate use of "dpx_ImageDescriptor" could make invalid
DPX files (especially when reading metadata from one DPX file,
changing the number of channels, then writing out again as a DPX
file). (1.3.10/1.4.1)
- For output, honor the "Software" metadata attribute passed in.
(1.3.11/1.4.2)
- Ignore negative image origin values, which are not allowed by the
DPX spec which states they are unsigned. (#813) (1.4.4)
- Fix improper handling of unsupported pixel data types. (#818) (1.4.5)
- Accept pixel ratio (x/0) to mean 1.0, not NaN. (#834) (1.4.5/1.3.13)
- Pad subimages to 8k boundaries, as suggested by the DPX spec (1.4.7)
- Properly write "userdata" field to DPX files if set. (1.4.7)
* PNG:
- add "png:compressionlevel" and "compression" strategy attributes.
(1.3.12/1.4.2)
- output properly responds to "oiio:UnassociatedAlpha"=1 to indicate
that the buffer is unassociated (not premultiplied) and therefore it
should not automatically unpremultiply it. (1.4.5)
* Make ImageBuf iterators return valid black pixel data for missing
tiles. (1.3.12/1.4.2)
* Make the ImageOutput implementations for all non-tiled file formats
emulate tiles by accepting write_tile() calls and buffering the image
until the close() call, at which point the scanlines will be output.
(1.4.3)
* All ImageBufAlgo functions, and oiiotool, strip any "oiio:SHA-1" hash
values in the metadata in order not to confuse the TextureSystem. (1.4.3)
* IFF: accept write_scanline, even though IFF is tile only. (1.4.3)
* The implementation of the Lanczos filter (and any operations using it)
have been sped up by using an approximate fast_sinpi instead of the
more expensive sin() (1.4.3).
* Speed up iinfo --hash / oiiotool --hash by about 20%. (#809) (1.4.4)
* All format writer plugins: ensure that calling close() twice is safe.
(#810) (1.4.4)
* oiiotool --info and iinfo output have been altered slightly to make them
match and be consistent. Also, oiiotool didn't say that deep files were
deep (1.4.4).
* Fixed bad bugs in IBA::flatten() and oiiotool --flatten. (#819) (1.4.5)
* Fix Parameter neglect of properly copying the m_interp field for assignment
and copy construction. (#829) (1.4.5/1.3.13)
* Fix ImageBufAlgo::circular_shift (and oiiotool --cshift) that did not
wrap correctly for negative shifts. (#832) (1.4.5/1.3.13)
* The "gaussian" flter incorrectly had default width 2 (correct = 3),
and the "mitchell" filter incorrect had default width 3 (correct = 4).
These were bugs/typos, the new way is correct. If you were using those
filters in ways that used the default width value, appearance may change
slightly. (1.4.6)
Build/test system improvements:
* libOpenImageIO_Util is now built that only has the utility functions
in libutil (in addition to the libOpenImageIO, which contains everything).
This is handy for apps that want to use OIIO's utility functions (such
as ustring or Filesystem) but doesn't really need any of the image
stuff. A build flag BUILD_OIIOUTIL_ONLY=1 will cause only the util
library to be built. (1.4.1)
* New build option OIIO_THREAD_ALLOW_DCLP=0 will turn off an
optimization in thread.h, resulting in possibly worse spin lock
performance during heavy thread contention, but will no longer get
false positive errors from Thread Sanitizer. The default is the old
way, with full optimization! (1.4.1)
* More robust detection of OpenEXR library filenames. (1.4.1)
* Always reference OpenEXR and Imath headers as <OpenEXR/foo.h> rather
than <foo.h>. (1.4.1)
* Unit test strutil_test now comprehensively tests Strutil. (1.4.1)
* Fix broken build when EMBEDPLUGINS=0. (1.4.3/1.3.13)
* Fix broken build against OpenEXR 1.x. (1.4.3/1.3.13)
* version.h has been renamed oiioversion.h. For back compatibility, there
is still a version.h, but it merely includes oiioversion.h. (#811) (1.4.4)
* Moved all the public header files from src/include to
src/include/OpenImageIO, so that the src/include area more closely
matches the layout of an OIIO install area. (#817) (1.4.4)
* Fix compilation problems for PowerPC (#825). (1.4.5/1.3.13)
* Fixes for OpenBSD compilation. (#826/#830) (1.4.5/1.3.13)
* Fixes for Linux compilation when building with BUILDSTATIC=1. (1.4.6)
* Fixes for compilation against IlmBase/OpenEXR 2.1. (1.4.6)
* Improve finding of Freetype on some systems (1.4.6).
* Add to top level Makefile the option STOP_ON_WARNING=0 to let it cleanly
compile code that generates compiler warnings, without stopping the build.
(1.4.7)
Developer goodies / internals:
* TBB has been removed completely. (1.4.2)
* Slightly faster timer queries in timer.h for OSX and Windows. (1.4.1)
* Strutil :
- safe_strcpy() -- like strncpy, but copies the terminating 0 char. (1.4.1)
- split() fixes bug when maxsplit is not the default value. (1.3.10/1.4.1)
* ParamValue/ParamValueList :
- ParamValue now allows get/set of the internal 'interp' field. (1.3.9/1.4.1)
- ParamValueList::push_back is not properly const-ified. (1.4.1)
- New PVL::find() lets you search on the PVL. (1.4.6)
* fmath.h :
- New fast_sin, fast_cos, fast_sinpi, fast_cospi are much faster
polynomial approximations (with max absolute error of ~0.001). (1.4.3)
- round_to_multiple_of_pow2 - a faster version of the existing
round_to_multiple(), but only works when the multiple is known to be
a power of 2. (1.4.6)
* TypeDesc now has operator<, which makes it easier to use STL data structures
and algorithms that expect an ordering, using TypeDesc as a key. (1.4.6)
* thread.h
- Slight thread.h portability tweaks. (1.4.1)
- spin_rw_lock now has more standard lock()/unlock() as synonym for
for exclusive/write lock, and lock_shared()/unlock_shared() as
synonym for "read" locks. (1.4.6)
* ustring :
- new ustringLess and ustringHashIsLess functors make it easier to use
ustring as keys in STL data structures and algorithms that require
an ordering function. (1.4.6)
- improve thread performance significantly by using an
unordered_map_concurrent internally for the ustring table. (1.4.6)
* unordered_map_concurrent.h :
- Allow umc template to specify a different underlying map for the
bins. (1.4.6)
- Add retrieve() method that's slightly faster than find() when you just
need a value, not an iterator. (1.4.6)
- Align bins to cache lines for improved thread performance. (1.4.6)
* ImageBuf iterators have a new rerange() method that resets the iteration
range, without changing images or constructing a new iterator. (1.4.6)
Release 1.3.14 (19 May 2014 -- compared to 1.3.13)
--------------------------------------------------
* OpenEXR output: More robust with certain malformed metadata. (#841) (1.4.6)
* Rename the string_ref class to string_view. (This is unused in OIIO, it
is for compatibility with OSL.)
* Build fixes on Linux when using BUILDSTATIC=1.
* Add round_to_multiple_of_pow2 to fmath.h
* Add STOP_ON_WARNING option to the top level Makeile wrapper.
* Add documentation on the Python binding for IBA::cut.
* oiiotool --over and --zover now set the output image's display window to
the union of the inputs' display window, rather than to the foreground.
Release 1.3.13 (2 Apr 2014 -- compared to 1.3.12)
-------------------------------------------------
* Bug fix to string_ref::c_str().
* Make ImageBuf iterators return valid black pixel data for missing tiles.
* Fix broken build when EMBEDPLUGINS=0.
* Fix broken build when building against OpenEXR 1.x.
* Fix bad bugs in IBA::flatten() and oiiotool --flatten. (#819)
* Fix DPX handling of unsupported pixel types. (#818)
* Fix compilation problems for PowerPC.
* Fix Parameter neglect of proerly copying the m_interp field for assignment
and copy construction. (#829)
* Fixes for OpenBSD compilation. (#826/#830)
* DPX: accept pixel ratio (x/0) to mean 1.0, not NaN. (#834)
* Fix ImageBufAlgo::circular_shift (and oiiotool --cshift) that did not
wrap correctly for negative shifts. (#832)
Release 1.3.12 (25 Jan 2014 -- compared to 1.3.11)
--------------------------------------------------
* Add .sxr and .mxr as possible filename extensions for OpenEXR.
* PNG: add "png:compressionlevel" and "compression" strategy attributes.
* Fix recent build break where OIIO would no longer compile properly
against OpenEXR <= 1.6.
* oiiotool --origin could crash with certain large ImageCache-backed
images.
Release 1.3.11 (8 Jan 2014 -- compared to 1.3.10)
-------------------------------------------------
* DPX output: honor the "Software" metadata attribute passed in.
* OpenEXR: fix crashing bug when reading stringvector attributes in the
file.
* Fix build breaks when building against OpenEXR 1.x.
* Fix warnings with Boost Python + gcc 4.8.
Release 1.3.10 (2 Jan 2014 -- compared to 1.3.9)
------------------------------------------------
* OpenEXR fix: multi-part EXR (2.0) didn't write the required "name"
attribute for each part.
* iconvert: properly handle multi-image files for formats that can't
append subimages.
* iv info window should print native file info, not translated
ImageBuf/ImageCache info.
* Improved strutil_test now much more comprehensively unit tests
Strutil.
* Strutil::split() fixes bug when maxsplit is not the default value.
* Fix ImageCache::get_pixels() for the chbegin != 0 case, when cache
and output buffer types were not identical.
* DPX bug fix -- inappropriate use of "dpx_ImageDescriptor" could make
invalid DPX files (especially when reading metadata from one DPX
file, changing the number of channels, then writing out again as a
DPX file).
Release 1.3 (2 Dec 2013 -- 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