epeg 1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +4 -0
- data/MANIFEST +5 -0
- data/TODO +1 -0
- data/epeg/.dockerignore +4 -0
- data/epeg/.gitignore +5 -0
- data/epeg/CMakeLists.txt +30 -0
- data/epeg/Dockerfile +23 -0
- data/epeg/Epeg.h +90 -0
- data/epeg/README.md +42 -0
- data/epeg/epeg_main.c +1642 -0
- data/epeg/epeg_private.h +85 -0
- data/epeg/example/.gitignore +1 -0
- data/epeg/example/CMakeLists.txt +20 -0
- data/epeg/example/example.jpg +0 -0
- data/epeg/example/rotatetest.c +29 -0
- data/epeg/example/scaletest.c +48 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/BUILDING.md +828 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/CMakeLists.txt +1420 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/ChangeLog.md +1494 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/LICENSE.md +132 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/README.ijg +277 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/README.md +356 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/cderror.h +137 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/cdjpeg.c +145 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/cdjpeg.h +157 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/change.log +315 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/cjpeg.1 +354 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/cjpeg.c +695 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/cmakescripts/BuildPackages.cmake +182 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/cmakescripts/GNUInstallDirs.cmake +416 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/cmakescripts/cmake_uninstall.cmake.in +24 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/cmakescripts/testclean.cmake +41 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/cmyk.h +61 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/coderules.txt +78 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/djpeg.1 +296 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/djpeg.c +822 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/annotated.html +104 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/bc_s.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/bdwn.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/classes.html +106 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/closed.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/doxygen-extra.css +3 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/doxygen.css +1184 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/doxygen.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/dynsections.js +97 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2blank.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2cl.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2doc.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2folderclosed.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2folderopen.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2lastnode.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2link.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2mlastnode.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2mnode.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2mo.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2node.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2ns.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2plastnode.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2pnode.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2splitbar.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2vertline.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/functions.html +134 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/functions_vars.html +134 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/group___turbo_j_p_e_g.html +2775 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/index.html +90 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/jquery.js +8 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/modules.html +95 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/nav_f.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/nav_g.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/nav_h.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/open.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_63.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_63.js +4 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_64.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_64.js +5 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_68.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_68.js +4 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_6e.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_6e.js +4 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_6f.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_6f.js +5 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_72.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_72.js +4 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_74.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_74.js +102 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_77.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_77.js +4 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_78.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_78.js +4 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_79.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_79.js +4 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/classes_74.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/classes_74.js +6 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/close.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/enums_74.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/enums_74.js +8 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/enumvalues_74.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/enumvalues_74.js +37 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/functions_74.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/functions_74.js +31 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/groups_74.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/groups_74.js +4 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/mag_sel.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/nomatches.html +12 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search.css +271 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search.js +809 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search_l.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search_m.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search_r.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/typedefs_74.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/typedefs_74.js +5 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_63.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_63.js +4 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_64.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_64.js +5 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_68.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_68.js +4 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_6e.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_6e.js +4 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_6f.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_6f.js +5 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_72.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_72.js +4 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_74.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_74.js +10 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_77.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_77.js +4 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_78.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_78.js +4 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_79.html +26 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_79.js +4 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/structtjregion.html +186 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/structtjscalingfactor.html +148 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/structtjtransform.html +212 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/sync_off.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/sync_on.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tab_a.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tab_b.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tab_h.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tab_s.png +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tabs.css +60 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doxygen-extra.css +3 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/doxygen.config +16 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/example.txt +464 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jaricom.c +157 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/CMakeLists.txt +88 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/MANIFEST.MF +2 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/README +52 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/TJBench.java +1021 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/TJExample.java +405 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/TJUnitTest.java +960 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/allclasses-frame.html +24 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/allclasses-noframe.html +24 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/constant-values.html +532 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/deprecated-list.html +252 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/help-doc.html +210 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/index-all.html +1029 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/index.html +71 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJ.html +1356 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJCompressor.html +926 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJCustomFilter.html +241 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJDecompressor.html +1255 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJException.html +340 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJScalingFactor.html +343 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJTransform.html +751 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJTransformer.html +421 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/YUVImage.html +765 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/package-frame.html +31 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/package-summary.html +202 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/package-tree.html +160 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/overview-tree.html +164 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/package-list +1 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/resources/background.gif +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/resources/tab.gif +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/resources/titlebar.gif +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/resources/titlebar_end.gif +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/script.js +30 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/serialized-form.html +176 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/stylesheet.css +474 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJ.java +584 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJCompressor.java +677 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJCustomFilter.java +76 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJDecompressor.java +931 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJException.java +78 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJLoader-unix.java.in +59 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJLoader-win.java.in +35 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJScalingFactor.java +115 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJTransform.java +227 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJTransformer.java +163 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/YUVImage.java +445 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/org_libjpegturbo_turbojpeg_TJ.h +129 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/org_libjpegturbo_turbojpeg_TJCompressor.h +101 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/org_libjpegturbo_turbojpeg_TJDecompressor.h +101 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/java/org_libjpegturbo_turbojpeg_TJTransformer.h +29 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jcapimin.c +295 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jcapistd.c +162 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jcarith.c +932 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jccoefct.c +449 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jccolext.c +144 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jccolor.c +710 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jcdctmgr.c +721 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jchuff.c +1096 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jchuff.h +42 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jcicc.c +105 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jcinit.c +77 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jcmainct.c +162 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jcmarker.c +664 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jcmaster.c +640 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jcomapi.c +109 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jconfig.h.in +73 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jconfig.txt +143 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jconfigint.h.in +31 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jcparam.c +541 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jcphuff.c +1105 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jcprepct.c +351 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jcsample.c +539 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jcstest.c +126 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jctrans.c +400 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdapimin.c +407 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdapistd.c +639 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdarith.c +773 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdatadst-tj.c +203 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdatadst.c +293 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdatasrc-tj.c +194 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdatasrc.c +295 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdcoefct.c +692 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdcoefct.h +82 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdcol565.c +384 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdcolext.c +143 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdcolor.c +883 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdct.h +208 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jddctmgr.c +352 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdhuff.c +831 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdhuff.h +238 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdicc.c +171 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdinput.c +408 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdmainct.c +460 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdmainct.h +71 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdmarker.c +1377 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdmaster.c +737 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdmaster.h +28 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdmerge.c +617 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdmrg565.c +354 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdmrgext.c +184 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdphuff.c +687 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdpostct.c +294 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdsample.c +518 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdsample.h +50 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jdtrans.c +155 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jerror.c +251 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jerror.h +316 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jfdctflt.c +169 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jfdctfst.c +227 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jfdctint.c +288 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jidctflt.c +240 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jidctfst.c +371 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jidctint.c +2627 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jidctred.c +409 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jinclude.h +88 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jmemmgr.c +1179 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jmemnobs.c +115 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jmemsys.h +178 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jmorecfg.h +421 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jpeg_nbits_table.h +4098 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jpegcomp.h +31 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jpegint.h +368 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jpeglib.h +1132 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jpegtran.1 +295 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jpegtran.c +601 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jquant1.c +859 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jquant2.c +1285 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jsimd.h +117 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jsimd_none.c +418 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jsimddct.h +70 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jstdhuff.c +143 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jutils.c +133 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/jversion.h +52 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/libjpeg.map.in +11 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/libjpeg.txt +3144 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/md5/CMakeLists.txt +1 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/md5/md5.c +275 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/md5/md5.h +57 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/md5/md5cmp.c +59 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/md5/md5hl.c +125 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/rdbmp.c +689 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/rdcolmap.c +254 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/rdgif.c +39 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/rdjpgcom.1 +63 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/rdjpgcom.c +510 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/rdppm.c +766 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/rdrle.c +389 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/rdswitch.c +424 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/rdtarga.c +509 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/release/Distribution.xml.in +24 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/release/License.rtf +20 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/release/ReadMe.txt +5 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/release/Welcome.rtf +17 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/release/deb-control.in +31 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/release/installer.nsi.in +191 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/release/libjpeg.pc.in +10 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/release/libturbojpeg.pc.in +10 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/release/makecygwinpkg.in +66 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/release/makedpkg.in +115 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/release/makemacpkg.in +284 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/release/makerpm.in +30 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/release/makesrpm.in +48 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/release/maketarball.in +51 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/release/rpm.spec.in +221 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/release/uninstall.in +113 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/sharedlib/CMakeLists.txt +99 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/CMakeLists.txt +385 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/arm/jsimd.c +721 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/arm/jsimd_neon.S +2878 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/arm64/jsimd.c +798 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/arm64/jsimd_neon.S +3433 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/gas-preprocessor.in +1 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolext-avx2.asm +578 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolext-mmx.asm +476 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolext-sse2.asm +503 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolor-avx2.asm +121 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolor-mmx.asm +121 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolor-sse2.asm +120 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgray-avx2.asm +113 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgray-mmx.asm +113 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgray-sse2.asm +112 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgryext-avx2.asm +457 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgryext-mmx.asm +355 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgryext-sse2.asm +382 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jchuff-sse2.asm +424 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcphuff-sse2.asm +660 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcsample-avx2.asm +388 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcsample-mmx.asm +324 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcsample-sse2.asm +351 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolext-avx2.asm +515 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolext-mmx.asm +404 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolext-sse2.asm +458 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolor-avx2.asm +118 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolor-mmx.asm +117 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolor-sse2.asm +117 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmerge-avx2.asm +136 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmerge-mmx.asm +123 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmerge-sse2.asm +135 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmrgext-avx2.asm +575 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmrgext-mmx.asm +460 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmrgext-sse2.asm +517 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdsample-avx2.asm +760 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdsample-mmx.asm +731 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdsample-sse2.asm +724 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctflt-3dn.asm +318 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctflt-sse.asm +369 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctfst-mmx.asm +395 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctfst-sse2.asm +403 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctint-avx2.asm +331 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctint-mmx.asm +620 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctint-sse2.asm +633 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctflt-3dn.asm +451 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctflt-sse.asm +571 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctflt-sse2.asm +497 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctfst-mmx.asm +499 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctfst-sse2.asm +501 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctint-avx2.asm +453 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctint-mmx.asm +851 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctint-sse2.asm +858 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctred-mmx.asm +704 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctred-sse2.asm +592 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquant-3dn.asm +230 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquant-mmx.asm +276 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquant-sse.asm +208 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquantf-sse2.asm +168 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquanti-avx2.asm +188 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquanti-sse2.asm +201 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jsimd.c +1253 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jsimdcpu.asm +135 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/jsimd.h +1083 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jccolext-mmi.c +483 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jccolor-mmi.c +148 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jcsample-mmi.c +100 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jcsample.h +28 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jdcolext-mmi.c +424 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jdcolor-mmi.c +139 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jdsample-mmi.c +245 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jfdctint-mmi.c +398 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jidctint-mmi.c +571 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jquanti-mmi.c +130 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jsimd.c +610 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jsimd_mmi.h +57 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/loongson-mmintrin.h +1324 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/mips/jsimd.c +1123 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/mips/jsimd_dspr2.S +4479 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/mips/jsimd_dspr2_asm.h +292 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jcolsamp.inc +135 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jdct.inc +31 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jpeg_nbits_table.inc +4097 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jsimdcfg.inc +93 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jsimdcfg.inc.h +131 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jsimdext.inc +479 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jccolext-altivec.c +269 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jccolor-altivec.c +116 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jcgray-altivec.c +111 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jcgryext-altivec.c +228 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jcsample-altivec.c +159 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jcsample.h +28 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdcolext-altivec.c +276 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdcolor-altivec.c +106 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdmerge-altivec.c +130 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdmrgext-altivec.c +329 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdsample-altivec.c +400 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jfdctfst-altivec.c +154 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jfdctint-altivec.c +258 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jidctfst-altivec.c +255 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jidctint-altivec.c +357 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jquanti-altivec.c +250 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jsimd.c +872 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jsimd_altivec.h +98 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jccolext-avx2.asm +558 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jccolext-sse2.asm +483 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jccolor-avx2.asm +121 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jccolor-sse2.asm +120 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcgray-avx2.asm +113 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcgray-sse2.asm +112 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcgryext-avx2.asm +437 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcgryext-sse2.asm +362 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jchuff-sse2.asm +346 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcphuff-sse2.asm +637 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcsample-avx2.asm +366 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcsample-sse2.asm +329 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdcolext-avx2.asm +495 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdcolext-sse2.asm +438 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdcolor-avx2.asm +118 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdcolor-sse2.asm +117 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdmerge-avx2.asm +136 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdmerge-sse2.asm +135 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdmrgext-avx2.asm +593 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdmrgext-sse2.asm +535 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdsample-avx2.asm +695 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdsample-sse2.asm +664 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jfdctflt-sse.asm +355 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jfdctfst-sse2.asm +389 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jfdctint-avx2.asm +320 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jfdctint-sse2.asm +619 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctflt-sse2.asm +481 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctfst-sse2.asm +490 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctint-avx2.asm +417 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctint-sse2.asm +846 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctred-sse2.asm +573 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jquantf-sse2.asm +154 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jquanti-avx2.asm +162 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jquanti-sse2.asm +187 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jsimd.c +1076 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jsimdcpu.asm +86 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/structure.txt +904 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/nightshot_iso_100.bmp +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/nightshot_iso_100.txt +25 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test.scan +5 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test1.icc +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test1.icc.txt +20 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test2.icc +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test2.icc.txt +20 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testimgari.jpg +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testimgint.jpg +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testorig.jpg +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testorig.ppm +4 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testorig12.jpg +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/vgl_5674_0098.bmp +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/vgl_6434_0018a.bmp +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/vgl_6548_0026a.bmp +0 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/tjbench.c +1031 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/tjbenchtest.in +256 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/tjbenchtest.java.in +215 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/tjexample.c +396 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/tjexampletest.in +149 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/tjexampletest.java.in +151 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/tjunittest.c +931 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/tjutil.c +70 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/tjutil.h +47 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/transupp.c +1628 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/transupp.h +210 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg-jni.c +1246 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg-mapfile +65 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg-mapfile.jni +101 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg.c +2152 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg.h +1744 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/usage.txt +635 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/win/jconfig.h.in +34 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg62-memsrcdst.def +108 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg62.def +106 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg7-memsrcdst.def +110 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg7.def +108 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg8.def +111 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/wizard.txt +212 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/wrbmp.c +558 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/wrgif.c +413 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/wrjpgcom.1 +103 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/wrjpgcom.c +591 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/wrppm.c +365 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/wrrle.c +309 -0
- data/epeg/vendor/libjpeg-turbo-2.0.4/wrtarga.c +261 -0
- data/epeg.c +131 -0
- data/epeg.gemspec +18 -0
- data/extconf.rb +80 -0
- data/test.jpg +0 -0
- data/test.rb +42 -0
- metadata +546 -0
@@ -0,0 +1,1494 @@
|
|
1
|
+
2.0.4
|
2
|
+
=====
|
3
|
+
|
4
|
+
### Significant changes relative to 2.0.3:
|
5
|
+
|
6
|
+
1. Fixed a regression in the Windows packaging system (introduced by
|
7
|
+
2.0 beta1[2]) whereby, if both the 64-bit libjpeg-turbo SDK for GCC and the
|
8
|
+
64-bit libjpeg-turbo SDK for Visual C++ were installed on the same system, only
|
9
|
+
one of them could be uninstalled.
|
10
|
+
|
11
|
+
2. Fixed a signed integer overflow and subsequent segfault that occurred when
|
12
|
+
attempting to decompress images with more than 715827882 pixels using the
|
13
|
+
64-bit C version of TJBench.
|
14
|
+
|
15
|
+
3. Fixed out-of-bounds write in `tjDecompressToYUV2()` and
|
16
|
+
`tjDecompressToYUVPlanes()` (sometimes manifesting as a double free) that
|
17
|
+
occurred when attempting to decompress grayscale JPEG images that were
|
18
|
+
compressed with a sampling factor other than 1 (for instance, with
|
19
|
+
`cjpeg -grayscale -sample 2x2`).
|
20
|
+
|
21
|
+
4. Fixed a regression introduced by 2.0.2[5] that caused the TurboJPEG API to
|
22
|
+
incorrectly identify some JPEG images with unusual sampling factors as 4:4:4
|
23
|
+
JPEG images. This was known to cause a buffer overflow when attempting to
|
24
|
+
decompress some such images using `tjDecompressToYUV2()` or
|
25
|
+
`tjDecompressToYUVPlanes()`.
|
26
|
+
|
27
|
+
5. Fixed an issue, detected by ASan, whereby attempting to losslessly transform
|
28
|
+
a specially-crafted malformed JPEG image containing an extremely-high-frequency
|
29
|
+
coefficient block (junk image data that could never be generated by a
|
30
|
+
legitimate JPEG compressor) could cause the Huffman encoder's local buffer to
|
31
|
+
be overrun. (Refer to 1.4.0[9] and 1.4beta1[15].) Given that the buffer
|
32
|
+
overrun was fully contained within the stack and did not cause a segfault or
|
33
|
+
other user-visible errant behavior, and given that the lossless transformer
|
34
|
+
(unlike the decompressor) is not generally exposed to arbitrary data exploits,
|
35
|
+
this issue did not likely pose a security risk.
|
36
|
+
|
37
|
+
6. The ARM 64-bit (ARMv8) NEON SIMD assembly code now stores constants in a
|
38
|
+
separate read-only data section rather than in the text section, to support
|
39
|
+
execute-only memory layouts.
|
40
|
+
|
41
|
+
|
42
|
+
2.0.3
|
43
|
+
=====
|
44
|
+
|
45
|
+
### Significant changes relative to 2.0.2:
|
46
|
+
|
47
|
+
1. Fixed "using JNI after critical get" errors that occurred on Android
|
48
|
+
platforms when passing invalid arguments to certain methods in the TurboJPEG
|
49
|
+
Java API.
|
50
|
+
|
51
|
+
2. Fixed a regression in the SIMD feature detection code, introduced by
|
52
|
+
the AVX2 SIMD extensions (2.0 beta1[1]), that was known to cause an illegal
|
53
|
+
instruction exception, in rare cases, on CPUs that lack support for CPUID leaf
|
54
|
+
07H (or on which the maximum CPUID leaf has been limited by way of a BIOS
|
55
|
+
setting.)
|
56
|
+
|
57
|
+
3. The 4:4:0 (h1v2) fancy (smooth) chroma upsampling algorithm in the
|
58
|
+
decompressor now uses a similar bias pattern to that of the 4:2:2 (h2v1) fancy
|
59
|
+
chroma upsampling algorithm, rounding up or down the upsampled result for
|
60
|
+
alternate pixels rather than always rounding down. This ensures that,
|
61
|
+
regardless of whether a 4:2:2 JPEG image is rotated or transposed prior to
|
62
|
+
decompression (in the frequency domain) or after decompression (in the spatial
|
63
|
+
domain), the final image will be similar.
|
64
|
+
|
65
|
+
4. Fixed an integer overflow and subsequent segfault that occurred when
|
66
|
+
attempting to compress or decompress images with more than 1 billion pixels
|
67
|
+
using the TurboJPEG API.
|
68
|
+
|
69
|
+
5. Fixed a regression introduced by 2.0 beta1[15] whereby attempting to
|
70
|
+
generate a progressive JPEG image on an SSE2-capable CPU using a scan script
|
71
|
+
containing one or more scans with lengths divisible by 16 would result in an
|
72
|
+
error ("Missing Huffman code table entry") and an invalid JPEG image.
|
73
|
+
|
74
|
+
6. Fixed an issue whereby `tjDecodeYUV()` and `tjDecodeYUVPlanes()` would throw
|
75
|
+
an error ("Invalid progressive parameters") or a warning ("Inconsistent
|
76
|
+
progression sequence") if passed a TurboJPEG instance that was previously used
|
77
|
+
to decompress a progressive JPEG image.
|
78
|
+
|
79
|
+
|
80
|
+
2.0.2
|
81
|
+
=====
|
82
|
+
|
83
|
+
### Significant changes relative to 2.0.1:
|
84
|
+
|
85
|
+
1. Fixed a regression introduced by 2.0.1[5] that prevented a runtime search
|
86
|
+
path (rpath) from being embedded in the libjpeg-turbo shared libraries and
|
87
|
+
executables for macOS and iOS. This caused a fatal error of the form
|
88
|
+
"dyld: Library not loaded" when attempting to use one of the executables,
|
89
|
+
unless `DYLD_LIBRARY_PATH` was explicitly set to the location of the
|
90
|
+
libjpeg-turbo shared libraries.
|
91
|
+
|
92
|
+
2. Fixed an integer overflow and subsequent segfault (CVE-2018-20330) that
|
93
|
+
occurred when attempting to load a BMP file with more than 1 billion pixels
|
94
|
+
using the `tjLoadImage()` function.
|
95
|
+
|
96
|
+
3. Fixed a buffer overrun (CVE-2018-19664) that occurred when attempting to
|
97
|
+
decompress a specially-crafted malformed JPEG image to a 256-color BMP using
|
98
|
+
djpeg.
|
99
|
+
|
100
|
+
4. Fixed a floating point exception that occurred when attempting to
|
101
|
+
decompress a specially-crafted malformed JPEG image with a specified image
|
102
|
+
width or height of 0 using the C version of TJBench.
|
103
|
+
|
104
|
+
5. The TurboJPEG API will now decompress 4:4:4 JPEG images with 2x1, 1x2, 3x1,
|
105
|
+
or 1x3 luminance and chrominance sampling factors. This is a non-standard way
|
106
|
+
of specifying 1x subsampling (normally 4:4:4 JPEGs have 1x1 luminance and
|
107
|
+
chrominance sampling factors), but the JPEG format and the libjpeg API both
|
108
|
+
allow it.
|
109
|
+
|
110
|
+
6. Fixed a regression introduced by 2.0 beta1[7] that caused djpeg to generate
|
111
|
+
incorrect PPM images when used with the `-colors` option.
|
112
|
+
|
113
|
+
7. Fixed an issue whereby a static build of libjpeg-turbo (a build in which
|
114
|
+
`ENABLE_SHARED` is `0`) could not be installed using the Visual Studio IDE.
|
115
|
+
|
116
|
+
8. Fixed a severe performance issue in the Loongson MMI SIMD extensions that
|
117
|
+
occurred when compressing RGB images whose image rows were not 64-bit-aligned.
|
118
|
+
|
119
|
+
|
120
|
+
2.0.1
|
121
|
+
=====
|
122
|
+
|
123
|
+
### Significant changes relative to 2.0.0:
|
124
|
+
|
125
|
+
1. Fixed a regression introduced with the new CMake-based Un*x build system,
|
126
|
+
whereby jconfig.h could cause compiler warnings of the form
|
127
|
+
`"HAVE_*_H" redefined` if it was included by downstream Autotools-based
|
128
|
+
projects that used `AC_CHECK_HEADERS()` to check for the existence of locale.h,
|
129
|
+
stddef.h, or stdlib.h.
|
130
|
+
|
131
|
+
2. The `jsimd_quantize_float_dspr2()` and `jsimd_convsamp_float_dspr2()`
|
132
|
+
functions in the MIPS DSPr2 SIMD extensions are now disabled at compile time
|
133
|
+
if the soft float ABI is enabled. Those functions use instructions that are
|
134
|
+
incompatible with the soft float ABI.
|
135
|
+
|
136
|
+
3. Fixed a regression in the SIMD feature detection code, introduced by
|
137
|
+
the AVX2 SIMD extensions (2.0 beta1[1]), that caused libjpeg-turbo to crash on
|
138
|
+
Windows 7 if Service Pack 1 was not installed.
|
139
|
+
|
140
|
+
4. Fixed out-of-bounds read in cjpeg that occurred when attempting to compress
|
141
|
+
a specially-crafted malformed color-index (8-bit-per-sample) Targa file in
|
142
|
+
which some of the samples (color indices) exceeded the bounds of the Targa
|
143
|
+
file's color table.
|
144
|
+
|
145
|
+
5. Fixed an issue whereby installing a fully static build of libjpeg-turbo
|
146
|
+
(a build in which `CFLAGS` contains `-static` and `ENABLE_SHARED` is `0`) would
|
147
|
+
fail with "No valid ELF RPATH or RUNPATH entry exists in the file."
|
148
|
+
|
149
|
+
|
150
|
+
2.0.0
|
151
|
+
=====
|
152
|
+
|
153
|
+
### Significant changes relative to 2.0 beta1:
|
154
|
+
|
155
|
+
1. The TurboJPEG API can now decompress CMYK JPEG images that have subsampled M
|
156
|
+
and Y components (not to be confused with YCCK JPEG images, in which the C/M/Y
|
157
|
+
components have been transformed into luma and chroma.) Previously, an error
|
158
|
+
was generated ("Could not determine subsampling type for JPEG image") when such
|
159
|
+
an image was passed to `tjDecompressHeader3()`, `tjTransform()`,
|
160
|
+
`tjDecompressToYUVPlanes()`, `tjDecompressToYUV2()`, or the equivalent Java
|
161
|
+
methods.
|
162
|
+
|
163
|
+
2. Fixed an issue (CVE-2018-11813) whereby a specially-crafted malformed input
|
164
|
+
file (specifically, a file with a valid Targa header but incomplete pixel data)
|
165
|
+
would cause cjpeg to generate a JPEG file that was potentially thousands of
|
166
|
+
times larger than the input file. The Targa reader in cjpeg was not properly
|
167
|
+
detecting that the end of the input file had been reached prematurely, so after
|
168
|
+
all valid pixels had been read from the input, the reader injected dummy pixels
|
169
|
+
with values of 255 into the JPEG compressor until the number of pixels
|
170
|
+
specified in the Targa header had been compressed. The Targa reader in cjpeg
|
171
|
+
now behaves like the PPM reader and aborts compression if the end of the input
|
172
|
+
file is reached prematurely. Because this issue only affected cjpeg and not
|
173
|
+
the underlying library, and because it did not involve any out-of-bounds reads
|
174
|
+
or other exploitable behaviors, it was not believed to represent a security
|
175
|
+
threat.
|
176
|
+
|
177
|
+
3. Fixed an issue whereby the `tjLoadImage()` and `tjSaveImage()` functions
|
178
|
+
would produce a "Bogus message code" error message if the underlying bitmap and
|
179
|
+
PPM readers/writers threw an error that was specific to the readers/writers
|
180
|
+
(as opposed to a general libjpeg API error.)
|
181
|
+
|
182
|
+
4. Fixed an issue (CVE-2018-1152) whereby a specially-crafted malformed BMP
|
183
|
+
file, one in which the header specified an image width of 1073741824 pixels,
|
184
|
+
would trigger a floating point exception (division by zero) in the
|
185
|
+
`tjLoadImage()` function when attempting to load the BMP file into a
|
186
|
+
4-component image buffer.
|
187
|
+
|
188
|
+
5. Fixed an issue whereby certain combinations of calls to
|
189
|
+
`jpeg_skip_scanlines()` and `jpeg_read_scanlines()` could trigger an infinite
|
190
|
+
loop when decompressing progressive JPEG images that use vertical chroma
|
191
|
+
subsampling (for instance, 4:2:0 or 4:4:0.)
|
192
|
+
|
193
|
+
6. Fixed a segfault in `jpeg_skip_scanlines()` that occurred when decompressing
|
194
|
+
a 4:2:2 or 4:2:0 JPEG image using the merged (non-fancy) upsampling algorithms
|
195
|
+
(that is, when setting `cinfo.do_fancy_upsampling` to `FALSE`.)
|
196
|
+
|
197
|
+
7. The new CMake-based build system will now disable the MIPS DSPr2 SIMD
|
198
|
+
extensions if it detects that the compiler does not support DSPr2 instructions.
|
199
|
+
|
200
|
+
8. Fixed out-of-bounds read in cjpeg (CVE-2018-14498) that occurred when
|
201
|
+
attempting to compress a specially-crafted malformed color-index
|
202
|
+
(8-bit-per-sample) BMP file in which some of the samples (color indices)
|
203
|
+
exceeded the bounds of the BMP file's color table.
|
204
|
+
|
205
|
+
9. Fixed a signed integer overflow in the progressive Huffman decoder, detected
|
206
|
+
by the Clang and GCC undefined behavior sanitizers, that could be triggered by
|
207
|
+
attempting to decompress a specially-crafted malformed JPEG image. This issue
|
208
|
+
did not pose a security threat, but removing the warning made it easier to
|
209
|
+
detect actual security issues, should they arise in the future.
|
210
|
+
|
211
|
+
|
212
|
+
1.5.90 (2.0 beta1)
|
213
|
+
==================
|
214
|
+
|
215
|
+
### Significant changes relative to 1.5.3:
|
216
|
+
|
217
|
+
1. Added AVX2 SIMD implementations of the colorspace conversion, chroma
|
218
|
+
downsampling and upsampling, integer quantization and sample conversion, and
|
219
|
+
slow integer DCT/IDCT algorithms. When using the slow integer DCT/IDCT
|
220
|
+
algorithms on AVX2-equipped CPUs, the compression of RGB images is
|
221
|
+
approximately 13-36% (avg. 22%) faster (relative to libjpeg-turbo 1.5.x) with
|
222
|
+
64-bit code and 11-21% (avg. 17%) faster with 32-bit code, and the
|
223
|
+
decompression of RGB images is approximately 9-35% (avg. 17%) faster with
|
224
|
+
64-bit code and 7-17% (avg. 12%) faster with 32-bit code. (As tested on a
|
225
|
+
3 GHz Intel Core i7. Actual mileage may vary.)
|
226
|
+
|
227
|
+
2. Overhauled the build system to use CMake on all platforms, and removed the
|
228
|
+
autotools-based build system. This decision resulted from extensive
|
229
|
+
discussions within the libjpeg-turbo community. libjpeg-turbo traditionally
|
230
|
+
used CMake only for Windows builds, but there was an increasing amount of
|
231
|
+
demand to extend CMake support to other platforms. However, because of the
|
232
|
+
unique nature of our code base (the need to support different assemblers on
|
233
|
+
each platform, the need for Java support, etc.), providing dual build systems
|
234
|
+
as other OSS imaging libraries do (including libpng and libtiff) would have
|
235
|
+
created a maintenance burden. The use of CMake greatly simplifies some aspects
|
236
|
+
of our build system, owing to CMake's built-in support for various assemblers,
|
237
|
+
Java, and unit testing, as well as generally fewer quirks that have to be
|
238
|
+
worked around in order to implement our packaging system. Eliminating
|
239
|
+
autotools puts our project slightly at odds with the traditional practices of
|
240
|
+
the OSS community, since most "system libraries" tend to be built with
|
241
|
+
autotools, but it is believed that the benefits of this move outweigh the
|
242
|
+
risks. In addition to providing a unified build environment, switching to
|
243
|
+
CMake allows for the use of various build tools and IDEs that aren't supported
|
244
|
+
under autotools, including XCode, Ninja, and Eclipse. It also eliminates the
|
245
|
+
need to install autotools via MacPorts/Homebrew on OS X and allows
|
246
|
+
libjpeg-turbo to be configured without the use of a terminal/command prompt.
|
247
|
+
Extensive testing was conducted to ensure that all features provided by the
|
248
|
+
autotools-based build system are provided by the new build system.
|
249
|
+
|
250
|
+
3. The libjpeg API in this version of libjpeg-turbo now includes two additional
|
251
|
+
functions, `jpeg_read_icc_profile()` and `jpeg_write_icc_profile()`, that can
|
252
|
+
be used to extract ICC profile data from a JPEG file while decompressing or to
|
253
|
+
embed ICC profile data in a JPEG file while compressing or transforming. This
|
254
|
+
eliminates the need for downstream projects, such as color management libraries
|
255
|
+
and browsers, to include their own glueware for accomplishing this.
|
256
|
+
|
257
|
+
4. Improved error handling in the TurboJPEG API library:
|
258
|
+
|
259
|
+
- Introduced a new function (`tjGetErrorStr2()`) in the TurboJPEG C API
|
260
|
+
that allows compression/decompression/transform error messages to be retrieved
|
261
|
+
in a thread-safe manner. Retrieving error messages from global functions, such
|
262
|
+
as `tjInitCompress()` or `tjBufSize()`, is still thread-unsafe, but since those
|
263
|
+
functions will only throw errors if passed an invalid argument or if a memory
|
264
|
+
allocation failure occurs, thread safety is not as much of a concern.
|
265
|
+
- Introduced a new function (`tjGetErrorCode()`) in the TurboJPEG C API
|
266
|
+
and a new method (`TJException.getErrorCode()`) in the TurboJPEG Java API that
|
267
|
+
can be used to determine the severity of the last
|
268
|
+
compression/decompression/transform error. This allows applications to
|
269
|
+
choose whether to ignore warnings (non-fatal errors) from the underlying
|
270
|
+
libjpeg API or to treat them as fatal.
|
271
|
+
- Introduced a new flag (`TJFLAG_STOPONWARNING` in the TurboJPEG C API and
|
272
|
+
`TJ.FLAG_STOPONWARNING` in the TurboJPEG Java API) that causes the library to
|
273
|
+
immediately halt a compression/decompression/transform operation if it
|
274
|
+
encounters a warning from the underlying libjpeg API (the default behavior is
|
275
|
+
to allow the operation to complete unless a fatal error is encountered.)
|
276
|
+
|
277
|
+
5. Introduced a new flag in the TurboJPEG C and Java APIs (`TJFLAG_PROGRESSIVE`
|
278
|
+
and `TJ.FLAG_PROGRESSIVE`, respectively) that causes the library to use
|
279
|
+
progressive entropy coding in JPEG images generated by compression and
|
280
|
+
transform operations. Additionally, a new transform option
|
281
|
+
(`TJXOPT_PROGRESSIVE` in the C API and `TJTransform.OPT_PROGRESSIVE` in the
|
282
|
+
Java API) has been introduced, allowing progressive entropy coding to be
|
283
|
+
enabled for selected transforms in a multi-transform operation.
|
284
|
+
|
285
|
+
6. Introduced a new transform option in the TurboJPEG API (`TJXOPT_COPYNONE` in
|
286
|
+
the C API and `TJTransform.OPT_COPYNONE` in the Java API) that allows the
|
287
|
+
copying of markers (including EXIF and ICC profile data) to be disabled for a
|
288
|
+
particular transform.
|
289
|
+
|
290
|
+
7. Added two functions to the TurboJPEG C API (`tjLoadImage()` and
|
291
|
+
`tjSaveImage()`) that can be used to load/save a BMP or PPM/PGM image to/from a
|
292
|
+
memory buffer with a specified pixel format and layout. These functions
|
293
|
+
replace the project-private (and slow) bmp API, which was previously used by
|
294
|
+
TJBench, and they also provide a convenient way for first-time users of
|
295
|
+
libjpeg-turbo to quickly develop a complete JPEG compression/decompression
|
296
|
+
program.
|
297
|
+
|
298
|
+
8. The TurboJPEG C API now includes a new convenience array (`tjAlphaOffset[]`)
|
299
|
+
that contains the alpha component index for each pixel format (or -1 if the
|
300
|
+
pixel format lacks an alpha component.) The TurboJPEG Java API now includes a
|
301
|
+
new method (`TJ.getAlphaOffset()`) that returns the same value. In addition,
|
302
|
+
the `tjRedOffset[]`, `tjGreenOffset[]`, and `tjBlueOffset[]` arrays-- and the
|
303
|
+
corresponding `TJ.getRedOffset()`, `TJ.getGreenOffset()`, and
|
304
|
+
`TJ.getBlueOffset()` methods-- now return -1 for `TJPF_GRAY`/`TJ.PF_GRAY`
|
305
|
+
rather than 0. This allows programs to easily determine whether a pixel format
|
306
|
+
has red, green, blue, and alpha components.
|
307
|
+
|
308
|
+
9. Added a new example (tjexample.c) that demonstrates the basic usage of the
|
309
|
+
TurboJPEG C API. This example mirrors the functionality of TJExample.java.
|
310
|
+
Both files are now included in the libjpeg-turbo documentation.
|
311
|
+
|
312
|
+
10. Fixed two signed integer overflows in the arithmetic decoder, detected by
|
313
|
+
the Clang undefined behavior sanitizer, that could be triggered by attempting
|
314
|
+
to decompress a specially-crafted malformed JPEG image. These issues did not
|
315
|
+
pose a security threat, but removing the warnings makes it easier to detect
|
316
|
+
actual security issues, should they arise in the future.
|
317
|
+
|
318
|
+
11. Fixed a bug in the merged 4:2:0 upsampling/dithered RGB565 color conversion
|
319
|
+
algorithm that caused incorrect dithering in the output image. This algorithm
|
320
|
+
now produces bitwise-identical results to the unmerged algorithms.
|
321
|
+
|
322
|
+
12. The SIMD function symbols for x86[-64]/ELF, MIPS/ELF, macOS/x86[-64] (if
|
323
|
+
libjpeg-turbo is built with YASM), and iOS/ARM[64] builds are now private.
|
324
|
+
This prevents those symbols from being exposed in applications or shared
|
325
|
+
libraries that link statically with libjpeg-turbo.
|
326
|
+
|
327
|
+
13. Added Loongson MMI SIMD implementations of the RGB-to-YCbCr and
|
328
|
+
YCbCr-to-RGB colorspace conversion, 4:2:0 chroma downsampling, 4:2:0 fancy
|
329
|
+
chroma upsampling, integer quantization, and slow integer DCT/IDCT algorithms.
|
330
|
+
When using the slow integer DCT/IDCT, this speeds up the compression of RGB
|
331
|
+
images by approximately 70-100% and the decompression of RGB images by
|
332
|
+
approximately 2-3.5x.
|
333
|
+
|
334
|
+
14. Fixed a build error when building with older MinGW releases (regression
|
335
|
+
caused by 1.5.1[7].)
|
336
|
+
|
337
|
+
15. Added SIMD acceleration for progressive Huffman encoding on SSE2-capable
|
338
|
+
x86 and x86-64 platforms. This speeds up the compression of full-color
|
339
|
+
progressive JPEGs by about 85-90% on average (relative to libjpeg-turbo 1.5.x)
|
340
|
+
when using modern Intel and AMD CPUs.
|
341
|
+
|
342
|
+
|
343
|
+
1.5.3
|
344
|
+
=====
|
345
|
+
|
346
|
+
### Significant changes relative to 1.5.2:
|
347
|
+
|
348
|
+
1. Fixed a NullPointerException in the TurboJPEG Java wrapper that occurred
|
349
|
+
when using the YUVImage constructor that creates an instance backed by separate
|
350
|
+
image planes and allocates memory for the image planes.
|
351
|
+
|
352
|
+
2. Fixed an issue whereby the Java version of TJUnitTest would fail when
|
353
|
+
testing BufferedImage encoding/decoding on big endian systems.
|
354
|
+
|
355
|
+
3. Fixed a segfault in djpeg that would occur if an output format other than
|
356
|
+
PPM/PGM was selected along with the `-crop` option. The `-crop` option now
|
357
|
+
works with the GIF and Targa formats as well (unfortunately, it cannot be made
|
358
|
+
to work with the BMP and RLE formats due to the fact that those output engines
|
359
|
+
write scanlines in bottom-up order.) djpeg will now exit gracefully if an
|
360
|
+
output format other than PPM/PGM, GIF, or Targa is selected along with the
|
361
|
+
`-crop` option.
|
362
|
+
|
363
|
+
4. Fixed an issue (CVE-2017-15232) whereby `jpeg_skip_scanlines()` would
|
364
|
+
segfault if color quantization was enabled.
|
365
|
+
|
366
|
+
5. TJBench (both C and Java versions) will now display usage information if any
|
367
|
+
command-line argument is unrecognized. This prevents the program from silently
|
368
|
+
ignoring typos.
|
369
|
+
|
370
|
+
6. Fixed an access violation in tjbench.exe (Windows) that occurred when the
|
371
|
+
program was used to decompress an existing JPEG image.
|
372
|
+
|
373
|
+
7. Fixed an ArrayIndexOutOfBoundsException in the TJExample Java program that
|
374
|
+
occurred when attempting to decompress a JPEG image that had been compressed
|
375
|
+
with 4:1:1 chrominance subsampling.
|
376
|
+
|
377
|
+
8. Fixed an issue whereby, when using `jpeg_skip_scanlines()` to skip to the
|
378
|
+
end of a single-scan (non-progressive) image, subsequent calls to
|
379
|
+
`jpeg_consume_input()` would return `JPEG_SUSPENDED` rather than
|
380
|
+
`JPEG_REACHED_EOI`.
|
381
|
+
|
382
|
+
9. `jpeg_crop_scanlines()` now works correctly when decompressing grayscale
|
383
|
+
JPEG images that were compressed with a sampling factor other than 1 (for
|
384
|
+
instance, with `cjpeg -grayscale -sample 2x2`).
|
385
|
+
|
386
|
+
|
387
|
+
1.5.2
|
388
|
+
=====
|
389
|
+
|
390
|
+
### Significant changes relative to 1.5.1:
|
391
|
+
|
392
|
+
1. Fixed a regression introduced by 1.5.1[7] that prevented libjpeg-turbo from
|
393
|
+
building with Android NDK platforms prior to android-21 (5.0).
|
394
|
+
|
395
|
+
2. Fixed a regression introduced by 1.5.1[1] that prevented the MIPS DSPR2 SIMD
|
396
|
+
code in libjpeg-turbo from building.
|
397
|
+
|
398
|
+
3. Fixed a regression introduced by 1.5 beta1[11] that prevented the Java
|
399
|
+
version of TJBench from outputting any reference images (the `-nowrite` switch
|
400
|
+
was accidentally enabled by default.)
|
401
|
+
|
402
|
+
4. libjpeg-turbo should now build and run with full AltiVec SIMD acceleration
|
403
|
+
on PowerPC-based AmigaOS 4 and OpenBSD systems.
|
404
|
+
|
405
|
+
5. Fixed build and runtime errors on Windows that occurred when building
|
406
|
+
libjpeg-turbo with libjpeg v7 API/ABI emulation and the in-memory
|
407
|
+
source/destination managers. Due to an oversight, the `jpeg_skip_scanlines()`
|
408
|
+
and `jpeg_crop_scanlines()` functions were not being included in jpeg7.dll when
|
409
|
+
libjpeg-turbo was built with `-DWITH_JPEG7=1` and `-DWITH_MEMSRCDST=1`.
|
410
|
+
|
411
|
+
6. Fixed "Bogus virtual array access" error that occurred when using the
|
412
|
+
lossless crop feature in jpegtran or the TurboJPEG API, if libjpeg-turbo was
|
413
|
+
built with libjpeg v7 API/ABI emulation. This was apparently a long-standing
|
414
|
+
bug that has existed since the introduction of libjpeg v7/v8 API/ABI emulation
|
415
|
+
in libjpeg-turbo v1.1.
|
416
|
+
|
417
|
+
7. The lossless transform features in jpegtran and the TurboJPEG API will now
|
418
|
+
always attempt to adjust the EXIF image width and height tags if the image size
|
419
|
+
changed as a result of the transform. This behavior has always existed when
|
420
|
+
using libjpeg v8 API/ABI emulation. It was supposed to be available with
|
421
|
+
libjpeg v7 API/ABI emulation as well but did not work properly due to a bug.
|
422
|
+
Furthermore, there was never any good reason not to enable it with libjpeg v6b
|
423
|
+
API/ABI emulation, since the behavior is entirely internal. Note that
|
424
|
+
`-copy all` must be passed to jpegtran in order to transfer the EXIF tags from
|
425
|
+
the source image to the destination image.
|
426
|
+
|
427
|
+
8. Fixed several memory leaks in the TurboJPEG API library that could occur
|
428
|
+
if the library was built with certain compilers and optimization levels
|
429
|
+
(known to occur with GCC 4.x and clang with `-O1` and higher but not with
|
430
|
+
GCC 5.x or 6.x) and one of the underlying libjpeg API functions threw an error
|
431
|
+
after a TurboJPEG API function allocated a local buffer.
|
432
|
+
|
433
|
+
9. The libjpeg-turbo memory manager will now honor the `max_memory_to_use`
|
434
|
+
structure member in jpeg\_memory\_mgr, which can be set to the maximum amount
|
435
|
+
of memory (in bytes) that libjpeg-turbo should use during decompression or
|
436
|
+
multi-pass (including progressive) compression. This limit can also be set
|
437
|
+
using the `JPEGMEM` environment variable or using the `-maxmemory` switch in
|
438
|
+
cjpeg/djpeg/jpegtran (refer to the respective man pages for more details.)
|
439
|
+
This has been a documented feature of libjpeg since v5, but the
|
440
|
+
`malloc()`/`free()` implementation of the memory manager (jmemnobs.c) never
|
441
|
+
implemented the feature. Restricting libjpeg-turbo's memory usage is useful
|
442
|
+
for two reasons: it allows testers to more easily work around the 2 GB limit
|
443
|
+
in libFuzzer, and it allows developers of security-sensitive applications to
|
444
|
+
more easily defend against one of the progressive JPEG exploits (LJT-01-004)
|
445
|
+
identified in
|
446
|
+
[this report](http://www.libjpeg-turbo.org/pmwiki/uploads/About/TwoIssueswiththeJPEGStandard.pdf).
|
447
|
+
|
448
|
+
10. TJBench will now run each benchmark for 1 second prior to starting the
|
449
|
+
timer, in order to improve the consistency of the results. Furthermore, the
|
450
|
+
`-warmup` option is now used to specify the amount of warmup time rather than
|
451
|
+
the number of warmup iterations.
|
452
|
+
|
453
|
+
11. Fixed an error (`short jump is out of range`) that occurred when assembling
|
454
|
+
the 32-bit x86 SIMD extensions with NASM versions prior to 2.04. This was a
|
455
|
+
regression introduced by 1.5 beta1[12].
|
456
|
+
|
457
|
+
|
458
|
+
1.5.1
|
459
|
+
=====
|
460
|
+
|
461
|
+
### Significant changes relative to 1.5.0:
|
462
|
+
|
463
|
+
1. Previously, the undocumented `JSIMD_FORCE*` environment variables could be
|
464
|
+
used to force-enable a particular SIMD instruction set if multiple instruction
|
465
|
+
sets were available on a particular platform. On x86 platforms, where CPU
|
466
|
+
feature detection is bulletproof and multiple SIMD instruction sets are
|
467
|
+
available, it makes sense for those environment variables to allow forcing the
|
468
|
+
use of an instruction set only if that instruction set is available. However,
|
469
|
+
since the ARM implementations of libjpeg-turbo can only use one SIMD
|
470
|
+
instruction set, and since their feature detection code is less bulletproof
|
471
|
+
(parsing /proc/cpuinfo), it makes sense for the `JSIMD_FORCENEON` environment
|
472
|
+
variable to bypass the feature detection code and really force the use of NEON
|
473
|
+
instructions. A new environment variable (`JSIMD_FORCEDSPR2`) was introduced
|
474
|
+
in the MIPS implementation for the same reasons, and the existing
|
475
|
+
`JSIMD_FORCENONE` environment variable was extended to that implementation.
|
476
|
+
These environment variables provide a workaround for those attempting to test
|
477
|
+
ARM and MIPS builds of libjpeg-turbo in QEMU, which passes through
|
478
|
+
/proc/cpuinfo from the host system.
|
479
|
+
|
480
|
+
2. libjpeg-turbo previously assumed that AltiVec instructions were always
|
481
|
+
available on PowerPC platforms, which led to "illegal instruction" errors when
|
482
|
+
running on PowerPC chips that lack AltiVec support (such as the older 7xx/G3
|
483
|
+
and newer e5500 series.) libjpeg-turbo now examines /proc/cpuinfo on
|
484
|
+
Linux/Android systems and enables AltiVec instructions only if the CPU supports
|
485
|
+
them. It also now provides two environment variables, `JSIMD_FORCEALTIVEC` and
|
486
|
+
`JSIMD_FORCENONE`, to force-enable and force-disable AltiVec instructions in
|
487
|
+
environments where /proc/cpuinfo is an unreliable means of CPU feature
|
488
|
+
detection (such as when running in QEMU.) On OS X, libjpeg-turbo continues to
|
489
|
+
assume that AltiVec support is always available, which means that libjpeg-turbo
|
490
|
+
cannot be used with G3 Macs unless you set the environment variable
|
491
|
+
`JSIMD_FORCENONE` to `1`.
|
492
|
+
|
493
|
+
3. Fixed an issue whereby 64-bit ARM (AArch64) builds of libjpeg-turbo would
|
494
|
+
crash when built with recent releases of the Clang/LLVM compiler. This was
|
495
|
+
caused by an ABI conformance issue in some of libjpeg-turbo's 64-bit NEON SIMD
|
496
|
+
routines. Those routines were incorrectly using 64-bit instructions to
|
497
|
+
transfer a 32-bit JDIMENSION argument, whereas the ABI allows the upper
|
498
|
+
(unused) 32 bits of a 32-bit argument's register to be undefined. The new
|
499
|
+
Clang/LLVM optimizer uses load combining to transfer multiple adjacent 32-bit
|
500
|
+
structure members into a single 64-bit register, and this exposed the ABI
|
501
|
+
conformance issue.
|
502
|
+
|
503
|
+
4. Fancy upsampling is now supported when decompressing JPEG images that use
|
504
|
+
4:4:0 (h1v2) chroma subsampling. These images are generated when losslessly
|
505
|
+
rotating or transposing JPEG images that use 4:2:2 (h2v1) chroma subsampling.
|
506
|
+
The h1v2 fancy upsampling algorithm is not currently SIMD-accelerated.
|
507
|
+
|
508
|
+
5. If merged upsampling isn't SIMD-accelerated but YCbCr-to-RGB conversion is,
|
509
|
+
then libjpeg-turbo will now disable merged upsampling when decompressing YCbCr
|
510
|
+
JPEG images into RGB or extended RGB output images. This significantly speeds
|
511
|
+
up the decompression of 4:2:0 and 4:2:2 JPEGs on ARM platforms if fancy
|
512
|
+
upsampling is not used (for example, if the `-nosmooth` option to djpeg is
|
513
|
+
specified.)
|
514
|
+
|
515
|
+
6. The TurboJPEG API will now decompress 4:2:2 and 4:4:0 JPEG images with
|
516
|
+
2x2 luminance sampling factors and 2x1 or 1x2 chrominance sampling factors.
|
517
|
+
This is a non-standard way of specifying 2x subsampling (normally 4:2:2 JPEGs
|
518
|
+
have 2x1 luminance and 1x1 chrominance sampling factors, and 4:4:0 JPEGs have
|
519
|
+
1x2 luminance and 1x1 chrominance sampling factors), but the JPEG format and
|
520
|
+
the libjpeg API both allow it.
|
521
|
+
|
522
|
+
7. Fixed an unsigned integer overflow in the libjpeg memory manager, detected
|
523
|
+
by the Clang undefined behavior sanitizer, that could be triggered by
|
524
|
+
attempting to decompress a specially-crafted malformed JPEG image. This issue
|
525
|
+
affected only 32-bit code and did not pose a security threat, but removing the
|
526
|
+
warning makes it easier to detect actual security issues, should they arise in
|
527
|
+
the future.
|
528
|
+
|
529
|
+
8. Fixed additional negative left shifts and other issues reported by the GCC
|
530
|
+
and Clang undefined behavior sanitizers when attempting to decompress
|
531
|
+
specially-crafted malformed JPEG images. None of these issues posed a security
|
532
|
+
threat, but removing the warnings makes it easier to detect actual security
|
533
|
+
issues, should they arise in the future.
|
534
|
+
|
535
|
+
9. Fixed an out-of-bounds array reference, introduced by 1.4.90[2] (partial
|
536
|
+
image decompression) and detected by the Clang undefined behavior sanitizer,
|
537
|
+
that could be triggered by a specially-crafted malformed JPEG image with more
|
538
|
+
than four components. Because the out-of-bounds reference was still within the
|
539
|
+
same structure, it was not known to pose a security threat, but removing the
|
540
|
+
warning makes it easier to detect actual security issues, should they arise in
|
541
|
+
the future.
|
542
|
+
|
543
|
+
10. Fixed another ABI conformance issue in the 64-bit ARM (AArch64) NEON SIMD
|
544
|
+
code. Some of the routines were incorrectly reading and storing data below the
|
545
|
+
stack pointer, which caused segfaults in certain applications under specific
|
546
|
+
circumstances.
|
547
|
+
|
548
|
+
|
549
|
+
1.5.0
|
550
|
+
=====
|
551
|
+
|
552
|
+
### Significant changes relative to 1.5 beta1:
|
553
|
+
|
554
|
+
1. Fixed an issue whereby a malformed motion-JPEG frame could cause the "fast
|
555
|
+
path" of libjpeg-turbo's Huffman decoder to read from uninitialized memory.
|
556
|
+
|
557
|
+
2. Added libjpeg-turbo version and build information to the global string table
|
558
|
+
of the libjpeg and TurboJPEG API libraries. This is a common practice in other
|
559
|
+
infrastructure libraries, such as OpenSSL and libpng, because it makes it easy
|
560
|
+
to examine an application binary and determine which version of the library the
|
561
|
+
application was linked against.
|
562
|
+
|
563
|
+
3. Fixed a couple of issues in the PPM reader that would cause buffer overruns
|
564
|
+
in cjpeg if one of the values in a binary PPM/PGM input file exceeded the
|
565
|
+
maximum value defined in the file's header. libjpeg-turbo 1.4.2 already
|
566
|
+
included a similar fix for ASCII PPM/PGM files. Note that these issues were
|
567
|
+
not security bugs, since they were confined to the cjpeg program and did not
|
568
|
+
affect any of the libjpeg-turbo libraries.
|
569
|
+
|
570
|
+
4. Fixed an issue whereby attempting to decompress a JPEG file with a corrupt
|
571
|
+
header using the `tjDecompressToYUV2()` function would cause the function to
|
572
|
+
abort without returning an error and, under certain circumstances, corrupt the
|
573
|
+
stack. This only occurred if `tjDecompressToYUV2()` was called prior to
|
574
|
+
calling `tjDecompressHeader3()`, or if the return value from
|
575
|
+
`tjDecompressHeader3()` was ignored (both cases represent incorrect usage of
|
576
|
+
the TurboJPEG API.)
|
577
|
+
|
578
|
+
5. Fixed an issue in the ARM 32-bit SIMD-accelerated Huffman encoder that
|
579
|
+
prevented the code from assembling properly with clang.
|
580
|
+
|
581
|
+
6. The `jpeg_stdio_src()`, `jpeg_mem_src()`, `jpeg_stdio_dest()`, and
|
582
|
+
`jpeg_mem_dest()` functions in the libjpeg API will now throw an error if a
|
583
|
+
source/destination manager has already been assigned to the compress or
|
584
|
+
decompress object by a different function or by the calling program. This
|
585
|
+
prevents these functions from attempting to reuse a source/destination manager
|
586
|
+
structure that was allocated elsewhere, because there is no way to ensure that
|
587
|
+
it would be big enough to accommodate the new source/destination manager.
|
588
|
+
|
589
|
+
|
590
|
+
1.4.90 (1.5 beta1)
|
591
|
+
==================
|
592
|
+
|
593
|
+
### Significant changes relative to 1.4.2:
|
594
|
+
|
595
|
+
1. Added full SIMD acceleration for PowerPC platforms using AltiVec VMX
|
596
|
+
(128-bit SIMD) instructions. Although the performance of libjpeg-turbo on
|
597
|
+
PowerPC was already good, due to the increased number of registers available
|
598
|
+
to the compiler vs. x86, it was still possible to speed up compression by about
|
599
|
+
3-4x and decompression by about 2-2.5x (relative to libjpeg v6b) through the
|
600
|
+
use of AltiVec instructions.
|
601
|
+
|
602
|
+
2. Added two new libjpeg API functions (`jpeg_skip_scanlines()` and
|
603
|
+
`jpeg_crop_scanline()`) that can be used to partially decode a JPEG image. See
|
604
|
+
[libjpeg.txt](libjpeg.txt) for more details.
|
605
|
+
|
606
|
+
3. The TJCompressor and TJDecompressor classes in the TurboJPEG Java API now
|
607
|
+
implement the Closeable interface, so those classes can be used with a
|
608
|
+
try-with-resources statement.
|
609
|
+
|
610
|
+
4. The TurboJPEG Java classes now throw unchecked idiomatic exceptions
|
611
|
+
(IllegalArgumentException, IllegalStateException) for unrecoverable errors
|
612
|
+
caused by incorrect API usage, and those classes throw a new checked exception
|
613
|
+
type (TJException) for errors that are passed through from the C library.
|
614
|
+
|
615
|
+
5. Source buffers for the TurboJPEG C API functions, as well as the
|
616
|
+
`jpeg_mem_src()` function in the libjpeg API, are now declared as const
|
617
|
+
pointers. This facilitates passing read-only buffers to those functions and
|
618
|
+
ensures the caller that the source buffer will not be modified. This should
|
619
|
+
not create any backward API or ABI incompatibilities with prior libjpeg-turbo
|
620
|
+
releases.
|
621
|
+
|
622
|
+
6. The MIPS DSPr2 SIMD code can now be compiled to support either FR=0 or FR=1
|
623
|
+
FPUs.
|
624
|
+
|
625
|
+
7. Fixed additional negative left shifts and other issues reported by the GCC
|
626
|
+
and Clang undefined behavior sanitizers. Most of these issues affected only
|
627
|
+
32-bit code, and none of them was known to pose a security threat, but removing
|
628
|
+
the warnings makes it easier to detect actual security issues, should they
|
629
|
+
arise in the future.
|
630
|
+
|
631
|
+
8. Removed the unnecessary `.arch` directive from the ARM64 NEON SIMD code.
|
632
|
+
This directive was preventing the code from assembling using the clang
|
633
|
+
integrated assembler.
|
634
|
+
|
635
|
+
9. Fixed a regression caused by 1.4.1[6] that prevented 32-bit and 64-bit
|
636
|
+
libjpeg-turbo RPMs from being installed simultaneously on recent Red Hat/Fedora
|
637
|
+
distributions. This was due to the addition of a macro in jconfig.h that
|
638
|
+
allows the Huffman codec to determine the word size at compile time. Since
|
639
|
+
that macro differs between 32-bit and 64-bit builds, this caused a conflict
|
640
|
+
between the i386 and x86_64 RPMs (any differing files, other than executables,
|
641
|
+
are not allowed when 32-bit and 64-bit RPMs are installed simultaneously.)
|
642
|
+
Since the macro is used only internally, it has been moved into jconfigint.h.
|
643
|
+
|
644
|
+
10. The x86-64 SIMD code can now be disabled at run time by setting the
|
645
|
+
`JSIMD_FORCENONE` environment variable to `1` (the other SIMD implementations
|
646
|
+
already had this capability.)
|
647
|
+
|
648
|
+
11. Added a new command-line argument to TJBench (`-nowrite`) that prevents the
|
649
|
+
benchmark from outputting any images. This removes any potential operating
|
650
|
+
system overhead that might be caused by lazy writes to disk and thus improves
|
651
|
+
the consistency of the performance measurements.
|
652
|
+
|
653
|
+
12. Added SIMD acceleration for Huffman encoding on SSE2-capable x86 and x86-64
|
654
|
+
platforms. This speeds up the compression of full-color JPEGs by about 10-15%
|
655
|
+
on average (relative to libjpeg-turbo 1.4.x) when using modern Intel and AMD
|
656
|
+
CPUs. Additionally, this works around an issue in the clang optimizer that
|
657
|
+
prevents it (as of this writing) from achieving the same performance as GCC
|
658
|
+
when compiling the C version of the Huffman encoder
|
659
|
+
(<https://llvm.org/bugs/show_bug.cgi?id=16035>). For the purposes of
|
660
|
+
benchmarking or regression testing, SIMD-accelerated Huffman encoding can be
|
661
|
+
disabled by setting the `JSIMD_NOHUFFENC` environment variable to `1`.
|
662
|
+
|
663
|
+
13. Added ARM 64-bit (ARMv8) NEON SIMD implementations of the commonly-used
|
664
|
+
compression algorithms (including the slow integer forward DCT and h2v2 & h2v1
|
665
|
+
downsampling algorithms, which are not accelerated in the 32-bit NEON
|
666
|
+
implementation.) This speeds up the compression of full-color JPEGs by about
|
667
|
+
75% on average on a Cavium ThunderX processor and by about 2-2.5x on average on
|
668
|
+
Cortex-A53 and Cortex-A57 cores.
|
669
|
+
|
670
|
+
14. Added SIMD acceleration for Huffman encoding on NEON-capable ARM 32-bit
|
671
|
+
and 64-bit platforms.
|
672
|
+
|
673
|
+
For 32-bit code, this speeds up the compression of full-color JPEGs by
|
674
|
+
about 30% on average on a typical iOS device (iPhone 4S, Cortex-A9) and by
|
675
|
+
about 6-7% on average on a typical Android device (Nexus 5X, Cortex-A53 and
|
676
|
+
Cortex-A57), relative to libjpeg-turbo 1.4.x. Note that the larger speedup
|
677
|
+
under iOS is due to the fact that iOS builds use LLVM, which does not optimize
|
678
|
+
the C Huffman encoder as well as GCC does.
|
679
|
+
|
680
|
+
For 64-bit code, NEON-accelerated Huffman encoding speeds up the
|
681
|
+
compression of full-color JPEGs by about 40% on average on a typical iOS device
|
682
|
+
(iPhone 5S, Apple A7) and by about 7-8% on average on a typical Android device
|
683
|
+
(Nexus 5X, Cortex-A53 and Cortex-A57), in addition to the speedup described in
|
684
|
+
[13] above.
|
685
|
+
|
686
|
+
For the purposes of benchmarking or regression testing, SIMD-accelerated
|
687
|
+
Huffman encoding can be disabled by setting the `JSIMD_NOHUFFENC` environment
|
688
|
+
variable to `1`.
|
689
|
+
|
690
|
+
15. pkg-config (.pc) scripts are now included for both the libjpeg and
|
691
|
+
TurboJPEG API libraries on Un*x systems. Note that if a project's build system
|
692
|
+
relies on these scripts, then it will not be possible to build that project
|
693
|
+
with libjpeg or with a prior version of libjpeg-turbo.
|
694
|
+
|
695
|
+
16. Optimized the ARM 64-bit (ARMv8) NEON SIMD decompression routines to
|
696
|
+
improve performance on CPUs with in-order pipelines. This speeds up the
|
697
|
+
decompression of full-color JPEGs by nearly 2x on average on a Cavium ThunderX
|
698
|
+
processor and by about 15% on average on a Cortex-A53 core.
|
699
|
+
|
700
|
+
17. Fixed an issue in the accelerated Huffman decoder that could have caused
|
701
|
+
the decoder to read past the end of the input buffer when a malformed,
|
702
|
+
specially-crafted JPEG image was being decompressed. In prior versions of
|
703
|
+
libjpeg-turbo, the accelerated Huffman decoder was invoked (in most cases) only
|
704
|
+
if there were > 128 bytes of data in the input buffer. However, it is possible
|
705
|
+
to construct a JPEG image in which a single Huffman block is over 430 bytes
|
706
|
+
long, so this version of libjpeg-turbo activates the accelerated Huffman
|
707
|
+
decoder only if there are > 512 bytes of data in the input buffer.
|
708
|
+
|
709
|
+
18. Fixed a memory leak in tjunittest encountered when running the program
|
710
|
+
with the `-yuv` option.
|
711
|
+
|
712
|
+
|
713
|
+
1.4.2
|
714
|
+
=====
|
715
|
+
|
716
|
+
### Significant changes relative to 1.4.1:
|
717
|
+
|
718
|
+
1. Fixed an issue whereby cjpeg would segfault if a Windows bitmap with a
|
719
|
+
negative width or height was used as an input image (Windows bitmaps can have
|
720
|
+
a negative height if they are stored in top-down order, but such files are
|
721
|
+
rare and not supported by libjpeg-turbo.)
|
722
|
+
|
723
|
+
2. Fixed an issue whereby, under certain circumstances, libjpeg-turbo would
|
724
|
+
incorrectly encode certain JPEG images when quality=100 and the fast integer
|
725
|
+
forward DCT were used. This was known to cause `make test` to fail when the
|
726
|
+
library was built with `-march=haswell` on x86 systems.
|
727
|
+
|
728
|
+
3. Fixed an issue whereby libjpeg-turbo would crash when built with the latest
|
729
|
+
& greatest development version of the Clang/LLVM compiler. This was caused by
|
730
|
+
an x86-64 ABI conformance issue in some of libjpeg-turbo's 64-bit SSE2 SIMD
|
731
|
+
routines. Those routines were incorrectly using a 64-bit `mov` instruction to
|
732
|
+
transfer a 32-bit JDIMENSION argument, whereas the x86-64 ABI allows the upper
|
733
|
+
(unused) 32 bits of a 32-bit argument's register to be undefined. The new
|
734
|
+
Clang/LLVM optimizer uses load combining to transfer multiple adjacent 32-bit
|
735
|
+
structure members into a single 64-bit register, and this exposed the ABI
|
736
|
+
conformance issue.
|
737
|
+
|
738
|
+
4. Fixed a bug in the MIPS DSPr2 4:2:0 "plain" (non-fancy and non-merged)
|
739
|
+
upsampling routine that caused a buffer overflow (and subsequent segfault) when
|
740
|
+
decompressing a 4:2:0 JPEG image whose scaled output width was less than 16
|
741
|
+
pixels. The "plain" upsampling routines are normally only used when
|
742
|
+
decompressing a non-YCbCr JPEG image, but they are also used when decompressing
|
743
|
+
a JPEG image whose scaled output height is 1.
|
744
|
+
|
745
|
+
5. Fixed various negative left shifts and other issues reported by the GCC and
|
746
|
+
Clang undefined behavior sanitizers. None of these was known to pose a
|
747
|
+
security threat, but removing the warnings makes it easier to detect actual
|
748
|
+
security issues, should they arise in the future.
|
749
|
+
|
750
|
+
|
751
|
+
1.4.1
|
752
|
+
=====
|
753
|
+
|
754
|
+
### Significant changes relative to 1.4.0:
|
755
|
+
|
756
|
+
1. tjbench now properly handles CMYK/YCCK JPEG files. Passing an argument of
|
757
|
+
`-cmyk` (instead of, for instance, `-rgb`) will cause tjbench to internally
|
758
|
+
convert the source bitmap to CMYK prior to compression, to generate YCCK JPEG
|
759
|
+
files, and to internally convert the decompressed CMYK pixels back to RGB after
|
760
|
+
decompression (the latter is done automatically if a CMYK or YCCK JPEG is
|
761
|
+
passed to tjbench as a source image.) The CMYK<->RGB conversion operation is
|
762
|
+
not benchmarked. NOTE: The quick & dirty CMYK<->RGB conversions that tjbench
|
763
|
+
uses are suitable for testing only. Proper conversion between CMYK and RGB
|
764
|
+
requires a color management system.
|
765
|
+
|
766
|
+
2. `make test` now performs additional bitwise regression tests using tjbench,
|
767
|
+
mainly for the purpose of testing compression from/decompression to a subregion
|
768
|
+
of a larger image buffer.
|
769
|
+
|
770
|
+
3. `make test` no longer tests the regression of the floating point DCT/IDCT
|
771
|
+
by default, since the results of those tests can vary if the algorithms in
|
772
|
+
question are not implemented using SIMD instructions on a particular platform.
|
773
|
+
See the comments in [Makefile.am](Makefile.am) for information on how to
|
774
|
+
re-enable the tests and to specify an expected result for them based on the
|
775
|
+
particulars of your platform.
|
776
|
+
|
777
|
+
4. The NULL color conversion routines have been significantly optimized,
|
778
|
+
which speeds up the compression of RGB and CMYK JPEGs by 5-20% when using
|
779
|
+
64-bit code and 0-3% when using 32-bit code, and the decompression of those
|
780
|
+
images by 10-30% when using 64-bit code and 3-12% when using 32-bit code.
|
781
|
+
|
782
|
+
5. Fixed an "illegal instruction" error that occurred when djpeg from a
|
783
|
+
SIMD-enabled libjpeg-turbo MIPS build was executed with the `-nosmooth` option
|
784
|
+
on a MIPS machine that lacked DSPr2 support. The MIPS SIMD routines for h2v1
|
785
|
+
and h2v2 merged upsampling were not properly checking for the existence of
|
786
|
+
DSPr2.
|
787
|
+
|
788
|
+
6. Performance has been improved significantly on 64-bit non-Linux and
|
789
|
+
non-Windows platforms (generally 10-20% faster compression and 5-10% faster
|
790
|
+
decompression.) Due to an oversight, the 64-bit version of the accelerated
|
791
|
+
Huffman codec was not being compiled in when libjpeg-turbo was built on
|
792
|
+
platforms other than Windows or Linux. Oops.
|
793
|
+
|
794
|
+
7. Fixed an extremely rare bug in the Huffman encoder that caused 64-bit
|
795
|
+
builds of libjpeg-turbo to incorrectly encode a few specific test images when
|
796
|
+
quality=98, an optimized Huffman table, and the slow integer forward DCT were
|
797
|
+
used.
|
798
|
+
|
799
|
+
8. The Windows (CMake) build system now supports building only static or only
|
800
|
+
shared libraries. This is accomplished by adding either `-DENABLE_STATIC=0` or
|
801
|
+
`-DENABLE_SHARED=0` to the CMake command line.
|
802
|
+
|
803
|
+
9. TurboJPEG API functions will now return an error code if a warning is
|
804
|
+
triggered in the underlying libjpeg API. For instance, if a JPEG file is
|
805
|
+
corrupt, the TurboJPEG decompression functions will attempt to decompress
|
806
|
+
as much of the image as possible, but those functions will now return -1 to
|
807
|
+
indicate that the decompression was not entirely successful.
|
808
|
+
|
809
|
+
10. Fixed a bug in the MIPS DSPr2 4:2:2 fancy upsampling routine that caused a
|
810
|
+
buffer overflow (and subsequent segfault) when decompressing a 4:2:2 JPEG image
|
811
|
+
in which the right-most MCU was 5 or 6 pixels wide.
|
812
|
+
|
813
|
+
|
814
|
+
1.4.0
|
815
|
+
=====
|
816
|
+
|
817
|
+
### Significant changes relative to 1.4 beta1:
|
818
|
+
|
819
|
+
1. Fixed a build issue on OS X PowerPC platforms (md5cmp failed to build
|
820
|
+
because OS X does not provide the `le32toh()` and `htole32()` functions.)
|
821
|
+
|
822
|
+
2. The non-SIMD RGB565 color conversion code did not work correctly on big
|
823
|
+
endian machines. This has been fixed.
|
824
|
+
|
825
|
+
3. Fixed an issue in `tjPlaneSizeYUV()` whereby it would erroneously return 1
|
826
|
+
instead of -1 if `componentID` was > 0 and `subsamp` was `TJSAMP_GRAY`.
|
827
|
+
|
828
|
+
3. Fixed an issue in `tjBufSizeYUV2()` whereby it would erroneously return 0
|
829
|
+
instead of -1 if `width` was < 1.
|
830
|
+
|
831
|
+
5. The Huffman encoder now uses `clz` and `bsr` instructions for bit counting
|
832
|
+
on ARM64 platforms (see 1.4 beta1[5].)
|
833
|
+
|
834
|
+
6. The `close()` method in the TJCompressor and TJDecompressor Java classes is
|
835
|
+
now idempotent. Previously, that method would call the native `tjDestroy()`
|
836
|
+
function even if the TurboJPEG instance had already been destroyed. This
|
837
|
+
caused an exception to be thrown during finalization, if the `close()` method
|
838
|
+
had already been called. The exception was caught, but it was still an
|
839
|
+
expensive operation.
|
840
|
+
|
841
|
+
7. The TurboJPEG API previously generated an error (`Could not determine
|
842
|
+
subsampling type for JPEG image`) when attempting to decompress grayscale JPEG
|
843
|
+
images that were compressed with a sampling factor other than 1 (for instance,
|
844
|
+
with `cjpeg -grayscale -sample 2x2`). Subsampling technically has no meaning
|
845
|
+
with grayscale JPEGs, and thus the horizontal and vertical sampling factors
|
846
|
+
for such images are ignored by the decompressor. However, the TurboJPEG API
|
847
|
+
was being too rigid and was expecting the sampling factors to be equal to 1
|
848
|
+
before it treated the image as a grayscale JPEG.
|
849
|
+
|
850
|
+
8. cjpeg, djpeg, and jpegtran now accept an argument of `-version`, which will
|
851
|
+
print the library version and exit.
|
852
|
+
|
853
|
+
9. Referring to 1.4 beta1[15], another extremely rare circumstance was
|
854
|
+
discovered under which the Huffman encoder's local buffer can be overrun
|
855
|
+
when a buffered destination manager is being used and an
|
856
|
+
extremely-high-frequency block (basically junk image data) is being encoded.
|
857
|
+
Even though the Huffman local buffer was increased from 128 bytes to 136 bytes
|
858
|
+
to address the previous issue, the new issue caused even the larger buffer to
|
859
|
+
be overrun. Further analysis reveals that, in the absolute worst case (such as
|
860
|
+
setting alternating AC coefficients to 32767 and -32768 in the JPEG scanning
|
861
|
+
order), the Huffman encoder can produce encoded blocks that approach double the
|
862
|
+
size of the unencoded blocks. Thus, the Huffman local buffer was increased to
|
863
|
+
256 bytes, which should prevent any such issue from re-occurring in the future.
|
864
|
+
|
865
|
+
10. The new `tjPlaneSizeYUV()`, `tjPlaneWidth()`, and `tjPlaneHeight()`
|
866
|
+
functions were not actually usable on any platform except OS X and Windows,
|
867
|
+
because those functions were not included in the libturbojpeg mapfile. This
|
868
|
+
has been fixed.
|
869
|
+
|
870
|
+
11. Restored the `JPP()`, `JMETHOD()`, and `FAR` macros in the libjpeg-turbo
|
871
|
+
header files. The `JPP()` and `JMETHOD()` macros were originally implemented
|
872
|
+
in libjpeg as a way of supporting non-ANSI compilers that lacked support for
|
873
|
+
prototype parameters. libjpeg-turbo has never supported such compilers, but
|
874
|
+
some software packages still use the macros to define their own prototypes.
|
875
|
+
Similarly, libjpeg-turbo has never supported MS-DOS and other platforms that
|
876
|
+
have far symbols, but some software packages still use the `FAR` macro. A
|
877
|
+
pretty good argument can be made that this is a bad practice on the part of the
|
878
|
+
software in question, but since this affects more than one package, it's just
|
879
|
+
easier to fix it here.
|
880
|
+
|
881
|
+
12. Fixed issues that were preventing the ARM 64-bit SIMD code from compiling
|
882
|
+
for iOS, and included an ARMv8 architecture in all of the binaries installed by
|
883
|
+
the "official" libjpeg-turbo SDK for OS X.
|
884
|
+
|
885
|
+
|
886
|
+
1.3.90 (1.4 beta1)
|
887
|
+
==================
|
888
|
+
|
889
|
+
### Significant changes relative to 1.3.1:
|
890
|
+
|
891
|
+
1. New features in the TurboJPEG API:
|
892
|
+
|
893
|
+
- YUV planar images can now be generated with an arbitrary line padding
|
894
|
+
(previously only 4-byte padding, which was compatible with X Video, was
|
895
|
+
supported.)
|
896
|
+
- The decompress-to-YUV function has been extended to support image
|
897
|
+
scaling.
|
898
|
+
- JPEG images can now be compressed from YUV planar source images.
|
899
|
+
- YUV planar images can now be decoded into RGB or grayscale images.
|
900
|
+
- 4:1:1 subsampling is now supported. This is mainly included for
|
901
|
+
compatibility, since 4:1:1 is not fully accelerated in libjpeg-turbo and has no
|
902
|
+
significant advantages relative to 4:2:0.
|
903
|
+
- CMYK images are now supported. This feature allows CMYK source images
|
904
|
+
to be compressed to YCCK JPEGs and YCCK or CMYK JPEGs to be decompressed to
|
905
|
+
CMYK destination images. Conversion between CMYK/YCCK and RGB or YUV images is
|
906
|
+
not supported. Such conversion requires a color management system and is thus
|
907
|
+
out of scope for a codec library.
|
908
|
+
- The handling of YUV images in the Java API has been significantly
|
909
|
+
refactored and should now be much more intuitive.
|
910
|
+
- The Java API now supports encoding a YUV image from an arbitrary
|
911
|
+
position in a large image buffer.
|
912
|
+
- All of the YUV functions now have a corresponding function that operates
|
913
|
+
on separate image planes instead of a unified image buffer. This allows for
|
914
|
+
compressing/decoding from or decompressing/encoding to a subregion of a larger
|
915
|
+
YUV image. It also allows for handling YUV formats that swap the order of the
|
916
|
+
U and V planes.
|
917
|
+
|
918
|
+
2. Added SIMD acceleration for DSPr2-capable MIPS platforms. This speeds up
|
919
|
+
the compression of full-color JPEGs by 70-80% on such platforms and
|
920
|
+
decompression by 25-35%.
|
921
|
+
|
922
|
+
3. If an application attempts to decompress a Huffman-coded JPEG image whose
|
923
|
+
header does not contain Huffman tables, libjpeg-turbo will now insert the
|
924
|
+
default Huffman tables. In order to save space, many motion JPEG video frames
|
925
|
+
are encoded without the default Huffman tables, so these frames can now be
|
926
|
+
successfully decompressed by libjpeg-turbo without additional work on the part
|
927
|
+
of the application. An application can still override the Huffman tables, for
|
928
|
+
instance to re-use tables from a previous frame of the same video.
|
929
|
+
|
930
|
+
4. The Mac packaging system now uses pkgbuild and productbuild rather than
|
931
|
+
PackageMaker (which is obsolete and no longer supported.) This means that
|
932
|
+
OS X 10.6 "Snow Leopard" or later must be used when packaging libjpeg-turbo,
|
933
|
+
although the packages produced can be installed on OS X 10.5 "Leopard" or
|
934
|
+
later. OS X 10.4 "Tiger" is no longer supported.
|
935
|
+
|
936
|
+
5. The Huffman encoder now uses `clz` and `bsr` instructions for bit counting
|
937
|
+
on ARM platforms rather than a lookup table. This reduces the memory footprint
|
938
|
+
by 64k, which may be important for some mobile applications. Out of four
|
939
|
+
Android devices that were tested, two demonstrated a small overall performance
|
940
|
+
loss (~3-4% on average) with ARMv6 code and a small gain (also ~3-4%) with
|
941
|
+
ARMv7 code when enabling this new feature, but the other two devices
|
942
|
+
demonstrated a significant overall performance gain with both ARMv6 and ARMv7
|
943
|
+
code (~10-20%) when enabling the feature. Actual mileage may vary.
|
944
|
+
|
945
|
+
6. Worked around an issue with Visual C++ 2010 and later that caused incorrect
|
946
|
+
pixels to be generated when decompressing a JPEG image to a 256-color bitmap,
|
947
|
+
if compiler optimization was enabled when libjpeg-turbo was built. This caused
|
948
|
+
the regression tests to fail when doing a release build under Visual C++ 2010
|
949
|
+
and later.
|
950
|
+
|
951
|
+
7. Improved the accuracy and performance of the non-SIMD implementation of the
|
952
|
+
floating point inverse DCT (using code borrowed from libjpeg v8a and later.)
|
953
|
+
The accuracy of this implementation now matches the accuracy of the SSE/SSE2
|
954
|
+
implementation. Note, however, that the floating point DCT/IDCT algorithms are
|
955
|
+
mainly a legacy feature. They generally do not produce significantly better
|
956
|
+
accuracy than the slow integer DCT/IDCT algorithms, and they are quite a bit
|
957
|
+
slower.
|
958
|
+
|
959
|
+
8. Added a new output colorspace (`JCS_RGB565`) to the libjpeg API that allows
|
960
|
+
for decompressing JPEG images into RGB565 (16-bit) pixels. If dithering is not
|
961
|
+
used, then this code path is SIMD-accelerated on ARM platforms.
|
962
|
+
|
963
|
+
9. Numerous obsolete features, such as support for non-ANSI compilers and
|
964
|
+
support for the MS-DOS memory model, were removed from the libjpeg code,
|
965
|
+
greatly improving its readability and making it easier to maintain and extend.
|
966
|
+
|
967
|
+
10. Fixed a segfault that occurred when calling `output_message()` with
|
968
|
+
`msg_code` set to `JMSG_COPYRIGHT`.
|
969
|
+
|
970
|
+
11. Fixed an issue whereby wrjpgcom was allowing comments longer than 65k
|
971
|
+
characters to be passed on the command line, which was causing it to generate
|
972
|
+
incorrect JPEG files.
|
973
|
+
|
974
|
+
12. Fixed a bug in the build system that was causing the Windows version of
|
975
|
+
wrjpgcom to be built using the rdjpgcom source code.
|
976
|
+
|
977
|
+
13. Restored 12-bit-per-component JPEG support. A 12-bit version of
|
978
|
+
libjpeg-turbo can now be built by passing an argument of `--with-12bit` to
|
979
|
+
configure (Unix) or `-DWITH_12BIT=1` to cmake (Windows.) 12-bit JPEG support
|
980
|
+
is included only for convenience. Enabling this feature disables all of the
|
981
|
+
performance features in libjpeg-turbo, as well as arithmetic coding and the
|
982
|
+
TurboJPEG API. The resulting library still contains the other libjpeg-turbo
|
983
|
+
features (such as the colorspace extensions), but in general, it performs no
|
984
|
+
faster than libjpeg v6b.
|
985
|
+
|
986
|
+
14. Added ARM 64-bit SIMD acceleration for the YCC-to-RGB color conversion
|
987
|
+
and IDCT algorithms (both are used during JPEG decompression.) For unknown
|
988
|
+
reasons (probably related to clang), this code cannot currently be compiled for
|
989
|
+
iOS.
|
990
|
+
|
991
|
+
15. Fixed an extremely rare bug (CVE-2014-9092) that could cause the Huffman
|
992
|
+
encoder's local buffer to overrun when a very high-frequency MCU is compressed
|
993
|
+
using quality 100 and no subsampling, and when the JPEG output buffer is being
|
994
|
+
dynamically resized by the destination manager. This issue was so rare that,
|
995
|
+
even with a test program specifically designed to make the bug occur (by
|
996
|
+
injecting random high-frequency YUV data into the compressor), it was
|
997
|
+
reproducible only once in about every 25 million iterations.
|
998
|
+
|
999
|
+
16. Fixed an oversight in the TurboJPEG C wrapper: if any of the JPEG
|
1000
|
+
compression functions was called repeatedly with the same
|
1001
|
+
automatically-allocated destination buffer, then TurboJPEG would erroneously
|
1002
|
+
assume that the `jpegSize` parameter was equal to the size of the buffer, when
|
1003
|
+
in fact that parameter was probably equal to the size of the most recently
|
1004
|
+
compressed JPEG image. If the size of the previous JPEG image was not as large
|
1005
|
+
as the current JPEG image, then TurboJPEG would unnecessarily reallocate the
|
1006
|
+
destination buffer.
|
1007
|
+
|
1008
|
+
|
1009
|
+
1.3.1
|
1010
|
+
=====
|
1011
|
+
|
1012
|
+
### Significant changes relative to 1.3.0:
|
1013
|
+
|
1014
|
+
1. On Un*x systems, `make install` now installs the libjpeg-turbo libraries
|
1015
|
+
into /opt/libjpeg-turbo/lib32 by default on any 32-bit system, not just x86,
|
1016
|
+
and into /opt/libjpeg-turbo/lib64 by default on any 64-bit system, not just
|
1017
|
+
x86-64. You can override this by overriding either the `prefix` or `libdir`
|
1018
|
+
configure variables.
|
1019
|
+
|
1020
|
+
2. The Windows installer now places a copy of the TurboJPEG DLLs in the same
|
1021
|
+
directory as the rest of the libjpeg-turbo binaries. This was mainly done
|
1022
|
+
to support TurboVNC 1.3, which bundles the DLLs in its Windows installation.
|
1023
|
+
When using a 32-bit version of CMake on 64-bit Windows, it is impossible to
|
1024
|
+
access the c:\WINDOWS\system32 directory, which made it impossible for the
|
1025
|
+
TurboVNC build scripts to bundle the 64-bit TurboJPEG DLL.
|
1026
|
+
|
1027
|
+
3. Fixed a bug whereby attempting to encode a progressive JPEG with arithmetic
|
1028
|
+
entropy coding (by passing arguments of `-progressive -arithmetic` to cjpeg or
|
1029
|
+
jpegtran, for instance) would result in an error, `Requested feature was
|
1030
|
+
omitted at compile time`.
|
1031
|
+
|
1032
|
+
4. Fixed a couple of issues (CVE-2013-6629 and CVE-2013-6630) whereby malformed
|
1033
|
+
JPEG images would cause libjpeg-turbo to use uninitialized memory during
|
1034
|
+
decompression.
|
1035
|
+
|
1036
|
+
5. Fixed an error (`Buffer passed to JPEG library is too small`) that occurred
|
1037
|
+
when calling the TurboJPEG YUV encoding function with a very small (< 5x5)
|
1038
|
+
source image, and added a unit test to check for this error.
|
1039
|
+
|
1040
|
+
6. The Java classes should now build properly under Visual Studio 2010 and
|
1041
|
+
later.
|
1042
|
+
|
1043
|
+
7. Fixed an issue that prevented SRPMs generated using the in-tree packaging
|
1044
|
+
tools from being rebuilt on certain newer Linux distributions.
|
1045
|
+
|
1046
|
+
8. Numerous minor fixes to eliminate compilation and build/packaging system
|
1047
|
+
warnings, fix cosmetic issues, improve documentation clarity, and other general
|
1048
|
+
source cleanup.
|
1049
|
+
|
1050
|
+
|
1051
|
+
1.3.0
|
1052
|
+
=====
|
1053
|
+
|
1054
|
+
### Significant changes relative to 1.3 beta1:
|
1055
|
+
|
1056
|
+
1. `make test` now works properly on FreeBSD, and it no longer requires the
|
1057
|
+
md5sum executable to be present on other Un*x platforms.
|
1058
|
+
|
1059
|
+
2. Overhauled the packaging system:
|
1060
|
+
|
1061
|
+
- To avoid conflict with vendor-supplied libjpeg-turbo packages, the
|
1062
|
+
official RPMs and DEBs for libjpeg-turbo have been renamed to
|
1063
|
+
"libjpeg-turbo-official".
|
1064
|
+
- The TurboJPEG libraries are now located under /opt/libjpeg-turbo in the
|
1065
|
+
official Linux and Mac packages, to avoid conflict with vendor-supplied
|
1066
|
+
packages and also to streamline the packaging system.
|
1067
|
+
- Release packages are now created with the directory structure defined
|
1068
|
+
by the configure variables `prefix`, `bindir`, `libdir`, etc. (Un\*x) or by the
|
1069
|
+
`CMAKE_INSTALL_PREFIX` variable (Windows.) The exception is that the docs are
|
1070
|
+
always located under the system default documentation directory on Un\*x and
|
1071
|
+
Mac systems, and on Windows, the TurboJPEG DLL is always located in the Windows
|
1072
|
+
system directory.
|
1073
|
+
- To avoid confusion, official libjpeg-turbo packages on Linux/Unix
|
1074
|
+
platforms (except for Mac) will always install the 32-bit libraries in
|
1075
|
+
/opt/libjpeg-turbo/lib32 and the 64-bit libraries in /opt/libjpeg-turbo/lib64.
|
1076
|
+
- Fixed an issue whereby, in some cases, the libjpeg-turbo executables on
|
1077
|
+
Un*x systems were not properly linking with the shared libraries installed by
|
1078
|
+
the same package.
|
1079
|
+
- Fixed an issue whereby building the "installer" target on Windows when
|
1080
|
+
`WITH_JAVA=1` would fail if the TurboJPEG JAR had not been previously built.
|
1081
|
+
- Building the "install" target on Windows now installs files into the
|
1082
|
+
same places that the installer does.
|
1083
|
+
|
1084
|
+
3. Fixed a Huffman encoder bug that prevented I/O suspension from working
|
1085
|
+
properly.
|
1086
|
+
|
1087
|
+
|
1088
|
+
1.2.90 (1.3 beta1)
|
1089
|
+
==================
|
1090
|
+
|
1091
|
+
### Significant changes relative to 1.2.1:
|
1092
|
+
|
1093
|
+
1. Added support for additional scaling factors (3/8, 5/8, 3/4, 7/8, 9/8, 5/4,
|
1094
|
+
11/8, 3/2, 13/8, 7/4, 15/8, and 2) when decompressing. Note that the IDCT will
|
1095
|
+
not be SIMD-accelerated when using any of these new scaling factors.
|
1096
|
+
|
1097
|
+
2. The TurboJPEG dynamic library is now versioned. It was not strictly
|
1098
|
+
necessary to do so, because TurboJPEG uses versioned symbols, and if a function
|
1099
|
+
changes in an ABI-incompatible way, that function is renamed and a legacy
|
1100
|
+
function is provided to maintain backward compatibility. However, certain
|
1101
|
+
Linux distro maintainers have a policy against accepting any library that isn't
|
1102
|
+
versioned.
|
1103
|
+
|
1104
|
+
3. Extended the TurboJPEG Java API so that it can be used to compress a JPEG
|
1105
|
+
image from and decompress a JPEG image to an arbitrary position in a large
|
1106
|
+
image buffer.
|
1107
|
+
|
1108
|
+
4. The `tjDecompressToYUV()` function now supports the `TJFLAG_FASTDCT` flag.
|
1109
|
+
|
1110
|
+
5. The 32-bit supplementary package for amd64 Debian systems now provides
|
1111
|
+
symlinks in /usr/lib/i386-linux-gnu for the TurboJPEG libraries in /usr/lib32.
|
1112
|
+
This allows those libraries to be used on MultiArch-compatible systems (such as
|
1113
|
+
Ubuntu 11 and later) without setting the linker path.
|
1114
|
+
|
1115
|
+
6. The TurboJPEG Java wrapper should now find the JNI library on Mac systems
|
1116
|
+
without having to pass `-Djava.library.path=/usr/lib` to java.
|
1117
|
+
|
1118
|
+
7. TJBench has been ported to Java to provide a convenient way of validating
|
1119
|
+
the performance of the TurboJPEG Java API. It can be run with
|
1120
|
+
`java -cp turbojpeg.jar TJBench`.
|
1121
|
+
|
1122
|
+
8. cjpeg can now be used to generate JPEG files with the RGB colorspace
|
1123
|
+
(feature ported from jpeg-8d.)
|
1124
|
+
|
1125
|
+
9. The width and height in the `-crop` argument passed to jpegtran can now be
|
1126
|
+
suffixed with `f` to indicate that, when the upper left corner of the cropping
|
1127
|
+
region is automatically moved to the nearest iMCU boundary, the bottom right
|
1128
|
+
corner should be moved by the same amount. In other words, this feature causes
|
1129
|
+
jpegtran to strictly honor the specified width/height rather than the specified
|
1130
|
+
bottom right corner (feature ported from jpeg-8d.)
|
1131
|
+
|
1132
|
+
10. JPEG files using the RGB colorspace can now be decompressed into grayscale
|
1133
|
+
images (feature ported from jpeg-8d.)
|
1134
|
+
|
1135
|
+
11. Fixed a regression caused by 1.2.1[7] whereby the build would fail with
|
1136
|
+
multiple "Mismatch in operand sizes" errors when attempting to build the x86
|
1137
|
+
SIMD code with NASM 0.98.
|
1138
|
+
|
1139
|
+
12. The in-memory source/destination managers (`jpeg_mem_src()` and
|
1140
|
+
`jpeg_mem_dest()`) are now included by default when building libjpeg-turbo with
|
1141
|
+
libjpeg v6b or v7 emulation, so that programs can take advantage of these
|
1142
|
+
functions without requiring the use of the backward-incompatible libjpeg v8
|
1143
|
+
ABI. The "age number" of the libjpeg-turbo library on Un*x systems has been
|
1144
|
+
incremented by 1 to reflect this. You can disable this feature with a
|
1145
|
+
configure/CMake switch in order to retain strict API/ABI compatibility with the
|
1146
|
+
libjpeg v6b or v7 API/ABI (or with previous versions of libjpeg-turbo.) See
|
1147
|
+
[README.md](README.md) for more details.
|
1148
|
+
|
1149
|
+
13. Added ARMv7s architecture to libjpeg.a and libturbojpeg.a in the official
|
1150
|
+
libjpeg-turbo binary package for OS X, so that those libraries can be used to
|
1151
|
+
build applications that leverage the faster CPUs in the iPhone 5 and iPad 4.
|
1152
|
+
|
1153
|
+
|
1154
|
+
1.2.1
|
1155
|
+
=====
|
1156
|
+
|
1157
|
+
### Significant changes relative to 1.2.0:
|
1158
|
+
|
1159
|
+
1. Creating or decoding a JPEG file that uses the RGB colorspace should now
|
1160
|
+
properly work when the input or output colorspace is one of the libjpeg-turbo
|
1161
|
+
colorspace extensions.
|
1162
|
+
|
1163
|
+
2. When libjpeg-turbo was built without SIMD support and merged (non-fancy)
|
1164
|
+
upsampling was used along with an alpha-enabled colorspace during
|
1165
|
+
decompression, the unused byte of the decompressed pixels was not being set to
|
1166
|
+
0xFF. This has been fixed. TJUnitTest has also been extended to test for the
|
1167
|
+
correct behavior of the colorspace extensions when merged upsampling is used.
|
1168
|
+
|
1169
|
+
3. Fixed a bug whereby the libjpeg-turbo SSE2 SIMD code would not preserve the
|
1170
|
+
upper 64 bits of xmm6 and xmm7 on Win64 platforms, which violated the Win64
|
1171
|
+
calling conventions.
|
1172
|
+
|
1173
|
+
4. Fixed a regression (CVE-2012-2806) caused by 1.2.0[6] whereby decompressing
|
1174
|
+
corrupt JPEG images (specifically, images in which the component count was
|
1175
|
+
erroneously set to a large value) would cause libjpeg-turbo to segfault.
|
1176
|
+
|
1177
|
+
5. Worked around a severe performance issue with "Bobcat" (AMD Embedded APU)
|
1178
|
+
processors. The `MASKMOVDQU` instruction, which was used by the libjpeg-turbo
|
1179
|
+
SSE2 SIMD code, is apparently implemented in microcode on AMD processors, and
|
1180
|
+
it is painfully slow on Bobcat processors in particular. Eliminating the use
|
1181
|
+
of this instruction improved performance by an order of magnitude on Bobcat
|
1182
|
+
processors and by a small amount (typically 5%) on AMD desktop processors.
|
1183
|
+
|
1184
|
+
6. Added SIMD acceleration for performing 4:2:2 upsampling on NEON-capable ARM
|
1185
|
+
platforms. This speeds up the decompression of 4:2:2 JPEGs by 20-25% on such
|
1186
|
+
platforms.
|
1187
|
+
|
1188
|
+
7. Fixed a regression caused by 1.2.0[2] whereby, on Linux/x86 platforms
|
1189
|
+
running the 32-bit SSE2 SIMD code in libjpeg-turbo, decompressing a 4:2:0 or
|
1190
|
+
4:2:2 JPEG image into a 32-bit (RGBX, BGRX, etc.) buffer without using fancy
|
1191
|
+
upsampling would produce several incorrect columns of pixels at the right-hand
|
1192
|
+
side of the output image if each row in the output image was not evenly
|
1193
|
+
divisible by 16 bytes.
|
1194
|
+
|
1195
|
+
8. Fixed an issue whereby attempting to build the SIMD extensions with Xcode
|
1196
|
+
4.3 on OS X platforms would cause NASM to return numerous errors of the form
|
1197
|
+
"'%define' expects a macro identifier".
|
1198
|
+
|
1199
|
+
9. Added flags to the TurboJPEG API that allow the caller to force the use of
|
1200
|
+
either the fast or the accurate DCT/IDCT algorithms in the underlying codec.
|
1201
|
+
|
1202
|
+
|
1203
|
+
1.2.0
|
1204
|
+
=====
|
1205
|
+
|
1206
|
+
### Significant changes relative to 1.2 beta1:
|
1207
|
+
|
1208
|
+
1. Fixed build issue with YASM on Unix systems (the libjpeg-turbo build system
|
1209
|
+
was not adding the current directory to the assembler include path, so YASM
|
1210
|
+
was not able to find jsimdcfg.inc.)
|
1211
|
+
|
1212
|
+
2. Fixed out-of-bounds read in SSE2 SIMD code that occurred when decompressing
|
1213
|
+
a JPEG image to a bitmap buffer whose size was not a multiple of 16 bytes.
|
1214
|
+
This was more of an annoyance than an actual bug, since it did not cause any
|
1215
|
+
actual run-time problems, but the issue showed up when running libjpeg-turbo in
|
1216
|
+
valgrind. See <http://crbug.com/72399> for more information.
|
1217
|
+
|
1218
|
+
3. Added a compile-time macro (`LIBJPEG_TURBO_VERSION`) that can be used to
|
1219
|
+
check the version of libjpeg-turbo against which an application was compiled.
|
1220
|
+
|
1221
|
+
4. Added new RGBA/BGRA/ABGR/ARGB colorspace extension constants (libjpeg API)
|
1222
|
+
and pixel formats (TurboJPEG API), which allow applications to specify that,
|
1223
|
+
when decompressing to a 4-component RGB buffer, the unused byte should be set
|
1224
|
+
to 0xFF so that it can be interpreted as an opaque alpha channel.
|
1225
|
+
|
1226
|
+
5. Fixed regression issue whereby DevIL failed to build against libjpeg-turbo
|
1227
|
+
because libjpeg-turbo's distributed version of jconfig.h contained an `INLINE`
|
1228
|
+
macro, which conflicted with a similar macro in DevIL. This macro is used only
|
1229
|
+
internally when building libjpeg-turbo, so it was moved into config.h.
|
1230
|
+
|
1231
|
+
6. libjpeg-turbo will now correctly decompress erroneous CMYK/YCCK JPEGs whose
|
1232
|
+
K component is assigned a component ID of 1 instead of 4. Although these files
|
1233
|
+
are in violation of the spec, other JPEG implementations handle them
|
1234
|
+
correctly.
|
1235
|
+
|
1236
|
+
7. Added ARMv6 and ARMv7 architectures to libjpeg.a and libturbojpeg.a in
|
1237
|
+
the official libjpeg-turbo binary package for OS X, so that those libraries can
|
1238
|
+
be used to build both OS X and iOS applications.
|
1239
|
+
|
1240
|
+
|
1241
|
+
1.1.90 (1.2 beta1)
|
1242
|
+
==================
|
1243
|
+
|
1244
|
+
### Significant changes relative to 1.1.1:
|
1245
|
+
|
1246
|
+
1. Added a Java wrapper for the TurboJPEG API. See [java/README](java/README)
|
1247
|
+
for more details.
|
1248
|
+
|
1249
|
+
2. The TurboJPEG API can now be used to scale down images during
|
1250
|
+
decompression.
|
1251
|
+
|
1252
|
+
3. Added SIMD routines for RGB-to-grayscale color conversion, which
|
1253
|
+
significantly improves the performance of grayscale JPEG compression from an
|
1254
|
+
RGB source image.
|
1255
|
+
|
1256
|
+
4. Improved the performance of the C color conversion routines, which are used
|
1257
|
+
on platforms for which SIMD acceleration is not available.
|
1258
|
+
|
1259
|
+
5. Added a function to the TurboJPEG API that performs lossless transforms.
|
1260
|
+
This function is implemented using the same back end as jpegtran, but it
|
1261
|
+
performs transcoding entirely in memory and allows multiple transforms and/or
|
1262
|
+
crop operations to be batched together, so the source coefficients only need to
|
1263
|
+
be read once. This is useful when generating image tiles from a single source
|
1264
|
+
JPEG.
|
1265
|
+
|
1266
|
+
6. Added tests for the new TurboJPEG scaled decompression and lossless
|
1267
|
+
transform features to tjbench (the TurboJPEG benchmark, formerly called
|
1268
|
+
"jpgtest".)
|
1269
|
+
|
1270
|
+
7. Added support for 4:4:0 (transposed 4:2:2) subsampling in TurboJPEG, which
|
1271
|
+
was necessary in order for it to read 4:2:2 JPEG files that had been losslessly
|
1272
|
+
transposed or rotated 90 degrees.
|
1273
|
+
|
1274
|
+
8. All legacy VirtualGL code has been re-factored, and this has allowed
|
1275
|
+
libjpeg-turbo, in its entirety, to be re-licensed under a BSD-style license.
|
1276
|
+
|
1277
|
+
9. libjpeg-turbo can now be built with YASM.
|
1278
|
+
|
1279
|
+
10. Added SIMD acceleration for ARM Linux and iOS platforms that support
|
1280
|
+
NEON instructions.
|
1281
|
+
|
1282
|
+
11. Refactored the TurboJPEG C API and documented it using Doxygen. The
|
1283
|
+
TurboJPEG 1.2 API uses pixel formats to define the size and component order of
|
1284
|
+
the uncompressed source/destination images, and it includes a more efficient
|
1285
|
+
version of `TJBUFSIZE()` that computes a worst-case JPEG size based on the
|
1286
|
+
level of chrominance subsampling. The refactored implementation of the
|
1287
|
+
TurboJPEG API now uses the libjpeg memory source and destination managers,
|
1288
|
+
which allows the TurboJPEG compressor to grow the JPEG buffer as necessary.
|
1289
|
+
|
1290
|
+
12. Eliminated errors in the output of jpegtran on Windows that occurred when
|
1291
|
+
the application was invoked using I/O redirection
|
1292
|
+
(`jpegtran <input.jpg >output.jpg`.)
|
1293
|
+
|
1294
|
+
13. The inclusion of libjpeg v7 and v8 emulation as well as arithmetic coding
|
1295
|
+
support in libjpeg-turbo v1.1.0 introduced several new error constants in
|
1296
|
+
jerror.h, and these were mistakenly enabled for all emulation modes, causing
|
1297
|
+
the error enum in libjpeg-turbo to sometimes have different values than the
|
1298
|
+
same enum in libjpeg. This represents an ABI incompatibility, and it caused
|
1299
|
+
problems with rare applications that took specific action based on a particular
|
1300
|
+
error value. The fix was to include the new error constants conditionally
|
1301
|
+
based on whether libjpeg v7 or v8 emulation was enabled.
|
1302
|
+
|
1303
|
+
14. Fixed an issue whereby Windows applications that used libjpeg-turbo would
|
1304
|
+
fail to compile if the Windows system headers were included before jpeglib.h.
|
1305
|
+
This issue was caused by a conflict in the definition of the INT32 type.
|
1306
|
+
|
1307
|
+
15. Fixed 32-bit supplementary package for amd64 Debian systems, which was
|
1308
|
+
broken by enhancements to the packaging system in 1.1.
|
1309
|
+
|
1310
|
+
16. When decompressing a JPEG image using an output colorspace of
|
1311
|
+
`JCS_EXT_RGBX`, `JCS_EXT_BGRX`, `JCS_EXT_XBGR`, or `JCS_EXT_XRGB`,
|
1312
|
+
libjpeg-turbo will now set the unused byte to 0xFF, which allows applications
|
1313
|
+
to interpret that byte as an alpha channel (0xFF = opaque).
|
1314
|
+
|
1315
|
+
|
1316
|
+
1.1.1
|
1317
|
+
=====
|
1318
|
+
|
1319
|
+
### Significant changes relative to 1.1.0:
|
1320
|
+
|
1321
|
+
1. Fixed a 1-pixel error in row 0, column 21 of the luminance plane generated
|
1322
|
+
by `tjEncodeYUV()`.
|
1323
|
+
|
1324
|
+
2. libjpeg-turbo's accelerated Huffman decoder previously ignored unexpected
|
1325
|
+
markers found in the middle of the JPEG data stream during decompression. It
|
1326
|
+
will now hand off decoding of a particular block to the unaccelerated Huffman
|
1327
|
+
decoder if an unexpected marker is found, so that the unaccelerated Huffman
|
1328
|
+
decoder can generate an appropriate warning.
|
1329
|
+
|
1330
|
+
3. Older versions of MinGW64 prefixed symbol names with underscores by
|
1331
|
+
default, which differed from the behavior of 64-bit Visual C++. MinGW64 1.0
|
1332
|
+
has adopted the behavior of 64-bit Visual C++ as the default, so to accommodate
|
1333
|
+
this, the libjpeg-turbo SIMD function names are no longer prefixed with an
|
1334
|
+
underscore when building with MinGW64. This means that, when building
|
1335
|
+
libjpeg-turbo with older versions of MinGW64, you will now have to add
|
1336
|
+
`-fno-leading-underscore` to the `CFLAGS`.
|
1337
|
+
|
1338
|
+
4. Fixed a regression bug in the NSIS script that caused the Windows installer
|
1339
|
+
build to fail when using the Visual Studio IDE.
|
1340
|
+
|
1341
|
+
5. Fixed a bug in `jpeg_read_coefficients()` whereby it would not initialize
|
1342
|
+
`cinfo->image_width` and `cinfo->image_height` if libjpeg v7 or v8 emulation
|
1343
|
+
was enabled. This specifically caused the jpegoptim program to fail if it was
|
1344
|
+
linked against a version of libjpeg-turbo that was built with libjpeg v7 or v8
|
1345
|
+
emulation.
|
1346
|
+
|
1347
|
+
6. Eliminated excessive I/O overhead that occurred when reading BMP files in
|
1348
|
+
cjpeg.
|
1349
|
+
|
1350
|
+
7. Eliminated errors in the output of cjpeg on Windows that occurred when the
|
1351
|
+
application was invoked using I/O redirection (`cjpeg <inputfile >output.jpg`.)
|
1352
|
+
|
1353
|
+
|
1354
|
+
1.1.0
|
1355
|
+
=====
|
1356
|
+
|
1357
|
+
### Significant changes relative to 1.1 beta1:
|
1358
|
+
|
1359
|
+
1. The algorithm used by the SIMD quantization function cannot produce correct
|
1360
|
+
results when the JPEG quality is >= 98 and the fast integer forward DCT is
|
1361
|
+
used. Thus, the non-SIMD quantization function is now used for those cases,
|
1362
|
+
and libjpeg-turbo should now produce identical output to libjpeg v6b in all
|
1363
|
+
cases.
|
1364
|
+
|
1365
|
+
2. Despite the above, the fast integer forward DCT still degrades somewhat for
|
1366
|
+
JPEG qualities greater than 95, so the TurboJPEG wrapper will now automatically
|
1367
|
+
use the slow integer forward DCT when generating JPEG images of quality 96 or
|
1368
|
+
greater. This reduces compression performance by as much as 15% for these
|
1369
|
+
high-quality images but is necessary to ensure that the images are perceptually
|
1370
|
+
lossless. It also ensures that the library can avoid the performance pitfall
|
1371
|
+
created by [1].
|
1372
|
+
|
1373
|
+
3. Ported jpgtest.cxx to pure C to avoid the need for a C++ compiler.
|
1374
|
+
|
1375
|
+
4. Fixed visual artifacts in grayscale JPEG compression caused by a typo in
|
1376
|
+
the RGB-to-luminance lookup tables.
|
1377
|
+
|
1378
|
+
5. The Windows distribution packages now include the libjpeg run-time programs
|
1379
|
+
(cjpeg, etc.)
|
1380
|
+
|
1381
|
+
6. All packages now include jpgtest.
|
1382
|
+
|
1383
|
+
7. The TurboJPEG dynamic library now uses versioned symbols.
|
1384
|
+
|
1385
|
+
8. Added two new TurboJPEG API functions, `tjEncodeYUV()` and
|
1386
|
+
`tjDecompressToYUV()`, to replace the somewhat hackish `TJ_YUV` flag.
|
1387
|
+
|
1388
|
+
|
1389
|
+
1.0.90 (1.1 beta1)
|
1390
|
+
==================
|
1391
|
+
|
1392
|
+
### Significant changes relative to 1.0.1:
|
1393
|
+
|
1394
|
+
1. Added emulation of the libjpeg v7 and v8 APIs and ABIs. See
|
1395
|
+
[README.md](README.md) for more details. This feature was sponsored by
|
1396
|
+
CamTrace SAS.
|
1397
|
+
|
1398
|
+
2. Created a new CMake-based build system for the Visual C++ and MinGW builds.
|
1399
|
+
|
1400
|
+
3. Grayscale bitmaps can now be compressed from/decompressed to using the
|
1401
|
+
TurboJPEG API.
|
1402
|
+
|
1403
|
+
4. jpgtest can now be used to test decompression performance with existing
|
1404
|
+
JPEG images.
|
1405
|
+
|
1406
|
+
5. If the default install prefix (/opt/libjpeg-turbo) is used, then
|
1407
|
+
`make install` now creates /opt/libjpeg-turbo/lib32 and
|
1408
|
+
/opt/libjpeg-turbo/lib64 sym links to duplicate the behavior of the binary
|
1409
|
+
packages.
|
1410
|
+
|
1411
|
+
6. All symbols in the libjpeg-turbo dynamic library are now versioned, even
|
1412
|
+
when the library is built with libjpeg v6b emulation.
|
1413
|
+
|
1414
|
+
7. Added arithmetic encoding and decoding support (can be disabled with
|
1415
|
+
configure or CMake options)
|
1416
|
+
|
1417
|
+
8. Added a `TJ_YUV` flag to the TurboJPEG API, which causes both the compressor
|
1418
|
+
and decompressor to output planar YUV images.
|
1419
|
+
|
1420
|
+
9. Added an extended version of `tjDecompressHeader()` to the TurboJPEG API,
|
1421
|
+
which allows the caller to determine the type of subsampling used in a JPEG
|
1422
|
+
image.
|
1423
|
+
|
1424
|
+
10. Added further protections against invalid Huffman codes.
|
1425
|
+
|
1426
|
+
|
1427
|
+
1.0.1
|
1428
|
+
=====
|
1429
|
+
|
1430
|
+
### Significant changes relative to 1.0.0:
|
1431
|
+
|
1432
|
+
1. The Huffman decoder will now handle erroneous Huffman codes (for instance,
|
1433
|
+
from a corrupt JPEG image.) Previously, these would cause libjpeg-turbo to
|
1434
|
+
crash under certain circumstances.
|
1435
|
+
|
1436
|
+
2. Fixed typo in SIMD dispatch routines that was causing 4:2:2 upsampling to
|
1437
|
+
be used instead of 4:2:0 when decompressing JPEG images using SSE2 code.
|
1438
|
+
|
1439
|
+
3. The configure script will now automatically determine whether the
|
1440
|
+
`INCOMPLETE_TYPES_BROKEN` macro should be defined.
|
1441
|
+
|
1442
|
+
|
1443
|
+
1.0.0
|
1444
|
+
=====
|
1445
|
+
|
1446
|
+
### Significant changes relative to 0.0.93:
|
1447
|
+
|
1448
|
+
1. 2983700: Further FreeBSD build tweaks (no longer necessary to specify
|
1449
|
+
`--host` when configuring on a 64-bit system)
|
1450
|
+
|
1451
|
+
2. Created symlinks in the Unix/Linux packages so that the TurboJPEG
|
1452
|
+
include file can always be found in /opt/libjpeg-turbo/include, the 32-bit
|
1453
|
+
static libraries can always be found in /opt/libjpeg-turbo/lib32, and the
|
1454
|
+
64-bit static libraries can always be found in /opt/libjpeg-turbo/lib64.
|
1455
|
+
|
1456
|
+
3. The Unix/Linux distribution packages now include the libjpeg run-time
|
1457
|
+
programs (cjpeg, etc.) and man pages.
|
1458
|
+
|
1459
|
+
4. Created a 32-bit supplementary package for amd64 Debian systems, which
|
1460
|
+
contains just the 32-bit libjpeg-turbo libraries.
|
1461
|
+
|
1462
|
+
5. Moved the libraries from */lib32 to */lib in the i386 Debian package.
|
1463
|
+
|
1464
|
+
6. Include distribution package for Cygwin
|
1465
|
+
|
1466
|
+
7. No longer necessary to specify `--without-simd` on non-x86 architectures,
|
1467
|
+
and unit tests now work on those architectures.
|
1468
|
+
|
1469
|
+
|
1470
|
+
0.0.93
|
1471
|
+
======
|
1472
|
+
|
1473
|
+
### Significant changes since 0.0.91:
|
1474
|
+
|
1475
|
+
1. 2982659: Fixed x86-64 build on FreeBSD systems
|
1476
|
+
|
1477
|
+
2. 2988188: Added support for Windows 64-bit systems
|
1478
|
+
|
1479
|
+
|
1480
|
+
0.0.91
|
1481
|
+
======
|
1482
|
+
|
1483
|
+
### Significant changes relative to 0.0.90:
|
1484
|
+
|
1485
|
+
1. Added documentation to .deb packages
|
1486
|
+
|
1487
|
+
2. 2968313: Fixed data corruption issues when decompressing large JPEG images
|
1488
|
+
and/or using buffered I/O with the libjpeg-turbo decompressor
|
1489
|
+
|
1490
|
+
|
1491
|
+
0.0.90
|
1492
|
+
======
|
1493
|
+
|
1494
|
+
Initial release
|