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,1552 @@
1
+ ///////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // Copyright (c) 2011, Industrial Light & Magic, a division of Lucas
4
+ // Digital Ltd. LLC
5
+ //
6
+ // All rights reserved.
7
+ //
8
+ // Redistribution and use in source and binary forms, with or without
9
+ // modification, are permitted provided that the following conditions are
10
+ // met:
11
+ // * Redistributions of source code must retain the above copyright
12
+ // notice, this list of conditions and the following disclaimer.
13
+ // * Redistributions in binary form must reproduce the above
14
+ // copyright notice, this list of conditions and the following disclaimer
15
+ // in the documentation and/or other materials provided with the
16
+ // distribution.
17
+ // * Neither the name of Industrial Light & Magic nor the names of
18
+ // its contributors may be used to endorse or promote products derived
19
+ // from this software without specific prior written permission.
20
+ //
21
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
+ //
33
+ ///////////////////////////////////////////////////////////////////////////
34
+
35
+
36
+ //-----------------------------------------------------------------------------
37
+ //
38
+ // class DeepScanLineOutputFile
39
+ //
40
+ //-----------------------------------------------------------------------------
41
+
42
+ #include <ImfDeepScanLineOutputFile.h>
43
+ #include <ImfDeepScanLineInputFile.h>
44
+ #include <ImfDeepScanLineInputPart.h>
45
+ #include <ImfChannelList.h>
46
+ #include <ImfMisc.h>
47
+ #include <ImfStdIO.h>
48
+ #include <ImfCompressor.h>
49
+ #include "ImathBox.h"
50
+ #include "ImathFun.h"
51
+ #include <ImfArray.h>
52
+ #include <ImfXdr.h>
53
+ #include <ImfPreviewImageAttribute.h>
54
+ #include <ImfPartType.h>
55
+ #include "ImfDeepFrameBuffer.h"
56
+ #include "ImfOutputStreamMutex.h"
57
+ #include "ImfOutputPartData.h"
58
+
59
+ #include "IlmThreadPool.h"
60
+ #include "IlmThreadSemaphore.h"
61
+ #include "IlmThreadMutex.h"
62
+ #include "Iex.h"
63
+ #include <string>
64
+ #include <vector>
65
+ #include <fstream>
66
+ #include <assert.h>
67
+ #include <algorithm>
68
+
69
+ #include "ImfNamespace.h"
70
+
71
+ OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER
72
+
73
+ using IMATH_NAMESPACE::Box2i;
74
+ using IMATH_NAMESPACE::divp;
75
+ using IMATH_NAMESPACE::modp;
76
+ using std::string;
77
+ using std::vector;
78
+ using std::ofstream;
79
+ using std::min;
80
+ using std::max;
81
+ using ILMTHREAD_NAMESPACE::Mutex;
82
+ using ILMTHREAD_NAMESPACE::Lock;
83
+ using ILMTHREAD_NAMESPACE::Semaphore;
84
+ using ILMTHREAD_NAMESPACE::Task;
85
+ using ILMTHREAD_NAMESPACE::TaskGroup;
86
+ using ILMTHREAD_NAMESPACE::ThreadPool;
87
+
88
+ namespace {
89
+
90
+
91
+ struct OutSliceInfo
92
+ {
93
+ PixelType type;
94
+ const char * base;
95
+ ptrdiff_t sampleStride;
96
+ ptrdiff_t xStride;
97
+ ptrdiff_t yStride;
98
+ int xSampling;
99
+ int ySampling;
100
+ bool zero;
101
+
102
+ OutSliceInfo (PixelType type = HALF,
103
+ const char * base =NULL,
104
+ ptrdiff_t sampleStride = 0,
105
+ ptrdiff_t xStride = 0,
106
+ ptrdiff_t yStride =0,
107
+ int xSampling = 1,
108
+ int ySampling = 1,
109
+ bool zero = false);
110
+ };
111
+
112
+
113
+ OutSliceInfo::OutSliceInfo (PixelType t,
114
+ const char * base,
115
+ ptrdiff_t spstride,
116
+ ptrdiff_t xst,
117
+ ptrdiff_t yst,
118
+ int xsm, int ysm,
119
+ bool z)
120
+ :
121
+ type (t),
122
+ base (base),
123
+ sampleStride (spstride),
124
+ xStride(xst),
125
+ yStride(yst),
126
+ xSampling (xsm),
127
+ ySampling (ysm),
128
+ zero (z)
129
+ {
130
+ // empty
131
+ }
132
+
133
+
134
+ struct LineBuffer
135
+ {
136
+ Array< Array<char> > buffer;
137
+ Array<char> consecutiveBuffer;
138
+ const char * dataPtr;
139
+ Int64 uncompressedDataSize;
140
+ Int64 dataSize;
141
+ Array<char> sampleCountTableBuffer;
142
+ const char * sampleCountTablePtr;
143
+ Int64 sampleCountTableSize;
144
+ Compressor* sampleCountTableCompressor;
145
+ int minY; // the min y scanline stored
146
+ int maxY; // the max y scanline stored
147
+ int scanLineMin; // the min y scanline writing out
148
+ int scanLineMax; // the max y scanline writing out
149
+ Compressor * compressor;
150
+ bool partiallyFull; // has incomplete data
151
+ bool hasException;
152
+ string exception;
153
+
154
+ LineBuffer (int linesInBuffer);
155
+ ~LineBuffer ();
156
+
157
+ void wait () {_sem.wait();}
158
+ void post () {_sem.post();}
159
+
160
+ private:
161
+
162
+ Semaphore _sem;
163
+ };
164
+
165
+
166
+ LineBuffer::LineBuffer (int linesInBuffer) :
167
+ dataPtr (0),
168
+ dataSize (0),
169
+ sampleCountTablePtr (0),
170
+ sampleCountTableCompressor (0),
171
+ compressor (0),
172
+ partiallyFull (false),
173
+ hasException (false),
174
+ exception (),
175
+ _sem (1)
176
+ {
177
+ buffer.resizeErase(linesInBuffer);
178
+ }
179
+
180
+
181
+ LineBuffer::~LineBuffer ()
182
+ {
183
+ if (compressor != 0)
184
+ delete compressor;
185
+
186
+ if (sampleCountTableCompressor != 0)
187
+ delete sampleCountTableCompressor;
188
+ }
189
+
190
+ } // namespace
191
+
192
+
193
+ struct DeepScanLineOutputFile::Data
194
+ {
195
+ Header header; // the image header
196
+ int version; // file format version
197
+ bool multipart; // from a multipart file
198
+ Int64 previewPosition; // file position for preview
199
+ DeepFrameBuffer frameBuffer; // framebuffer to write into
200
+ int currentScanLine; // next scanline to be written
201
+ int missingScanLines; // number of lines to write
202
+ LineOrder lineOrder; // the file's lineorder
203
+ int minX; // data window's min x coord
204
+ int maxX; // data window's max x coord
205
+ int minY; // data window's min y coord
206
+ int maxY; // data window's max x coord
207
+ vector<Int64> lineOffsets; // stores offsets in file for
208
+ // each scanline
209
+ vector<size_t> bytesPerLine; // combined size of a line over
210
+ // all channels
211
+ Compressor::Format format; // compressor's data format
212
+ vector<OutSliceInfo*> slices; // info about channels in file
213
+ Int64 lineOffsetsPosition; // file position for line
214
+ // offset table
215
+
216
+ vector<LineBuffer*> lineBuffers; // each holds one line buffer
217
+ int linesInBuffer; // number of scanlines each
218
+ // buffer holds
219
+ int partNumber; // the output part number
220
+
221
+ char* sampleCountSliceBase; // the pointer to the number
222
+ // of samples in each pixel
223
+ int sampleCountXStride; // the x stride for sampleCountSliceBase
224
+ int sampleCountYStride; // the y stride for sampleCountSliceBase
225
+
226
+ Array<unsigned int> lineSampleCount; // the number of samples
227
+ // in each line
228
+
229
+ Int64 maxSampleCountTableSize;
230
+ // the max size in bytes for a pixel
231
+ // sample count table
232
+ OutputStreamMutex* _streamData;
233
+ bool _deleteStream;
234
+
235
+ Data (int numThreads);
236
+ ~Data ();
237
+
238
+
239
+ inline LineBuffer * getLineBuffer (int number);// hash function from line
240
+ // buffer indices into our
241
+ // vector of line buffers
242
+
243
+ inline int& getSampleCount(int x, int y); // get the number of samples
244
+ // in each pixel
245
+ };
246
+
247
+
248
+ DeepScanLineOutputFile::Data::Data (int numThreads):
249
+ lineOffsetsPosition (0),
250
+ partNumber (-1) ,
251
+ _streamData(NULL),
252
+ _deleteStream(false)
253
+ {
254
+ //
255
+ // We need at least one lineBuffer, but if threading is used,
256
+ // to keep n threads busy we need 2*n lineBuffers.
257
+ //
258
+
259
+ lineBuffers.resize (max (1, 2 * numThreads));
260
+ for (size_t i = 0; i < lineBuffers.size(); i++)
261
+ lineBuffers[i] = 0;
262
+ }
263
+
264
+
265
+ DeepScanLineOutputFile::Data::~Data ()
266
+ {
267
+ for (size_t i = 0; i < lineBuffers.size(); i++)
268
+ if (lineBuffers[i] != 0)
269
+ delete lineBuffers[i];
270
+
271
+ for (size_t i = 0; i < slices.size(); i++)
272
+ delete slices[i];
273
+ }
274
+
275
+
276
+ int&
277
+ DeepScanLineOutputFile::Data::getSampleCount(int x, int y)
278
+ {
279
+ return sampleCount(sampleCountSliceBase,
280
+ sampleCountXStride,
281
+ sampleCountYStride,
282
+ x, y);
283
+ }
284
+
285
+
286
+ LineBuffer*
287
+ DeepScanLineOutputFile::Data::getLineBuffer (int number)
288
+ {
289
+ return lineBuffers[number % lineBuffers.size()];
290
+ }
291
+
292
+
293
+ namespace {
294
+
295
+ Int64
296
+ writeLineOffsets (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, const vector<Int64> &lineOffsets)
297
+ {
298
+ Int64 pos = os.tellp();
299
+
300
+ if (pos == -1)
301
+ IEX_NAMESPACE::throwErrnoExc ("Cannot determine current file position (%T).");
302
+
303
+ for (unsigned int i = 0; i < lineOffsets.size(); i++)
304
+ OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write <OPENEXR_IMF_INTERNAL_NAMESPACE::StreamIO> (os, lineOffsets[i]);
305
+
306
+ return pos;
307
+ }
308
+
309
+
310
+ void
311
+ writePixelData (OutputStreamMutex *filedata,
312
+ DeepScanLineOutputFile::Data *partdata,
313
+ int lineBufferMinY,
314
+ const char pixelData[],
315
+ Int64 packedDataSize,
316
+ Int64 unpackedDataSize,
317
+ const char sampleCountTableData[],
318
+ Int64 sampleCountTableSize)
319
+ {
320
+ //
321
+ // Store a block of pixel data in the output file, and try
322
+ // to keep track of the current writing position the file
323
+ // without calling tellp() (tellp() can be fairly expensive).
324
+ //
325
+
326
+ Int64 currentPosition = filedata->currentPosition;
327
+ filedata->currentPosition = 0;
328
+
329
+ if (currentPosition == 0)
330
+ currentPosition = filedata->os->tellp();
331
+
332
+ partdata->lineOffsets[(partdata->currentScanLine - partdata->minY) / partdata->linesInBuffer] =
333
+ currentPosition;
334
+
335
+ #ifdef DEBUG
336
+
337
+ assert (filedata->os->tellp() == currentPosition);
338
+
339
+ #endif
340
+
341
+ //
342
+ // Write the optional part number.
343
+ //
344
+
345
+ if (partdata->multipart)
346
+ {
347
+ OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write <OPENEXR_IMF_INTERNAL_NAMESPACE::StreamIO> (*filedata->os, partdata->partNumber);
348
+ }
349
+
350
+ //
351
+ // Write the y coordinate of the first scanline in the chunk.
352
+ //
353
+
354
+ OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write <OPENEXR_IMF_INTERNAL_NAMESPACE::StreamIO> (*filedata->os, lineBufferMinY);
355
+
356
+ //
357
+ // Write the packed size of the pixel sample count table.
358
+ //
359
+
360
+ OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write <OPENEXR_IMF_INTERNAL_NAMESPACE::StreamIO> (*filedata->os, sampleCountTableSize);
361
+
362
+ //
363
+ // Write the packed pixel data size.
364
+ //
365
+
366
+ OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write <OPENEXR_IMF_INTERNAL_NAMESPACE::StreamIO> (*filedata->os, packedDataSize);
367
+
368
+ //
369
+ // Write the unpacked pixel data size.
370
+ //
371
+
372
+ OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write <OPENEXR_IMF_INTERNAL_NAMESPACE::StreamIO> (*filedata->os, unpackedDataSize);
373
+
374
+ //
375
+ // Write the packed pixel sample count table.
376
+ //
377
+
378
+ filedata->os->write (sampleCountTableData, sampleCountTableSize);
379
+
380
+ //
381
+ // Write the compressed data.
382
+ //
383
+
384
+ filedata->os->write (pixelData, packedDataSize);
385
+
386
+ //
387
+ // Update stream position.
388
+ //
389
+
390
+ filedata->currentPosition = currentPosition +
391
+ Xdr::size<int>() + // y coordinate
392
+ Xdr::size<Int64>() + // packed sample count table size
393
+ Xdr::size<Int64>() + // packed data size
394
+ Xdr::size<Int64>() + // unpacked data size
395
+ sampleCountTableSize + // pixel sample count table
396
+ packedDataSize; // pixel data
397
+
398
+ if (partdata->multipart)
399
+ {
400
+ filedata->currentPosition += Xdr::size<int>(); // optional part number
401
+ }
402
+ }
403
+
404
+
405
+ inline void
406
+ writePixelData (OutputStreamMutex* filedata,
407
+ DeepScanLineOutputFile::Data *partdata,
408
+ const LineBuffer *lineBuffer)
409
+ {
410
+ writePixelData (filedata, partdata,
411
+ lineBuffer->minY,
412
+ lineBuffer->dataPtr,
413
+ lineBuffer->dataSize,
414
+ lineBuffer->uncompressedDataSize,
415
+ lineBuffer->sampleCountTablePtr,
416
+ lineBuffer->sampleCountTableSize);
417
+ }
418
+
419
+
420
+ void
421
+ convertToXdr (DeepScanLineOutputFile::Data *ofd,
422
+ Array<char> &lineBuffer,
423
+ int lineBufferMinY,
424
+ int lineBufferMaxY,
425
+ int inSize)
426
+ {
427
+ //
428
+ // Convert the contents of a lineBuffer from the machine's native
429
+ // representation to Xdr format. This function is called by
430
+ // CompressLineBuffer::execute(), below, if the compressor wanted
431
+ // its input pixel data in the machine's native format, but then
432
+ // failed to compress the data (most compressors will expand rather
433
+ // than compress random input data).
434
+ //
435
+ // Note that this routine assumes that the machine's native
436
+ // representation of the pixel data has the same size as the
437
+ // Xdr representation. This makes it possible to convert the
438
+ // pixel data in place, without an intermediate temporary buffer.
439
+ //
440
+
441
+ //
442
+ // Iterate over all scanlines in the lineBuffer to convert.
443
+ //
444
+
445
+ char* writePtr = &lineBuffer[0];
446
+ for (int y = lineBufferMinY; y <= lineBufferMaxY; y++)
447
+ {
448
+ //
449
+ // Set these to point to the start of line y.
450
+ // We will write to writePtr from readPtr.
451
+ //
452
+
453
+ const char *readPtr = writePtr;
454
+
455
+ //
456
+ // Iterate over all slices in the file.
457
+ //
458
+
459
+ for (unsigned int i = 0; i < ofd->slices.size(); ++i)
460
+ {
461
+ //
462
+ // Test if scan line y of this channel is
463
+ // contains any data (the scan line contains
464
+ // data only if y % ySampling == 0).
465
+ //
466
+
467
+ const OutSliceInfo &slice = *ofd->slices[i];
468
+
469
+ if (modp (y, slice.ySampling) != 0)
470
+ continue;
471
+
472
+ //
473
+ // Find the number of sampled pixels, dMaxX-dMinX+1, for
474
+ // slice i in scan line y (i.e. pixels within the data window
475
+ // for which x % xSampling == 0).
476
+ //
477
+
478
+ int xSampleCount = ofd->lineSampleCount[y - ofd->minY];
479
+
480
+ //
481
+ // Convert the samples in place.
482
+ //
483
+
484
+ convertInPlace (writePtr, readPtr, slice.type, xSampleCount);
485
+ }
486
+ }
487
+ }
488
+
489
+
490
+ //
491
+ // A LineBufferTask encapsulates the task of copying a set of scanlines
492
+ // from the user's frame buffer into a LineBuffer object, compressing
493
+ // the data if necessary.
494
+ //
495
+
496
+ class LineBufferTask: public Task
497
+ {
498
+ public:
499
+
500
+ LineBufferTask (TaskGroup *group,
501
+ DeepScanLineOutputFile::Data *ofd,
502
+ int number,
503
+ int scanLineMin,
504
+ int scanLineMax);
505
+
506
+ virtual ~LineBufferTask ();
507
+
508
+ virtual void execute ();
509
+
510
+ private:
511
+
512
+ DeepScanLineOutputFile::Data * _ofd;
513
+ LineBuffer * _lineBuffer;
514
+ };
515
+
516
+
517
+ LineBufferTask::LineBufferTask
518
+ (TaskGroup *group,
519
+ DeepScanLineOutputFile::Data *ofd,
520
+ int number,
521
+ int scanLineMin,
522
+ int scanLineMax)
523
+ :
524
+ Task (group),
525
+ _ofd (ofd),
526
+ _lineBuffer (_ofd->getLineBuffer(number))
527
+ {
528
+ //
529
+ // Wait for the lineBuffer to become available
530
+ //
531
+
532
+ _lineBuffer->wait ();
533
+
534
+ //
535
+ // Initialize the lineBuffer data if necessary
536
+ //
537
+
538
+ if (!_lineBuffer->partiallyFull)
539
+ {
540
+
541
+ _lineBuffer->minY = _ofd->minY + number * _ofd->linesInBuffer;
542
+
543
+ _lineBuffer->maxY = min (_lineBuffer->minY + _ofd->linesInBuffer - 1,
544
+ _ofd->maxY);
545
+
546
+ _lineBuffer->partiallyFull = true;
547
+ }
548
+
549
+ _lineBuffer->scanLineMin = max (_lineBuffer->minY, scanLineMin);
550
+ _lineBuffer->scanLineMax = min (_lineBuffer->maxY, scanLineMax);
551
+ }
552
+
553
+
554
+ LineBufferTask::~LineBufferTask ()
555
+ {
556
+ //
557
+ // Signal that the line buffer is now free
558
+ //
559
+
560
+ _lineBuffer->post ();
561
+ }
562
+
563
+
564
+ void
565
+ LineBufferTask::execute ()
566
+ {
567
+ try
568
+ {
569
+ //
570
+ // First copy the pixel data from the
571
+ // frame buffer into the line buffer
572
+ //
573
+
574
+ int yStart, yStop, dy;
575
+
576
+ if (_ofd->lineOrder == INCREASING_Y)
577
+ {
578
+ yStart = _lineBuffer->scanLineMin;
579
+ yStop = _lineBuffer->scanLineMax + 1;
580
+ dy = 1;
581
+ }
582
+ else
583
+ {
584
+ yStart = _lineBuffer->scanLineMax;
585
+ yStop = _lineBuffer->scanLineMin - 1;
586
+ dy = -1;
587
+ }
588
+
589
+ //
590
+ // Allocate buffers for scanlines.
591
+ // And calculate the sample counts for each line.
592
+ //
593
+
594
+ bytesPerDeepLineTable (_ofd->header,
595
+ _lineBuffer->scanLineMin,
596
+ _lineBuffer->scanLineMax,
597
+ _ofd->sampleCountSliceBase,
598
+ _ofd->sampleCountXStride,
599
+ _ofd->sampleCountYStride,
600
+ _ofd->bytesPerLine);
601
+ for (int i = _lineBuffer->scanLineMin; i <= _lineBuffer->scanLineMax; i++)
602
+ {
603
+ // (TODO) don't do this all the time.
604
+ _lineBuffer->buffer[i - _lineBuffer->minY].resizeErase(
605
+ _ofd->bytesPerLine[i - _ofd->minY]);
606
+
607
+ for (int j = _ofd->minX; j <= _ofd->maxX; j++)
608
+ _ofd->lineSampleCount[i - _ofd->minY] += _ofd->getSampleCount(j, i);
609
+ }
610
+
611
+ //
612
+ // Copy data from frame buffer to line buffer.
613
+ //
614
+
615
+ int y;
616
+
617
+ for (y = yStart; y != yStop; y += dy)
618
+ {
619
+ //
620
+ // Gather one scan line's worth of pixel data and store
621
+ // them in _ofd->lineBuffer.
622
+ //
623
+
624
+ char *writePtr = &_lineBuffer->buffer[y - _lineBuffer->minY][0];
625
+ //
626
+ // Iterate over all image channels.
627
+ //
628
+
629
+ for (unsigned int i = 0; i < _ofd->slices.size(); ++i)
630
+ {
631
+ //
632
+ // Test if scan line y of this channel contains any data
633
+ // (the scan line contains data only if y % ySampling == 0).
634
+ //
635
+
636
+ const OutSliceInfo &slice = *_ofd->slices[i];
637
+
638
+ if (modp (y, slice.ySampling) != 0)
639
+ continue;
640
+
641
+ //
642
+ // Fill the line buffer with with pixel data.
643
+ //
644
+
645
+ if (slice.zero)
646
+ {
647
+ //
648
+ // The frame buffer contains no data for this channel.
649
+ // Store zeroes in _lineBuffer->buffer.
650
+ //
651
+
652
+ fillChannelWithZeroes (writePtr, _ofd->format, slice.type,
653
+ _ofd->lineSampleCount[y - _ofd->minY]);
654
+ }
655
+ else
656
+ {
657
+
658
+ copyFromDeepFrameBuffer (writePtr, slice.base,
659
+ _ofd->sampleCountSliceBase,
660
+ _ofd->sampleCountXStride,
661
+ _ofd->sampleCountYStride,
662
+ y, _ofd->minX, _ofd->maxX,
663
+ 0, 0,//offsets for samplecount
664
+ 0, 0,//offsets for data
665
+ slice.sampleStride,
666
+ slice.xStride,
667
+ slice.yStride,
668
+ _ofd->format,
669
+ slice.type);
670
+ }
671
+ }
672
+ }
673
+
674
+ //
675
+ // If the next scanline isn't past the bounds of the lineBuffer
676
+ // then we have partially filled the linebuffer,
677
+ // otherwise the whole linebuffer is filled and then
678
+ // we compress the linebuffer and write it out.
679
+ //
680
+
681
+ if (y >= _lineBuffer->minY && y <= _lineBuffer->maxY)
682
+ return;
683
+
684
+ //
685
+ // Copy all data into a consecutive buffer.
686
+ //
687
+
688
+ Int64 totalBytes = 0;
689
+ Int64 maxBytesPerLine = 0;
690
+ for (int i = 0; i < _lineBuffer->maxY - _lineBuffer->minY + 1; i++)
691
+ {
692
+ totalBytes += _lineBuffer->buffer[i].size();
693
+ if (Int64(_lineBuffer->buffer[i].size()) > maxBytesPerLine)
694
+ maxBytesPerLine = _lineBuffer->buffer[i].size();
695
+ }
696
+ _lineBuffer->consecutiveBuffer.resizeErase(totalBytes);
697
+
698
+ int pos = 0;
699
+ for (int i = 0; i < _lineBuffer->maxY - _lineBuffer->minY + 1; i++)
700
+ {
701
+ memcpy(_lineBuffer->consecutiveBuffer + pos,
702
+ &_lineBuffer->buffer[i][0],
703
+ _lineBuffer->buffer[i].size());
704
+ pos += _lineBuffer->buffer[i].size();
705
+ }
706
+
707
+ _lineBuffer->dataPtr = _lineBuffer->consecutiveBuffer;
708
+
709
+ _lineBuffer->dataSize = totalBytes;
710
+ _lineBuffer->uncompressedDataSize = _lineBuffer->dataSize;
711
+
712
+ //
713
+ // Compress the pixel sample count table.
714
+ //
715
+
716
+ char* ptr = _lineBuffer->sampleCountTableBuffer;
717
+ Int64 tableDataSize = 0;
718
+ for (int i = _lineBuffer->minY; i <= _lineBuffer->maxY; i++)
719
+ {
720
+ int count = 0;
721
+ for (int j = _ofd->minX; j <= _ofd->maxX; j++)
722
+ {
723
+ count += _ofd->getSampleCount(j, i);
724
+ Xdr::write <CharPtrIO> (ptr, count);
725
+ tableDataSize += sizeof (int);
726
+ }
727
+ }
728
+
729
+ if(_lineBuffer->sampleCountTableCompressor)
730
+ {
731
+ _lineBuffer->sampleCountTableSize =
732
+ _lineBuffer->sampleCountTableCompressor->compress (
733
+ _lineBuffer->sampleCountTableBuffer,
734
+ tableDataSize,
735
+ _lineBuffer->minY,
736
+ _lineBuffer->sampleCountTablePtr);
737
+ }
738
+
739
+ //
740
+ // If we can't make data shrink (or we weren't compressing), then just use the raw data.
741
+ //
742
+
743
+ if (!_lineBuffer->sampleCountTableCompressor ||
744
+ _lineBuffer->sampleCountTableSize >= tableDataSize)
745
+ {
746
+ _lineBuffer->sampleCountTableSize = tableDataSize;
747
+ _lineBuffer->sampleCountTablePtr = _lineBuffer->sampleCountTableBuffer;
748
+ }
749
+
750
+ //
751
+ // Compress the sample data
752
+ //
753
+
754
+ // (TODO) don't do this all the time.
755
+ if (_lineBuffer->compressor != 0)
756
+ delete _lineBuffer->compressor;
757
+ _lineBuffer->compressor = newCompressor (_ofd->header.compression(),
758
+ maxBytesPerLine,
759
+ _ofd->header);
760
+
761
+ Compressor *compressor = _lineBuffer->compressor;
762
+
763
+ if (compressor)
764
+ {
765
+ const char *compPtr;
766
+
767
+ Int64 compSize = compressor->compress (_lineBuffer->dataPtr,
768
+ _lineBuffer->dataSize,
769
+ _lineBuffer->minY, compPtr);
770
+
771
+ if (compSize < _lineBuffer->dataSize)
772
+ {
773
+ _lineBuffer->dataSize = compSize;
774
+ _lineBuffer->dataPtr = compPtr;
775
+ }
776
+ else if (_ofd->format == Compressor::NATIVE)
777
+ {
778
+ //
779
+ // The data did not shrink during compression, but
780
+ // we cannot write to the file using the machine's
781
+ // native format, so we need to convert the lineBuffer
782
+ // to Xdr.
783
+ //
784
+
785
+ convertToXdr (_ofd, _lineBuffer->consecutiveBuffer, _lineBuffer->minY,
786
+ _lineBuffer->maxY, _lineBuffer->dataSize);
787
+ }
788
+ }
789
+
790
+ _lineBuffer->partiallyFull = false;
791
+ }
792
+ catch (std::exception &e)
793
+ {
794
+ if (!_lineBuffer->hasException)
795
+ {
796
+ _lineBuffer->exception = e.what ();
797
+ _lineBuffer->hasException = true;
798
+ }
799
+ }
800
+ catch (...)
801
+ {
802
+ if (!_lineBuffer->hasException)
803
+ {
804
+ _lineBuffer->exception = "unrecognized exception";
805
+ _lineBuffer->hasException = true;
806
+ }
807
+ }
808
+ }
809
+
810
+ } // namespace
811
+
812
+
813
+ DeepScanLineOutputFile::DeepScanLineOutputFile
814
+ (const char fileName[],
815
+ const Header &header,
816
+ int numThreads)
817
+ :
818
+ _data (new Data (numThreads))
819
+ {
820
+ _data->_streamData=new OutputStreamMutex ();
821
+ _data->_deleteStream=true;
822
+ try
823
+ {
824
+ header.sanityCheck();
825
+ _data->_streamData->os = new StdOFStream (fileName);
826
+ initialize (header);
827
+ _data->_streamData->currentPosition = _data->_streamData->os->tellp();
828
+
829
+ // Write header and empty offset table to the file.
830
+ writeMagicNumberAndVersionField(*_data->_streamData->os, _data->header);
831
+ _data->previewPosition =
832
+ _data->header.writeTo (*_data->_streamData->os);
833
+ _data->lineOffsetsPosition =
834
+ writeLineOffsets (*_data->_streamData->os, _data->lineOffsets);
835
+ _data->multipart=false;// not multipart; only one header
836
+ }
837
+ catch (IEX_NAMESPACE::BaseExc &e)
838
+ {
839
+ delete _data->_streamData;
840
+ delete _data;
841
+
842
+ REPLACE_EXC (e, "Cannot open image file "
843
+ "\"" << fileName << "\". " << e);
844
+ throw;
845
+ }
846
+ catch (...)
847
+ {
848
+ delete _data->_streamData;
849
+ delete _data;
850
+ throw;
851
+ }
852
+ }
853
+
854
+
855
+ DeepScanLineOutputFile::DeepScanLineOutputFile
856
+ (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os,
857
+ const Header &header,
858
+ int numThreads)
859
+ :
860
+ _data (new Data (numThreads))
861
+
862
+ {
863
+ _data->_streamData = new OutputStreamMutex ();
864
+ _data->_deleteStream = false;
865
+ try
866
+ {
867
+ header.sanityCheck();
868
+ _data->_streamData->os = &os;
869
+ initialize (header);
870
+ _data->_streamData->currentPosition = _data->_streamData->os->tellp();
871
+
872
+ // Write header and empty offset table to the file.
873
+ writeMagicNumberAndVersionField(*_data->_streamData->os, _data->header);
874
+ _data->previewPosition =
875
+ _data->header.writeTo (*_data->_streamData->os);
876
+ _data->lineOffsetsPosition =
877
+ writeLineOffsets (*_data->_streamData->os, _data->lineOffsets);
878
+ _data->multipart=false;
879
+ }
880
+ catch (IEX_NAMESPACE::BaseExc &e)
881
+ {
882
+ delete _data->_streamData;
883
+ delete _data;
884
+
885
+ REPLACE_EXC (e, "Cannot open image file "
886
+ "\"" << os.fileName() << "\". " << e);
887
+ throw;
888
+ }
889
+ catch (...)
890
+ {
891
+ delete _data->_streamData;
892
+ delete _data;
893
+ throw;
894
+ }
895
+ }
896
+
897
+ DeepScanLineOutputFile::DeepScanLineOutputFile(const OutputPartData* part)
898
+ {
899
+ try
900
+ {
901
+ if (part->header.type() != DEEPSCANLINE)
902
+ throw IEX_NAMESPACE::ArgExc("Can't build a DeepScanLineOutputFile from a type-mismatched part.");
903
+
904
+ _data = new Data (part->numThreads);
905
+ _data->_streamData = part->mutex;
906
+ _data->_deleteStream=false;
907
+ initialize (part->header);
908
+ _data->partNumber = part->partNumber;
909
+ _data->lineOffsetsPosition = part->chunkOffsetTablePosition;
910
+ _data->previewPosition = part->previewPosition;
911
+ _data->multipart=part->multipart;
912
+ }
913
+ catch (IEX_NAMESPACE::BaseExc &e)
914
+ {
915
+ delete _data;
916
+
917
+ REPLACE_EXC (e, "Cannot initialize output part "
918
+ "\"" << part->partNumber << "\". " << e);
919
+ throw;
920
+ }
921
+ catch (...)
922
+ {
923
+ delete _data;
924
+ throw;
925
+ }
926
+ }
927
+
928
+ void
929
+ DeepScanLineOutputFile::initialize (const Header &header)
930
+ {
931
+ _data->header = header;
932
+
933
+ _data->header.setType(DEEPSCANLINE);
934
+
935
+ const Box2i &dataWindow = header.dataWindow();
936
+
937
+ _data->currentScanLine = (header.lineOrder() == INCREASING_Y)?
938
+ dataWindow.min.y: dataWindow.max.y;
939
+
940
+ _data->missingScanLines = dataWindow.max.y - dataWindow.min.y + 1;
941
+ _data->lineOrder = header.lineOrder();
942
+ _data->minX = dataWindow.min.x;
943
+ _data->maxX = dataWindow.max.x;
944
+ _data->minY = dataWindow.min.y;
945
+ _data->maxY = dataWindow.max.y;
946
+
947
+ _data->lineSampleCount.resizeErase(_data->maxY - _data->minY + 1);
948
+
949
+ Compressor* compressor = newCompressor (_data->header.compression(),
950
+ 0,
951
+ _data->header);
952
+ _data->format = defaultFormat (compressor);
953
+ _data->linesInBuffer = numLinesInBuffer (compressor);
954
+ if (compressor != 0)
955
+ delete compressor;
956
+
957
+ int lineOffsetSize = (_data->maxY - _data->minY +
958
+ _data->linesInBuffer) / _data->linesInBuffer;
959
+
960
+
961
+ _data->header.setChunkCount(lineOffsetSize);
962
+
963
+ _data->lineOffsets.resize (lineOffsetSize);
964
+
965
+ _data->bytesPerLine.resize (_data->maxY - _data->minY + 1);
966
+
967
+ _data->maxSampleCountTableSize = min(_data->linesInBuffer, _data->maxY - _data->minY + 1) *
968
+ (_data->maxX - _data->minX + 1) *
969
+ sizeof(unsigned int);
970
+
971
+ for (size_t i = 0; i < _data->lineBuffers.size(); ++i)
972
+ {
973
+ _data->lineBuffers[i] = new LineBuffer (_data->linesInBuffer);
974
+ _data->lineBuffers[i]->sampleCountTableBuffer.resizeErase(_data->maxSampleCountTableSize);
975
+
976
+ _data->lineBuffers[i]->sampleCountTableCompressor =
977
+ newCompressor (_data->header.compression(),
978
+ _data->maxSampleCountTableSize,
979
+ _data->header);
980
+ }
981
+ }
982
+
983
+
984
+ DeepScanLineOutputFile::~DeepScanLineOutputFile ()
985
+ {
986
+ {
987
+ Lock lock(*_data->_streamData);
988
+ Int64 originalPosition = _data->_streamData->os->tellp();
989
+
990
+ if (_data->lineOffsetsPosition > 0)
991
+ {
992
+ try
993
+ {
994
+ _data->_streamData->os->seekp (_data->lineOffsetsPosition);
995
+ writeLineOffsets (*_data->_streamData->os, _data->lineOffsets);
996
+
997
+ //
998
+ // Restore the original position.
999
+ //
1000
+ _data->_streamData->os->seekp (originalPosition);
1001
+ }
1002
+ catch (...)
1003
+ {
1004
+ //
1005
+ // We cannot safely throw any exceptions from here.
1006
+ // This destructor may have been called because the
1007
+ // stack is currently being unwound for another
1008
+ // exception.
1009
+ //
1010
+ }
1011
+ }
1012
+ }
1013
+
1014
+ if (_data->_deleteStream)
1015
+ delete _data->_streamData->os;
1016
+
1017
+ //
1018
+ // (TODO) we should have a way to tell if the stream data is owned by this file or
1019
+ // by a parent multipart file.
1020
+ //
1021
+
1022
+ if (_data->partNumber == -1)
1023
+ delete _data->_streamData;
1024
+
1025
+ delete _data;
1026
+ }
1027
+
1028
+
1029
+ const char *
1030
+ DeepScanLineOutputFile::fileName () const
1031
+ {
1032
+ return _data->_streamData->os->fileName();
1033
+ }
1034
+
1035
+
1036
+ const Header &
1037
+ DeepScanLineOutputFile::header () const
1038
+ {
1039
+ return _data->header;
1040
+ }
1041
+
1042
+
1043
+ void
1044
+ DeepScanLineOutputFile::setFrameBuffer (const DeepFrameBuffer &frameBuffer)
1045
+ {
1046
+ Lock lock (*_data->_streamData);
1047
+
1048
+ //
1049
+ // Check if the new frame buffer descriptor
1050
+ // is compatible with the image file header.
1051
+ //
1052
+
1053
+ const ChannelList &channels = _data->header.channels();
1054
+
1055
+ for (ChannelList::ConstIterator i = channels.begin();
1056
+ i != channels.end();
1057
+ ++i)
1058
+ {
1059
+ DeepFrameBuffer::ConstIterator j = frameBuffer.find (i.name());
1060
+
1061
+ if (j == frameBuffer.end())
1062
+ continue;
1063
+
1064
+ if (i.channel().type != j.slice().type)
1065
+ {
1066
+ THROW (IEX_NAMESPACE::ArgExc, "Pixel type of \"" << i.name() << "\" channel "
1067
+ "of output file \"" << fileName() << "\" is "
1068
+ "not compatible with the frame buffer's "
1069
+ "pixel type.");
1070
+ }
1071
+
1072
+ if (i.channel().xSampling != j.slice().xSampling ||
1073
+ i.channel().ySampling != j.slice().ySampling)
1074
+ {
1075
+ THROW (IEX_NAMESPACE::ArgExc, "X and/or y subsampling factors "
1076
+ "of \"" << i.name() << "\" channel "
1077
+ "of output file \"" << fileName() << "\" are "
1078
+ "not compatible with the frame buffer's "
1079
+ "subsampling factors.");
1080
+ }
1081
+ }
1082
+
1083
+ //
1084
+ // Store the pixel sample count table.
1085
+ // (TODO) Support for different sampling rates?
1086
+ //
1087
+
1088
+ const Slice& sampleCountSlice = frameBuffer.getSampleCountSlice();
1089
+ if (sampleCountSlice.base == 0)
1090
+ {
1091
+ throw IEX_NAMESPACE::ArgExc ("Invalid base pointer, please set a proper sample count slice.");
1092
+ }
1093
+ else
1094
+ {
1095
+ _data->sampleCountSliceBase = sampleCountSlice.base;
1096
+ _data->sampleCountXStride = sampleCountSlice.xStride;
1097
+ _data->sampleCountYStride = sampleCountSlice.yStride;
1098
+ }
1099
+
1100
+ //
1101
+ // Initialize slice table for writePixels().
1102
+ // Pixel sample count slice is not presented in the header,
1103
+ // so it wouldn't be added here.
1104
+ // Store the pixel base pointer table.
1105
+ // (TODO) Support for different sampling rates?
1106
+ //
1107
+
1108
+ vector<OutSliceInfo*> slices;
1109
+
1110
+ for (ChannelList::ConstIterator i = channels.begin();
1111
+ i != channels.end();
1112
+ ++i)
1113
+ {
1114
+ DeepFrameBuffer::ConstIterator j = frameBuffer.find (i.name());
1115
+
1116
+ if (j == frameBuffer.end())
1117
+ {
1118
+ //
1119
+ // Channel i is not present in the frame buffer.
1120
+ // In the file, channel i will contain only zeroes.
1121
+ //
1122
+
1123
+ slices.push_back (new OutSliceInfo (i.channel().type,
1124
+ NULL,// base
1125
+ 0,// sampleStride,
1126
+ 0,// xStride
1127
+ 0,// yStride
1128
+ i.channel().xSampling,
1129
+ i.channel().ySampling,
1130
+ true)); // zero
1131
+ }
1132
+ else
1133
+ {
1134
+ //
1135
+ // Channel i is present in the frame buffer.
1136
+ //
1137
+
1138
+ slices.push_back (new OutSliceInfo (j.slice().type,
1139
+ j.slice().base,
1140
+ j.slice().sampleStride,
1141
+ j.slice().xStride,
1142
+ j.slice().yStride,
1143
+ j.slice().xSampling,
1144
+ j.slice().ySampling,
1145
+ false)); // zero
1146
+
1147
+ }
1148
+ }
1149
+
1150
+ //
1151
+ // Store the new frame buffer.
1152
+ //
1153
+
1154
+ _data->frameBuffer = frameBuffer;
1155
+
1156
+ for (size_t i = 0; i < _data->slices.size(); i++)
1157
+ delete _data->slices[i];
1158
+ _data->slices = slices;
1159
+ }
1160
+
1161
+
1162
+ const DeepFrameBuffer &
1163
+ DeepScanLineOutputFile::frameBuffer () const
1164
+ {
1165
+ Lock lock (*_data->_streamData);
1166
+ return _data->frameBuffer;
1167
+ }
1168
+
1169
+
1170
+ void
1171
+ DeepScanLineOutputFile::writePixels (int numScanLines)
1172
+ {
1173
+ try
1174
+ {
1175
+ Lock lock (*_data->_streamData);
1176
+
1177
+ if (_data->slices.size() == 0)
1178
+ throw IEX_NAMESPACE::ArgExc ("No frame buffer specified "
1179
+ "as pixel data source.");
1180
+
1181
+ //
1182
+ // Maintain two iterators:
1183
+ // nextWriteBuffer: next linebuffer to be written to the file
1184
+ // nextCompressBuffer: next linebuffer to compress
1185
+ //
1186
+
1187
+ int first = (_data->currentScanLine - _data->minY) /
1188
+ _data->linesInBuffer;
1189
+
1190
+ int nextWriteBuffer = first;
1191
+ int nextCompressBuffer;
1192
+ int stop;
1193
+ int step;
1194
+ int scanLineMin;
1195
+ int scanLineMax;
1196
+
1197
+ {
1198
+ //
1199
+ // Create a task group for all line buffer tasks. When the
1200
+ // taskgroup goes out of scope, the destructor waits until
1201
+ // all tasks are complete.
1202
+ //
1203
+
1204
+ TaskGroup taskGroup;
1205
+
1206
+ //
1207
+ // Determine the range of lineBuffers that intersect the scan
1208
+ // line range. Then add the initial compression tasks to the
1209
+ // thread pool. We always add in at least one task but the
1210
+ // individual task might not do anything if numScanLines == 0.
1211
+ //
1212
+
1213
+ if (_data->lineOrder == INCREASING_Y)
1214
+ {
1215
+ int last = (_data->currentScanLine + (numScanLines - 1) -
1216
+ _data->minY) / _data->linesInBuffer;
1217
+
1218
+ scanLineMin = _data->currentScanLine;
1219
+ scanLineMax = _data->currentScanLine + numScanLines - 1;
1220
+
1221
+ int numTasks = max (min ((int)_data->lineBuffers.size(),
1222
+ last - first + 1),
1223
+ 1);
1224
+
1225
+ for (int i = 0; i < numTasks; i++)
1226
+ {
1227
+ ThreadPool::addGlobalTask
1228
+ (new LineBufferTask (&taskGroup, _data, first + i,
1229
+ scanLineMin, scanLineMax));
1230
+ }
1231
+
1232
+ nextCompressBuffer = first + numTasks;
1233
+ stop = last + 1;
1234
+ step = 1;
1235
+ }
1236
+ else
1237
+ {
1238
+ int last = (_data->currentScanLine - (numScanLines - 1) -
1239
+ _data->minY) / _data->linesInBuffer;
1240
+
1241
+ scanLineMax = _data->currentScanLine;
1242
+ scanLineMin = _data->currentScanLine - numScanLines + 1;
1243
+
1244
+ int numTasks = max (min ((int)_data->lineBuffers.size(),
1245
+ first - last + 1),
1246
+ 1);
1247
+
1248
+ for (int i = 0; i < numTasks; i++)
1249
+ {
1250
+ ThreadPool::addGlobalTask
1251
+ (new LineBufferTask (&taskGroup, _data, first - i,
1252
+ scanLineMin, scanLineMax));
1253
+ }
1254
+
1255
+ nextCompressBuffer = first - numTasks;
1256
+ stop = last - 1;
1257
+ step = -1;
1258
+ }
1259
+
1260
+ while (true)
1261
+ {
1262
+ if (_data->missingScanLines <= 0)
1263
+ {
1264
+ throw IEX_NAMESPACE::ArgExc ("Tried to write more scan lines "
1265
+ "than specified by the data window.");
1266
+ }
1267
+
1268
+ //
1269
+ // Wait until the next line buffer is ready to be written
1270
+ //
1271
+
1272
+ LineBuffer *writeBuffer =
1273
+ _data->getLineBuffer (nextWriteBuffer);
1274
+
1275
+ writeBuffer->wait();
1276
+
1277
+ int numLines = writeBuffer->scanLineMax -
1278
+ writeBuffer->scanLineMin + 1;
1279
+
1280
+ _data->missingScanLines -= numLines;
1281
+
1282
+ //
1283
+ // If the line buffer is only partially full, then it is
1284
+ // not complete and we cannot write it to disk yet.
1285
+ //
1286
+
1287
+ if (writeBuffer->partiallyFull)
1288
+ {
1289
+ _data->currentScanLine = _data->currentScanLine +
1290
+ step * numLines;
1291
+ writeBuffer->post();
1292
+
1293
+ return;
1294
+ }
1295
+
1296
+ //
1297
+ // Write the line buffer
1298
+ //
1299
+
1300
+ writePixelData (_data->_streamData, _data, writeBuffer);
1301
+ nextWriteBuffer += step;
1302
+
1303
+ _data->currentScanLine = _data->currentScanLine +
1304
+ step * numLines;
1305
+
1306
+ #ifdef DEBUG
1307
+
1308
+ assert (_data->currentScanLine ==
1309
+ ((_data->lineOrder == INCREASING_Y) ?
1310
+ writeBuffer->scanLineMax + 1:
1311
+ writeBuffer->scanLineMin - 1));
1312
+
1313
+ #endif
1314
+
1315
+ //
1316
+ // Release the lock on the line buffer
1317
+ //
1318
+
1319
+ writeBuffer->post();
1320
+
1321
+ //
1322
+ // If this was the last line buffer in the scanline range
1323
+ //
1324
+
1325
+ if (nextWriteBuffer == stop)
1326
+ break;
1327
+
1328
+ //
1329
+ // If there are no more line buffers to compress,
1330
+ // then only continue to write out remaining lineBuffers
1331
+ //
1332
+
1333
+ if (nextCompressBuffer == stop)
1334
+ continue;
1335
+
1336
+ //
1337
+ // Add nextCompressBuffer as a compression task
1338
+ //
1339
+
1340
+ ThreadPool::addGlobalTask
1341
+ (new LineBufferTask (&taskGroup, _data, nextCompressBuffer,
1342
+ scanLineMin, scanLineMax));
1343
+
1344
+ //
1345
+ // Update the next line buffer we need to compress
1346
+ //
1347
+
1348
+ nextCompressBuffer += step;
1349
+ }
1350
+
1351
+ //
1352
+ // Finish all tasks
1353
+ //
1354
+ }
1355
+
1356
+ //
1357
+ // Exeption handling:
1358
+ //
1359
+ // LineBufferTask::execute() may have encountered exceptions, but
1360
+ // those exceptions occurred in another thread, not in the thread
1361
+ // that is executing this call to OutputFile::writePixels().
1362
+ // LineBufferTask::execute() has caught all exceptions and stored
1363
+ // the exceptions' what() strings in the line buffers.
1364
+ // Now we check if any line buffer contains a stored exception; if
1365
+ // this is the case then we re-throw the exception in this thread.
1366
+ // (It is possible that multiple line buffers contain stored
1367
+ // exceptions. We re-throw the first exception we find and
1368
+ // ignore all others.)
1369
+ //
1370
+
1371
+ const string *exception = 0;
1372
+
1373
+ for (size_t i = 0; i < _data->lineBuffers.size(); ++i)
1374
+ {
1375
+ LineBuffer *lineBuffer = _data->lineBuffers[i];
1376
+
1377
+ if (lineBuffer->hasException && !exception)
1378
+ exception = &lineBuffer->exception;
1379
+
1380
+ lineBuffer->hasException = false;
1381
+ }
1382
+
1383
+ if (exception)
1384
+ throw IEX_NAMESPACE::IoExc (*exception);
1385
+ }
1386
+ catch (IEX_NAMESPACE::BaseExc &e)
1387
+ {
1388
+ REPLACE_EXC (e, "Failed to write pixel data to image "
1389
+ "file \"" << fileName() << "\". " << e);
1390
+ throw;
1391
+ }
1392
+ }
1393
+
1394
+
1395
+ int
1396
+ DeepScanLineOutputFile::currentScanLine () const
1397
+ {
1398
+ Lock lock (*_data->_streamData);
1399
+ return _data->currentScanLine;
1400
+ }
1401
+
1402
+
1403
+ void
1404
+ DeepScanLineOutputFile::copyPixels (DeepScanLineInputPart &in)
1405
+ {
1406
+ copyPixels(*in.file);
1407
+ }
1408
+
1409
+ void
1410
+ DeepScanLineOutputFile::copyPixels (DeepScanLineInputFile &in)
1411
+ {
1412
+
1413
+ Lock lock (*_data->_streamData);
1414
+
1415
+ //
1416
+ // Check if this file's and and the InputFile's
1417
+ // headers are compatible.
1418
+ //
1419
+
1420
+ const Header &hdr = _data->header;
1421
+ const Header &inHdr = in.header();
1422
+
1423
+ if(!inHdr.hasType() || inHdr.type()!=DEEPSCANLINE)
1424
+ {
1425
+ THROW (IEX_NAMESPACE::ArgExc, "Cannot copy pixels from image "
1426
+ "file \"" << in.fileName() << "\" to image "
1427
+ "file \"" << fileName() << "\": the input needs to be a deep scanline image");
1428
+ }
1429
+ if (!(hdr.dataWindow() == inHdr.dataWindow()))
1430
+ THROW (IEX_NAMESPACE::ArgExc, "Cannot copy pixels from image "
1431
+ "file \"" << in.fileName() << "\" to image "
1432
+ "file \"" << fileName() << "\". "
1433
+ "The files have different data windows.");
1434
+
1435
+ if (!(hdr.lineOrder() == inHdr.lineOrder()))
1436
+ THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image "
1437
+ "file \"" << in.fileName() << "\" to image "
1438
+ "file \"" << fileName() << "\" failed. "
1439
+ "The files have different line orders.");
1440
+
1441
+ if (!(hdr.compression() == inHdr.compression()))
1442
+ THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image "
1443
+ "file \"" << in.fileName() << "\" to image "
1444
+ "file \"" << fileName() << "\" failed. "
1445
+ "The files use different compression methods.");
1446
+
1447
+ if (!(hdr.channels() == inHdr.channels()))
1448
+ THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image "
1449
+ "file \"" << in.fileName() << "\" to image "
1450
+ "file \"" << fileName() << "\" failed. "
1451
+ "The files have different channel lists.");
1452
+
1453
+ //
1454
+ // Verify that no pixel data have been written to this file yet.
1455
+ //
1456
+
1457
+ const Box2i &dataWindow = hdr.dataWindow();
1458
+
1459
+ if (_data->missingScanLines != dataWindow.max.y - dataWindow.min.y + 1)
1460
+ THROW (IEX_NAMESPACE::LogicExc, "Quick pixel copy from image "
1461
+ "file \"" << in.fileName() << "\" to image "
1462
+ "file \"" << fileName() << "\" failed. "
1463
+ "\"" << fileName() << "\" already contains "
1464
+ "pixel data.");
1465
+
1466
+ //
1467
+ // Copy the pixel data.
1468
+ //
1469
+
1470
+ vector<char> data(4096);
1471
+
1472
+ while (_data->missingScanLines > 0)
1473
+ {
1474
+ Int64 dataSize = (Int64) data.size();
1475
+ in.rawPixelData(_data->currentScanLine, &data[0], dataSize);
1476
+ if(dataSize > data.size())
1477
+ {
1478
+ // block wasn't big enough - go again with enough memory this time
1479
+ data.resize(dataSize);
1480
+ in.rawPixelData(_data->currentScanLine, &data[0], dataSize);
1481
+ }
1482
+
1483
+ // extract header from block to pass to writePixelData
1484
+
1485
+ Int64 packedSampleCountSize = *(Int64 *) (&data[4]);
1486
+ Int64 packedDataSize = *(Int64 *) (&data[12]);
1487
+ Int64 unpackedDataSize = *(Int64 *) (&data[20]);
1488
+ const char * sampleCountTable = &data[0]+28;
1489
+ const char * pixelData = sampleCountTable + packedSampleCountSize;
1490
+
1491
+
1492
+ writePixelData (_data->_streamData, _data, lineBufferMinY (_data->currentScanLine,
1493
+ _data->minY,
1494
+ _data->linesInBuffer),
1495
+ pixelData, packedDataSize, unpackedDataSize,sampleCountTable,packedSampleCountSize);
1496
+
1497
+ _data->currentScanLine += (_data->lineOrder == INCREASING_Y)?
1498
+ _data->linesInBuffer: -_data->linesInBuffer;
1499
+
1500
+ _data->missingScanLines -= _data->linesInBuffer;
1501
+ }
1502
+ }
1503
+
1504
+
1505
+ void
1506
+ DeepScanLineOutputFile::updatePreviewImage (const PreviewRgba newPixels[])
1507
+ {
1508
+ Lock lock (*_data->_streamData);
1509
+
1510
+ if (_data->previewPosition <= 0)
1511
+ THROW (IEX_NAMESPACE::LogicExc, "Cannot update preview image pixels. "
1512
+ "File \"" << fileName() << "\" does not "
1513
+ "contain a preview image.");
1514
+
1515
+ //
1516
+ // Store the new pixels in the header's preview image attribute.
1517
+ //
1518
+
1519
+ PreviewImageAttribute &pia =
1520
+ _data->header.typedAttribute <PreviewImageAttribute> ("preview");
1521
+
1522
+ PreviewImage &pi = pia.value();
1523
+ PreviewRgba *pixels = pi.pixels();
1524
+ int numPixels = pi.width() * pi.height();
1525
+
1526
+ for (int i = 0; i < numPixels; ++i)
1527
+ pixels[i] = newPixels[i];
1528
+
1529
+ //
1530
+ // Save the current file position, jump to the position in
1531
+ // the file where the preview image starts, store the new
1532
+ // preview image, and jump back to the saved file position.
1533
+ //
1534
+
1535
+ Int64 savedPosition = _data->_streamData->os->tellp();
1536
+
1537
+ try
1538
+ {
1539
+ _data->_streamData->os->seekp (_data->previewPosition);
1540
+ pia.writeValueTo (*_data->_streamData->os, _data->version);
1541
+ _data->_streamData->os->seekp (savedPosition);
1542
+ }
1543
+ catch (IEX_NAMESPACE::BaseExc &e)
1544
+ {
1545
+ REPLACE_EXC (e, "Cannot update preview image pixels for "
1546
+ "file \"" << fileName() << "\". " << e);
1547
+ throw;
1548
+ }
1549
+ }
1550
+
1551
+
1552
+ OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT