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,1425 @@
1
+ ///////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // Copyright (c) 2002-2012, 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
+ #ifndef INCLUDED_IMATHMATRIXALGO_H
37
+ #define INCLUDED_IMATHMATRIXALGO_H
38
+
39
+ //-------------------------------------------------------------------------
40
+ //
41
+ // This file contains algorithms applied to or in conjunction with
42
+ // transformation matrices (Imath::Matrix33 and Imath::Matrix44).
43
+ // The assumption made is that these functions are called much less
44
+ // often than the basic point functions or these functions require
45
+ // more support classes.
46
+ //
47
+ // This file also defines a few predefined constant matrices.
48
+ //
49
+ //-------------------------------------------------------------------------
50
+
51
+ #include "ImathExport.h"
52
+ #include "ImathMatrix.h"
53
+ #include "ImathQuat.h"
54
+ #include "ImathEuler.h"
55
+ #include "ImathExc.h"
56
+ #include "ImathVec.h"
57
+ #include "ImathLimits.h"
58
+ #include "ImathNamespace.h"
59
+ #include <math.h>
60
+
61
+ IMATH_INTERNAL_NAMESPACE_HEADER_ENTER
62
+
63
+ //------------------
64
+ // Identity matrices
65
+ //------------------
66
+
67
+ IMATH_EXPORT_CONST M33f identity33f;
68
+ IMATH_EXPORT_CONST M44f identity44f;
69
+ IMATH_EXPORT_CONST M33d identity33d;
70
+ IMATH_EXPORT_CONST M44d identity44d;
71
+
72
+ //----------------------------------------------------------------------
73
+ // Extract scale, shear, rotation, and translation values from a matrix:
74
+ //
75
+ // Notes:
76
+ //
77
+ // This implementation follows the technique described in the paper by
78
+ // Spencer W. Thomas in the Graphics Gems II article: "Decomposing a
79
+ // Matrix into Simple Transformations", p. 320.
80
+ //
81
+ // - Some of the functions below have an optional exc parameter
82
+ // that determines the functions' behavior when the matrix'
83
+ // scaling is very close to zero:
84
+ //
85
+ // If exc is true, the functions throw an Imath::ZeroScale exception.
86
+ //
87
+ // If exc is false:
88
+ //
89
+ // extractScaling (m, s) returns false, s is invalid
90
+ // sansScaling (m) returns m
91
+ // removeScaling (m) returns false, m is unchanged
92
+ // sansScalingAndShear (m) returns m
93
+ // removeScalingAndShear (m) returns false, m is unchanged
94
+ // extractAndRemoveScalingAndShear (m, s, h)
95
+ // returns false, m is unchanged,
96
+ // (sh) are invalid
97
+ // checkForZeroScaleInRow () returns false
98
+ // extractSHRT (m, s, h, r, t) returns false, (shrt) are invalid
99
+ //
100
+ // - Functions extractEuler(), extractEulerXYZ() and extractEulerZYX()
101
+ // assume that the matrix does not include shear or non-uniform scaling,
102
+ // but they do not examine the matrix to verify this assumption.
103
+ // Matrices with shear or non-uniform scaling are likely to produce
104
+ // meaningless results. Therefore, you should use the
105
+ // removeScalingAndShear() routine, if necessary, prior to calling
106
+ // extractEuler...() .
107
+ //
108
+ // - All functions assume that the matrix does not include perspective
109
+ // transformation(s), but they do not examine the matrix to verify
110
+ // this assumption. Matrices with perspective transformations are
111
+ // likely to produce meaningless results.
112
+ //
113
+ //----------------------------------------------------------------------
114
+
115
+
116
+ //
117
+ // Declarations for 4x4 matrix.
118
+ //
119
+
120
+ template <class T> bool extractScaling
121
+ (const Matrix44<T> &mat,
122
+ Vec3<T> &scl,
123
+ bool exc = true);
124
+
125
+ template <class T> Matrix44<T> sansScaling (const Matrix44<T> &mat,
126
+ bool exc = true);
127
+
128
+ template <class T> bool removeScaling
129
+ (Matrix44<T> &mat,
130
+ bool exc = true);
131
+
132
+ template <class T> bool extractScalingAndShear
133
+ (const Matrix44<T> &mat,
134
+ Vec3<T> &scl,
135
+ Vec3<T> &shr,
136
+ bool exc = true);
137
+
138
+ template <class T> Matrix44<T> sansScalingAndShear
139
+ (const Matrix44<T> &mat,
140
+ bool exc = true);
141
+
142
+ template <class T> void sansScalingAndShear
143
+ (Matrix44<T> &result,
144
+ const Matrix44<T> &mat,
145
+ bool exc = true);
146
+
147
+ template <class T> bool removeScalingAndShear
148
+ (Matrix44<T> &mat,
149
+ bool exc = true);
150
+
151
+ template <class T> bool extractAndRemoveScalingAndShear
152
+ (Matrix44<T> &mat,
153
+ Vec3<T> &scl,
154
+ Vec3<T> &shr,
155
+ bool exc = true);
156
+
157
+ template <class T> void extractEulerXYZ
158
+ (const Matrix44<T> &mat,
159
+ Vec3<T> &rot);
160
+
161
+ template <class T> void extractEulerZYX
162
+ (const Matrix44<T> &mat,
163
+ Vec3<T> &rot);
164
+
165
+ template <class T> Quat<T> extractQuat (const Matrix44<T> &mat);
166
+
167
+ template <class T> bool extractSHRT
168
+ (const Matrix44<T> &mat,
169
+ Vec3<T> &s,
170
+ Vec3<T> &h,
171
+ Vec3<T> &r,
172
+ Vec3<T> &t,
173
+ bool exc /*= true*/,
174
+ typename Euler<T>::Order rOrder);
175
+
176
+ template <class T> bool extractSHRT
177
+ (const Matrix44<T> &mat,
178
+ Vec3<T> &s,
179
+ Vec3<T> &h,
180
+ Vec3<T> &r,
181
+ Vec3<T> &t,
182
+ bool exc = true);
183
+
184
+ template <class T> bool extractSHRT
185
+ (const Matrix44<T> &mat,
186
+ Vec3<T> &s,
187
+ Vec3<T> &h,
188
+ Euler<T> &r,
189
+ Vec3<T> &t,
190
+ bool exc = true);
191
+
192
+ //
193
+ // Internal utility function.
194
+ //
195
+
196
+ template <class T> bool checkForZeroScaleInRow
197
+ (const T &scl,
198
+ const Vec3<T> &row,
199
+ bool exc = true);
200
+
201
+ template <class T> Matrix44<T> outerProduct
202
+ ( const Vec4<T> &a,
203
+ const Vec4<T> &b);
204
+
205
+
206
+ //
207
+ // Returns a matrix that rotates "fromDirection" vector to "toDirection"
208
+ // vector.
209
+ //
210
+
211
+ template <class T> Matrix44<T> rotationMatrix (const Vec3<T> &fromDirection,
212
+ const Vec3<T> &toDirection);
213
+
214
+
215
+
216
+ //
217
+ // Returns a matrix that rotates the "fromDir" vector
218
+ // so that it points towards "toDir". You may also
219
+ // specify that you want the up vector to be pointing
220
+ // in a certain direction "upDir".
221
+ //
222
+
223
+ template <class T> Matrix44<T> rotationMatrixWithUpDir
224
+ (const Vec3<T> &fromDir,
225
+ const Vec3<T> &toDir,
226
+ const Vec3<T> &upDir);
227
+
228
+
229
+ //
230
+ // Constructs a matrix that rotates the z-axis so that it
231
+ // points towards "targetDir". You must also specify
232
+ // that you want the up vector to be pointing in a
233
+ // certain direction "upDir".
234
+ //
235
+ // Notes: The following degenerate cases are handled:
236
+ // (a) when the directions given by "toDir" and "upDir"
237
+ // are parallel or opposite;
238
+ // (the direction vectors must have a non-zero cross product)
239
+ // (b) when any of the given direction vectors have zero length
240
+ //
241
+
242
+ template <class T> void alignZAxisWithTargetDir
243
+ (Matrix44<T> &result,
244
+ Vec3<T> targetDir,
245
+ Vec3<T> upDir);
246
+
247
+
248
+ // Compute an orthonormal direct frame from : a position, an x axis direction and a normal to the y axis
249
+ // If the x axis and normal are perpendicular, then the normal will have the same direction as the z axis.
250
+ // Inputs are :
251
+ // -the position of the frame
252
+ // -the x axis direction of the frame
253
+ // -a normal to the y axis of the frame
254
+ // Return is the orthonormal frame
255
+ template <class T> Matrix44<T> computeLocalFrame( const Vec3<T>& p,
256
+ const Vec3<T>& xDir,
257
+ const Vec3<T>& normal);
258
+
259
+ // Add a translate/rotate/scale offset to an input frame
260
+ // and put it in another frame of reference
261
+ // Inputs are :
262
+ // - input frame
263
+ // - translate offset
264
+ // - rotate offset in degrees
265
+ // - scale offset
266
+ // - frame of reference
267
+ // Output is the offsetted frame
268
+ template <class T> Matrix44<T> addOffset( const Matrix44<T>& inMat,
269
+ const Vec3<T>& tOffset,
270
+ const Vec3<T>& rOffset,
271
+ const Vec3<T>& sOffset,
272
+ const Vec3<T>& ref);
273
+
274
+ // Compute Translate/Rotate/Scale matrix from matrix A with the Rotate/Scale of Matrix B
275
+ // Inputs are :
276
+ // -keepRotateA : if true keep rotate from matrix A, use B otherwise
277
+ // -keepScaleA : if true keep scale from matrix A, use B otherwise
278
+ // -Matrix A
279
+ // -Matrix B
280
+ // Return Matrix A with tweaked rotation/scale
281
+ template <class T> Matrix44<T> computeRSMatrix( bool keepRotateA,
282
+ bool keepScaleA,
283
+ const Matrix44<T>& A,
284
+ const Matrix44<T>& B);
285
+
286
+
287
+ //----------------------------------------------------------------------
288
+
289
+
290
+ //
291
+ // Declarations for 3x3 matrix.
292
+ //
293
+
294
+
295
+ template <class T> bool extractScaling
296
+ (const Matrix33<T> &mat,
297
+ Vec2<T> &scl,
298
+ bool exc = true);
299
+
300
+ template <class T> Matrix33<T> sansScaling (const Matrix33<T> &mat,
301
+ bool exc = true);
302
+
303
+ template <class T> bool removeScaling
304
+ (Matrix33<T> &mat,
305
+ bool exc = true);
306
+
307
+ template <class T> bool extractScalingAndShear
308
+ (const Matrix33<T> &mat,
309
+ Vec2<T> &scl,
310
+ T &h,
311
+ bool exc = true);
312
+
313
+ template <class T> Matrix33<T> sansScalingAndShear
314
+ (const Matrix33<T> &mat,
315
+ bool exc = true);
316
+
317
+ template <class T> bool removeScalingAndShear
318
+ (Matrix33<T> &mat,
319
+ bool exc = true);
320
+
321
+ template <class T> bool extractAndRemoveScalingAndShear
322
+ (Matrix33<T> &mat,
323
+ Vec2<T> &scl,
324
+ T &shr,
325
+ bool exc = true);
326
+
327
+ template <class T> void extractEuler
328
+ (const Matrix33<T> &mat,
329
+ T &rot);
330
+
331
+ template <class T> bool extractSHRT (const Matrix33<T> &mat,
332
+ Vec2<T> &s,
333
+ T &h,
334
+ T &r,
335
+ Vec2<T> &t,
336
+ bool exc = true);
337
+
338
+ template <class T> bool checkForZeroScaleInRow
339
+ (const T &scl,
340
+ const Vec2<T> &row,
341
+ bool exc = true);
342
+
343
+ template <class T> Matrix33<T> outerProduct
344
+ ( const Vec3<T> &a,
345
+ const Vec3<T> &b);
346
+
347
+
348
+ //-----------------------------------------------------------------------------
349
+ // Implementation for 4x4 Matrix
350
+ //------------------------------
351
+
352
+
353
+ template <class T>
354
+ bool
355
+ extractScaling (const Matrix44<T> &mat, Vec3<T> &scl, bool exc)
356
+ {
357
+ Vec3<T> shr;
358
+ Matrix44<T> M (mat);
359
+
360
+ if (! extractAndRemoveScalingAndShear (M, scl, shr, exc))
361
+ return false;
362
+
363
+ return true;
364
+ }
365
+
366
+
367
+ template <class T>
368
+ Matrix44<T>
369
+ sansScaling (const Matrix44<T> &mat, bool exc)
370
+ {
371
+ Vec3<T> scl;
372
+ Vec3<T> shr;
373
+ Vec3<T> rot;
374
+ Vec3<T> tran;
375
+
376
+ if (! extractSHRT (mat, scl, shr, rot, tran, exc))
377
+ return mat;
378
+
379
+ Matrix44<T> M;
380
+
381
+ M.translate (tran);
382
+ M.rotate (rot);
383
+ M.shear (shr);
384
+
385
+ return M;
386
+ }
387
+
388
+
389
+ template <class T>
390
+ bool
391
+ removeScaling (Matrix44<T> &mat, bool exc)
392
+ {
393
+ Vec3<T> scl;
394
+ Vec3<T> shr;
395
+ Vec3<T> rot;
396
+ Vec3<T> tran;
397
+
398
+ if (! extractSHRT (mat, scl, shr, rot, tran, exc))
399
+ return false;
400
+
401
+ mat.makeIdentity ();
402
+ mat.translate (tran);
403
+ mat.rotate (rot);
404
+ mat.shear (shr);
405
+
406
+ return true;
407
+ }
408
+
409
+
410
+ template <class T>
411
+ bool
412
+ extractScalingAndShear (const Matrix44<T> &mat,
413
+ Vec3<T> &scl, Vec3<T> &shr, bool exc)
414
+ {
415
+ Matrix44<T> M (mat);
416
+
417
+ if (! extractAndRemoveScalingAndShear (M, scl, shr, exc))
418
+ return false;
419
+
420
+ return true;
421
+ }
422
+
423
+
424
+ template <class T>
425
+ Matrix44<T>
426
+ sansScalingAndShear (const Matrix44<T> &mat, bool exc)
427
+ {
428
+ Vec3<T> scl;
429
+ Vec3<T> shr;
430
+ Matrix44<T> M (mat);
431
+
432
+ if (! extractAndRemoveScalingAndShear (M, scl, shr, exc))
433
+ return mat;
434
+
435
+ return M;
436
+ }
437
+
438
+
439
+ template <class T>
440
+ void
441
+ sansScalingAndShear (Matrix44<T> &result, const Matrix44<T> &mat, bool exc)
442
+ {
443
+ Vec3<T> scl;
444
+ Vec3<T> shr;
445
+
446
+ if (! extractAndRemoveScalingAndShear (result, scl, shr, exc))
447
+ result = mat;
448
+ }
449
+
450
+
451
+ template <class T>
452
+ bool
453
+ removeScalingAndShear (Matrix44<T> &mat, bool exc)
454
+ {
455
+ Vec3<T> scl;
456
+ Vec3<T> shr;
457
+
458
+ if (! extractAndRemoveScalingAndShear (mat, scl, shr, exc))
459
+ return false;
460
+
461
+ return true;
462
+ }
463
+
464
+
465
+ template <class T>
466
+ bool
467
+ extractAndRemoveScalingAndShear (Matrix44<T> &mat,
468
+ Vec3<T> &scl, Vec3<T> &shr, bool exc)
469
+ {
470
+ //
471
+ // This implementation follows the technique described in the paper by
472
+ // Spencer W. Thomas in the Graphics Gems II article: "Decomposing a
473
+ // Matrix into Simple Transformations", p. 320.
474
+ //
475
+
476
+ Vec3<T> row[3];
477
+
478
+ row[0] = Vec3<T> (mat[0][0], mat[0][1], mat[0][2]);
479
+ row[1] = Vec3<T> (mat[1][0], mat[1][1], mat[1][2]);
480
+ row[2] = Vec3<T> (mat[2][0], mat[2][1], mat[2][2]);
481
+
482
+ T maxVal = 0;
483
+ for (int i=0; i < 3; i++)
484
+ for (int j=0; j < 3; j++)
485
+ if (IMATH_INTERNAL_NAMESPACE::abs (row[i][j]) > maxVal)
486
+ maxVal = IMATH_INTERNAL_NAMESPACE::abs (row[i][j]);
487
+
488
+ //
489
+ // We normalize the 3x3 matrix here.
490
+ // It was noticed that this can improve numerical stability significantly,
491
+ // especially when many of the upper 3x3 matrix's coefficients are very
492
+ // close to zero; we correct for this step at the end by multiplying the
493
+ // scaling factors by maxVal at the end (shear and rotation are not
494
+ // affected by the normalization).
495
+
496
+ if (maxVal != 0)
497
+ {
498
+ for (int i=0; i < 3; i++)
499
+ if (! checkForZeroScaleInRow (maxVal, row[i], exc))
500
+ return false;
501
+ else
502
+ row[i] /= maxVal;
503
+ }
504
+
505
+ // Compute X scale factor.
506
+ scl.x = row[0].length ();
507
+ if (! checkForZeroScaleInRow (scl.x, row[0], exc))
508
+ return false;
509
+
510
+ // Normalize first row.
511
+ row[0] /= scl.x;
512
+
513
+ // An XY shear factor will shear the X coord. as the Y coord. changes.
514
+ // There are 6 combinations (XY, XZ, YZ, YX, ZX, ZY), although we only
515
+ // extract the first 3 because we can effect the last 3 by shearing in
516
+ // XY, XZ, YZ combined rotations and scales.
517
+ //
518
+ // shear matrix < 1, YX, ZX, 0,
519
+ // XY, 1, ZY, 0,
520
+ // XZ, YZ, 1, 0,
521
+ // 0, 0, 0, 1 >
522
+
523
+ // Compute XY shear factor and make 2nd row orthogonal to 1st.
524
+ shr[0] = row[0].dot (row[1]);
525
+ row[1] -= shr[0] * row[0];
526
+
527
+ // Now, compute Y scale.
528
+ scl.y = row[1].length ();
529
+ if (! checkForZeroScaleInRow (scl.y, row[1], exc))
530
+ return false;
531
+
532
+ // Normalize 2nd row and correct the XY shear factor for Y scaling.
533
+ row[1] /= scl.y;
534
+ shr[0] /= scl.y;
535
+
536
+ // Compute XZ and YZ shears, orthogonalize 3rd row.
537
+ shr[1] = row[0].dot (row[2]);
538
+ row[2] -= shr[1] * row[0];
539
+ shr[2] = row[1].dot (row[2]);
540
+ row[2] -= shr[2] * row[1];
541
+
542
+ // Next, get Z scale.
543
+ scl.z = row[2].length ();
544
+ if (! checkForZeroScaleInRow (scl.z, row[2], exc))
545
+ return false;
546
+
547
+ // Normalize 3rd row and correct the XZ and YZ shear factors for Z scaling.
548
+ row[2] /= scl.z;
549
+ shr[1] /= scl.z;
550
+ shr[2] /= scl.z;
551
+
552
+ // At this point, the upper 3x3 matrix in mat is orthonormal.
553
+ // Check for a coordinate system flip. If the determinant
554
+ // is less than zero, then negate the matrix and the scaling factors.
555
+ if (row[0].dot (row[1].cross (row[2])) < 0)
556
+ for (int i=0; i < 3; i++)
557
+ {
558
+ scl[i] *= -1;
559
+ row[i] *= -1;
560
+ }
561
+
562
+ // Copy over the orthonormal rows into the returned matrix.
563
+ // The upper 3x3 matrix in mat is now a rotation matrix.
564
+ for (int i=0; i < 3; i++)
565
+ {
566
+ mat[i][0] = row[i][0];
567
+ mat[i][1] = row[i][1];
568
+ mat[i][2] = row[i][2];
569
+ }
570
+
571
+ // Correct the scaling factors for the normalization step that we
572
+ // performed above; shear and rotation are not affected by the
573
+ // normalization.
574
+ scl *= maxVal;
575
+
576
+ return true;
577
+ }
578
+
579
+
580
+ template <class T>
581
+ void
582
+ extractEulerXYZ (const Matrix44<T> &mat, Vec3<T> &rot)
583
+ {
584
+ //
585
+ // Normalize the local x, y and z axes to remove scaling.
586
+ //
587
+
588
+ Vec3<T> i (mat[0][0], mat[0][1], mat[0][2]);
589
+ Vec3<T> j (mat[1][0], mat[1][1], mat[1][2]);
590
+ Vec3<T> k (mat[2][0], mat[2][1], mat[2][2]);
591
+
592
+ i.normalize();
593
+ j.normalize();
594
+ k.normalize();
595
+
596
+ Matrix44<T> M (i[0], i[1], i[2], 0,
597
+ j[0], j[1], j[2], 0,
598
+ k[0], k[1], k[2], 0,
599
+ 0, 0, 0, 1);
600
+
601
+ //
602
+ // Extract the first angle, rot.x.
603
+ //
604
+
605
+ rot.x = Math<T>::atan2 (M[1][2], M[2][2]);
606
+
607
+ //
608
+ // Remove the rot.x rotation from M, so that the remaining
609
+ // rotation, N, is only around two axes, and gimbal lock
610
+ // cannot occur.
611
+ //
612
+
613
+ Matrix44<T> N;
614
+ N.rotate (Vec3<T> (-rot.x, 0, 0));
615
+ N = N * M;
616
+
617
+ //
618
+ // Extract the other two angles, rot.y and rot.z, from N.
619
+ //
620
+
621
+ T cy = Math<T>::sqrt (N[0][0]*N[0][0] + N[0][1]*N[0][1]);
622
+ rot.y = Math<T>::atan2 (-N[0][2], cy);
623
+ rot.z = Math<T>::atan2 (-N[1][0], N[1][1]);
624
+ }
625
+
626
+
627
+ template <class T>
628
+ void
629
+ extractEulerZYX (const Matrix44<T> &mat, Vec3<T> &rot)
630
+ {
631
+ //
632
+ // Normalize the local x, y and z axes to remove scaling.
633
+ //
634
+
635
+ Vec3<T> i (mat[0][0], mat[0][1], mat[0][2]);
636
+ Vec3<T> j (mat[1][0], mat[1][1], mat[1][2]);
637
+ Vec3<T> k (mat[2][0], mat[2][1], mat[2][2]);
638
+
639
+ i.normalize();
640
+ j.normalize();
641
+ k.normalize();
642
+
643
+ Matrix44<T> M (i[0], i[1], i[2], 0,
644
+ j[0], j[1], j[2], 0,
645
+ k[0], k[1], k[2], 0,
646
+ 0, 0, 0, 1);
647
+
648
+ //
649
+ // Extract the first angle, rot.x.
650
+ //
651
+
652
+ rot.x = -Math<T>::atan2 (M[1][0], M[0][0]);
653
+
654
+ //
655
+ // Remove the x rotation from M, so that the remaining
656
+ // rotation, N, is only around two axes, and gimbal lock
657
+ // cannot occur.
658
+ //
659
+
660
+ Matrix44<T> N;
661
+ N.rotate (Vec3<T> (0, 0, -rot.x));
662
+ N = N * M;
663
+
664
+ //
665
+ // Extract the other two angles, rot.y and rot.z, from N.
666
+ //
667
+
668
+ T cy = Math<T>::sqrt (N[2][2]*N[2][2] + N[2][1]*N[2][1]);
669
+ rot.y = -Math<T>::atan2 (-N[2][0], cy);
670
+ rot.z = -Math<T>::atan2 (-N[1][2], N[1][1]);
671
+ }
672
+
673
+
674
+ template <class T>
675
+ Quat<T>
676
+ extractQuat (const Matrix44<T> &mat)
677
+ {
678
+ Matrix44<T> rot;
679
+
680
+ T tr, s;
681
+ T q[4];
682
+ int i, j, k;
683
+ Quat<T> quat;
684
+
685
+ int nxt[3] = {1, 2, 0};
686
+ tr = mat[0][0] + mat[1][1] + mat[2][2];
687
+
688
+ // check the diagonal
689
+ if (tr > 0.0) {
690
+ s = Math<T>::sqrt (tr + T(1.0));
691
+ quat.r = s / T(2.0);
692
+ s = T(0.5) / s;
693
+
694
+ quat.v.x = (mat[1][2] - mat[2][1]) * s;
695
+ quat.v.y = (mat[2][0] - mat[0][2]) * s;
696
+ quat.v.z = (mat[0][1] - mat[1][0]) * s;
697
+ }
698
+ else {
699
+ // diagonal is negative
700
+ i = 0;
701
+ if (mat[1][1] > mat[0][0])
702
+ i=1;
703
+ if (mat[2][2] > mat[i][i])
704
+ i=2;
705
+
706
+ j = nxt[i];
707
+ k = nxt[j];
708
+ s = Math<T>::sqrt ((mat[i][i] - (mat[j][j] + mat[k][k])) + T(1.0));
709
+
710
+ q[i] = s * T(0.5);
711
+ if (s != T(0.0))
712
+ s = T(0.5) / s;
713
+
714
+ q[3] = (mat[j][k] - mat[k][j]) * s;
715
+ q[j] = (mat[i][j] + mat[j][i]) * s;
716
+ q[k] = (mat[i][k] + mat[k][i]) * s;
717
+
718
+ quat.v.x = q[0];
719
+ quat.v.y = q[1];
720
+ quat.v.z = q[2];
721
+ quat.r = q[3];
722
+ }
723
+
724
+ return quat;
725
+ }
726
+
727
+ template <class T>
728
+ bool
729
+ extractSHRT (const Matrix44<T> &mat,
730
+ Vec3<T> &s,
731
+ Vec3<T> &h,
732
+ Vec3<T> &r,
733
+ Vec3<T> &t,
734
+ bool exc /* = true */ ,
735
+ typename Euler<T>::Order rOrder /* = Euler<T>::XYZ */ )
736
+ {
737
+ Matrix44<T> rot;
738
+
739
+ rot = mat;
740
+ if (! extractAndRemoveScalingAndShear (rot, s, h, exc))
741
+ return false;
742
+
743
+ extractEulerXYZ (rot, r);
744
+
745
+ t.x = mat[3][0];
746
+ t.y = mat[3][1];
747
+ t.z = mat[3][2];
748
+
749
+ if (rOrder != Euler<T>::XYZ)
750
+ {
751
+ IMATH_INTERNAL_NAMESPACE::Euler<T> eXYZ (r, IMATH_INTERNAL_NAMESPACE::Euler<T>::XYZ);
752
+ IMATH_INTERNAL_NAMESPACE::Euler<T> e (eXYZ, rOrder);
753
+ r = e.toXYZVector ();
754
+ }
755
+
756
+ return true;
757
+ }
758
+
759
+ template <class T>
760
+ bool
761
+ extractSHRT (const Matrix44<T> &mat,
762
+ Vec3<T> &s,
763
+ Vec3<T> &h,
764
+ Vec3<T> &r,
765
+ Vec3<T> &t,
766
+ bool exc)
767
+ {
768
+ return extractSHRT(mat, s, h, r, t, exc, IMATH_INTERNAL_NAMESPACE::Euler<T>::XYZ);
769
+ }
770
+
771
+ template <class T>
772
+ bool
773
+ extractSHRT (const Matrix44<T> &mat,
774
+ Vec3<T> &s,
775
+ Vec3<T> &h,
776
+ Euler<T> &r,
777
+ Vec3<T> &t,
778
+ bool exc /* = true */)
779
+ {
780
+ return extractSHRT (mat, s, h, r, t, exc, r.order ());
781
+ }
782
+
783
+
784
+ template <class T>
785
+ bool
786
+ checkForZeroScaleInRow (const T& scl,
787
+ const Vec3<T> &row,
788
+ bool exc /* = true */ )
789
+ {
790
+ for (int i = 0; i < 3; i++)
791
+ {
792
+ if ((abs (scl) < 1 && abs (row[i]) >= limits<T>::max() * abs (scl)))
793
+ {
794
+ if (exc)
795
+ throw IMATH_INTERNAL_NAMESPACE::ZeroScaleExc ("Cannot remove zero scaling "
796
+ "from matrix.");
797
+ else
798
+ return false;
799
+ }
800
+ }
801
+
802
+ return true;
803
+ }
804
+
805
+ template <class T>
806
+ Matrix44<T>
807
+ outerProduct (const Vec4<T> &a, const Vec4<T> &b )
808
+ {
809
+ return Matrix44<T> (a.x*b.x, a.x*b.y, a.x*b.z, a.x*b.w,
810
+ a.y*b.x, a.y*b.y, a.y*b.z, a.x*b.w,
811
+ a.z*b.x, a.z*b.y, a.z*b.z, a.x*b.w,
812
+ a.w*b.x, a.w*b.y, a.w*b.z, a.w*b.w);
813
+ }
814
+
815
+ template <class T>
816
+ Matrix44<T>
817
+ rotationMatrix (const Vec3<T> &from, const Vec3<T> &to)
818
+ {
819
+ Quat<T> q;
820
+ q.setRotation(from, to);
821
+ return q.toMatrix44();
822
+ }
823
+
824
+
825
+ template <class T>
826
+ Matrix44<T>
827
+ rotationMatrixWithUpDir (const Vec3<T> &fromDir,
828
+ const Vec3<T> &toDir,
829
+ const Vec3<T> &upDir)
830
+ {
831
+ //
832
+ // The goal is to obtain a rotation matrix that takes
833
+ // "fromDir" to "toDir". We do this in two steps and
834
+ // compose the resulting rotation matrices;
835
+ // (a) rotate "fromDir" into the z-axis
836
+ // (b) rotate the z-axis into "toDir"
837
+ //
838
+
839
+ // The from direction must be non-zero; but we allow zero to and up dirs.
840
+ if (fromDir.length () == 0)
841
+ return Matrix44<T> ();
842
+
843
+ else
844
+ {
845
+ Matrix44<T> zAxis2FromDir( IMATH_INTERNAL_NAMESPACE::UNINITIALIZED );
846
+ alignZAxisWithTargetDir (zAxis2FromDir, fromDir, Vec3<T> (0, 1, 0));
847
+
848
+ Matrix44<T> fromDir2zAxis = zAxis2FromDir.transposed ();
849
+
850
+ Matrix44<T> zAxis2ToDir( IMATH_INTERNAL_NAMESPACE::UNINITIALIZED );
851
+ alignZAxisWithTargetDir (zAxis2ToDir, toDir, upDir);
852
+
853
+ return fromDir2zAxis * zAxis2ToDir;
854
+ }
855
+ }
856
+
857
+
858
+ template <class T>
859
+ void
860
+ alignZAxisWithTargetDir (Matrix44<T> &result, Vec3<T> targetDir, Vec3<T> upDir)
861
+ {
862
+ //
863
+ // Ensure that the target direction is non-zero.
864
+ //
865
+
866
+ if ( targetDir.length () == 0 )
867
+ targetDir = Vec3<T> (0, 0, 1);
868
+
869
+ //
870
+ // Ensure that the up direction is non-zero.
871
+ //
872
+
873
+ if ( upDir.length () == 0 )
874
+ upDir = Vec3<T> (0, 1, 0);
875
+
876
+ //
877
+ // Check for degeneracies. If the upDir and targetDir are parallel
878
+ // or opposite, then compute a new, arbitrary up direction that is
879
+ // not parallel or opposite to the targetDir.
880
+ //
881
+
882
+ if (upDir.cross (targetDir).length () == 0)
883
+ {
884
+ upDir = targetDir.cross (Vec3<T> (1, 0, 0));
885
+ if (upDir.length() == 0)
886
+ upDir = targetDir.cross(Vec3<T> (0, 0, 1));
887
+ }
888
+
889
+ //
890
+ // Compute the x-, y-, and z-axis vectors of the new coordinate system.
891
+ //
892
+
893
+ Vec3<T> targetPerpDir = upDir.cross (targetDir);
894
+ Vec3<T> targetUpDir = targetDir.cross (targetPerpDir);
895
+
896
+ //
897
+ // Rotate the x-axis into targetPerpDir (row 0),
898
+ // rotate the y-axis into targetUpDir (row 1),
899
+ // rotate the z-axis into targetDir (row 2).
900
+ //
901
+
902
+ Vec3<T> row[3];
903
+ row[0] = targetPerpDir.normalized ();
904
+ row[1] = targetUpDir .normalized ();
905
+ row[2] = targetDir .normalized ();
906
+
907
+ result.x[0][0] = row[0][0];
908
+ result.x[0][1] = row[0][1];
909
+ result.x[0][2] = row[0][2];
910
+ result.x[0][3] = (T)0;
911
+
912
+ result.x[1][0] = row[1][0];
913
+ result.x[1][1] = row[1][1];
914
+ result.x[1][2] = row[1][2];
915
+ result.x[1][3] = (T)0;
916
+
917
+ result.x[2][0] = row[2][0];
918
+ result.x[2][1] = row[2][1];
919
+ result.x[2][2] = row[2][2];
920
+ result.x[2][3] = (T)0;
921
+
922
+ result.x[3][0] = (T)0;
923
+ result.x[3][1] = (T)0;
924
+ result.x[3][2] = (T)0;
925
+ result.x[3][3] = (T)1;
926
+ }
927
+
928
+
929
+ // Compute an orthonormal direct frame from : a position, an x axis direction and a normal to the y axis
930
+ // If the x axis and normal are perpendicular, then the normal will have the same direction as the z axis.
931
+ // Inputs are :
932
+ // -the position of the frame
933
+ // -the x axis direction of the frame
934
+ // -a normal to the y axis of the frame
935
+ // Return is the orthonormal frame
936
+ template <class T>
937
+ Matrix44<T>
938
+ computeLocalFrame( const Vec3<T>& p,
939
+ const Vec3<T>& xDir,
940
+ const Vec3<T>& normal)
941
+ {
942
+ Vec3<T> _xDir(xDir);
943
+ Vec3<T> x = _xDir.normalize();
944
+ Vec3<T> y = (normal % x).normalize();
945
+ Vec3<T> z = (x % y).normalize();
946
+
947
+ Matrix44<T> L;
948
+ L[0][0] = x[0];
949
+ L[0][1] = x[1];
950
+ L[0][2] = x[2];
951
+ L[0][3] = 0.0;
952
+
953
+ L[1][0] = y[0];
954
+ L[1][1] = y[1];
955
+ L[1][2] = y[2];
956
+ L[1][3] = 0.0;
957
+
958
+ L[2][0] = z[0];
959
+ L[2][1] = z[1];
960
+ L[2][2] = z[2];
961
+ L[2][3] = 0.0;
962
+
963
+ L[3][0] = p[0];
964
+ L[3][1] = p[1];
965
+ L[3][2] = p[2];
966
+ L[3][3] = 1.0;
967
+
968
+ return L;
969
+ }
970
+
971
+ // Add a translate/rotate/scale offset to an input frame
972
+ // and put it in another frame of reference
973
+ // Inputs are :
974
+ // - input frame
975
+ // - translate offset
976
+ // - rotate offset in degrees
977
+ // - scale offset
978
+ // - frame of reference
979
+ // Output is the offsetted frame
980
+ template <class T>
981
+ Matrix44<T>
982
+ addOffset( const Matrix44<T>& inMat,
983
+ const Vec3<T>& tOffset,
984
+ const Vec3<T>& rOffset,
985
+ const Vec3<T>& sOffset,
986
+ const Matrix44<T>& ref)
987
+ {
988
+ Matrix44<T> O;
989
+
990
+ Vec3<T> _rOffset(rOffset);
991
+ _rOffset *= M_PI / 180.0;
992
+ O.rotate (_rOffset);
993
+
994
+ O[3][0] = tOffset[0];
995
+ O[3][1] = tOffset[1];
996
+ O[3][2] = tOffset[2];
997
+
998
+ Matrix44<T> S;
999
+ S.scale (sOffset);
1000
+
1001
+ Matrix44<T> X = S * O * inMat * ref;
1002
+
1003
+ return X;
1004
+ }
1005
+
1006
+ // Compute Translate/Rotate/Scale matrix from matrix A with the Rotate/Scale of Matrix B
1007
+ // Inputs are :
1008
+ // -keepRotateA : if true keep rotate from matrix A, use B otherwise
1009
+ // -keepScaleA : if true keep scale from matrix A, use B otherwise
1010
+ // -Matrix A
1011
+ // -Matrix B
1012
+ // Return Matrix A with tweaked rotation/scale
1013
+ template <class T>
1014
+ Matrix44<T>
1015
+ computeRSMatrix( bool keepRotateA,
1016
+ bool keepScaleA,
1017
+ const Matrix44<T>& A,
1018
+ const Matrix44<T>& B)
1019
+ {
1020
+ Vec3<T> as, ah, ar, at;
1021
+ extractSHRT (A, as, ah, ar, at);
1022
+
1023
+ Vec3<T> bs, bh, br, bt;
1024
+ extractSHRT (B, bs, bh, br, bt);
1025
+
1026
+ if (!keepRotateA)
1027
+ ar = br;
1028
+
1029
+ if (!keepScaleA)
1030
+ as = bs;
1031
+
1032
+ Matrix44<T> mat;
1033
+ mat.makeIdentity();
1034
+ mat.translate (at);
1035
+ mat.rotate (ar);
1036
+ mat.scale (as);
1037
+
1038
+ return mat;
1039
+ }
1040
+
1041
+
1042
+
1043
+ //-----------------------------------------------------------------------------
1044
+ // Implementation for 3x3 Matrix
1045
+ //------------------------------
1046
+
1047
+
1048
+ template <class T>
1049
+ bool
1050
+ extractScaling (const Matrix33<T> &mat, Vec2<T> &scl, bool exc)
1051
+ {
1052
+ T shr;
1053
+ Matrix33<T> M (mat);
1054
+
1055
+ if (! extractAndRemoveScalingAndShear (M, scl, shr, exc))
1056
+ return false;
1057
+
1058
+ return true;
1059
+ }
1060
+
1061
+
1062
+ template <class T>
1063
+ Matrix33<T>
1064
+ sansScaling (const Matrix33<T> &mat, bool exc)
1065
+ {
1066
+ Vec2<T> scl;
1067
+ T shr;
1068
+ T rot;
1069
+ Vec2<T> tran;
1070
+
1071
+ if (! extractSHRT (mat, scl, shr, rot, tran, exc))
1072
+ return mat;
1073
+
1074
+ Matrix33<T> M;
1075
+
1076
+ M.translate (tran);
1077
+ M.rotate (rot);
1078
+ M.shear (shr);
1079
+
1080
+ return M;
1081
+ }
1082
+
1083
+
1084
+ template <class T>
1085
+ bool
1086
+ removeScaling (Matrix33<T> &mat, bool exc)
1087
+ {
1088
+ Vec2<T> scl;
1089
+ T shr;
1090
+ T rot;
1091
+ Vec2<T> tran;
1092
+
1093
+ if (! extractSHRT (mat, scl, shr, rot, tran, exc))
1094
+ return false;
1095
+
1096
+ mat.makeIdentity ();
1097
+ mat.translate (tran);
1098
+ mat.rotate (rot);
1099
+ mat.shear (shr);
1100
+
1101
+ return true;
1102
+ }
1103
+
1104
+
1105
+ template <class T>
1106
+ bool
1107
+ extractScalingAndShear (const Matrix33<T> &mat, Vec2<T> &scl, T &shr, bool exc)
1108
+ {
1109
+ Matrix33<T> M (mat);
1110
+
1111
+ if (! extractAndRemoveScalingAndShear (M, scl, shr, exc))
1112
+ return false;
1113
+
1114
+ return true;
1115
+ }
1116
+
1117
+
1118
+ template <class T>
1119
+ Matrix33<T>
1120
+ sansScalingAndShear (const Matrix33<T> &mat, bool exc)
1121
+ {
1122
+ Vec2<T> scl;
1123
+ T shr;
1124
+ Matrix33<T> M (mat);
1125
+
1126
+ if (! extractAndRemoveScalingAndShear (M, scl, shr, exc))
1127
+ return mat;
1128
+
1129
+ return M;
1130
+ }
1131
+
1132
+
1133
+ template <class T>
1134
+ bool
1135
+ removeScalingAndShear (Matrix33<T> &mat, bool exc)
1136
+ {
1137
+ Vec2<T> scl;
1138
+ T shr;
1139
+
1140
+ if (! extractAndRemoveScalingAndShear (mat, scl, shr, exc))
1141
+ return false;
1142
+
1143
+ return true;
1144
+ }
1145
+
1146
+ template <class T>
1147
+ bool
1148
+ extractAndRemoveScalingAndShear (Matrix33<T> &mat,
1149
+ Vec2<T> &scl, T &shr, bool exc)
1150
+ {
1151
+ Vec2<T> row[2];
1152
+
1153
+ row[0] = Vec2<T> (mat[0][0], mat[0][1]);
1154
+ row[1] = Vec2<T> (mat[1][0], mat[1][1]);
1155
+
1156
+ T maxVal = 0;
1157
+ for (int i=0; i < 2; i++)
1158
+ for (int j=0; j < 2; j++)
1159
+ if (IMATH_INTERNAL_NAMESPACE::abs (row[i][j]) > maxVal)
1160
+ maxVal = IMATH_INTERNAL_NAMESPACE::abs (row[i][j]);
1161
+
1162
+ //
1163
+ // We normalize the 2x2 matrix here.
1164
+ // It was noticed that this can improve numerical stability significantly,
1165
+ // especially when many of the upper 2x2 matrix's coefficients are very
1166
+ // close to zero; we correct for this step at the end by multiplying the
1167
+ // scaling factors by maxVal at the end (shear and rotation are not
1168
+ // affected by the normalization).
1169
+
1170
+ if (maxVal != 0)
1171
+ {
1172
+ for (int i=0; i < 2; i++)
1173
+ if (! checkForZeroScaleInRow (maxVal, row[i], exc))
1174
+ return false;
1175
+ else
1176
+ row[i] /= maxVal;
1177
+ }
1178
+
1179
+ // Compute X scale factor.
1180
+ scl.x = row[0].length ();
1181
+ if (! checkForZeroScaleInRow (scl.x, row[0], exc))
1182
+ return false;
1183
+
1184
+ // Normalize first row.
1185
+ row[0] /= scl.x;
1186
+
1187
+ // An XY shear factor will shear the X coord. as the Y coord. changes.
1188
+ // There are 2 combinations (XY, YX), although we only extract the XY
1189
+ // shear factor because we can effect the an YX shear factor by
1190
+ // shearing in XY combined with rotations and scales.
1191
+ //
1192
+ // shear matrix < 1, YX, 0,
1193
+ // XY, 1, 0,
1194
+ // 0, 0, 1 >
1195
+
1196
+ // Compute XY shear factor and make 2nd row orthogonal to 1st.
1197
+ shr = row[0].dot (row[1]);
1198
+ row[1] -= shr * row[0];
1199
+
1200
+ // Now, compute Y scale.
1201
+ scl.y = row[1].length ();
1202
+ if (! checkForZeroScaleInRow (scl.y, row[1], exc))
1203
+ return false;
1204
+
1205
+ // Normalize 2nd row and correct the XY shear factor for Y scaling.
1206
+ row[1] /= scl.y;
1207
+ shr /= scl.y;
1208
+
1209
+ // At this point, the upper 2x2 matrix in mat is orthonormal.
1210
+ // Check for a coordinate system flip. If the determinant
1211
+ // is -1, then flip the rotation matrix and adjust the scale(Y)
1212
+ // and shear(XY) factors to compensate.
1213
+ if (row[0][0] * row[1][1] - row[0][1] * row[1][0] < 0)
1214
+ {
1215
+ row[1][0] *= -1;
1216
+ row[1][1] *= -1;
1217
+ scl[1] *= -1;
1218
+ shr *= -1;
1219
+ }
1220
+
1221
+ // Copy over the orthonormal rows into the returned matrix.
1222
+ // The upper 2x2 matrix in mat is now a rotation matrix.
1223
+ for (int i=0; i < 2; i++)
1224
+ {
1225
+ mat[i][0] = row[i][0];
1226
+ mat[i][1] = row[i][1];
1227
+ }
1228
+
1229
+ scl *= maxVal;
1230
+
1231
+ return true;
1232
+ }
1233
+
1234
+
1235
+ template <class T>
1236
+ void
1237
+ extractEuler (const Matrix33<T> &mat, T &rot)
1238
+ {
1239
+ //
1240
+ // Normalize the local x and y axes to remove scaling.
1241
+ //
1242
+
1243
+ Vec2<T> i (mat[0][0], mat[0][1]);
1244
+ Vec2<T> j (mat[1][0], mat[1][1]);
1245
+
1246
+ i.normalize();
1247
+ j.normalize();
1248
+
1249
+ //
1250
+ // Extract the angle, rot.
1251
+ //
1252
+
1253
+ rot = - Math<T>::atan2 (j[0], i[0]);
1254
+ }
1255
+
1256
+
1257
+ template <class T>
1258
+ bool
1259
+ extractSHRT (const Matrix33<T> &mat,
1260
+ Vec2<T> &s,
1261
+ T &h,
1262
+ T &r,
1263
+ Vec2<T> &t,
1264
+ bool exc)
1265
+ {
1266
+ Matrix33<T> rot;
1267
+
1268
+ rot = mat;
1269
+ if (! extractAndRemoveScalingAndShear (rot, s, h, exc))
1270
+ return false;
1271
+
1272
+ extractEuler (rot, r);
1273
+
1274
+ t.x = mat[2][0];
1275
+ t.y = mat[2][1];
1276
+
1277
+ return true;
1278
+ }
1279
+
1280
+
1281
+ template <class T>
1282
+ bool
1283
+ checkForZeroScaleInRow (const T& scl,
1284
+ const Vec2<T> &row,
1285
+ bool exc /* = true */ )
1286
+ {
1287
+ for (int i = 0; i < 2; i++)
1288
+ {
1289
+ if ((abs (scl) < 1 && abs (row[i]) >= limits<T>::max() * abs (scl)))
1290
+ {
1291
+ if (exc)
1292
+ throw IMATH_INTERNAL_NAMESPACE::ZeroScaleExc (
1293
+ "Cannot remove zero scaling from matrix.");
1294
+ else
1295
+ return false;
1296
+ }
1297
+ }
1298
+
1299
+ return true;
1300
+ }
1301
+
1302
+
1303
+ template <class T>
1304
+ Matrix33<T>
1305
+ outerProduct (const Vec3<T> &a, const Vec3<T> &b )
1306
+ {
1307
+ return Matrix33<T> (a.x*b.x, a.x*b.y, a.x*b.z,
1308
+ a.y*b.x, a.y*b.y, a.y*b.z,
1309
+ a.z*b.x, a.z*b.y, a.z*b.z );
1310
+ }
1311
+
1312
+
1313
+ // Computes the translation and rotation that brings the 'from' points
1314
+ // as close as possible to the 'to' points under the Frobenius norm.
1315
+ // To be more specific, let x be the matrix of 'from' points and y be
1316
+ // the matrix of 'to' points, we want to find the matrix A of the form
1317
+ // [ R t ]
1318
+ // [ 0 1 ]
1319
+ // that minimizes
1320
+ // || (A*x - y)^T * W * (A*x - y) ||_F
1321
+ // If doScaling is true, then a uniform scale is allowed also.
1322
+ template <typename T>
1323
+ IMATH_INTERNAL_NAMESPACE::M44d
1324
+ procrustesRotationAndTranslation (const IMATH_INTERNAL_NAMESPACE::Vec3<T>* A, // From these
1325
+ const IMATH_INTERNAL_NAMESPACE::Vec3<T>* B, // To these
1326
+ const T* weights,
1327
+ const size_t numPoints,
1328
+ const bool doScaling = false);
1329
+
1330
+ // Unweighted:
1331
+ template <typename T>
1332
+ IMATH_INTERNAL_NAMESPACE::M44d
1333
+ procrustesRotationAndTranslation (const IMATH_INTERNAL_NAMESPACE::Vec3<T>* A,
1334
+ const IMATH_INTERNAL_NAMESPACE::Vec3<T>* B,
1335
+ const size_t numPoints,
1336
+ const bool doScaling = false);
1337
+
1338
+ // Compute the SVD of a 3x3 matrix using Jacobi transformations. This method
1339
+ // should be quite accurate (competitive with LAPACK) even for poorly
1340
+ // conditioned matrices, and because it has been written specifically for the
1341
+ // 3x3/4x4 case it is much faster than calling out to LAPACK.
1342
+ //
1343
+ // The SVD of a 3x3/4x4 matrix A is defined as follows:
1344
+ // A = U * S * V^T
1345
+ // where S is the diagonal matrix of singular values and both U and V are
1346
+ // orthonormal. By convention, the entries S are all positive and sorted from
1347
+ // the largest to the smallest. However, some uses of this function may
1348
+ // require that the matrix U*V^T have positive determinant; in this case, we
1349
+ // may make the smallest singular value negative to ensure that this is
1350
+ // satisfied.
1351
+ //
1352
+ // Currently only available for single- and double-precision matrices.
1353
+ template <typename T>
1354
+ void
1355
+ jacobiSVD (const IMATH_INTERNAL_NAMESPACE::Matrix33<T>& A,
1356
+ IMATH_INTERNAL_NAMESPACE::Matrix33<T>& U,
1357
+ IMATH_INTERNAL_NAMESPACE::Vec3<T>& S,
1358
+ IMATH_INTERNAL_NAMESPACE::Matrix33<T>& V,
1359
+ const T tol = IMATH_INTERNAL_NAMESPACE::limits<T>::epsilon(),
1360
+ const bool forcePositiveDeterminant = false);
1361
+
1362
+ template <typename T>
1363
+ void
1364
+ jacobiSVD (const IMATH_INTERNAL_NAMESPACE::Matrix44<T>& A,
1365
+ IMATH_INTERNAL_NAMESPACE::Matrix44<T>& U,
1366
+ IMATH_INTERNAL_NAMESPACE::Vec4<T>& S,
1367
+ IMATH_INTERNAL_NAMESPACE::Matrix44<T>& V,
1368
+ const T tol = IMATH_INTERNAL_NAMESPACE::limits<T>::epsilon(),
1369
+ const bool forcePositiveDeterminant = false);
1370
+
1371
+ // Compute the eigenvalues (S) and the eigenvectors (V) of
1372
+ // a real symmetric matrix using Jacobi transformation.
1373
+ //
1374
+ // Jacobi transformation of a 3x3/4x4 matrix A outputs S and V:
1375
+ // A = V * S * V^T
1376
+ // where V is orthonormal and S is the diagonal matrix of eigenvalues.
1377
+ // Input matrix A must be symmetric. A is also modified during
1378
+ // the computation so that upper diagonal entries of A become zero.
1379
+ //
1380
+ template <typename T>
1381
+ void
1382
+ jacobiEigenSolver (Matrix33<T>& A,
1383
+ Vec3<T>& S,
1384
+ Matrix33<T>& V,
1385
+ const T tol);
1386
+
1387
+ template <typename T>
1388
+ inline
1389
+ void
1390
+ jacobiEigenSolver (Matrix33<T>& A,
1391
+ Vec3<T>& S,
1392
+ Matrix33<T>& V)
1393
+ {
1394
+ jacobiEigenSolver(A,S,V,limits<T>::epsilon());
1395
+ }
1396
+
1397
+ template <typename T>
1398
+ void
1399
+ jacobiEigenSolver (Matrix44<T>& A,
1400
+ Vec4<T>& S,
1401
+ Matrix44<T>& V,
1402
+ const T tol);
1403
+
1404
+ template <typename T>
1405
+ inline
1406
+ void
1407
+ jacobiEigenSolver (Matrix44<T>& A,
1408
+ Vec4<T>& S,
1409
+ Matrix44<T>& V)
1410
+ {
1411
+ jacobiEigenSolver(A,S,V,limits<T>::epsilon());
1412
+ }
1413
+
1414
+ // Compute a eigenvector corresponding to the abs max/min eigenvalue
1415
+ // of a real symmetric matrix using Jacobi transformation.
1416
+ template <typename TM, typename TV>
1417
+ void
1418
+ maxEigenVector (TM& A, TV& S);
1419
+ template <typename TM, typename TV>
1420
+ void
1421
+ minEigenVector (TM& A, TV& S);
1422
+
1423
+ IMATH_INTERNAL_NAMESPACE_HEADER_EXIT
1424
+
1425
+ #endif // INCLUDED_IMATHMATRIXALGO_H