epeg 1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (504) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/MANIFEST +5 -0
  4. data/TODO +1 -0
  5. data/epeg/.dockerignore +4 -0
  6. data/epeg/.gitignore +5 -0
  7. data/epeg/CMakeLists.txt +30 -0
  8. data/epeg/Dockerfile +23 -0
  9. data/epeg/Epeg.h +90 -0
  10. data/epeg/README.md +42 -0
  11. data/epeg/epeg_main.c +1642 -0
  12. data/epeg/epeg_private.h +85 -0
  13. data/epeg/example/.gitignore +1 -0
  14. data/epeg/example/CMakeLists.txt +20 -0
  15. data/epeg/example/example.jpg +0 -0
  16. data/epeg/example/rotatetest.c +29 -0
  17. data/epeg/example/scaletest.c +48 -0
  18. data/epeg/vendor/libjpeg-turbo-2.0.4/BUILDING.md +828 -0
  19. data/epeg/vendor/libjpeg-turbo-2.0.4/CMakeLists.txt +1420 -0
  20. data/epeg/vendor/libjpeg-turbo-2.0.4/ChangeLog.md +1494 -0
  21. data/epeg/vendor/libjpeg-turbo-2.0.4/LICENSE.md +132 -0
  22. data/epeg/vendor/libjpeg-turbo-2.0.4/README.ijg +277 -0
  23. data/epeg/vendor/libjpeg-turbo-2.0.4/README.md +356 -0
  24. data/epeg/vendor/libjpeg-turbo-2.0.4/cderror.h +137 -0
  25. data/epeg/vendor/libjpeg-turbo-2.0.4/cdjpeg.c +145 -0
  26. data/epeg/vendor/libjpeg-turbo-2.0.4/cdjpeg.h +157 -0
  27. data/epeg/vendor/libjpeg-turbo-2.0.4/change.log +315 -0
  28. data/epeg/vendor/libjpeg-turbo-2.0.4/cjpeg.1 +354 -0
  29. data/epeg/vendor/libjpeg-turbo-2.0.4/cjpeg.c +695 -0
  30. data/epeg/vendor/libjpeg-turbo-2.0.4/cmakescripts/BuildPackages.cmake +182 -0
  31. data/epeg/vendor/libjpeg-turbo-2.0.4/cmakescripts/GNUInstallDirs.cmake +416 -0
  32. data/epeg/vendor/libjpeg-turbo-2.0.4/cmakescripts/cmake_uninstall.cmake.in +24 -0
  33. data/epeg/vendor/libjpeg-turbo-2.0.4/cmakescripts/testclean.cmake +41 -0
  34. data/epeg/vendor/libjpeg-turbo-2.0.4/cmyk.h +61 -0
  35. data/epeg/vendor/libjpeg-turbo-2.0.4/coderules.txt +78 -0
  36. data/epeg/vendor/libjpeg-turbo-2.0.4/djpeg.1 +296 -0
  37. data/epeg/vendor/libjpeg-turbo-2.0.4/djpeg.c +822 -0
  38. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/annotated.html +104 -0
  39. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/bc_s.png +0 -0
  40. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/bdwn.png +0 -0
  41. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/classes.html +106 -0
  42. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/closed.png +0 -0
  43. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/doxygen-extra.css +3 -0
  44. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/doxygen.css +1184 -0
  45. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/doxygen.png +0 -0
  46. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/dynsections.js +97 -0
  47. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2blank.png +0 -0
  48. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2cl.png +0 -0
  49. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2doc.png +0 -0
  50. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2folderclosed.png +0 -0
  51. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2folderopen.png +0 -0
  52. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2lastnode.png +0 -0
  53. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2link.png +0 -0
  54. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2mlastnode.png +0 -0
  55. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2mnode.png +0 -0
  56. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2mo.png +0 -0
  57. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2node.png +0 -0
  58. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2ns.png +0 -0
  59. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2plastnode.png +0 -0
  60. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2pnode.png +0 -0
  61. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2splitbar.png +0 -0
  62. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2vertline.png +0 -0
  63. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/functions.html +134 -0
  64. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/functions_vars.html +134 -0
  65. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/group___turbo_j_p_e_g.html +2775 -0
  66. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/index.html +90 -0
  67. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/jquery.js +8 -0
  68. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/modules.html +95 -0
  69. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/nav_f.png +0 -0
  70. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/nav_g.png +0 -0
  71. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/nav_h.png +0 -0
  72. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/open.png +0 -0
  73. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_63.html +26 -0
  74. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_63.js +4 -0
  75. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_64.html +26 -0
  76. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_64.js +5 -0
  77. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_68.html +26 -0
  78. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_68.js +4 -0
  79. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_6e.html +26 -0
  80. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_6e.js +4 -0
  81. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_6f.html +26 -0
  82. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_6f.js +5 -0
  83. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_72.html +26 -0
  84. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_72.js +4 -0
  85. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_74.html +26 -0
  86. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_74.js +102 -0
  87. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_77.html +26 -0
  88. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_77.js +4 -0
  89. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_78.html +26 -0
  90. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_78.js +4 -0
  91. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_79.html +26 -0
  92. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_79.js +4 -0
  93. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/classes_74.html +26 -0
  94. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/classes_74.js +6 -0
  95. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/close.png +0 -0
  96. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/enums_74.html +26 -0
  97. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/enums_74.js +8 -0
  98. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/enumvalues_74.html +26 -0
  99. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/enumvalues_74.js +37 -0
  100. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/functions_74.html +26 -0
  101. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/functions_74.js +31 -0
  102. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/groups_74.html +26 -0
  103. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/groups_74.js +4 -0
  104. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/mag_sel.png +0 -0
  105. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/nomatches.html +12 -0
  106. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search.css +271 -0
  107. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search.js +809 -0
  108. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search_l.png +0 -0
  109. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search_m.png +0 -0
  110. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search_r.png +0 -0
  111. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/typedefs_74.html +26 -0
  112. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/typedefs_74.js +5 -0
  113. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_63.html +26 -0
  114. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_63.js +4 -0
  115. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_64.html +26 -0
  116. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_64.js +5 -0
  117. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_68.html +26 -0
  118. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_68.js +4 -0
  119. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_6e.html +26 -0
  120. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_6e.js +4 -0
  121. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_6f.html +26 -0
  122. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_6f.js +5 -0
  123. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_72.html +26 -0
  124. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_72.js +4 -0
  125. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_74.html +26 -0
  126. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_74.js +10 -0
  127. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_77.html +26 -0
  128. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_77.js +4 -0
  129. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_78.html +26 -0
  130. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_78.js +4 -0
  131. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_79.html +26 -0
  132. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_79.js +4 -0
  133. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/structtjregion.html +186 -0
  134. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/structtjscalingfactor.html +148 -0
  135. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/structtjtransform.html +212 -0
  136. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/sync_off.png +0 -0
  137. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/sync_on.png +0 -0
  138. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tab_a.png +0 -0
  139. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tab_b.png +0 -0
  140. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tab_h.png +0 -0
  141. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tab_s.png +0 -0
  142. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tabs.css +60 -0
  143. data/epeg/vendor/libjpeg-turbo-2.0.4/doxygen-extra.css +3 -0
  144. data/epeg/vendor/libjpeg-turbo-2.0.4/doxygen.config +16 -0
  145. data/epeg/vendor/libjpeg-turbo-2.0.4/example.txt +464 -0
  146. data/epeg/vendor/libjpeg-turbo-2.0.4/jaricom.c +157 -0
  147. data/epeg/vendor/libjpeg-turbo-2.0.4/java/CMakeLists.txt +88 -0
  148. data/epeg/vendor/libjpeg-turbo-2.0.4/java/MANIFEST.MF +2 -0
  149. data/epeg/vendor/libjpeg-turbo-2.0.4/java/README +52 -0
  150. data/epeg/vendor/libjpeg-turbo-2.0.4/java/TJBench.java +1021 -0
  151. data/epeg/vendor/libjpeg-turbo-2.0.4/java/TJExample.java +405 -0
  152. data/epeg/vendor/libjpeg-turbo-2.0.4/java/TJUnitTest.java +960 -0
  153. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/allclasses-frame.html +24 -0
  154. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/allclasses-noframe.html +24 -0
  155. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/constant-values.html +532 -0
  156. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/deprecated-list.html +252 -0
  157. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/help-doc.html +210 -0
  158. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/index-all.html +1029 -0
  159. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/index.html +71 -0
  160. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJ.html +1356 -0
  161. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJCompressor.html +926 -0
  162. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJCustomFilter.html +241 -0
  163. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJDecompressor.html +1255 -0
  164. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJException.html +340 -0
  165. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJScalingFactor.html +343 -0
  166. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJTransform.html +751 -0
  167. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJTransformer.html +421 -0
  168. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/YUVImage.html +765 -0
  169. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/package-frame.html +31 -0
  170. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/package-summary.html +202 -0
  171. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/package-tree.html +160 -0
  172. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/overview-tree.html +164 -0
  173. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/package-list +1 -0
  174. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/resources/background.gif +0 -0
  175. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/resources/tab.gif +0 -0
  176. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/resources/titlebar.gif +0 -0
  177. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/resources/titlebar_end.gif +0 -0
  178. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/script.js +30 -0
  179. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/serialized-form.html +176 -0
  180. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/stylesheet.css +474 -0
  181. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJ.java +584 -0
  182. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJCompressor.java +677 -0
  183. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJCustomFilter.java +76 -0
  184. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJDecompressor.java +931 -0
  185. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJException.java +78 -0
  186. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJLoader-unix.java.in +59 -0
  187. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJLoader-win.java.in +35 -0
  188. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJScalingFactor.java +115 -0
  189. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJTransform.java +227 -0
  190. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJTransformer.java +163 -0
  191. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/YUVImage.java +445 -0
  192. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org_libjpegturbo_turbojpeg_TJ.h +129 -0
  193. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org_libjpegturbo_turbojpeg_TJCompressor.h +101 -0
  194. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org_libjpegturbo_turbojpeg_TJDecompressor.h +101 -0
  195. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org_libjpegturbo_turbojpeg_TJTransformer.h +29 -0
  196. data/epeg/vendor/libjpeg-turbo-2.0.4/jcapimin.c +295 -0
  197. data/epeg/vendor/libjpeg-turbo-2.0.4/jcapistd.c +162 -0
  198. data/epeg/vendor/libjpeg-turbo-2.0.4/jcarith.c +932 -0
  199. data/epeg/vendor/libjpeg-turbo-2.0.4/jccoefct.c +449 -0
  200. data/epeg/vendor/libjpeg-turbo-2.0.4/jccolext.c +144 -0
  201. data/epeg/vendor/libjpeg-turbo-2.0.4/jccolor.c +710 -0
  202. data/epeg/vendor/libjpeg-turbo-2.0.4/jcdctmgr.c +721 -0
  203. data/epeg/vendor/libjpeg-turbo-2.0.4/jchuff.c +1096 -0
  204. data/epeg/vendor/libjpeg-turbo-2.0.4/jchuff.h +42 -0
  205. data/epeg/vendor/libjpeg-turbo-2.0.4/jcicc.c +105 -0
  206. data/epeg/vendor/libjpeg-turbo-2.0.4/jcinit.c +77 -0
  207. data/epeg/vendor/libjpeg-turbo-2.0.4/jcmainct.c +162 -0
  208. data/epeg/vendor/libjpeg-turbo-2.0.4/jcmarker.c +664 -0
  209. data/epeg/vendor/libjpeg-turbo-2.0.4/jcmaster.c +640 -0
  210. data/epeg/vendor/libjpeg-turbo-2.0.4/jcomapi.c +109 -0
  211. data/epeg/vendor/libjpeg-turbo-2.0.4/jconfig.h.in +73 -0
  212. data/epeg/vendor/libjpeg-turbo-2.0.4/jconfig.txt +143 -0
  213. data/epeg/vendor/libjpeg-turbo-2.0.4/jconfigint.h.in +31 -0
  214. data/epeg/vendor/libjpeg-turbo-2.0.4/jcparam.c +541 -0
  215. data/epeg/vendor/libjpeg-turbo-2.0.4/jcphuff.c +1105 -0
  216. data/epeg/vendor/libjpeg-turbo-2.0.4/jcprepct.c +351 -0
  217. data/epeg/vendor/libjpeg-turbo-2.0.4/jcsample.c +539 -0
  218. data/epeg/vendor/libjpeg-turbo-2.0.4/jcstest.c +126 -0
  219. data/epeg/vendor/libjpeg-turbo-2.0.4/jctrans.c +400 -0
  220. data/epeg/vendor/libjpeg-turbo-2.0.4/jdapimin.c +407 -0
  221. data/epeg/vendor/libjpeg-turbo-2.0.4/jdapistd.c +639 -0
  222. data/epeg/vendor/libjpeg-turbo-2.0.4/jdarith.c +773 -0
  223. data/epeg/vendor/libjpeg-turbo-2.0.4/jdatadst-tj.c +203 -0
  224. data/epeg/vendor/libjpeg-turbo-2.0.4/jdatadst.c +293 -0
  225. data/epeg/vendor/libjpeg-turbo-2.0.4/jdatasrc-tj.c +194 -0
  226. data/epeg/vendor/libjpeg-turbo-2.0.4/jdatasrc.c +295 -0
  227. data/epeg/vendor/libjpeg-turbo-2.0.4/jdcoefct.c +692 -0
  228. data/epeg/vendor/libjpeg-turbo-2.0.4/jdcoefct.h +82 -0
  229. data/epeg/vendor/libjpeg-turbo-2.0.4/jdcol565.c +384 -0
  230. data/epeg/vendor/libjpeg-turbo-2.0.4/jdcolext.c +143 -0
  231. data/epeg/vendor/libjpeg-turbo-2.0.4/jdcolor.c +883 -0
  232. data/epeg/vendor/libjpeg-turbo-2.0.4/jdct.h +208 -0
  233. data/epeg/vendor/libjpeg-turbo-2.0.4/jddctmgr.c +352 -0
  234. data/epeg/vendor/libjpeg-turbo-2.0.4/jdhuff.c +831 -0
  235. data/epeg/vendor/libjpeg-turbo-2.0.4/jdhuff.h +238 -0
  236. data/epeg/vendor/libjpeg-turbo-2.0.4/jdicc.c +171 -0
  237. data/epeg/vendor/libjpeg-turbo-2.0.4/jdinput.c +408 -0
  238. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmainct.c +460 -0
  239. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmainct.h +71 -0
  240. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmarker.c +1377 -0
  241. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmaster.c +737 -0
  242. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmaster.h +28 -0
  243. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmerge.c +617 -0
  244. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmrg565.c +354 -0
  245. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmrgext.c +184 -0
  246. data/epeg/vendor/libjpeg-turbo-2.0.4/jdphuff.c +687 -0
  247. data/epeg/vendor/libjpeg-turbo-2.0.4/jdpostct.c +294 -0
  248. data/epeg/vendor/libjpeg-turbo-2.0.4/jdsample.c +518 -0
  249. data/epeg/vendor/libjpeg-turbo-2.0.4/jdsample.h +50 -0
  250. data/epeg/vendor/libjpeg-turbo-2.0.4/jdtrans.c +155 -0
  251. data/epeg/vendor/libjpeg-turbo-2.0.4/jerror.c +251 -0
  252. data/epeg/vendor/libjpeg-turbo-2.0.4/jerror.h +316 -0
  253. data/epeg/vendor/libjpeg-turbo-2.0.4/jfdctflt.c +169 -0
  254. data/epeg/vendor/libjpeg-turbo-2.0.4/jfdctfst.c +227 -0
  255. data/epeg/vendor/libjpeg-turbo-2.0.4/jfdctint.c +288 -0
  256. data/epeg/vendor/libjpeg-turbo-2.0.4/jidctflt.c +240 -0
  257. data/epeg/vendor/libjpeg-turbo-2.0.4/jidctfst.c +371 -0
  258. data/epeg/vendor/libjpeg-turbo-2.0.4/jidctint.c +2627 -0
  259. data/epeg/vendor/libjpeg-turbo-2.0.4/jidctred.c +409 -0
  260. data/epeg/vendor/libjpeg-turbo-2.0.4/jinclude.h +88 -0
  261. data/epeg/vendor/libjpeg-turbo-2.0.4/jmemmgr.c +1179 -0
  262. data/epeg/vendor/libjpeg-turbo-2.0.4/jmemnobs.c +115 -0
  263. data/epeg/vendor/libjpeg-turbo-2.0.4/jmemsys.h +178 -0
  264. data/epeg/vendor/libjpeg-turbo-2.0.4/jmorecfg.h +421 -0
  265. data/epeg/vendor/libjpeg-turbo-2.0.4/jpeg_nbits_table.h +4098 -0
  266. data/epeg/vendor/libjpeg-turbo-2.0.4/jpegcomp.h +31 -0
  267. data/epeg/vendor/libjpeg-turbo-2.0.4/jpegint.h +368 -0
  268. data/epeg/vendor/libjpeg-turbo-2.0.4/jpeglib.h +1132 -0
  269. data/epeg/vendor/libjpeg-turbo-2.0.4/jpegtran.1 +295 -0
  270. data/epeg/vendor/libjpeg-turbo-2.0.4/jpegtran.c +601 -0
  271. data/epeg/vendor/libjpeg-turbo-2.0.4/jquant1.c +859 -0
  272. data/epeg/vendor/libjpeg-turbo-2.0.4/jquant2.c +1285 -0
  273. data/epeg/vendor/libjpeg-turbo-2.0.4/jsimd.h +117 -0
  274. data/epeg/vendor/libjpeg-turbo-2.0.4/jsimd_none.c +418 -0
  275. data/epeg/vendor/libjpeg-turbo-2.0.4/jsimddct.h +70 -0
  276. data/epeg/vendor/libjpeg-turbo-2.0.4/jstdhuff.c +143 -0
  277. data/epeg/vendor/libjpeg-turbo-2.0.4/jutils.c +133 -0
  278. data/epeg/vendor/libjpeg-turbo-2.0.4/jversion.h +52 -0
  279. data/epeg/vendor/libjpeg-turbo-2.0.4/libjpeg.map.in +11 -0
  280. data/epeg/vendor/libjpeg-turbo-2.0.4/libjpeg.txt +3144 -0
  281. data/epeg/vendor/libjpeg-turbo-2.0.4/md5/CMakeLists.txt +1 -0
  282. data/epeg/vendor/libjpeg-turbo-2.0.4/md5/md5.c +275 -0
  283. data/epeg/vendor/libjpeg-turbo-2.0.4/md5/md5.h +57 -0
  284. data/epeg/vendor/libjpeg-turbo-2.0.4/md5/md5cmp.c +59 -0
  285. data/epeg/vendor/libjpeg-turbo-2.0.4/md5/md5hl.c +125 -0
  286. data/epeg/vendor/libjpeg-turbo-2.0.4/rdbmp.c +689 -0
  287. data/epeg/vendor/libjpeg-turbo-2.0.4/rdcolmap.c +254 -0
  288. data/epeg/vendor/libjpeg-turbo-2.0.4/rdgif.c +39 -0
  289. data/epeg/vendor/libjpeg-turbo-2.0.4/rdjpgcom.1 +63 -0
  290. data/epeg/vendor/libjpeg-turbo-2.0.4/rdjpgcom.c +510 -0
  291. data/epeg/vendor/libjpeg-turbo-2.0.4/rdppm.c +766 -0
  292. data/epeg/vendor/libjpeg-turbo-2.0.4/rdrle.c +389 -0
  293. data/epeg/vendor/libjpeg-turbo-2.0.4/rdswitch.c +424 -0
  294. data/epeg/vendor/libjpeg-turbo-2.0.4/rdtarga.c +509 -0
  295. data/epeg/vendor/libjpeg-turbo-2.0.4/release/Distribution.xml.in +24 -0
  296. data/epeg/vendor/libjpeg-turbo-2.0.4/release/License.rtf +20 -0
  297. data/epeg/vendor/libjpeg-turbo-2.0.4/release/ReadMe.txt +5 -0
  298. data/epeg/vendor/libjpeg-turbo-2.0.4/release/Welcome.rtf +17 -0
  299. data/epeg/vendor/libjpeg-turbo-2.0.4/release/deb-control.in +31 -0
  300. data/epeg/vendor/libjpeg-turbo-2.0.4/release/installer.nsi.in +191 -0
  301. data/epeg/vendor/libjpeg-turbo-2.0.4/release/libjpeg.pc.in +10 -0
  302. data/epeg/vendor/libjpeg-turbo-2.0.4/release/libturbojpeg.pc.in +10 -0
  303. data/epeg/vendor/libjpeg-turbo-2.0.4/release/makecygwinpkg.in +66 -0
  304. data/epeg/vendor/libjpeg-turbo-2.0.4/release/makedpkg.in +115 -0
  305. data/epeg/vendor/libjpeg-turbo-2.0.4/release/makemacpkg.in +284 -0
  306. data/epeg/vendor/libjpeg-turbo-2.0.4/release/makerpm.in +30 -0
  307. data/epeg/vendor/libjpeg-turbo-2.0.4/release/makesrpm.in +48 -0
  308. data/epeg/vendor/libjpeg-turbo-2.0.4/release/maketarball.in +51 -0
  309. data/epeg/vendor/libjpeg-turbo-2.0.4/release/rpm.spec.in +221 -0
  310. data/epeg/vendor/libjpeg-turbo-2.0.4/release/uninstall.in +113 -0
  311. data/epeg/vendor/libjpeg-turbo-2.0.4/sharedlib/CMakeLists.txt +99 -0
  312. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/CMakeLists.txt +385 -0
  313. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/arm/jsimd.c +721 -0
  314. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/arm/jsimd_neon.S +2878 -0
  315. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/arm64/jsimd.c +798 -0
  316. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/arm64/jsimd_neon.S +3433 -0
  317. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/gas-preprocessor.in +1 -0
  318. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolext-avx2.asm +578 -0
  319. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolext-mmx.asm +476 -0
  320. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolext-sse2.asm +503 -0
  321. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolor-avx2.asm +121 -0
  322. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolor-mmx.asm +121 -0
  323. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolor-sse2.asm +120 -0
  324. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgray-avx2.asm +113 -0
  325. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgray-mmx.asm +113 -0
  326. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgray-sse2.asm +112 -0
  327. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgryext-avx2.asm +457 -0
  328. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgryext-mmx.asm +355 -0
  329. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgryext-sse2.asm +382 -0
  330. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jchuff-sse2.asm +424 -0
  331. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcphuff-sse2.asm +660 -0
  332. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcsample-avx2.asm +388 -0
  333. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcsample-mmx.asm +324 -0
  334. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcsample-sse2.asm +351 -0
  335. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolext-avx2.asm +515 -0
  336. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolext-mmx.asm +404 -0
  337. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolext-sse2.asm +458 -0
  338. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolor-avx2.asm +118 -0
  339. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolor-mmx.asm +117 -0
  340. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolor-sse2.asm +117 -0
  341. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmerge-avx2.asm +136 -0
  342. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmerge-mmx.asm +123 -0
  343. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmerge-sse2.asm +135 -0
  344. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmrgext-avx2.asm +575 -0
  345. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmrgext-mmx.asm +460 -0
  346. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmrgext-sse2.asm +517 -0
  347. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdsample-avx2.asm +760 -0
  348. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdsample-mmx.asm +731 -0
  349. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdsample-sse2.asm +724 -0
  350. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctflt-3dn.asm +318 -0
  351. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctflt-sse.asm +369 -0
  352. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctfst-mmx.asm +395 -0
  353. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctfst-sse2.asm +403 -0
  354. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctint-avx2.asm +331 -0
  355. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctint-mmx.asm +620 -0
  356. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctint-sse2.asm +633 -0
  357. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctflt-3dn.asm +451 -0
  358. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctflt-sse.asm +571 -0
  359. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctflt-sse2.asm +497 -0
  360. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctfst-mmx.asm +499 -0
  361. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctfst-sse2.asm +501 -0
  362. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctint-avx2.asm +453 -0
  363. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctint-mmx.asm +851 -0
  364. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctint-sse2.asm +858 -0
  365. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctred-mmx.asm +704 -0
  366. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctred-sse2.asm +592 -0
  367. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquant-3dn.asm +230 -0
  368. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquant-mmx.asm +276 -0
  369. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquant-sse.asm +208 -0
  370. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquantf-sse2.asm +168 -0
  371. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquanti-avx2.asm +188 -0
  372. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquanti-sse2.asm +201 -0
  373. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jsimd.c +1253 -0
  374. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jsimdcpu.asm +135 -0
  375. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/jsimd.h +1083 -0
  376. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jccolext-mmi.c +483 -0
  377. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jccolor-mmi.c +148 -0
  378. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jcsample-mmi.c +100 -0
  379. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jcsample.h +28 -0
  380. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jdcolext-mmi.c +424 -0
  381. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jdcolor-mmi.c +139 -0
  382. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jdsample-mmi.c +245 -0
  383. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jfdctint-mmi.c +398 -0
  384. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jidctint-mmi.c +571 -0
  385. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jquanti-mmi.c +130 -0
  386. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jsimd.c +610 -0
  387. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jsimd_mmi.h +57 -0
  388. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/loongson-mmintrin.h +1324 -0
  389. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/mips/jsimd.c +1123 -0
  390. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/mips/jsimd_dspr2.S +4479 -0
  391. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/mips/jsimd_dspr2_asm.h +292 -0
  392. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jcolsamp.inc +135 -0
  393. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jdct.inc +31 -0
  394. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jpeg_nbits_table.inc +4097 -0
  395. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jsimdcfg.inc +93 -0
  396. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jsimdcfg.inc.h +131 -0
  397. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jsimdext.inc +479 -0
  398. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jccolext-altivec.c +269 -0
  399. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jccolor-altivec.c +116 -0
  400. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jcgray-altivec.c +111 -0
  401. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jcgryext-altivec.c +228 -0
  402. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jcsample-altivec.c +159 -0
  403. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jcsample.h +28 -0
  404. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdcolext-altivec.c +276 -0
  405. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdcolor-altivec.c +106 -0
  406. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdmerge-altivec.c +130 -0
  407. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdmrgext-altivec.c +329 -0
  408. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdsample-altivec.c +400 -0
  409. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jfdctfst-altivec.c +154 -0
  410. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jfdctint-altivec.c +258 -0
  411. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jidctfst-altivec.c +255 -0
  412. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jidctint-altivec.c +357 -0
  413. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jquanti-altivec.c +250 -0
  414. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jsimd.c +872 -0
  415. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jsimd_altivec.h +98 -0
  416. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jccolext-avx2.asm +558 -0
  417. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jccolext-sse2.asm +483 -0
  418. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jccolor-avx2.asm +121 -0
  419. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jccolor-sse2.asm +120 -0
  420. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcgray-avx2.asm +113 -0
  421. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcgray-sse2.asm +112 -0
  422. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcgryext-avx2.asm +437 -0
  423. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcgryext-sse2.asm +362 -0
  424. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jchuff-sse2.asm +346 -0
  425. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcphuff-sse2.asm +637 -0
  426. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcsample-avx2.asm +366 -0
  427. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcsample-sse2.asm +329 -0
  428. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdcolext-avx2.asm +495 -0
  429. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdcolext-sse2.asm +438 -0
  430. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdcolor-avx2.asm +118 -0
  431. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdcolor-sse2.asm +117 -0
  432. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdmerge-avx2.asm +136 -0
  433. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdmerge-sse2.asm +135 -0
  434. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdmrgext-avx2.asm +593 -0
  435. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdmrgext-sse2.asm +535 -0
  436. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdsample-avx2.asm +695 -0
  437. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdsample-sse2.asm +664 -0
  438. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jfdctflt-sse.asm +355 -0
  439. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jfdctfst-sse2.asm +389 -0
  440. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jfdctint-avx2.asm +320 -0
  441. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jfdctint-sse2.asm +619 -0
  442. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctflt-sse2.asm +481 -0
  443. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctfst-sse2.asm +490 -0
  444. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctint-avx2.asm +417 -0
  445. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctint-sse2.asm +846 -0
  446. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctred-sse2.asm +573 -0
  447. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jquantf-sse2.asm +154 -0
  448. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jquanti-avx2.asm +162 -0
  449. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jquanti-sse2.asm +187 -0
  450. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jsimd.c +1076 -0
  451. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jsimdcpu.asm +86 -0
  452. data/epeg/vendor/libjpeg-turbo-2.0.4/structure.txt +904 -0
  453. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/nightshot_iso_100.bmp +0 -0
  454. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/nightshot_iso_100.txt +25 -0
  455. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test.scan +5 -0
  456. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test1.icc +0 -0
  457. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test1.icc.txt +20 -0
  458. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test2.icc +0 -0
  459. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test2.icc.txt +20 -0
  460. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testimgari.jpg +0 -0
  461. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testimgint.jpg +0 -0
  462. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testorig.jpg +0 -0
  463. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testorig.ppm +4 -0
  464. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testorig12.jpg +0 -0
  465. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/vgl_5674_0098.bmp +0 -0
  466. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/vgl_6434_0018a.bmp +0 -0
  467. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/vgl_6548_0026a.bmp +0 -0
  468. data/epeg/vendor/libjpeg-turbo-2.0.4/tjbench.c +1031 -0
  469. data/epeg/vendor/libjpeg-turbo-2.0.4/tjbenchtest.in +256 -0
  470. data/epeg/vendor/libjpeg-turbo-2.0.4/tjbenchtest.java.in +215 -0
  471. data/epeg/vendor/libjpeg-turbo-2.0.4/tjexample.c +396 -0
  472. data/epeg/vendor/libjpeg-turbo-2.0.4/tjexampletest.in +149 -0
  473. data/epeg/vendor/libjpeg-turbo-2.0.4/tjexampletest.java.in +151 -0
  474. data/epeg/vendor/libjpeg-turbo-2.0.4/tjunittest.c +931 -0
  475. data/epeg/vendor/libjpeg-turbo-2.0.4/tjutil.c +70 -0
  476. data/epeg/vendor/libjpeg-turbo-2.0.4/tjutil.h +47 -0
  477. data/epeg/vendor/libjpeg-turbo-2.0.4/transupp.c +1628 -0
  478. data/epeg/vendor/libjpeg-turbo-2.0.4/transupp.h +210 -0
  479. data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg-jni.c +1246 -0
  480. data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg-mapfile +65 -0
  481. data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg-mapfile.jni +101 -0
  482. data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg.c +2152 -0
  483. data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg.h +1744 -0
  484. data/epeg/vendor/libjpeg-turbo-2.0.4/usage.txt +635 -0
  485. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jconfig.h.in +34 -0
  486. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg62-memsrcdst.def +108 -0
  487. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg62.def +106 -0
  488. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg7-memsrcdst.def +110 -0
  489. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg7.def +108 -0
  490. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg8.def +111 -0
  491. data/epeg/vendor/libjpeg-turbo-2.0.4/wizard.txt +212 -0
  492. data/epeg/vendor/libjpeg-turbo-2.0.4/wrbmp.c +558 -0
  493. data/epeg/vendor/libjpeg-turbo-2.0.4/wrgif.c +413 -0
  494. data/epeg/vendor/libjpeg-turbo-2.0.4/wrjpgcom.1 +103 -0
  495. data/epeg/vendor/libjpeg-turbo-2.0.4/wrjpgcom.c +591 -0
  496. data/epeg/vendor/libjpeg-turbo-2.0.4/wrppm.c +365 -0
  497. data/epeg/vendor/libjpeg-turbo-2.0.4/wrrle.c +309 -0
  498. data/epeg/vendor/libjpeg-turbo-2.0.4/wrtarga.c +261 -0
  499. data/epeg.c +131 -0
  500. data/epeg.gemspec +18 -0
  501. data/extconf.rb +80 -0
  502. data/test.jpg +0 -0
  503. data/test.rb +42 -0
  504. metadata +546 -0
@@ -0,0 +1,960 @@
1
+ /*
2
+ * Copyright (C)2011-2018 D. R. Commander. All Rights Reserved.
3
+ *
4
+ * Redistribution and use in source and binary forms, with or without
5
+ * modification, are permitted provided that the following conditions are met:
6
+ *
7
+ * - Redistributions of source code must retain the above copyright notice,
8
+ * this list of conditions and the following disclaimer.
9
+ * - Redistributions in binary form must reproduce the above copyright notice,
10
+ * this list of conditions and the following disclaimer in the documentation
11
+ * and/or other materials provided with the distribution.
12
+ * - Neither the name of the libjpeg-turbo Project nor the names of its
13
+ * contributors may be used to endorse or promote products derived from this
14
+ * software without specific prior written permission.
15
+ *
16
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
17
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
20
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26
+ * POSSIBILITY OF SUCH DAMAGE.
27
+ */
28
+
29
+ /*
30
+ * This program tests the various code paths in the TurboJPEG JNI Wrapper
31
+ */
32
+
33
+ import java.io.*;
34
+ import java.util.*;
35
+ import java.awt.image.*;
36
+ import javax.imageio.*;
37
+ import java.nio.*;
38
+ import org.libjpegturbo.turbojpeg.*;
39
+
40
+ @SuppressWarnings("checkstyle:JavadocType")
41
+ final class TJUnitTest {
42
+
43
+ private TJUnitTest() {}
44
+
45
+ static final String CLASS_NAME =
46
+ new TJUnitTest().getClass().getName();
47
+
48
+ static void usage() {
49
+ System.out.println("\nUSAGE: java " + CLASS_NAME + " [options]\n");
50
+ System.out.println("Options:");
51
+ System.out.println("-yuv = test YUV encoding/decoding support");
52
+ System.out.println("-noyuvpad = do not pad each line of each Y, U, and V plane to the nearest");
53
+ System.out.println(" 4-byte boundary");
54
+ System.out.println("-bi = test BufferedImage support\n");
55
+ System.exit(1);
56
+ }
57
+
58
+ static final String[] SUBNAME_LONG = {
59
+ "4:4:4", "4:2:2", "4:2:0", "GRAY", "4:4:0", "4:1:1"
60
+ };
61
+ static final String[] SUBNAME = {
62
+ "444", "422", "420", "GRAY", "440", "411"
63
+ };
64
+
65
+ static final String[] PIXFORMATSTR = {
66
+ "RGB", "BGR", "RGBX", "BGRX", "XBGR", "XRGB", "Grayscale",
67
+ "RGBA", "BGRA", "ABGR", "ARGB", "CMYK"
68
+ };
69
+
70
+ static final int[] FORMATS_3BYTE = {
71
+ TJ.PF_RGB, TJ.PF_BGR
72
+ };
73
+ static final int[] FORMATS_3BYTEBI = {
74
+ BufferedImage.TYPE_3BYTE_BGR
75
+ };
76
+ static final int[] FORMATS_4BYTE = {
77
+ TJ.PF_RGBX, TJ.PF_BGRX, TJ.PF_XBGR, TJ.PF_XRGB, TJ.PF_CMYK
78
+ };
79
+ static final int[] FORMATS_4BYTEBI = {
80
+ BufferedImage.TYPE_INT_BGR, BufferedImage.TYPE_INT_RGB,
81
+ BufferedImage.TYPE_4BYTE_ABGR, BufferedImage.TYPE_4BYTE_ABGR_PRE,
82
+ BufferedImage.TYPE_INT_ARGB, BufferedImage.TYPE_INT_ARGB_PRE
83
+ };
84
+ static final int[] FORMATS_GRAY = {
85
+ TJ.PF_GRAY
86
+ };
87
+ static final int[] FORMATS_GRAYBI = {
88
+ BufferedImage.TYPE_BYTE_GRAY
89
+ };
90
+ static final int[] FORMATS_RGB = {
91
+ TJ.PF_RGB
92
+ };
93
+
94
+ private static boolean doYUV = false;
95
+ private static int pad = 4;
96
+ private static boolean bi = false;
97
+
98
+ private static int exitStatus = 0;
99
+
100
+ static int biTypePF(int biType) {
101
+ ByteOrder byteOrder = ByteOrder.nativeOrder();
102
+ switch (biType) {
103
+ case BufferedImage.TYPE_3BYTE_BGR:
104
+ return TJ.PF_BGR;
105
+ case BufferedImage.TYPE_4BYTE_ABGR:
106
+ case BufferedImage.TYPE_4BYTE_ABGR_PRE:
107
+ return TJ.PF_ABGR;
108
+ case BufferedImage.TYPE_BYTE_GRAY:
109
+ return TJ.PF_GRAY;
110
+ case BufferedImage.TYPE_INT_BGR:
111
+ return TJ.PF_RGBX;
112
+ case BufferedImage.TYPE_INT_RGB:
113
+ return TJ.PF_BGRX;
114
+ case BufferedImage.TYPE_INT_ARGB:
115
+ case BufferedImage.TYPE_INT_ARGB_PRE:
116
+ return TJ.PF_BGRA;
117
+ default:
118
+ return 0;
119
+ }
120
+ }
121
+
122
+ static String biTypeStr(int biType) {
123
+ switch (biType) {
124
+ case BufferedImage.TYPE_3BYTE_BGR:
125
+ return "3BYTE_BGR";
126
+ case BufferedImage.TYPE_4BYTE_ABGR:
127
+ return "4BYTE_ABGR";
128
+ case BufferedImage.TYPE_4BYTE_ABGR_PRE:
129
+ return "4BYTE_ABGR_PRE";
130
+ case BufferedImage.TYPE_BYTE_GRAY:
131
+ return "BYTE_GRAY";
132
+ case BufferedImage.TYPE_INT_BGR:
133
+ return "INT_BGR";
134
+ case BufferedImage.TYPE_INT_RGB:
135
+ return "INT_RGB";
136
+ case BufferedImage.TYPE_INT_ARGB:
137
+ return "INT_ARGB";
138
+ case BufferedImage.TYPE_INT_ARGB_PRE:
139
+ return "INT_ARGB_PRE";
140
+ default:
141
+ return "Unknown";
142
+ }
143
+ }
144
+
145
+ static void initBuf(byte[] buf, int w, int pitch, int h, int pf, int flags)
146
+ throws Exception {
147
+ int roffset = TJ.getRedOffset(pf);
148
+ int goffset = TJ.getGreenOffset(pf);
149
+ int boffset = TJ.getBlueOffset(pf);
150
+ int aoffset = TJ.getAlphaOffset(pf);
151
+ int ps = TJ.getPixelSize(pf);
152
+ int index, row, col, halfway = 16;
153
+
154
+ if (pf == TJ.PF_GRAY) {
155
+ Arrays.fill(buf, (byte)0);
156
+ for (row = 0; row < h; row++) {
157
+ for (col = 0; col < w; col++) {
158
+ if ((flags & TJ.FLAG_BOTTOMUP) != 0)
159
+ index = pitch * (h - row - 1) + col;
160
+ else
161
+ index = pitch * row + col;
162
+ if (((row / 8) + (col / 8)) % 2 == 0)
163
+ buf[index] = (row < halfway) ? (byte)255 : 0;
164
+ else
165
+ buf[index] = (row < halfway) ? 76 : (byte)226;
166
+ }
167
+ }
168
+ return;
169
+ }
170
+ if (pf == TJ.PF_CMYK) {
171
+ Arrays.fill(buf, (byte)255);
172
+ for (row = 0; row < h; row++) {
173
+ for (col = 0; col < w; col++) {
174
+ if ((flags & TJ.FLAG_BOTTOMUP) != 0)
175
+ index = (h - row - 1) * w + col;
176
+ else
177
+ index = row * w + col;
178
+ if (((row / 8) + (col / 8)) % 2 == 0) {
179
+ if (row >= halfway) buf[index * ps + 3] = 0;
180
+ } else {
181
+ buf[index * ps + 2] = 0;
182
+ if (row < halfway)
183
+ buf[index * ps + 1] = 0;
184
+ }
185
+ }
186
+ }
187
+ return;
188
+ }
189
+
190
+ Arrays.fill(buf, (byte)0);
191
+ for (row = 0; row < h; row++) {
192
+ for (col = 0; col < w; col++) {
193
+ if ((flags & TJ.FLAG_BOTTOMUP) != 0)
194
+ index = pitch * (h - row - 1) + col * ps;
195
+ else
196
+ index = pitch * row + col * ps;
197
+ if (((row / 8) + (col / 8)) % 2 == 0) {
198
+ if (row < halfway) {
199
+ buf[index + roffset] = (byte)255;
200
+ buf[index + goffset] = (byte)255;
201
+ buf[index + boffset] = (byte)255;
202
+ }
203
+ } else {
204
+ buf[index + roffset] = (byte)255;
205
+ if (row >= halfway)
206
+ buf[index + goffset] = (byte)255;
207
+ }
208
+ if (aoffset >= 0)
209
+ buf[index + aoffset] = (byte)255;
210
+ }
211
+ }
212
+ }
213
+
214
+ static void initIntBuf(int[] buf, int w, int pitch, int h, int pf, int flags)
215
+ throws Exception {
216
+ int rshift = TJ.getRedOffset(pf) * 8;
217
+ int gshift = TJ.getGreenOffset(pf) * 8;
218
+ int bshift = TJ.getBlueOffset(pf) * 8;
219
+ int ashift = TJ.getAlphaOffset(pf) * 8;
220
+ int index, row, col, halfway = 16;
221
+
222
+ Arrays.fill(buf, 0);
223
+ for (row = 0; row < h; row++) {
224
+ for (col = 0; col < w; col++) {
225
+ if ((flags & TJ.FLAG_BOTTOMUP) != 0)
226
+ index = pitch * (h - row - 1) + col;
227
+ else
228
+ index = pitch * row + col;
229
+ if (((row / 8) + (col / 8)) % 2 == 0) {
230
+ if (row < halfway) {
231
+ buf[index] |= (255 << rshift);
232
+ buf[index] |= (255 << gshift);
233
+ buf[index] |= (255 << bshift);
234
+ }
235
+ } else {
236
+ buf[index] |= (255 << rshift);
237
+ if (row >= halfway)
238
+ buf[index] |= (255 << gshift);
239
+ }
240
+ if (ashift >= 0)
241
+ buf[index] |= (255 << ashift);
242
+ }
243
+ }
244
+ }
245
+
246
+ static void initImg(BufferedImage img, int pf, int flags) throws Exception {
247
+ WritableRaster wr = img.getRaster();
248
+ int imgType = img.getType();
249
+
250
+ if (imgType == BufferedImage.TYPE_INT_RGB ||
251
+ imgType == BufferedImage.TYPE_INT_BGR ||
252
+ imgType == BufferedImage.TYPE_INT_ARGB ||
253
+ imgType == BufferedImage.TYPE_INT_ARGB_PRE) {
254
+ SinglePixelPackedSampleModel sm =
255
+ (SinglePixelPackedSampleModel)img.getSampleModel();
256
+ int pitch = sm.getScanlineStride();
257
+ DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
258
+ int[] buf = db.getData();
259
+ initIntBuf(buf, img.getWidth(), pitch, img.getHeight(), pf, flags);
260
+ } else {
261
+ ComponentSampleModel sm = (ComponentSampleModel)img.getSampleModel();
262
+ int pitch = sm.getScanlineStride();
263
+ DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
264
+ byte[] buf = db.getData();
265
+ initBuf(buf, img.getWidth(), pitch, img.getHeight(), pf, flags);
266
+ }
267
+ }
268
+
269
+ static void checkVal(int row, int col, int v, String vname, int cv)
270
+ throws Exception {
271
+ v = (v < 0) ? v + 256 : v;
272
+ if (v < cv - 1 || v > cv + 1) {
273
+ throw new Exception("Comp. " + vname + " at " + row + "," + col +
274
+ " should be " + cv + ", not " + v);
275
+ }
276
+ }
277
+
278
+ static void checkVal0(int row, int col, int v, String vname)
279
+ throws Exception {
280
+ v = (v < 0) ? v + 256 : v;
281
+ if (v > 1) {
282
+ throw new Exception("Comp. " + vname + " at " + row + "," + col +
283
+ " should be 0, not " + v);
284
+ }
285
+ }
286
+
287
+ static void checkVal255(int row, int col, int v, String vname)
288
+ throws Exception {
289
+ v = (v < 0) ? v + 256 : v;
290
+ if (v < 254) {
291
+ throw new Exception("Comp. " + vname + " at " + row + "," + col +
292
+ " should be 255, not " + v);
293
+ }
294
+ }
295
+
296
+ static int checkBuf(byte[] buf, int w, int pitch, int h, int pf, int subsamp,
297
+ TJScalingFactor sf, int flags) throws Exception {
298
+ int roffset = TJ.getRedOffset(pf);
299
+ int goffset = TJ.getGreenOffset(pf);
300
+ int boffset = TJ.getBlueOffset(pf);
301
+ int aoffset = TJ.getAlphaOffset(pf);
302
+ int ps = TJ.getPixelSize(pf);
303
+ int index, row, col, retval = 1;
304
+ int halfway = 16 * sf.getNum() / sf.getDenom();
305
+ int blockSize = 8 * sf.getNum() / sf.getDenom();
306
+
307
+ try {
308
+
309
+ if (pf == TJ.PF_GRAY)
310
+ roffset = goffset = boffset = 0;
311
+
312
+ if (pf == TJ.PF_CMYK) {
313
+ for (row = 0; row < h; row++) {
314
+ for (col = 0; col < w; col++) {
315
+ if ((flags & TJ.FLAG_BOTTOMUP) != 0)
316
+ index = (h - row - 1) * w + col;
317
+ else
318
+ index = row * w + col;
319
+ byte c = buf[index * ps];
320
+ byte m = buf[index * ps + 1];
321
+ byte y = buf[index * ps + 2];
322
+ byte k = buf[index * ps + 3];
323
+ checkVal255(row, col, c, "C");
324
+ if (((row / blockSize) + (col / blockSize)) % 2 == 0) {
325
+ checkVal255(row, col, m, "M");
326
+ checkVal255(row, col, y, "Y");
327
+ if (row < halfway)
328
+ checkVal255(row, col, k, "K");
329
+ else
330
+ checkVal0(row, col, k, "K");
331
+ } else {
332
+ checkVal0(row, col, y, "Y");
333
+ checkVal255(row, col, k, "K");
334
+ if (row < halfway)
335
+ checkVal0(row, col, m, "M");
336
+ else
337
+ checkVal255(row, col, m, "M");
338
+ }
339
+ }
340
+ }
341
+ return 1;
342
+ }
343
+
344
+ for (row = 0; row < halfway; row++) {
345
+ for (col = 0; col < w; col++) {
346
+ if ((flags & TJ.FLAG_BOTTOMUP) != 0)
347
+ index = pitch * (h - row - 1) + col * ps;
348
+ else
349
+ index = pitch * row + col * ps;
350
+ byte r = buf[index + roffset];
351
+ byte g = buf[index + goffset];
352
+ byte b = buf[index + boffset];
353
+ byte a = aoffset >= 0 ? buf[index + aoffset] : (byte)255;
354
+ if (((row / blockSize) + (col / blockSize)) % 2 == 0) {
355
+ if (row < halfway) {
356
+ checkVal255(row, col, r, "R");
357
+ checkVal255(row, col, g, "G");
358
+ checkVal255(row, col, b, "B");
359
+ } else {
360
+ checkVal0(row, col, r, "R");
361
+ checkVal0(row, col, g, "G");
362
+ checkVal0(row, col, b, "B");
363
+ }
364
+ } else {
365
+ if (subsamp == TJ.SAMP_GRAY) {
366
+ if (row < halfway) {
367
+ checkVal(row, col, r, "R", 76);
368
+ checkVal(row, col, g, "G", 76);
369
+ checkVal(row, col, b, "B", 76);
370
+ } else {
371
+ checkVal(row, col, r, "R", 226);
372
+ checkVal(row, col, g, "G", 226);
373
+ checkVal(row, col, b, "B", 226);
374
+ }
375
+ } else {
376
+ checkVal255(row, col, r, "R");
377
+ if (row < halfway) {
378
+ checkVal0(row, col, g, "G");
379
+ } else {
380
+ checkVal255(row, col, g, "G");
381
+ }
382
+ checkVal0(row, col, b, "B");
383
+ }
384
+ }
385
+ checkVal255(row, col, a, "A");
386
+ }
387
+ }
388
+ } catch (Exception e) {
389
+ System.out.println("\n" + e.getMessage());
390
+ retval = 0;
391
+ }
392
+
393
+ if (retval == 0) {
394
+ for (row = 0; row < h; row++) {
395
+ for (col = 0; col < w; col++) {
396
+ if (pf == TJ.PF_CMYK) {
397
+ int c = buf[pitch * row + col * ps];
398
+ int m = buf[pitch * row + col * ps + 1];
399
+ int y = buf[pitch * row + col * ps + 2];
400
+ int k = buf[pitch * row + col * ps + 3];
401
+ if (c < 0) c += 256;
402
+ if (m < 0) m += 256;
403
+ if (y < 0) y += 256;
404
+ if (k < 0) k += 256;
405
+ System.out.format("%3d/%3d/%3d/%3d ", c, m, y, k);
406
+ } else {
407
+ int r = buf[pitch * row + col * ps + roffset];
408
+ int g = buf[pitch * row + col * ps + goffset];
409
+ int b = buf[pitch * row + col * ps + boffset];
410
+ if (r < 0) r += 256;
411
+ if (g < 0) g += 256;
412
+ if (b < 0) b += 256;
413
+ System.out.format("%3d/%3d/%3d ", r, g, b);
414
+ }
415
+ }
416
+ System.out.print("\n");
417
+ }
418
+ }
419
+ return retval;
420
+ }
421
+
422
+ static int checkIntBuf(int[] buf, int w, int pitch, int h, int pf,
423
+ int subsamp, TJScalingFactor sf, int flags)
424
+ throws Exception {
425
+ int rshift = TJ.getRedOffset(pf) * 8;
426
+ int gshift = TJ.getGreenOffset(pf) * 8;
427
+ int bshift = TJ.getBlueOffset(pf) * 8;
428
+ int ashift = TJ.getAlphaOffset(pf) * 8;
429
+ int index, row, col, retval = 1;
430
+ int halfway = 16 * sf.getNum() / sf.getDenom();
431
+ int blockSize = 8 * sf.getNum() / sf.getDenom();
432
+
433
+ try {
434
+ for (row = 0; row < halfway; row++) {
435
+ for (col = 0; col < w; col++) {
436
+ if ((flags & TJ.FLAG_BOTTOMUP) != 0)
437
+ index = pitch * (h - row - 1) + col;
438
+ else
439
+ index = pitch * row + col;
440
+ int r = (buf[index] >> rshift) & 0xFF;
441
+ int g = (buf[index] >> gshift) & 0xFF;
442
+ int b = (buf[index] >> bshift) & 0xFF;
443
+ int a = ashift >= 0 ? (buf[index] >> ashift) & 0xFF : 255;
444
+ if (((row / blockSize) + (col / blockSize)) % 2 == 0) {
445
+ if (row < halfway) {
446
+ checkVal255(row, col, r, "R");
447
+ checkVal255(row, col, g, "G");
448
+ checkVal255(row, col, b, "B");
449
+ } else {
450
+ checkVal0(row, col, r, "R");
451
+ checkVal0(row, col, g, "G");
452
+ checkVal0(row, col, b, "B");
453
+ }
454
+ } else {
455
+ if (subsamp == TJ.SAMP_GRAY) {
456
+ if (row < halfway) {
457
+ checkVal(row, col, r, "R", 76);
458
+ checkVal(row, col, g, "G", 76);
459
+ checkVal(row, col, b, "B", 76);
460
+ } else {
461
+ checkVal(row, col, r, "R", 226);
462
+ checkVal(row, col, g, "G", 226);
463
+ checkVal(row, col, b, "B", 226);
464
+ }
465
+ } else {
466
+ checkVal255(row, col, r, "R");
467
+ if (row < halfway) {
468
+ checkVal0(row, col, g, "G");
469
+ } else {
470
+ checkVal255(row, col, g, "G");
471
+ }
472
+ checkVal0(row, col, b, "B");
473
+ }
474
+ }
475
+ checkVal255(row, col, a, "A");
476
+ }
477
+ }
478
+ } catch (Exception e) {
479
+ System.out.println("\n" + e.getMessage());
480
+ retval = 0;
481
+ }
482
+
483
+ if (retval == 0) {
484
+ for (row = 0; row < h; row++) {
485
+ for (col = 0; col < w; col++) {
486
+ int r = (buf[pitch * row + col] >> rshift) & 0xFF;
487
+ int g = (buf[pitch * row + col] >> gshift) & 0xFF;
488
+ int b = (buf[pitch * row + col] >> bshift) & 0xFF;
489
+ if (r < 0) r += 256;
490
+ if (g < 0) g += 256;
491
+ if (b < 0) b += 256;
492
+ System.out.format("%3d/%3d/%3d ", r, g, b);
493
+ }
494
+ System.out.print("\n");
495
+ }
496
+ }
497
+ return retval;
498
+ }
499
+
500
+ static int checkImg(BufferedImage img, int pf, int subsamp,
501
+ TJScalingFactor sf, int flags) throws Exception {
502
+ WritableRaster wr = img.getRaster();
503
+ int imgType = img.getType();
504
+ if (imgType == BufferedImage.TYPE_INT_RGB ||
505
+ imgType == BufferedImage.TYPE_INT_BGR ||
506
+ imgType == BufferedImage.TYPE_INT_ARGB ||
507
+ imgType == BufferedImage.TYPE_INT_ARGB_PRE) {
508
+ SinglePixelPackedSampleModel sm =
509
+ (SinglePixelPackedSampleModel)img.getSampleModel();
510
+ int pitch = sm.getScanlineStride();
511
+ DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
512
+ int[] buf = db.getData();
513
+ return checkIntBuf(buf, img.getWidth(), pitch, img.getHeight(), pf,
514
+ subsamp, sf, flags);
515
+ } else {
516
+ ComponentSampleModel sm = (ComponentSampleModel)img.getSampleModel();
517
+ int pitch = sm.getScanlineStride();
518
+ DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
519
+ byte[] buf = db.getData();
520
+ return checkBuf(buf, img.getWidth(), pitch, img.getHeight(), pf, subsamp,
521
+ sf, flags);
522
+ }
523
+ }
524
+
525
+ static int pad(int v, int p) {
526
+ return ((v + (p) - 1) & (~((p) - 1)));
527
+ }
528
+
529
+ static int checkBufYUV(byte[] buf, int size, int w, int h, int subsamp,
530
+ TJScalingFactor sf) throws Exception {
531
+ int row, col;
532
+ int hsf = TJ.getMCUWidth(subsamp) / 8, vsf = TJ.getMCUHeight(subsamp) / 8;
533
+ int pw = pad(w, hsf), ph = pad(h, vsf);
534
+ int cw = pw / hsf, ch = ph / vsf;
535
+ int ypitch = pad(pw, pad), uvpitch = pad(cw, pad);
536
+ int retval = 1;
537
+ int correctsize = ypitch * ph +
538
+ (subsamp == TJ.SAMP_GRAY ? 0 : uvpitch * ch * 2);
539
+ int halfway = 16 * sf.getNum() / sf.getDenom();
540
+ int blockSize = 8 * sf.getNum() / sf.getDenom();
541
+
542
+ try {
543
+ if (size != correctsize)
544
+ throw new Exception("Incorrect size " + size + ". Should be " +
545
+ correctsize);
546
+
547
+ for (row = 0; row < ph; row++) {
548
+ for (col = 0; col < pw; col++) {
549
+ byte y = buf[ypitch * row + col];
550
+ if (((row / blockSize) + (col / blockSize)) % 2 == 0) {
551
+ if (row < halfway)
552
+ checkVal255(row, col, y, "Y");
553
+ else
554
+ checkVal0(row, col, y, "Y");
555
+ } else {
556
+ if (row < halfway)
557
+ checkVal(row, col, y, "Y", 76);
558
+ else
559
+ checkVal(row, col, y, "Y", 226);
560
+ }
561
+ }
562
+ }
563
+ if (subsamp != TJ.SAMP_GRAY) {
564
+ halfway = 16 / vsf * sf.getNum() / sf.getDenom();
565
+ for (row = 0; row < ch; row++) {
566
+ for (col = 0; col < cw; col++) {
567
+ byte u = buf[ypitch * ph + (uvpitch * row + col)],
568
+ v = buf[ypitch * ph + uvpitch * ch + (uvpitch * row + col)];
569
+ if (((row * vsf / blockSize) + (col * hsf / blockSize)) % 2 == 0) {
570
+ checkVal(row, col, u, "U", 128);
571
+ checkVal(row, col, v, "V", 128);
572
+ } else {
573
+ if (row < halfway) {
574
+ checkVal(row, col, u, "U", 85);
575
+ checkVal255(row, col, v, "V");
576
+ } else {
577
+ checkVal0(row, col, u, "U");
578
+ checkVal(row, col, v, "V", 149);
579
+ }
580
+ }
581
+ }
582
+ }
583
+ }
584
+ } catch (Exception e) {
585
+ System.out.println("\n" + e.getMessage());
586
+ retval = 0;
587
+ }
588
+
589
+ if (retval == 0) {
590
+ for (row = 0; row < ph; row++) {
591
+ for (col = 0; col < pw; col++) {
592
+ int y = buf[ypitch * row + col];
593
+ if (y < 0) y += 256;
594
+ System.out.format("%3d ", y);
595
+ }
596
+ System.out.print("\n");
597
+ }
598
+ System.out.print("\n");
599
+ for (row = 0; row < ch; row++) {
600
+ for (col = 0; col < cw; col++) {
601
+ int u = buf[ypitch * ph + (uvpitch * row + col)];
602
+ if (u < 0) u += 256;
603
+ System.out.format("%3d ", u);
604
+ }
605
+ System.out.print("\n");
606
+ }
607
+ System.out.print("\n");
608
+ for (row = 0; row < ch; row++) {
609
+ for (col = 0; col < cw; col++) {
610
+ int v = buf[ypitch * ph + uvpitch * ch + (uvpitch * row + col)];
611
+ if (v < 0) v += 256;
612
+ System.out.format("%3d ", v);
613
+ }
614
+ System.out.print("\n");
615
+ }
616
+ }
617
+
618
+ return retval;
619
+ }
620
+
621
+ static void writeJPEG(byte[] jpegBuf, int jpegBufSize, String filename)
622
+ throws Exception {
623
+ File file = new File(filename);
624
+ FileOutputStream fos = new FileOutputStream(file);
625
+ fos.write(jpegBuf, 0, jpegBufSize);
626
+ fos.close();
627
+ }
628
+
629
+ static int compTest(TJCompressor tjc, byte[] dstBuf, int w, int h, int pf,
630
+ String baseName, int subsamp, int jpegQual, int flags)
631
+ throws Exception {
632
+ String tempStr;
633
+ byte[] srcBuf = null;
634
+ BufferedImage img = null;
635
+ String pfStr, pfStrLong;
636
+ String buStr = (flags & TJ.FLAG_BOTTOMUP) != 0 ? "BU" : "TD";
637
+ String buStrLong = (flags & TJ.FLAG_BOTTOMUP) != 0 ?
638
+ "Bottom-Up" : "Top-Down ";
639
+ int size = 0, ps, imgType = pf;
640
+
641
+ if (bi) {
642
+ pf = biTypePF(imgType);
643
+ pfStr = biTypeStr(imgType);
644
+ pfStrLong = pfStr + " (" + PIXFORMATSTR[pf] + ")";
645
+ } else {
646
+ pfStr = PIXFORMATSTR[pf];
647
+ pfStrLong = pfStr;
648
+ }
649
+ ps = TJ.getPixelSize(pf);
650
+
651
+ if (bi) {
652
+ img = new BufferedImage(w, h, imgType);
653
+ initImg(img, pf, flags);
654
+ tempStr = baseName + "_enc_" + pfStr + "_" + buStr + "_" +
655
+ SUBNAME[subsamp] + "_Q" + jpegQual + ".png";
656
+ File file = new File(tempStr);
657
+ ImageIO.write(img, "png", file);
658
+ tjc.setSourceImage(img, 0, 0, 0, 0);
659
+ } else {
660
+ srcBuf = new byte[w * h * ps + 1];
661
+ initBuf(srcBuf, w, w * ps, h, pf, flags);
662
+ tjc.setSourceImage(srcBuf, 0, 0, w, 0, h, pf);
663
+ }
664
+ Arrays.fill(dstBuf, (byte)0);
665
+
666
+ tjc.setSubsamp(subsamp);
667
+ tjc.setJPEGQuality(jpegQual);
668
+ if (doYUV) {
669
+ System.out.format("%s %s -> YUV %s ... ", pfStrLong, buStrLong,
670
+ SUBNAME_LONG[subsamp]);
671
+ YUVImage yuvImage = tjc.encodeYUV(pad, flags);
672
+ if (checkBufYUV(yuvImage.getBuf(), yuvImage.getSize(), w, h, subsamp,
673
+ new TJScalingFactor(1, 1)) == 1)
674
+ System.out.print("Passed.\n");
675
+ else {
676
+ System.out.print("FAILED!\n");
677
+ exitStatus = -1;
678
+ }
679
+
680
+ System.out.format("YUV %s %s -> JPEG Q%d ... ", SUBNAME_LONG[subsamp],
681
+ buStrLong, jpegQual);
682
+ tjc.setSourceImage(yuvImage);
683
+ } else {
684
+ System.out.format("%s %s -> %s Q%d ... ", pfStrLong, buStrLong,
685
+ SUBNAME_LONG[subsamp], jpegQual);
686
+ }
687
+ tjc.compress(dstBuf, flags);
688
+ size = tjc.getCompressedSize();
689
+
690
+ tempStr = baseName + "_enc_" + pfStr + "_" + buStr + "_" +
691
+ SUBNAME[subsamp] + "_Q" + jpegQual + ".jpg";
692
+ writeJPEG(dstBuf, size, tempStr);
693
+ System.out.println("Done.\n Result in " + tempStr);
694
+
695
+ return size;
696
+ }
697
+
698
+ static void decompTest(TJDecompressor tjd, byte[] jpegBuf, int jpegSize,
699
+ int w, int h, int pf, String baseName, int subsamp,
700
+ int flags, TJScalingFactor sf) throws Exception {
701
+ String pfStr, pfStrLong, tempStr;
702
+ String buStrLong = (flags & TJ.FLAG_BOTTOMUP) != 0 ?
703
+ "Bottom-Up" : "Top-Down ";
704
+ int scaledWidth = sf.getScaled(w);
705
+ int scaledHeight = sf.getScaled(h);
706
+ int temp1, temp2, imgType = pf;
707
+ BufferedImage img = null;
708
+ byte[] dstBuf = null;
709
+
710
+ if (bi) {
711
+ pf = biTypePF(imgType);
712
+ pfStr = biTypeStr(imgType);
713
+ pfStrLong = pfStr + " (" + PIXFORMATSTR[pf] + ")";
714
+ } else {
715
+ pfStr = PIXFORMATSTR[pf];
716
+ pfStrLong = pfStr;
717
+ }
718
+
719
+ tjd.setSourceImage(jpegBuf, jpegSize);
720
+ if (tjd.getWidth() != w || tjd.getHeight() != h ||
721
+ tjd.getSubsamp() != subsamp)
722
+ throw new Exception("Incorrect JPEG header");
723
+
724
+ temp1 = scaledWidth;
725
+ temp2 = scaledHeight;
726
+ temp1 = tjd.getScaledWidth(temp1, temp2);
727
+ temp2 = tjd.getScaledHeight(temp1, temp2);
728
+ if (temp1 != scaledWidth || temp2 != scaledHeight)
729
+ throw new Exception("Scaled size mismatch");
730
+
731
+ if (doYUV) {
732
+ System.out.format("JPEG -> YUV %s ", SUBNAME_LONG[subsamp]);
733
+ if (!sf.isOne())
734
+ System.out.format("%d/%d ... ", sf.getNum(), sf.getDenom());
735
+ else System.out.print("... ");
736
+ YUVImage yuvImage = tjd.decompressToYUV(scaledWidth, pad, scaledHeight,
737
+ flags);
738
+ if (checkBufYUV(yuvImage.getBuf(), yuvImage.getSize(), scaledWidth,
739
+ scaledHeight, subsamp, sf) == 1)
740
+ System.out.print("Passed.\n");
741
+ else {
742
+ System.out.print("FAILED!\n"); exitStatus = -1;
743
+ }
744
+
745
+ System.out.format("YUV %s -> %s %s ... ", SUBNAME_LONG[subsamp],
746
+ pfStrLong, buStrLong);
747
+ tjd.setSourceImage(yuvImage);
748
+ } else {
749
+ System.out.format("JPEG -> %s %s ", pfStrLong, buStrLong);
750
+ if (!sf.isOne())
751
+ System.out.format("%d/%d ... ", sf.getNum(), sf.getDenom());
752
+ else System.out.print("... ");
753
+ }
754
+ if (bi)
755
+ img = tjd.decompress(scaledWidth, scaledHeight, imgType, flags);
756
+ else
757
+ dstBuf = tjd.decompress(scaledWidth, 0, scaledHeight, pf, flags);
758
+
759
+ if (bi) {
760
+ tempStr = baseName + "_dec_" + pfStr + "_" +
761
+ (((flags & TJ.FLAG_BOTTOMUP) != 0) ? "BU" : "TD") + "_" +
762
+ SUBNAME[subsamp] + "_" +
763
+ (double)sf.getNum() / (double)sf.getDenom() + "x" + ".png";
764
+ File file = new File(tempStr);
765
+ ImageIO.write(img, "png", file);
766
+ }
767
+
768
+ if ((bi && checkImg(img, pf, subsamp, sf, flags) == 1) ||
769
+ (!bi && checkBuf(dstBuf, scaledWidth,
770
+ scaledWidth * TJ.getPixelSize(pf), scaledHeight, pf,
771
+ subsamp, sf, flags) == 1))
772
+ System.out.print("Passed.\n");
773
+ else {
774
+ System.out.print("FAILED!\n");
775
+ exitStatus = -1;
776
+ }
777
+ }
778
+
779
+ static void decompTest(TJDecompressor tjd, byte[] jpegBuf, int jpegSize,
780
+ int w, int h, int pf, String baseName, int subsamp,
781
+ int flags) throws Exception {
782
+ int i;
783
+ TJScalingFactor[] sf = TJ.getScalingFactors();
784
+ for (i = 0; i < sf.length; i++) {
785
+ int num = sf[i].getNum();
786
+ int denom = sf[i].getDenom();
787
+ if (subsamp == TJ.SAMP_444 || subsamp == TJ.SAMP_GRAY ||
788
+ (subsamp == TJ.SAMP_411 && num == 1 &&
789
+ (denom == 2 || denom == 1)) ||
790
+ (subsamp != TJ.SAMP_411 && num == 1 &&
791
+ (denom == 4 || denom == 2 || denom == 1)))
792
+ decompTest(tjd, jpegBuf, jpegSize, w, h, pf, baseName, subsamp,
793
+ flags, sf[i]);
794
+ }
795
+ }
796
+
797
+ static void doTest(int w, int h, int[] formats, int subsamp, String baseName)
798
+ throws Exception {
799
+ TJCompressor tjc = null;
800
+ TJDecompressor tjd = null;
801
+ int size;
802
+ byte[] dstBuf;
803
+
804
+ dstBuf = new byte[TJ.bufSize(w, h, subsamp)];
805
+
806
+ try {
807
+ tjc = new TJCompressor();
808
+ tjd = new TJDecompressor();
809
+
810
+ for (int pf : formats) {
811
+ if (pf < 0) continue;
812
+ for (int i = 0; i < 2; i++) {
813
+ int flags = 0;
814
+ if (subsamp == TJ.SAMP_422 || subsamp == TJ.SAMP_420 ||
815
+ subsamp == TJ.SAMP_440 || subsamp == TJ.SAMP_411)
816
+ flags |= TJ.FLAG_FASTUPSAMPLE;
817
+ if (i == 1)
818
+ flags |= TJ.FLAG_BOTTOMUP;
819
+ size = compTest(tjc, dstBuf, w, h, pf, baseName, subsamp, 100,
820
+ flags);
821
+ decompTest(tjd, dstBuf, size, w, h, pf, baseName, subsamp, flags);
822
+ if (pf >= TJ.PF_RGBX && pf <= TJ.PF_XRGB && !bi) {
823
+ System.out.print("\n");
824
+ decompTest(tjd, dstBuf, size, w, h, pf + (TJ.PF_RGBA - TJ.PF_RGBX),
825
+ baseName, subsamp, flags);
826
+ }
827
+ System.out.print("\n");
828
+ }
829
+ }
830
+ System.out.print("--------------------\n\n");
831
+ } catch (Exception e) {
832
+ if (tjc != null) tjc.close();
833
+ if (tjd != null) tjd.close();
834
+ throw e;
835
+ }
836
+ if (tjc != null) tjc.close();
837
+ if (tjd != null) tjd.close();
838
+ }
839
+
840
+ static void bufSizeTest() throws Exception {
841
+ int w, h, i, subsamp;
842
+ byte[] srcBuf, dstBuf = null;
843
+ YUVImage dstImage = null;
844
+ TJCompressor tjc = null;
845
+ Random r = new Random();
846
+
847
+ try {
848
+ tjc = new TJCompressor();
849
+ System.out.println("Buffer size regression test");
850
+ for (subsamp = 0; subsamp < TJ.NUMSAMP; subsamp++) {
851
+ for (w = 1; w < 48; w++) {
852
+ int maxh = (w == 1) ? 2048 : 48;
853
+ for (h = 1; h < maxh; h++) {
854
+ if (h % 100 == 0)
855
+ System.out.format("%04d x %04d\b\b\b\b\b\b\b\b\b\b\b", w, h);
856
+ srcBuf = new byte[w * h * 4];
857
+ if (doYUV)
858
+ dstImage = new YUVImage(w, pad, h, subsamp);
859
+ else
860
+ dstBuf = new byte[TJ.bufSize(w, h, subsamp)];
861
+ for (i = 0; i < w * h * 4; i++) {
862
+ srcBuf[i] = (byte)(r.nextInt(2) * 255);
863
+ }
864
+ tjc.setSourceImage(srcBuf, 0, 0, w, 0, h, TJ.PF_BGRX);
865
+ tjc.setSubsamp(subsamp);
866
+ tjc.setJPEGQuality(100);
867
+ if (doYUV)
868
+ tjc.encodeYUV(dstImage, 0);
869
+ else
870
+ tjc.compress(dstBuf, 0);
871
+
872
+ srcBuf = new byte[h * w * 4];
873
+ if (doYUV)
874
+ dstImage = new YUVImage(h, pad, w, subsamp);
875
+ else
876
+ dstBuf = new byte[TJ.bufSize(h, w, subsamp)];
877
+ for (i = 0; i < h * w * 4; i++) {
878
+ srcBuf[i] = (byte)(r.nextInt(2) * 255);
879
+ }
880
+ tjc.setSourceImage(srcBuf, 0, 0, h, 0, w, TJ.PF_BGRX);
881
+ if (doYUV)
882
+ tjc.encodeYUV(dstImage, 0);
883
+ else
884
+ tjc.compress(dstBuf, 0);
885
+ }
886
+ dstImage = null;
887
+ dstBuf = null;
888
+ System.gc();
889
+ }
890
+ }
891
+ System.out.println("Done. ");
892
+ } catch (Exception e) {
893
+ if (tjc != null) tjc.close();
894
+ throw e;
895
+ }
896
+ if (tjc != null) tjc.close();
897
+ }
898
+
899
+ public static void main(String[] argv) {
900
+ try {
901
+ String testName = "javatest";
902
+ for (int i = 0; i < argv.length; i++) {
903
+ if (argv[i].equalsIgnoreCase("-yuv"))
904
+ doYUV = true;
905
+ else if (argv[i].equalsIgnoreCase("-noyuvpad"))
906
+ pad = 1;
907
+ else if (argv[i].equalsIgnoreCase("-bi")) {
908
+ bi = true;
909
+ testName = "javabitest";
910
+ } else
911
+ usage();
912
+ }
913
+ if (doYUV)
914
+ FORMATS_4BYTE[4] = -1;
915
+ doTest(35, 39, bi ? FORMATS_3BYTEBI : FORMATS_3BYTE, TJ.SAMP_444,
916
+ testName);
917
+ doTest(39, 41, bi ? FORMATS_4BYTEBI : FORMATS_4BYTE, TJ.SAMP_444,
918
+ testName);
919
+ doTest(41, 35, bi ? FORMATS_3BYTEBI : FORMATS_3BYTE, TJ.SAMP_422,
920
+ testName);
921
+ doTest(35, 39, bi ? FORMATS_4BYTEBI : FORMATS_4BYTE, TJ.SAMP_422,
922
+ testName);
923
+ doTest(39, 41, bi ? FORMATS_3BYTEBI : FORMATS_3BYTE, TJ.SAMP_420,
924
+ testName);
925
+ doTest(41, 35, bi ? FORMATS_4BYTEBI : FORMATS_4BYTE, TJ.SAMP_420,
926
+ testName);
927
+ doTest(35, 39, bi ? FORMATS_3BYTEBI : FORMATS_3BYTE, TJ.SAMP_440,
928
+ testName);
929
+ doTest(39, 41, bi ? FORMATS_4BYTEBI : FORMATS_4BYTE, TJ.SAMP_440,
930
+ testName);
931
+ doTest(41, 35, bi ? FORMATS_3BYTEBI : FORMATS_3BYTE, TJ.SAMP_411,
932
+ testName);
933
+ doTest(35, 39, bi ? FORMATS_4BYTEBI : FORMATS_4BYTE, TJ.SAMP_411,
934
+ testName);
935
+ doTest(39, 41, bi ? FORMATS_GRAYBI : FORMATS_GRAY, TJ.SAMP_GRAY,
936
+ testName);
937
+ doTest(41, 35, bi ? FORMATS_3BYTEBI : FORMATS_3BYTE, TJ.SAMP_GRAY,
938
+ testName);
939
+ FORMATS_4BYTE[4] = -1;
940
+ doTest(35, 39, bi ? FORMATS_4BYTEBI : FORMATS_4BYTE, TJ.SAMP_GRAY,
941
+ testName);
942
+ if (!bi)
943
+ bufSizeTest();
944
+ if (doYUV && !bi) {
945
+ System.out.print("\n--------------------\n\n");
946
+ doTest(48, 48, FORMATS_RGB, TJ.SAMP_444, "javatest_yuv0");
947
+ doTest(48, 48, FORMATS_RGB, TJ.SAMP_422, "javatest_yuv0");
948
+ doTest(48, 48, FORMATS_RGB, TJ.SAMP_420, "javatest_yuv0");
949
+ doTest(48, 48, FORMATS_RGB, TJ.SAMP_440, "javatest_yuv0");
950
+ doTest(48, 48, FORMATS_RGB, TJ.SAMP_411, "javatest_yuv0");
951
+ doTest(48, 48, FORMATS_RGB, TJ.SAMP_GRAY, "javatest_yuv0");
952
+ doTest(48, 48, FORMATS_GRAY, TJ.SAMP_GRAY, "javatest_yuv0");
953
+ }
954
+ } catch (Exception e) {
955
+ e.printStackTrace();
956
+ exitStatus = -1;
957
+ }
958
+ System.exit(exitStatus);
959
+ }
960
+ }