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,1442 @@
1
+ /* $Id: tif_pixarlog.c,v 1.13 2015/02/19 22:39:59 drolon Exp $ */
2
+
3
+ /*
4
+ * Copyright (c) 1996-1997 Sam Leffler
5
+ * Copyright (c) 1996 Pixar
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
+ * Pixar, 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 Pixar, 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 PIXAR, 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 PIXARLOG_SUPPORT
29
+
30
+ /*
31
+ * TIFF Library.
32
+ * PixarLog Compression Support
33
+ *
34
+ * Contributed by Dan McCoy.
35
+ *
36
+ * PixarLog film support uses the TIFF library to store companded
37
+ * 11 bit values into a tiff file, which are compressed using the
38
+ * zip compressor.
39
+ *
40
+ * The codec can take as input and produce as output 32-bit IEEE float values
41
+ * as well as 16-bit or 8-bit unsigned integer values.
42
+ *
43
+ * On writing any of the above are converted into the internal
44
+ * 11-bit log format. In the case of 8 and 16 bit values, the
45
+ * input is assumed to be unsigned linear color values that represent
46
+ * the range 0-1. In the case of IEEE values, the 0-1 range is assumed to
47
+ * be the normal linear color range, in addition over 1 values are
48
+ * accepted up to a value of about 25.0 to encode "hot" hightlights and such.
49
+ * The encoding is lossless for 8-bit values, slightly lossy for the
50
+ * other bit depths. The actual color precision should be better
51
+ * than the human eye can perceive with extra room to allow for
52
+ * error introduced by further image computation. As with any quantized
53
+ * color format, it is possible to perform image calculations which
54
+ * expose the quantization error. This format should certainly be less
55
+ * susceptable to such errors than standard 8-bit encodings, but more
56
+ * susceptable than straight 16-bit or 32-bit encodings.
57
+ *
58
+ * On reading the internal format is converted to the desired output format.
59
+ * The program can request which format it desires by setting the internal
60
+ * pseudo tag TIFFTAG_PIXARLOGDATAFMT to one of these possible values:
61
+ * PIXARLOGDATAFMT_FLOAT = provide IEEE float values.
62
+ * PIXARLOGDATAFMT_16BIT = provide unsigned 16-bit integer values
63
+ * PIXARLOGDATAFMT_8BIT = provide unsigned 8-bit integer values
64
+ *
65
+ * alternately PIXARLOGDATAFMT_8BITABGR provides unsigned 8-bit integer
66
+ * values with the difference that if there are exactly three or four channels
67
+ * (rgb or rgba) it swaps the channel order (bgr or abgr).
68
+ *
69
+ * PIXARLOGDATAFMT_11BITLOG provides the internal encoding directly
70
+ * packed in 16-bit values. However no tools are supplied for interpreting
71
+ * these values.
72
+ *
73
+ * "hot" (over 1.0) areas written in floating point get clamped to
74
+ * 1.0 in the integer data types.
75
+ *
76
+ * When the file is closed after writing, the bit depth and sample format
77
+ * are set always to appear as if 8-bit data has been written into it.
78
+ * That way a naive program unaware of the particulars of the encoding
79
+ * gets the format it is most likely able to handle.
80
+ *
81
+ * The codec does it's own horizontal differencing step on the coded
82
+ * values so the libraries predictor stuff should be turned off.
83
+ * The codec also handle byte swapping the encoded values as necessary
84
+ * since the library does not have the information necessary
85
+ * to know the bit depth of the raw unencoded buffer.
86
+ *
87
+ * NOTE: This decoder does not appear to update tif_rawcp, and tif_rawcc.
88
+ * This can cause problems with the implementation of CHUNKY_STRIP_READ_SUPPORT
89
+ * as noted in http://trac.osgeo.org/gdal/ticket/3894. FrankW - Jan'11
90
+ */
91
+
92
+ #include "tif_predict.h"
93
+ #include "../ZLib/zlib.h"
94
+
95
+ #include <stdio.h>
96
+ #include <stdlib.h>
97
+ #include <math.h>
98
+
99
+ /* Tables for converting to/from 11 bit coded values */
100
+
101
+ #define TSIZE 2048 /* decode table size (11-bit tokens) */
102
+ #define TSIZEP1 2049 /* Plus one for slop */
103
+ #define ONE 1250 /* token value of 1.0 exactly */
104
+ #define RATIO 1.004 /* nominal ratio for log part */
105
+
106
+ #define CODE_MASK 0x7ff /* 11 bits. */
107
+
108
+ static float Fltsize;
109
+ static float LogK1, LogK2;
110
+
111
+ #define REPEAT(n, op) { int i; i=n; do { i--; op; } while (i>0); }
112
+
113
+ static void
114
+ horizontalAccumulateF(uint16 *wp, int n, int stride, float *op,
115
+ float *ToLinearF)
116
+ {
117
+ register unsigned int cr, cg, cb, ca, mask;
118
+ register float t0, t1, t2, t3;
119
+
120
+ if (n >= stride) {
121
+ mask = CODE_MASK;
122
+ if (stride == 3) {
123
+ t0 = ToLinearF[cr = (wp[0] & mask)];
124
+ t1 = ToLinearF[cg = (wp[1] & mask)];
125
+ t2 = ToLinearF[cb = (wp[2] & mask)];
126
+ op[0] = t0;
127
+ op[1] = t1;
128
+ op[2] = t2;
129
+ n -= 3;
130
+ while (n > 0) {
131
+ wp += 3;
132
+ op += 3;
133
+ n -= 3;
134
+ t0 = ToLinearF[(cr += wp[0]) & mask];
135
+ t1 = ToLinearF[(cg += wp[1]) & mask];
136
+ t2 = ToLinearF[(cb += wp[2]) & mask];
137
+ op[0] = t0;
138
+ op[1] = t1;
139
+ op[2] = t2;
140
+ }
141
+ } else if (stride == 4) {
142
+ t0 = ToLinearF[cr = (wp[0] & mask)];
143
+ t1 = ToLinearF[cg = (wp[1] & mask)];
144
+ t2 = ToLinearF[cb = (wp[2] & mask)];
145
+ t3 = ToLinearF[ca = (wp[3] & mask)];
146
+ op[0] = t0;
147
+ op[1] = t1;
148
+ op[2] = t2;
149
+ op[3] = t3;
150
+ n -= 4;
151
+ while (n > 0) {
152
+ wp += 4;
153
+ op += 4;
154
+ n -= 4;
155
+ t0 = ToLinearF[(cr += wp[0]) & mask];
156
+ t1 = ToLinearF[(cg += wp[1]) & mask];
157
+ t2 = ToLinearF[(cb += wp[2]) & mask];
158
+ t3 = ToLinearF[(ca += wp[3]) & mask];
159
+ op[0] = t0;
160
+ op[1] = t1;
161
+ op[2] = t2;
162
+ op[3] = t3;
163
+ }
164
+ } else {
165
+ REPEAT(stride, *op = ToLinearF[*wp&mask]; wp++; op++)
166
+ n -= stride;
167
+ while (n > 0) {
168
+ REPEAT(stride,
169
+ wp[stride] += *wp; *op = ToLinearF[*wp&mask]; wp++; op++)
170
+ n -= stride;
171
+ }
172
+ }
173
+ }
174
+ }
175
+
176
+ static void
177
+ horizontalAccumulate12(uint16 *wp, int n, int stride, int16 *op,
178
+ float *ToLinearF)
179
+ {
180
+ register unsigned int cr, cg, cb, ca, mask;
181
+ register float t0, t1, t2, t3;
182
+
183
+ #define SCALE12 2048.0F
184
+ #define CLAMP12(t) (((t) < 3071) ? (uint16) (t) : 3071)
185
+
186
+ if (n >= stride) {
187
+ mask = CODE_MASK;
188
+ if (stride == 3) {
189
+ t0 = ToLinearF[cr = (wp[0] & mask)] * SCALE12;
190
+ t1 = ToLinearF[cg = (wp[1] & mask)] * SCALE12;
191
+ t2 = ToLinearF[cb = (wp[2] & mask)] * SCALE12;
192
+ op[0] = CLAMP12(t0);
193
+ op[1] = CLAMP12(t1);
194
+ op[2] = CLAMP12(t2);
195
+ n -= 3;
196
+ while (n > 0) {
197
+ wp += 3;
198
+ op += 3;
199
+ n -= 3;
200
+ t0 = ToLinearF[(cr += wp[0]) & mask] * SCALE12;
201
+ t1 = ToLinearF[(cg += wp[1]) & mask] * SCALE12;
202
+ t2 = ToLinearF[(cb += wp[2]) & mask] * SCALE12;
203
+ op[0] = CLAMP12(t0);
204
+ op[1] = CLAMP12(t1);
205
+ op[2] = CLAMP12(t2);
206
+ }
207
+ } else if (stride == 4) {
208
+ t0 = ToLinearF[cr = (wp[0] & mask)] * SCALE12;
209
+ t1 = ToLinearF[cg = (wp[1] & mask)] * SCALE12;
210
+ t2 = ToLinearF[cb = (wp[2] & mask)] * SCALE12;
211
+ t3 = ToLinearF[ca = (wp[3] & mask)] * SCALE12;
212
+ op[0] = CLAMP12(t0);
213
+ op[1] = CLAMP12(t1);
214
+ op[2] = CLAMP12(t2);
215
+ op[3] = CLAMP12(t3);
216
+ n -= 4;
217
+ while (n > 0) {
218
+ wp += 4;
219
+ op += 4;
220
+ n -= 4;
221
+ t0 = ToLinearF[(cr += wp[0]) & mask] * SCALE12;
222
+ t1 = ToLinearF[(cg += wp[1]) & mask] * SCALE12;
223
+ t2 = ToLinearF[(cb += wp[2]) & mask] * SCALE12;
224
+ t3 = ToLinearF[(ca += wp[3]) & mask] * SCALE12;
225
+ op[0] = CLAMP12(t0);
226
+ op[1] = CLAMP12(t1);
227
+ op[2] = CLAMP12(t2);
228
+ op[3] = CLAMP12(t3);
229
+ }
230
+ } else {
231
+ REPEAT(stride, t0 = ToLinearF[*wp&mask] * SCALE12;
232
+ *op = CLAMP12(t0); wp++; op++)
233
+ n -= stride;
234
+ while (n > 0) {
235
+ REPEAT(stride,
236
+ wp[stride] += *wp; t0 = ToLinearF[wp[stride]&mask]*SCALE12;
237
+ *op = CLAMP12(t0); wp++; op++)
238
+ n -= stride;
239
+ }
240
+ }
241
+ }
242
+ }
243
+
244
+ static void
245
+ horizontalAccumulate16(uint16 *wp, int n, int stride, uint16 *op,
246
+ uint16 *ToLinear16)
247
+ {
248
+ register unsigned int cr, cg, cb, ca, mask;
249
+
250
+ if (n >= stride) {
251
+ mask = CODE_MASK;
252
+ if (stride == 3) {
253
+ op[0] = ToLinear16[cr = (wp[0] & mask)];
254
+ op[1] = ToLinear16[cg = (wp[1] & mask)];
255
+ op[2] = ToLinear16[cb = (wp[2] & mask)];
256
+ n -= 3;
257
+ while (n > 0) {
258
+ wp += 3;
259
+ op += 3;
260
+ n -= 3;
261
+ op[0] = ToLinear16[(cr += wp[0]) & mask];
262
+ op[1] = ToLinear16[(cg += wp[1]) & mask];
263
+ op[2] = ToLinear16[(cb += wp[2]) & mask];
264
+ }
265
+ } else if (stride == 4) {
266
+ op[0] = ToLinear16[cr = (wp[0] & mask)];
267
+ op[1] = ToLinear16[cg = (wp[1] & mask)];
268
+ op[2] = ToLinear16[cb = (wp[2] & mask)];
269
+ op[3] = ToLinear16[ca = (wp[3] & mask)];
270
+ n -= 4;
271
+ while (n > 0) {
272
+ wp += 4;
273
+ op += 4;
274
+ n -= 4;
275
+ op[0] = ToLinear16[(cr += wp[0]) & mask];
276
+ op[1] = ToLinear16[(cg += wp[1]) & mask];
277
+ op[2] = ToLinear16[(cb += wp[2]) & mask];
278
+ op[3] = ToLinear16[(ca += wp[3]) & mask];
279
+ }
280
+ } else {
281
+ REPEAT(stride, *op = ToLinear16[*wp&mask]; wp++; op++)
282
+ n -= stride;
283
+ while (n > 0) {
284
+ REPEAT(stride,
285
+ wp[stride] += *wp; *op = ToLinear16[*wp&mask]; wp++; op++)
286
+ n -= stride;
287
+ }
288
+ }
289
+ }
290
+ }
291
+
292
+ /*
293
+ * Returns the log encoded 11-bit values with the horizontal
294
+ * differencing undone.
295
+ */
296
+ static void
297
+ horizontalAccumulate11(uint16 *wp, int n, int stride, uint16 *op)
298
+ {
299
+ register unsigned int cr, cg, cb, ca, mask;
300
+
301
+ if (n >= stride) {
302
+ mask = CODE_MASK;
303
+ if (stride == 3) {
304
+ op[0] = cr = wp[0]; op[1] = cg = wp[1]; op[2] = cb = wp[2];
305
+ n -= 3;
306
+ while (n > 0) {
307
+ wp += 3;
308
+ op += 3;
309
+ n -= 3;
310
+ op[0] = (cr += wp[0]) & mask;
311
+ op[1] = (cg += wp[1]) & mask;
312
+ op[2] = (cb += wp[2]) & mask;
313
+ }
314
+ } else if (stride == 4) {
315
+ op[0] = cr = wp[0]; op[1] = cg = wp[1];
316
+ op[2] = cb = wp[2]; op[3] = ca = wp[3];
317
+ n -= 4;
318
+ while (n > 0) {
319
+ wp += 4;
320
+ op += 4;
321
+ n -= 4;
322
+ op[0] = (cr += wp[0]) & mask;
323
+ op[1] = (cg += wp[1]) & mask;
324
+ op[2] = (cb += wp[2]) & mask;
325
+ op[3] = (ca += wp[3]) & mask;
326
+ }
327
+ } else {
328
+ REPEAT(stride, *op = *wp&mask; wp++; op++)
329
+ n -= stride;
330
+ while (n > 0) {
331
+ REPEAT(stride,
332
+ wp[stride] += *wp; *op = *wp&mask; wp++; op++)
333
+ n -= stride;
334
+ }
335
+ }
336
+ }
337
+ }
338
+
339
+ static void
340
+ horizontalAccumulate8(uint16 *wp, int n, int stride, unsigned char *op,
341
+ unsigned char *ToLinear8)
342
+ {
343
+ register unsigned int cr, cg, cb, ca, mask;
344
+
345
+ if (n >= stride) {
346
+ mask = CODE_MASK;
347
+ if (stride == 3) {
348
+ op[0] = ToLinear8[cr = (wp[0] & mask)];
349
+ op[1] = ToLinear8[cg = (wp[1] & mask)];
350
+ op[2] = ToLinear8[cb = (wp[2] & mask)];
351
+ n -= 3;
352
+ while (n > 0) {
353
+ n -= 3;
354
+ wp += 3;
355
+ op += 3;
356
+ op[0] = ToLinear8[(cr += wp[0]) & mask];
357
+ op[1] = ToLinear8[(cg += wp[1]) & mask];
358
+ op[2] = ToLinear8[(cb += wp[2]) & mask];
359
+ }
360
+ } else if (stride == 4) {
361
+ op[0] = ToLinear8[cr = (wp[0] & mask)];
362
+ op[1] = ToLinear8[cg = (wp[1] & mask)];
363
+ op[2] = ToLinear8[cb = (wp[2] & mask)];
364
+ op[3] = ToLinear8[ca = (wp[3] & mask)];
365
+ n -= 4;
366
+ while (n > 0) {
367
+ n -= 4;
368
+ wp += 4;
369
+ op += 4;
370
+ op[0] = ToLinear8[(cr += wp[0]) & mask];
371
+ op[1] = ToLinear8[(cg += wp[1]) & mask];
372
+ op[2] = ToLinear8[(cb += wp[2]) & mask];
373
+ op[3] = ToLinear8[(ca += wp[3]) & mask];
374
+ }
375
+ } else {
376
+ REPEAT(stride, *op = ToLinear8[*wp&mask]; wp++; op++)
377
+ n -= stride;
378
+ while (n > 0) {
379
+ REPEAT(stride,
380
+ wp[stride] += *wp; *op = ToLinear8[*wp&mask]; wp++; op++)
381
+ n -= stride;
382
+ }
383
+ }
384
+ }
385
+ }
386
+
387
+
388
+ static void
389
+ horizontalAccumulate8abgr(uint16 *wp, int n, int stride, unsigned char *op,
390
+ unsigned char *ToLinear8)
391
+ {
392
+ register unsigned int cr, cg, cb, ca, mask;
393
+ register unsigned char t0, t1, t2, t3;
394
+
395
+ if (n >= stride) {
396
+ mask = CODE_MASK;
397
+ if (stride == 3) {
398
+ op[0] = 0;
399
+ t1 = ToLinear8[cb = (wp[2] & mask)];
400
+ t2 = ToLinear8[cg = (wp[1] & mask)];
401
+ t3 = ToLinear8[cr = (wp[0] & mask)];
402
+ op[1] = t1;
403
+ op[2] = t2;
404
+ op[3] = t3;
405
+ n -= 3;
406
+ while (n > 0) {
407
+ n -= 3;
408
+ wp += 3;
409
+ op += 4;
410
+ op[0] = 0;
411
+ t1 = ToLinear8[(cb += wp[2]) & mask];
412
+ t2 = ToLinear8[(cg += wp[1]) & mask];
413
+ t3 = ToLinear8[(cr += wp[0]) & mask];
414
+ op[1] = t1;
415
+ op[2] = t2;
416
+ op[3] = t3;
417
+ }
418
+ } else if (stride == 4) {
419
+ t0 = ToLinear8[ca = (wp[3] & mask)];
420
+ t1 = ToLinear8[cb = (wp[2] & mask)];
421
+ t2 = ToLinear8[cg = (wp[1] & mask)];
422
+ t3 = ToLinear8[cr = (wp[0] & mask)];
423
+ op[0] = t0;
424
+ op[1] = t1;
425
+ op[2] = t2;
426
+ op[3] = t3;
427
+ n -= 4;
428
+ while (n > 0) {
429
+ n -= 4;
430
+ wp += 4;
431
+ op += 4;
432
+ t0 = ToLinear8[(ca += wp[3]) & mask];
433
+ t1 = ToLinear8[(cb += wp[2]) & mask];
434
+ t2 = ToLinear8[(cg += wp[1]) & mask];
435
+ t3 = ToLinear8[(cr += wp[0]) & mask];
436
+ op[0] = t0;
437
+ op[1] = t1;
438
+ op[2] = t2;
439
+ op[3] = t3;
440
+ }
441
+ } else {
442
+ REPEAT(stride, *op = ToLinear8[*wp&mask]; wp++; op++)
443
+ n -= stride;
444
+ while (n > 0) {
445
+ REPEAT(stride,
446
+ wp[stride] += *wp; *op = ToLinear8[*wp&mask]; wp++; op++)
447
+ n -= stride;
448
+ }
449
+ }
450
+ }
451
+ }
452
+
453
+ /*
454
+ * State block for each open TIFF
455
+ * file using PixarLog compression/decompression.
456
+ */
457
+ typedef struct {
458
+ TIFFPredictorState predict;
459
+ z_stream stream;
460
+ uint16 *tbuf;
461
+ uint16 stride;
462
+ int state;
463
+ int user_datafmt;
464
+ int quality;
465
+ #define PLSTATE_INIT 1
466
+
467
+ TIFFVSetMethod vgetparent; /* super-class method */
468
+ TIFFVSetMethod vsetparent; /* super-class method */
469
+
470
+ float *ToLinearF;
471
+ uint16 *ToLinear16;
472
+ unsigned char *ToLinear8;
473
+ uint16 *FromLT2;
474
+ uint16 *From14; /* Really for 16-bit data, but we shift down 2 */
475
+ uint16 *From8;
476
+
477
+ } PixarLogState;
478
+
479
+ static int
480
+ PixarLogMakeTables(PixarLogState *sp)
481
+ {
482
+
483
+ /*
484
+ * We make several tables here to convert between various external
485
+ * representations (float, 16-bit, and 8-bit) and the internal
486
+ * 11-bit companded representation. The 11-bit representation has two
487
+ * distinct regions. A linear bottom end up through .018316 in steps
488
+ * of about .000073, and a region of constant ratio up to about 25.
489
+ * These floating point numbers are stored in the main table ToLinearF.
490
+ * All other tables are derived from this one. The tables (and the
491
+ * ratios) are continuous at the internal seam.
492
+ */
493
+
494
+ int nlin, lt2size;
495
+ int i, j;
496
+ double b, c, linstep, v;
497
+ float *ToLinearF;
498
+ uint16 *ToLinear16;
499
+ unsigned char *ToLinear8;
500
+ uint16 *FromLT2;
501
+ uint16 *From14; /* Really for 16-bit data, but we shift down 2 */
502
+ uint16 *From8;
503
+
504
+ c = log(RATIO);
505
+ nlin = (int)(1./c); /* nlin must be an integer */
506
+ c = 1./nlin;
507
+ b = exp(-c*ONE); /* multiplicative scale factor [b*exp(c*ONE) = 1] */
508
+ linstep = b*c*exp(1.);
509
+
510
+ LogK1 = (float)(1./c); /* if (v >= 2) token = k1*log(v*k2) */
511
+ LogK2 = (float)(1./b);
512
+ lt2size = (int)(2./linstep) + 1;
513
+ FromLT2 = (uint16 *)_TIFFmalloc(lt2size*sizeof(uint16));
514
+ From14 = (uint16 *)_TIFFmalloc(16384*sizeof(uint16));
515
+ From8 = (uint16 *)_TIFFmalloc(256*sizeof(uint16));
516
+ ToLinearF = (float *)_TIFFmalloc(TSIZEP1 * sizeof(float));
517
+ ToLinear16 = (uint16 *)_TIFFmalloc(TSIZEP1 * sizeof(uint16));
518
+ ToLinear8 = (unsigned char *)_TIFFmalloc(TSIZEP1 * sizeof(unsigned char));
519
+ if (FromLT2 == NULL || From14 == NULL || From8 == NULL ||
520
+ ToLinearF == NULL || ToLinear16 == NULL || ToLinear8 == NULL) {
521
+ if (FromLT2) _TIFFfree(FromLT2);
522
+ if (From14) _TIFFfree(From14);
523
+ if (From8) _TIFFfree(From8);
524
+ if (ToLinearF) _TIFFfree(ToLinearF);
525
+ if (ToLinear16) _TIFFfree(ToLinear16);
526
+ if (ToLinear8) _TIFFfree(ToLinear8);
527
+ sp->FromLT2 = NULL;
528
+ sp->From14 = NULL;
529
+ sp->From8 = NULL;
530
+ sp->ToLinearF = NULL;
531
+ sp->ToLinear16 = NULL;
532
+ sp->ToLinear8 = NULL;
533
+ return 0;
534
+ }
535
+
536
+ j = 0;
537
+
538
+ for (i = 0; i < nlin; i++) {
539
+ v = i * linstep;
540
+ ToLinearF[j++] = (float)v;
541
+ }
542
+
543
+ for (i = nlin; i < TSIZE; i++)
544
+ ToLinearF[j++] = (float)(b*exp(c*i));
545
+
546
+ ToLinearF[2048] = ToLinearF[2047];
547
+
548
+ for (i = 0; i < TSIZEP1; i++) {
549
+ v = ToLinearF[i]*65535.0 + 0.5;
550
+ ToLinear16[i] = (v > 65535.0) ? 65535 : (uint16)v;
551
+ v = ToLinearF[i]*255.0 + 0.5;
552
+ ToLinear8[i] = (v > 255.0) ? 255 : (unsigned char)v;
553
+ }
554
+
555
+ j = 0;
556
+ for (i = 0; i < lt2size; i++) {
557
+ if ((i*linstep)*(i*linstep) > ToLinearF[j]*ToLinearF[j+1])
558
+ j++;
559
+ FromLT2[i] = j;
560
+ }
561
+
562
+ /*
563
+ * Since we lose info anyway on 16-bit data, we set up a 14-bit
564
+ * table and shift 16-bit values down two bits on input.
565
+ * saves a little table space.
566
+ */
567
+ j = 0;
568
+ for (i = 0; i < 16384; i++) {
569
+ while ((i/16383.)*(i/16383.) > ToLinearF[j]*ToLinearF[j+1])
570
+ j++;
571
+ From14[i] = j;
572
+ }
573
+
574
+ j = 0;
575
+ for (i = 0; i < 256; i++) {
576
+ while ((i/255.)*(i/255.) > ToLinearF[j]*ToLinearF[j+1])
577
+ j++;
578
+ From8[i] = j;
579
+ }
580
+
581
+ Fltsize = (float)(lt2size/2);
582
+
583
+ sp->ToLinearF = ToLinearF;
584
+ sp->ToLinear16 = ToLinear16;
585
+ sp->ToLinear8 = ToLinear8;
586
+ sp->FromLT2 = FromLT2;
587
+ sp->From14 = From14;
588
+ sp->From8 = From8;
589
+
590
+ return 1;
591
+ }
592
+
593
+ #define DecoderState(tif) ((PixarLogState*) (tif)->tif_data)
594
+ #define EncoderState(tif) ((PixarLogState*) (tif)->tif_data)
595
+
596
+ static int PixarLogEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s);
597
+ static int PixarLogDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s);
598
+
599
+ #define PIXARLOGDATAFMT_UNKNOWN -1
600
+
601
+ static int
602
+ PixarLogGuessDataFmt(TIFFDirectory *td)
603
+ {
604
+ int guess = PIXARLOGDATAFMT_UNKNOWN;
605
+ int format = td->td_sampleformat;
606
+
607
+ /* If the user didn't tell us his datafmt,
608
+ * take our best guess from the bitspersample.
609
+ */
610
+ switch (td->td_bitspersample) {
611
+ case 32:
612
+ if (format == SAMPLEFORMAT_IEEEFP)
613
+ guess = PIXARLOGDATAFMT_FLOAT;
614
+ break;
615
+ case 16:
616
+ if (format == SAMPLEFORMAT_VOID || format == SAMPLEFORMAT_UINT)
617
+ guess = PIXARLOGDATAFMT_16BIT;
618
+ break;
619
+ case 12:
620
+ if (format == SAMPLEFORMAT_VOID || format == SAMPLEFORMAT_INT)
621
+ guess = PIXARLOGDATAFMT_12BITPICIO;
622
+ break;
623
+ case 11:
624
+ if (format == SAMPLEFORMAT_VOID || format == SAMPLEFORMAT_UINT)
625
+ guess = PIXARLOGDATAFMT_11BITLOG;
626
+ break;
627
+ case 8:
628
+ if (format == SAMPLEFORMAT_VOID || format == SAMPLEFORMAT_UINT)
629
+ guess = PIXARLOGDATAFMT_8BIT;
630
+ break;
631
+ }
632
+
633
+ return guess;
634
+ }
635
+
636
+ static tmsize_t
637
+ multiply_ms(tmsize_t m1, tmsize_t m2)
638
+ {
639
+ tmsize_t bytes = m1 * m2;
640
+
641
+ if (m1 && bytes / m1 != m2)
642
+ bytes = 0;
643
+
644
+ return bytes;
645
+ }
646
+
647
+ static tmsize_t
648
+ add_ms(tmsize_t m1, tmsize_t m2)
649
+ {
650
+ tmsize_t bytes = m1 + m2;
651
+
652
+ /* if either input is zero, assume overflow already occurred */
653
+ if (m1 == 0 || m2 == 0)
654
+ bytes = 0;
655
+ else if (bytes <= m1 || bytes <= m2)
656
+ bytes = 0;
657
+
658
+ return bytes;
659
+ }
660
+
661
+ static int
662
+ PixarLogFixupTags(TIFF* tif)
663
+ {
664
+ (void) tif;
665
+ return (1);
666
+ }
667
+
668
+ static int
669
+ PixarLogSetupDecode(TIFF* tif)
670
+ {
671
+ static const char module[] = "PixarLogSetupDecode";
672
+ TIFFDirectory *td = &tif->tif_dir;
673
+ PixarLogState* sp = DecoderState(tif);
674
+ tmsize_t tbuf_size;
675
+
676
+ assert(sp != NULL);
677
+
678
+ /* Make sure no byte swapping happens on the data
679
+ * after decompression. */
680
+ tif->tif_postdecode = _TIFFNoPostDecode;
681
+
682
+ /* for some reason, we can't do this in TIFFInitPixarLog */
683
+
684
+ sp->stride = (td->td_planarconfig == PLANARCONFIG_CONTIG ?
685
+ td->td_samplesperpixel : 1);
686
+ tbuf_size = multiply_ms(multiply_ms(multiply_ms(sp->stride, td->td_imagewidth),
687
+ td->td_rowsperstrip), sizeof(uint16));
688
+ /* add one more stride in case input ends mid-stride */
689
+ tbuf_size = add_ms(tbuf_size, sizeof(uint16) * sp->stride);
690
+ if (tbuf_size == 0)
691
+ return (0); /* TODO: this is an error return without error report through TIFFErrorExt */
692
+ sp->tbuf = (uint16 *) _TIFFmalloc(tbuf_size);
693
+ if (sp->tbuf == NULL)
694
+ return (0);
695
+ if (sp->user_datafmt == PIXARLOGDATAFMT_UNKNOWN)
696
+ sp->user_datafmt = PixarLogGuessDataFmt(td);
697
+ if (sp->user_datafmt == PIXARLOGDATAFMT_UNKNOWN) {
698
+ TIFFErrorExt(tif->tif_clientdata, module,
699
+ "PixarLog compression can't handle bits depth/data format combination (depth: %d)",
700
+ td->td_bitspersample);
701
+ return (0);
702
+ }
703
+
704
+ if (inflateInit(&sp->stream) != Z_OK) {
705
+ TIFFErrorExt(tif->tif_clientdata, module, "%s", sp->stream.msg);
706
+ return (0);
707
+ } else {
708
+ sp->state |= PLSTATE_INIT;
709
+ return (1);
710
+ }
711
+ }
712
+
713
+ /*
714
+ * Setup state for decoding a strip.
715
+ */
716
+ static int
717
+ PixarLogPreDecode(TIFF* tif, uint16 s)
718
+ {
719
+ static const char module[] = "PixarLogPreDecode";
720
+ PixarLogState* sp = DecoderState(tif);
721
+
722
+ (void) s;
723
+ assert(sp != NULL);
724
+ sp->stream.next_in = tif->tif_rawdata;
725
+ assert(sizeof(sp->stream.avail_in)==4); /* if this assert gets raised,
726
+ we need to simplify this code to reflect a ZLib that is likely updated
727
+ to deal with 8byte memory sizes, though this code will respond
728
+ apropriately even before we simplify it */
729
+ sp->stream.avail_in = (uInt) tif->tif_rawcc;
730
+ if ((tmsize_t)sp->stream.avail_in != tif->tif_rawcc)
731
+ {
732
+ TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size");
733
+ return (0);
734
+ }
735
+ return (inflateReset(&sp->stream) == Z_OK);
736
+ }
737
+
738
+ static int
739
+ PixarLogDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s)
740
+ {
741
+ static const char module[] = "PixarLogDecode";
742
+ TIFFDirectory *td = &tif->tif_dir;
743
+ PixarLogState* sp = DecoderState(tif);
744
+ tmsize_t i;
745
+ tmsize_t nsamples;
746
+ int llen;
747
+ uint16 *up;
748
+
749
+ switch (sp->user_datafmt) {
750
+ case PIXARLOGDATAFMT_FLOAT:
751
+ nsamples = occ / sizeof(float); /* XXX float == 32 bits */
752
+ break;
753
+ case PIXARLOGDATAFMT_16BIT:
754
+ case PIXARLOGDATAFMT_12BITPICIO:
755
+ case PIXARLOGDATAFMT_11BITLOG:
756
+ nsamples = occ / sizeof(uint16); /* XXX uint16 == 16 bits */
757
+ break;
758
+ case PIXARLOGDATAFMT_8BIT:
759
+ case PIXARLOGDATAFMT_8BITABGR:
760
+ nsamples = occ;
761
+ break;
762
+ default:
763
+ TIFFErrorExt(tif->tif_clientdata, module,
764
+ "%d bit input not supported in PixarLog",
765
+ td->td_bitspersample);
766
+ return 0;
767
+ }
768
+
769
+ llen = sp->stride * td->td_imagewidth;
770
+
771
+ (void) s;
772
+ assert(sp != NULL);
773
+ sp->stream.next_out = (unsigned char *) sp->tbuf;
774
+ assert(sizeof(sp->stream.avail_out)==4); /* if this assert gets raised,
775
+ we need to simplify this code to reflect a ZLib that is likely updated
776
+ to deal with 8byte memory sizes, though this code will respond
777
+ apropriately even before we simplify it */
778
+ sp->stream.avail_out = (uInt) (nsamples * sizeof(uint16));
779
+ if (sp->stream.avail_out != nsamples * sizeof(uint16))
780
+ {
781
+ TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size");
782
+ return (0);
783
+ }
784
+ do {
785
+ int state = inflate(&sp->stream, Z_PARTIAL_FLUSH);
786
+ if (state == Z_STREAM_END) {
787
+ break; /* XXX */
788
+ }
789
+ if (state == Z_DATA_ERROR) {
790
+ TIFFErrorExt(tif->tif_clientdata, module,
791
+ "Decoding error at scanline %lu, %s",
792
+ (unsigned long) tif->tif_row, sp->stream.msg);
793
+ if (inflateSync(&sp->stream) != Z_OK)
794
+ return (0);
795
+ continue;
796
+ }
797
+ if (state != Z_OK) {
798
+ TIFFErrorExt(tif->tif_clientdata, module, "ZLib error: %s",
799
+ sp->stream.msg);
800
+ return (0);
801
+ }
802
+ } while (sp->stream.avail_out > 0);
803
+
804
+ /* hopefully, we got all the bytes we needed */
805
+ if (sp->stream.avail_out != 0) {
806
+ TIFFErrorExt(tif->tif_clientdata, module,
807
+ "Not enough data at scanline %lu (short " TIFF_UINT64_FORMAT " bytes)",
808
+ (unsigned long) tif->tif_row, (TIFF_UINT64_T) sp->stream.avail_out);
809
+ return (0);
810
+ }
811
+
812
+ up = sp->tbuf;
813
+ /* Swap bytes in the data if from a different endian machine. */
814
+ if (tif->tif_flags & TIFF_SWAB)
815
+ TIFFSwabArrayOfShort(up, nsamples);
816
+
817
+ /*
818
+ * if llen is not an exact multiple of nsamples, the decode operation
819
+ * may overflow the output buffer, so truncate it enough to prevent
820
+ * that but still salvage as much data as possible.
821
+ */
822
+ if (nsamples % llen) {
823
+ TIFFWarningExt(tif->tif_clientdata, module,
824
+ "stride %lu is not a multiple of sample count, "
825
+ "%lu, data truncated.", (unsigned long) llen, (unsigned long) nsamples);
826
+ nsamples -= nsamples % llen;
827
+ }
828
+
829
+ for (i = 0; i < nsamples; i += llen, up += llen) {
830
+ switch (sp->user_datafmt) {
831
+ case PIXARLOGDATAFMT_FLOAT:
832
+ horizontalAccumulateF(up, llen, sp->stride,
833
+ (float *)op, sp->ToLinearF);
834
+ op += llen * sizeof(float);
835
+ break;
836
+ case PIXARLOGDATAFMT_16BIT:
837
+ horizontalAccumulate16(up, llen, sp->stride,
838
+ (uint16 *)op, sp->ToLinear16);
839
+ op += llen * sizeof(uint16);
840
+ break;
841
+ case PIXARLOGDATAFMT_12BITPICIO:
842
+ horizontalAccumulate12(up, llen, sp->stride,
843
+ (int16 *)op, sp->ToLinearF);
844
+ op += llen * sizeof(int16);
845
+ break;
846
+ case PIXARLOGDATAFMT_11BITLOG:
847
+ horizontalAccumulate11(up, llen, sp->stride,
848
+ (uint16 *)op);
849
+ op += llen * sizeof(uint16);
850
+ break;
851
+ case PIXARLOGDATAFMT_8BIT:
852
+ horizontalAccumulate8(up, llen, sp->stride,
853
+ (unsigned char *)op, sp->ToLinear8);
854
+ op += llen * sizeof(unsigned char);
855
+ break;
856
+ case PIXARLOGDATAFMT_8BITABGR:
857
+ horizontalAccumulate8abgr(up, llen, sp->stride,
858
+ (unsigned char *)op, sp->ToLinear8);
859
+ op += llen * sizeof(unsigned char);
860
+ break;
861
+ default:
862
+ TIFFErrorExt(tif->tif_clientdata, module,
863
+ "Unsupported bits/sample: %d",
864
+ td->td_bitspersample);
865
+ return (0);
866
+ }
867
+ }
868
+
869
+ return (1);
870
+ }
871
+
872
+ static int
873
+ PixarLogSetupEncode(TIFF* tif)
874
+ {
875
+ static const char module[] = "PixarLogSetupEncode";
876
+ TIFFDirectory *td = &tif->tif_dir;
877
+ PixarLogState* sp = EncoderState(tif);
878
+ tmsize_t tbuf_size;
879
+
880
+ assert(sp != NULL);
881
+
882
+ /* for some reason, we can't do this in TIFFInitPixarLog */
883
+
884
+ sp->stride = (td->td_planarconfig == PLANARCONFIG_CONTIG ?
885
+ td->td_samplesperpixel : 1);
886
+ tbuf_size = multiply_ms(multiply_ms(multiply_ms(sp->stride, td->td_imagewidth),
887
+ td->td_rowsperstrip), sizeof(uint16));
888
+ if (tbuf_size == 0)
889
+ return (0); /* TODO: this is an error return without error report through TIFFErrorExt */
890
+ sp->tbuf = (uint16 *) _TIFFmalloc(tbuf_size);
891
+ if (sp->tbuf == NULL)
892
+ return (0);
893
+ if (sp->user_datafmt == PIXARLOGDATAFMT_UNKNOWN)
894
+ sp->user_datafmt = PixarLogGuessDataFmt(td);
895
+ if (sp->user_datafmt == PIXARLOGDATAFMT_UNKNOWN) {
896
+ TIFFErrorExt(tif->tif_clientdata, module, "PixarLog compression can't handle %d bit linear encodings", td->td_bitspersample);
897
+ return (0);
898
+ }
899
+
900
+ if (deflateInit(&sp->stream, sp->quality) != Z_OK) {
901
+ TIFFErrorExt(tif->tif_clientdata, module, "%s", sp->stream.msg);
902
+ return (0);
903
+ } else {
904
+ sp->state |= PLSTATE_INIT;
905
+ return (1);
906
+ }
907
+ }
908
+
909
+ /*
910
+ * Reset encoding state at the start of a strip.
911
+ */
912
+ static int
913
+ PixarLogPreEncode(TIFF* tif, uint16 s)
914
+ {
915
+ static const char module[] = "PixarLogPreEncode";
916
+ PixarLogState *sp = EncoderState(tif);
917
+
918
+ (void) s;
919
+ assert(sp != NULL);
920
+ sp->stream.next_out = tif->tif_rawdata;
921
+ assert(sizeof(sp->stream.avail_out)==4); /* if this assert gets raised,
922
+ we need to simplify this code to reflect a ZLib that is likely updated
923
+ to deal with 8byte memory sizes, though this code will respond
924
+ apropriately even before we simplify it */
925
+ sp->stream.avail_out = tif->tif_rawdatasize;
926
+ if ((tmsize_t)sp->stream.avail_out != tif->tif_rawdatasize)
927
+ {
928
+ TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size");
929
+ return (0);
930
+ }
931
+ return (deflateReset(&sp->stream) == Z_OK);
932
+ }
933
+
934
+ static void
935
+ horizontalDifferenceF(float *ip, int n, int stride, uint16 *wp, uint16 *FromLT2)
936
+ {
937
+ int32 r1, g1, b1, a1, r2, g2, b2, a2, mask;
938
+ float fltsize = Fltsize;
939
+
940
+ #define CLAMP(v) ( (v<(float)0.) ? 0 \
941
+ : (v<(float)2.) ? FromLT2[(int)(v*fltsize)] \
942
+ : (v>(float)24.2) ? 2047 \
943
+ : LogK1*log(v*LogK2) + 0.5 )
944
+
945
+ mask = CODE_MASK;
946
+ if (n >= stride) {
947
+ if (stride == 3) {
948
+ r2 = wp[0] = (uint16) CLAMP(ip[0]);
949
+ g2 = wp[1] = (uint16) CLAMP(ip[1]);
950
+ b2 = wp[2] = (uint16) CLAMP(ip[2]);
951
+ n -= 3;
952
+ while (n > 0) {
953
+ n -= 3;
954
+ wp += 3;
955
+ ip += 3;
956
+ r1 = (int32) CLAMP(ip[0]); wp[0] = (r1-r2) & mask; r2 = r1;
957
+ g1 = (int32) CLAMP(ip[1]); wp[1] = (g1-g2) & mask; g2 = g1;
958
+ b1 = (int32) CLAMP(ip[2]); wp[2] = (b1-b2) & mask; b2 = b1;
959
+ }
960
+ } else if (stride == 4) {
961
+ r2 = wp[0] = (uint16) CLAMP(ip[0]);
962
+ g2 = wp[1] = (uint16) CLAMP(ip[1]);
963
+ b2 = wp[2] = (uint16) CLAMP(ip[2]);
964
+ a2 = wp[3] = (uint16) CLAMP(ip[3]);
965
+ n -= 4;
966
+ while (n > 0) {
967
+ n -= 4;
968
+ wp += 4;
969
+ ip += 4;
970
+ r1 = (int32) CLAMP(ip[0]); wp[0] = (r1-r2) & mask; r2 = r1;
971
+ g1 = (int32) CLAMP(ip[1]); wp[1] = (g1-g2) & mask; g2 = g1;
972
+ b1 = (int32) CLAMP(ip[2]); wp[2] = (b1-b2) & mask; b2 = b1;
973
+ a1 = (int32) CLAMP(ip[3]); wp[3] = (a1-a2) & mask; a2 = a1;
974
+ }
975
+ } else {
976
+ ip += n - 1; /* point to last one */
977
+ wp += n - 1; /* point to last one */
978
+ n -= stride;
979
+ while (n > 0) {
980
+ REPEAT(stride, wp[0] = (uint16) CLAMP(ip[0]);
981
+ wp[stride] -= wp[0];
982
+ wp[stride] &= mask;
983
+ wp--; ip--)
984
+ n -= stride;
985
+ }
986
+ REPEAT(stride, wp[0] = (uint16) CLAMP(ip[0]); wp--; ip--)
987
+ }
988
+ }
989
+ }
990
+
991
+ static void
992
+ horizontalDifference16(unsigned short *ip, int n, int stride,
993
+ unsigned short *wp, uint16 *From14)
994
+ {
995
+ register int r1, g1, b1, a1, r2, g2, b2, a2, mask;
996
+
997
+ /* assumption is unsigned pixel values */
998
+ #undef CLAMP
999
+ #define CLAMP(v) From14[(v) >> 2]
1000
+
1001
+ mask = CODE_MASK;
1002
+ if (n >= stride) {
1003
+ if (stride == 3) {
1004
+ r2 = wp[0] = CLAMP(ip[0]); g2 = wp[1] = CLAMP(ip[1]);
1005
+ b2 = wp[2] = CLAMP(ip[2]);
1006
+ n -= 3;
1007
+ while (n > 0) {
1008
+ n -= 3;
1009
+ wp += 3;
1010
+ ip += 3;
1011
+ r1 = CLAMP(ip[0]); wp[0] = (r1-r2) & mask; r2 = r1;
1012
+ g1 = CLAMP(ip[1]); wp[1] = (g1-g2) & mask; g2 = g1;
1013
+ b1 = CLAMP(ip[2]); wp[2] = (b1-b2) & mask; b2 = b1;
1014
+ }
1015
+ } else if (stride == 4) {
1016
+ r2 = wp[0] = CLAMP(ip[0]); g2 = wp[1] = CLAMP(ip[1]);
1017
+ b2 = wp[2] = CLAMP(ip[2]); a2 = wp[3] = CLAMP(ip[3]);
1018
+ n -= 4;
1019
+ while (n > 0) {
1020
+ n -= 4;
1021
+ wp += 4;
1022
+ ip += 4;
1023
+ r1 = CLAMP(ip[0]); wp[0] = (r1-r2) & mask; r2 = r1;
1024
+ g1 = CLAMP(ip[1]); wp[1] = (g1-g2) & mask; g2 = g1;
1025
+ b1 = CLAMP(ip[2]); wp[2] = (b1-b2) & mask; b2 = b1;
1026
+ a1 = CLAMP(ip[3]); wp[3] = (a1-a2) & mask; a2 = a1;
1027
+ }
1028
+ } else {
1029
+ ip += n - 1; /* point to last one */
1030
+ wp += n - 1; /* point to last one */
1031
+ n -= stride;
1032
+ while (n > 0) {
1033
+ REPEAT(stride, wp[0] = CLAMP(ip[0]);
1034
+ wp[stride] -= wp[0];
1035
+ wp[stride] &= mask;
1036
+ wp--; ip--)
1037
+ n -= stride;
1038
+ }
1039
+ REPEAT(stride, wp[0] = CLAMP(ip[0]); wp--; ip--)
1040
+ }
1041
+ }
1042
+ }
1043
+
1044
+
1045
+ static void
1046
+ horizontalDifference8(unsigned char *ip, int n, int stride,
1047
+ unsigned short *wp, uint16 *From8)
1048
+ {
1049
+ register int r1, g1, b1, a1, r2, g2, b2, a2, mask;
1050
+
1051
+ #undef CLAMP
1052
+ #define CLAMP(v) (From8[(v)])
1053
+
1054
+ mask = CODE_MASK;
1055
+ if (n >= stride) {
1056
+ if (stride == 3) {
1057
+ r2 = wp[0] = CLAMP(ip[0]); g2 = wp[1] = CLAMP(ip[1]);
1058
+ b2 = wp[2] = CLAMP(ip[2]);
1059
+ n -= 3;
1060
+ while (n > 0) {
1061
+ n -= 3;
1062
+ r1 = CLAMP(ip[3]); wp[3] = (r1-r2) & mask; r2 = r1;
1063
+ g1 = CLAMP(ip[4]); wp[4] = (g1-g2) & mask; g2 = g1;
1064
+ b1 = CLAMP(ip[5]); wp[5] = (b1-b2) & mask; b2 = b1;
1065
+ wp += 3;
1066
+ ip += 3;
1067
+ }
1068
+ } else if (stride == 4) {
1069
+ r2 = wp[0] = CLAMP(ip[0]); g2 = wp[1] = CLAMP(ip[1]);
1070
+ b2 = wp[2] = CLAMP(ip[2]); a2 = wp[3] = CLAMP(ip[3]);
1071
+ n -= 4;
1072
+ while (n > 0) {
1073
+ n -= 4;
1074
+ r1 = CLAMP(ip[4]); wp[4] = (r1-r2) & mask; r2 = r1;
1075
+ g1 = CLAMP(ip[5]); wp[5] = (g1-g2) & mask; g2 = g1;
1076
+ b1 = CLAMP(ip[6]); wp[6] = (b1-b2) & mask; b2 = b1;
1077
+ a1 = CLAMP(ip[7]); wp[7] = (a1-a2) & mask; a2 = a1;
1078
+ wp += 4;
1079
+ ip += 4;
1080
+ }
1081
+ } else {
1082
+ wp += n + stride - 1; /* point to last one */
1083
+ ip += n + stride - 1; /* point to last one */
1084
+ n -= stride;
1085
+ while (n > 0) {
1086
+ REPEAT(stride, wp[0] = CLAMP(ip[0]);
1087
+ wp[stride] -= wp[0];
1088
+ wp[stride] &= mask;
1089
+ wp--; ip--)
1090
+ n -= stride;
1091
+ }
1092
+ REPEAT(stride, wp[0] = CLAMP(ip[0]); wp--; ip--)
1093
+ }
1094
+ }
1095
+ }
1096
+
1097
+ /*
1098
+ * Encode a chunk of pixels.
1099
+ */
1100
+ static int
1101
+ PixarLogEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s)
1102
+ {
1103
+ static const char module[] = "PixarLogEncode";
1104
+ TIFFDirectory *td = &tif->tif_dir;
1105
+ PixarLogState *sp = EncoderState(tif);
1106
+ tmsize_t i;
1107
+ tmsize_t n;
1108
+ int llen;
1109
+ unsigned short * up;
1110
+
1111
+ (void) s;
1112
+
1113
+ switch (sp->user_datafmt) {
1114
+ case PIXARLOGDATAFMT_FLOAT:
1115
+ n = cc / sizeof(float); /* XXX float == 32 bits */
1116
+ break;
1117
+ case PIXARLOGDATAFMT_16BIT:
1118
+ case PIXARLOGDATAFMT_12BITPICIO:
1119
+ case PIXARLOGDATAFMT_11BITLOG:
1120
+ n = cc / sizeof(uint16); /* XXX uint16 == 16 bits */
1121
+ break;
1122
+ case PIXARLOGDATAFMT_8BIT:
1123
+ case PIXARLOGDATAFMT_8BITABGR:
1124
+ n = cc;
1125
+ break;
1126
+ default:
1127
+ TIFFErrorExt(tif->tif_clientdata, module,
1128
+ "%d bit input not supported in PixarLog",
1129
+ td->td_bitspersample);
1130
+ return 0;
1131
+ }
1132
+
1133
+ llen = sp->stride * td->td_imagewidth;
1134
+
1135
+ for (i = 0, up = sp->tbuf; i < n; i += llen, up += llen) {
1136
+ switch (sp->user_datafmt) {
1137
+ case PIXARLOGDATAFMT_FLOAT:
1138
+ horizontalDifferenceF((float *)bp, llen,
1139
+ sp->stride, up, sp->FromLT2);
1140
+ bp += llen * sizeof(float);
1141
+ break;
1142
+ case PIXARLOGDATAFMT_16BIT:
1143
+ horizontalDifference16((uint16 *)bp, llen,
1144
+ sp->stride, up, sp->From14);
1145
+ bp += llen * sizeof(uint16);
1146
+ break;
1147
+ case PIXARLOGDATAFMT_8BIT:
1148
+ horizontalDifference8((unsigned char *)bp, llen,
1149
+ sp->stride, up, sp->From8);
1150
+ bp += llen * sizeof(unsigned char);
1151
+ break;
1152
+ default:
1153
+ TIFFErrorExt(tif->tif_clientdata, module,
1154
+ "%d bit input not supported in PixarLog",
1155
+ td->td_bitspersample);
1156
+ return 0;
1157
+ }
1158
+ }
1159
+
1160
+ sp->stream.next_in = (unsigned char *) sp->tbuf;
1161
+ assert(sizeof(sp->stream.avail_in)==4); /* if this assert gets raised,
1162
+ we need to simplify this code to reflect a ZLib that is likely updated
1163
+ to deal with 8byte memory sizes, though this code will respond
1164
+ apropriately even before we simplify it */
1165
+ sp->stream.avail_in = (uInt) (n * sizeof(uint16));
1166
+ if ((sp->stream.avail_in / sizeof(uint16)) != (uInt) n)
1167
+ {
1168
+ TIFFErrorExt(tif->tif_clientdata, module,
1169
+ "ZLib cannot deal with buffers this size");
1170
+ return (0);
1171
+ }
1172
+
1173
+ do {
1174
+ if (deflate(&sp->stream, Z_NO_FLUSH) != Z_OK) {
1175
+ TIFFErrorExt(tif->tif_clientdata, module, "Encoder error: %s",
1176
+ sp->stream.msg);
1177
+ return (0);
1178
+ }
1179
+ if (sp->stream.avail_out == 0) {
1180
+ tif->tif_rawcc = tif->tif_rawdatasize;
1181
+ TIFFFlushData1(tif);
1182
+ sp->stream.next_out = tif->tif_rawdata;
1183
+ sp->stream.avail_out = (uInt) tif->tif_rawdatasize; /* this is a safe typecast, as check is made already in PixarLogPreEncode */
1184
+ }
1185
+ } while (sp->stream.avail_in > 0);
1186
+ return (1);
1187
+ }
1188
+
1189
+ /*
1190
+ * Finish off an encoded strip by flushing the last
1191
+ * string and tacking on an End Of Information code.
1192
+ */
1193
+
1194
+ static int
1195
+ PixarLogPostEncode(TIFF* tif)
1196
+ {
1197
+ static const char module[] = "PixarLogPostEncode";
1198
+ PixarLogState *sp = EncoderState(tif);
1199
+ int state;
1200
+
1201
+ sp->stream.avail_in = 0;
1202
+
1203
+ do {
1204
+ state = deflate(&sp->stream, Z_FINISH);
1205
+ switch (state) {
1206
+ case Z_STREAM_END:
1207
+ case Z_OK:
1208
+ if ((tmsize_t)sp->stream.avail_out != tif->tif_rawdatasize) {
1209
+ tif->tif_rawcc =
1210
+ tif->tif_rawdatasize - sp->stream.avail_out;
1211
+ TIFFFlushData1(tif);
1212
+ sp->stream.next_out = tif->tif_rawdata;
1213
+ sp->stream.avail_out = (uInt) tif->tif_rawdatasize; /* this is a safe typecast, as check is made already in PixarLogPreEncode */
1214
+ }
1215
+ break;
1216
+ default:
1217
+ TIFFErrorExt(tif->tif_clientdata, module, "ZLib error: %s",
1218
+ sp->stream.msg);
1219
+ return (0);
1220
+ }
1221
+ } while (state != Z_STREAM_END);
1222
+ return (1);
1223
+ }
1224
+
1225
+ static void
1226
+ PixarLogClose(TIFF* tif)
1227
+ {
1228
+ TIFFDirectory *td = &tif->tif_dir;
1229
+
1230
+ /* In a really sneaky (and really incorrect, and untruthfull, and
1231
+ * troublesome, and error-prone) maneuver that completely goes against
1232
+ * the spirit of TIFF, and breaks TIFF, on close, we covertly
1233
+ * modify both bitspersample and sampleformat in the directory to
1234
+ * indicate 8-bit linear. This way, the decode "just works" even for
1235
+ * readers that don't know about PixarLog, or how to set
1236
+ * the PIXARLOGDATFMT pseudo-tag.
1237
+ */
1238
+ td->td_bitspersample = 8;
1239
+ td->td_sampleformat = SAMPLEFORMAT_UINT;
1240
+ }
1241
+
1242
+ static void
1243
+ PixarLogCleanup(TIFF* tif)
1244
+ {
1245
+ PixarLogState* sp = (PixarLogState*) tif->tif_data;
1246
+
1247
+ assert(sp != 0);
1248
+
1249
+ (void)TIFFPredictorCleanup(tif);
1250
+
1251
+ tif->tif_tagmethods.vgetfield = sp->vgetparent;
1252
+ tif->tif_tagmethods.vsetfield = sp->vsetparent;
1253
+
1254
+ if (sp->FromLT2) _TIFFfree(sp->FromLT2);
1255
+ if (sp->From14) _TIFFfree(sp->From14);
1256
+ if (sp->From8) _TIFFfree(sp->From8);
1257
+ if (sp->ToLinearF) _TIFFfree(sp->ToLinearF);
1258
+ if (sp->ToLinear16) _TIFFfree(sp->ToLinear16);
1259
+ if (sp->ToLinear8) _TIFFfree(sp->ToLinear8);
1260
+ if (sp->state&PLSTATE_INIT) {
1261
+ if (tif->tif_mode == O_RDONLY)
1262
+ inflateEnd(&sp->stream);
1263
+ else
1264
+ deflateEnd(&sp->stream);
1265
+ }
1266
+ if (sp->tbuf)
1267
+ _TIFFfree(sp->tbuf);
1268
+ _TIFFfree(sp);
1269
+ tif->tif_data = NULL;
1270
+
1271
+ _TIFFSetDefaultCompressionState(tif);
1272
+ }
1273
+
1274
+ static int
1275
+ PixarLogVSetField(TIFF* tif, uint32 tag, va_list ap)
1276
+ {
1277
+ static const char module[] = "PixarLogVSetField";
1278
+ PixarLogState *sp = (PixarLogState *)tif->tif_data;
1279
+ int result;
1280
+
1281
+ switch (tag) {
1282
+ case TIFFTAG_PIXARLOGQUALITY:
1283
+ sp->quality = (int) va_arg(ap, int);
1284
+ if (tif->tif_mode != O_RDONLY && (sp->state&PLSTATE_INIT)) {
1285
+ if (deflateParams(&sp->stream,
1286
+ sp->quality, Z_DEFAULT_STRATEGY) != Z_OK) {
1287
+ TIFFErrorExt(tif->tif_clientdata, module, "ZLib error: %s",
1288
+ sp->stream.msg);
1289
+ return (0);
1290
+ }
1291
+ }
1292
+ return (1);
1293
+ case TIFFTAG_PIXARLOGDATAFMT:
1294
+ sp->user_datafmt = (int) va_arg(ap, int);
1295
+ /* Tweak the TIFF header so that the rest of libtiff knows what
1296
+ * size of data will be passed between app and library, and
1297
+ * assume that the app knows what it is doing and is not
1298
+ * confused by these header manipulations...
1299
+ */
1300
+ switch (sp->user_datafmt) {
1301
+ case PIXARLOGDATAFMT_8BIT:
1302
+ case PIXARLOGDATAFMT_8BITABGR:
1303
+ TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8);
1304
+ TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_UINT);
1305
+ break;
1306
+ case PIXARLOGDATAFMT_11BITLOG:
1307
+ TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 16);
1308
+ TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_UINT);
1309
+ break;
1310
+ case PIXARLOGDATAFMT_12BITPICIO:
1311
+ TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 16);
1312
+ TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_INT);
1313
+ break;
1314
+ case PIXARLOGDATAFMT_16BIT:
1315
+ TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 16);
1316
+ TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_UINT);
1317
+ break;
1318
+ case PIXARLOGDATAFMT_FLOAT:
1319
+ TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 32);
1320
+ TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_IEEEFP);
1321
+ break;
1322
+ }
1323
+ /*
1324
+ * Must recalculate sizes should bits/sample change.
1325
+ */
1326
+ tif->tif_tilesize = isTiled(tif) ? TIFFTileSize(tif) : (tmsize_t)(-1);
1327
+ tif->tif_scanlinesize = TIFFScanlineSize(tif);
1328
+ result = 1; /* NB: pseudo tag */
1329
+ break;
1330
+ default:
1331
+ result = (*sp->vsetparent)(tif, tag, ap);
1332
+ }
1333
+ return (result);
1334
+ }
1335
+
1336
+ static int
1337
+ PixarLogVGetField(TIFF* tif, uint32 tag, va_list ap)
1338
+ {
1339
+ PixarLogState *sp = (PixarLogState *)tif->tif_data;
1340
+
1341
+ switch (tag) {
1342
+ case TIFFTAG_PIXARLOGQUALITY:
1343
+ *va_arg(ap, int*) = sp->quality;
1344
+ break;
1345
+ case TIFFTAG_PIXARLOGDATAFMT:
1346
+ *va_arg(ap, int*) = sp->user_datafmt;
1347
+ break;
1348
+ default:
1349
+ return (*sp->vgetparent)(tif, tag, ap);
1350
+ }
1351
+ return (1);
1352
+ }
1353
+
1354
+ static const TIFFField pixarlogFields[] = {
1355
+ {TIFFTAG_PIXARLOGDATAFMT, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE, "", NULL},
1356
+ {TIFFTAG_PIXARLOGQUALITY, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE, "", NULL}
1357
+ };
1358
+
1359
+ int
1360
+ TIFFInitPixarLog(TIFF* tif, int scheme)
1361
+ {
1362
+ static const char module[] = "TIFFInitPixarLog";
1363
+
1364
+ PixarLogState* sp;
1365
+
1366
+ assert(scheme == COMPRESSION_PIXARLOG);
1367
+
1368
+ /*
1369
+ * Merge codec-specific tag information.
1370
+ */
1371
+ if (!_TIFFMergeFields(tif, pixarlogFields,
1372
+ TIFFArrayCount(pixarlogFields))) {
1373
+ TIFFErrorExt(tif->tif_clientdata, module,
1374
+ "Merging PixarLog codec-specific tags failed");
1375
+ return 0;
1376
+ }
1377
+
1378
+ /*
1379
+ * Allocate state block so tag methods have storage to record values.
1380
+ */
1381
+ tif->tif_data = (uint8*) _TIFFmalloc(sizeof (PixarLogState));
1382
+ if (tif->tif_data == NULL)
1383
+ goto bad;
1384
+ sp = (PixarLogState*) tif->tif_data;
1385
+ _TIFFmemset(sp, 0, sizeof (*sp));
1386
+ sp->stream.data_type = Z_BINARY;
1387
+ sp->user_datafmt = PIXARLOGDATAFMT_UNKNOWN;
1388
+
1389
+ /*
1390
+ * Install codec methods.
1391
+ */
1392
+ tif->tif_fixuptags = PixarLogFixupTags;
1393
+ tif->tif_setupdecode = PixarLogSetupDecode;
1394
+ tif->tif_predecode = PixarLogPreDecode;
1395
+ tif->tif_decoderow = PixarLogDecode;
1396
+ tif->tif_decodestrip = PixarLogDecode;
1397
+ tif->tif_decodetile = PixarLogDecode;
1398
+ tif->tif_setupencode = PixarLogSetupEncode;
1399
+ tif->tif_preencode = PixarLogPreEncode;
1400
+ tif->tif_postencode = PixarLogPostEncode;
1401
+ tif->tif_encoderow = PixarLogEncode;
1402
+ tif->tif_encodestrip = PixarLogEncode;
1403
+ tif->tif_encodetile = PixarLogEncode;
1404
+ tif->tif_close = PixarLogClose;
1405
+ tif->tif_cleanup = PixarLogCleanup;
1406
+
1407
+ /* Override SetField so we can handle our private pseudo-tag */
1408
+ sp->vgetparent = tif->tif_tagmethods.vgetfield;
1409
+ tif->tif_tagmethods.vgetfield = PixarLogVGetField; /* hook for codec tags */
1410
+ sp->vsetparent = tif->tif_tagmethods.vsetfield;
1411
+ tif->tif_tagmethods.vsetfield = PixarLogVSetField; /* hook for codec tags */
1412
+
1413
+ /* Default values for codec-specific fields */
1414
+ sp->quality = Z_DEFAULT_COMPRESSION; /* default comp. level */
1415
+ sp->state = 0;
1416
+
1417
+ /* we don't wish to use the predictor,
1418
+ * the default is none, which predictor value 1
1419
+ */
1420
+ (void) TIFFPredictorInit(tif);
1421
+
1422
+ /*
1423
+ * build the companding tables
1424
+ */
1425
+ PixarLogMakeTables(sp);
1426
+
1427
+ return (1);
1428
+ bad:
1429
+ TIFFErrorExt(tif->tif_clientdata, module,
1430
+ "No space for PixarLog state block");
1431
+ return (0);
1432
+ }
1433
+ #endif /* PIXARLOG_SUPPORT */
1434
+
1435
+ /* vim: set ts=8 sts=8 sw=8 noet: */
1436
+ /*
1437
+ * Local Variables:
1438
+ * mode: c
1439
+ * c-basic-offset: 8
1440
+ * fill-column: 78
1441
+ * End:
1442
+ */