rfreeimage 0.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.
Files changed (860) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +1 -0
  4. data/Rakefile +34 -0
  5. data/ext/rfreeimage/extconf.rb +35 -0
  6. data/ext/rfreeimage/rfi_main.c +389 -0
  7. data/lib/rfreeimage/image.rb +26 -0
  8. data/lib/rfreeimage/version.rb +3 -0
  9. data/lib/rfreeimage.rb +3 -0
  10. data/rfreeimage.gemspec +32 -0
  11. data/vendor/FreeImage/Makefile +34 -0
  12. data/vendor/FreeImage/Makefile.cygwin +74 -0
  13. data/vendor/FreeImage/Makefile.fip +84 -0
  14. data/vendor/FreeImage/Makefile.gnu +83 -0
  15. data/vendor/FreeImage/Makefile.iphone +96 -0
  16. data/vendor/FreeImage/Makefile.mingw +136 -0
  17. data/vendor/FreeImage/Makefile.osx +115 -0
  18. data/vendor/FreeImage/Makefile.solaris +66 -0
  19. data/vendor/FreeImage/Makefile.srcs +6 -0
  20. data/vendor/FreeImage/README.iphone +19 -0
  21. data/vendor/FreeImage/README.linux +50 -0
  22. data/vendor/FreeImage/README.minGW +236 -0
  23. data/vendor/FreeImage/README.osx +44 -0
  24. data/vendor/FreeImage/README.solaris +67 -0
  25. data/vendor/FreeImage/Source/CacheFile.h +92 -0
  26. data/vendor/FreeImage/Source/DeprecationManager/Deprecated.cpp +36 -0
  27. data/vendor/FreeImage/Source/DeprecationManager/DeprecationMgr.cpp +103 -0
  28. data/vendor/FreeImage/Source/DeprecationManager/DeprecationMgr.h +83 -0
  29. data/vendor/FreeImage/Source/FreeImage/BitmapAccess.cpp +1573 -0
  30. data/vendor/FreeImage/Source/FreeImage/CacheFile.cpp +271 -0
  31. data/vendor/FreeImage/Source/FreeImage/ColorLookup.cpp +785 -0
  32. data/vendor/FreeImage/Source/FreeImage/Conversion.cpp +551 -0
  33. data/vendor/FreeImage/Source/FreeImage/Conversion16_555.cpp +209 -0
  34. data/vendor/FreeImage/Source/FreeImage/Conversion16_565.cpp +204 -0
  35. data/vendor/FreeImage/Source/FreeImage/Conversion24.cpp +252 -0
  36. data/vendor/FreeImage/Source/FreeImage/Conversion32.cpp +345 -0
  37. data/vendor/FreeImage/Source/FreeImage/Conversion4.cpp +246 -0
  38. data/vendor/FreeImage/Source/FreeImage/Conversion8.cpp +305 -0
  39. data/vendor/FreeImage/Source/FreeImage/ConversionFloat.cpp +194 -0
  40. data/vendor/FreeImage/Source/FreeImage/ConversionRGB16.cpp +144 -0
  41. data/vendor/FreeImage/Source/FreeImage/ConversionRGBA16.cpp +147 -0
  42. data/vendor/FreeImage/Source/FreeImage/ConversionRGBAF.cpp +250 -0
  43. data/vendor/FreeImage/Source/FreeImage/ConversionRGBF.cpp +243 -0
  44. data/vendor/FreeImage/Source/FreeImage/ConversionType.cpp +699 -0
  45. data/vendor/FreeImage/Source/FreeImage/ConversionUINT16.cpp +134 -0
  46. data/vendor/FreeImage/Source/FreeImage/FreeImage.cpp +226 -0
  47. data/vendor/FreeImage/Source/FreeImage/FreeImageC.c +22 -0
  48. data/vendor/FreeImage/Source/FreeImage/FreeImageIO.cpp +175 -0
  49. data/vendor/FreeImage/Source/FreeImage/GetType.cpp +92 -0
  50. data/vendor/FreeImage/Source/FreeImage/Halftoning.cpp +474 -0
  51. data/vendor/FreeImage/Source/FreeImage/J2KHelper.cpp +591 -0
  52. data/vendor/FreeImage/Source/FreeImage/J2KHelper.h +36 -0
  53. data/vendor/FreeImage/Source/FreeImage/LFPQuantizer.cpp +208 -0
  54. data/vendor/FreeImage/Source/FreeImage/MNGHelper.cpp +1320 -0
  55. data/vendor/FreeImage/Source/FreeImage/MemoryIO.cpp +237 -0
  56. data/vendor/FreeImage/Source/FreeImage/MultiPage.cpp +974 -0
  57. data/vendor/FreeImage/Source/FreeImage/NNQuantizer.cpp +507 -0
  58. data/vendor/FreeImage/Source/FreeImage/PSDParser.cpp +1057 -0
  59. data/vendor/FreeImage/Source/FreeImage/PSDParser.h +271 -0
  60. data/vendor/FreeImage/Source/FreeImage/PixelAccess.cpp +197 -0
  61. data/vendor/FreeImage/Source/FreeImage/Plugin.cpp +822 -0
  62. data/vendor/FreeImage/Source/FreeImage/PluginBMP.cpp +1494 -0
  63. data/vendor/FreeImage/Source/FreeImage/PluginCUT.cpp +240 -0
  64. data/vendor/FreeImage/Source/FreeImage/PluginDDS.cpp +655 -0
  65. data/vendor/FreeImage/Source/FreeImage/PluginEXR.cpp +773 -0
  66. data/vendor/FreeImage/Source/FreeImage/PluginG3.cpp +433 -0
  67. data/vendor/FreeImage/Source/FreeImage/PluginGIF.cpp +1407 -0
  68. data/vendor/FreeImage/Source/FreeImage/PluginHDR.cpp +722 -0
  69. data/vendor/FreeImage/Source/FreeImage/PluginICO.cpp +824 -0
  70. data/vendor/FreeImage/Source/FreeImage/PluginIFF.cpp +459 -0
  71. data/vendor/FreeImage/Source/FreeImage/PluginJ2K.cpp +328 -0
  72. data/vendor/FreeImage/Source/FreeImage/PluginJNG.cpp +162 -0
  73. data/vendor/FreeImage/Source/FreeImage/PluginJP2.cpp +328 -0
  74. data/vendor/FreeImage/Source/FreeImage/PluginJPEG.cpp +1706 -0
  75. data/vendor/FreeImage/Source/FreeImage/PluginJXR.cpp +1475 -0
  76. data/vendor/FreeImage/Source/FreeImage/PluginKOALA.cpp +243 -0
  77. data/vendor/FreeImage/Source/FreeImage/PluginMNG.cpp +153 -0
  78. data/vendor/FreeImage/Source/FreeImage/PluginPCD.cpp +251 -0
  79. data/vendor/FreeImage/Source/FreeImage/PluginPCX.cpp +659 -0
  80. data/vendor/FreeImage/Source/FreeImage/PluginPFM.cpp +409 -0
  81. data/vendor/FreeImage/Source/FreeImage/PluginPICT.cpp +1343 -0
  82. data/vendor/FreeImage/Source/FreeImage/PluginPNG.cpp +1115 -0
  83. data/vendor/FreeImage/Source/FreeImage/PluginPNM.cpp +838 -0
  84. data/vendor/FreeImage/Source/FreeImage/PluginPSD.cpp +131 -0
  85. data/vendor/FreeImage/Source/FreeImage/PluginRAS.cpp +512 -0
  86. data/vendor/FreeImage/Source/FreeImage/PluginRAW.cpp +793 -0
  87. data/vendor/FreeImage/Source/FreeImage/PluginSGI.cpp +425 -0
  88. data/vendor/FreeImage/Source/FreeImage/PluginTARGA.cpp +1591 -0
  89. data/vendor/FreeImage/Source/FreeImage/PluginTIFF.cpp +2631 -0
  90. data/vendor/FreeImage/Source/FreeImage/PluginWBMP.cpp +372 -0
  91. data/vendor/FreeImage/Source/FreeImage/PluginWebP.cpp +698 -0
  92. data/vendor/FreeImage/Source/FreeImage/PluginXBM.cpp +399 -0
  93. data/vendor/FreeImage/Source/FreeImage/PluginXPM.cpp +487 -0
  94. data/vendor/FreeImage/Source/FreeImage/TIFFLogLuv.cpp +65 -0
  95. data/vendor/FreeImage/Source/FreeImage/ToneMapping.cpp +75 -0
  96. data/vendor/FreeImage/Source/FreeImage/WuQuantizer.cpp +559 -0
  97. data/vendor/FreeImage/Source/FreeImage/ZLibInterface.cpp +223 -0
  98. data/vendor/FreeImage/Source/FreeImage/tmoColorConvert.cpp +479 -0
  99. data/vendor/FreeImage/Source/FreeImage/tmoDrago03.cpp +295 -0
  100. data/vendor/FreeImage/Source/FreeImage/tmoFattal02.cpp +689 -0
  101. data/vendor/FreeImage/Source/FreeImage/tmoReinhard05.cpp +260 -0
  102. data/vendor/FreeImage/Source/FreeImage.h +1153 -0
  103. data/vendor/FreeImage/Source/FreeImageIO.h +63 -0
  104. data/vendor/FreeImage/Source/FreeImageToolkit/BSplineRotate.cpp +730 -0
  105. data/vendor/FreeImage/Source/FreeImageToolkit/Background.cpp +895 -0
  106. data/vendor/FreeImage/Source/FreeImageToolkit/Channels.cpp +488 -0
  107. data/vendor/FreeImage/Source/FreeImageToolkit/ClassicRotate.cpp +917 -0
  108. data/vendor/FreeImage/Source/FreeImageToolkit/Colors.cpp +967 -0
  109. data/vendor/FreeImage/Source/FreeImageToolkit/CopyPaste.cpp +861 -0
  110. data/vendor/FreeImage/Source/FreeImageToolkit/Display.cpp +230 -0
  111. data/vendor/FreeImage/Source/FreeImageToolkit/Filters.h +287 -0
  112. data/vendor/FreeImage/Source/FreeImageToolkit/Flip.cpp +166 -0
  113. data/vendor/FreeImage/Source/FreeImageToolkit/JPEGTransform.cpp +623 -0
  114. data/vendor/FreeImage/Source/FreeImageToolkit/MultigridPoissonSolver.cpp +505 -0
  115. data/vendor/FreeImage/Source/FreeImageToolkit/Rescale.cpp +192 -0
  116. data/vendor/FreeImage/Source/FreeImageToolkit/Resize.cpp +2116 -0
  117. data/vendor/FreeImage/Source/FreeImageToolkit/Resize.h +196 -0
  118. data/vendor/FreeImage/Source/LibJPEG/ansi2knr.c +739 -0
  119. data/vendor/FreeImage/Source/LibJPEG/cderror.h +134 -0
  120. data/vendor/FreeImage/Source/LibJPEG/cdjpeg.c +181 -0
  121. data/vendor/FreeImage/Source/LibJPEG/cdjpeg.h +187 -0
  122. data/vendor/FreeImage/Source/LibJPEG/cjpeg.c +664 -0
  123. data/vendor/FreeImage/Source/LibJPEG/ckconfig.c +402 -0
  124. data/vendor/FreeImage/Source/LibJPEG/djpeg.c +617 -0
  125. data/vendor/FreeImage/Source/LibJPEG/example.c +433 -0
  126. data/vendor/FreeImage/Source/LibJPEG/jaricom.c +153 -0
  127. data/vendor/FreeImage/Source/LibJPEG/jcapimin.c +288 -0
  128. data/vendor/FreeImage/Source/LibJPEG/jcapistd.c +162 -0
  129. data/vendor/FreeImage/Source/LibJPEG/jcarith.c +944 -0
  130. data/vendor/FreeImage/Source/LibJPEG/jccoefct.c +454 -0
  131. data/vendor/FreeImage/Source/LibJPEG/jccolor.c +604 -0
  132. data/vendor/FreeImage/Source/LibJPEG/jcdctmgr.c +477 -0
  133. data/vendor/FreeImage/Source/LibJPEG/jchuff.c +1573 -0
  134. data/vendor/FreeImage/Source/LibJPEG/jcinit.c +84 -0
  135. data/vendor/FreeImage/Source/LibJPEG/jcmainct.c +297 -0
  136. data/vendor/FreeImage/Source/LibJPEG/jcmarker.c +719 -0
  137. data/vendor/FreeImage/Source/LibJPEG/jcmaster.c +856 -0
  138. data/vendor/FreeImage/Source/LibJPEG/jcomapi.c +106 -0
  139. data/vendor/FreeImage/Source/LibJPEG/jconfig.h +161 -0
  140. data/vendor/FreeImage/Source/LibJPEG/jcparam.c +675 -0
  141. data/vendor/FreeImage/Source/LibJPEG/jcprepct.c +358 -0
  142. data/vendor/FreeImage/Source/LibJPEG/jcsample.c +545 -0
  143. data/vendor/FreeImage/Source/LibJPEG/jctrans.c +385 -0
  144. data/vendor/FreeImage/Source/LibJPEG/jdapimin.c +399 -0
  145. data/vendor/FreeImage/Source/LibJPEG/jdapistd.c +276 -0
  146. data/vendor/FreeImage/Source/LibJPEG/jdarith.c +796 -0
  147. data/vendor/FreeImage/Source/LibJPEG/jdatadst.c +270 -0
  148. data/vendor/FreeImage/Source/LibJPEG/jdatasrc.c +275 -0
  149. data/vendor/FreeImage/Source/LibJPEG/jdcoefct.c +741 -0
  150. data/vendor/FreeImage/Source/LibJPEG/jdcolor.c +748 -0
  151. data/vendor/FreeImage/Source/LibJPEG/jdct.h +393 -0
  152. data/vendor/FreeImage/Source/LibJPEG/jddctmgr.c +384 -0
  153. data/vendor/FreeImage/Source/LibJPEG/jdhuff.c +1554 -0
  154. data/vendor/FreeImage/Source/LibJPEG/jdinput.c +662 -0
  155. data/vendor/FreeImage/Source/LibJPEG/jdmainct.c +513 -0
  156. data/vendor/FreeImage/Source/LibJPEG/jdmarker.c +1511 -0
  157. data/vendor/FreeImage/Source/LibJPEG/jdmaster.c +543 -0
  158. data/vendor/FreeImage/Source/LibJPEG/jdmerge.c +401 -0
  159. data/vendor/FreeImage/Source/LibJPEG/jdpostct.c +290 -0
  160. data/vendor/FreeImage/Source/LibJPEG/jdsample.c +361 -0
  161. data/vendor/FreeImage/Source/LibJPEG/jdtrans.c +140 -0
  162. data/vendor/FreeImage/Source/LibJPEG/jerror.c +253 -0
  163. data/vendor/FreeImage/Source/LibJPEG/jerror.h +304 -0
  164. data/vendor/FreeImage/Source/LibJPEG/jfdctflt.c +174 -0
  165. data/vendor/FreeImage/Source/LibJPEG/jfdctfst.c +230 -0
  166. data/vendor/FreeImage/Source/LibJPEG/jfdctint.c +4406 -0
  167. data/vendor/FreeImage/Source/LibJPEG/jidctflt.c +235 -0
  168. data/vendor/FreeImage/Source/LibJPEG/jidctfst.c +368 -0
  169. data/vendor/FreeImage/Source/LibJPEG/jidctint.c +5179 -0
  170. data/vendor/FreeImage/Source/LibJPEG/jinclude.h +91 -0
  171. data/vendor/FreeImage/Source/LibJPEG/jmemansi.c +167 -0
  172. data/vendor/FreeImage/Source/LibJPEG/jmemdos.c +638 -0
  173. data/vendor/FreeImage/Source/LibJPEG/jmemmac.c +289 -0
  174. data/vendor/FreeImage/Source/LibJPEG/jmemmgr.c +1119 -0
  175. data/vendor/FreeImage/Source/LibJPEG/jmemname.c +276 -0
  176. data/vendor/FreeImage/Source/LibJPEG/jmemnobs.c +109 -0
  177. data/vendor/FreeImage/Source/LibJPEG/jmemsys.h +198 -0
  178. data/vendor/FreeImage/Source/LibJPEG/jmorecfg.h +442 -0
  179. data/vendor/FreeImage/Source/LibJPEG/jpegint.h +426 -0
  180. data/vendor/FreeImage/Source/LibJPEG/jpeglib.h +1180 -0
  181. data/vendor/FreeImage/Source/LibJPEG/jpegtran.c +577 -0
  182. data/vendor/FreeImage/Source/LibJPEG/jquant1.c +857 -0
  183. data/vendor/FreeImage/Source/LibJPEG/jquant2.c +1311 -0
  184. data/vendor/FreeImage/Source/LibJPEG/jutils.c +227 -0
  185. data/vendor/FreeImage/Source/LibJPEG/jversion.h +14 -0
  186. data/vendor/FreeImage/Source/LibJPEG/rdbmp.c +480 -0
  187. data/vendor/FreeImage/Source/LibJPEG/rdcolmap.c +253 -0
  188. data/vendor/FreeImage/Source/LibJPEG/rdgif.c +38 -0
  189. data/vendor/FreeImage/Source/LibJPEG/rdjpgcom.c +515 -0
  190. data/vendor/FreeImage/Source/LibJPEG/rdppm.c +459 -0
  191. data/vendor/FreeImage/Source/LibJPEG/rdrle.c +387 -0
  192. data/vendor/FreeImage/Source/LibJPEG/rdswitch.c +365 -0
  193. data/vendor/FreeImage/Source/LibJPEG/rdtarga.c +500 -0
  194. data/vendor/FreeImage/Source/LibJPEG/transupp.c +1763 -0
  195. data/vendor/FreeImage/Source/LibJPEG/transupp.h +219 -0
  196. data/vendor/FreeImage/Source/LibJPEG/wrbmp.c +442 -0
  197. data/vendor/FreeImage/Source/LibJPEG/wrgif.c +399 -0
  198. data/vendor/FreeImage/Source/LibJPEG/wrjpgcom.c +583 -0
  199. data/vendor/FreeImage/Source/LibJPEG/wrppm.c +269 -0
  200. data/vendor/FreeImage/Source/LibJPEG/wrrle.c +305 -0
  201. data/vendor/FreeImage/Source/LibJPEG/wrtarga.c +253 -0
  202. data/vendor/FreeImage/Source/LibJXR/common/include/guiddef.h +230 -0
  203. data/vendor/FreeImage/Source/LibJXR/common/include/wmsal.h +757 -0
  204. data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstring.h +342 -0
  205. data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_adt.h +71 -0
  206. data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_strict.h +1096 -0
  207. data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_undef.h +406 -0
  208. data/vendor/FreeImage/Source/LibJXR/image/decode/JXRTranscode.c +987 -0
  209. data/vendor/FreeImage/Source/LibJXR/image/decode/decode.c +200 -0
  210. data/vendor/FreeImage/Source/LibJXR/image/decode/decode.h +143 -0
  211. data/vendor/FreeImage/Source/LibJXR/image/decode/postprocess.c +288 -0
  212. data/vendor/FreeImage/Source/LibJXR/image/decode/segdec.c +1205 -0
  213. data/vendor/FreeImage/Source/LibJXR/image/decode/strInvTransform.c +1888 -0
  214. data/vendor/FreeImage/Source/LibJXR/image/decode/strPredQuantDec.c +539 -0
  215. data/vendor/FreeImage/Source/LibJXR/image/decode/strdec.c +3628 -0
  216. data/vendor/FreeImage/Source/LibJXR/image/decode/strdec_x86.c +1640 -0
  217. data/vendor/FreeImage/Source/LibJXR/image/encode/encode.c +144 -0
  218. data/vendor/FreeImage/Source/LibJXR/image/encode/encode.h +113 -0
  219. data/vendor/FreeImage/Source/LibJXR/image/encode/segenc.c +1186 -0
  220. data/vendor/FreeImage/Source/LibJXR/image/encode/strFwdTransform.c +1111 -0
  221. data/vendor/FreeImage/Source/LibJXR/image/encode/strPredQuantEnc.c +511 -0
  222. data/vendor/FreeImage/Source/LibJXR/image/encode/strenc.c +2370 -0
  223. data/vendor/FreeImage/Source/LibJXR/image/encode/strenc_x86.c +409 -0
  224. data/vendor/FreeImage/Source/LibJXR/image/sys/adapthuff.c +511 -0
  225. data/vendor/FreeImage/Source/LibJXR/image/sys/ansi.h +61 -0
  226. data/vendor/FreeImage/Source/LibJXR/image/sys/common.h +131 -0
  227. data/vendor/FreeImage/Source/LibJXR/image/sys/image.c +183 -0
  228. data/vendor/FreeImage/Source/LibJXR/image/sys/perfTimer.h +115 -0
  229. data/vendor/FreeImage/Source/LibJXR/image/sys/perfTimerANSI.c +274 -0
  230. data/vendor/FreeImage/Source/LibJXR/image/sys/strPredQuant.c +306 -0
  231. data/vendor/FreeImage/Source/LibJXR/image/sys/strTransform.c +85 -0
  232. data/vendor/FreeImage/Source/LibJXR/image/sys/strTransform.h +50 -0
  233. data/vendor/FreeImage/Source/LibJXR/image/sys/strcodec.c +1251 -0
  234. data/vendor/FreeImage/Source/LibJXR/image/sys/strcodec.h +681 -0
  235. data/vendor/FreeImage/Source/LibJXR/image/sys/windowsmediaphoto.h +515 -0
  236. data/vendor/FreeImage/Source/LibJXR/image/sys/xplatform_image.h +84 -0
  237. data/vendor/FreeImage/Source/LibJXR/image/x86/x86.h +58 -0
  238. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlue.c +930 -0
  239. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlue.h +636 -0
  240. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlueJxr.c +2246 -0
  241. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGluePFC.c +2338 -0
  242. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRMeta.c +905 -0
  243. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRMeta.h +258 -0
  244. data/vendor/FreeImage/Source/LibOpenJPEG/bio.c +188 -0
  245. data/vendor/FreeImage/Source/LibOpenJPEG/bio.h +128 -0
  246. data/vendor/FreeImage/Source/LibOpenJPEG/cidx_manager.c +239 -0
  247. data/vendor/FreeImage/Source/LibOpenJPEG/cidx_manager.h +68 -0
  248. data/vendor/FreeImage/Source/LibOpenJPEG/cio.c +644 -0
  249. data/vendor/FreeImage/Source/LibOpenJPEG/cio.h +393 -0
  250. data/vendor/FreeImage/Source/LibOpenJPEG/dwt.c +919 -0
  251. data/vendor/FreeImage/Source/LibOpenJPEG/dwt.h +116 -0
  252. data/vendor/FreeImage/Source/LibOpenJPEG/event.c +141 -0
  253. data/vendor/FreeImage/Source/LibOpenJPEG/event.h +97 -0
  254. data/vendor/FreeImage/Source/LibOpenJPEG/function_list.c +114 -0
  255. data/vendor/FreeImage/Source/LibOpenJPEG/function_list.h +126 -0
  256. data/vendor/FreeImage/Source/LibOpenJPEG/image.c +235 -0
  257. data/vendor/FreeImage/Source/LibOpenJPEG/image.h +63 -0
  258. data/vendor/FreeImage/Source/LibOpenJPEG/indexbox_manager.h +148 -0
  259. data/vendor/FreeImage/Source/LibOpenJPEG/invert.c +289 -0
  260. data/vendor/FreeImage/Source/LibOpenJPEG/invert.h +59 -0
  261. data/vendor/FreeImage/Source/LibOpenJPEG/j2k.c +10238 -0
  262. data/vendor/FreeImage/Source/LibOpenJPEG/j2k.h +838 -0
  263. data/vendor/FreeImage/Source/LibOpenJPEG/jp2.c +2776 -0
  264. data/vendor/FreeImage/Source/LibOpenJPEG/jp2.h +490 -0
  265. data/vendor/FreeImage/Source/LibOpenJPEG/mct.c +319 -0
  266. data/vendor/FreeImage/Source/LibOpenJPEG/mct.h +149 -0
  267. data/vendor/FreeImage/Source/LibOpenJPEG/mqc.c +604 -0
  268. data/vendor/FreeImage/Source/LibOpenJPEG/mqc.h +201 -0
  269. data/vendor/FreeImage/Source/LibOpenJPEG/openjpeg.c +955 -0
  270. data/vendor/FreeImage/Source/LibOpenJPEG/openjpeg.h +1475 -0
  271. data/vendor/FreeImage/Source/LibOpenJPEG/opj_clock.c +59 -0
  272. data/vendor/FreeImage/Source/LibOpenJPEG/opj_clock.h +54 -0
  273. data/vendor/FreeImage/Source/LibOpenJPEG/opj_codec.h +160 -0
  274. data/vendor/FreeImage/Source/LibOpenJPEG/opj_config.h +9 -0
  275. data/vendor/FreeImage/Source/LibOpenJPEG/opj_config_private.h +16 -0
  276. data/vendor/FreeImage/Source/LibOpenJPEG/opj_includes.h +175 -0
  277. data/vendor/FreeImage/Source/LibOpenJPEG/opj_intmath.h +172 -0
  278. data/vendor/FreeImage/Source/LibOpenJPEG/opj_inttypes.h +43 -0
  279. data/vendor/FreeImage/Source/LibOpenJPEG/opj_malloc.h +180 -0
  280. data/vendor/FreeImage/Source/LibOpenJPEG/opj_stdint.h +47 -0
  281. data/vendor/FreeImage/Source/LibOpenJPEG/phix_manager.c +191 -0
  282. data/vendor/FreeImage/Source/LibOpenJPEG/pi.c +1870 -0
  283. data/vendor/FreeImage/Source/LibOpenJPEG/pi.h +182 -0
  284. data/vendor/FreeImage/Source/LibOpenJPEG/ppix_manager.c +194 -0
  285. data/vendor/FreeImage/Source/LibOpenJPEG/raw.c +89 -0
  286. data/vendor/FreeImage/Source/LibOpenJPEG/raw.h +100 -0
  287. data/vendor/FreeImage/Source/LibOpenJPEG/t1.c +1751 -0
  288. data/vendor/FreeImage/Source/LibOpenJPEG/t1.h +157 -0
  289. data/vendor/FreeImage/Source/LibOpenJPEG/t1_generate_luts.c +276 -0
  290. data/vendor/FreeImage/Source/LibOpenJPEG/t1_luts.h +143 -0
  291. data/vendor/FreeImage/Source/LibOpenJPEG/t2.c +1334 -0
  292. data/vendor/FreeImage/Source/LibOpenJPEG/t2.h +127 -0
  293. data/vendor/FreeImage/Source/LibOpenJPEG/tcd.c +2123 -0
  294. data/vendor/FreeImage/Source/LibOpenJPEG/tcd.h +348 -0
  295. data/vendor/FreeImage/Source/LibOpenJPEG/tgt.c +331 -0
  296. data/vendor/FreeImage/Source/LibOpenJPEG/tgt.h +140 -0
  297. data/vendor/FreeImage/Source/LibOpenJPEG/thix_manager.c +134 -0
  298. data/vendor/FreeImage/Source/LibOpenJPEG/tpix_manager.c +185 -0
  299. data/vendor/FreeImage/Source/LibPNG/example.c +1061 -0
  300. data/vendor/FreeImage/Source/LibPNG/png.c +4493 -0
  301. data/vendor/FreeImage/Source/LibPNG/png.h +3282 -0
  302. data/vendor/FreeImage/Source/LibPNG/pngconf.h +644 -0
  303. data/vendor/FreeImage/Source/LibPNG/pngdebug.h +154 -0
  304. data/vendor/FreeImage/Source/LibPNG/pngerror.c +963 -0
  305. data/vendor/FreeImage/Source/LibPNG/pngget.c +1213 -0
  306. data/vendor/FreeImage/Source/LibPNG/pnginfo.h +260 -0
  307. data/vendor/FreeImage/Source/LibPNG/pnglibconf.h +218 -0
  308. data/vendor/FreeImage/Source/LibPNG/pngmem.c +281 -0
  309. data/vendor/FreeImage/Source/LibPNG/pngpread.c +1168 -0
  310. data/vendor/FreeImage/Source/LibPNG/pngpriv.h +1944 -0
  311. data/vendor/FreeImage/Source/LibPNG/pngread.c +4121 -0
  312. data/vendor/FreeImage/Source/LibPNG/pngrio.c +120 -0
  313. data/vendor/FreeImage/Source/LibPNG/pngrtran.c +4994 -0
  314. data/vendor/FreeImage/Source/LibPNG/pngrutil.c +4474 -0
  315. data/vendor/FreeImage/Source/LibPNG/pngset.c +1611 -0
  316. data/vendor/FreeImage/Source/LibPNG/pngstruct.h +489 -0
  317. data/vendor/FreeImage/Source/LibPNG/pngtest.c +2011 -0
  318. data/vendor/FreeImage/Source/LibPNG/pngtrans.c +849 -0
  319. data/vendor/FreeImage/Source/LibPNG/pngwio.c +168 -0
  320. data/vendor/FreeImage/Source/LibPNG/pngwrite.c +2455 -0
  321. data/vendor/FreeImage/Source/LibPNG/pngwtran.c +574 -0
  322. data/vendor/FreeImage/Source/LibPNG/pngwutil.c +3029 -0
  323. data/vendor/FreeImage/Source/LibRawLite/dcraw/dcraw.c +15462 -0
  324. data/vendor/FreeImage/Source/LibRawLite/internal/aahd_demosaic.cpp +706 -0
  325. data/vendor/FreeImage/Source/LibRawLite/internal/dcb_demosaicing.c +710 -0
  326. data/vendor/FreeImage/Source/LibRawLite/internal/dcraw_common.cpp +13593 -0
  327. data/vendor/FreeImage/Source/LibRawLite/internal/dcraw_fileio.cpp +240 -0
  328. data/vendor/FreeImage/Source/LibRawLite/internal/defines.h +167 -0
  329. data/vendor/FreeImage/Source/LibRawLite/internal/demosaic_packs.cpp +99 -0
  330. data/vendor/FreeImage/Source/LibRawLite/internal/dht_demosaic.cpp +873 -0
  331. data/vendor/FreeImage/Source/LibRawLite/internal/libraw_internal_funcs.h +282 -0
  332. data/vendor/FreeImage/Source/LibRawLite/internal/libraw_x3f.cpp +1919 -0
  333. data/vendor/FreeImage/Source/LibRawLite/internal/var_defines.h +216 -0
  334. data/vendor/FreeImage/Source/LibRawLite/internal/wf_filtering.cpp +1950 -0
  335. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw.h +338 -0
  336. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_alloc.h +99 -0
  337. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_const.h +233 -0
  338. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_datastream.h +238 -0
  339. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_internal.h +225 -0
  340. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_types.h +442 -0
  341. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_version.h +62 -0
  342. data/vendor/FreeImage/Source/LibRawLite/src/libraw_c_api.cpp +230 -0
  343. data/vendor/FreeImage/Source/LibRawLite/src/libraw_cxx.cpp +4533 -0
  344. data/vendor/FreeImage/Source/LibRawLite/src/libraw_datastream.cpp +703 -0
  345. data/vendor/FreeImage/Source/LibTIFF4/mkg3states.c +451 -0
  346. data/vendor/FreeImage/Source/LibTIFF4/mkspans.c +82 -0
  347. data/vendor/FreeImage/Source/LibTIFF4/t4.h +292 -0
  348. data/vendor/FreeImage/Source/LibTIFF4/tif_aux.c +358 -0
  349. data/vendor/FreeImage/Source/LibTIFF4/tif_close.c +140 -0
  350. data/vendor/FreeImage/Source/LibTIFF4/tif_codec.c +166 -0
  351. data/vendor/FreeImage/Source/LibTIFF4/tif_color.c +287 -0
  352. data/vendor/FreeImage/Source/LibTIFF4/tif_compress.c +304 -0
  353. data/vendor/FreeImage/Source/LibTIFF4/tif_config.h +97 -0
  354. data/vendor/FreeImage/Source/LibTIFF4/tif_config.vc.h +74 -0
  355. data/vendor/FreeImage/Source/LibTIFF4/tif_config.wince.h +71 -0
  356. data/vendor/FreeImage/Source/LibTIFF4/tif_dir.c +1700 -0
  357. data/vendor/FreeImage/Source/LibTIFF4/tif_dir.h +308 -0
  358. data/vendor/FreeImage/Source/LibTIFF4/tif_dirinfo.c +959 -0
  359. data/vendor/FreeImage/Source/LibTIFF4/tif_dirread.c +5640 -0
  360. data/vendor/FreeImage/Source/LibTIFF4/tif_dirwrite.c +2910 -0
  361. data/vendor/FreeImage/Source/LibTIFF4/tif_dumpmode.c +143 -0
  362. data/vendor/FreeImage/Source/LibTIFF4/tif_error.c +80 -0
  363. data/vendor/FreeImage/Source/LibTIFF4/tif_extension.c +118 -0
  364. data/vendor/FreeImage/Source/LibTIFF4/tif_fax3.c +1595 -0
  365. data/vendor/FreeImage/Source/LibTIFF4/tif_fax3.h +538 -0
  366. data/vendor/FreeImage/Source/LibTIFF4/tif_fax3sm.c +1260 -0
  367. data/vendor/FreeImage/Source/LibTIFF4/tif_flush.c +118 -0
  368. data/vendor/FreeImage/Source/LibTIFF4/tif_getimage.c +2890 -0
  369. data/vendor/FreeImage/Source/LibTIFF4/tif_jbig.c +213 -0
  370. data/vendor/FreeImage/Source/LibTIFF4/tif_jpeg.c +2354 -0
  371. data/vendor/FreeImage/Source/LibTIFF4/tif_jpeg_12.c +65 -0
  372. data/vendor/FreeImage/Source/LibTIFF4/tif_luv.c +1683 -0
  373. data/vendor/FreeImage/Source/LibTIFF4/tif_lzma.c +495 -0
  374. data/vendor/FreeImage/Source/LibTIFF4/tif_lzw.c +1169 -0
  375. data/vendor/FreeImage/Source/LibTIFF4/tif_next.c +181 -0
  376. data/vendor/FreeImage/Source/LibTIFF4/tif_ojpeg.c +2501 -0
  377. data/vendor/FreeImage/Source/LibTIFF4/tif_open.c +725 -0
  378. data/vendor/FreeImage/Source/LibTIFF4/tif_packbits.c +300 -0
  379. data/vendor/FreeImage/Source/LibTIFF4/tif_pixarlog.c +1442 -0
  380. data/vendor/FreeImage/Source/LibTIFF4/tif_predict.c +764 -0
  381. data/vendor/FreeImage/Source/LibTIFF4/tif_predict.h +77 -0
  382. data/vendor/FreeImage/Source/LibTIFF4/tif_print.c +716 -0
  383. data/vendor/FreeImage/Source/LibTIFF4/tif_read.c +1086 -0
  384. data/vendor/FreeImage/Source/LibTIFF4/tif_strip.c +383 -0
  385. data/vendor/FreeImage/Source/LibTIFF4/tif_swab.c +310 -0
  386. data/vendor/FreeImage/Source/LibTIFF4/tif_thunder.c +207 -0
  387. data/vendor/FreeImage/Source/LibTIFF4/tif_tile.c +299 -0
  388. data/vendor/FreeImage/Source/LibTIFF4/tif_unix.c +325 -0
  389. data/vendor/FreeImage/Source/LibTIFF4/tif_version.c +40 -0
  390. data/vendor/FreeImage/Source/LibTIFF4/tif_vms.c +603 -0
  391. data/vendor/FreeImage/Source/LibTIFF4/tif_warning.c +81 -0
  392. data/vendor/FreeImage/Source/LibTIFF4/tif_win32.c +443 -0
  393. data/vendor/FreeImage/Source/LibTIFF4/tif_wince.c +293 -0
  394. data/vendor/FreeImage/Source/LibTIFF4/tif_write.c +771 -0
  395. data/vendor/FreeImage/Source/LibTIFF4/tif_zip.c +472 -0
  396. data/vendor/FreeImage/Source/LibTIFF4/tiff.h +681 -0
  397. data/vendor/FreeImage/Source/LibTIFF4/tiffconf.h +170 -0
  398. data/vendor/FreeImage/Source/LibTIFF4/tiffconf.vc.h +160 -0
  399. data/vendor/FreeImage/Source/LibTIFF4/tiffconf.wince.h +121 -0
  400. data/vendor/FreeImage/Source/LibTIFF4/tiffio.h +557 -0
  401. data/vendor/FreeImage/Source/LibTIFF4/tiffiop.h +367 -0
  402. data/vendor/FreeImage/Source/LibTIFF4/tiffvers.h +9 -0
  403. data/vendor/FreeImage/Source/LibTIFF4/uvcode.h +180 -0
  404. data/vendor/FreeImage/Source/LibWebP/src/dec/alphai.h +55 -0
  405. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.alpha.c +167 -0
  406. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.buffer.c +249 -0
  407. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.frame.c +827 -0
  408. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.idec.c +857 -0
  409. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.io.c +640 -0
  410. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.quant.c +110 -0
  411. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.tree.c +525 -0
  412. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.vp8.c +663 -0
  413. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.vp8l.c +1584 -0
  414. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.webp.c +834 -0
  415. data/vendor/FreeImage/Source/LibWebP/src/dec/decode_vp8.h +185 -0
  416. data/vendor/FreeImage/Source/LibWebP/src/dec/vp8i.h +353 -0
  417. data/vendor/FreeImage/Source/LibWebP/src/dec/vp8li.h +136 -0
  418. data/vendor/FreeImage/Source/LibWebP/src/dec/webpi.h +120 -0
  419. data/vendor/FreeImage/Source/LibWebP/src/demux/demux.demux.c +957 -0
  420. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing.c +377 -0
  421. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing_mips_dsp_r2.c +139 -0
  422. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing_sse2.c +296 -0
  423. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb.c +68 -0
  424. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb_mips_dsp_r2.c +108 -0
  425. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb_sse2.c +62 -0
  426. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost.c +412 -0
  427. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_mips32.c +154 -0
  428. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_mips_dsp_r2.c +107 -0
  429. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_sse2.c +121 -0
  430. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cpu.c +138 -0
  431. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec.c +760 -0
  432. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_clip_tables.c +366 -0
  433. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_mips32.c +585 -0
  434. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c +992 -0
  435. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_neon.c +1489 -0
  436. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_sse2.c +1284 -0
  437. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc.c +788 -0
  438. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_avx2.c +24 -0
  439. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_mips32.c +670 -0
  440. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c +1510 -0
  441. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_neon.c +932 -0
  442. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_sse2.c +940 -0
  443. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters.c +240 -0
  444. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c +404 -0
  445. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters_sse2.c +349 -0
  446. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.h +434 -0
  447. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless.c +1838 -0
  448. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_mips32.c +416 -0
  449. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c +921 -0
  450. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_neon.c +357 -0
  451. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_sse2.c +535 -0
  452. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler.c +115 -0
  453. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler_mips32.c +192 -0
  454. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler_mips_dsp_r2.c +210 -0
  455. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling.c +252 -0
  456. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c +280 -0
  457. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_neon.c +267 -0
  458. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_sse2.c +214 -0
  459. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv.c +166 -0
  460. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_mips32.c +100 -0
  461. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c +131 -0
  462. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_sse2.c +322 -0
  463. data/vendor/FreeImage/Source/LibWebP/src/dsp/lossless.h +313 -0
  464. data/vendor/FreeImage/Source/LibWebP/src/dsp/mips_macro.h +200 -0
  465. data/vendor/FreeImage/Source/LibWebP/src/dsp/neon.h +82 -0
  466. data/vendor/FreeImage/Source/LibWebP/src/dsp/yuv.h +321 -0
  467. data/vendor/FreeImage/Source/LibWebP/src/dsp/yuv_tables_sse2.h +536 -0
  468. data/vendor/FreeImage/Source/LibWebP/src/enc/backward_references.h +202 -0
  469. data/vendor/FreeImage/Source/LibWebP/src/enc/cost.h +69 -0
  470. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.alpha.c +440 -0
  471. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.analysis.c +501 -0
  472. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.backward_references.c +1076 -0
  473. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.config.c +163 -0
  474. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.cost.c +355 -0
  475. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.filter.c +296 -0
  476. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.frame.c +850 -0
  477. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.histogram.c +897 -0
  478. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.iterator.c +456 -0
  479. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.near_lossless.c +160 -0
  480. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture.c +290 -0
  481. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_csp.c +1100 -0
  482. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_psnr.c +150 -0
  483. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_rescale.c +285 -0
  484. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_tools.c +206 -0
  485. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.quant.c +1191 -0
  486. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.syntax.c +383 -0
  487. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.token.c +285 -0
  488. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.tree.c +504 -0
  489. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.vp8l.c +1437 -0
  490. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.webpenc.c +379 -0
  491. data/vendor/FreeImage/Source/LibWebP/src/enc/histogram.h +114 -0
  492. data/vendor/FreeImage/Source/LibWebP/src/enc/vp8enci.h +551 -0
  493. data/vendor/FreeImage/Source/LibWebP/src/enc/vp8li.h +78 -0
  494. data/vendor/FreeImage/Source/LibWebP/src/mux/mux.anim_encode.c +1241 -0
  495. data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxedit.c +696 -0
  496. data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxinternal.c +551 -0
  497. data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxread.c +544 -0
  498. data/vendor/FreeImage/Source/LibWebP/src/mux/muxi.h +232 -0
  499. data/vendor/FreeImage/Source/LibWebP/src/utils/bit_reader.h +168 -0
  500. data/vendor/FreeImage/Source/LibWebP/src/utils/bit_reader_inl.h +172 -0
  501. data/vendor/FreeImage/Source/LibWebP/src/utils/bit_writer.h +120 -0
  502. data/vendor/FreeImage/Source/LibWebP/src/utils/color_cache.h +74 -0
  503. data/vendor/FreeImage/Source/LibWebP/src/utils/endian_inl.h +100 -0
  504. data/vendor/FreeImage/Source/LibWebP/src/utils/filters.h +32 -0
  505. data/vendor/FreeImage/Source/LibWebP/src/utils/huffman.h +67 -0
  506. data/vendor/FreeImage/Source/LibWebP/src/utils/huffman_encode.h +60 -0
  507. data/vendor/FreeImage/Source/LibWebP/src/utils/quant_levels.h +36 -0
  508. data/vendor/FreeImage/Source/LibWebP/src/utils/quant_levels_dec.h +35 -0
  509. data/vendor/FreeImage/Source/LibWebP/src/utils/random.h +63 -0
  510. data/vendor/FreeImage/Source/LibWebP/src/utils/rescaler.h +78 -0
  511. data/vendor/FreeImage/Source/LibWebP/src/utils/thread.h +93 -0
  512. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.bit_reader.c +208 -0
  513. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.bit_writer.c +308 -0
  514. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.color_cache.c +49 -0
  515. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.filters.c +76 -0
  516. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.h +121 -0
  517. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.huffman.c +205 -0
  518. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.huffman_encode.c +417 -0
  519. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.quant_levels.c +140 -0
  520. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.quant_levels_dec.c +279 -0
  521. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.random.c +43 -0
  522. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.rescaler.c +82 -0
  523. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.thread.c +309 -0
  524. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.utils.c +211 -0
  525. data/vendor/FreeImage/Source/LibWebP/src/webp/decode.h +493 -0
  526. data/vendor/FreeImage/Source/LibWebP/src/webp/demux.h +224 -0
  527. data/vendor/FreeImage/Source/LibWebP/src/webp/encode.h +515 -0
  528. data/vendor/FreeImage/Source/LibWebP/src/webp/format_constants.h +88 -0
  529. data/vendor/FreeImage/Source/LibWebP/src/webp/mux.h +507 -0
  530. data/vendor/FreeImage/Source/LibWebP/src/webp/mux_types.h +97 -0
  531. data/vendor/FreeImage/Source/LibWebP/src/webp/types.h +52 -0
  532. data/vendor/FreeImage/Source/MapIntrospector.h +212 -0
  533. data/vendor/FreeImage/Source/Metadata/Exif.cpp +1253 -0
  534. data/vendor/FreeImage/Source/Metadata/FIRational.cpp +176 -0
  535. data/vendor/FreeImage/Source/Metadata/FIRational.h +108 -0
  536. data/vendor/FreeImage/Source/Metadata/FreeImageTag.cpp +353 -0
  537. data/vendor/FreeImage/Source/Metadata/FreeImageTag.h +500 -0
  538. data/vendor/FreeImage/Source/Metadata/IPTC.cpp +342 -0
  539. data/vendor/FreeImage/Source/Metadata/TagConversion.cpp +1094 -0
  540. data/vendor/FreeImage/Source/Metadata/TagLib.cpp +1618 -0
  541. data/vendor/FreeImage/Source/Metadata/XTIFF.cpp +766 -0
  542. data/vendor/FreeImage/Source/OpenEXR/Half/eLut.cpp +114 -0
  543. data/vendor/FreeImage/Source/OpenEXR/Half/eLut.h +71 -0
  544. data/vendor/FreeImage/Source/OpenEXR/Half/half.cpp +310 -0
  545. data/vendor/FreeImage/Source/OpenEXR/Half/half.h +757 -0
  546. data/vendor/FreeImage/Source/OpenEXR/Half/halfExport.h +27 -0
  547. data/vendor/FreeImage/Source/OpenEXR/Half/halfFunction.h +179 -0
  548. data/vendor/FreeImage/Source/OpenEXR/Half/halfLimits.h +102 -0
  549. data/vendor/FreeImage/Source/OpenEXR/Half/toFloat.cpp +164 -0
  550. data/vendor/FreeImage/Source/OpenEXR/Half/toFloat.h +16391 -0
  551. data/vendor/FreeImage/Source/OpenEXR/Iex/Iex.h +60 -0
  552. data/vendor/FreeImage/Source/OpenEXR/Iex/IexBaseExc.cpp +156 -0
  553. data/vendor/FreeImage/Source/OpenEXR/Iex/IexBaseExc.h +264 -0
  554. data/vendor/FreeImage/Source/OpenEXR/Iex/IexErrnoExc.h +208 -0
  555. data/vendor/FreeImage/Source/OpenEXR/Iex/IexExport.h +51 -0
  556. data/vendor/FreeImage/Source/OpenEXR/Iex/IexForward.h +229 -0
  557. data/vendor/FreeImage/Source/OpenEXR/Iex/IexMacros.h +170 -0
  558. data/vendor/FreeImage/Source/OpenEXR/Iex/IexMathExc.h +57 -0
  559. data/vendor/FreeImage/Source/OpenEXR/Iex/IexNamespace.h +112 -0
  560. data/vendor/FreeImage/Source/OpenEXR/Iex/IexThrowErrnoExc.cpp +873 -0
  561. data/vendor/FreeImage/Source/OpenEXR/Iex/IexThrowErrnoExc.h +97 -0
  562. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFloatExc.cpp +113 -0
  563. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFloatExc.h +146 -0
  564. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFpu.cpp +530 -0
  565. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFpu.h +91 -0
  566. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathIeeeExc.h +62 -0
  567. data/vendor/FreeImage/Source/OpenEXR/IlmBaseConfig.h +61 -0
  568. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAcesFile.cpp +633 -0
  569. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAcesFile.h +324 -0
  570. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfArray.h +285 -0
  571. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAttribute.cpp +158 -0
  572. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAttribute.h +407 -0
  573. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAutoArray.h +95 -0
  574. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfB44Compressor.cpp +1072 -0
  575. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfB44Compressor.h +118 -0
  576. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfBoxAttribute.cpp +111 -0
  577. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfBoxAttribute.h +87 -0
  578. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCRgbaFile.cpp +1438 -0
  579. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCRgbaFile.h +555 -0
  580. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelList.cpp +322 -0
  581. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelList.h +436 -0
  582. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelListAttribute.cpp +150 -0
  583. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelListAttribute.h +74 -0
  584. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCheckedArithmetic.h +163 -0
  585. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticities.cpp +151 -0
  586. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticities.h +131 -0
  587. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticitiesAttribute.cpp +87 -0
  588. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticitiesAttribute.h +73 -0
  589. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompositeDeepScanLine.cpp +591 -0
  590. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompositeDeepScanLine.h +142 -0
  591. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompression.h +84 -0
  592. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressionAttribute.cpp +78 -0
  593. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressionAttribute.h +64 -0
  594. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressor.cpp +226 -0
  595. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressor.h +265 -0
  596. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfConvert.cpp +143 -0
  597. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfConvert.h +107 -0
  598. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepCompositing.cpp +110 -0
  599. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepCompositing.h +132 -0
  600. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepFrameBuffer.cpp +230 -0
  601. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepFrameBuffer.h +339 -0
  602. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageState.h +96 -0
  603. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageStateAttribute.cpp +78 -0
  604. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageStateAttribute.h +68 -0
  605. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputFile.cpp +2025 -0
  606. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputFile.h +276 -0
  607. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputPart.cpp +149 -0
  608. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputPart.h +181 -0
  609. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputFile.cpp +1552 -0
  610. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputFile.h +244 -0
  611. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputPart.cpp +107 -0
  612. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputPart.h +168 -0
  613. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputFile.cpp +1979 -0
  614. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputFile.h +437 -0
  615. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputPart.cpp +273 -0
  616. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputPart.h +362 -0
  617. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputFile.cpp +2055 -0
  618. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputFile.h +475 -0
  619. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputPart.cpp +250 -0
  620. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputPart.h +394 -0
  621. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDoubleAttribute.cpp +57 -0
  622. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDoubleAttribute.h +59 -0
  623. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressor.cpp +3424 -0
  624. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressor.h +210 -0
  625. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressorSimd.h +2145 -0
  626. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmap.cpp +335 -0
  627. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmap.h +336 -0
  628. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmapAttribute.cpp +76 -0
  629. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmapAttribute.h +68 -0
  630. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfExport.h +46 -0
  631. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFastHuf.cpp +768 -0
  632. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFastHuf.h +148 -0
  633. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatAttribute.cpp +57 -0
  634. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatAttribute.h +58 -0
  635. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatVectorAttribute.cpp +84 -0
  636. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatVectorAttribute.h +76 -0
  637. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfForward.h +127 -0
  638. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFrameBuffer.cpp +228 -0
  639. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFrameBuffer.h +386 -0
  640. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFramesPerSecond.cpp +76 -0
  641. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFramesPerSecond.h +94 -0
  642. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericInputFile.cpp +76 -0
  643. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericInputFile.h +58 -0
  644. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericOutputFile.cpp +112 -0
  645. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericOutputFile.h +62 -0
  646. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHeader.cpp +1283 -0
  647. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHeader.h +699 -0
  648. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHuf.cpp +1114 -0
  649. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHuf.h +82 -0
  650. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIO.cpp +110 -0
  651. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIO.h +255 -0
  652. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputFile.cpp +895 -0
  653. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputFile.h +240 -0
  654. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPart.cpp +114 -0
  655. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPart.h +84 -0
  656. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPartData.cpp +51 -0
  657. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPartData.h +69 -0
  658. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputStreamMutex.h +68 -0
  659. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInt64.h +56 -0
  660. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIntAttribute.cpp +57 -0
  661. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIntAttribute.h +58 -0
  662. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCode.cpp +217 -0
  663. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCode.h +167 -0
  664. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCodeAttribute.cpp +99 -0
  665. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCodeAttribute.h +73 -0
  666. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrder.h +69 -0
  667. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrderAttribute.cpp +78 -0
  668. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrderAttribute.h +72 -0
  669. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLut.cpp +178 -0
  670. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLut.h +188 -0
  671. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMatrixAttribute.cpp +263 -0
  672. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMatrixAttribute.h +83 -0
  673. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMisc.cpp +1872 -0
  674. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMisc.h +466 -0
  675. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartInputFile.cpp +783 -0
  676. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartInputFile.h +128 -0
  677. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartOutputFile.cpp +519 -0
  678. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartOutputFile.h +118 -0
  679. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiView.cpp +435 -0
  680. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiView.h +187 -0
  681. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfName.h +150 -0
  682. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfNamespace.h +115 -0
  683. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOpaqueAttribute.cpp +126 -0
  684. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOpaqueAttribute.h +110 -0
  685. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOptimizedPixelReading.h +646 -0
  686. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputFile.cpp +1378 -0
  687. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputFile.h +263 -0
  688. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPart.cpp +105 -0
  689. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPart.h +77 -0
  690. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPartData.cpp +52 -0
  691. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPartData.h +62 -0
  692. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputStreamMutex.h +70 -0
  693. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartHelper.h +262 -0
  694. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartType.cpp +63 -0
  695. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartType.h +62 -0
  696. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPixelType.h +67 -0
  697. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPizCompressor.cpp +667 -0
  698. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPizCompressor.h +117 -0
  699. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImage.cpp +104 -0
  700. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImage.h +135 -0
  701. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImageAttribute.cpp +103 -0
  702. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImageAttribute.h +70 -0
  703. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPxr24Compressor.cpp +553 -0
  704. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPxr24Compressor.h +109 -0
  705. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRational.cpp +127 -0
  706. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRational.h +98 -0
  707. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRationalAttribute.cpp +74 -0
  708. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRationalAttribute.h +69 -0
  709. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgba.h +109 -0
  710. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaFile.cpp +1405 -0
  711. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaFile.h +346 -0
  712. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaYca.cpp +497 -0
  713. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaYca.h +259 -0
  714. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRle.cpp +157 -0
  715. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRle.h +63 -0
  716. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRleCompressor.cpp +220 -0
  717. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRleCompressor.h +80 -0
  718. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfScanLineInputFile.cpp +1702 -0
  719. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfScanLineInputFile.h +210 -0
  720. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSimd.h +59 -0
  721. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStandardAttributes.cpp +125 -0
  722. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStandardAttributes.h +382 -0
  723. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStdIO.cpp +242 -0
  724. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStdIO.h +160 -0
  725. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringAttribute.cpp +80 -0
  726. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringAttribute.h +71 -0
  727. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringVectorAttribute.cpp +100 -0
  728. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringVectorAttribute.h +74 -0
  729. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSystemSpecific.cpp +129 -0
  730. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSystemSpecific.h +172 -0
  731. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTestFile.cpp +216 -0
  732. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTestFile.h +97 -0
  733. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfThreading.cpp +62 -0
  734. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfThreading.h +95 -0
  735. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescription.h +107 -0
  736. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescriptionAttribute.cpp +86 -0
  737. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescriptionAttribute.h +72 -0
  738. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileOffsets.cpp +552 -0
  739. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileOffsets.h +125 -0
  740. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputFile.cpp +1533 -0
  741. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputFile.h +401 -0
  742. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputPart.cpp +208 -0
  743. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputPart.h +100 -0
  744. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledMisc.cpp +389 -0
  745. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledMisc.h +106 -0
  746. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputFile.cpp +1841 -0
  747. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputFile.h +495 -0
  748. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputPart.cpp +228 -0
  749. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputPart.h +105 -0
  750. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledRgbaFile.cpp +1163 -0
  751. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledRgbaFile.h +482 -0
  752. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCode.cpp +431 -0
  753. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCode.h +242 -0
  754. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCodeAttribute.cpp +79 -0
  755. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCodeAttribute.h +74 -0
  756. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVecAttribute.cpp +217 -0
  757. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVecAttribute.h +100 -0
  758. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVersion.cpp +60 -0
  759. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVersion.h +136 -0
  760. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfWav.cpp +391 -0
  761. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfWav.h +78 -0
  762. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfXdr.h +927 -0
  763. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZip.cpp +196 -0
  764. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZip.h +78 -0
  765. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZipCompressor.cpp +127 -0
  766. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZipCompressor.h +89 -0
  767. data/vendor/FreeImage/Source/OpenEXR/IlmImf/b44ExpLogTable.cpp +136 -0
  768. data/vendor/FreeImage/Source/OpenEXR/IlmImf/b44ExpLogTable.h +16396 -0
  769. data/vendor/FreeImage/Source/OpenEXR/IlmImf/dwaLookups.cpp +573 -0
  770. data/vendor/FreeImage/Source/OpenEXR/IlmImf/dwaLookups.h +98334 -0
  771. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThread.cpp +80 -0
  772. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThread.h +143 -0
  773. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadExport.h +46 -0
  774. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadForward.h +52 -0
  775. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutex.cpp +59 -0
  776. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutex.h +160 -0
  777. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutexPosix.cpp +85 -0
  778. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutexWin32.cpp +79 -0
  779. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadNamespace.h +114 -0
  780. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPool.cpp +483 -0
  781. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPool.h +160 -0
  782. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPosix.cpp +98 -0
  783. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphore.cpp +60 -0
  784. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphore.h +112 -0
  785. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphorePosix.cpp +106 -0
  786. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphorePosixCompat.cpp +155 -0
  787. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphoreWin32.cpp +153 -0
  788. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadWin32.cpp +100 -0
  789. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBox.cpp +37 -0
  790. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBox.h +849 -0
  791. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBoxAlgo.h +1016 -0
  792. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColor.h +736 -0
  793. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColorAlgo.cpp +178 -0
  794. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColorAlgo.h +257 -0
  795. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathEuler.h +926 -0
  796. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathExc.h +73 -0
  797. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathExport.h +46 -0
  798. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathForward.h +72 -0
  799. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrame.h +192 -0
  800. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrustum.h +741 -0
  801. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrustumTest.h +417 -0
  802. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFun.cpp +181 -0
  803. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFun.h +269 -0
  804. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathGL.h +166 -0
  805. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathGLU.h +54 -0
  806. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathHalfLimits.h +68 -0
  807. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathInt64.h +62 -0
  808. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathInterval.h +226 -0
  809. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLimits.h +268 -0
  810. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLine.h +185 -0
  811. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLineAlgo.h +288 -0
  812. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMath.h +208 -0
  813. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrix.h +3441 -0
  814. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrixAlgo.cpp +1252 -0
  815. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrixAlgo.h +1425 -0
  816. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathNamespace.h +115 -0
  817. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathPlane.h +257 -0
  818. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathPlatform.h +112 -0
  819. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathQuat.h +964 -0
  820. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRandom.cpp +194 -0
  821. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRandom.h +401 -0
  822. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRoots.h +219 -0
  823. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathShear.cpp +54 -0
  824. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathShear.h +656 -0
  825. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathSphere.h +177 -0
  826. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVec.cpp +583 -0
  827. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVec.h +2227 -0
  828. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVecAlgo.h +147 -0
  829. data/vendor/FreeImage/Source/OpenEXR/OpenEXRConfig.h +72 -0
  830. data/vendor/FreeImage/Source/Plugin.h +144 -0
  831. data/vendor/FreeImage/Source/Quantizers.h +354 -0
  832. data/vendor/FreeImage/Source/ToneMapping.h +44 -0
  833. data/vendor/FreeImage/Source/Utilities.h +516 -0
  834. data/vendor/FreeImage/Source/ZLib/adler32.c +179 -0
  835. data/vendor/FreeImage/Source/ZLib/compress.c +80 -0
  836. data/vendor/FreeImage/Source/ZLib/crc32.c +425 -0
  837. data/vendor/FreeImage/Source/ZLib/crc32.h +441 -0
  838. data/vendor/FreeImage/Source/ZLib/deflate.c +1967 -0
  839. data/vendor/FreeImage/Source/ZLib/deflate.h +346 -0
  840. data/vendor/FreeImage/Source/ZLib/gzclose.c +25 -0
  841. data/vendor/FreeImage/Source/ZLib/gzguts.h +209 -0
  842. data/vendor/FreeImage/Source/ZLib/gzlib.c +634 -0
  843. data/vendor/FreeImage/Source/ZLib/gzread.c +594 -0
  844. data/vendor/FreeImage/Source/ZLib/gzwrite.c +577 -0
  845. data/vendor/FreeImage/Source/ZLib/infback.c +640 -0
  846. data/vendor/FreeImage/Source/ZLib/inffast.c +340 -0
  847. data/vendor/FreeImage/Source/ZLib/inffast.h +11 -0
  848. data/vendor/FreeImage/Source/ZLib/inffixed.h +94 -0
  849. data/vendor/FreeImage/Source/ZLib/inflate.c +1512 -0
  850. data/vendor/FreeImage/Source/ZLib/inflate.h +122 -0
  851. data/vendor/FreeImage/Source/ZLib/inftrees.c +306 -0
  852. data/vendor/FreeImage/Source/ZLib/inftrees.h +62 -0
  853. data/vendor/FreeImage/Source/ZLib/trees.c +1226 -0
  854. data/vendor/FreeImage/Source/ZLib/trees.h +128 -0
  855. data/vendor/FreeImage/Source/ZLib/uncompr.c +59 -0
  856. data/vendor/FreeImage/Source/ZLib/zconf.h +511 -0
  857. data/vendor/FreeImage/Source/ZLib/zlib.h +1768 -0
  858. data/vendor/FreeImage/Source/ZLib/zutil.c +324 -0
  859. data/vendor/FreeImage/Source/ZLib/zutil.h +253 -0
  860. metadata +931 -0
@@ -0,0 +1,1595 @@
1
+ /* $Id: tif_fax3.c,v 1.11 2015/02/19 22:39:58 drolon Exp $ */
2
+
3
+ /*
4
+ * Copyright (c) 1990-1997 Sam Leffler
5
+ * Copyright (c) 1991-1997 Silicon Graphics, Inc.
6
+ *
7
+ * Permission to use, copy, modify, distribute, and sell this software and
8
+ * its documentation for any purpose is hereby granted without fee, provided
9
+ * that (i) the above copyright notices and this permission notice appear in
10
+ * all copies of the software and related documentation, and (ii) the names of
11
+ * Sam Leffler and Silicon Graphics may not be used in any advertising or
12
+ * publicity relating to the software without the specific, prior written
13
+ * permission of Sam Leffler and Silicon Graphics.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
16
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
17
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
18
+ *
19
+ * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
20
+ * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
21
+ * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
22
+ * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
23
+ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
24
+ * OF THIS SOFTWARE.
25
+ */
26
+
27
+ #include "tiffiop.h"
28
+ #ifdef CCITT_SUPPORT
29
+ /*
30
+ * TIFF Library.
31
+ *
32
+ * CCITT Group 3 (T.4) and Group 4 (T.6) Compression Support.
33
+ *
34
+ * This file contains support for decoding and encoding TIFF
35
+ * compression algorithms 2, 3, 4, and 32771.
36
+ *
37
+ * Decoder support is derived, with permission, from the code
38
+ * in Frank Cringle's viewfax program;
39
+ * Copyright (C) 1990, 1995 Frank D. Cringle.
40
+ */
41
+ #include "tif_fax3.h"
42
+ #define G3CODES
43
+ #include "t4.h"
44
+ #include <stdio.h>
45
+
46
+ /*
47
+ * Compression+decompression state blocks are
48
+ * derived from this ``base state'' block.
49
+ */
50
+ typedef struct {
51
+ int rw_mode; /* O_RDONLY for decode, else encode */
52
+ int mode; /* operating mode */
53
+ tmsize_t rowbytes; /* bytes in a decoded scanline */
54
+ uint32 rowpixels; /* pixels in a scanline */
55
+
56
+ uint16 cleanfaxdata; /* CleanFaxData tag */
57
+ uint32 badfaxrun; /* BadFaxRun tag */
58
+ uint32 badfaxlines; /* BadFaxLines tag */
59
+ uint32 groupoptions; /* Group 3/4 options tag */
60
+
61
+ TIFFVGetMethod vgetparent; /* super-class method */
62
+ TIFFVSetMethod vsetparent; /* super-class method */
63
+ TIFFPrintMethod printdir; /* super-class method */
64
+ } Fax3BaseState;
65
+ #define Fax3State(tif) ((Fax3BaseState*) (tif)->tif_data)
66
+
67
+ typedef enum { G3_1D, G3_2D } Ttag;
68
+ typedef struct {
69
+ Fax3BaseState b;
70
+
71
+ /* Decoder state info */
72
+ const unsigned char* bitmap; /* bit reversal table */
73
+ uint32 data; /* current i/o byte/word */
74
+ int bit; /* current i/o bit in byte */
75
+ int EOLcnt; /* count of EOL codes recognized */
76
+ TIFFFaxFillFunc fill; /* fill routine */
77
+ uint32* runs; /* b&w runs for current/previous row */
78
+ uint32* refruns; /* runs for reference line */
79
+ uint32* curruns; /* runs for current line */
80
+
81
+ /* Encoder state info */
82
+ Ttag tag; /* encoding state */
83
+ unsigned char* refline; /* reference line for 2d decoding */
84
+ int k; /* #rows left that can be 2d encoded */
85
+ int maxk; /* max #rows that can be 2d encoded */
86
+
87
+ int line;
88
+ } Fax3CodecState;
89
+ #define DecoderState(tif) ((Fax3CodecState*) Fax3State(tif))
90
+ #define EncoderState(tif) ((Fax3CodecState*) Fax3State(tif))
91
+
92
+ #define is2DEncoding(sp) (sp->b.groupoptions & GROUP3OPT_2DENCODING)
93
+ #define isAligned(p,t) ((((size_t)(p)) & (sizeof (t)-1)) == 0)
94
+
95
+ /*
96
+ * Group 3 and Group 4 Decoding.
97
+ */
98
+
99
+ /*
100
+ * These macros glue the TIFF library state to
101
+ * the state expected by Frank's decoder.
102
+ */
103
+ #define DECLARE_STATE(tif, sp, mod) \
104
+ static const char module[] = mod; \
105
+ Fax3CodecState* sp = DecoderState(tif); \
106
+ int a0; /* reference element */ \
107
+ int lastx = sp->b.rowpixels; /* last element in row */ \
108
+ uint32 BitAcc; /* bit accumulator */ \
109
+ int BitsAvail; /* # valid bits in BitAcc */ \
110
+ int RunLength; /* length of current run */ \
111
+ unsigned char* cp; /* next byte of input data */ \
112
+ unsigned char* ep; /* end of input data */ \
113
+ uint32* pa; /* place to stuff next run */ \
114
+ uint32* thisrun; /* current row's run array */ \
115
+ int EOLcnt; /* # EOL codes recognized */ \
116
+ const unsigned char* bitmap = sp->bitmap; /* input data bit reverser */ \
117
+ const TIFFFaxTabEnt* TabEnt
118
+ #define DECLARE_STATE_2D(tif, sp, mod) \
119
+ DECLARE_STATE(tif, sp, mod); \
120
+ int b1; /* next change on prev line */ \
121
+ uint32* pb /* next run in reference line */\
122
+ /*
123
+ * Load any state that may be changed during decoding.
124
+ */
125
+ #define CACHE_STATE(tif, sp) do { \
126
+ BitAcc = sp->data; \
127
+ BitsAvail = sp->bit; \
128
+ EOLcnt = sp->EOLcnt; \
129
+ cp = (unsigned char*) tif->tif_rawcp; \
130
+ ep = cp + tif->tif_rawcc; \
131
+ } while (0)
132
+ /*
133
+ * Save state possibly changed during decoding.
134
+ */
135
+ #define UNCACHE_STATE(tif, sp) do { \
136
+ sp->bit = BitsAvail; \
137
+ sp->data = BitAcc; \
138
+ sp->EOLcnt = EOLcnt; \
139
+ tif->tif_rawcc -= (tmsize_t)((uint8*) cp - tif->tif_rawcp); \
140
+ tif->tif_rawcp = (uint8*) cp; \
141
+ } while (0)
142
+
143
+ /*
144
+ * Setup state for decoding a strip.
145
+ */
146
+ static int
147
+ Fax3PreDecode(TIFF* tif, uint16 s)
148
+ {
149
+ Fax3CodecState* sp = DecoderState(tif);
150
+
151
+ (void) s;
152
+ assert(sp != NULL);
153
+ sp->bit = 0; /* force initial read */
154
+ sp->data = 0;
155
+ sp->EOLcnt = 0; /* force initial scan for EOL */
156
+ /*
157
+ * Decoder assumes lsb-to-msb bit order. Note that we select
158
+ * this here rather than in Fax3SetupState so that viewers can
159
+ * hold the image open, fiddle with the FillOrder tag value,
160
+ * and then re-decode the image. Otherwise they'd need to close
161
+ * and open the image to get the state reset.
162
+ */
163
+ sp->bitmap =
164
+ TIFFGetBitRevTable(tif->tif_dir.td_fillorder != FILLORDER_LSB2MSB);
165
+ if (sp->refruns) { /* init reference line to white */
166
+ sp->refruns[0] = (uint32) sp->b.rowpixels;
167
+ sp->refruns[1] = 0;
168
+ }
169
+ sp->line = 0;
170
+ return (1);
171
+ }
172
+
173
+ /*
174
+ * Routine for handling various errors/conditions.
175
+ * Note how they are "glued into the decoder" by
176
+ * overriding the definitions used by the decoder.
177
+ */
178
+
179
+ static void
180
+ Fax3Unexpected(const char* module, TIFF* tif, uint32 line, uint32 a0)
181
+ {
182
+ TIFFErrorExt(tif->tif_clientdata, module, "Bad code word at line %u of %s %u (x %u)",
183
+ line, isTiled(tif) ? "tile" : "strip",
184
+ (isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip),
185
+ a0);
186
+ }
187
+ #define unexpected(table, a0) Fax3Unexpected(module, tif, sp->line, a0)
188
+
189
+ static void
190
+ Fax3Extension(const char* module, TIFF* tif, uint32 line, uint32 a0)
191
+ {
192
+ TIFFErrorExt(tif->tif_clientdata, module,
193
+ "Uncompressed data (not supported) at line %u of %s %u (x %u)",
194
+ line, isTiled(tif) ? "tile" : "strip",
195
+ (isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip),
196
+ a0);
197
+ }
198
+ #define extension(a0) Fax3Extension(module, tif, sp->line, a0)
199
+
200
+ static void
201
+ Fax3BadLength(const char* module, TIFF* tif, uint32 line, uint32 a0, uint32 lastx)
202
+ {
203
+ TIFFWarningExt(tif->tif_clientdata, module, "%s at line %u of %s %u (got %u, expected %u)",
204
+ a0 < lastx ? "Premature EOL" : "Line length mismatch",
205
+ line, isTiled(tif) ? "tile" : "strip",
206
+ (isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip),
207
+ a0, lastx);
208
+ }
209
+ #define badlength(a0,lastx) Fax3BadLength(module, tif, sp->line, a0, lastx)
210
+
211
+ static void
212
+ Fax3PrematureEOF(const char* module, TIFF* tif, uint32 line, uint32 a0)
213
+ {
214
+ TIFFWarningExt(tif->tif_clientdata, module, "Premature EOF at line %u of %s %u (x %u)",
215
+ line, isTiled(tif) ? "tile" : "strip",
216
+ (isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip),
217
+ a0);
218
+ }
219
+ #define prematureEOF(a0) Fax3PrematureEOF(module, tif, sp->line, a0)
220
+
221
+ #define Nop
222
+
223
+ /*
224
+ * Decode the requested amount of G3 1D-encoded data.
225
+ */
226
+ static int
227
+ Fax3Decode1D(TIFF* tif, uint8* buf, tmsize_t occ, uint16 s)
228
+ {
229
+ DECLARE_STATE(tif, sp, "Fax3Decode1D");
230
+ (void) s;
231
+ if (occ % sp->b.rowbytes)
232
+ {
233
+ TIFFErrorExt(tif->tif_clientdata, module, "Fractional scanlines cannot be read");
234
+ return (-1);
235
+ }
236
+ CACHE_STATE(tif, sp);
237
+ thisrun = sp->curruns;
238
+ while (occ > 0) {
239
+ a0 = 0;
240
+ RunLength = 0;
241
+ pa = thisrun;
242
+ #ifdef FAX3_DEBUG
243
+ printf("\nBitAcc=%08X, BitsAvail = %d\n", BitAcc, BitsAvail);
244
+ printf("-------------------- %d\n", tif->tif_row);
245
+ fflush(stdout);
246
+ #endif
247
+ SYNC_EOL(EOF1D);
248
+ EXPAND1D(EOF1Da);
249
+ (*sp->fill)(buf, thisrun, pa, lastx);
250
+ buf += sp->b.rowbytes;
251
+ occ -= sp->b.rowbytes;
252
+ sp->line++;
253
+ continue;
254
+ EOF1D: /* premature EOF */
255
+ CLEANUP_RUNS();
256
+ EOF1Da: /* premature EOF */
257
+ (*sp->fill)(buf, thisrun, pa, lastx);
258
+ UNCACHE_STATE(tif, sp);
259
+ return (-1);
260
+ }
261
+ UNCACHE_STATE(tif, sp);
262
+ return (1);
263
+ }
264
+
265
+ #define SWAP(t,a,b) { t x; x = (a); (a) = (b); (b) = x; }
266
+ /*
267
+ * Decode the requested amount of G3 2D-encoded data.
268
+ */
269
+ static int
270
+ Fax3Decode2D(TIFF* tif, uint8* buf, tmsize_t occ, uint16 s)
271
+ {
272
+ DECLARE_STATE_2D(tif, sp, "Fax3Decode2D");
273
+ int is1D; /* current line is 1d/2d-encoded */
274
+ (void) s;
275
+ if (occ % sp->b.rowbytes)
276
+ {
277
+ TIFFErrorExt(tif->tif_clientdata, module, "Fractional scanlines cannot be read");
278
+ return (-1);
279
+ }
280
+ CACHE_STATE(tif, sp);
281
+ while (occ > 0) {
282
+ a0 = 0;
283
+ RunLength = 0;
284
+ pa = thisrun = sp->curruns;
285
+ #ifdef FAX3_DEBUG
286
+ printf("\nBitAcc=%08X, BitsAvail = %d EOLcnt = %d",
287
+ BitAcc, BitsAvail, EOLcnt);
288
+ #endif
289
+ SYNC_EOL(EOF2D);
290
+ NeedBits8(1, EOF2D);
291
+ is1D = GetBits(1); /* 1D/2D-encoding tag bit */
292
+ ClrBits(1);
293
+ #ifdef FAX3_DEBUG
294
+ printf(" %s\n-------------------- %d\n",
295
+ is1D ? "1D" : "2D", tif->tif_row);
296
+ fflush(stdout);
297
+ #endif
298
+ pb = sp->refruns;
299
+ b1 = *pb++;
300
+ if (is1D)
301
+ EXPAND1D(EOF2Da);
302
+ else
303
+ EXPAND2D(EOF2Da);
304
+ (*sp->fill)(buf, thisrun, pa, lastx);
305
+ SETVALUE(0); /* imaginary change for reference */
306
+ SWAP(uint32*, sp->curruns, sp->refruns);
307
+ buf += sp->b.rowbytes;
308
+ occ -= sp->b.rowbytes;
309
+ sp->line++;
310
+ continue;
311
+ EOF2D: /* premature EOF */
312
+ CLEANUP_RUNS();
313
+ EOF2Da: /* premature EOF */
314
+ (*sp->fill)(buf, thisrun, pa, lastx);
315
+ UNCACHE_STATE(tif, sp);
316
+ return (-1);
317
+ }
318
+ UNCACHE_STATE(tif, sp);
319
+ return (1);
320
+ }
321
+ #undef SWAP
322
+
323
+ /*
324
+ * The ZERO & FILL macros must handle spans < 2*sizeof(long) bytes.
325
+ * For machines with 64-bit longs this is <16 bytes; otherwise
326
+ * this is <8 bytes. We optimize the code here to reflect the
327
+ * machine characteristics.
328
+ */
329
+ #if SIZEOF_UNSIGNED_LONG == 8
330
+ # define FILL(n, cp) \
331
+ switch (n) { \
332
+ case 15:(cp)[14] = 0xff; case 14:(cp)[13] = 0xff; case 13: (cp)[12] = 0xff;\
333
+ case 12:(cp)[11] = 0xff; case 11:(cp)[10] = 0xff; case 10: (cp)[9] = 0xff;\
334
+ case 9: (cp)[8] = 0xff; case 8: (cp)[7] = 0xff; case 7: (cp)[6] = 0xff;\
335
+ case 6: (cp)[5] = 0xff; case 5: (cp)[4] = 0xff; case 4: (cp)[3] = 0xff;\
336
+ case 3: (cp)[2] = 0xff; case 2: (cp)[1] = 0xff; \
337
+ case 1: (cp)[0] = 0xff; (cp) += (n); case 0: ; \
338
+ }
339
+ # define ZERO(n, cp) \
340
+ switch (n) { \
341
+ case 15:(cp)[14] = 0; case 14:(cp)[13] = 0; case 13: (cp)[12] = 0; \
342
+ case 12:(cp)[11] = 0; case 11:(cp)[10] = 0; case 10: (cp)[9] = 0; \
343
+ case 9: (cp)[8] = 0; case 8: (cp)[7] = 0; case 7: (cp)[6] = 0; \
344
+ case 6: (cp)[5] = 0; case 5: (cp)[4] = 0; case 4: (cp)[3] = 0; \
345
+ case 3: (cp)[2] = 0; case 2: (cp)[1] = 0; \
346
+ case 1: (cp)[0] = 0; (cp) += (n); case 0: ; \
347
+ }
348
+ #else
349
+ # define FILL(n, cp) \
350
+ switch (n) { \
351
+ case 7: (cp)[6] = 0xff; case 6: (cp)[5] = 0xff; case 5: (cp)[4] = 0xff; \
352
+ case 4: (cp)[3] = 0xff; case 3: (cp)[2] = 0xff; case 2: (cp)[1] = 0xff; \
353
+ case 1: (cp)[0] = 0xff; (cp) += (n); case 0: ; \
354
+ }
355
+ # define ZERO(n, cp) \
356
+ switch (n) { \
357
+ case 7: (cp)[6] = 0; case 6: (cp)[5] = 0; case 5: (cp)[4] = 0; \
358
+ case 4: (cp)[3] = 0; case 3: (cp)[2] = 0; case 2: (cp)[1] = 0; \
359
+ case 1: (cp)[0] = 0; (cp) += (n); case 0: ; \
360
+ }
361
+ #endif
362
+
363
+ /*
364
+ * Bit-fill a row according to the white/black
365
+ * runs generated during G3/G4 decoding.
366
+ */
367
+ void
368
+ _TIFFFax3fillruns(unsigned char* buf, uint32* runs, uint32* erun, uint32 lastx)
369
+ {
370
+ static const unsigned char _fillmasks[] =
371
+ { 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff };
372
+ unsigned char* cp;
373
+ uint32 x, bx, run;
374
+ int32 n, nw;
375
+ long* lp;
376
+
377
+ if ((erun-runs)&1)
378
+ *erun++ = 0;
379
+ x = 0;
380
+ for (; runs < erun; runs += 2) {
381
+ run = runs[0];
382
+ if (x+run > lastx || run > lastx )
383
+ run = runs[0] = (uint32) (lastx - x);
384
+ if (run) {
385
+ cp = buf + (x>>3);
386
+ bx = x&7;
387
+ if (run > 8-bx) {
388
+ if (bx) { /* align to byte boundary */
389
+ *cp++ &= 0xff << (8-bx);
390
+ run -= 8-bx;
391
+ }
392
+ if( (n = run >> 3) != 0 ) { /* multiple bytes to fill */
393
+ if ((n/sizeof (long)) > 1) {
394
+ /*
395
+ * Align to longword boundary and fill.
396
+ */
397
+ for (; n && !isAligned(cp, long); n--)
398
+ *cp++ = 0x00;
399
+ lp = (long*) cp;
400
+ nw = (int32)(n / sizeof (long));
401
+ n -= nw * sizeof (long);
402
+ do {
403
+ *lp++ = 0L;
404
+ } while (--nw);
405
+ cp = (unsigned char*) lp;
406
+ }
407
+ ZERO(n, cp);
408
+ run &= 7;
409
+ }
410
+ if (run)
411
+ cp[0] &= 0xff >> run;
412
+ } else
413
+ cp[0] &= ~(_fillmasks[run]>>bx);
414
+ x += runs[0];
415
+ }
416
+ run = runs[1];
417
+ if (x+run > lastx || run > lastx )
418
+ run = runs[1] = lastx - x;
419
+ if (run) {
420
+ cp = buf + (x>>3);
421
+ bx = x&7;
422
+ if (run > 8-bx) {
423
+ if (bx) { /* align to byte boundary */
424
+ *cp++ |= 0xff >> bx;
425
+ run -= 8-bx;
426
+ }
427
+ if( (n = run>>3) != 0 ) { /* multiple bytes to fill */
428
+ if ((n/sizeof (long)) > 1) {
429
+ /*
430
+ * Align to longword boundary and fill.
431
+ */
432
+ for (; n && !isAligned(cp, long); n--)
433
+ *cp++ = 0xff;
434
+ lp = (long*) cp;
435
+ nw = (int32)(n / sizeof (long));
436
+ n -= nw * sizeof (long);
437
+ do {
438
+ *lp++ = -1L;
439
+ } while (--nw);
440
+ cp = (unsigned char*) lp;
441
+ }
442
+ FILL(n, cp);
443
+ run &= 7;
444
+ }
445
+ if (run)
446
+ cp[0] |= 0xff00 >> run;
447
+ } else
448
+ cp[0] |= _fillmasks[run]>>bx;
449
+ x += runs[1];
450
+ }
451
+ }
452
+ assert(x == lastx);
453
+ }
454
+ #undef ZERO
455
+ #undef FILL
456
+
457
+ static int
458
+ Fax3FixupTags(TIFF* tif)
459
+ {
460
+ (void) tif;
461
+ return (1);
462
+ }
463
+
464
+ /*
465
+ * Setup G3/G4-related compression/decompression state
466
+ * before data is processed. This routine is called once
467
+ * per image -- it sets up different state based on whether
468
+ * or not decoding or encoding is being done and whether
469
+ * 1D- or 2D-encoded data is involved.
470
+ */
471
+ static int
472
+ Fax3SetupState(TIFF* tif)
473
+ {
474
+ static const char module[] = "Fax3SetupState";
475
+ TIFFDirectory* td = &tif->tif_dir;
476
+ Fax3BaseState* sp = Fax3State(tif);
477
+ int needsRefLine;
478
+ Fax3CodecState* dsp = (Fax3CodecState*) Fax3State(tif);
479
+ tmsize_t rowbytes;
480
+ uint32 rowpixels, nruns;
481
+
482
+ if (td->td_bitspersample != 1) {
483
+ TIFFErrorExt(tif->tif_clientdata, module,
484
+ "Bits/sample must be 1 for Group 3/4 encoding/decoding");
485
+ return (0);
486
+ }
487
+ /*
488
+ * Calculate the scanline/tile widths.
489
+ */
490
+ if (isTiled(tif)) {
491
+ rowbytes = TIFFTileRowSize(tif);
492
+ rowpixels = td->td_tilewidth;
493
+ } else {
494
+ rowbytes = TIFFScanlineSize(tif);
495
+ rowpixels = td->td_imagewidth;
496
+ }
497
+ sp->rowbytes = rowbytes;
498
+ sp->rowpixels = rowpixels;
499
+ /*
500
+ * Allocate any additional space required for decoding/encoding.
501
+ */
502
+ needsRefLine = (
503
+ (sp->groupoptions & GROUP3OPT_2DENCODING) ||
504
+ td->td_compression == COMPRESSION_CCITTFAX4
505
+ );
506
+
507
+ /*
508
+ Assure that allocation computations do not overflow.
509
+
510
+ TIFFroundup and TIFFSafeMultiply return zero on integer overflow
511
+ */
512
+ dsp->runs=(uint32*) NULL;
513
+ nruns = TIFFroundup_32(rowpixels,32);
514
+ if (needsRefLine) {
515
+ nruns = TIFFSafeMultiply(uint32,nruns,2);
516
+ }
517
+ if ((nruns == 0) || (TIFFSafeMultiply(uint32,nruns,2) == 0)) {
518
+ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
519
+ "Row pixels integer overflow (rowpixels %u)",
520
+ rowpixels);
521
+ return (0);
522
+ }
523
+ dsp->runs = (uint32*) _TIFFCheckMalloc(tif,
524
+ TIFFSafeMultiply(uint32,nruns,2),
525
+ sizeof (uint32),
526
+ "for Group 3/4 run arrays");
527
+ if (dsp->runs == NULL)
528
+ return (0);
529
+ memset( dsp->runs, 0, TIFFSafeMultiply(uint32,nruns,2)*sizeof(uint32));
530
+ dsp->curruns = dsp->runs;
531
+ if (needsRefLine)
532
+ dsp->refruns = dsp->runs + nruns;
533
+ else
534
+ dsp->refruns = NULL;
535
+ if (td->td_compression == COMPRESSION_CCITTFAX3
536
+ && is2DEncoding(dsp)) { /* NB: default is 1D routine */
537
+ tif->tif_decoderow = Fax3Decode2D;
538
+ tif->tif_decodestrip = Fax3Decode2D;
539
+ tif->tif_decodetile = Fax3Decode2D;
540
+ }
541
+
542
+ if (needsRefLine) { /* 2d encoding */
543
+ Fax3CodecState* esp = EncoderState(tif);
544
+ /*
545
+ * 2d encoding requires a scanline
546
+ * buffer for the ``reference line''; the
547
+ * scanline against which delta encoding
548
+ * is referenced. The reference line must
549
+ * be initialized to be ``white'' (done elsewhere).
550
+ */
551
+ esp->refline = (unsigned char*) _TIFFmalloc(rowbytes);
552
+ if (esp->refline == NULL) {
553
+ TIFFErrorExt(tif->tif_clientdata, module,
554
+ "No space for Group 3/4 reference line");
555
+ return (0);
556
+ }
557
+ } else /* 1d encoding */
558
+ EncoderState(tif)->refline = NULL;
559
+
560
+ return (1);
561
+ }
562
+
563
+ /*
564
+ * CCITT Group 3 FAX Encoding.
565
+ */
566
+
567
+ #define Fax3FlushBits(tif, sp) { \
568
+ if ((tif)->tif_rawcc >= (tif)->tif_rawdatasize) \
569
+ (void) TIFFFlushData1(tif); \
570
+ *(tif)->tif_rawcp++ = (uint8) (sp)->data; \
571
+ (tif)->tif_rawcc++; \
572
+ (sp)->data = 0, (sp)->bit = 8; \
573
+ }
574
+ #define _FlushBits(tif) { \
575
+ if ((tif)->tif_rawcc >= (tif)->tif_rawdatasize) \
576
+ (void) TIFFFlushData1(tif); \
577
+ *(tif)->tif_rawcp++ = (uint8) data; \
578
+ (tif)->tif_rawcc++; \
579
+ data = 0, bit = 8; \
580
+ }
581
+ static const int _msbmask[9] =
582
+ { 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff };
583
+ #define _PutBits(tif, bits, length) { \
584
+ while (length > bit) { \
585
+ data |= bits >> (length - bit); \
586
+ length -= bit; \
587
+ _FlushBits(tif); \
588
+ } \
589
+ assert( length < 9 ); \
590
+ data |= (bits & _msbmask[length]) << (bit - length); \
591
+ bit -= length; \
592
+ if (bit == 0) \
593
+ _FlushBits(tif); \
594
+ }
595
+
596
+ /*
597
+ * Write a variable-length bit-value to
598
+ * the output stream. Values are
599
+ * assumed to be at most 16 bits.
600
+ */
601
+ static void
602
+ Fax3PutBits(TIFF* tif, unsigned int bits, unsigned int length)
603
+ {
604
+ Fax3CodecState* sp = EncoderState(tif);
605
+ unsigned int bit = sp->bit;
606
+ int data = sp->data;
607
+
608
+ _PutBits(tif, bits, length);
609
+
610
+ sp->data = data;
611
+ sp->bit = bit;
612
+ }
613
+
614
+ /*
615
+ * Write a code to the output stream.
616
+ */
617
+ #define putcode(tif, te) Fax3PutBits(tif, (te)->code, (te)->length)
618
+
619
+ #ifdef FAX3_DEBUG
620
+ #define DEBUG_COLOR(w) (tab == TIFFFaxWhiteCodes ? w "W" : w "B")
621
+ #define DEBUG_PRINT(what,len) { \
622
+ int t; \
623
+ printf("%08X/%-2d: %s%5d\t", data, bit, DEBUG_COLOR(what), len); \
624
+ for (t = length-1; t >= 0; t--) \
625
+ putchar(code & (1<<t) ? '1' : '0'); \
626
+ putchar('\n'); \
627
+ }
628
+ #endif
629
+
630
+ /*
631
+ * Write the sequence of codes that describes
632
+ * the specified span of zero's or one's. The
633
+ * appropriate table that holds the make-up and
634
+ * terminating codes is supplied.
635
+ */
636
+ static void
637
+ putspan(TIFF* tif, int32 span, const tableentry* tab)
638
+ {
639
+ Fax3CodecState* sp = EncoderState(tif);
640
+ unsigned int bit = sp->bit;
641
+ int data = sp->data;
642
+ unsigned int code, length;
643
+
644
+ while (span >= 2624) {
645
+ const tableentry* te = &tab[63 + (2560>>6)];
646
+ code = te->code, length = te->length;
647
+ #ifdef FAX3_DEBUG
648
+ DEBUG_PRINT("MakeUp", te->runlen);
649
+ #endif
650
+ _PutBits(tif, code, length);
651
+ span -= te->runlen;
652
+ }
653
+ if (span >= 64) {
654
+ const tableentry* te = &tab[63 + (span>>6)];
655
+ assert(te->runlen == 64*(span>>6));
656
+ code = te->code, length = te->length;
657
+ #ifdef FAX3_DEBUG
658
+ DEBUG_PRINT("MakeUp", te->runlen);
659
+ #endif
660
+ _PutBits(tif, code, length);
661
+ span -= te->runlen;
662
+ }
663
+ code = tab[span].code, length = tab[span].length;
664
+ #ifdef FAX3_DEBUG
665
+ DEBUG_PRINT(" Term", tab[span].runlen);
666
+ #endif
667
+ _PutBits(tif, code, length);
668
+
669
+ sp->data = data;
670
+ sp->bit = bit;
671
+ }
672
+
673
+ /*
674
+ * Write an EOL code to the output stream. The zero-fill
675
+ * logic for byte-aligning encoded scanlines is handled
676
+ * here. We also handle writing the tag bit for the next
677
+ * scanline when doing 2d encoding.
678
+ */
679
+ static void
680
+ Fax3PutEOL(TIFF* tif)
681
+ {
682
+ Fax3CodecState* sp = EncoderState(tif);
683
+ unsigned int bit = sp->bit;
684
+ int data = sp->data;
685
+ unsigned int code, length, tparm;
686
+
687
+ if (sp->b.groupoptions & GROUP3OPT_FILLBITS) {
688
+ /*
689
+ * Force bit alignment so EOL will terminate on
690
+ * a byte boundary. That is, force the bit alignment
691
+ * to 16-12 = 4 before putting out the EOL code.
692
+ */
693
+ int align = 8 - 4;
694
+ if (align != sp->bit) {
695
+ if (align > sp->bit)
696
+ align = sp->bit + (8 - align);
697
+ else
698
+ align = sp->bit - align;
699
+ code = 0;
700
+ tparm=align;
701
+ _PutBits(tif, 0, tparm);
702
+ }
703
+ }
704
+ code = EOL, length = 12;
705
+ if (is2DEncoding(sp))
706
+ code = (code<<1) | (sp->tag == G3_1D), length++;
707
+ _PutBits(tif, code, length);
708
+
709
+ sp->data = data;
710
+ sp->bit = bit;
711
+ }
712
+
713
+ /*
714
+ * Reset encoding state at the start of a strip.
715
+ */
716
+ static int
717
+ Fax3PreEncode(TIFF* tif, uint16 s)
718
+ {
719
+ Fax3CodecState* sp = EncoderState(tif);
720
+
721
+ (void) s;
722
+ assert(sp != NULL);
723
+ sp->bit = 8;
724
+ sp->data = 0;
725
+ sp->tag = G3_1D;
726
+ /*
727
+ * This is necessary for Group 4; otherwise it isn't
728
+ * needed because the first scanline of each strip ends
729
+ * up being copied into the refline.
730
+ */
731
+ if (sp->refline)
732
+ _TIFFmemset(sp->refline, 0x00, sp->b.rowbytes);
733
+ if (is2DEncoding(sp)) {
734
+ float res = tif->tif_dir.td_yresolution;
735
+ /*
736
+ * The CCITT spec says that when doing 2d encoding, you
737
+ * should only do it on K consecutive scanlines, where K
738
+ * depends on the resolution of the image being encoded
739
+ * (2 for <= 200 lpi, 4 for > 200 lpi). Since the directory
740
+ * code initializes td_yresolution to 0, this code will
741
+ * select a K of 2 unless the YResolution tag is set
742
+ * appropriately. (Note also that we fudge a little here
743
+ * and use 150 lpi to avoid problems with units conversion.)
744
+ */
745
+ if (tif->tif_dir.td_resolutionunit == RESUNIT_CENTIMETER)
746
+ res *= 2.54f; /* convert to inches */
747
+ sp->maxk = (res > 150 ? 4 : 2);
748
+ sp->k = sp->maxk-1;
749
+ } else
750
+ sp->k = sp->maxk = 0;
751
+ sp->line = 0;
752
+ return (1);
753
+ }
754
+
755
+ static const unsigned char zeroruns[256] = {
756
+ 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, /* 0x00 - 0x0f */
757
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0x10 - 0x1f */
758
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0x20 - 0x2f */
759
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0x30 - 0x3f */
760
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x40 - 0x4f */
761
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x50 - 0x5f */
762
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x60 - 0x6f */
763
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x70 - 0x7f */
764
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 - 0x8f */
765
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 - 0x9f */
766
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xa0 - 0xaf */
767
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xb0 - 0xbf */
768
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xc0 - 0xcf */
769
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xd0 - 0xdf */
770
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xe0 - 0xef */
771
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xf0 - 0xff */
772
+ };
773
+ static const unsigned char oneruns[256] = {
774
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 - 0x0f */
775
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 - 0x1f */
776
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 - 0x2f */
777
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 - 0x3f */
778
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 - 0x4f */
779
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 - 0x5f */
780
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 - 0x6f */
781
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70 - 0x7f */
782
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x80 - 0x8f */
783
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x90 - 0x9f */
784
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xa0 - 0xaf */
785
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xb0 - 0xbf */
786
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0xc0 - 0xcf */
787
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0xd0 - 0xdf */
788
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0xe0 - 0xef */
789
+ 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, /* 0xf0 - 0xff */
790
+ };
791
+
792
+ /*
793
+ * On certain systems it pays to inline
794
+ * the routines that find pixel spans.
795
+ */
796
+ #ifdef VAXC
797
+ static int32 find0span(unsigned char*, int32, int32);
798
+ static int32 find1span(unsigned char*, int32, int32);
799
+ #pragma inline(find0span,find1span)
800
+ #endif
801
+
802
+ /*
803
+ * Find a span of ones or zeros using the supplied
804
+ * table. The ``base'' of the bit string is supplied
805
+ * along with the start+end bit indices.
806
+ */
807
+ inline static int32
808
+ find0span(unsigned char* bp, int32 bs, int32 be)
809
+ {
810
+ int32 bits = be - bs;
811
+ int32 n, span;
812
+
813
+ bp += bs>>3;
814
+ /*
815
+ * Check partial byte on lhs.
816
+ */
817
+ if (bits > 0 && (n = (bs & 7))) {
818
+ span = zeroruns[(*bp << n) & 0xff];
819
+ if (span > 8-n) /* table value too generous */
820
+ span = 8-n;
821
+ if (span > bits) /* constrain span to bit range */
822
+ span = bits;
823
+ if (n+span < 8) /* doesn't extend to edge of byte */
824
+ return (span);
825
+ bits -= span;
826
+ bp++;
827
+ } else
828
+ span = 0;
829
+ if (bits >= (int32)(2 * 8 * sizeof(long))) {
830
+ long* lp;
831
+ /*
832
+ * Align to longword boundary and check longwords.
833
+ */
834
+ while (!isAligned(bp, long)) {
835
+ if (*bp != 0x00)
836
+ return (span + zeroruns[*bp]);
837
+ span += 8, bits -= 8;
838
+ bp++;
839
+ }
840
+ lp = (long*) bp;
841
+ while ((bits >= (int32)(8 * sizeof(long))) && (0 == *lp)) {
842
+ span += 8*sizeof (long), bits -= 8*sizeof (long);
843
+ lp++;
844
+ }
845
+ bp = (unsigned char*) lp;
846
+ }
847
+ /*
848
+ * Scan full bytes for all 0's.
849
+ */
850
+ while (bits >= 8) {
851
+ if (*bp != 0x00) /* end of run */
852
+ return (span + zeroruns[*bp]);
853
+ span += 8, bits -= 8;
854
+ bp++;
855
+ }
856
+ /*
857
+ * Check partial byte on rhs.
858
+ */
859
+ if (bits > 0) {
860
+ n = zeroruns[*bp];
861
+ span += (n > bits ? bits : n);
862
+ }
863
+ return (span);
864
+ }
865
+
866
+ inline static int32
867
+ find1span(unsigned char* bp, int32 bs, int32 be)
868
+ {
869
+ int32 bits = be - bs;
870
+ int32 n, span;
871
+
872
+ bp += bs>>3;
873
+ /*
874
+ * Check partial byte on lhs.
875
+ */
876
+ if (bits > 0 && (n = (bs & 7))) {
877
+ span = oneruns[(*bp << n) & 0xff];
878
+ if (span > 8-n) /* table value too generous */
879
+ span = 8-n;
880
+ if (span > bits) /* constrain span to bit range */
881
+ span = bits;
882
+ if (n+span < 8) /* doesn't extend to edge of byte */
883
+ return (span);
884
+ bits -= span;
885
+ bp++;
886
+ } else
887
+ span = 0;
888
+ if (bits >= (int32)(2 * 8 * sizeof(long))) {
889
+ long* lp;
890
+ /*
891
+ * Align to longword boundary and check longwords.
892
+ */
893
+ while (!isAligned(bp, long)) {
894
+ if (*bp != 0xff)
895
+ return (span + oneruns[*bp]);
896
+ span += 8, bits -= 8;
897
+ bp++;
898
+ }
899
+ lp = (long*) bp;
900
+ while ((bits >= (int32)(8 * sizeof(long))) && (~0 == *lp)) {
901
+ span += 8*sizeof (long), bits -= 8*sizeof (long);
902
+ lp++;
903
+ }
904
+ bp = (unsigned char*) lp;
905
+ }
906
+ /*
907
+ * Scan full bytes for all 1's.
908
+ */
909
+ while (bits >= 8) {
910
+ if (*bp != 0xff) /* end of run */
911
+ return (span + oneruns[*bp]);
912
+ span += 8, bits -= 8;
913
+ bp++;
914
+ }
915
+ /*
916
+ * Check partial byte on rhs.
917
+ */
918
+ if (bits > 0) {
919
+ n = oneruns[*bp];
920
+ span += (n > bits ? bits : n);
921
+ }
922
+ return (span);
923
+ }
924
+
925
+ /*
926
+ * Return the offset of the next bit in the range
927
+ * [bs..be] that is different from the specified
928
+ * color. The end, be, is returned if no such bit
929
+ * exists.
930
+ */
931
+ #define finddiff(_cp, _bs, _be, _color) \
932
+ (_bs + (_color ? find1span(_cp,_bs,_be) : find0span(_cp,_bs,_be)))
933
+ /*
934
+ * Like finddiff, but also check the starting bit
935
+ * against the end in case start > end.
936
+ */
937
+ #define finddiff2(_cp, _bs, _be, _color) \
938
+ (_bs < _be ? finddiff(_cp,_bs,_be,_color) : _be)
939
+
940
+ /*
941
+ * 1d-encode a row of pixels. The encoding is
942
+ * a sequence of all-white or all-black spans
943
+ * of pixels encoded with Huffman codes.
944
+ */
945
+ static int
946
+ Fax3Encode1DRow(TIFF* tif, unsigned char* bp, uint32 bits)
947
+ {
948
+ Fax3CodecState* sp = EncoderState(tif);
949
+ int32 span;
950
+ uint32 bs = 0;
951
+
952
+ for (;;) {
953
+ span = find0span(bp, bs, bits); /* white span */
954
+ putspan(tif, span, TIFFFaxWhiteCodes);
955
+ bs += span;
956
+ if (bs >= bits)
957
+ break;
958
+ span = find1span(bp, bs, bits); /* black span */
959
+ putspan(tif, span, TIFFFaxBlackCodes);
960
+ bs += span;
961
+ if (bs >= bits)
962
+ break;
963
+ }
964
+ if (sp->b.mode & (FAXMODE_BYTEALIGN|FAXMODE_WORDALIGN)) {
965
+ if (sp->bit != 8) /* byte-align */
966
+ Fax3FlushBits(tif, sp);
967
+ if ((sp->b.mode&FAXMODE_WORDALIGN) &&
968
+ !isAligned(tif->tif_rawcp, uint16))
969
+ Fax3FlushBits(tif, sp);
970
+ }
971
+ return (1);
972
+ }
973
+
974
+ static const tableentry horizcode =
975
+ { 3, 0x1, 0 }; /* 001 */
976
+ static const tableentry passcode =
977
+ { 4, 0x1, 0 }; /* 0001 */
978
+ static const tableentry vcodes[7] = {
979
+ { 7, 0x03, 0 }, /* 0000 011 */
980
+ { 6, 0x03, 0 }, /* 0000 11 */
981
+ { 3, 0x03, 0 }, /* 011 */
982
+ { 1, 0x1, 0 }, /* 1 */
983
+ { 3, 0x2, 0 }, /* 010 */
984
+ { 6, 0x02, 0 }, /* 0000 10 */
985
+ { 7, 0x02, 0 } /* 0000 010 */
986
+ };
987
+
988
+ /*
989
+ * 2d-encode a row of pixels. Consult the CCITT
990
+ * documentation for the algorithm.
991
+ */
992
+ static int
993
+ Fax3Encode2DRow(TIFF* tif, unsigned char* bp, unsigned char* rp, uint32 bits)
994
+ {
995
+ #define PIXEL(buf,ix) ((((buf)[(ix)>>3]) >> (7-((ix)&7))) & 1)
996
+ uint32 a0 = 0;
997
+ uint32 a1 = (PIXEL(bp, 0) != 0 ? 0 : finddiff(bp, 0, bits, 0));
998
+ uint32 b1 = (PIXEL(rp, 0) != 0 ? 0 : finddiff(rp, 0, bits, 0));
999
+ uint32 a2, b2;
1000
+
1001
+ for (;;) {
1002
+ b2 = finddiff2(rp, b1, bits, PIXEL(rp,b1));
1003
+ if (b2 >= a1) {
1004
+ int32 d = b1 - a1;
1005
+ if (!(-3 <= d && d <= 3)) { /* horizontal mode */
1006
+ a2 = finddiff2(bp, a1, bits, PIXEL(bp,a1));
1007
+ putcode(tif, &horizcode);
1008
+ if (a0+a1 == 0 || PIXEL(bp, a0) == 0) {
1009
+ putspan(tif, a1-a0, TIFFFaxWhiteCodes);
1010
+ putspan(tif, a2-a1, TIFFFaxBlackCodes);
1011
+ } else {
1012
+ putspan(tif, a1-a0, TIFFFaxBlackCodes);
1013
+ putspan(tif, a2-a1, TIFFFaxWhiteCodes);
1014
+ }
1015
+ a0 = a2;
1016
+ } else { /* vertical mode */
1017
+ putcode(tif, &vcodes[d+3]);
1018
+ a0 = a1;
1019
+ }
1020
+ } else { /* pass mode */
1021
+ putcode(tif, &passcode);
1022
+ a0 = b2;
1023
+ }
1024
+ if (a0 >= bits)
1025
+ break;
1026
+ a1 = finddiff(bp, a0, bits, PIXEL(bp,a0));
1027
+ b1 = finddiff(rp, a0, bits, !PIXEL(bp,a0));
1028
+ b1 = finddiff(rp, b1, bits, PIXEL(bp,a0));
1029
+ }
1030
+ return (1);
1031
+ #undef PIXEL
1032
+ }
1033
+
1034
+ /*
1035
+ * Encode a buffer of pixels.
1036
+ */
1037
+ static int
1038
+ Fax3Encode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s)
1039
+ {
1040
+ static const char module[] = "Fax3Encode";
1041
+ Fax3CodecState* sp = EncoderState(tif);
1042
+ (void) s;
1043
+ if (cc % sp->b.rowbytes)
1044
+ {
1045
+ TIFFErrorExt(tif->tif_clientdata, module, "Fractional scanlines cannot be written");
1046
+ return (0);
1047
+ }
1048
+ while (cc > 0) {
1049
+ if ((sp->b.mode & FAXMODE_NOEOL) == 0)
1050
+ Fax3PutEOL(tif);
1051
+ if (is2DEncoding(sp)) {
1052
+ if (sp->tag == G3_1D) {
1053
+ if (!Fax3Encode1DRow(tif, bp, sp->b.rowpixels))
1054
+ return (0);
1055
+ sp->tag = G3_2D;
1056
+ } else {
1057
+ if (!Fax3Encode2DRow(tif, bp, sp->refline,
1058
+ sp->b.rowpixels))
1059
+ return (0);
1060
+ sp->k--;
1061
+ }
1062
+ if (sp->k == 0) {
1063
+ sp->tag = G3_1D;
1064
+ sp->k = sp->maxk-1;
1065
+ } else
1066
+ _TIFFmemcpy(sp->refline, bp, sp->b.rowbytes);
1067
+ } else {
1068
+ if (!Fax3Encode1DRow(tif, bp, sp->b.rowpixels))
1069
+ return (0);
1070
+ }
1071
+ bp += sp->b.rowbytes;
1072
+ cc -= sp->b.rowbytes;
1073
+ }
1074
+ return (1);
1075
+ }
1076
+
1077
+ static int
1078
+ Fax3PostEncode(TIFF* tif)
1079
+ {
1080
+ Fax3CodecState* sp = EncoderState(tif);
1081
+
1082
+ if (sp->bit != 8)
1083
+ Fax3FlushBits(tif, sp);
1084
+ return (1);
1085
+ }
1086
+
1087
+ static void
1088
+ Fax3Close(TIFF* tif)
1089
+ {
1090
+ if ((Fax3State(tif)->mode & FAXMODE_NORTC) == 0) {
1091
+ Fax3CodecState* sp = EncoderState(tif);
1092
+ unsigned int code = EOL;
1093
+ unsigned int length = 12;
1094
+ int i;
1095
+
1096
+ if (is2DEncoding(sp))
1097
+ code = (code<<1) | (sp->tag == G3_1D), length++;
1098
+ for (i = 0; i < 6; i++)
1099
+ Fax3PutBits(tif, code, length);
1100
+ Fax3FlushBits(tif, sp);
1101
+ }
1102
+ }
1103
+
1104
+ static void
1105
+ Fax3Cleanup(TIFF* tif)
1106
+ {
1107
+ Fax3CodecState* sp = DecoderState(tif);
1108
+
1109
+ assert(sp != 0);
1110
+
1111
+ tif->tif_tagmethods.vgetfield = sp->b.vgetparent;
1112
+ tif->tif_tagmethods.vsetfield = sp->b.vsetparent;
1113
+ tif->tif_tagmethods.printdir = sp->b.printdir;
1114
+
1115
+ if (sp->runs)
1116
+ _TIFFfree(sp->runs);
1117
+ if (sp->refline)
1118
+ _TIFFfree(sp->refline);
1119
+
1120
+ _TIFFfree(tif->tif_data);
1121
+ tif->tif_data = NULL;
1122
+
1123
+ _TIFFSetDefaultCompressionState(tif);
1124
+ }
1125
+
1126
+ #define FIELD_BADFAXLINES (FIELD_CODEC+0)
1127
+ #define FIELD_CLEANFAXDATA (FIELD_CODEC+1)
1128
+ #define FIELD_BADFAXRUN (FIELD_CODEC+2)
1129
+
1130
+ #define FIELD_OPTIONS (FIELD_CODEC+7)
1131
+
1132
+ static const TIFFField faxFields[] = {
1133
+ { TIFFTAG_FAXMODE, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE, "FaxMode", NULL },
1134
+ { TIFFTAG_FAXFILLFUNC, 0, 0, TIFF_ANY, 0, TIFF_SETGET_OTHER, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE, "FaxFillFunc", NULL },
1135
+ { TIFFTAG_BADFAXLINES, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UINT32, FIELD_BADFAXLINES, TRUE, FALSE, "BadFaxLines", NULL },
1136
+ { TIFFTAG_CLEANFAXDATA, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UINT16, FIELD_CLEANFAXDATA, TRUE, FALSE, "CleanFaxData", NULL },
1137
+ { TIFFTAG_CONSECUTIVEBADFAXLINES, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UINT32, FIELD_BADFAXRUN, TRUE, FALSE, "ConsecutiveBadFaxLines", NULL }};
1138
+ static const TIFFField fax3Fields[] = {
1139
+ { TIFFTAG_GROUP3OPTIONS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UINT32, FIELD_OPTIONS, FALSE, FALSE, "Group3Options", NULL },
1140
+ };
1141
+ static const TIFFField fax4Fields[] = {
1142
+ { TIFFTAG_GROUP4OPTIONS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UINT32, FIELD_OPTIONS, FALSE, FALSE, "Group4Options", NULL },
1143
+ };
1144
+
1145
+ static int
1146
+ Fax3VSetField(TIFF* tif, uint32 tag, va_list ap)
1147
+ {
1148
+ Fax3BaseState* sp = Fax3State(tif);
1149
+ const TIFFField* fip;
1150
+
1151
+ assert(sp != 0);
1152
+ assert(sp->vsetparent != 0);
1153
+
1154
+ switch (tag) {
1155
+ case TIFFTAG_FAXMODE:
1156
+ sp->mode = (int) va_arg(ap, int);
1157
+ return 1; /* NB: pseudo tag */
1158
+ case TIFFTAG_FAXFILLFUNC:
1159
+ DecoderState(tif)->fill = va_arg(ap, TIFFFaxFillFunc);
1160
+ return 1; /* NB: pseudo tag */
1161
+ case TIFFTAG_GROUP3OPTIONS:
1162
+ /* XXX: avoid reading options if compression mismatches. */
1163
+ if (tif->tif_dir.td_compression == COMPRESSION_CCITTFAX3)
1164
+ sp->groupoptions = (uint32) va_arg(ap, uint32);
1165
+ break;
1166
+ case TIFFTAG_GROUP4OPTIONS:
1167
+ /* XXX: avoid reading options if compression mismatches. */
1168
+ if (tif->tif_dir.td_compression == COMPRESSION_CCITTFAX4)
1169
+ sp->groupoptions = (uint32) va_arg(ap, uint32);
1170
+ break;
1171
+ case TIFFTAG_BADFAXLINES:
1172
+ sp->badfaxlines = (uint32) va_arg(ap, uint32);
1173
+ break;
1174
+ case TIFFTAG_CLEANFAXDATA:
1175
+ sp->cleanfaxdata = (uint16) va_arg(ap, uint16_vap);
1176
+ break;
1177
+ case TIFFTAG_CONSECUTIVEBADFAXLINES:
1178
+ sp->badfaxrun = (uint32) va_arg(ap, uint32);
1179
+ break;
1180
+ default:
1181
+ return (*sp->vsetparent)(tif, tag, ap);
1182
+ }
1183
+
1184
+ if ((fip = TIFFFieldWithTag(tif, tag)))
1185
+ TIFFSetFieldBit(tif, fip->field_bit);
1186
+ else
1187
+ return 0;
1188
+
1189
+ tif->tif_flags |= TIFF_DIRTYDIRECT;
1190
+ return 1;
1191
+ }
1192
+
1193
+ static int
1194
+ Fax3VGetField(TIFF* tif, uint32 tag, va_list ap)
1195
+ {
1196
+ Fax3BaseState* sp = Fax3State(tif);
1197
+
1198
+ assert(sp != 0);
1199
+
1200
+ switch (tag) {
1201
+ case TIFFTAG_FAXMODE:
1202
+ *va_arg(ap, int*) = sp->mode;
1203
+ break;
1204
+ case TIFFTAG_FAXFILLFUNC:
1205
+ *va_arg(ap, TIFFFaxFillFunc*) = DecoderState(tif)->fill;
1206
+ break;
1207
+ case TIFFTAG_GROUP3OPTIONS:
1208
+ case TIFFTAG_GROUP4OPTIONS:
1209
+ *va_arg(ap, uint32*) = sp->groupoptions;
1210
+ break;
1211
+ case TIFFTAG_BADFAXLINES:
1212
+ *va_arg(ap, uint32*) = sp->badfaxlines;
1213
+ break;
1214
+ case TIFFTAG_CLEANFAXDATA:
1215
+ *va_arg(ap, uint16*) = sp->cleanfaxdata;
1216
+ break;
1217
+ case TIFFTAG_CONSECUTIVEBADFAXLINES:
1218
+ *va_arg(ap, uint32*) = sp->badfaxrun;
1219
+ break;
1220
+ default:
1221
+ return (*sp->vgetparent)(tif, tag, ap);
1222
+ }
1223
+ return (1);
1224
+ }
1225
+
1226
+ static void
1227
+ Fax3PrintDir(TIFF* tif, FILE* fd, long flags)
1228
+ {
1229
+ Fax3BaseState* sp = Fax3State(tif);
1230
+
1231
+ assert(sp != 0);
1232
+
1233
+ (void) flags;
1234
+ if (TIFFFieldSet(tif,FIELD_OPTIONS)) {
1235
+ const char* sep = " ";
1236
+ if (tif->tif_dir.td_compression == COMPRESSION_CCITTFAX4) {
1237
+ fprintf(fd, " Group 4 Options:");
1238
+ if (sp->groupoptions & GROUP4OPT_UNCOMPRESSED)
1239
+ fprintf(fd, "%suncompressed data", sep);
1240
+ } else {
1241
+
1242
+ fprintf(fd, " Group 3 Options:");
1243
+ if (sp->groupoptions & GROUP3OPT_2DENCODING)
1244
+ fprintf(fd, "%s2-d encoding", sep), sep = "+";
1245
+ if (sp->groupoptions & GROUP3OPT_FILLBITS)
1246
+ fprintf(fd, "%sEOL padding", sep), sep = "+";
1247
+ if (sp->groupoptions & GROUP3OPT_UNCOMPRESSED)
1248
+ fprintf(fd, "%suncompressed data", sep);
1249
+ }
1250
+ fprintf(fd, " (%lu = 0x%lx)\n",
1251
+ (unsigned long) sp->groupoptions,
1252
+ (unsigned long) sp->groupoptions);
1253
+ }
1254
+ if (TIFFFieldSet(tif,FIELD_CLEANFAXDATA)) {
1255
+ fprintf(fd, " Fax Data:");
1256
+ switch (sp->cleanfaxdata) {
1257
+ case CLEANFAXDATA_CLEAN:
1258
+ fprintf(fd, " clean");
1259
+ break;
1260
+ case CLEANFAXDATA_REGENERATED:
1261
+ fprintf(fd, " receiver regenerated");
1262
+ break;
1263
+ case CLEANFAXDATA_UNCLEAN:
1264
+ fprintf(fd, " uncorrected errors");
1265
+ break;
1266
+ }
1267
+ fprintf(fd, " (%u = 0x%x)\n",
1268
+ sp->cleanfaxdata, sp->cleanfaxdata);
1269
+ }
1270
+ if (TIFFFieldSet(tif,FIELD_BADFAXLINES))
1271
+ fprintf(fd, " Bad Fax Lines: %lu\n",
1272
+ (unsigned long) sp->badfaxlines);
1273
+ if (TIFFFieldSet(tif,FIELD_BADFAXRUN))
1274
+ fprintf(fd, " Consecutive Bad Fax Lines: %lu\n",
1275
+ (unsigned long) sp->badfaxrun);
1276
+ if (sp->printdir)
1277
+ (*sp->printdir)(tif, fd, flags);
1278
+ }
1279
+
1280
+ static int
1281
+ InitCCITTFax3(TIFF* tif)
1282
+ {
1283
+ static const char module[] = "InitCCITTFax3";
1284
+ Fax3BaseState* sp;
1285
+
1286
+ /*
1287
+ * Merge codec-specific tag information.
1288
+ */
1289
+ if (!_TIFFMergeFields(tif, faxFields, TIFFArrayCount(faxFields))) {
1290
+ TIFFErrorExt(tif->tif_clientdata, "InitCCITTFax3",
1291
+ "Merging common CCITT Fax codec-specific tags failed");
1292
+ return 0;
1293
+ }
1294
+
1295
+ /*
1296
+ * Allocate state block so tag methods have storage to record values.
1297
+ */
1298
+ tif->tif_data = (uint8*)
1299
+ _TIFFmalloc(sizeof (Fax3CodecState));
1300
+
1301
+ if (tif->tif_data == NULL) {
1302
+ TIFFErrorExt(tif->tif_clientdata, module,
1303
+ "No space for state block");
1304
+ return (0);
1305
+ }
1306
+
1307
+ sp = Fax3State(tif);
1308
+ sp->rw_mode = tif->tif_mode;
1309
+
1310
+ /*
1311
+ * Override parent get/set field methods.
1312
+ */
1313
+ sp->vgetparent = tif->tif_tagmethods.vgetfield;
1314
+ tif->tif_tagmethods.vgetfield = Fax3VGetField; /* hook for codec tags */
1315
+ sp->vsetparent = tif->tif_tagmethods.vsetfield;
1316
+ tif->tif_tagmethods.vsetfield = Fax3VSetField; /* hook for codec tags */
1317
+ sp->printdir = tif->tif_tagmethods.printdir;
1318
+ tif->tif_tagmethods.printdir = Fax3PrintDir; /* hook for codec tags */
1319
+ sp->groupoptions = 0;
1320
+
1321
+ if (sp->rw_mode == O_RDONLY) /* FIXME: improve for in place update */
1322
+ tif->tif_flags |= TIFF_NOBITREV; /* decoder does bit reversal */
1323
+ DecoderState(tif)->runs = NULL;
1324
+ TIFFSetField(tif, TIFFTAG_FAXFILLFUNC, _TIFFFax3fillruns);
1325
+ EncoderState(tif)->refline = NULL;
1326
+
1327
+ /*
1328
+ * Install codec methods.
1329
+ */
1330
+ tif->tif_fixuptags = Fax3FixupTags;
1331
+ tif->tif_setupdecode = Fax3SetupState;
1332
+ tif->tif_predecode = Fax3PreDecode;
1333
+ tif->tif_decoderow = Fax3Decode1D;
1334
+ tif->tif_decodestrip = Fax3Decode1D;
1335
+ tif->tif_decodetile = Fax3Decode1D;
1336
+ tif->tif_setupencode = Fax3SetupState;
1337
+ tif->tif_preencode = Fax3PreEncode;
1338
+ tif->tif_postencode = Fax3PostEncode;
1339
+ tif->tif_encoderow = Fax3Encode;
1340
+ tif->tif_encodestrip = Fax3Encode;
1341
+ tif->tif_encodetile = Fax3Encode;
1342
+ tif->tif_close = Fax3Close;
1343
+ tif->tif_cleanup = Fax3Cleanup;
1344
+
1345
+ return (1);
1346
+ }
1347
+
1348
+ int
1349
+ TIFFInitCCITTFax3(TIFF* tif, int scheme)
1350
+ {
1351
+ (void) scheme;
1352
+ if (InitCCITTFax3(tif)) {
1353
+ /*
1354
+ * Merge codec-specific tag information.
1355
+ */
1356
+ if (!_TIFFMergeFields(tif, fax3Fields,
1357
+ TIFFArrayCount(fax3Fields))) {
1358
+ TIFFErrorExt(tif->tif_clientdata, "TIFFInitCCITTFax3",
1359
+ "Merging CCITT Fax 3 codec-specific tags failed");
1360
+ return 0;
1361
+ }
1362
+
1363
+ /*
1364
+ * The default format is Class/F-style w/o RTC.
1365
+ */
1366
+ return TIFFSetField(tif, TIFFTAG_FAXMODE, FAXMODE_CLASSF);
1367
+ } else
1368
+ return 01;
1369
+ }
1370
+
1371
+ /*
1372
+ * CCITT Group 4 (T.6) Facsimile-compatible
1373
+ * Compression Scheme Support.
1374
+ */
1375
+
1376
+ #define SWAP(t,a,b) { t x; x = (a); (a) = (b); (b) = x; }
1377
+ /*
1378
+ * Decode the requested amount of G4-encoded data.
1379
+ */
1380
+ static int
1381
+ Fax4Decode(TIFF* tif, uint8* buf, tmsize_t occ, uint16 s)
1382
+ {
1383
+ DECLARE_STATE_2D(tif, sp, "Fax4Decode");
1384
+ (void) s;
1385
+ if (occ % sp->b.rowbytes)
1386
+ {
1387
+ TIFFErrorExt(tif->tif_clientdata, module, "Fractional scanlines cannot be read");
1388
+ return (-1);
1389
+ }
1390
+ CACHE_STATE(tif, sp);
1391
+ while (occ > 0) {
1392
+ a0 = 0;
1393
+ RunLength = 0;
1394
+ pa = thisrun = sp->curruns;
1395
+ pb = sp->refruns;
1396
+ b1 = *pb++;
1397
+ #ifdef FAX3_DEBUG
1398
+ printf("\nBitAcc=%08X, BitsAvail = %d\n", BitAcc, BitsAvail);
1399
+ printf("-------------------- %d\n", tif->tif_row);
1400
+ fflush(stdout);
1401
+ #endif
1402
+ EXPAND2D(EOFG4);
1403
+ if (EOLcnt)
1404
+ goto EOFG4;
1405
+ (*sp->fill)(buf, thisrun, pa, lastx);
1406
+ SETVALUE(0); /* imaginary change for reference */
1407
+ SWAP(uint32*, sp->curruns, sp->refruns);
1408
+ buf += sp->b.rowbytes;
1409
+ occ -= sp->b.rowbytes;
1410
+ sp->line++;
1411
+ continue;
1412
+ EOFG4:
1413
+ NeedBits16( 13, BADG4 );
1414
+ BADG4:
1415
+ #ifdef FAX3_DEBUG
1416
+ if( GetBits(13) != 0x1001 )
1417
+ fputs( "Bad EOFB\n", stderr );
1418
+ #endif
1419
+ ClrBits( 13 );
1420
+ (*sp->fill)(buf, thisrun, pa, lastx);
1421
+ UNCACHE_STATE(tif, sp);
1422
+ return ( sp->line ? 1 : -1); /* don't error on badly-terminated strips */
1423
+ }
1424
+ UNCACHE_STATE(tif, sp);
1425
+ return (1);
1426
+ }
1427
+ #undef SWAP
1428
+
1429
+ /*
1430
+ * Encode the requested amount of data.
1431
+ */
1432
+ static int
1433
+ Fax4Encode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s)
1434
+ {
1435
+ static const char module[] = "Fax4Encode";
1436
+ Fax3CodecState *sp = EncoderState(tif);
1437
+ (void) s;
1438
+ if (cc % sp->b.rowbytes)
1439
+ {
1440
+ TIFFErrorExt(tif->tif_clientdata, module, "Fractional scanlines cannot be written");
1441
+ return (0);
1442
+ }
1443
+ while (cc > 0) {
1444
+ if (!Fax3Encode2DRow(tif, bp, sp->refline, sp->b.rowpixels))
1445
+ return (0);
1446
+ _TIFFmemcpy(sp->refline, bp, sp->b.rowbytes);
1447
+ bp += sp->b.rowbytes;
1448
+ cc -= sp->b.rowbytes;
1449
+ }
1450
+ return (1);
1451
+ }
1452
+
1453
+ static int
1454
+ Fax4PostEncode(TIFF* tif)
1455
+ {
1456
+ Fax3CodecState *sp = EncoderState(tif);
1457
+
1458
+ /* terminate strip w/ EOFB */
1459
+ Fax3PutBits(tif, EOL, 12);
1460
+ Fax3PutBits(tif, EOL, 12);
1461
+ if (sp->bit != 8)
1462
+ Fax3FlushBits(tif, sp);
1463
+ return (1);
1464
+ }
1465
+
1466
+ int
1467
+ TIFFInitCCITTFax4(TIFF* tif, int scheme)
1468
+ {
1469
+ (void) scheme;
1470
+ if (InitCCITTFax3(tif)) { /* reuse G3 support */
1471
+ /*
1472
+ * Merge codec-specific tag information.
1473
+ */
1474
+ if (!_TIFFMergeFields(tif, fax4Fields,
1475
+ TIFFArrayCount(fax4Fields))) {
1476
+ TIFFErrorExt(tif->tif_clientdata, "TIFFInitCCITTFax4",
1477
+ "Merging CCITT Fax 4 codec-specific tags failed");
1478
+ return 0;
1479
+ }
1480
+
1481
+ tif->tif_decoderow = Fax4Decode;
1482
+ tif->tif_decodestrip = Fax4Decode;
1483
+ tif->tif_decodetile = Fax4Decode;
1484
+ tif->tif_encoderow = Fax4Encode;
1485
+ tif->tif_encodestrip = Fax4Encode;
1486
+ tif->tif_encodetile = Fax4Encode;
1487
+ tif->tif_postencode = Fax4PostEncode;
1488
+ /*
1489
+ * Suppress RTC at the end of each strip.
1490
+ */
1491
+ return TIFFSetField(tif, TIFFTAG_FAXMODE, FAXMODE_NORTC);
1492
+ } else
1493
+ return (0);
1494
+ }
1495
+
1496
+ /*
1497
+ * CCITT Group 3 1-D Modified Huffman RLE Compression Support.
1498
+ * (Compression algorithms 2 and 32771)
1499
+ */
1500
+
1501
+ /*
1502
+ * Decode the requested amount of RLE-encoded data.
1503
+ */
1504
+ static int
1505
+ Fax3DecodeRLE(TIFF* tif, uint8* buf, tmsize_t occ, uint16 s)
1506
+ {
1507
+ DECLARE_STATE(tif, sp, "Fax3DecodeRLE");
1508
+ int mode = sp->b.mode;
1509
+ (void) s;
1510
+ if (occ % sp->b.rowbytes)
1511
+ {
1512
+ TIFFErrorExt(tif->tif_clientdata, module, "Fractional scanlines cannot be read");
1513
+ return (-1);
1514
+ }
1515
+ CACHE_STATE(tif, sp);
1516
+ thisrun = sp->curruns;
1517
+ while (occ > 0) {
1518
+ a0 = 0;
1519
+ RunLength = 0;
1520
+ pa = thisrun;
1521
+ #ifdef FAX3_DEBUG
1522
+ printf("\nBitAcc=%08X, BitsAvail = %d\n", BitAcc, BitsAvail);
1523
+ printf("-------------------- %d\n", tif->tif_row);
1524
+ fflush(stdout);
1525
+ #endif
1526
+ EXPAND1D(EOFRLE);
1527
+ (*sp->fill)(buf, thisrun, pa, lastx);
1528
+ /*
1529
+ * Cleanup at the end of the row.
1530
+ */
1531
+ if (mode & FAXMODE_BYTEALIGN) {
1532
+ int n = BitsAvail - (BitsAvail &~ 7);
1533
+ ClrBits(n);
1534
+ } else if (mode & FAXMODE_WORDALIGN) {
1535
+ int n = BitsAvail - (BitsAvail &~ 15);
1536
+ ClrBits(n);
1537
+ if (BitsAvail == 0 && !isAligned(cp, uint16))
1538
+ cp++;
1539
+ }
1540
+ buf += sp->b.rowbytes;
1541
+ occ -= sp->b.rowbytes;
1542
+ sp->line++;
1543
+ continue;
1544
+ EOFRLE: /* premature EOF */
1545
+ (*sp->fill)(buf, thisrun, pa, lastx);
1546
+ UNCACHE_STATE(tif, sp);
1547
+ return (-1);
1548
+ }
1549
+ UNCACHE_STATE(tif, sp);
1550
+ return (1);
1551
+ }
1552
+
1553
+ int
1554
+ TIFFInitCCITTRLE(TIFF* tif, int scheme)
1555
+ {
1556
+ (void) scheme;
1557
+ if (InitCCITTFax3(tif)) { /* reuse G3 support */
1558
+ tif->tif_decoderow = Fax3DecodeRLE;
1559
+ tif->tif_decodestrip = Fax3DecodeRLE;
1560
+ tif->tif_decodetile = Fax3DecodeRLE;
1561
+ /*
1562
+ * Suppress RTC+EOLs when encoding and byte-align data.
1563
+ */
1564
+ return TIFFSetField(tif, TIFFTAG_FAXMODE,
1565
+ FAXMODE_NORTC|FAXMODE_NOEOL|FAXMODE_BYTEALIGN);
1566
+ } else
1567
+ return (0);
1568
+ }
1569
+
1570
+ int
1571
+ TIFFInitCCITTRLEW(TIFF* tif, int scheme)
1572
+ {
1573
+ (void) scheme;
1574
+ if (InitCCITTFax3(tif)) { /* reuse G3 support */
1575
+ tif->tif_decoderow = Fax3DecodeRLE;
1576
+ tif->tif_decodestrip = Fax3DecodeRLE;
1577
+ tif->tif_decodetile = Fax3DecodeRLE;
1578
+ /*
1579
+ * Suppress RTC+EOLs when encoding and word-align data.
1580
+ */
1581
+ return TIFFSetField(tif, TIFFTAG_FAXMODE,
1582
+ FAXMODE_NORTC|FAXMODE_NOEOL|FAXMODE_WORDALIGN);
1583
+ } else
1584
+ return (0);
1585
+ }
1586
+ #endif /* CCITT_SUPPORT */
1587
+
1588
+ /* vim: set ts=8 sts=8 sw=8 noet: */
1589
+ /*
1590
+ * Local Variables:
1591
+ * mode: c
1592
+ * c-basic-offset: 8
1593
+ * fill-column: 78
1594
+ * End:
1595
+ */