From 372bb8eca379013cc43e2f39b395dcbf4f90e5b7 Mon Sep 17 00:00:00 2001 From: Larry Gritz Date: Sat, 10 Feb 2024 08:30:01 -0800 Subject: [PATCH] testing/api: Add test for filter values and 'filter_list' query (#4140) Add testsuite/filters that verifies that the filter shapes are correct and don't change if we make future changes to the filter code. Along the way, add a new global getattribute query 'filter_list', that returns a semicolon-separated list of all the 2D filters it knows about. --------- Signed-off-by: Larry Gritz --- src/cmake/testing.cmake | 1 + src/include/OpenImageIO/imageio.h | 5 ++++ src/libOpenImageIO/imageio.cpp | 8 +++++ src/oiiotool/oiiotool.cpp | 7 ++--- testsuite/filters/ref/blackman-harris.exr | Bin 0 -> 892 bytes testsuite/filters/ref/box.exr | Bin 0 -> 538 bytes testsuite/filters/ref/bspline.exr | Bin 0 -> 981 bytes testsuite/filters/ref/catmull-rom.exr | Bin 0 -> 1089 bytes testsuite/filters/ref/cubic.exr | Bin 0 -> 679 bytes testsuite/filters/ref/disk.exr | Bin 0 -> 543 bytes testsuite/filters/ref/gaussian.exr | Bin 0 -> 892 bytes testsuite/filters/ref/keys.exr | Bin 0 -> 1091 bytes testsuite/filters/ref/lanczos3.exr | Bin 0 -> 1935 bytes testsuite/filters/ref/mitchell.exr | Bin 0 -> 1085 bytes testsuite/filters/ref/nuke-lanczos6.exr | Bin 0 -> 1935 bytes testsuite/filters/ref/out.txt | 34 ++++++++++++++++++++++ testsuite/filters/ref/radial-lanczos3.exr | Bin 0 -> 1859 bytes testsuite/filters/ref/rifman.exr | Bin 0 -> 1068 bytes testsuite/filters/ref/sharp-gaussian.exr | Bin 0 -> 679 bytes testsuite/filters/ref/simon.exr | Bin 0 -> 1067 bytes testsuite/filters/ref/sinc.exr | Bin 0 -> 1256 bytes testsuite/filters/ref/triangle.exr | Bin 0 -> 640 bytes testsuite/filters/run.py | 28 ++++++++++++++++++ 23 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 testsuite/filters/ref/blackman-harris.exr create mode 100644 testsuite/filters/ref/box.exr create mode 100644 testsuite/filters/ref/bspline.exr create mode 100644 testsuite/filters/ref/catmull-rom.exr create mode 100644 testsuite/filters/ref/cubic.exr create mode 100644 testsuite/filters/ref/disk.exr create mode 100644 testsuite/filters/ref/gaussian.exr create mode 100644 testsuite/filters/ref/keys.exr create mode 100644 testsuite/filters/ref/lanczos3.exr create mode 100644 testsuite/filters/ref/mitchell.exr create mode 100644 testsuite/filters/ref/nuke-lanczos6.exr create mode 100644 testsuite/filters/ref/out.txt create mode 100644 testsuite/filters/ref/radial-lanczos3.exr create mode 100644 testsuite/filters/ref/rifman.exr create mode 100644 testsuite/filters/ref/sharp-gaussian.exr create mode 100644 testsuite/filters/ref/simon.exr create mode 100644 testsuite/filters/ref/sinc.exr create mode 100644 testsuite/filters/ref/triangle.exr create mode 100755 testsuite/filters/run.py diff --git a/src/cmake/testing.cmake b/src/cmake/testing.cmake index 64e83a0bf7..52f3a9d8f8 100644 --- a/src/cmake/testing.cmake +++ b/src/cmake/testing.cmake @@ -221,6 +221,7 @@ macro (oiio_add_all_tests) python-roi python-texturesys python-typedesc + filters ) # These Python tests also need access to oiio-images oiio_add_tests ( diff --git a/src/include/OpenImageIO/imageio.h b/src/include/OpenImageIO/imageio.h index c0f885821e..ae3f8b48eb 100644 --- a/src/include/OpenImageIO/imageio.h +++ b/src/include/OpenImageIO/imageio.h @@ -3079,6 +3079,11 @@ inline bool attribute (string_view name, string_view val) { /// full paths), and all the directories that OpenImageIO will search for /// fonts. (Added in OpenImageIO 2.5) /// +/// - `string filter_list` +/// +/// A semicolon-separated list of all built-in 2D filters. (Added in +/// OpenImageIO 2.5.9) +/// /// - int64_t IB_local_mem_current /// - int64_t IB_local_mem_peak /// diff --git a/src/libOpenImageIO/imageio.cpp b/src/libOpenImageIO/imageio.cpp index 90fe2f0e0c..6dc836b378 100644 --- a/src/libOpenImageIO/imageio.cpp +++ b/src/libOpenImageIO/imageio.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -539,6 +540,13 @@ getattribute(string_view name, TypeDesc type, void* val) *(ustring*)val = ustring(Strutil::join(font_list(), ";")); return true; } + if (name == "filter_list" && type == TypeString) { + std::vector filternames; + for (int i = 0, e = Filter2D::num_filters(); i < e; ++i) + filternames.emplace_back(Filter2D::get_filterdesc(i).name); + *(ustring*)val = ustring(Strutil::join(filternames, ";")); + return true; + } if (name == "exr_threads" && type == TypeInt) { *(int*)val = oiio_exr_threads; return true; diff --git a/src/oiiotool/oiiotool.cpp b/src/oiiotool/oiiotool.cpp index 5b82866f42..7a5eb5c18a 100644 --- a/src/oiiotool/oiiotool.cpp +++ b/src/oiiotool/oiiotool.cpp @@ -6496,12 +6496,11 @@ print_help_end(Oiiotool& ot, std::ostream& out) print(out, " Run `oiiotool --colorconfiginfo` for a " "full color management inventory.\n"); - std::vector filternames; - for (int i = 0, e = Filter2D::num_filters(); i < e; ++i) - filternames.emplace_back(Filter2D::get_filterdesc(i).name); print(out, "{}\n", Strutil::wordwrap("Filters available: " - + Strutil::join(filternames, ", "), + + Strutil::replace(OIIO::get_string_attribute( + "filter_list"), + ";", ", ", true), columns, 4)); print_build_info(ot, out); diff --git a/testsuite/filters/ref/blackman-harris.exr b/testsuite/filters/ref/blackman-harris.exr new file mode 100644 index 0000000000000000000000000000000000000000..485bfe730404f13d1f45eb291aecd9a827073841 GIT binary patch literal 892 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tOvSQ!{u85k=V8d;f|S(%t8XC&t3 zrREefBxmGg7MFmPMKUk~6@vhX2D6j%a|?=6i;FY!^B9oXAW7zw#FE7D%)FHRa)zY* z3ZqO00gzrO@CVW$oRV2wkds(RP+d-DUaEglN@@`Uf(3R$L1sm2j$?5_YH~?XVo7E` zLt0LLVhIBa*q#Ra;^d;#)I5ms&Z&7NKm*E*(ik|P&Hz!!O2RW!N;1%lU`PgA#K6!6 zrB^}e_n`0uf*5894I<@%xFRk&LxOd2f=Ex3AkViQ34$^Z&O=@XM&18=LBSvaR`&KF zBgiO5h0DI?E>oEpKBO>w{J&QLC}ay1hZvKw;Is3cGdDW-$9rsertcT8642+$>G|OK zxApU_jAGuecr!2X;PJO7!GgQuV<&!kDlGp~x8(gd)7(o(7PY8+Nc_2fy6(<>+pn1U zuMBfZ% z_bpqtX-`Lz__puLyVq|J0vhMwU!QKR^GEA6xAz7OMb0macdZuy3Lj|UJn=9*paJN# z1f^B=pEm;K0&dq{;j_;=uD|uNyys75hK{rU_Zk2LF%^hGfvCVym-qkIO69{}`%b-+ z6s@^4?@h#%2`pCjN6z-l{qeh%CHvo_FRn~aBc}8;1sZU<9elu$8=JfKtS>Kb>DH^E rsi6@f6S!tYMbDO&e*HRo_3GCfJo>>38EqLDq>ujJ>j1O}UyK3(hj2EO1FINo6Q5Day=CXAlMo85tOvSQ!{u85k=V8d;f|S(%t8XC&t3 zrREefBxmGg7MFmPMKUk~6@vhX2D6j%a|?=6i;FY!^B9oXAW7zw#FE7D%)FHRa)zY* z3ZqO00gzrO@CVW$oRV2wkds(RP+d-DUaEglN@@`Uf(3R$L1sm2j$?5_YH~?XVo7E` zLt0LLVhIBa*q#Ra;^d;#)I5ms&Z&7NKm*E*(ik|P&Hz!!O2RW!N;1%lU`PgA#K6!6 zrB^}eTTuEJlm;0l55yI5$r%!?ixWh8nkI67+mRqB1K|h)LrwSpUQjSdfR(*H$OzKP zsBqcW++`{g!-o`xkN@{70EIMwxFYWD8AV101%U$&hXivDa=0_dygE8}&J8Yx8LvX# YZvX#j@hc{_v;X%R0M+6%&w+qE0IN%g-T(jq literal 0 HcmV?d00001 diff --git a/testsuite/filters/ref/bspline.exr b/testsuite/filters/ref/bspline.exr new file mode 100644 index 0000000000000000000000000000000000000000..1c3339858a4d9b0cb82f7ebf3f3c464f7d291111 GIT binary patch literal 981 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tOvSQ!{u85k=V8d;f|S(%t8XC&t3 zrREefBxmGg7MFmPMKUk~6@vhX2D6j%a|?=6i;FY!^B9oXAW7zw#FE7D%)FHRa)zY* z3ZqO00gzrO@CVW$oRV2wkds(RP+d-DUaEglN@@`Uf(3R$L1sm2j$?5_YH~?XVo7E` zLt0LLVhIBa*q#Ra;^d;#)I5ms&Z&7NKm*E*(ik|P&Hz!!O2RW!N;1%lU`PgA#K6!6 zrB^{|DQ1W%TcI?FClACGamg7Htcw#wdYT0JzwJm6l!0&_axpOK{@)7<1_`jTw+9(P zMlmW}_BD5z%Ea&?h2i7>y$V2~44^p3m<7f&#CN=PDtNW_cCY`^*P&O_)|-Ban&09o zc~N1$ZjR`t%EZ-mzDE}IWNavj^!B}Sv9r~1Bm#Kx_2s)H?C+UoS;<#zkzt6bB!F3S0K>D;Hb1dzlV z-p`YQmYb|9dsnKrKX$%xbzIP4e~^SHZ}8@1ahd<`OAjVUFHSx5Xyr}b&l`Z&shB_U z<6Hl$R^k1+Pb%!!woTnRS^8O0pqt5pvYLR~wO9D;vySU;y)3`=ar3VQJC`oqxpL#i zjr;cPTeof5GO=!`{G&cr6*e7+P-);HQ>pCJfF{AAU}Oc zoD~iVfdr-_dzKw*Yx`x@QOO!HMUYpm>1=i$%gpe2ZZm!PZlgs9ReU~w0y)d)7|;F~ zki)N($!|T}f9s?7+b`}({}>p2KmFfp01WTRKnx0R1%`cQEo-^__LlDcxUyvLs#|Zi zCa#v+0kTym_F9mz>BqlIPprOm`YX$4$2}P!6MyEsc=y{>5MS7v}enX9Xs~x*RNf-X1zK!$qS_I>|LOrt^q^FCd1vlU+H;c%#Eg;INsEC V(m-t@JaG&RQj`Dhbzs1sQ~(umXpaB@ literal 0 HcmV?d00001 diff --git a/testsuite/filters/ref/catmull-rom.exr b/testsuite/filters/ref/catmull-rom.exr new file mode 100644 index 0000000000000000000000000000000000000000..4e35302a1f9116fdbf3951f55ddf85cedd9f4f42 GIT binary patch literal 1089 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tOvSQ!{u85k=V8d;f|S(%t8XC&t3 zrREefBxmGg7MFmPMKUk~6@vhX2D6j%a|?=6i;FY!^B9oXAW7zw#FE7D%)FHRa)zY* z3ZqO00gzrO@CVW$oRV2wkds(RP+d-DUaEglN@@`Uf(3R$L1sm2j$?5_YH~?XVo7E` zLt0LLVhIBa*q#Ra;^d;#)I5ms&Z&7NKm*E*(ik|P&Hz!!O2RW!N;1%lU`PgA#K6!6 zrB^}eNM?vBiV(}d9C;vF5tp1H!MZp>q^D^j_qQDhf-(?JA|C^z?*F}@V2}VSdwY-( zWE7*qWnXibsZ0zXQW!q|->U!=S`HKk8MDCnhRNr*`u4~A{nl~um%V@de}AX1#a;ex zqeTZ_ZZF?9TW^llN2BlIcmKTkae1EBp=A+M1bKDdy{W5ATHLhcI(KL8dHEmF9lKY} zIk2cF!y)&7khFo8&yElE*RS5WZhzBNJ$tvIl!(obepkth3tn`5Ib`?GSM{Nl17 zwK`q(S(n>^5(iu=KCU#b|F$ju=jk=UFV7?;iT(b@BbMsYJfC}M-=^jBeFVey{w?eK zd1n5#^N((B)KHc>^XBJ2^S=kZ`Lib*yO(!ppGkS9<9QtHgztgYe^$uuzv5TlEc<1P zsp%7sZD!`C*REd;v!8z{AUw1QXk$W9baCx0r|jb7N|D>zsB&Td_vwcZ=?4kExc?la;z`4^ zyHU*C`vpuFRQ7KGx=@4Z?CyPXX>kkGF6{XYQZc3R<@yT5<@&rcHe z`+gXxGodj3`)OfmQI)-M9y!(j4%~OT6Z(_|6o{Ae-{+XeT9iIYeYbws&zm2Y+lIFI zf&ww%_I_|8TFAW&7*0zxVBvIs{^fx1sm-8p@~RH5?Fz~+4t92q&HV}v5RsYYE7$I{ z^If=g=f;iu_HFxhaLut>t88>mb+Fmy`tn*%GWc%?4d|O1pk(@jnL*d)|6T{6AMhnh E0O*6I6aWAK literal 0 HcmV?d00001 diff --git a/testsuite/filters/ref/cubic.exr b/testsuite/filters/ref/cubic.exr new file mode 100644 index 0000000000000000000000000000000000000000..7cffdc7c2848a061ee72084ae7e5ab11b2e4fcb1 GIT binary patch literal 679 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tOvSQ!{u85k=V8d;f|S(%t8XC&t3 zrREefBxmGg7MFmPMKUk~6@vhX2D6j%a|?=6i;FY!^B9oXAW7zw#FE7D%)FHRa)zY* z3ZqO00gzrO@CVW$oRV2wkds(RP+d-DUaEglN@@`Uf(3R$L1sm2j$?5_YH~?XVo7E` zLt0LLVhIBa*q#Ra;^d;#)I5ms&Z&7NKm*E*(ik|P&Hz!!O2RW!N;1%lU`PgA#K6!E zrB_4gbWnH#K|7QNu@!*0A}%>Yf^~6%NKaGXg$>79yB}zPxjaA*GwS}|3knAbu)4Pg z89`<-DqQw8cbUq>@F9ia-yrI`+UW6%?>DevT4lMdYM;W@ci=|KcFN-uhzX;7q05gznzx=)ERKQ z_6nbU)^Yu8N*0O)Rf Jesdro4*)U$$!-7u literal 0 HcmV?d00001 diff --git a/testsuite/filters/ref/disk.exr b/testsuite/filters/ref/disk.exr new file mode 100644 index 0000000000000000000000000000000000000000..054c98c1e822e8e62323120f8e94684c1c33463e GIT binary patch literal 543 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tOvSQ!{u85k=V8d;f|S(%t8XC&t3 zrREefBxmGg7MFmPMKUk~6@vhX2D6j%a|?=6i;FY!^B9oXAW7zw#FE7D%)FHRa)zY* z3ZqO00gzrO@CVW$oRV2wkds(RP+d-DUaEglN@@`Uf(3R$L1sm2j$?5_YH~?XVo7E` zLt0LLVhIBa*q#Ra;^d;#)I5ms&Z&7NKm*E*(ik|P&Hz!!O2RW!N;1%lU`PgA#K6!6 zrB^}e`%wBnlm;0l55yI5$r%!?ixWh8ngTZ*XYGEV0p{@p14B*s|6WiqNPv~SJ;(^s z%BXPJ*W6_)6T^oThL8XEDgcFaff(5s11`6N3s|eAq+&L3Oy>S(ViIumz`;DZt%vh> TFfg#*{lC`$r~#j$4g}-@S%Zgp literal 0 HcmV?d00001 diff --git a/testsuite/filters/ref/gaussian.exr b/testsuite/filters/ref/gaussian.exr new file mode 100644 index 0000000000000000000000000000000000000000..755c9daa9f8e6a9ec04581a518e4fd63eb4bc00b GIT binary patch literal 892 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tOvSQ!{u85k=V8d;f|S(%t8XC&t3 zrREefBxmGg7MFmPMKUk~6@vhX2D6j%a|?=6i;FY!^B9oXAW7zw#FE7D%)FHRa)zY* z3ZqO00gzrO@CVW$oRV2wkds(RP+d-DUaEglN@@`Uf(3R$L1sm2j$?5_YH~?XVo7E` zLt0LLVhIBa*q#Ra;^d;#)I5ms&Z&7NKm*E*(ik|P&Hz!!O2RW!N;1%lU`PgA#K6!6 zrB^}em!R+jf*5894I<@%xFRk&LxOd2f=Ex(M6Pc;5(H%+oJ4*GM&18=LBSvaR`&KF zBgiO5h0DI?E>oEpKBO>w{J&QLC}a*4hZvKw;Hqi+$KQpRDi7yLDZEKF6XFD5y~XJoY!o{c>%k z7PIvhE8f@%b_-29Fm1z>QuS(1l(K7Q)f>vv;CmdliU)iXaGr{m?pv{e3P>zQ<$7#Z#Pg`e*F|H}gjUMZ8`dbt1A zNAI^^+~58&yma7@nnDK4##gT!6y$)*RJP14)pJaRV#OH>Uc+l?NdYBt*hrTpF_ zY*co81JL3vyPoCR-#WAT1GZ0YOeiM#hTut5>h?J|1ESRI4GuTEf7<7Wsd#1JF8rF$w^s?K9>8 literal 0 HcmV?d00001 diff --git a/testsuite/filters/ref/keys.exr b/testsuite/filters/ref/keys.exr new file mode 100644 index 0000000000000000000000000000000000000000..71683897fd175b29b9a402656080984789bed9d3 GIT binary patch literal 1091 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tOvSQ!{u85k=V8d;f|S(%t8XC&t3 zrREefBxmGg7MFmPMKUk~6@vhX2D6j%a|?=6i;FY!^B9oXAW7zw#FE7D%)FHRa)zY* z3ZqO00gzrO@CVW$oRV2wkds(RP+d-DUaEglN@@`Uf(3R$L1sm2j$?5_YH~?XVo7E` zLt0LLVhIBa*q#Ra;^d;#)I5ms&Z&7NKm*E*(ik|P&Hz!!O2RW!N;1%lU`PgA#K6!4 zrPn~|Xl95h$`H%I97P~m5tp1H!MZp>q^BwH!i5dTS-T%-fcZS$z;M(3zZVn`5@3aI z4>E!bV^p~8Ywj|YiQz*E!^i)76@Ws^f#M*878u_!`TSPj{#d`?IxhaQ_mBVY@AS2} z%inFZ=-|uk<=bZK&9VAu^gaCUpEo})&(k`zEMkfvug<$Sb(Kkro0eSX?#w+e|0B9% z_o_Ju7WHH}3YYvH8*ODtU3ii;gdc?Ed+R-dCMp zT=t_@r>j2eaywAsfJ?>4mB#how#ENEy(akOnWQAK-`{w|QeB$ob1&`Nw0ypgVA$Tj zWqm)-%)fU2(ant-%2H?E{QPJB_n+pMz99 zX?S)wikW-Afa!wD{tZAEYA~JMy-zMJZh_i`J-c z&=y}%AO_st4^Bo4xt9UMX^93bobJ!R91uRW85B-l)xou0LD|K@&d#y9U%>$)GShtJ z+MRa33%BmvxN+aUZNCn#Id*H6jn1hKHrrfZUdu@a|LvdweG{B8UobQ1+Wg<^0Q3XC GWC;Mt6Q(%; literal 0 HcmV?d00001 diff --git a/testsuite/filters/ref/lanczos3.exr b/testsuite/filters/ref/lanczos3.exr new file mode 100644 index 0000000000000000000000000000000000000000..1d490d4a6d45fc27f1cd81b5cad51c868679f624 GIT binary patch literal 1935 zcma)7dsGu=7XJeBQX(Q1kcfb|TZ;-I22v@nEg)^zNRdTEgd`-<3}8SKBuEY5gHw4F zySx-?L3v0(!b=E5lF*8{SY3I9AfT{?5;3W~QV9YHJA;O*l@jMmVbcMN9S<>20yFp$4vWLPVR3HQeYVaxHy2koJb}ufFq!li7N9a> zAQpQqEfk>OWW*3$i>a}v;^OHn78J__e~givx-<%#5&|)4v56oumV<-9Cgj<7762pS zG>8=!LrMC-c`*=^9uQBX$AjOawHD$a4n5{?tT;NAeVD?AV!?@+SPC1gTU#g9i$#s6 z)0uC}`_P$exWF0Q31IlH4Fvv}5(3fKj6anC)U|~G$ase$gh$v8=)J{QgSUtrZD8j_ zP#KnbW#kXC&YPkaTFIu{-k$ty3{ZPlMF+ z-ka%go^%I#;?cz5r*1>_3|rv2emeMg$G;l|os+pU9-|xdOY&V+uU?+ks`mXXRwZ-y zSQ&!Qiat`|c1<1u-F{_$eD{bG^YVUuWq=p0u%D_Ft1UD2b^g;@Zqt;qU|`dQ3ADQ{ z(Bf(|5lsgtR?X9Rm{sOk=4HQoyO8GNQ2HOIb=#ZbTkwQ`%-+GvEWW;jC%EFJgR=H( zJx58Zin1FmmD}NprOjn+;xAj98$5l4%{<rD4T`rXoc(DIltXpUZ&ns<2a2_`Yc!Rk`Up`^J>uPkypxAo`0m~Pq~U9TQZPWRI_ zDmC?$QZsUOge4D7@6F|G(RSzE^HD4k9Dh3b3HLjB*hdRH6eByj55MOIku`VEo*v6c zei&be%l^(>^g+%@B2)OZ?CuxV#U$7DddS<=^U7D>e6?8Ia&{>FqI%}2*3ih&a7vhz z|5HIBU4ET}aNf|!@+u5o`JfoIKM57ZD2GlQHWFfaQU1diKu;kwJ7TAMRj3|z4 zT?NnaP;Et9LxWh{BA4B)6c+8|r3*83`W_cQ?R_>&^Xxh2tiY&cQ zPMl)!4ch8FkDyPC*51#yRlCUkIpO&+>Mwz9JBtUgdX_fb8Q!Z0pdX(lp4-|ZQNPfc zus48PCF}P{I;t4eCIc6)B|ohof4BT$WD;Y^XqEG_2yGz z%-=ClyMr3w4@VB3TU6+=Nu`0&X1hev;F2&C_EURpSNaXf;g(n9yaD)3trB5jA=P}$M~kF_grxANBlhlXf~~I4 z@_x9P2Hr#SC*zLyVf;bW_b9>1_x!&j!Db_|1T!mTw3v;T%B0j@Z)4zZ@9r3wR7UPZ0ppQH5iBfV2|Fj^ Y)ek7-zk#ytClY+~b-*kQ%&m(43&?0+q5uE@ literal 0 HcmV?d00001 diff --git a/testsuite/filters/ref/mitchell.exr b/testsuite/filters/ref/mitchell.exr new file mode 100644 index 0000000000000000000000000000000000000000..76a96795089720b09ca85fd594bdb427e166eb57 GIT binary patch literal 1085 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tOvSQ!{u85k=V8d;f|S(%t8XC&t3 zrREefBxmGg7MFmPMKUk~6@vhX2D6j%a|?=6i;FY!^B9oXAW7zw#FE7D%)FHRa)zY* z3ZqO00gzrO@CVW$oRV2wkds(RP+d-DUaEglN@@`Uf(3R$L1sm2j$?5_YH~?XVo7E` zLt0LLVhIBa*q#Ra;^d;#)I5ms&Z&7NKm*E*(ik|P&Hz!!O2RW!N;1%lU`PgA#K6!6 zrB^}eFlLA;vJlI_9C;vF5tp1H!MZp>q^D^j-?tqJf-(?JA~yr0?*F}@V2}VSdwY-( zWE7*qWnXibsZ0zXQW!q|->U!=S^^XY8Kb~v!lWp0g;{Z_g3<2|-%Z!PtiJPIbbnTQ z-0bQjX|IZOPIa*9ZESk4Z1McFeCp5SzlI-wa~=HN{XHSj&E!Rdsk!Cc!lP1>|N8x% zl>VKcGg~IA(^c|f!>xD0{6Q50Cyo7+e|yRd z_uTJ+mVZ{r?!V$!f90G!FHbtW@~SlaOMTBUi+#<#tZc11roX?Lx{Ve!@+_JcUyNd@F3hZFek?d+qqV#L)aa7arraf(%f>3 z5YT?ct#`#|*4{9S%>E@h?{`;xiP8GAwmH_NmSU+(8jrQP354Dc=+`voayzIYv8JJM z@!FMLix)3lxpCvZee0Gza*vL^%Fm|5)ycvG2@PFe-`=mKrKVHuqh7DJ3rv#ZU-o-n tK$4vFl|9Sa+N@So?$! zYznoYEE15g34urwS`i;sD@zCh3N1V$CQr6hfn(BPoa|;3|b5mQ0Orb zleLx>3Q%w|VhFCql-QGT@iZnAie-Sm#>h==Dw#zNff&@-L=YLv#zJ5t^6Xm+fDv&j z#Egp}C;e?+48))X#8YYU;D6Ct3vm#e7V|MPjz(b}BD0`aa6BfK%mVAy)=BkZQsQYe z#+&j!GzJSUa2k6Y=)Y|Pfxo7NKvWj}|4IPL+Cl(iyhS0xBW(M1-e9cW8$^yau(Km5 zbW5Ew(tBCwOgAjFl1#V0Ir+^Hp!Tc^5gK;ErT$Da@}I5wD!X9v_a^-K4+(|_;bI>5 z^>jE_vfX&%;l$u4ZbS8STj05VI`~+}FOB@p$=n%_QA6F5d{^bm7pFAJy}yZ+$(-F* z`XIETk65@(orgDWzdS#_Ys86hX`iklz>8YgPf>_emYKR*zqXd!G^H%)*>s@;?QZck z*cx?2(}9Uq^E57cm2rk~$?xt?r1?0M?uTjJ_NKTN9R6Rkw{cR7uW#ekGJ$9t7}QlS7$eG9yo&A2&}!8^PNYF z_ev`TxFM;mt7~a#Sbo2$NM210h^ngXByR&s zd$rIOrYsF+9ign$=8DFyh*{mGc*1|MDI)Twm{}wmUKr=iM)snI#tPR{BYVApd!PyF z%WEt5_OpY7{xfqwYn2vSICxR$@l$ScG5IcG3&Ixq2ZG>Rox;Zzr}jH&QqKDM=gn#6 zXPUBD@9!4>S2d|`ZoDov@6g<1bYhBw)y0y7NplxpTI6(Y?azNc-LxyZUNxGW?x$@~ zYU(SYWaMfIO75T9lgr+$>CU_BBVWWj{(Ryi&iAsg4;Hq|N49q#ddCeSsqdUQHI|Y5 zAifTp{k^&Hy_}ImhTuurozJa{iLUE)khiPnmao44YO%QG%uxCT)yxr%zJa6ulprbp z=Ym3->>3f_yrGflRT%2LlDSfPIPOyJOn;)#fWNL_uk%*LIDylSXd!iYy6p5~;71(p zHO*y|%e-Db$|oS1sa9OA&3^S+MlFG0Y@CoVpnC2i4Y`@=Dm`3)A@!cKz#N#ON3mV& zD!7gZYb)9s8bqQNne;}bplAm-U67&G_o(bcg0 zy&l{uNw-JbQAMvd890A65pwAf^UYD};xs>P6y}bw&F-l7l!$a*dYp8QS63^lH=h!r zzd%Rr3Tl8q92t0KQK7>kmIg+f?G#FaOTtW8W6d;gRRsyA5$yvam%)kbMp%GCi*U1;T8N@j;7I|c8-?}Y1I4t7u{yyy)` z>hCc8z)94o9xu2;sn`7Ob9$dg%XD%MLfAV@npEOs^zGd@ON6GXTVbD0EhP{hCC+?a zVGdcI*d{jb>rP*rA`)#QGq)l|$)jkfIwv^#WKrKQasG2L_7ShEKfhy7C439ZfI$|Kvh<4a2qa0&-;cI%loKdcA8p_dkvSj^r}34 z_`%xH*+5#6T|!OZgEz>={F~C|mZLUdINg}K&Gd-t7|aT`oGkOWhB6ZK)!xc#gc7T; zBD4ehsFlLdH+62L2V{-m&8!sBA{I^}l~8)Ujex(syJKKd8L1Nmj7AoPu&{t7?Cgk_ XKcbNT2FkXdfcMSU0<%;ww<`Pt$aP<$ literal 0 HcmV?d00001 diff --git a/testsuite/filters/ref/out.txt b/testsuite/filters/ref/out.txt new file mode 100644 index 0000000000..84770ef6fa --- /dev/null +++ b/testsuite/filters/ref/out.txt @@ -0,0 +1,34 @@ +Comparing "box.exr" and "ref/box.exr" +PASS +Comparing "triangle.exr" and "ref/triangle.exr" +PASS +Comparing "gaussian.exr" and "ref/gaussian.exr" +PASS +Comparing "sharp-gaussian.exr" and "ref/sharp-gaussian.exr" +PASS +Comparing "catmull-rom.exr" and "ref/catmull-rom.exr" +PASS +Comparing "blackman-harris.exr" and "ref/blackman-harris.exr" +PASS +Comparing "sinc.exr" and "ref/sinc.exr" +PASS +Comparing "lanczos3.exr" and "ref/lanczos3.exr" +PASS +Comparing "radial-lanczos3.exr" and "ref/radial-lanczos3.exr" +PASS +Comparing "nuke-lanczos6.exr" and "ref/nuke-lanczos6.exr" +PASS +Comparing "mitchell.exr" and "ref/mitchell.exr" +PASS +Comparing "bspline.exr" and "ref/bspline.exr" +PASS +Comparing "disk.exr" and "ref/disk.exr" +PASS +Comparing "cubic.exr" and "ref/cubic.exr" +PASS +Comparing "keys.exr" and "ref/keys.exr" +PASS +Comparing "simon.exr" and "ref/simon.exr" +PASS +Comparing "rifman.exr" and "ref/rifman.exr" +PASS diff --git a/testsuite/filters/ref/radial-lanczos3.exr b/testsuite/filters/ref/radial-lanczos3.exr new file mode 100644 index 0000000000000000000000000000000000000000..8e3d9613926a3eb14bd44a66da89d09adba46bd8 GIT binary patch literal 1859 zcmah}dsLFy7XJ{<(#%P%Yg+l3F&)$a5#$byr8ggwkF3BD%?BbX%1eQ?ho)B6h&Ih= znzSq#(-IXWUnz-K#-V&AS>P;n}Br%y}It}>LHcWz(2rL4QOiQ9?0g3c%I2riNu=b-w=+U4_ zWF~_`IR1Zm6f%tzk(orw1pcztLST@yNfdu3gG6K!8={ zIAW@;Nlk)HalsE3OLr1BZ~rhLYy?1_x*kIsT0f<2OqcN(r8>!+lT4z`IgikE1^9_xjTt zPWVrAwBRWp9y&OCn^Xlur+CeeKRrLHo4(eF$q)SUkY5lga*;0`wVhPmu2IA`ov&z7 z%EZ1audF>nz5_88^*8o3THNWZ^j6E;JcMLr&Sf9O(5TqDtRT>f;3&NFKyvpH^ugbA zD-K3X-}o_$WE{uho zjQc+DYbTj7Le>>en2_#%v}0#a#irWWS)&PaL|s_tK~vZzHC>6Vq!L9V&F z+*dA!{FbpeKX8w8ZZCY=vMUSBS!Yz8q2Zsk>a02i*_;8f*S-H&!cwn@@k>>NMs#B9 zS(nn^2_Tn?&q9C3QLNu&+buwHq)+EG=f-wVpA2j)zPOsP0N!e0>?auY@QpuGxxV?h zdZ^TO`tZ>8$!%BKsK1mduR?37mBoQz5MwrLo9IDt=Q_$g^wHs2B`)lnuA36oxXJIu z?t4X1ku9l?z^(Z`Y3CiBbBT`~U#_HXa(T%qd;ccHe~vD}7mYczzc#&pzkYrsykv2a zjodmX+x90TVUU3JdGOsnX>U&u|M1HZlceG$MFA zemEWzRCs>&m=6k@*@2YfyulbJ+1-i3-lh_Eq;k?eZKzbJ&(#bYfwD1c_mNk;XfLn| z%b_mbye92dWxca#-?Bdn@fq-X@~XXroqy<0x>;CW^_!#26Q9E}q0N+AO=0~%2fbCpTVwsb+%*W|{eY)Uw z0p5GUmC_pbM{lV6{Bhr{&y4f?|3I6+KA_Bg@;3G#zQ;>Lrn@}95iyv{1J>a}Xp5Wc z#+gRU{+uX#2HiVF(Lly0J`%4$sHx@Gb6nj_IEjgQ#WcPuvgEo~hny7LB#O3#5_)+# zCzqbNMwMBa{I4p^sNNT_ki(u(ephbRm+r8AH07Ecl09d!EX|i3+>_gUN_Mj{k~()v zy%P;R^)2n!zP$dS8c!$8ud^=ihVdAp=YhE4pYk@HySkdCG>4qVp7#3zr|&9`Cc_#E znJ*G{w+rieVxCyY6Y>ONt*WT5oBIlDs88{J>PQJ&c_K#t2>n;J+HP*5piVo%zv~<( z56G*G^{Y`iBVxEtGjhez_=m=bHjf<`&qE0ZfEuqkN2{Pk0NQ?s9!%IkJ9UVy+Y z0zuu6Q!Qum#nVTst^GZ!pYS;Y9K4O};p95AE^RkIvFI+^EC^%=0L`($u%G^3ZS|TR ZH{S;`^m>rvqi|HfWh3B467W*j^B>9wG==~G literal 0 HcmV?d00001 diff --git a/testsuite/filters/ref/rifman.exr b/testsuite/filters/ref/rifman.exr new file mode 100644 index 0000000000000000000000000000000000000000..d5e12365bc6a90652399590e0caf0f30c6aec09b GIT binary patch literal 1068 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tOvSQ!{u85k=V8d;f|S(%t8XC&t3 zrREefBxmGg7MFmPMKUk~6@vhX2D6j%a|?=6i;FY!^B9oXAW7zw#FE7D%)FHRa)zY* z3ZqO00gzrO@CVW$oRV2wkds(RP+d-DUaEglN@@`Uf(3R$L1sm2j$?5_YH~?XVo7E` zLt0LLVhIBa*q#Ra;^d;#)I5ms&Z&7NKm*E*(ik|P&Hz!!O2RW!N;1%lU`PgA#K6!8 zrPo1eFJ_1-JP^yk9AzL`5tp1H!MZp>q^BwH0uXFC&f5Jz11!Sh3=BEl|9e3}AputU z_8=q3I7WrbzUD4dnHWB#Fns*KR{gpbe z4fRV1bTe77t$ro%k~Gfvx@n(^pW2>#@AdFa@sg7J%WMxX>d7!z`1tz%rrkbs<6G|+ zP5&P}@4%6;zy_dA3CGq?t~S0QxAAO+`jn5}@2>Nt7jNSM*>vUG`!n<2*I&MGwEd4r z-RZc`;T3Ae>7G_%sV>Y}yZdiFbbtF}>9%@y>lv4>U74VC|JIco5%KZie+&GaV?+6X zs+uEn&wedjW$-yqKWoieFR(L~?_FuI+Xu#!m@B(Y`tyxk@SE6T2Nxy#mdR4w&=8Dx`AkP?J28>tNnb}vb#mFz` wD!%{LwRdZ1CdjB|TTD%toH%@@+G6>_bz1D*n;-_WGuXTQ-|GN$J-*Zj0MI6)BLDyZ literal 0 HcmV?d00001 diff --git a/testsuite/filters/ref/sharp-gaussian.exr b/testsuite/filters/ref/sharp-gaussian.exr new file mode 100644 index 0000000000000000000000000000000000000000..46fd29c452cd91247ecdc4aadde8c2379a85b66c GIT binary patch literal 679 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tOvSQ!{u85k=V8d;f|S(%t8XC&t3 zrREefBxmGg7MFmPMKUk~6@vhX2D6j%a|?=6i;FY!^B9oXAW7zw#FE7D%)FHRa)zY* z3ZqO00gzrO@CVW$oRV2wkds(RP+d-DUaEglN@@`Uf(3R$L1sm2j$?5_YH~?XVo7E` zLt0LLVhIBa*q#Ra;^d;#)I5ms&Z&7NKm*E*(ik|P&Hz!!O2RW!N;1%lU`PgA#K6!6 zrB^}ebWnH#K|7QNvE_ldA}%>Yf^~6%NKca>_qQDhf-(@!Lp}yZ-T!+*!5{%v_Vyqn z$S6jI%f99=Q<)e(q%eH^zgGb$v=xY9#%QgUeXhRmeS2Mc@lP(-k@?`V4l6G-QZOz~FSARyRoMf0j^(XVzb!-1ugo}5pNH*Mh zx47&_pmp8Kx&Pb_YACRt$d(5^%fr3ZH$}as92Aj2EO1FINo6Q5Day=CXAlMo85tOvSQ!{u85k=V8d;f|S(%t8XC&t3 zrREefBxmGg7MFmPMKUk~6@vhX2D6j%a|?=6i;FY!^B9oXAW7zw#FE7D%)FHRa)zY* z3ZqO00gzrO@CVW$oRV2wkds(RP+d-DUaEglN@@`Uf(3R$L1sm2j$?5_YH~?XVo7E` zLt0LLVhIBa*q#Ra;^d;#)I5ms&Z&7NKm*E*(ik|P&Hz!!O2RW!N;1%lU`PgA#K6!C zrPo4fH)e<_+z`va93>!G5tp1H!MZp>q^BwH!i5VPj& zRYgqQMvD$kx%=vK(YxcelXtEE;gdD-(Uc{#*I7nP5#&9$+C1L)3CG0hBflfxU7RKV zd}~&|R8pXu$%1Y5D|t8VTUTR}yRZ9c;j{hIj(=B4JK0+7e|S+(#sWRF|6k5NQR$O^ zq;FYwX7=j5SwCK>iKV(Uo8MkvFEr7xC+1(TcG1tD>iIuRY+W~KC`$$0uJztO|E}=g zHE(t$CgT+ztQE z9$1ufpn>N?ZF$%>hdbfI>zGRJ3+tTfVC!=Dyl#E#PxA=jjC-{p0j&c+c5GtIh;wGX zu!li5q2|s(kT`##O--#RyIwJq~8UQ0^FA#$wMu9=+-J7~frPJ3+zuT)_zuUe%vSatEIR}6i z6vXZQIZM&KQZa7p)|D$4E?l?n*SAA$yH=He{CN5HEGeO>iO=rNy&n)hwbNDd pVuDk3aBUmUnf?B0Cf7p65(3SDCTmFiVqoCr`@h!#=mC7G4*;MVo4f!3 literal 0 HcmV?d00001 diff --git a/testsuite/filters/ref/sinc.exr b/testsuite/filters/ref/sinc.exr new file mode 100644 index 0000000000000000000000000000000000000000..b11de6f068fae0ac98aecd3f6be42d925c972ea9 GIT binary patch literal 1256 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tOvSQ!{u85k=V8d;f|S(%t8XC&t3 zrREefBxmGg7MFmPMKUk~6@vhX2D6j%a|?=6i;FY!^B9oXAW7zw#FE7D%)FHRa)zY* z3ZqO00gzrO@CVW$oRV2wkds(RP+d-DUaEglN@@`Uf(3R$L1sm2j$?5_YH~?XVo7E` zLt0LLVhIBa*q#Ra;^d;#)I5ms&Z&7NKm*E*(ik|P&Hz!!O2RW!N;1%lU`PgA#K6!6 zrB^}eyUY+%PCzUJbL4?!MO<=*1nc4ik)EcBJl}RC2+BY>iM$Mqy8rirfnNMZQ+f3E^iNE;YcAY&BxOqx2Xd(b)p z2wyyW>3pZFo1lLFmLI&M^HowNRXWao$0k21GQ`15Q_f49ntr7mGwb@ceN`ZLFjTmAQ+ zm^V#zjm1pmzdxVv>y4Nq$opsed>@V;>r%ZON2cd|XMH1o=PJ2zLE*!;-E}(d z<}rRzBF9b4HNKvI>s_B0{NTOY^J*uqUD9dy^JC?H>ZMd3OKp@*SJ5=of3|Xp%K42; z`FDr4?f)1d^T)N|dYzirnZ?_F$I1Q8*?Oh&QSYIp7x!n)ig&HIJ2t_&v67d2uKJnN z)vGp!C#UV2usx)LF~`sNj`M^{4Q>*$wBUDMK+-&;3wtU|JAS`fou|vP>%E@pv&3$Gt~1#ea&lHN z{n{=nR2M#N>(%S`4lL@)Sit)we}~+e{nNvk{(1-gGswtU!)MlZ#69-w&8-K1?C1bS z*#U+Z`xJyD{>+PHH+jz_mg>U1qq6s_!}qz7>^%0bX1MEqXM8L!QFq~o?e1-B_w^}# z{vsuv?Zh)XTI#?*+x^S7?)zp0(xkQAKIk($L)g4udkug|<}nb1lMI8>ws~Ej{p<_% zY7%XZo84`W_P<+~*bcN<;c07+#p9h*`K!f_?k$Ua@^^mz|8?=8$c>ZvnY8sx;ia#O zR1NL3XWw(FwK_MU8>r>M?hA_xtpA7S&s~=Os;hL4ZAr`aT^!v;L5|8DD~^lEvjUSj zPuzh8cYp!B{@NX;GY7tY4c#ub?b`LbsRtHK@Hnu5(L~>C`O2jmH||@w?$@bJ+kV}W z7MXedMu_OzyH~i1;$y#FU7Gu~RAlCIu9EmQY&Z7vZoO(Qw%zQ?y=4dXux*Ij!MI{i XpaGZL!3HLVFR%XYbpU!3U+w__x=H|Y literal 0 HcmV?d00001 diff --git a/testsuite/filters/ref/triangle.exr b/testsuite/filters/ref/triangle.exr new file mode 100644 index 0000000000000000000000000000000000000000..c37e6f2efa2c7c87d4137d468797ef6faf397d22 GIT binary patch literal 640 zcmXTZH)LdDU|>j2EO1FINo6Q5Day=CXAlMo85tOvSQ!{u85k=V8d;f|S(%t8XC&t3 zrREefBxmGg7MFmPMKUk~6@vhX2D6j%a|?=6i;FY!^B9oXAW7zw#FE7D%)FHRa)zY* z3ZqO00gzrO@CVW$oRV2wkds(RP+d-DUaEglN@@`Uf(3R$L1sm2j$?5_YH~?XVo7E` zLt0LLVhIBa*q#Ra;^d;#)I5ms&Z&7NKm*E*(ik|P&Hz!!O2RW!N;1%lU`PgA#K6!6 zrB^{|2T*tdK?0NpvE_ldA}%>Yf^~6%NKca>*S8%Bf-(@!Lw*KE-T!+*!5{%v_Vyqn z$S6jI%f99=Q<)e(q%eH^zgGb$)Ca^cW9pdyAAdaUkG!9lrABXJ_zc zX}!dWD$D`5YtKu~^Y*f>*1M_D>N<(XA@@7)w-1ZARRUcwfhla8iK*$e>sPO~Bm)(% zX`LzF15~p?E-g+$%+u(A+l