image_pack 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +18 -0
- data/LICENSE.txt +21 -0
- data/README.md +140 -0
- data/THIRD_PARTY_NOTICES.md +8 -0
- data/ext/image_pack/extconf.rb +515 -0
- data/ext/image_pack/image_pack.c +1618 -0
- data/ext/image_pack/vendor/.vendored +1 -0
- data/ext/image_pack/vendor/mozjpeg/BUILDING.txt +902 -0
- data/ext/image_pack/vendor/mozjpeg/CMakeLists.txt +1593 -0
- data/ext/image_pack/vendor/mozjpeg/LICENSE.md +132 -0
- data/ext/image_pack/vendor/mozjpeg/README-mozilla.txt +194 -0
- data/ext/image_pack/vendor/mozjpeg/README-turbo.txt +346 -0
- data/ext/image_pack/vendor/mozjpeg/README.ijg +258 -0
- data/ext/image_pack/vendor/mozjpeg/README.md +29 -0
- data/ext/image_pack/vendor/mozjpeg/cderror.h +128 -0
- data/ext/image_pack/vendor/mozjpeg/cdjpeg.c +156 -0
- data/ext/image_pack/vendor/mozjpeg/cdjpeg.h +171 -0
- data/ext/image_pack/vendor/mozjpeg/cjpeg.c +961 -0
- data/ext/image_pack/vendor/mozjpeg/cmyk.h +60 -0
- data/ext/image_pack/vendor/mozjpeg/coderules.txt +78 -0
- data/ext/image_pack/vendor/mozjpeg/croptest.in +95 -0
- data/ext/image_pack/vendor/mozjpeg/djpeg.c +855 -0
- data/ext/image_pack/vendor/mozjpeg/example.txt +464 -0
- data/ext/image_pack/vendor/mozjpeg/jaricom.c +157 -0
- data/ext/image_pack/vendor/mozjpeg/jcapimin.c +307 -0
- data/ext/image_pack/vendor/mozjpeg/jcapistd.c +168 -0
- data/ext/image_pack/vendor/mozjpeg/jcarith.c +972 -0
- data/ext/image_pack/vendor/mozjpeg/jccoefct.c +609 -0
- data/ext/image_pack/vendor/mozjpeg/jccolext.c +144 -0
- data/ext/image_pack/vendor/mozjpeg/jccolor.c +721 -0
- data/ext/image_pack/vendor/mozjpeg/jcdctmgr.c +1776 -0
- data/ext/image_pack/vendor/mozjpeg/jcext.c +219 -0
- data/ext/image_pack/vendor/mozjpeg/jchuff.c +1146 -0
- data/ext/image_pack/vendor/mozjpeg/jchuff.h +57 -0
- data/ext/image_pack/vendor/mozjpeg/jcicc.c +105 -0
- data/ext/image_pack/vendor/mozjpeg/jcinit.c +82 -0
- data/ext/image_pack/vendor/mozjpeg/jcmainct.c +162 -0
- data/ext/image_pack/vendor/mozjpeg/jcmarker.c +844 -0
- data/ext/image_pack/vendor/mozjpeg/jcmaster.c +958 -0
- data/ext/image_pack/vendor/mozjpeg/jcmaster.h +56 -0
- data/ext/image_pack/vendor/mozjpeg/jcomapi.c +109 -0
- data/ext/image_pack/vendor/mozjpeg/jconfig.h.in +37 -0
- data/ext/image_pack/vendor/mozjpeg/jconfig.txt +93 -0
- data/ext/image_pack/vendor/mozjpeg/jconfigint.h.in +44 -0
- data/ext/image_pack/vendor/mozjpeg/jcparam.c +991 -0
- data/ext/image_pack/vendor/mozjpeg/jcphuff.c +1123 -0
- data/ext/image_pack/vendor/mozjpeg/jcprepct.c +351 -0
- data/ext/image_pack/vendor/mozjpeg/jcsample.c +522 -0
- data/ext/image_pack/vendor/mozjpeg/jcstest.c +126 -0
- data/ext/image_pack/vendor/mozjpeg/jctrans.c +408 -0
- data/ext/image_pack/vendor/mozjpeg/jdapimin.c +407 -0
- data/ext/image_pack/vendor/mozjpeg/jdapistd.c +691 -0
- data/ext/image_pack/vendor/mozjpeg/jdarith.c +782 -0
- data/ext/image_pack/vendor/mozjpeg/jdatadst-tj.c +198 -0
- data/ext/image_pack/vendor/mozjpeg/jdatadst.c +299 -0
- data/ext/image_pack/vendor/mozjpeg/jdatasrc-tj.c +194 -0
- data/ext/image_pack/vendor/mozjpeg/jdatasrc.c +295 -0
- data/ext/image_pack/vendor/mozjpeg/jdcoefct.c +881 -0
- data/ext/image_pack/vendor/mozjpeg/jdcoefct.h +83 -0
- data/ext/image_pack/vendor/mozjpeg/jdcol565.c +384 -0
- data/ext/image_pack/vendor/mozjpeg/jdcolext.c +141 -0
- data/ext/image_pack/vendor/mozjpeg/jdcolor.c +881 -0
- data/ext/image_pack/vendor/mozjpeg/jdct.h +208 -0
- data/ext/image_pack/vendor/mozjpeg/jddctmgr.c +367 -0
- data/ext/image_pack/vendor/mozjpeg/jdhuff.c +834 -0
- data/ext/image_pack/vendor/mozjpeg/jdhuff.h +247 -0
- data/ext/image_pack/vendor/mozjpeg/jdicc.c +167 -0
- data/ext/image_pack/vendor/mozjpeg/jdinput.c +408 -0
- data/ext/image_pack/vendor/mozjpeg/jdmainct.c +460 -0
- data/ext/image_pack/vendor/mozjpeg/jdmainct.h +71 -0
- data/ext/image_pack/vendor/mozjpeg/jdmarker.c +1374 -0
- data/ext/image_pack/vendor/mozjpeg/jdmaster.c +727 -0
- data/ext/image_pack/vendor/mozjpeg/jdmaster.h +33 -0
- data/ext/image_pack/vendor/mozjpeg/jdmerge.c +587 -0
- data/ext/image_pack/vendor/mozjpeg/jdmerge.h +47 -0
- data/ext/image_pack/vendor/mozjpeg/jdmrg565.c +354 -0
- data/ext/image_pack/vendor/mozjpeg/jdmrgext.c +184 -0
- data/ext/image_pack/vendor/mozjpeg/jdphuff.c +679 -0
- data/ext/image_pack/vendor/mozjpeg/jdpostct.c +294 -0
- data/ext/image_pack/vendor/mozjpeg/jdsample.c +524 -0
- data/ext/image_pack/vendor/mozjpeg/jdsample.h +50 -0
- data/ext/image_pack/vendor/mozjpeg/jdtrans.c +156 -0
- data/ext/image_pack/vendor/mozjpeg/jerror.c +251 -0
- data/ext/image_pack/vendor/mozjpeg/jerror.h +335 -0
- data/ext/image_pack/vendor/mozjpeg/jfdctflt.c +169 -0
- data/ext/image_pack/vendor/mozjpeg/jfdctfst.c +227 -0
- data/ext/image_pack/vendor/mozjpeg/jfdctint.c +288 -0
- data/ext/image_pack/vendor/mozjpeg/jidctflt.c +240 -0
- data/ext/image_pack/vendor/mozjpeg/jidctfst.c +371 -0
- data/ext/image_pack/vendor/mozjpeg/jidctint.c +2627 -0
- data/ext/image_pack/vendor/mozjpeg/jidctred.c +409 -0
- data/ext/image_pack/vendor/mozjpeg/jinclude.h +147 -0
- data/ext/image_pack/vendor/mozjpeg/jmemmgr.c +1180 -0
- data/ext/image_pack/vendor/mozjpeg/jmemnobs.c +110 -0
- data/ext/image_pack/vendor/mozjpeg/jmemsys.h +178 -0
- data/ext/image_pack/vendor/mozjpeg/jmorecfg.h +382 -0
- data/ext/image_pack/vendor/mozjpeg/jpeg_nbits_table.h +4098 -0
- data/ext/image_pack/vendor/mozjpeg/jpegcomp.h +32 -0
- data/ext/image_pack/vendor/mozjpeg/jpegint.h +453 -0
- data/ext/image_pack/vendor/mozjpeg/jpeglib.h +1211 -0
- data/ext/image_pack/vendor/mozjpeg/jpegtran.c +827 -0
- data/ext/image_pack/vendor/mozjpeg/jpegyuv.c +172 -0
- data/ext/image_pack/vendor/mozjpeg/jquant1.c +856 -0
- data/ext/image_pack/vendor/mozjpeg/jquant2.c +1286 -0
- data/ext/image_pack/vendor/mozjpeg/jsimd.h +123 -0
- data/ext/image_pack/vendor/mozjpeg/jsimd_none.c +431 -0
- data/ext/image_pack/vendor/mozjpeg/jsimddct.h +70 -0
- data/ext/image_pack/vendor/mozjpeg/jstdhuff.c +144 -0
- data/ext/image_pack/vendor/mozjpeg/jutils.c +133 -0
- data/ext/image_pack/vendor/mozjpeg/jversion.h.in +56 -0
- data/ext/image_pack/vendor/mozjpeg/libjpeg.map.in +11 -0
- data/ext/image_pack/vendor/mozjpeg/libjpeg.txt +3150 -0
- data/ext/image_pack/vendor/mozjpeg/rdbmp.c +690 -0
- data/ext/image_pack/vendor/mozjpeg/rdcolmap.c +253 -0
- data/ext/image_pack/vendor/mozjpeg/rdgif.c +720 -0
- data/ext/image_pack/vendor/mozjpeg/rdjpeg.c +160 -0
- data/ext/image_pack/vendor/mozjpeg/rdjpgcom.c +494 -0
- data/ext/image_pack/vendor/mozjpeg/rdpng.c +194 -0
- data/ext/image_pack/vendor/mozjpeg/rdppm.c +781 -0
- data/ext/image_pack/vendor/mozjpeg/rdswitch.c +642 -0
- data/ext/image_pack/vendor/mozjpeg/rdtarga.c +508 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jccolext-neon.c +148 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jchuff-neon.c +334 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jsimd.c +976 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jsimd_neon.S +1200 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jccolext-neon.c +316 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jchuff-neon.c +411 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jsimd.c +1053 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jsimd_neon.S +2254 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/align.h +28 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jccolor-neon.c +160 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jcgray-neon.c +120 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jcgryext-neon.c +106 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jchuff.h +131 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jcphuff-neon.c +623 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jcsample-neon.c +192 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jdcolext-neon.c +374 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jdcolor-neon.c +141 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jdmerge-neon.c +144 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jdmrgext-neon.c +723 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jdsample-neon.c +569 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jfdctfst-neon.c +214 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jfdctint-neon.c +376 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jidctfst-neon.c +472 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jidctint-neon.c +801 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jidctred-neon.c +486 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/jquanti-neon.c +193 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/neon-compat.h +26 -0
- data/ext/image_pack/vendor/mozjpeg/simd/arm/neon-compat.h.in +37 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-avx2.asm +578 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-mmx.asm +476 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-sse2.asm +503 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-avx2.asm +121 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-mmx.asm +121 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-sse2.asm +120 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-avx2.asm +113 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-mmx.asm +113 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-sse2.asm +112 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-avx2.asm +457 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-mmx.asm +355 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-sse2.asm +382 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jchuff-sse2.asm +761 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcphuff-sse2.asm +662 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-avx2.asm +388 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-mmx.asm +324 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-sse2.asm +351 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-avx2.asm +515 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-mmx.asm +404 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-sse2.asm +458 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-avx2.asm +118 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-mmx.asm +117 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-sse2.asm +117 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-avx2.asm +136 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-mmx.asm +123 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-sse2.asm +135 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-avx2.asm +575 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-mmx.asm +460 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-sse2.asm +517 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-avx2.asm +760 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-mmx.asm +731 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-sse2.asm +724 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctflt-3dn.asm +318 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctflt-sse.asm +369 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctfst-mmx.asm +395 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctfst-sse2.asm +403 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-avx2.asm +331 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-mmx.asm +620 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-sse2.asm +633 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-3dn.asm +451 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-sse.asm +571 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-sse2.asm +497 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctfst-mmx.asm +499 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctfst-sse2.asm +501 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-avx2.asm +453 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-mmx.asm +851 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-sse2.asm +858 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctred-mmx.asm +704 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctred-sse2.asm +592 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jquant-3dn.asm +230 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jquant-mmx.asm +276 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jquant-sse.asm +208 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jquantf-sse2.asm +168 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jquanti-avx2.asm +188 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jquanti-sse2.asm +201 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jsimd.c +1312 -0
- data/ext/image_pack/vendor/mozjpeg/simd/i386/jsimdcpu.asm +135 -0
- data/ext/image_pack/vendor/mozjpeg/simd/jsimd.h +1258 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips/jsimd.c +1143 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips/jsimd_dspr2.S +4543 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips/jsimd_dspr2_asm.h +292 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jccolext-mmi.c +455 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jccolor-mmi.c +148 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcgray-mmi.c +132 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcgryext-mmi.c +374 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcsample-mmi.c +98 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcsample.h +28 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdcolext-mmi.c +415 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdcolor-mmi.c +139 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdmerge-mmi.c +149 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdmrgext-mmi.c +615 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdsample-mmi.c +304 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jfdctfst-mmi.c +255 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jfdctint-mmi.c +398 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jidctfst-mmi.c +395 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jidctint-mmi.c +571 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jquanti-mmi.c +124 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jsimd.c +866 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/jsimd_mmi.h +69 -0
- data/ext/image_pack/vendor/mozjpeg/simd/mips64/loongson-mmintrin.h +1334 -0
- data/ext/image_pack/vendor/mozjpeg/simd/nasm/jcolsamp.inc +135 -0
- data/ext/image_pack/vendor/mozjpeg/simd/nasm/jdct.inc +31 -0
- data/ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdcfg.inc +93 -0
- data/ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdcfg.inc.h +133 -0
- data/ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdext.inc +520 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jccolext-altivec.c +269 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jccolor-altivec.c +116 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcgray-altivec.c +111 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcgryext-altivec.c +228 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcsample-altivec.c +159 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcsample.h +28 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdcolext-altivec.c +276 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdcolor-altivec.c +106 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdmerge-altivec.c +130 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdmrgext-altivec.c +329 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdsample-altivec.c +400 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jfdctfst-altivec.c +154 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jfdctint-altivec.c +258 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jidctfst-altivec.c +255 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jidctint-altivec.c +357 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jquanti-altivec.c +250 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jsimd.c +884 -0
- data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jsimd_altivec.h +98 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolext-avx2.asm +559 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolext-sse2.asm +484 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolor-avx2.asm +121 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolor-sse2.asm +120 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcgray-avx2.asm +113 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcgray-sse2.asm +112 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcgryext-avx2.asm +438 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcgryext-sse2.asm +363 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jchuff-sse2.asm +583 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcphuff-sse2.asm +639 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcsample-avx2.asm +367 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcsample-sse2.asm +330 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdcolext-avx2.asm +496 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdcolext-sse2.asm +439 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdcolor-avx2.asm +118 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdcolor-sse2.asm +117 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdmerge-avx2.asm +136 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdmerge-sse2.asm +135 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdmrgext-avx2.asm +596 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdmrgext-sse2.asm +538 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdsample-avx2.asm +696 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdsample-sse2.asm +665 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jfdctflt-sse.asm +355 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jfdctfst-sse2.asm +389 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jfdctint-avx2.asm +320 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jfdctint-sse2.asm +619 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctflt-sse2.asm +482 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctfst-sse2.asm +491 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctint-avx2.asm +418 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctint-sse2.asm +847 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctred-sse2.asm +574 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jquantf-sse2.asm +155 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jquanti-avx2.asm +163 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jquanti-sse2.asm +188 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jsimd.c +1110 -0
- data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jsimdcpu.asm +86 -0
- data/ext/image_pack/vendor/mozjpeg/strtest.c +170 -0
- data/ext/image_pack/vendor/mozjpeg/structure.txt +900 -0
- data/ext/image_pack/vendor/mozjpeg/tjbench.c +1044 -0
- data/ext/image_pack/vendor/mozjpeg/tjbenchtest.in +256 -0
- data/ext/image_pack/vendor/mozjpeg/tjbenchtest.java.in +215 -0
- data/ext/image_pack/vendor/mozjpeg/tjexample.c +406 -0
- data/ext/image_pack/vendor/mozjpeg/tjexampletest.in +149 -0
- data/ext/image_pack/vendor/mozjpeg/tjexampletest.java.in +151 -0
- data/ext/image_pack/vendor/mozjpeg/tjunittest.c +961 -0
- data/ext/image_pack/vendor/mozjpeg/tjutil.c +70 -0
- data/ext/image_pack/vendor/mozjpeg/tjutil.h +53 -0
- data/ext/image_pack/vendor/mozjpeg/transupp.c +2373 -0
- data/ext/image_pack/vendor/mozjpeg/transupp.h +243 -0
- data/ext/image_pack/vendor/mozjpeg/turbojpeg-jni.c +1259 -0
- data/ext/image_pack/vendor/mozjpeg/turbojpeg.c +2320 -0
- data/ext/image_pack/vendor/mozjpeg/turbojpeg.h +1784 -0
- data/ext/image_pack/vendor/mozjpeg/usage.txt +679 -0
- data/ext/image_pack/vendor/mozjpeg/wizard.txt +220 -0
- data/ext/image_pack/vendor/mozjpeg/wrbmp.c +552 -0
- data/ext/image_pack/vendor/mozjpeg/wrgif.c +580 -0
- data/ext/image_pack/vendor/mozjpeg/wrjpgcom.c +577 -0
- data/ext/image_pack/vendor/mozjpeg/wrppm.c +366 -0
- data/ext/image_pack/vendor/mozjpeg/wrtarga.c +258 -0
- data/ext/image_pack/vendor/mozjpeg/yuvjpeg.c +268 -0
- data/lib/image_pack/backend.rb +8 -0
- data/lib/image_pack/configuration.rb +23 -0
- data/lib/image_pack/errors.rb +13 -0
- data/lib/image_pack/version.rb +5 -0
- data/lib/image_pack.rb +208 -0
- metadata +433 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -u
|
|
4
|
+
set -e
|
|
5
|
+
trap onexit INT
|
|
6
|
+
trap onexit TERM
|
|
7
|
+
trap onexit EXIT
|
|
8
|
+
|
|
9
|
+
onexit()
|
|
10
|
+
{
|
|
11
|
+
if [ -d $OUTDIR ]; then
|
|
12
|
+
rm -rf $OUTDIR
|
|
13
|
+
fi
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
runme()
|
|
17
|
+
{
|
|
18
|
+
echo \*\*\* $*
|
|
19
|
+
$*
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
EXT=bmp
|
|
23
|
+
IMAGES="vgl_5674_0098.${EXT} vgl_6434_0018a.${EXT} vgl_6548_0026a.${EXT} nightshot_iso_100.${EXT}"
|
|
24
|
+
IMGDIR=@CMAKE_CURRENT_SOURCE_DIR@/testimages
|
|
25
|
+
OUTDIR=`mktemp -d /tmp/__tjbenchtest_output.XXXXXX`
|
|
26
|
+
EXEDIR=@CMAKE_CURRENT_BINARY_DIR@
|
|
27
|
+
BMPARG=
|
|
28
|
+
NSARG=
|
|
29
|
+
YUVARG=
|
|
30
|
+
ALLOC=0
|
|
31
|
+
ALLOCARG=
|
|
32
|
+
PROGARG=
|
|
33
|
+
if [ "$EXT" = "bmp" ]; then BMPARG=-bmp; fi
|
|
34
|
+
|
|
35
|
+
if [ -d $OUTDIR ]; then
|
|
36
|
+
rm -rf $OUTDIR
|
|
37
|
+
fi
|
|
38
|
+
mkdir -p $OUTDIR
|
|
39
|
+
|
|
40
|
+
while [ $# -gt 0 ]; do
|
|
41
|
+
case "$1" in
|
|
42
|
+
-yuv)
|
|
43
|
+
NSARG=-nosmooth
|
|
44
|
+
YUVARG=-yuv
|
|
45
|
+
|
|
46
|
+
# NOTE: The combination of tjEncodeYUV*() and tjCompressFromYUV*() does not
|
|
47
|
+
# always produce bitwise-identical results to tjCompress*() if subsampling is
|
|
48
|
+
# enabled. In both cases, if the image width or height are not evenly
|
|
49
|
+
# divisible by the MCU width/height, then the bottom and/or right edge are
|
|
50
|
+
# expanded. However, the libjpeg code performs this expansion prior to
|
|
51
|
+
# downsampling, and TurboJPEG performs it in tjCompressFromYUV*(), which is
|
|
52
|
+
# after downsampling. Thus, the two will agree only if the width/height along
|
|
53
|
+
# each downsampled dimension is an odd number or is evenly divisible by the MCU
|
|
54
|
+
# width/height. This disagreement basically amounts to a round-off error, but
|
|
55
|
+
# there is no easy way around it, so for now, we just test the only image that
|
|
56
|
+
# works. (NOTE: nightshot_iso_100 does not suffer from the above issue, but
|
|
57
|
+
# it suffers from an unrelated problem whereby the combination of
|
|
58
|
+
# tjDecompressToYUV*() and tjDecodeYUV*() do not produce bitwise-identical
|
|
59
|
+
# results to tjDecompress*() if decompression scaling is enabled. This latter
|
|
60
|
+
# phenomenon is not yet fully understood but is also believed to be some sort
|
|
61
|
+
# of round-off error.)
|
|
62
|
+
IMAGES="vgl_6548_0026a.${EXT}"
|
|
63
|
+
;;
|
|
64
|
+
-alloc)
|
|
65
|
+
ALLOCARG=-alloc
|
|
66
|
+
ALLOC=1
|
|
67
|
+
;;
|
|
68
|
+
-progressive)
|
|
69
|
+
PROGARG=-progressive
|
|
70
|
+
;;
|
|
71
|
+
esac
|
|
72
|
+
shift
|
|
73
|
+
done
|
|
74
|
+
|
|
75
|
+
exec >$EXEDIR/tjbenchtest$YUVARG$ALLOCARG$PROGARG.log
|
|
76
|
+
|
|
77
|
+
# Standard tests
|
|
78
|
+
for image in $IMAGES; do
|
|
79
|
+
|
|
80
|
+
cp $IMGDIR/$image $OUTDIR
|
|
81
|
+
basename=`basename $image .${EXT}`
|
|
82
|
+
runme $EXEDIR/cjpeg -quality 95 -dct fast $PROGARG -grayscale -outfile $OUTDIR/${basename}_GRAY_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
83
|
+
runme $EXEDIR/cjpeg -quality 95 -dct fast $PROGARG -sample 2x2 -outfile $OUTDIR/${basename}_420_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
84
|
+
runme $EXEDIR/cjpeg -quality 95 -dct fast $PROGARG -sample 2x1 -outfile $OUTDIR/${basename}_422_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
85
|
+
runme $EXEDIR/cjpeg -quality 95 -dct fast $PROGARG -sample 1x1 -outfile $OUTDIR/${basename}_444_fast_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
86
|
+
runme $EXEDIR/cjpeg -quality 95 -dct int $PROGARG -grayscale -outfile $OUTDIR/${basename}_GRAY_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
87
|
+
runme $EXEDIR/cjpeg -quality 95 -dct int $PROGARG -sample 2x2 -outfile $OUTDIR/${basename}_420_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
88
|
+
runme $EXEDIR/cjpeg -quality 95 -dct int $PROGARG -sample 2x1 -outfile $OUTDIR/${basename}_422_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
89
|
+
runme $EXEDIR/cjpeg -quality 95 -dct int $PROGARG -sample 1x1 -outfile $OUTDIR/${basename}_444_accurate_cjpeg.jpg $IMGDIR/${basename}.${EXT}
|
|
90
|
+
for samp in GRAY 420 422 444; do
|
|
91
|
+
runme $EXEDIR/djpeg -rgb $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_default_djpeg.${EXT} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg
|
|
92
|
+
runme $EXEDIR/djpeg -dct fast -rgb $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_fast_djpeg.${EXT} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg
|
|
93
|
+
runme $EXEDIR/djpeg -dct int -rgb $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_accurate_djpeg.${EXT} $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
|
|
94
|
+
done
|
|
95
|
+
for samp in 420 422; do
|
|
96
|
+
runme $EXEDIR/djpeg -nosmooth $BMPARG -outfile $OUTDIR/${basename}_${samp}_default_nosmooth_djpeg.${EXT} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg
|
|
97
|
+
runme $EXEDIR/djpeg -dct fast -nosmooth $BMPARG -outfile $OUTDIR/${basename}_${samp}_fast_nosmooth_djpeg.${EXT} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg
|
|
98
|
+
runme $EXEDIR/djpeg -dct int -nosmooth $BMPARG -outfile $OUTDIR/${basename}_${samp}_accurate_nosmooth_djpeg.${EXT} $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
|
|
99
|
+
done
|
|
100
|
+
|
|
101
|
+
# Compression
|
|
102
|
+
for dct in accurate fast; do
|
|
103
|
+
runme $EXEDIR/tjbench $OUTDIR/$image 95 -rgb -quiet -benchtime 0.01 -warmup 0 -${dct}dct $YUVARG $ALLOCARG $PROGARG
|
|
104
|
+
for samp in GRAY 420 422 444; do
|
|
105
|
+
runme cmp $OUTDIR/${basename}_${samp}_Q95.jpg $OUTDIR/${basename}_${samp}_${dct}_cjpeg.jpg
|
|
106
|
+
done
|
|
107
|
+
done
|
|
108
|
+
|
|
109
|
+
for dct in fast accurate default; do
|
|
110
|
+
dctarg=-${dct}dct
|
|
111
|
+
if [ "${dct}" = "default" ]; then
|
|
112
|
+
dctarg=
|
|
113
|
+
fi
|
|
114
|
+
|
|
115
|
+
# Tiled compression & decompression
|
|
116
|
+
runme $EXEDIR/tjbench $OUTDIR/$image 95 -rgb -tile -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $PROGARG
|
|
117
|
+
for samp in GRAY 444; do
|
|
118
|
+
if [ $ALLOC = 1 ]; then
|
|
119
|
+
runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
|
|
120
|
+
rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
|
|
121
|
+
else
|
|
122
|
+
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
|
|
123
|
+
$OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
|
|
124
|
+
runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
|
|
125
|
+
rm $i
|
|
126
|
+
done
|
|
127
|
+
fi
|
|
128
|
+
done
|
|
129
|
+
runme $EXEDIR/tjbench $OUTDIR/$image 95 -rgb -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample ${dctarg} $YUVARG $ALLOCARG $PROGARG
|
|
130
|
+
for samp in 420 422; do
|
|
131
|
+
if [ $ALLOC = 1 ]; then
|
|
132
|
+
runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
|
|
133
|
+
rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
|
|
134
|
+
else
|
|
135
|
+
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
|
|
136
|
+
$OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
|
|
137
|
+
runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
|
|
138
|
+
rm $i
|
|
139
|
+
done
|
|
140
|
+
fi
|
|
141
|
+
done
|
|
142
|
+
|
|
143
|
+
# Tiled decompression
|
|
144
|
+
for samp in GRAY 444; do
|
|
145
|
+
runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -tile -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $ALLOCARG $PROGARG
|
|
146
|
+
if [ $ALLOC = 1 ]; then
|
|
147
|
+
runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
|
|
148
|
+
rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
|
|
149
|
+
else
|
|
150
|
+
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
|
|
151
|
+
$OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
|
|
152
|
+
runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_djpeg.${EXT}
|
|
153
|
+
rm $i
|
|
154
|
+
done
|
|
155
|
+
fi
|
|
156
|
+
done
|
|
157
|
+
for samp in 420 422; do
|
|
158
|
+
runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample ${dctarg} $YUVARG $ALLOCARG $PROGARG
|
|
159
|
+
if [ $ALLOC = 1 ]; then
|
|
160
|
+
runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
|
|
161
|
+
rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
|
|
162
|
+
else
|
|
163
|
+
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
|
|
164
|
+
$OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
|
|
165
|
+
runme cmp $i $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.${EXT}
|
|
166
|
+
rm $i
|
|
167
|
+
done
|
|
168
|
+
fi
|
|
169
|
+
done
|
|
170
|
+
done
|
|
171
|
+
|
|
172
|
+
# Scaled decompression
|
|
173
|
+
for scale in 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8; do
|
|
174
|
+
scalearg=`echo $scale | sed 's/\_/\//g'`
|
|
175
|
+
for samp in GRAY 420 422 444; do
|
|
176
|
+
runme $EXEDIR/djpeg -rgb -scale ${scalearg} $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_${scale}_djpeg.${EXT} $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg
|
|
177
|
+
runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -scale ${scalearg} -quiet -benchtime 0.01 -warmup 0 $YUVARG $ALLOCARG $PROGARG
|
|
178
|
+
runme cmp $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT} $OUTDIR/${basename}_${samp}_${scale}_djpeg.${EXT}
|
|
179
|
+
rm $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT}
|
|
180
|
+
done
|
|
181
|
+
done
|
|
182
|
+
|
|
183
|
+
# Transforms
|
|
184
|
+
for samp in GRAY 420 422 444; do
|
|
185
|
+
runme $EXEDIR/jpegtran -flip horizontal -trim -outfile $OUTDIR/${basename}_${samp}_hflip_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
186
|
+
runme $EXEDIR/jpegtran -flip vertical -trim -outfile $OUTDIR/${basename}_${samp}_vflip_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
187
|
+
runme $EXEDIR/jpegtran -transpose -trim -outfile $OUTDIR/${basename}_${samp}_transpose_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
188
|
+
runme $EXEDIR/jpegtran -transverse -trim -outfile $OUTDIR/${basename}_${samp}_transverse_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
189
|
+
runme $EXEDIR/jpegtran -rotate 90 -trim -outfile $OUTDIR/${basename}_${samp}_rot90_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
190
|
+
runme $EXEDIR/jpegtran -rotate 180 -trim -outfile $OUTDIR/${basename}_${samp}_rot180_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
191
|
+
runme $EXEDIR/jpegtran -rotate 270 -trim -outfile $OUTDIR/${basename}_${samp}_rot270_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
192
|
+
done
|
|
193
|
+
for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
|
|
194
|
+
for samp in GRAY 444; do
|
|
195
|
+
runme $EXEDIR/djpeg -rgb $BMPARG -outfile $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
|
|
196
|
+
runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -tile -quiet -benchtime 0.01 -warmup 0 $YUVARG $ALLOCARG $PROGARG
|
|
197
|
+
if [ $ALLOC = 1 ]; then
|
|
198
|
+
runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT}
|
|
199
|
+
rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
|
|
200
|
+
else
|
|
201
|
+
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
|
|
202
|
+
$OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
|
|
203
|
+
runme cmp $i $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT}
|
|
204
|
+
rm $i
|
|
205
|
+
done
|
|
206
|
+
fi
|
|
207
|
+
done
|
|
208
|
+
for samp in 420 422; do
|
|
209
|
+
runme $EXEDIR/djpeg -nosmooth -rgb $BMPARG -outfile $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
|
|
210
|
+
runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample $YUVARG $ALLOCARG $PROGARG
|
|
211
|
+
if [ $ALLOC = 1 ]; then
|
|
212
|
+
runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT}
|
|
213
|
+
rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
|
|
214
|
+
else
|
|
215
|
+
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
|
|
216
|
+
$OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
|
|
217
|
+
runme cmp $i $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT}
|
|
218
|
+
rm $i
|
|
219
|
+
done
|
|
220
|
+
fi
|
|
221
|
+
done
|
|
222
|
+
done
|
|
223
|
+
|
|
224
|
+
# Grayscale transform
|
|
225
|
+
for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
|
|
226
|
+
for samp in GRAY 444 422 420; do
|
|
227
|
+
runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -tile -quiet -benchtime 0.01 -warmup 0 -grayscale $YUVARG $ALLOCARG $PROGARG
|
|
228
|
+
if [ $ALLOC = 1 ]; then
|
|
229
|
+
runme cmp $OUTDIR/${basename}_${samp}_Q95_full.${EXT} $OUTDIR/${basename}_GRAY_${xform}_jpegtran.${EXT}
|
|
230
|
+
rm $OUTDIR/${basename}_${samp}_Q95_full.${EXT}
|
|
231
|
+
else
|
|
232
|
+
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
|
|
233
|
+
$OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
|
|
234
|
+
runme cmp $i $OUTDIR/${basename}_GRAY_${xform}_jpegtran.${EXT}
|
|
235
|
+
rm $i
|
|
236
|
+
done
|
|
237
|
+
fi
|
|
238
|
+
done
|
|
239
|
+
done
|
|
240
|
+
|
|
241
|
+
# Transforms with scaling
|
|
242
|
+
for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
|
|
243
|
+
for samp in GRAY 444 422 420; do
|
|
244
|
+
for scale in 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8; do
|
|
245
|
+
scalearg=`echo $scale | sed 's/\_/\//g'`
|
|
246
|
+
runme $EXEDIR/djpeg -rgb -scale ${scalearg} $NSARG $BMPARG -outfile $OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.${EXT} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
|
|
247
|
+
runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -scale ${scalearg} -quiet -benchtime 0.01 -warmup 0 $YUVARG $ALLOCARG $PROGARG
|
|
248
|
+
runme cmp $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT} $OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.${EXT}
|
|
249
|
+
rm $OUTDIR/${basename}_${samp}_Q95_${scale}.${EXT}
|
|
250
|
+
done
|
|
251
|
+
done
|
|
252
|
+
done
|
|
253
|
+
|
|
254
|
+
done
|
|
255
|
+
|
|
256
|
+
echo SUCCESS!
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -u
|
|
4
|
+
set -e
|
|
5
|
+
trap onexit INT
|
|
6
|
+
trap onexit TERM
|
|
7
|
+
trap onexit EXIT
|
|
8
|
+
|
|
9
|
+
onexit()
|
|
10
|
+
{
|
|
11
|
+
if [ -d $OUTDIR ]; then
|
|
12
|
+
rm -rf $OUTDIR
|
|
13
|
+
fi
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
runme()
|
|
17
|
+
{
|
|
18
|
+
echo \*\*\* $*
|
|
19
|
+
"$@"
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
IMAGES="vgl_5674_0098.bmp vgl_6434_0018a.bmp vgl_6548_0026a.bmp nightshot_iso_100.bmp"
|
|
23
|
+
IMGDIR=@CMAKE_CURRENT_SOURCE_DIR@/testimages
|
|
24
|
+
OUTDIR=`mktemp -d /tmp/__tjbenchtest_java_output.XXXXXX`
|
|
25
|
+
EXEDIR=@CMAKE_CURRENT_BINARY_DIR@
|
|
26
|
+
JAVA="@Java_JAVA_EXECUTABLE@"
|
|
27
|
+
JAVAARGS="-cp $EXEDIR/java/turbojpeg.jar -Djava.library.path=$EXEDIR"
|
|
28
|
+
BMPARG=
|
|
29
|
+
NSARG=
|
|
30
|
+
YUVARG=
|
|
31
|
+
PROGARG=
|
|
32
|
+
|
|
33
|
+
if [ -d $OUTDIR ]; then
|
|
34
|
+
rm -rf $OUTDIR
|
|
35
|
+
fi
|
|
36
|
+
mkdir -p $OUTDIR
|
|
37
|
+
|
|
38
|
+
while [ $# -gt 0 ]; do
|
|
39
|
+
case "$1" in
|
|
40
|
+
-yuv)
|
|
41
|
+
NSARG=-nosmooth
|
|
42
|
+
YUVARG=-yuv
|
|
43
|
+
|
|
44
|
+
# NOTE: The combination of tjEncodeYUV*() and tjCompressFromYUV*() does not
|
|
45
|
+
# always produce bitwise-identical results to tjCompress*() if subsampling is
|
|
46
|
+
# enabled. In both cases, if the image width or height are not evenly
|
|
47
|
+
# divisible by the MCU width/height, then the bottom and/or right edge are
|
|
48
|
+
# expanded. However, the libjpeg code performs this expansion prior to
|
|
49
|
+
# downsampling, and TurboJPEG performs it in tjCompressFromYUV*(), which is
|
|
50
|
+
# after downsampling. Thus, the two will agree only if the width/height along
|
|
51
|
+
# each downsampled dimension is an odd number or is evenly divisible by the MCU
|
|
52
|
+
# width/height. This disagreement basically amounts to a round-off error, but
|
|
53
|
+
# there is no easy way around it, so for now, we just test the only image that
|
|
54
|
+
# works. (NOTE: nightshot_iso_100 does not suffer from the above issue, but
|
|
55
|
+
# it suffers from an unrelated problem whereby the combination of
|
|
56
|
+
# tjDecompressToYUV*() and tjDecodeYUV*() do not produce bitwise-identical
|
|
57
|
+
# results to tjDecompress*() if decompression scaling is enabled. This latter
|
|
58
|
+
# phenomenon is not yet fully understood but is also believed to be some sort
|
|
59
|
+
# of round-off error.)
|
|
60
|
+
IMAGES="vgl_6548_0026a.bmp"
|
|
61
|
+
;;
|
|
62
|
+
-progressive)
|
|
63
|
+
PROGARG=-progressive
|
|
64
|
+
;;
|
|
65
|
+
esac
|
|
66
|
+
shift
|
|
67
|
+
done
|
|
68
|
+
|
|
69
|
+
exec >$EXEDIR/tjbenchtest-java$YUVARG$PROGARG.log
|
|
70
|
+
|
|
71
|
+
# Standard tests
|
|
72
|
+
for image in $IMAGES; do
|
|
73
|
+
|
|
74
|
+
cp $IMGDIR/$image $OUTDIR
|
|
75
|
+
basename=`basename $image .bmp`
|
|
76
|
+
runme $EXEDIR/cjpeg -quality 95 -dct fast $PROGARG -grayscale -outfile $OUTDIR/${basename}_GRAY_fast_cjpeg.jpg $IMGDIR/${basename}.bmp
|
|
77
|
+
runme $EXEDIR/cjpeg -quality 95 -dct fast $PROGARG -sample 2x2 -outfile $OUTDIR/${basename}_420_fast_cjpeg.jpg $IMGDIR/${basename}.bmp
|
|
78
|
+
runme $EXEDIR/cjpeg -quality 95 -dct fast $PROGARG -sample 2x1 -outfile $OUTDIR/${basename}_422_fast_cjpeg.jpg $IMGDIR/${basename}.bmp
|
|
79
|
+
runme $EXEDIR/cjpeg -quality 95 -dct fast $PROGARG -sample 1x1 -outfile $OUTDIR/${basename}_444_fast_cjpeg.jpg $IMGDIR/${basename}.bmp
|
|
80
|
+
runme $EXEDIR/cjpeg -quality 95 -dct int $PROGARG -grayscale -outfile $OUTDIR/${basename}_GRAY_accurate_cjpeg.jpg $IMGDIR/${basename}.bmp
|
|
81
|
+
runme $EXEDIR/cjpeg -quality 95 -dct int $PROGARG -sample 2x2 -outfile $OUTDIR/${basename}_420_accurate_cjpeg.jpg $IMGDIR/${basename}.bmp
|
|
82
|
+
runme $EXEDIR/cjpeg -quality 95 -dct int $PROGARG -sample 2x1 -outfile $OUTDIR/${basename}_422_accurate_cjpeg.jpg $IMGDIR/${basename}.bmp
|
|
83
|
+
runme $EXEDIR/cjpeg -quality 95 -dct int $PROGARG -sample 1x1 -outfile $OUTDIR/${basename}_444_accurate_cjpeg.jpg $IMGDIR/${basename}.bmp
|
|
84
|
+
for samp in GRAY 420 422 444; do
|
|
85
|
+
runme $EXEDIR/djpeg -rgb -bmp -outfile $OUTDIR/${basename}_${samp}_default_djpeg.bmp $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg
|
|
86
|
+
runme $EXEDIR/djpeg -dct fast -rgb -bmp -outfile $OUTDIR/${basename}_${samp}_fast_djpeg.bmp $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg
|
|
87
|
+
runme $EXEDIR/djpeg -dct int -rgb -bmp -outfile $OUTDIR/${basename}_${samp}_accurate_djpeg.bmp $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
|
|
88
|
+
done
|
|
89
|
+
for samp in 420 422; do
|
|
90
|
+
runme $EXEDIR/djpeg -nosmooth -bmp -outfile $OUTDIR/${basename}_${samp}_default_nosmooth_djpeg.bmp $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg
|
|
91
|
+
runme $EXEDIR/djpeg -dct fast -nosmooth -bmp -outfile $OUTDIR/${basename}_${samp}_fast_nosmooth_djpeg.bmp $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg
|
|
92
|
+
runme $EXEDIR/djpeg -dct int -nosmooth -bmp -outfile $OUTDIR/${basename}_${samp}_accurate_nosmooth_djpeg.bmp $OUTDIR/${basename}_${samp}_accurate_cjpeg.jpg
|
|
93
|
+
done
|
|
94
|
+
|
|
95
|
+
# Compression
|
|
96
|
+
for dct in accurate fast; do
|
|
97
|
+
runme "$JAVA" $JAVAARGS TJBench $OUTDIR/$image 95 -rgb -quiet -benchtime 0.01 -warmup 0 -${dct}dct $YUVARG $PROGARG
|
|
98
|
+
for samp in GRAY 420 422 444; do
|
|
99
|
+
runme cmp $OUTDIR/${basename}_${samp}_Q95.jpg $OUTDIR/${basename}_${samp}_${dct}_cjpeg.jpg
|
|
100
|
+
done
|
|
101
|
+
done
|
|
102
|
+
|
|
103
|
+
for dct in fast accurate default; do
|
|
104
|
+
dctarg=-${dct}dct
|
|
105
|
+
if [ "${dct}" = "default" ]; then
|
|
106
|
+
dctarg=
|
|
107
|
+
fi
|
|
108
|
+
|
|
109
|
+
# Tiled compression & decompression
|
|
110
|
+
runme "$JAVA" $JAVAARGS TJBench $OUTDIR/$image 95 -rgb -tile -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $PROGARG
|
|
111
|
+
for samp in GRAY 444; do
|
|
112
|
+
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].bmp \
|
|
113
|
+
$OUTDIR/${basename}_${samp}_Q95_full.bmp; do
|
|
114
|
+
runme cmp -i 54:54 $i $OUTDIR/${basename}_${samp}_${dct}_djpeg.bmp
|
|
115
|
+
rm $i
|
|
116
|
+
done
|
|
117
|
+
done
|
|
118
|
+
runme "$JAVA" $JAVAARGS TJBench $OUTDIR/$image 95 -rgb -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample ${dctarg} $YUVARG $PROGARG
|
|
119
|
+
for samp in 420 422; do
|
|
120
|
+
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].bmp \
|
|
121
|
+
$OUTDIR/${basename}_${samp}_Q95_full.bmp; do
|
|
122
|
+
runme cmp -i 54:54 $i $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.bmp
|
|
123
|
+
rm $i
|
|
124
|
+
done
|
|
125
|
+
done
|
|
126
|
+
|
|
127
|
+
# Tiled decompression
|
|
128
|
+
for samp in GRAY 444; do
|
|
129
|
+
runme "$JAVA" $JAVAARGS TJBench $OUTDIR/${basename}_${samp}_Q95.jpg -tile -quiet -benchtime 0.01 -warmup 0 ${dctarg} $YUVARG $PROGARG
|
|
130
|
+
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].bmp \
|
|
131
|
+
$OUTDIR/${basename}_${samp}_Q95_full.bmp; do
|
|
132
|
+
runme cmp -i 54:54 $i $OUTDIR/${basename}_${samp}_${dct}_djpeg.bmp
|
|
133
|
+
rm $i
|
|
134
|
+
done
|
|
135
|
+
done
|
|
136
|
+
for samp in 420 422; do
|
|
137
|
+
runme "$JAVA" $JAVAARGS TJBench $OUTDIR/${basename}_${samp}_Q95.jpg -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample ${dctarg} $YUVARG $PROGARG
|
|
138
|
+
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].bmp \
|
|
139
|
+
$OUTDIR/${basename}_${samp}_Q95_full.bmp; do
|
|
140
|
+
runme cmp $i -i 54:54 $OUTDIR/${basename}_${samp}_${dct}_nosmooth_djpeg.bmp
|
|
141
|
+
rm $i
|
|
142
|
+
done
|
|
143
|
+
done
|
|
144
|
+
done
|
|
145
|
+
|
|
146
|
+
# Scaled decompression
|
|
147
|
+
for scale in 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8; do
|
|
148
|
+
scalearg=`echo $scale | sed 's/\_/\//g'`
|
|
149
|
+
for samp in GRAY 420 422 444; do
|
|
150
|
+
runme $EXEDIR/djpeg -rgb -scale ${scalearg} $NSARG -bmp -outfile $OUTDIR/${basename}_${samp}_${scale}_djpeg.bmp $OUTDIR/${basename}_${samp}_fast_cjpeg.jpg
|
|
151
|
+
runme "$JAVA" $JAVAARGS TJBench $OUTDIR/${basename}_${samp}_Q95.jpg -scale ${scalearg} -quiet -benchtime 0.01 -warmup 0 $YUVARG $PROGARG
|
|
152
|
+
runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_Q95_${scale}.bmp $OUTDIR/${basename}_${samp}_${scale}_djpeg.bmp
|
|
153
|
+
rm $OUTDIR/${basename}_${samp}_Q95_${scale}.bmp
|
|
154
|
+
done
|
|
155
|
+
done
|
|
156
|
+
|
|
157
|
+
# Transforms
|
|
158
|
+
for samp in GRAY 420 422 444; do
|
|
159
|
+
runme $EXEDIR/jpegtran -flip horizontal -trim -outfile $OUTDIR/${basename}_${samp}_hflip_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
160
|
+
runme $EXEDIR/jpegtran -flip vertical -trim -outfile $OUTDIR/${basename}_${samp}_vflip_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
161
|
+
runme $EXEDIR/jpegtran -transpose -trim -outfile $OUTDIR/${basename}_${samp}_transpose_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
162
|
+
runme $EXEDIR/jpegtran -transverse -trim -outfile $OUTDIR/${basename}_${samp}_transverse_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
163
|
+
runme $EXEDIR/jpegtran -rotate 90 -trim -outfile $OUTDIR/${basename}_${samp}_rot90_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
164
|
+
runme $EXEDIR/jpegtran -rotate 180 -trim -outfile $OUTDIR/${basename}_${samp}_rot180_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
165
|
+
runme $EXEDIR/jpegtran -rotate 270 -trim -outfile $OUTDIR/${basename}_${samp}_rot270_jpegtran.jpg $OUTDIR/${basename}_${samp}_Q95.jpg
|
|
166
|
+
done
|
|
167
|
+
for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
|
|
168
|
+
for samp in GRAY 444; do
|
|
169
|
+
runme $EXEDIR/djpeg -rgb -bmp -outfile $OUTDIR/${basename}_${samp}_${xform}_jpegtran.bmp $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
|
|
170
|
+
runme "$JAVA" $JAVAARGS TJBench $OUTDIR/${basename}_${samp}_Q95.jpg -$xform -tile -quiet -benchtime 0.01 -warmup 0 $YUVARG $PROGARG
|
|
171
|
+
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].bmp \
|
|
172
|
+
$OUTDIR/${basename}_${samp}_Q95_full.bmp; do
|
|
173
|
+
runme cmp -i 54:54 $i $OUTDIR/${basename}_${samp}_${xform}_jpegtran.bmp
|
|
174
|
+
rm $i
|
|
175
|
+
done
|
|
176
|
+
done
|
|
177
|
+
for samp in 420 422; do
|
|
178
|
+
runme $EXEDIR/djpeg -nosmooth -rgb -bmp -outfile $OUTDIR/${basename}_${samp}_${xform}_jpegtran.bmp $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
|
|
179
|
+
runme "$JAVA" $JAVAARGS TJBench $OUTDIR/${basename}_${samp}_Q95.jpg -$xform -tile -quiet -benchtime 0.01 -warmup 0 -fastupsample $YUVARG $PROGARG
|
|
180
|
+
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].bmp \
|
|
181
|
+
$OUTDIR/${basename}_${samp}_Q95_full.bmp; do
|
|
182
|
+
runme cmp -i 54:54 $i $OUTDIR/${basename}_${samp}_${xform}_jpegtran.bmp
|
|
183
|
+
rm $i
|
|
184
|
+
done
|
|
185
|
+
done
|
|
186
|
+
done
|
|
187
|
+
|
|
188
|
+
# Grayscale transform
|
|
189
|
+
for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
|
|
190
|
+
for samp in GRAY 444 422 420; do
|
|
191
|
+
runme "$JAVA" $JAVAARGS TJBench $OUTDIR/${basename}_${samp}_Q95.jpg -$xform -tile -quiet -benchtime 0.01 -warmup 0 -grayscale $YUVARG $PROGARG
|
|
192
|
+
for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].bmp \
|
|
193
|
+
$OUTDIR/${basename}_${samp}_Q95_full.bmp; do
|
|
194
|
+
runme cmp -i 54:54 $i $OUTDIR/${basename}_GRAY_${xform}_jpegtran.bmp
|
|
195
|
+
rm $i
|
|
196
|
+
done
|
|
197
|
+
done
|
|
198
|
+
done
|
|
199
|
+
|
|
200
|
+
# Transforms with scaling
|
|
201
|
+
for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
|
|
202
|
+
for samp in GRAY 444 422 420; do
|
|
203
|
+
for scale in 2_1 15_8 7_4 13_8 3_2 11_8 5_4 9_8 7_8 3_4 5_8 1_2 3_8 1_4 1_8; do
|
|
204
|
+
scalearg=`echo $scale | sed 's/\_/\//g'`
|
|
205
|
+
runme $EXEDIR/djpeg -rgb -scale ${scalearg} $NSARG -bmp -outfile $OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.bmp $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
|
|
206
|
+
runme "$JAVA" $JAVAARGS TJBench $OUTDIR/${basename}_${samp}_Q95.jpg -$xform -scale ${scalearg} -quiet -benchtime 0.01 -warmup 0 $YUVARG $PROGARG
|
|
207
|
+
runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_Q95_${scale}.bmp $OUTDIR/${basename}_${samp}_${xform}_${scale}_jpegtran.bmp
|
|
208
|
+
rm $OUTDIR/${basename}_${samp}_Q95_${scale}.bmp
|
|
209
|
+
done
|
|
210
|
+
done
|
|
211
|
+
done
|
|
212
|
+
|
|
213
|
+
done
|
|
214
|
+
|
|
215
|
+
echo SUCCESS!
|