epeg 1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/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,932 @@
|
|
1
|
+
/*
|
2
|
+
* jcarith.c
|
3
|
+
*
|
4
|
+
* This file was part of the Independent JPEG Group's software:
|
5
|
+
* Developed 1997-2009 by Guido Vollbeding.
|
6
|
+
* libjpeg-turbo Modifications:
|
7
|
+
* Copyright (C) 2015, 2018, D. R. Commander.
|
8
|
+
* For conditions of distribution and use, see the accompanying README.ijg
|
9
|
+
* file.
|
10
|
+
*
|
11
|
+
* This file contains portable arithmetic entropy encoding routines for JPEG
|
12
|
+
* (implementing Recommendation ITU-T T.81 | ISO/IEC 10918-1).
|
13
|
+
*
|
14
|
+
* Both sequential and progressive modes are supported in this single module.
|
15
|
+
*
|
16
|
+
* Suspension is not currently supported in this module.
|
17
|
+
*
|
18
|
+
* NOTE: All referenced figures are from
|
19
|
+
* Recommendation ITU-T T.81 (1992) | ISO/IEC 10918-1:1994.
|
20
|
+
*/
|
21
|
+
|
22
|
+
#define JPEG_INTERNALS
|
23
|
+
#include "jinclude.h"
|
24
|
+
#include "jpeglib.h"
|
25
|
+
|
26
|
+
|
27
|
+
/* Expanded entropy encoder object for arithmetic encoding. */
|
28
|
+
|
29
|
+
typedef struct {
|
30
|
+
struct jpeg_entropy_encoder pub; /* public fields */
|
31
|
+
|
32
|
+
JLONG c; /* C register, base of coding interval, layout as in sec. D.1.3 */
|
33
|
+
JLONG a; /* A register, normalized size of coding interval */
|
34
|
+
JLONG sc; /* counter for stacked 0xFF values which might overflow */
|
35
|
+
JLONG zc; /* counter for pending 0x00 output values which might *
|
36
|
+
* be discarded at the end ("Pacman" termination) */
|
37
|
+
int ct; /* bit shift counter, determines when next byte will be written */
|
38
|
+
int buffer; /* buffer for most recent output byte != 0xFF */
|
39
|
+
|
40
|
+
int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
|
41
|
+
int dc_context[MAX_COMPS_IN_SCAN]; /* context index for DC conditioning */
|
42
|
+
|
43
|
+
unsigned int restarts_to_go; /* MCUs left in this restart interval */
|
44
|
+
int next_restart_num; /* next restart number to write (0-7) */
|
45
|
+
|
46
|
+
/* Pointers to statistics areas (these workspaces have image lifespan) */
|
47
|
+
unsigned char *dc_stats[NUM_ARITH_TBLS];
|
48
|
+
unsigned char *ac_stats[NUM_ARITH_TBLS];
|
49
|
+
|
50
|
+
/* Statistics bin for coding with fixed probability 0.5 */
|
51
|
+
unsigned char fixed_bin[4];
|
52
|
+
} arith_entropy_encoder;
|
53
|
+
|
54
|
+
typedef arith_entropy_encoder *arith_entropy_ptr;
|
55
|
+
|
56
|
+
/* The following two definitions specify the allocation chunk size
|
57
|
+
* for the statistics area.
|
58
|
+
* According to sections F.1.4.4.1.3 and F.1.4.4.2, we need at least
|
59
|
+
* 49 statistics bins for DC, and 245 statistics bins for AC coding.
|
60
|
+
*
|
61
|
+
* We use a compact representation with 1 byte per statistics bin,
|
62
|
+
* thus the numbers directly represent byte sizes.
|
63
|
+
* This 1 byte per statistics bin contains the meaning of the MPS
|
64
|
+
* (more probable symbol) in the highest bit (mask 0x80), and the
|
65
|
+
* index into the probability estimation state machine table
|
66
|
+
* in the lower bits (mask 0x7F).
|
67
|
+
*/
|
68
|
+
|
69
|
+
#define DC_STAT_BINS 64
|
70
|
+
#define AC_STAT_BINS 256
|
71
|
+
|
72
|
+
/* NOTE: Uncomment the following #define if you want to use the
|
73
|
+
* given formula for calculating the AC conditioning parameter Kx
|
74
|
+
* for spectral selection progressive coding in section G.1.3.2
|
75
|
+
* of the spec (Kx = Kmin + SRL (8 + Se - Kmin) 4).
|
76
|
+
* Although the spec and P&M authors claim that this "has proven
|
77
|
+
* to give good results for 8 bit precision samples", I'm not
|
78
|
+
* convinced yet that this is really beneficial.
|
79
|
+
* Early tests gave only very marginal compression enhancements
|
80
|
+
* (a few - around 5 or so - bytes even for very large files),
|
81
|
+
* which would turn out rather negative if we'd suppress the
|
82
|
+
* DAC (Define Arithmetic Conditioning) marker segments for
|
83
|
+
* the default parameters in the future.
|
84
|
+
* Note that currently the marker writing module emits 12-byte
|
85
|
+
* DAC segments for a full-component scan in a color image.
|
86
|
+
* This is not worth worrying about IMHO. However, since the
|
87
|
+
* spec defines the default values to be used if the tables
|
88
|
+
* are omitted (unlike Huffman tables, which are required
|
89
|
+
* anyway), one might optimize this behaviour in the future,
|
90
|
+
* and then it would be disadvantageous to use custom tables if
|
91
|
+
* they don't provide sufficient gain to exceed the DAC size.
|
92
|
+
*
|
93
|
+
* On the other hand, I'd consider it as a reasonable result
|
94
|
+
* that the conditioning has no significant influence on the
|
95
|
+
* compression performance. This means that the basic
|
96
|
+
* statistical model is already rather stable.
|
97
|
+
*
|
98
|
+
* Thus, at the moment, we use the default conditioning values
|
99
|
+
* anyway, and do not use the custom formula.
|
100
|
+
*
|
101
|
+
#define CALCULATE_SPECTRAL_CONDITIONING
|
102
|
+
*/
|
103
|
+
|
104
|
+
/* IRIGHT_SHIFT is like RIGHT_SHIFT, but works on int rather than JLONG.
|
105
|
+
* We assume that int right shift is unsigned if JLONG right shift is,
|
106
|
+
* which should be safe.
|
107
|
+
*/
|
108
|
+
|
109
|
+
#ifdef RIGHT_SHIFT_IS_UNSIGNED
|
110
|
+
#define ISHIFT_TEMPS int ishift_temp;
|
111
|
+
#define IRIGHT_SHIFT(x, shft) \
|
112
|
+
((ishift_temp = (x)) < 0 ? \
|
113
|
+
(ishift_temp >> (shft)) | ((~0) << (16 - (shft))) : \
|
114
|
+
(ishift_temp >> (shft)))
|
115
|
+
#else
|
116
|
+
#define ISHIFT_TEMPS
|
117
|
+
#define IRIGHT_SHIFT(x, shft) ((x) >> (shft))
|
118
|
+
#endif
|
119
|
+
|
120
|
+
|
121
|
+
LOCAL(void)
|
122
|
+
emit_byte(int val, j_compress_ptr cinfo)
|
123
|
+
/* Write next output byte; we do not support suspension in this module. */
|
124
|
+
{
|
125
|
+
struct jpeg_destination_mgr *dest = cinfo->dest;
|
126
|
+
|
127
|
+
*dest->next_output_byte++ = (JOCTET)val;
|
128
|
+
if (--dest->free_in_buffer == 0)
|
129
|
+
if (!(*dest->empty_output_buffer) (cinfo))
|
130
|
+
ERREXIT(cinfo, JERR_CANT_SUSPEND);
|
131
|
+
}
|
132
|
+
|
133
|
+
|
134
|
+
/*
|
135
|
+
* Finish up at the end of an arithmetic-compressed scan.
|
136
|
+
*/
|
137
|
+
|
138
|
+
METHODDEF(void)
|
139
|
+
finish_pass(j_compress_ptr cinfo)
|
140
|
+
{
|
141
|
+
arith_entropy_ptr e = (arith_entropy_ptr)cinfo->entropy;
|
142
|
+
JLONG temp;
|
143
|
+
|
144
|
+
/* Section D.1.8: Termination of encoding */
|
145
|
+
|
146
|
+
/* Find the e->c in the coding interval with the largest
|
147
|
+
* number of trailing zero bits */
|
148
|
+
if ((temp = (e->a - 1 + e->c) & 0xFFFF0000UL) < e->c)
|
149
|
+
e->c = temp + 0x8000L;
|
150
|
+
else
|
151
|
+
e->c = temp;
|
152
|
+
/* Send remaining bytes to output */
|
153
|
+
e->c <<= e->ct;
|
154
|
+
if (e->c & 0xF8000000UL) {
|
155
|
+
/* One final overflow has to be handled */
|
156
|
+
if (e->buffer >= 0) {
|
157
|
+
if (e->zc)
|
158
|
+
do emit_byte(0x00, cinfo);
|
159
|
+
while (--e->zc);
|
160
|
+
emit_byte(e->buffer + 1, cinfo);
|
161
|
+
if (e->buffer + 1 == 0xFF)
|
162
|
+
emit_byte(0x00, cinfo);
|
163
|
+
}
|
164
|
+
e->zc += e->sc; /* carry-over converts stacked 0xFF bytes to 0x00 */
|
165
|
+
e->sc = 0;
|
166
|
+
} else {
|
167
|
+
if (e->buffer == 0)
|
168
|
+
++e->zc;
|
169
|
+
else if (e->buffer >= 0) {
|
170
|
+
if (e->zc)
|
171
|
+
do emit_byte(0x00, cinfo);
|
172
|
+
while (--e->zc);
|
173
|
+
emit_byte(e->buffer, cinfo);
|
174
|
+
}
|
175
|
+
if (e->sc) {
|
176
|
+
if (e->zc)
|
177
|
+
do emit_byte(0x00, cinfo);
|
178
|
+
while (--e->zc);
|
179
|
+
do {
|
180
|
+
emit_byte(0xFF, cinfo);
|
181
|
+
emit_byte(0x00, cinfo);
|
182
|
+
} while (--e->sc);
|
183
|
+
}
|
184
|
+
}
|
185
|
+
/* Output final bytes only if they are not 0x00 */
|
186
|
+
if (e->c & 0x7FFF800L) {
|
187
|
+
if (e->zc) /* output final pending zero bytes */
|
188
|
+
do emit_byte(0x00, cinfo);
|
189
|
+
while (--e->zc);
|
190
|
+
emit_byte((e->c >> 19) & 0xFF, cinfo);
|
191
|
+
if (((e->c >> 19) & 0xFF) == 0xFF)
|
192
|
+
emit_byte(0x00, cinfo);
|
193
|
+
if (e->c & 0x7F800L) {
|
194
|
+
emit_byte((e->c >> 11) & 0xFF, cinfo);
|
195
|
+
if (((e->c >> 11) & 0xFF) == 0xFF)
|
196
|
+
emit_byte(0x00, cinfo);
|
197
|
+
}
|
198
|
+
}
|
199
|
+
}
|
200
|
+
|
201
|
+
|
202
|
+
/*
|
203
|
+
* The core arithmetic encoding routine (common in JPEG and JBIG).
|
204
|
+
* This needs to go as fast as possible.
|
205
|
+
* Machine-dependent optimization facilities
|
206
|
+
* are not utilized in this portable implementation.
|
207
|
+
* However, this code should be fairly efficient and
|
208
|
+
* may be a good base for further optimizations anyway.
|
209
|
+
*
|
210
|
+
* Parameter 'val' to be encoded may be 0 or 1 (binary decision).
|
211
|
+
*
|
212
|
+
* Note: I've added full "Pacman" termination support to the
|
213
|
+
* byte output routines, which is equivalent to the optional
|
214
|
+
* Discard_final_zeros procedure (Figure D.15) in the spec.
|
215
|
+
* Thus, we always produce the shortest possible output
|
216
|
+
* stream compliant to the spec (no trailing zero bytes,
|
217
|
+
* except for FF stuffing).
|
218
|
+
*
|
219
|
+
* I've also introduced a new scheme for accessing
|
220
|
+
* the probability estimation state machine table,
|
221
|
+
* derived from Markus Kuhn's JBIG implementation.
|
222
|
+
*/
|
223
|
+
|
224
|
+
LOCAL(void)
|
225
|
+
arith_encode(j_compress_ptr cinfo, unsigned char *st, int val)
|
226
|
+
{
|
227
|
+
register arith_entropy_ptr e = (arith_entropy_ptr)cinfo->entropy;
|
228
|
+
register unsigned char nl, nm;
|
229
|
+
register JLONG qe, temp;
|
230
|
+
register int sv;
|
231
|
+
|
232
|
+
/* Fetch values from our compact representation of Table D.2:
|
233
|
+
* Qe values and probability estimation state machine
|
234
|
+
*/
|
235
|
+
sv = *st;
|
236
|
+
qe = jpeg_aritab[sv & 0x7F]; /* => Qe_Value */
|
237
|
+
nl = qe & 0xFF; qe >>= 8; /* Next_Index_LPS + Switch_MPS */
|
238
|
+
nm = qe & 0xFF; qe >>= 8; /* Next_Index_MPS */
|
239
|
+
|
240
|
+
/* Encode & estimation procedures per sections D.1.4 & D.1.5 */
|
241
|
+
e->a -= qe;
|
242
|
+
if (val != (sv >> 7)) {
|
243
|
+
/* Encode the less probable symbol */
|
244
|
+
if (e->a >= qe) {
|
245
|
+
/* If the interval size (qe) for the less probable symbol (LPS)
|
246
|
+
* is larger than the interval size for the MPS, then exchange
|
247
|
+
* the two symbols for coding efficiency, otherwise code the LPS
|
248
|
+
* as usual: */
|
249
|
+
e->c += e->a;
|
250
|
+
e->a = qe;
|
251
|
+
}
|
252
|
+
*st = (sv & 0x80) ^ nl; /* Estimate_after_LPS */
|
253
|
+
} else {
|
254
|
+
/* Encode the more probable symbol */
|
255
|
+
if (e->a >= 0x8000L)
|
256
|
+
return; /* A >= 0x8000 -> ready, no renormalization required */
|
257
|
+
if (e->a < qe) {
|
258
|
+
/* If the interval size (qe) for the less probable symbol (LPS)
|
259
|
+
* is larger than the interval size for the MPS, then exchange
|
260
|
+
* the two symbols for coding efficiency: */
|
261
|
+
e->c += e->a;
|
262
|
+
e->a = qe;
|
263
|
+
}
|
264
|
+
*st = (sv & 0x80) ^ nm; /* Estimate_after_MPS */
|
265
|
+
}
|
266
|
+
|
267
|
+
/* Renormalization & data output per section D.1.6 */
|
268
|
+
do {
|
269
|
+
e->a <<= 1;
|
270
|
+
e->c <<= 1;
|
271
|
+
if (--e->ct == 0) {
|
272
|
+
/* Another byte is ready for output */
|
273
|
+
temp = e->c >> 19;
|
274
|
+
if (temp > 0xFF) {
|
275
|
+
/* Handle overflow over all stacked 0xFF bytes */
|
276
|
+
if (e->buffer >= 0) {
|
277
|
+
if (e->zc)
|
278
|
+
do emit_byte(0x00, cinfo);
|
279
|
+
while (--e->zc);
|
280
|
+
emit_byte(e->buffer + 1, cinfo);
|
281
|
+
if (e->buffer + 1 == 0xFF)
|
282
|
+
emit_byte(0x00, cinfo);
|
283
|
+
}
|
284
|
+
e->zc += e->sc; /* carry-over converts stacked 0xFF bytes to 0x00 */
|
285
|
+
e->sc = 0;
|
286
|
+
/* Note: The 3 spacer bits in the C register guarantee
|
287
|
+
* that the new buffer byte can't be 0xFF here
|
288
|
+
* (see page 160 in the P&M JPEG book). */
|
289
|
+
e->buffer = temp & 0xFF; /* new output byte, might overflow later */
|
290
|
+
} else if (temp == 0xFF) {
|
291
|
+
++e->sc; /* stack 0xFF byte (which might overflow later) */
|
292
|
+
} else {
|
293
|
+
/* Output all stacked 0xFF bytes, they will not overflow any more */
|
294
|
+
if (e->buffer == 0)
|
295
|
+
++e->zc;
|
296
|
+
else if (e->buffer >= 0) {
|
297
|
+
if (e->zc)
|
298
|
+
do emit_byte(0x00, cinfo);
|
299
|
+
while (--e->zc);
|
300
|
+
emit_byte(e->buffer, cinfo);
|
301
|
+
}
|
302
|
+
if (e->sc) {
|
303
|
+
if (e->zc)
|
304
|
+
do emit_byte(0x00, cinfo);
|
305
|
+
while (--e->zc);
|
306
|
+
do {
|
307
|
+
emit_byte(0xFF, cinfo);
|
308
|
+
emit_byte(0x00, cinfo);
|
309
|
+
} while (--e->sc);
|
310
|
+
}
|
311
|
+
e->buffer = temp & 0xFF; /* new output byte (can still overflow) */
|
312
|
+
}
|
313
|
+
e->c &= 0x7FFFFL;
|
314
|
+
e->ct += 8;
|
315
|
+
}
|
316
|
+
} while (e->a < 0x8000L);
|
317
|
+
}
|
318
|
+
|
319
|
+
|
320
|
+
/*
|
321
|
+
* Emit a restart marker & resynchronize predictions.
|
322
|
+
*/
|
323
|
+
|
324
|
+
LOCAL(void)
|
325
|
+
emit_restart(j_compress_ptr cinfo, int restart_num)
|
326
|
+
{
|
327
|
+
arith_entropy_ptr entropy = (arith_entropy_ptr)cinfo->entropy;
|
328
|
+
int ci;
|
329
|
+
jpeg_component_info *compptr;
|
330
|
+
|
331
|
+
finish_pass(cinfo);
|
332
|
+
|
333
|
+
emit_byte(0xFF, cinfo);
|
334
|
+
emit_byte(JPEG_RST0 + restart_num, cinfo);
|
335
|
+
|
336
|
+
/* Re-initialize statistics areas */
|
337
|
+
for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
|
338
|
+
compptr = cinfo->cur_comp_info[ci];
|
339
|
+
/* DC needs no table for refinement scan */
|
340
|
+
if (cinfo->progressive_mode == 0 || (cinfo->Ss == 0 && cinfo->Ah == 0)) {
|
341
|
+
MEMZERO(entropy->dc_stats[compptr->dc_tbl_no], DC_STAT_BINS);
|
342
|
+
/* Reset DC predictions to 0 */
|
343
|
+
entropy->last_dc_val[ci] = 0;
|
344
|
+
entropy->dc_context[ci] = 0;
|
345
|
+
}
|
346
|
+
/* AC needs no table when not present */
|
347
|
+
if (cinfo->progressive_mode == 0 || cinfo->Se) {
|
348
|
+
MEMZERO(entropy->ac_stats[compptr->ac_tbl_no], AC_STAT_BINS);
|
349
|
+
}
|
350
|
+
}
|
351
|
+
|
352
|
+
/* Reset arithmetic encoding variables */
|
353
|
+
entropy->c = 0;
|
354
|
+
entropy->a = 0x10000L;
|
355
|
+
entropy->sc = 0;
|
356
|
+
entropy->zc = 0;
|
357
|
+
entropy->ct = 11;
|
358
|
+
entropy->buffer = -1; /* empty */
|
359
|
+
}
|
360
|
+
|
361
|
+
|
362
|
+
/*
|
363
|
+
* MCU encoding for DC initial scan (either spectral selection,
|
364
|
+
* or first pass of successive approximation).
|
365
|
+
*/
|
366
|
+
|
367
|
+
METHODDEF(boolean)
|
368
|
+
encode_mcu_DC_first(j_compress_ptr cinfo, JBLOCKROW *MCU_data)
|
369
|
+
{
|
370
|
+
arith_entropy_ptr entropy = (arith_entropy_ptr)cinfo->entropy;
|
371
|
+
JBLOCKROW block;
|
372
|
+
unsigned char *st;
|
373
|
+
int blkn, ci, tbl;
|
374
|
+
int v, v2, m;
|
375
|
+
ISHIFT_TEMPS
|
376
|
+
|
377
|
+
/* Emit restart marker if needed */
|
378
|
+
if (cinfo->restart_interval) {
|
379
|
+
if (entropy->restarts_to_go == 0) {
|
380
|
+
emit_restart(cinfo, entropy->next_restart_num);
|
381
|
+
entropy->restarts_to_go = cinfo->restart_interval;
|
382
|
+
entropy->next_restart_num++;
|
383
|
+
entropy->next_restart_num &= 7;
|
384
|
+
}
|
385
|
+
entropy->restarts_to_go--;
|
386
|
+
}
|
387
|
+
|
388
|
+
/* Encode the MCU data blocks */
|
389
|
+
for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
|
390
|
+
block = MCU_data[blkn];
|
391
|
+
ci = cinfo->MCU_membership[blkn];
|
392
|
+
tbl = cinfo->cur_comp_info[ci]->dc_tbl_no;
|
393
|
+
|
394
|
+
/* Compute the DC value after the required point transform by Al.
|
395
|
+
* This is simply an arithmetic right shift.
|
396
|
+
*/
|
397
|
+
m = IRIGHT_SHIFT((int)((*block)[0]), cinfo->Al);
|
398
|
+
|
399
|
+
/* Sections F.1.4.1 & F.1.4.4.1: Encoding of DC coefficients */
|
400
|
+
|
401
|
+
/* Table F.4: Point to statistics bin S0 for DC coefficient coding */
|
402
|
+
st = entropy->dc_stats[tbl] + entropy->dc_context[ci];
|
403
|
+
|
404
|
+
/* Figure F.4: Encode_DC_DIFF */
|
405
|
+
if ((v = m - entropy->last_dc_val[ci]) == 0) {
|
406
|
+
arith_encode(cinfo, st, 0);
|
407
|
+
entropy->dc_context[ci] = 0; /* zero diff category */
|
408
|
+
} else {
|
409
|
+
entropy->last_dc_val[ci] = m;
|
410
|
+
arith_encode(cinfo, st, 1);
|
411
|
+
/* Figure F.6: Encoding nonzero value v */
|
412
|
+
/* Figure F.7: Encoding the sign of v */
|
413
|
+
if (v > 0) {
|
414
|
+
arith_encode(cinfo, st + 1, 0); /* Table F.4: SS = S0 + 1 */
|
415
|
+
st += 2; /* Table F.4: SP = S0 + 2 */
|
416
|
+
entropy->dc_context[ci] = 4; /* small positive diff category */
|
417
|
+
} else {
|
418
|
+
v = -v;
|
419
|
+
arith_encode(cinfo, st + 1, 1); /* Table F.4: SS = S0 + 1 */
|
420
|
+
st += 3; /* Table F.4: SN = S0 + 3 */
|
421
|
+
entropy->dc_context[ci] = 8; /* small negative diff category */
|
422
|
+
}
|
423
|
+
/* Figure F.8: Encoding the magnitude category of v */
|
424
|
+
m = 0;
|
425
|
+
if (v -= 1) {
|
426
|
+
arith_encode(cinfo, st, 1);
|
427
|
+
m = 1;
|
428
|
+
v2 = v;
|
429
|
+
st = entropy->dc_stats[tbl] + 20; /* Table F.4: X1 = 20 */
|
430
|
+
while (v2 >>= 1) {
|
431
|
+
arith_encode(cinfo, st, 1);
|
432
|
+
m <<= 1;
|
433
|
+
st += 1;
|
434
|
+
}
|
435
|
+
}
|
436
|
+
arith_encode(cinfo, st, 0);
|
437
|
+
/* Section F.1.4.4.1.2: Establish dc_context conditioning category */
|
438
|
+
if (m < (int)((1L << cinfo->arith_dc_L[tbl]) >> 1))
|
439
|
+
entropy->dc_context[ci] = 0; /* zero diff category */
|
440
|
+
else if (m > (int)((1L << cinfo->arith_dc_U[tbl]) >> 1))
|
441
|
+
entropy->dc_context[ci] += 8; /* large diff category */
|
442
|
+
/* Figure F.9: Encoding the magnitude bit pattern of v */
|
443
|
+
st += 14;
|
444
|
+
while (m >>= 1)
|
445
|
+
arith_encode(cinfo, st, (m & v) ? 1 : 0);
|
446
|
+
}
|
447
|
+
}
|
448
|
+
|
449
|
+
return TRUE;
|
450
|
+
}
|
451
|
+
|
452
|
+
|
453
|
+
/*
|
454
|
+
* MCU encoding for AC initial scan (either spectral selection,
|
455
|
+
* or first pass of successive approximation).
|
456
|
+
*/
|
457
|
+
|
458
|
+
METHODDEF(boolean)
|
459
|
+
encode_mcu_AC_first(j_compress_ptr cinfo, JBLOCKROW *MCU_data)
|
460
|
+
{
|
461
|
+
arith_entropy_ptr entropy = (arith_entropy_ptr)cinfo->entropy;
|
462
|
+
JBLOCKROW block;
|
463
|
+
unsigned char *st;
|
464
|
+
int tbl, k, ke;
|
465
|
+
int v, v2, m;
|
466
|
+
|
467
|
+
/* Emit restart marker if needed */
|
468
|
+
if (cinfo->restart_interval) {
|
469
|
+
if (entropy->restarts_to_go == 0) {
|
470
|
+
emit_restart(cinfo, entropy->next_restart_num);
|
471
|
+
entropy->restarts_to_go = cinfo->restart_interval;
|
472
|
+
entropy->next_restart_num++;
|
473
|
+
entropy->next_restart_num &= 7;
|
474
|
+
}
|
475
|
+
entropy->restarts_to_go--;
|
476
|
+
}
|
477
|
+
|
478
|
+
/* Encode the MCU data block */
|
479
|
+
block = MCU_data[0];
|
480
|
+
tbl = cinfo->cur_comp_info[0]->ac_tbl_no;
|
481
|
+
|
482
|
+
/* Sections F.1.4.2 & F.1.4.4.2: Encoding of AC coefficients */
|
483
|
+
|
484
|
+
/* Establish EOB (end-of-block) index */
|
485
|
+
for (ke = cinfo->Se; ke > 0; ke--)
|
486
|
+
/* We must apply the point transform by Al. For AC coefficients this
|
487
|
+
* is an integer division with rounding towards 0. To do this portably
|
488
|
+
* in C, we shift after obtaining the absolute value.
|
489
|
+
*/
|
490
|
+
if ((v = (*block)[jpeg_natural_order[ke]]) >= 0) {
|
491
|
+
if (v >>= cinfo->Al) break;
|
492
|
+
} else {
|
493
|
+
v = -v;
|
494
|
+
if (v >>= cinfo->Al) break;
|
495
|
+
}
|
496
|
+
|
497
|
+
/* Figure F.5: Encode_AC_Coefficients */
|
498
|
+
for (k = cinfo->Ss; k <= ke; k++) {
|
499
|
+
st = entropy->ac_stats[tbl] + 3 * (k - 1);
|
500
|
+
arith_encode(cinfo, st, 0); /* EOB decision */
|
501
|
+
for (;;) {
|
502
|
+
if ((v = (*block)[jpeg_natural_order[k]]) >= 0) {
|
503
|
+
if (v >>= cinfo->Al) {
|
504
|
+
arith_encode(cinfo, st + 1, 1);
|
505
|
+
arith_encode(cinfo, entropy->fixed_bin, 0);
|
506
|
+
break;
|
507
|
+
}
|
508
|
+
} else {
|
509
|
+
v = -v;
|
510
|
+
if (v >>= cinfo->Al) {
|
511
|
+
arith_encode(cinfo, st + 1, 1);
|
512
|
+
arith_encode(cinfo, entropy->fixed_bin, 1);
|
513
|
+
break;
|
514
|
+
}
|
515
|
+
}
|
516
|
+
arith_encode(cinfo, st + 1, 0); st += 3; k++;
|
517
|
+
}
|
518
|
+
st += 2;
|
519
|
+
/* Figure F.8: Encoding the magnitude category of v */
|
520
|
+
m = 0;
|
521
|
+
if (v -= 1) {
|
522
|
+
arith_encode(cinfo, st, 1);
|
523
|
+
m = 1;
|
524
|
+
v2 = v;
|
525
|
+
if (v2 >>= 1) {
|
526
|
+
arith_encode(cinfo, st, 1);
|
527
|
+
m <<= 1;
|
528
|
+
st = entropy->ac_stats[tbl] +
|
529
|
+
(k <= cinfo->arith_ac_K[tbl] ? 189 : 217);
|
530
|
+
while (v2 >>= 1) {
|
531
|
+
arith_encode(cinfo, st, 1);
|
532
|
+
m <<= 1;
|
533
|
+
st += 1;
|
534
|
+
}
|
535
|
+
}
|
536
|
+
}
|
537
|
+
arith_encode(cinfo, st, 0);
|
538
|
+
/* Figure F.9: Encoding the magnitude bit pattern of v */
|
539
|
+
st += 14;
|
540
|
+
while (m >>= 1)
|
541
|
+
arith_encode(cinfo, st, (m & v) ? 1 : 0);
|
542
|
+
}
|
543
|
+
/* Encode EOB decision only if k <= cinfo->Se */
|
544
|
+
if (k <= cinfo->Se) {
|
545
|
+
st = entropy->ac_stats[tbl] + 3 * (k - 1);
|
546
|
+
arith_encode(cinfo, st, 1);
|
547
|
+
}
|
548
|
+
|
549
|
+
return TRUE;
|
550
|
+
}
|
551
|
+
|
552
|
+
|
553
|
+
/*
|
554
|
+
* MCU encoding for DC successive approximation refinement scan.
|
555
|
+
*/
|
556
|
+
|
557
|
+
METHODDEF(boolean)
|
558
|
+
encode_mcu_DC_refine(j_compress_ptr cinfo, JBLOCKROW *MCU_data)
|
559
|
+
{
|
560
|
+
arith_entropy_ptr entropy = (arith_entropy_ptr)cinfo->entropy;
|
561
|
+
unsigned char *st;
|
562
|
+
int Al, blkn;
|
563
|
+
|
564
|
+
/* Emit restart marker if needed */
|
565
|
+
if (cinfo->restart_interval) {
|
566
|
+
if (entropy->restarts_to_go == 0) {
|
567
|
+
emit_restart(cinfo, entropy->next_restart_num);
|
568
|
+
entropy->restarts_to_go = cinfo->restart_interval;
|
569
|
+
entropy->next_restart_num++;
|
570
|
+
entropy->next_restart_num &= 7;
|
571
|
+
}
|
572
|
+
entropy->restarts_to_go--;
|
573
|
+
}
|
574
|
+
|
575
|
+
st = entropy->fixed_bin; /* use fixed probability estimation */
|
576
|
+
Al = cinfo->Al;
|
577
|
+
|
578
|
+
/* Encode the MCU data blocks */
|
579
|
+
for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
|
580
|
+
/* We simply emit the Al'th bit of the DC coefficient value. */
|
581
|
+
arith_encode(cinfo, st, (MCU_data[blkn][0][0] >> Al) & 1);
|
582
|
+
}
|
583
|
+
|
584
|
+
return TRUE;
|
585
|
+
}
|
586
|
+
|
587
|
+
|
588
|
+
/*
|
589
|
+
* MCU encoding for AC successive approximation refinement scan.
|
590
|
+
*/
|
591
|
+
|
592
|
+
METHODDEF(boolean)
|
593
|
+
encode_mcu_AC_refine(j_compress_ptr cinfo, JBLOCKROW *MCU_data)
|
594
|
+
{
|
595
|
+
arith_entropy_ptr entropy = (arith_entropy_ptr)cinfo->entropy;
|
596
|
+
JBLOCKROW block;
|
597
|
+
unsigned char *st;
|
598
|
+
int tbl, k, ke, kex;
|
599
|
+
int v;
|
600
|
+
|
601
|
+
/* Emit restart marker if needed */
|
602
|
+
if (cinfo->restart_interval) {
|
603
|
+
if (entropy->restarts_to_go == 0) {
|
604
|
+
emit_restart(cinfo, entropy->next_restart_num);
|
605
|
+
entropy->restarts_to_go = cinfo->restart_interval;
|
606
|
+
entropy->next_restart_num++;
|
607
|
+
entropy->next_restart_num &= 7;
|
608
|
+
}
|
609
|
+
entropy->restarts_to_go--;
|
610
|
+
}
|
611
|
+
|
612
|
+
/* Encode the MCU data block */
|
613
|
+
block = MCU_data[0];
|
614
|
+
tbl = cinfo->cur_comp_info[0]->ac_tbl_no;
|
615
|
+
|
616
|
+
/* Section G.1.3.3: Encoding of AC coefficients */
|
617
|
+
|
618
|
+
/* Establish EOB (end-of-block) index */
|
619
|
+
for (ke = cinfo->Se; ke > 0; ke--)
|
620
|
+
/* We must apply the point transform by Al. For AC coefficients this
|
621
|
+
* is an integer division with rounding towards 0. To do this portably
|
622
|
+
* in C, we shift after obtaining the absolute value.
|
623
|
+
*/
|
624
|
+
if ((v = (*block)[jpeg_natural_order[ke]]) >= 0) {
|
625
|
+
if (v >>= cinfo->Al) break;
|
626
|
+
} else {
|
627
|
+
v = -v;
|
628
|
+
if (v >>= cinfo->Al) break;
|
629
|
+
}
|
630
|
+
|
631
|
+
/* Establish EOBx (previous stage end-of-block) index */
|
632
|
+
for (kex = ke; kex > 0; kex--)
|
633
|
+
if ((v = (*block)[jpeg_natural_order[kex]]) >= 0) {
|
634
|
+
if (v >>= cinfo->Ah) break;
|
635
|
+
} else {
|
636
|
+
v = -v;
|
637
|
+
if (v >>= cinfo->Ah) break;
|
638
|
+
}
|
639
|
+
|
640
|
+
/* Figure G.10: Encode_AC_Coefficients_SA */
|
641
|
+
for (k = cinfo->Ss; k <= ke; k++) {
|
642
|
+
st = entropy->ac_stats[tbl] + 3 * (k - 1);
|
643
|
+
if (k > kex)
|
644
|
+
arith_encode(cinfo, st, 0); /* EOB decision */
|
645
|
+
for (;;) {
|
646
|
+
if ((v = (*block)[jpeg_natural_order[k]]) >= 0) {
|
647
|
+
if (v >>= cinfo->Al) {
|
648
|
+
if (v >> 1) /* previously nonzero coef */
|
649
|
+
arith_encode(cinfo, st + 2, (v & 1));
|
650
|
+
else { /* newly nonzero coef */
|
651
|
+
arith_encode(cinfo, st + 1, 1);
|
652
|
+
arith_encode(cinfo, entropy->fixed_bin, 0);
|
653
|
+
}
|
654
|
+
break;
|
655
|
+
}
|
656
|
+
} else {
|
657
|
+
v = -v;
|
658
|
+
if (v >>= cinfo->Al) {
|
659
|
+
if (v >> 1) /* previously nonzero coef */
|
660
|
+
arith_encode(cinfo, st + 2, (v & 1));
|
661
|
+
else { /* newly nonzero coef */
|
662
|
+
arith_encode(cinfo, st + 1, 1);
|
663
|
+
arith_encode(cinfo, entropy->fixed_bin, 1);
|
664
|
+
}
|
665
|
+
break;
|
666
|
+
}
|
667
|
+
}
|
668
|
+
arith_encode(cinfo, st + 1, 0); st += 3; k++;
|
669
|
+
}
|
670
|
+
}
|
671
|
+
/* Encode EOB decision only if k <= cinfo->Se */
|
672
|
+
if (k <= cinfo->Se) {
|
673
|
+
st = entropy->ac_stats[tbl] + 3 * (k - 1);
|
674
|
+
arith_encode(cinfo, st, 1);
|
675
|
+
}
|
676
|
+
|
677
|
+
return TRUE;
|
678
|
+
}
|
679
|
+
|
680
|
+
|
681
|
+
/*
|
682
|
+
* Encode and output one MCU's worth of arithmetic-compressed coefficients.
|
683
|
+
*/
|
684
|
+
|
685
|
+
METHODDEF(boolean)
|
686
|
+
encode_mcu(j_compress_ptr cinfo, JBLOCKROW *MCU_data)
|
687
|
+
{
|
688
|
+
arith_entropy_ptr entropy = (arith_entropy_ptr)cinfo->entropy;
|
689
|
+
jpeg_component_info *compptr;
|
690
|
+
JBLOCKROW block;
|
691
|
+
unsigned char *st;
|
692
|
+
int blkn, ci, tbl, k, ke;
|
693
|
+
int v, v2, m;
|
694
|
+
|
695
|
+
/* Emit restart marker if needed */
|
696
|
+
if (cinfo->restart_interval) {
|
697
|
+
if (entropy->restarts_to_go == 0) {
|
698
|
+
emit_restart(cinfo, entropy->next_restart_num);
|
699
|
+
entropy->restarts_to_go = cinfo->restart_interval;
|
700
|
+
entropy->next_restart_num++;
|
701
|
+
entropy->next_restart_num &= 7;
|
702
|
+
}
|
703
|
+
entropy->restarts_to_go--;
|
704
|
+
}
|
705
|
+
|
706
|
+
/* Encode the MCU data blocks */
|
707
|
+
for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
|
708
|
+
block = MCU_data[blkn];
|
709
|
+
ci = cinfo->MCU_membership[blkn];
|
710
|
+
compptr = cinfo->cur_comp_info[ci];
|
711
|
+
|
712
|
+
/* Sections F.1.4.1 & F.1.4.4.1: Encoding of DC coefficients */
|
713
|
+
|
714
|
+
tbl = compptr->dc_tbl_no;
|
715
|
+
|
716
|
+
/* Table F.4: Point to statistics bin S0 for DC coefficient coding */
|
717
|
+
st = entropy->dc_stats[tbl] + entropy->dc_context[ci];
|
718
|
+
|
719
|
+
/* Figure F.4: Encode_DC_DIFF */
|
720
|
+
if ((v = (*block)[0] - entropy->last_dc_val[ci]) == 0) {
|
721
|
+
arith_encode(cinfo, st, 0);
|
722
|
+
entropy->dc_context[ci] = 0; /* zero diff category */
|
723
|
+
} else {
|
724
|
+
entropy->last_dc_val[ci] = (*block)[0];
|
725
|
+
arith_encode(cinfo, st, 1);
|
726
|
+
/* Figure F.6: Encoding nonzero value v */
|
727
|
+
/* Figure F.7: Encoding the sign of v */
|
728
|
+
if (v > 0) {
|
729
|
+
arith_encode(cinfo, st + 1, 0); /* Table F.4: SS = S0 + 1 */
|
730
|
+
st += 2; /* Table F.4: SP = S0 + 2 */
|
731
|
+
entropy->dc_context[ci] = 4; /* small positive diff category */
|
732
|
+
} else {
|
733
|
+
v = -v;
|
734
|
+
arith_encode(cinfo, st + 1, 1); /* Table F.4: SS = S0 + 1 */
|
735
|
+
st += 3; /* Table F.4: SN = S0 + 3 */
|
736
|
+
entropy->dc_context[ci] = 8; /* small negative diff category */
|
737
|
+
}
|
738
|
+
/* Figure F.8: Encoding the magnitude category of v */
|
739
|
+
m = 0;
|
740
|
+
if (v -= 1) {
|
741
|
+
arith_encode(cinfo, st, 1);
|
742
|
+
m = 1;
|
743
|
+
v2 = v;
|
744
|
+
st = entropy->dc_stats[tbl] + 20; /* Table F.4: X1 = 20 */
|
745
|
+
while (v2 >>= 1) {
|
746
|
+
arith_encode(cinfo, st, 1);
|
747
|
+
m <<= 1;
|
748
|
+
st += 1;
|
749
|
+
}
|
750
|
+
}
|
751
|
+
arith_encode(cinfo, st, 0);
|
752
|
+
/* Section F.1.4.4.1.2: Establish dc_context conditioning category */
|
753
|
+
if (m < (int)((1L << cinfo->arith_dc_L[tbl]) >> 1))
|
754
|
+
entropy->dc_context[ci] = 0; /* zero diff category */
|
755
|
+
else if (m > (int)((1L << cinfo->arith_dc_U[tbl]) >> 1))
|
756
|
+
entropy->dc_context[ci] += 8; /* large diff category */
|
757
|
+
/* Figure F.9: Encoding the magnitude bit pattern of v */
|
758
|
+
st += 14;
|
759
|
+
while (m >>= 1)
|
760
|
+
arith_encode(cinfo, st, (m & v) ? 1 : 0);
|
761
|
+
}
|
762
|
+
|
763
|
+
/* Sections F.1.4.2 & F.1.4.4.2: Encoding of AC coefficients */
|
764
|
+
|
765
|
+
tbl = compptr->ac_tbl_no;
|
766
|
+
|
767
|
+
/* Establish EOB (end-of-block) index */
|
768
|
+
for (ke = DCTSIZE2 - 1; ke > 0; ke--)
|
769
|
+
if ((*block)[jpeg_natural_order[ke]]) break;
|
770
|
+
|
771
|
+
/* Figure F.5: Encode_AC_Coefficients */
|
772
|
+
for (k = 1; k <= ke; k++) {
|
773
|
+
st = entropy->ac_stats[tbl] + 3 * (k - 1);
|
774
|
+
arith_encode(cinfo, st, 0); /* EOB decision */
|
775
|
+
while ((v = (*block)[jpeg_natural_order[k]]) == 0) {
|
776
|
+
arith_encode(cinfo, st + 1, 0); st += 3; k++;
|
777
|
+
}
|
778
|
+
arith_encode(cinfo, st + 1, 1);
|
779
|
+
/* Figure F.6: Encoding nonzero value v */
|
780
|
+
/* Figure F.7: Encoding the sign of v */
|
781
|
+
if (v > 0) {
|
782
|
+
arith_encode(cinfo, entropy->fixed_bin, 0);
|
783
|
+
} else {
|
784
|
+
v = -v;
|
785
|
+
arith_encode(cinfo, entropy->fixed_bin, 1);
|
786
|
+
}
|
787
|
+
st += 2;
|
788
|
+
/* Figure F.8: Encoding the magnitude category of v */
|
789
|
+
m = 0;
|
790
|
+
if (v -= 1) {
|
791
|
+
arith_encode(cinfo, st, 1);
|
792
|
+
m = 1;
|
793
|
+
v2 = v;
|
794
|
+
if (v2 >>= 1) {
|
795
|
+
arith_encode(cinfo, st, 1);
|
796
|
+
m <<= 1;
|
797
|
+
st = entropy->ac_stats[tbl] +
|
798
|
+
(k <= cinfo->arith_ac_K[tbl] ? 189 : 217);
|
799
|
+
while (v2 >>= 1) {
|
800
|
+
arith_encode(cinfo, st, 1);
|
801
|
+
m <<= 1;
|
802
|
+
st += 1;
|
803
|
+
}
|
804
|
+
}
|
805
|
+
}
|
806
|
+
arith_encode(cinfo, st, 0);
|
807
|
+
/* Figure F.9: Encoding the magnitude bit pattern of v */
|
808
|
+
st += 14;
|
809
|
+
while (m >>= 1)
|
810
|
+
arith_encode(cinfo, st, (m & v) ? 1 : 0);
|
811
|
+
}
|
812
|
+
/* Encode EOB decision only if k <= DCTSIZE2 - 1 */
|
813
|
+
if (k <= DCTSIZE2 - 1) {
|
814
|
+
st = entropy->ac_stats[tbl] + 3 * (k - 1);
|
815
|
+
arith_encode(cinfo, st, 1);
|
816
|
+
}
|
817
|
+
}
|
818
|
+
|
819
|
+
return TRUE;
|
820
|
+
}
|
821
|
+
|
822
|
+
|
823
|
+
/*
|
824
|
+
* Initialize for an arithmetic-compressed scan.
|
825
|
+
*/
|
826
|
+
|
827
|
+
METHODDEF(void)
|
828
|
+
start_pass(j_compress_ptr cinfo, boolean gather_statistics)
|
829
|
+
{
|
830
|
+
arith_entropy_ptr entropy = (arith_entropy_ptr)cinfo->entropy;
|
831
|
+
int ci, tbl;
|
832
|
+
jpeg_component_info *compptr;
|
833
|
+
|
834
|
+
if (gather_statistics)
|
835
|
+
/* Make sure to avoid that in the master control logic!
|
836
|
+
* We are fully adaptive here and need no extra
|
837
|
+
* statistics gathering pass!
|
838
|
+
*/
|
839
|
+
ERREXIT(cinfo, JERR_NOT_COMPILED);
|
840
|
+
|
841
|
+
/* We assume jcmaster.c already validated the progressive scan parameters. */
|
842
|
+
|
843
|
+
/* Select execution routines */
|
844
|
+
if (cinfo->progressive_mode) {
|
845
|
+
if (cinfo->Ah == 0) {
|
846
|
+
if (cinfo->Ss == 0)
|
847
|
+
entropy->pub.encode_mcu = encode_mcu_DC_first;
|
848
|
+
else
|
849
|
+
entropy->pub.encode_mcu = encode_mcu_AC_first;
|
850
|
+
} else {
|
851
|
+
if (cinfo->Ss == 0)
|
852
|
+
entropy->pub.encode_mcu = encode_mcu_DC_refine;
|
853
|
+
else
|
854
|
+
entropy->pub.encode_mcu = encode_mcu_AC_refine;
|
855
|
+
}
|
856
|
+
} else
|
857
|
+
entropy->pub.encode_mcu = encode_mcu;
|
858
|
+
|
859
|
+
/* Allocate & initialize requested statistics areas */
|
860
|
+
for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
|
861
|
+
compptr = cinfo->cur_comp_info[ci];
|
862
|
+
/* DC needs no table for refinement scan */
|
863
|
+
if (cinfo->progressive_mode == 0 || (cinfo->Ss == 0 && cinfo->Ah == 0)) {
|
864
|
+
tbl = compptr->dc_tbl_no;
|
865
|
+
if (tbl < 0 || tbl >= NUM_ARITH_TBLS)
|
866
|
+
ERREXIT1(cinfo, JERR_NO_ARITH_TABLE, tbl);
|
867
|
+
if (entropy->dc_stats[tbl] == NULL)
|
868
|
+
entropy->dc_stats[tbl] = (unsigned char *)(*cinfo->mem->alloc_small)
|
869
|
+
((j_common_ptr)cinfo, JPOOL_IMAGE, DC_STAT_BINS);
|
870
|
+
MEMZERO(entropy->dc_stats[tbl], DC_STAT_BINS);
|
871
|
+
/* Initialize DC predictions to 0 */
|
872
|
+
entropy->last_dc_val[ci] = 0;
|
873
|
+
entropy->dc_context[ci] = 0;
|
874
|
+
}
|
875
|
+
/* AC needs no table when not present */
|
876
|
+
if (cinfo->progressive_mode == 0 || cinfo->Se) {
|
877
|
+
tbl = compptr->ac_tbl_no;
|
878
|
+
if (tbl < 0 || tbl >= NUM_ARITH_TBLS)
|
879
|
+
ERREXIT1(cinfo, JERR_NO_ARITH_TABLE, tbl);
|
880
|
+
if (entropy->ac_stats[tbl] == NULL)
|
881
|
+
entropy->ac_stats[tbl] = (unsigned char *)(*cinfo->mem->alloc_small)
|
882
|
+
((j_common_ptr)cinfo, JPOOL_IMAGE, AC_STAT_BINS);
|
883
|
+
MEMZERO(entropy->ac_stats[tbl], AC_STAT_BINS);
|
884
|
+
#ifdef CALCULATE_SPECTRAL_CONDITIONING
|
885
|
+
if (cinfo->progressive_mode)
|
886
|
+
/* Section G.1.3.2: Set appropriate arithmetic conditioning value Kx */
|
887
|
+
cinfo->arith_ac_K[tbl] = cinfo->Ss +
|
888
|
+
((8 + cinfo->Se - cinfo->Ss) >> 4);
|
889
|
+
#endif
|
890
|
+
}
|
891
|
+
}
|
892
|
+
|
893
|
+
/* Initialize arithmetic encoding variables */
|
894
|
+
entropy->c = 0;
|
895
|
+
entropy->a = 0x10000L;
|
896
|
+
entropy->sc = 0;
|
897
|
+
entropy->zc = 0;
|
898
|
+
entropy->ct = 11;
|
899
|
+
entropy->buffer = -1; /* empty */
|
900
|
+
|
901
|
+
/* Initialize restart stuff */
|
902
|
+
entropy->restarts_to_go = cinfo->restart_interval;
|
903
|
+
entropy->next_restart_num = 0;
|
904
|
+
}
|
905
|
+
|
906
|
+
|
907
|
+
/*
|
908
|
+
* Module initialization routine for arithmetic entropy encoding.
|
909
|
+
*/
|
910
|
+
|
911
|
+
GLOBAL(void)
|
912
|
+
jinit_arith_encoder(j_compress_ptr cinfo)
|
913
|
+
{
|
914
|
+
arith_entropy_ptr entropy;
|
915
|
+
int i;
|
916
|
+
|
917
|
+
entropy = (arith_entropy_ptr)
|
918
|
+
(*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE,
|
919
|
+
sizeof(arith_entropy_encoder));
|
920
|
+
cinfo->entropy = (struct jpeg_entropy_encoder *)entropy;
|
921
|
+
entropy->pub.start_pass = start_pass;
|
922
|
+
entropy->pub.finish_pass = finish_pass;
|
923
|
+
|
924
|
+
/* Mark tables unallocated */
|
925
|
+
for (i = 0; i < NUM_ARITH_TBLS; i++) {
|
926
|
+
entropy->dc_stats[i] = NULL;
|
927
|
+
entropy->ac_stats[i] = NULL;
|
928
|
+
}
|
929
|
+
|
930
|
+
/* Initialize index for fixed probability estimation */
|
931
|
+
entropy->fixed_bin[0] = 113;
|
932
|
+
}
|