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,1640 @@
1
+ //*@@@+++@@@@******************************************************************
2
+ //
3
+ // Copyright � Microsoft Corp.
4
+ // All rights reserved.
5
+ //
6
+ // Redistribution and use in source and binary forms, with or without
7
+ // modification, are permitted provided that the following conditions are met:
8
+ //
9
+ // � Redistributions of source code must retain the above copyright notice,
10
+ // this list of conditions and the following disclaimer.
11
+ // � Redistributions in binary form must reproduce the above copyright notice,
12
+ // this list of conditions and the following disclaimer in the documentation
13
+ // and/or other materials provided with the distribution.
14
+ //
15
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
+ // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
+ // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18
+ // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
19
+ // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20
+ // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21
+ // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22
+ // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
+ // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24
+ // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25
+ // POSSIBILITY OF SUCH DAMAGE.
26
+ //
27
+ //*@@@---@@@@******************************************************************
28
+ #include "strcodec.h"
29
+ #include "decode.h"
30
+
31
+ #if defined(WMP_OPT_SSE2)
32
+ #include <emmintrin.h>
33
+ #include <windows.h>
34
+
35
+ //================================================================
36
+ static __m128i g_const_d0;
37
+ static __m128i g_const_d1;
38
+
39
+ __m128i g_const_d3;
40
+ __m128i g_const_d4;
41
+ __m128i g_const_d0x80;
42
+ __m128i g_const_w0x80;
43
+ __m128i g_const_b0x80;
44
+
45
+ //================================================================
46
+ #if defined(WMP_OPT_CC_DEC)
47
+ __declspec(naked) void __stdcall storeRGB24_5(
48
+ U8* pbYCoCg,
49
+ size_t cbYCoCg,
50
+ const U8* pbRGB,
51
+ size_t cbRGB,
52
+ size_t cmb)
53
+ {
54
+ #define DISP 8
55
+ UNREFERENCED_PARAMETER( pbYCoCg );
56
+ UNREFERENCED_PARAMETER( cbYCoCg );
57
+ UNREFERENCED_PARAMETER( pbRGB );
58
+ UNREFERENCED_PARAMETER( cbRGB );
59
+ UNREFERENCED_PARAMETER( cmb );
60
+ __asm {
61
+ push ebp
62
+ push ebx
63
+ push esi
64
+ push edi
65
+
66
+ mov ebx, [esp + 36] // $ebx = cmb
67
+ mov edi, [esp + 28] // $edi = pbRGB
68
+ lea ebx, [ebx + ebx * 2] // $ebx = cmb * 3
69
+ mov edx, [esp + 32] // $edx = cbRGB
70
+ shl ebx, 4 // $ebx = cmb * 3 * 16
71
+ mov esi, [esp + 20] // $esi = pbYCoCg
72
+ add edi, ebx // $edi = pbRGB + 3 * 16 * cmb
73
+ mov ebp, [esp + 24] // $ebp = cbYCoCg
74
+ neg ebx
75
+
76
+ mov eax, esp
77
+ and esp, 0xffffff80
78
+ sub esp, 64 * 4 + DISP
79
+
80
+ mov [esp], eax // original $esp
81
+ mov [esp + 4], edi
82
+ }
83
+ Loop0:
84
+ __asm {
85
+ mov edi, [esp + 4] // $edi = pbRGB + 3 * 16 * cmb
86
+
87
+ // first 8 pixels
88
+ pxor xmm1, xmm1
89
+ pxor xmm5, xmm5
90
+ movdqa xmm0, [esi]
91
+ movdqa xmm4, [esi + 16]
92
+ psubd xmm1, [esi + ebp]
93
+ psubd xmm5, [esi + ebp + 16]
94
+ movdqa xmm2, [esi + ebp * 2]
95
+ movdqa xmm6, [esi + ebp * 2 + 16]
96
+
97
+ paddd xmm0, [g_const_d0x80]
98
+ paddd xmm4, [g_const_d0x80]
99
+
100
+ // ICC
101
+ movdqa xmm3, xmm1 // g -= r >> 1
102
+ movdqa xmm7, xmm5
103
+ psrad xmm3, 1
104
+ psrad xmm7, 1
105
+ psubd xmm0, xmm3
106
+ psubd xmm4, xmm7
107
+
108
+ movdqa xmm3, [g_const_d1] // r -= ((b + 1) >> 1) - g
109
+ movdqa xmm7, [g_const_d1]
110
+ paddd xmm3, xmm2
111
+ paddd xmm7, xmm6
112
+ paddd xmm1, xmm0
113
+ paddd xmm5, xmm4
114
+ psrad xmm3, 1
115
+ psrad xmm7, 1
116
+ psubd xmm1, xmm3
117
+ psubd xmm5, xmm7
118
+
119
+ paddd xmm2, xmm1 // b += r
120
+ paddd xmm6, xmm5
121
+
122
+ pslld xmm0, 8
123
+ pslld xmm2, 16
124
+ pslld xmm4, 8
125
+ pslld xmm6, 16
126
+ por xmm0, xmm1
127
+ por xmm4, xmm5
128
+ por xmm0, xmm2
129
+ por xmm4, xmm6
130
+
131
+ movdqa [esp + DISP + 64 * 0 + 16 * 0], xmm0
132
+ pslld xmm0, 8
133
+ movdqa [esp + DISP + 64 * 0 + 16 * 1], xmm4
134
+ pslld xmm4, 8
135
+ movdqa [esp + DISP + 64 * 0 + 16 * 2], xmm0
136
+ movdqa [esp + DISP + 64 * 0 + 16 * 3], xmm4
137
+
138
+ // second 8 pixels
139
+ pxor xmm1, xmm1
140
+ pxor xmm5, xmm5
141
+ movdqa xmm0, [esi + 32]
142
+ movdqa xmm4, [esi + 48]
143
+ psubd xmm1, [esi + ebp + 32]
144
+ psubd xmm5, [esi + ebp + 48]
145
+ movdqa xmm2, [esi + ebp * 2 + 32]
146
+ movdqa xmm6, [esi + ebp * 2 + 48]
147
+
148
+ paddd xmm0, [g_const_d0x80]
149
+ paddd xmm4, [g_const_d0x80]
150
+
151
+ // ICC
152
+ movdqa xmm3, xmm1 // g -= r >> 1
153
+ movdqa xmm7, xmm5
154
+ psrad xmm3, 1
155
+ psrad xmm7, 1
156
+ psubd xmm0, xmm3
157
+ psubd xmm4, xmm7
158
+
159
+ movdqa xmm3, [g_const_d1] // r -= ((b + 1) >> 1) - g
160
+ movdqa xmm7, [g_const_d1]
161
+ paddd xmm3, xmm2
162
+ paddd xmm7, xmm6
163
+ paddd xmm1, xmm0
164
+ paddd xmm5, xmm4
165
+ psrad xmm3, 1
166
+ psrad xmm7, 1
167
+ psubd xmm1, xmm3
168
+ psubd xmm5, xmm7
169
+
170
+ paddd xmm2, xmm1 // b += r
171
+ paddd xmm6, xmm5
172
+
173
+ pslld xmm0, 8
174
+ pslld xmm2, 16
175
+ pslld xmm4, 8
176
+ pslld xmm6, 16
177
+ por xmm0, xmm1
178
+ por xmm4, xmm5
179
+ por xmm0, xmm2
180
+ por xmm4, xmm6
181
+
182
+ movdqa [esp + DISP + 64 * 1 + 16 * 0], xmm0
183
+ pslld xmm0, 8
184
+ movdqa [esp + DISP + 64 * 1 + 16 * 1], xmm4
185
+ pslld xmm4, 8
186
+ movdqa [esp + DISP + 64 * 1 + 16 * 2], xmm0
187
+ movdqa [esp + DISP + 64 * 1 + 16 * 3], xmm4
188
+
189
+ //================
190
+ add esi, 64
191
+
192
+ // first 8 pixels
193
+ pxor xmm1, xmm1
194
+ pxor xmm5, xmm5
195
+ movdqa xmm0, [esi]
196
+ movdqa xmm4, [esi + 16]
197
+ psubd xmm1, [esi + ebp]
198
+ psubd xmm5, [esi + ebp + 16]
199
+ movdqa xmm2, [esi + ebp * 2]
200
+ movdqa xmm6, [esi + ebp * 2 + 16]
201
+
202
+ paddd xmm0, [g_const_d0x80]
203
+ paddd xmm4, [g_const_d0x80]
204
+
205
+ // ICC
206
+ movdqa xmm3, xmm1 // g -= r >> 1
207
+ movdqa xmm7, xmm5
208
+ psrad xmm3, 1
209
+ psrad xmm7, 1
210
+ psubd xmm0, xmm3
211
+ psubd xmm4, xmm7
212
+
213
+ movdqa xmm3, [g_const_d1] // r -= ((b + 1) >> 1) - g
214
+ movdqa xmm7, [g_const_d1]
215
+ paddd xmm3, xmm2
216
+ paddd xmm7, xmm6
217
+ paddd xmm1, xmm0
218
+ paddd xmm5, xmm4
219
+ psrad xmm3, 1
220
+ psrad xmm7, 1
221
+ psubd xmm1, xmm3
222
+ psubd xmm5, xmm7
223
+
224
+ paddd xmm2, xmm1 // b += r
225
+ paddd xmm6, xmm5
226
+
227
+ pslld xmm0, 8
228
+ pslld xmm2, 16
229
+ pslld xmm4, 8
230
+ pslld xmm6, 16
231
+
232
+ por xmm0, xmm1
233
+ por xmm4, xmm5
234
+ por xmm0, xmm2
235
+ por xmm4, xmm6
236
+
237
+ movdqa [esp + DISP + 64 * 2 + 16 * 0], xmm0
238
+ pslld xmm0, 8
239
+ movdqa [esp + DISP + 64 * 2 + 16 * 1], xmm4
240
+ pslld xmm4, 8
241
+ movdqa [esp + DISP + 64 * 2 + 16 * 2], xmm0
242
+ movdqa [esp + DISP + 64 * 2 + 16 * 3], xmm4
243
+
244
+ // second 8 pixels
245
+ pxor xmm1, xmm1
246
+ pxor xmm5, xmm5
247
+ movdqa xmm0, [esi + 32]
248
+ movdqa xmm4, [esi + 48]
249
+ psubd xmm1, [esi + ebp + 32]
250
+ psubd xmm5, [esi + ebp + 48]
251
+ movdqa xmm2, [esi + ebp * 2 + 32]
252
+ movdqa xmm6, [esi + ebp * 2 + 48]
253
+
254
+ paddd xmm0, [g_const_d0x80]
255
+ paddd xmm4, [g_const_d0x80]
256
+
257
+ // ICC
258
+ movdqa xmm3, xmm1 // g -= r >> 1
259
+ movdqa xmm7, xmm5
260
+ psrad xmm3, 1
261
+ psrad xmm7, 1
262
+ psubd xmm0, xmm3
263
+ psubd xmm4, xmm7
264
+
265
+ movdqa xmm3, [g_const_d1] // r -= ((b + 1) >> 1) - g
266
+ movdqa xmm7, [g_const_d1]
267
+ paddd xmm3, xmm2
268
+ paddd xmm7, xmm6
269
+ paddd xmm1, xmm0
270
+ paddd xmm5, xmm4
271
+ psrad xmm3, 1
272
+ psrad xmm7, 1
273
+ psubd xmm1, xmm3
274
+ psubd xmm5, xmm7
275
+
276
+ paddd xmm2, xmm1 // b += r
277
+ paddd xmm6, xmm5
278
+
279
+ pslld xmm0, 8
280
+ pslld xmm2, 16
281
+ pslld xmm4, 8
282
+ pslld xmm6, 16
283
+ por xmm0, xmm1
284
+ por xmm4, xmm5
285
+ por xmm0, xmm2
286
+ por xmm4, xmm6
287
+
288
+ movdqa [esp + DISP + 64 * 3 + 16 * 0], xmm0
289
+ pslld xmm0, 8
290
+ movdqa [esp + DISP + 64 * 3 + 16 * 1], xmm4
291
+ pslld xmm4, 8
292
+ movdqa [esp + DISP + 64 * 3 + 16 * 2], xmm0
293
+ movdqa [esp + DISP + 64 * 3 + 16 * 3], xmm4
294
+
295
+ //================================
296
+ // RGBX32 -> RGB24
297
+ mov eax, [esp + DISP + 64 * 0 + 4] // ..B1G1R1
298
+ mov ecx, [esp + DISP + 64 * 0 + 32] // B0G0R0..
299
+ shld eax, ecx, 24 // R1B0G0R0
300
+ mov [edi + ebx + 0], eax
301
+ mov eax, [esp + DISP + 64 * 0 + 20] // ..B5G5R5
302
+ mov ecx, [esp + DISP + 64 * 0 + 36] // B1G1R1..
303
+ shld eax, ecx, 16 // G5R5B1G1
304
+ mov [edi + ebx + 4], eax
305
+ mov eax, [esp + DISP + 64 * 0 + 16] // ..B4G4R4
306
+ mov ecx, [esp + DISP + 64 * 0 + 52] // B5G5R5..
307
+ shld eax, ecx, 8 // B4G4R4B5
308
+ mov [edi + ebx + 8], eax
309
+ add edi, edx // $edi = pbRGB += cbRGB
310
+
311
+ mov eax, [esp + DISP + 64 * 0 + 4 + 8] // ..B3G3R3
312
+ mov ecx, [esp + DISP + 64 * 0 + 32 + 8] // B2G2R2..
313
+ shld eax, ecx, 24 // R3B2G2R2
314
+ mov [edi + ebx + 0], eax
315
+ mov eax, [esp + DISP + 64 * 0 + 20 + 8] // ..B7G7R7
316
+ mov ecx, [esp + DISP + 64 * 0 + 36 + 8] // B3G3R3..
317
+ shld eax, ecx, 16 // G7R7B3G3
318
+ mov [edi + ebx + 4], eax
319
+ mov eax, [esp + DISP + 64 * 0 + 16 + 8] // ..B6G6R6
320
+ mov ecx, [esp + DISP + 64 * 0 + 52 + 8] // B7G7R7..
321
+ shld eax, ecx, 8 // B6G6R6B7
322
+ mov [edi + ebx + 8], eax
323
+ add edi, edx // $edi = pbRGB += cbRGB
324
+
325
+ // RGBX32 -> RGB24
326
+ mov eax, [esp + DISP + 64 * 1 + 4 + 8] // ..B3G3R3
327
+ mov ecx, [esp + DISP + 64 * 1 + 32 + 8] // B2G2R2..
328
+ shld eax, ecx, 24 // R3B2G2R2
329
+ mov [edi + ebx + 0], eax
330
+ mov eax, [esp + DISP + 64 * 1 + 20 + 8] // ..B7G7R7
331
+ mov ecx, [esp + DISP + 64 * 1 + 36 + 8] // B3G3R3..
332
+ shld eax, ecx, 16 // G7R7B3G3
333
+ mov [edi + ebx + 4], eax
334
+ mov eax, [esp + DISP + 64 * 1 + 16 + 8] // ..B6G6R6
335
+ mov ecx, [esp + DISP + 64 * 1 + 52 + 8] // B7G7R7..
336
+ shld eax, ecx, 8 // B6G6R6B7
337
+ mov [edi + ebx + 8], eax
338
+ add edi, edx // $edi = pbRGB += cbRGB
339
+
340
+ mov eax, [esp + DISP + 64 * 1 + 4] // ..B1G1R1
341
+ mov ecx, [esp + DISP + 64 * 1 + 32] // B0G0R0..
342
+ shld eax, ecx, 24 // R1B0G0R0
343
+ mov [edi + ebx + 0], eax
344
+ mov eax, [esp + DISP + 64 * 1 + 20] // ..B5G5R5
345
+ mov ecx, [esp + DISP + 64 * 1 + 36] // B1G1R1..
346
+ shld eax, ecx, 16 // G5R5B1G1
347
+ mov [edi + ebx + 4], eax
348
+ mov eax, [esp + DISP + 64 * 1 + 16] // ..B4G4R4
349
+ mov ecx, [esp + DISP + 64 * 1 + 52] // B5G5R5..
350
+ shld eax, ecx, 8 // B4G4R4B5
351
+ mov [edi + ebx + 8], eax
352
+ add edi, edx // $edi = pbRGB += cbRGB
353
+
354
+ // RGBX32 -> RGB24
355
+ mov eax, [esp + DISP + 64 * 2 + 4] // ..B1G1R1
356
+ mov ecx, [esp + DISP + 64 * 2 + 32] // B0G0R0..
357
+ shld eax, ecx, 24 // R1B0G0R0
358
+ mov [edi + ebx + 0], eax
359
+ mov eax, [esp + DISP + 64 * 2 + 20] // ..B5G5R5
360
+ mov ecx, [esp + DISP + 64 * 2 + 36] // B1G1R1..
361
+ shld eax, ecx, 16 // G5R5B1G1
362
+ mov [edi + ebx + 4], eax
363
+ mov eax, [esp + DISP + 64 * 2 + 16] // ..B4G4R4
364
+ mov ecx, [esp + DISP + 64 * 2 + 52] // B5G5R5..
365
+ shld eax, ecx, 8 // B4G4R4B5
366
+ mov [edi + ebx + 8], eax
367
+ add edi, edx // $edi = pbRGB += cbRGB
368
+
369
+ mov eax, [esp + DISP + 64 * 2 + 4 + 8] // ..B3G3R3
370
+ mov ecx, [esp + DISP + 64 * 2 + 32 + 8] // B2G2R2..
371
+ shld eax, ecx, 24 // R3B2G2R2
372
+ mov [edi + ebx + 0], eax
373
+ mov eax, [esp + DISP + 64 * 2 + 20 + 8] // ..B7G7R7
374
+ mov ecx, [esp + DISP + 64 * 2 + 36 + 8] // B3G3R3..
375
+ shld eax, ecx, 16 // G7R7B3G3
376
+ mov [edi + ebx + 4], eax
377
+ mov eax, [esp + DISP + 64 * 2 + 16 + 8] // ..B6G6R6
378
+ mov ecx, [esp + DISP + 64 * 2 + 52 + 8] // B7G7R7..
379
+ shld eax, ecx, 8 // B6G6R6B7
380
+ mov [edi + ebx + 8], eax
381
+ add edi, edx // $edi = pbRGB += cbRGB
382
+
383
+ // RGBX32 -> RGB24
384
+ mov eax, [esp + DISP + 64 * 3 + 4 + 8] // ..B3G3R3
385
+ mov ecx, [esp + DISP + 64 * 3 + 32 + 8] // B2G2R2..
386
+ shld eax, ecx, 24 // R3B2G2R2
387
+ mov [edi + ebx + 0], eax
388
+ mov eax, [esp + DISP + 64 * 3 + 20 + 8] // ..B7G7R7
389
+ mov ecx, [esp + DISP + 64 * 3 + 36 + 8] // B3G3R3..
390
+ shld eax, ecx, 16 // G7R7B3G3
391
+ mov [edi + ebx + 4], eax
392
+ mov eax, [esp + DISP + 64 * 3 + 16 + 8] // ..B6G6R6
393
+ mov ecx, [esp + DISP + 64 * 3 + 52 + 8] // B7G7R7..
394
+ shld eax, ecx, 8 // B6G6R6B7
395
+ mov [edi + ebx + 8], eax
396
+ add edi, edx // $edi = pbRGB += cbRGB
397
+
398
+ mov eax, [esp + DISP + 64 * 3 + 4] // ..B1G1R1
399
+ mov ecx, [esp + DISP + 64 * 3 + 32] // B0G0R0..
400
+ shld eax, ecx, 24 // R1B0G0R0
401
+ mov [edi + ebx + 0], eax
402
+ mov eax, [esp + DISP + 64 * 3 + 20] // ..B5G5R5
403
+ mov ecx, [esp + DISP + 64 * 3 + 36] // B1G1R1..
404
+ shld eax, ecx, 16 // G5R5B1G1
405
+ mov [edi + ebx + 4], eax
406
+ mov eax, [esp + DISP + 64 * 3 + 16] // ..B4G4R4
407
+ mov ecx, [esp + DISP + 64 * 3 + 52] // B5G5R5..
408
+ shld eax, ecx, 8 // B4G4R4B5
409
+ mov [edi + ebx + 8], eax
410
+
411
+ //================================
412
+ add esi, 256 - 64
413
+ add ebx, 12
414
+ jnz Loop0
415
+
416
+ //================
417
+ pop esp
418
+ pop edi
419
+ pop esi
420
+ pop ebx
421
+ pop ebp
422
+ ret 20
423
+ }
424
+ }
425
+
426
+ Int outputMBRow_RGB24_Lossless_1(CWMImageStrCodec* pSC)
427
+ {
428
+ #ifdef REENTRANT_MODE
429
+ const size_t cHeight = min((pSC->m_Dparam->cROIBottomY + 1) - (pSC->cRow - 1) * 16, 16);
430
+ const size_t iFirstRow = ((pSC->cRow - 1) * 16 > pSC->m_Dparam->cROITopY ? 0 : (pSC->m_Dparam->cROITopY & 0xf));
431
+ #endif
432
+ const size_t cbRGB = pSC->WMIBI.cbStride;
433
+ const U8* const pbRGB = (U8*)pSC->WMIBI.pv + cbRGB * (pSC->cRow - 1) * 16;
434
+
435
+ U8* const pbY = (U8*)pSC->a0MBbuffer[0];
436
+ U8* const pbU = (U8*)pSC->a0MBbuffer[1];
437
+ // U8* const pbV = (U8*)pSC->a0MBbuffer[2];
438
+
439
+ const size_t cmbColumn = (pSC->WMII.cWidth + 15) / 16;
440
+
441
+ assert(BD_8 == pSC->WMII.bdBitDepth);
442
+ assert(CF_RGB == pSC->WMII.cfColorFormat);
443
+ assert(24 == pSC->WMII.cBitsPerUnit);
444
+ assert(pSC->WMII.bRGB);
445
+ assert(O_NONE == pSC->WMII.oOrientation);
446
+
447
+ assert(YUV_444 == pSC->m_param.cfColorFormat);
448
+ assert(!pSC->m_param.bScaledArith);
449
+
450
+ assert(pSC->m_Dparam->bDecodeFullFrame);
451
+
452
+ storeRGB24_5(pbY + 64 * 0, pbU - pbY, pbRGB + cbRGB * 0, cbRGB, cmbColumn);
453
+ storeRGB24_5(pbY + 64 * 2, pbU - pbY, pbRGB + cbRGB * 8, cbRGB, cmbColumn);
454
+
455
+ #ifdef REENTRANT_MODE
456
+ pSC->WMIBI.cLinesDecoded = cHeight - iFirstRow;
457
+ #endif
458
+ return ICERR_OK;
459
+ }
460
+
461
+
462
+ __declspec(naked) void __stdcall storeRGB24_3(
463
+ U8* pbYCoCg,
464
+ size_t cbYCoCg,
465
+ const U8* pbRGB,
466
+ size_t cbRGB,
467
+ size_t cmb,
468
+ const U8* Shift)
469
+ {
470
+ UNREFERENCED_PARAMETER( pbYCoCg );
471
+ UNREFERENCED_PARAMETER( cbYCoCg );
472
+ UNREFERENCED_PARAMETER( pbRGB );
473
+ UNREFERENCED_PARAMETER( cbRGB );
474
+ UNREFERENCED_PARAMETER( cmb );
475
+ UNREFERENCED_PARAMETER( Shift );
476
+ __asm {
477
+ push ebp
478
+ push ebx
479
+ push esi
480
+ push edi
481
+
482
+ mov ecx, [esp + 40] // $ecx = Shift
483
+ mov ebx, [esp + 36] // $ebx = cmb
484
+ mov edi, [esp + 28] // $edi = pbRGB
485
+ lea ebx, [ebx + ebx * 2] // $ebx = cmb * 3
486
+ mov edx, [esp + 32] // $edx = cbRGB
487
+ shl ebx, 4 // $ebx = cmb * 3 * 16
488
+ mov esi, [esp + 20] // $esi = pbYCoCg
489
+ add edi, ebx // $edi = pbRGB + 3 * 16 * cmb
490
+ mov ebp, [esp + 24] // $ebp = cbYCoCg
491
+ neg ebx
492
+
493
+ mov eax, esp
494
+ and esp, 0xffffff80
495
+ sub esp, 320
496
+
497
+ mov [esp], eax // original $esp
498
+ mov [esp + 4], edi
499
+ mov [esp + 8], ecx
500
+ }
501
+ Loop0:
502
+ __asm {
503
+ mov edi, [esp + 4] // $edi = pbRGB + 3 * 16 * cmb
504
+
505
+ //================
506
+ // first 8 pixels
507
+ movdqa xmm0, [esi]
508
+ movdqa xmm4, [esi + 16]
509
+ movdqa xmm3, [esi + ebp]
510
+ movdqa xmm7, [esi + ebp + 16]
511
+ movdqa xmm2, [esi + ebp * 2]
512
+ movdqa xmm6, [esi + ebp * 2 + 16]
513
+
514
+ mov ecx, [esp + 8]
515
+ movdqa xmm1, [ecx]
516
+ movdqa xmm5, [g_const_d0x80]
517
+ pslld xmm5, xmm1
518
+ paddd xmm5, xmm1
519
+ paddd xmm0, xmm5 // bias
520
+ paddd xmm4, xmm5 // bias
521
+ pxor xmm1, xmm1
522
+ pxor xmm5, xmm5
523
+ psubd xmm1, xmm3
524
+ psubd xmm5, xmm7
525
+
526
+ // ICC
527
+ movdqa xmm3, xmm1 // g -= r >> 1
528
+ movdqa xmm7, xmm5
529
+ psrad xmm3, 1
530
+ psrad xmm7, 1
531
+ psubd xmm0, xmm3
532
+ psubd xmm4, xmm7
533
+
534
+ movdqa xmm3, [g_const_d1] // r -= ((b + 1) >> 1) - g
535
+ movdqa xmm7, [g_const_d1]
536
+ paddd xmm3, xmm2
537
+ paddd xmm7, xmm6
538
+ paddd xmm1, xmm0
539
+ paddd xmm5, xmm4
540
+ psrad xmm3, 1
541
+ psrad xmm7, 1
542
+ psubd xmm1, xmm3
543
+ psubd xmm5, xmm7
544
+
545
+ paddd xmm2, xmm1 // b += r
546
+ paddd xmm6, xmm5
547
+
548
+ // clip
549
+ movdqa xmm3, [g_const_w0x80]
550
+ packssdw xmm0, xmm4
551
+ packssdw xmm1, xmm5
552
+ packssdw xmm2, xmm6
553
+
554
+ mov ecx, [esp + 8]
555
+ movdqa xmm4, [ecx]
556
+ psraw xmm0, xmm4
557
+ psraw xmm1, xmm4
558
+ psraw xmm2, xmm4
559
+
560
+ psubw xmm0, xmm3
561
+ psubw xmm1, xmm3
562
+ psubw xmm2, xmm3
563
+
564
+ movdqa [esp + 16], xmm0
565
+ movdqa [esp + 32], xmm1
566
+ movdqa [esp + 48], xmm2
567
+
568
+ //================
569
+ // second 8 pixels
570
+ movdqa xmm0, [esi + 32]
571
+ movdqa xmm4, [esi + 48]
572
+ movdqa xmm3, [esi + ebp + 32]
573
+ movdqa xmm7, [esi + ebp + 48]
574
+ movdqa xmm2, [esi + ebp * 2 + 32]
575
+ movdqa xmm6, [esi + ebp * 2 + 48]
576
+
577
+ mov ecx, [esp + 8]
578
+ movdqa xmm1, [ecx]
579
+ movdqa xmm5, [g_const_d0x80]
580
+ pslld xmm5, xmm1
581
+ paddd xmm5, xmm1
582
+ paddd xmm0, xmm5 // bias
583
+ paddd xmm4, xmm5 // bias
584
+ pxor xmm1, xmm1
585
+ pxor xmm5, xmm5
586
+ psubd xmm1, xmm3
587
+ psubd xmm5, xmm7
588
+
589
+ // ICC
590
+ movdqa xmm3, xmm1 // g -= r >> 1
591
+ movdqa xmm7, xmm5
592
+ psrad xmm3, 1
593
+ psrad xmm7, 1
594
+ psubd xmm0, xmm3
595
+ psubd xmm4, xmm7
596
+
597
+ movdqa xmm3, [g_const_d1] // r -= ((b + 1) >> 1) - g
598
+ movdqa xmm7, [g_const_d1]
599
+ paddd xmm3, xmm2
600
+ paddd xmm7, xmm6
601
+ paddd xmm1, xmm0
602
+ paddd xmm5, xmm4
603
+ psrad xmm3, 1
604
+ psrad xmm7, 1
605
+ psubd xmm1, xmm3
606
+ psubd xmm5, xmm7
607
+
608
+ paddd xmm2, xmm1 // b += r
609
+ paddd xmm6, xmm5
610
+
611
+ // clip
612
+ movdqa xmm3, [g_const_w0x80]
613
+ packssdw xmm0, xmm4
614
+ packssdw xmm1, xmm5
615
+ packssdw xmm2, xmm6
616
+
617
+ mov ecx, [esp + 8]
618
+ movdqa xmm4, [ecx]
619
+ psraw xmm0, xmm4
620
+ psraw xmm1, xmm4
621
+ psraw xmm2, xmm4
622
+
623
+ psubw xmm0, xmm3
624
+ psubw xmm1, xmm3
625
+ psubw xmm2, xmm3
626
+
627
+ //================
628
+ // 16 pixels
629
+ movdqa xmm3, [g_const_b0x80]
630
+ packsswb xmm0, [esp + 16]
631
+ packsswb xmm1, [esp + 32]
632
+ packsswb xmm2, [esp + 48]
633
+
634
+ psubb xmm0, xmm3
635
+ psubb xmm1, xmm3
636
+ psubb xmm2, xmm3
637
+
638
+ pxor xmm7, xmm7
639
+ movdqa xmm4, xmm0
640
+ movdqa xmm5, xmm1
641
+ movdqa xmm6, xmm2
642
+
643
+ punpckhbw xmm0, xmm7
644
+ punpckhbw xmm1, xmm7
645
+ punpckhbw xmm2, xmm7
646
+ punpcklbw xmm4, xmm7
647
+ punpcklbw xmm5, xmm7
648
+ punpcklbw xmm6, xmm7
649
+
650
+ // spill second 8 pixels
651
+ movdqa [esp + 16], xmm4
652
+ movdqa [esp + 32], xmm5
653
+ movdqa [esp + 48], xmm6
654
+
655
+ // first 8 pixels
656
+ movdqa xmm4, xmm0
657
+ movdqa xmm5, xmm1
658
+ movdqa xmm6, xmm2
659
+
660
+ punpcklwd xmm0, xmm7
661
+ punpcklwd xmm1, xmm7
662
+ punpcklwd xmm2, xmm7
663
+
664
+ punpckhwd xmm4, xmm7
665
+ punpckhwd xmm5, xmm7
666
+ punpckhwd xmm6, xmm7
667
+
668
+ pslld xmm0, 8
669
+ pslld xmm2, 16
670
+ pslld xmm4, 8
671
+ pslld xmm6, 16
672
+
673
+ por xmm0, xmm1
674
+ por xmm4, xmm5
675
+ por xmm0, xmm2
676
+ por xmm4, xmm6
677
+
678
+ movdqa [esp + 64], xmm0
679
+ pslld xmm0, 8
680
+ movdqa [esp + 80], xmm4
681
+ pslld xmm4, 8
682
+ movdqa [esp + 96], xmm0
683
+ movdqa [esp + 112], xmm4
684
+
685
+ // second 8 pixels
686
+ movdqa xmm0, [esp + 16]
687
+ movdqa xmm1, [esp + 32]
688
+ movdqa xmm2, [esp + 48]
689
+ movdqa xmm4, xmm0
690
+ movdqa xmm5, xmm1
691
+ movdqa xmm6, xmm2
692
+
693
+ punpcklwd xmm0, xmm7
694
+ punpcklwd xmm1, xmm7
695
+ punpcklwd xmm2, xmm7
696
+ punpckhwd xmm4, xmm7
697
+ punpckhwd xmm5, xmm7
698
+ punpckhwd xmm6, xmm7
699
+
700
+ pslld xmm0, 8
701
+ pslld xmm2, 16
702
+ pslld xmm4, 8
703
+ pslld xmm6, 16
704
+ por xmm0, xmm1
705
+ por xmm4, xmm5
706
+ por xmm0, xmm2
707
+ por xmm4, xmm6
708
+
709
+ movdqa [esp + 128], xmm0
710
+ pslld xmm0, 8
711
+ movdqa [esp + 144], xmm4
712
+ pslld xmm4, 8
713
+ movdqa [esp + 160], xmm0
714
+ movdqa [esp + 176], xmm4
715
+
716
+ //================================
717
+ add esi, 64
718
+
719
+ //================
720
+ // first 8 pixels
721
+ movdqa xmm0, [esi]
722
+ movdqa xmm4, [esi + 16]
723
+ movdqa xmm3, [esi + ebp]
724
+ movdqa xmm7, [esi + ebp + 16]
725
+ movdqa xmm2, [esi + ebp * 2]
726
+ movdqa xmm6, [esi + ebp * 2 + 16]
727
+
728
+ mov ecx, [esp + 8]
729
+ movdqa xmm1, [ecx]
730
+ movdqa xmm5, [g_const_d0x80]
731
+ pslld xmm5, xmm1
732
+ paddd xmm5, xmm1
733
+ paddd xmm0, xmm5 // bias
734
+ paddd xmm4, xmm5 // bias
735
+ pxor xmm1, xmm1
736
+ pxor xmm5, xmm5
737
+ psubd xmm1, xmm3
738
+ psubd xmm5, xmm7
739
+
740
+ // ICC
741
+ movdqa xmm3, xmm1 // g -= r >> 1
742
+ movdqa xmm7, xmm5
743
+ psrad xmm3, 1
744
+ psrad xmm7, 1
745
+ psubd xmm0, xmm3
746
+ psubd xmm4, xmm7
747
+
748
+ movdqa xmm3, [g_const_d1] // r -= ((b + 1) >> 1) - g
749
+ movdqa xmm7, [g_const_d1]
750
+ paddd xmm3, xmm2
751
+ paddd xmm7, xmm6
752
+ paddd xmm1, xmm0
753
+ paddd xmm5, xmm4
754
+ psrad xmm3, 1
755
+ psrad xmm7, 1
756
+ psubd xmm1, xmm3
757
+ psubd xmm5, xmm7
758
+
759
+ paddd xmm2, xmm1 // b += r
760
+ paddd xmm6, xmm5
761
+
762
+ // clip
763
+ movdqa xmm3, [g_const_w0x80]
764
+ packssdw xmm0, xmm4
765
+ packssdw xmm1, xmm5
766
+ packssdw xmm2, xmm6
767
+
768
+ mov ecx, [esp + 8]
769
+ movdqa xmm4, [ecx]
770
+ psraw xmm0, xmm4
771
+ psraw xmm1, xmm4
772
+ psraw xmm2, xmm4
773
+
774
+ psubw xmm0, xmm3
775
+ psubw xmm1, xmm3
776
+ psubw xmm2, xmm3
777
+
778
+ movdqa [esp + 16], xmm0
779
+ movdqa [esp + 32], xmm1
780
+ movdqa [esp + 48], xmm2
781
+
782
+ //================
783
+ // second 8 pixels
784
+ movdqa xmm0, [esi + 32]
785
+ movdqa xmm4, [esi + 48]
786
+ movdqa xmm3, [esi + ebp + 32]
787
+ movdqa xmm7, [esi + ebp + 48]
788
+ movdqa xmm2, [esi + ebp * 2 + 32]
789
+ movdqa xmm6, [esi + ebp * 2 + 48]
790
+
791
+ mov ecx, [esp + 8]
792
+ movdqa xmm1, [ecx]
793
+ movdqa xmm5, [g_const_d0x80]
794
+ pslld xmm5, xmm1
795
+ paddd xmm5, xmm1
796
+ paddd xmm0, xmm5 // bias
797
+ paddd xmm4, xmm5 // bias
798
+ pxor xmm1, xmm1
799
+ pxor xmm5, xmm5
800
+ psubd xmm1, xmm3
801
+ psubd xmm5, xmm7
802
+
803
+ // ICC
804
+ movdqa xmm3, xmm1 // g -= r >> 1
805
+ movdqa xmm7, xmm5
806
+ psrad xmm3, 1
807
+ psrad xmm7, 1
808
+ psubd xmm0, xmm3
809
+ psubd xmm4, xmm7
810
+
811
+ movdqa xmm3, [g_const_d1] // r -= ((b + 1) >> 1) - g
812
+ movdqa xmm7, [g_const_d1]
813
+ paddd xmm3, xmm2
814
+ paddd xmm7, xmm6
815
+ paddd xmm1, xmm0
816
+ paddd xmm5, xmm4
817
+ psrad xmm3, 1
818
+ psrad xmm7, 1
819
+ psubd xmm1, xmm3
820
+ psubd xmm5, xmm7
821
+
822
+ paddd xmm2, xmm1 // b += r
823
+ paddd xmm6, xmm5
824
+
825
+ // clip
826
+ movdqa xmm3, [g_const_w0x80]
827
+ packssdw xmm0, xmm4
828
+ packssdw xmm1, xmm5
829
+ packssdw xmm2, xmm6
830
+
831
+ mov ecx, [esp + 8]
832
+ movdqa xmm4, [ecx]
833
+ psraw xmm0, xmm4
834
+ psraw xmm1, xmm4
835
+ psraw xmm2, xmm4
836
+
837
+ psubw xmm0, xmm3
838
+ psubw xmm1, xmm3
839
+ psubw xmm2, xmm3
840
+
841
+ //================
842
+ // 16 pixels
843
+ movdqa xmm3, [g_const_b0x80]
844
+ packsswb xmm0, [esp + 16]
845
+ packsswb xmm1, [esp + 32]
846
+ packsswb xmm2, [esp + 48]
847
+
848
+ psubb xmm0, xmm3
849
+ psubb xmm1, xmm3
850
+ psubb xmm2, xmm3
851
+
852
+ pxor xmm7, xmm7
853
+ movdqa xmm4, xmm0
854
+ movdqa xmm5, xmm1
855
+ movdqa xmm6, xmm2
856
+
857
+ punpckhbw xmm0, xmm7
858
+ punpckhbw xmm1, xmm7
859
+ punpckhbw xmm2, xmm7
860
+ punpcklbw xmm4, xmm7
861
+ punpcklbw xmm5, xmm7
862
+ punpcklbw xmm6, xmm7
863
+
864
+ // spill second 8 pixels
865
+ movdqa [esp + 16], xmm4
866
+ movdqa [esp + 32], xmm5
867
+ movdqa [esp + 48], xmm6
868
+
869
+ // first 8 pixels
870
+ movdqa xmm4, xmm0
871
+ movdqa xmm5, xmm1
872
+ movdqa xmm6, xmm2
873
+
874
+ punpcklwd xmm0, xmm7
875
+ punpcklwd xmm1, xmm7
876
+ punpcklwd xmm2, xmm7
877
+
878
+ punpckhwd xmm4, xmm7
879
+ punpckhwd xmm5, xmm7
880
+ punpckhwd xmm6, xmm7
881
+
882
+ pslld xmm0, 8
883
+ pslld xmm2, 16
884
+ pslld xmm4, 8
885
+ pslld xmm6, 16
886
+
887
+ por xmm0, xmm1
888
+ por xmm4, xmm5
889
+ por xmm0, xmm2
890
+ por xmm4, xmm6
891
+
892
+ movdqa [esp + 192], xmm0
893
+ pslld xmm0, 8
894
+ movdqa [esp + 208], xmm4
895
+ pslld xmm4, 8
896
+ movdqa [esp + 224], xmm0
897
+ movdqa [esp + 240], xmm4
898
+
899
+ // second 8 pixels
900
+ movdqa xmm0, [esp + 16]
901
+ movdqa xmm1, [esp + 32]
902
+ movdqa xmm2, [esp + 48]
903
+ movdqa xmm4, xmm0
904
+ movdqa xmm5, xmm1
905
+ movdqa xmm6, xmm2
906
+
907
+ punpcklwd xmm0, xmm7
908
+ punpcklwd xmm1, xmm7
909
+ punpcklwd xmm2, xmm7
910
+ punpckhwd xmm4, xmm7
911
+ punpckhwd xmm5, xmm7
912
+ punpckhwd xmm6, xmm7
913
+
914
+ pslld xmm0, 8
915
+ pslld xmm2, 16
916
+ pslld xmm4, 8
917
+ pslld xmm6, 16
918
+ por xmm0, xmm1
919
+ por xmm4, xmm5
920
+ por xmm0, xmm2
921
+ por xmm4, xmm6
922
+
923
+ movdqa [esp + 256], xmm0
924
+ pslld xmm0, 8
925
+ movdqa [esp + 272], xmm4
926
+ pslld xmm4, 8
927
+ movdqa [esp + 288], xmm0
928
+ movdqa [esp + 304], xmm4
929
+
930
+ // RGBX32 -> RGB24
931
+ mov eax, [esp + 68] // ..B1G1R1
932
+ mov ecx, [esp + 96] // B0G0R0..
933
+ shld eax, ecx, 24 // R1B0G0R0
934
+ mov [edi + ebx + 0], eax
935
+ mov eax, [esp + 84] // ..B5G5R5
936
+ mov ecx, [esp + 100] // B1G1R1..
937
+ shld eax, ecx, 16 // G5R5B1G1
938
+ mov [edi + ebx + 4], eax
939
+ mov eax, [esp + 80] // ..B4G4R4
940
+ mov ecx, [esp + 116] // B5G5R5..
941
+ shld eax, ecx, 8 // B4G4R4B5
942
+ mov [edi + ebx + 8], eax
943
+ add edi, edx // $edi = pbRGB += cbRGB
944
+
945
+ mov eax, [esp + 76] // ..B3G3R3
946
+ mov ecx, [esp + 104] // B2G2R2..
947
+ shld eax, ecx, 24 // R3B2G2R2
948
+ mov [edi + ebx + 0], eax
949
+ mov eax, [esp + 92] // ..B7G7R7
950
+ mov ecx, [esp + 108] // B3G3R3..
951
+ shld eax, ecx, 16 // G7R7B3G3
952
+ mov [edi + ebx + 4], eax
953
+ mov eax, [esp + 88] // ..B6G6R6
954
+ mov ecx, [esp + 124] // B7G7R7..
955
+ shld eax, ecx, 8 // B6G6R6B7
956
+ mov [edi + ebx + 8], eax
957
+ add edi, edx // $edi = pbRGB += cbRGB
958
+
959
+ // RGBX32 -> RGB24
960
+ mov eax, [esp + 140] // ..B3G3R3
961
+ mov ecx, [esp + 168] // B2G2R2..
962
+ shld eax, ecx, 24 // R3B2G2R2
963
+ mov [edi + ebx + 0], eax
964
+ mov eax, [esp + 156] // ..B7G7R7
965
+ mov ecx, [esp + 172] // B3G3R3..
966
+ shld eax, ecx, 16 // G7R7B3G3
967
+ mov [edi + ebx + 4], eax
968
+ mov eax, [esp + 152] // ..B6G6R6
969
+ mov ecx, [esp + 188] // B7G7R7..
970
+ shld eax, ecx, 8 // B6G6R6B7
971
+ mov [edi + ebx + 8], eax
972
+ add edi, edx // $edi = pbRGB += cbRGB
973
+
974
+ mov eax, [esp + 132] // ..B1G1R1
975
+ mov ecx, [esp + 160] // B0G0R0..
976
+ shld eax, ecx, 24 // R1B0G0R0
977
+ mov [edi + ebx + 0], eax
978
+ mov eax, [esp + 148] // ..B5G5R5
979
+ mov ecx, [esp + 164] // B1G1R1..
980
+ shld eax, ecx, 16 // G5R5B1G1
981
+ mov [edi + ebx + 4], eax
982
+ mov eax, [esp + 144] // ..B4G4R4
983
+ mov ecx, [esp + 180] // B5G5R5..
984
+ shld eax, ecx, 8 // B4G4R4B5
985
+ mov [edi + ebx + 8], eax
986
+ add edi, edx // $edi = pbRGB += cbRGB
987
+
988
+ // RGBX32 -> RGB24
989
+ mov eax, [esp + 196] // ..B1G1R1
990
+ mov ecx, [esp + 224] // B0G0R0..
991
+ shld eax, ecx, 24 // R1B0G0R0
992
+ mov [edi + ebx + 0], eax
993
+ mov eax, [esp + 212] // ..B5G5R5
994
+ mov ecx, [esp + 228] // B1G1R1..
995
+ shld eax, ecx, 16 // G5R5B1G1
996
+ mov [edi + ebx + 4], eax
997
+ mov eax, [esp + 208] // ..B4G4R4
998
+ mov ecx, [esp + 244] // B5G5R5..
999
+ shld eax, ecx, 8 // B4G4R4B5
1000
+ mov [edi + ebx + 8], eax
1001
+ add edi, edx // $edi = pbRGB += cbRGB
1002
+
1003
+ mov eax, [esp + 204] // ..B3G3R3
1004
+ mov ecx, [esp + 232] // B2G2R2..
1005
+ shld eax, ecx, 24 // R3B2G2R2
1006
+ mov [edi + ebx + 0], eax
1007
+ mov eax, [esp + 220] // ..B7G7R7
1008
+ mov ecx, [esp + 236] // B3G3R3..
1009
+ shld eax, ecx, 16 // G7R7B3G3
1010
+ mov [edi + ebx + 4], eax
1011
+ mov eax, [esp + 216] // ..B6G6R6
1012
+ mov ecx, [esp + 252] // B7G7R7..
1013
+ shld eax, ecx, 8 // B6G6R6B7
1014
+ mov [edi + ebx + 8], eax
1015
+ add edi, edx // $edi = pbRGB += cbRGB
1016
+
1017
+ // RGBX32 -> RGB24
1018
+ mov eax, [esp + 268] // ..B3G3R3
1019
+ mov ecx, [esp + 296] // B2G2R2..
1020
+ shld eax, ecx, 24 // R3B2G2R2
1021
+ mov [edi + ebx + 0], eax
1022
+ mov eax, [esp + 284] // ..B7G7R7
1023
+ mov ecx, [esp + 300] // B3G3R3..
1024
+ shld eax, ecx, 16 // G7R7B3G3
1025
+ mov [edi + ebx + 4], eax
1026
+ mov eax, [esp + 280] // ..B6G6R6
1027
+ mov ecx, [esp + 316] // B7G7R7..
1028
+ shld eax, ecx, 8 // B6G6R6B7
1029
+ mov [edi + ebx + 8], eax
1030
+ add edi, edx // $edi = pbRGB += cbRGB
1031
+
1032
+ mov eax, [esp + 260] // ..B1G1R1
1033
+ mov ecx, [esp + 288] // B0G0R0..
1034
+ shld eax, ecx, 24 // R1B0G0R0
1035
+ mov [edi + ebx + 0], eax
1036
+ mov eax, [esp + 276] // ..B5G5R5
1037
+ mov ecx, [esp + 292] // B1G1R1..
1038
+ shld eax, ecx, 16 // G5R5B1G1
1039
+ mov [edi + ebx + 4], eax
1040
+ mov eax, [esp + 272] // ..B4G4R4
1041
+ mov ecx, [esp + 308] // B5G5R5..
1042
+ shld eax, ecx, 8 // B4G4R4B5
1043
+ mov [edi + ebx + 8], eax
1044
+ add edi, edx // $edi = pbRGB += cbRGB
1045
+
1046
+ //================================
1047
+ add esi, 256 - 64
1048
+ add ebx, 12
1049
+ jnz Loop0
1050
+
1051
+ //================
1052
+ pop esp
1053
+ pop edi
1054
+ pop esi
1055
+ pop ebx
1056
+ pop ebp
1057
+ ret 24
1058
+ }
1059
+ }
1060
+
1061
+ Int outputMBRow_RGB24_Lossy_3(CWMImageStrCodec* pSC)
1062
+ {
1063
+ #ifdef REENTRANT_MODE
1064
+ const size_t cHeight = min((pSC->m_Dparam->cROIBottomY + 1) - (pSC->cRow - 1) * 16, 16);
1065
+ const size_t iFirstRow = ((pSC->cRow - 1) * 16 > pSC->m_Dparam->cROITopY ? 0 : (pSC->m_Dparam->cROITopY & 0xf));
1066
+ #endif
1067
+ const size_t cbRGB = pSC->WMIBI.cbStride;
1068
+ const U8* const pbRGB = (U8*)pSC->WMIBI.pv + cbRGB * (pSC->cRow - 1) * 16;
1069
+
1070
+ U8* const pbY = (U8*)pSC->a0MBbuffer[0];
1071
+ U8* const pbU = (U8*)pSC->a0MBbuffer[1];
1072
+ // U8* const pbV = (U8*)pSC->a0MBbuffer[2];
1073
+
1074
+ const size_t cmbColumn = (pSC->WMII.cWidth + 15) / 16;
1075
+
1076
+ __declspec(align(16)) U8 Shift[16];
1077
+
1078
+ assert(BD_8 == pSC->WMII.bdBitDepth);
1079
+ assert(CF_RGB == pSC->WMII.cfColorFormat);
1080
+ assert(24 == pSC->WMII.cBitsPerUnit);
1081
+ assert(pSC->WMII.bRGB);
1082
+ assert(O_NONE == pSC->WMII.oOrientation);
1083
+
1084
+ assert(YUV_444 == pSC->m_param.cfColorFormat);
1085
+
1086
+ assert(pSC->m_Dparam->bDecodeFullFrame);
1087
+
1088
+ _mm_store_si128((__m128i *) Shift, pSC->m_param.bScaledArith ? g_const_d3 : g_const_d0);
1089
+ storeRGB24_3(pbY + 64 * 0, pbU - pbY, pbRGB + cbRGB * 0, cbRGB, cmbColumn,
1090
+ Shift);
1091
+ storeRGB24_3(pbY + 64 * 2, pbU - pbY, pbRGB + cbRGB * 8, cbRGB, cmbColumn,
1092
+ Shift);
1093
+
1094
+ #ifdef REENTRANT_MODE
1095
+ pSC->WMIBI.cLinesDecoded = cHeight - iFirstRow;
1096
+ #endif
1097
+ return ICERR_OK;
1098
+ }
1099
+ #endif
1100
+
1101
+ //================================================================
1102
+ #if defined(WMP_OPT_TRFM_DEC)
1103
+ FORCE_INLINE Void strDCT2x2up_OPT(PixelI *pa, PixelI *pb, PixelI *pc, PixelI *pd)
1104
+ {
1105
+ PixelI a, b, c, d, C, t;
1106
+ a = *pa;
1107
+ b = *pb;
1108
+ C = *pc;
1109
+ d = *pd;
1110
+
1111
+ a += d;
1112
+ b -= C;
1113
+ t = ((a - b + 1) >> 1);
1114
+ c = t - d;
1115
+ d = t - C;
1116
+ a -= d;
1117
+ b += c;
1118
+
1119
+ *pa = a;
1120
+ *pb = b;
1121
+ *pc = c;
1122
+ *pd = d;
1123
+ }
1124
+
1125
+ FORCE_INLINE Void invOdd_OPT(PixelI *pa, PixelI *pb, PixelI *pc, PixelI *pd)
1126
+ {
1127
+ PixelI a, b, c, d;
1128
+ a = *pa;
1129
+ b = *pb;
1130
+ c = *pc;
1131
+ d = *pd;
1132
+
1133
+ /** butterflies **/
1134
+ b += d;
1135
+ a -= c;
1136
+ d -= (b) >> 1;
1137
+ c += (a + 1) >> 1;
1138
+
1139
+ /** rotate pi/8 **/
1140
+ #define IROTATE2(a, b) (a) -= (((b)*3 + 4) >> 3), (b) += (((a)*3 + 4) >> 3)
1141
+ IROTATE2(a, b);
1142
+ IROTATE2(c, d);
1143
+
1144
+ /** butterflies **/
1145
+ c -= (b + 1) >> 1;
1146
+ d = ((a + 1) >> 1) - d;
1147
+ b += c;
1148
+ a -= d;
1149
+
1150
+ *pa = a;
1151
+ *pb = b;
1152
+ *pc = c;
1153
+ *pd = d;
1154
+ }
1155
+
1156
+ FORCE_INLINE Void invOddOdd_OPT(PixelI* pa, PixelI* pb, PixelI* pc, PixelI* pd)
1157
+ {
1158
+ PixelI a, b, c, d, t1, t2;
1159
+ a = *pa;
1160
+ b = *pb;
1161
+ c = *pc;
1162
+ d = *pd;
1163
+
1164
+ /** butterflies **/
1165
+ d += a;
1166
+ c -= b;
1167
+ a -= (t1 = d >> 1);
1168
+ b += (t2 = c >> 1);
1169
+
1170
+ /** rotate pi/4 **/
1171
+ a -= (b * 3 + 3) >> 3;
1172
+ b += (a * 3 + 3) >> 2;
1173
+ a -= (b * 3 + 4) >> 3;
1174
+
1175
+ /** butterflies **/
1176
+ b -= t2;
1177
+ a += t1;
1178
+ c += b;
1179
+ d -= a;
1180
+
1181
+ /** sign flips **/
1182
+ *pa = a;
1183
+ *pb = -b;
1184
+ *pc = -c;
1185
+ *pd = d;
1186
+ }
1187
+
1188
+ FORCE_INLINE Void strDCT2x2dn_SSE2_1(PixelI* p)
1189
+ {
1190
+ __m128i* const pdq = (__m128i*)p;
1191
+ __m128i a = pdq[0];
1192
+ __m128i b = pdq[1];
1193
+ const __m128i C = pdq[2];
1194
+ __m128i d = pdq[3];
1195
+ __m128i t;
1196
+ __m128i c;
1197
+
1198
+ a = _mm_add_epi32(a, d);
1199
+ b = _mm_sub_epi32(b, C);
1200
+ t = _mm_sub_epi32(a, b);
1201
+ t = _mm_srai_epi32(t, 1);
1202
+ c = _mm_sub_epi32(t, d);
1203
+ d = _mm_sub_epi32(t, C);
1204
+ a = _mm_sub_epi32(a, d);
1205
+ b = _mm_add_epi32(b, c);
1206
+
1207
+ pdq[0] = a;
1208
+ pdq[1] = b;
1209
+ pdq[2] = c;
1210
+ pdq[3] = d;
1211
+ }
1212
+
1213
+ Void strIDCT4x4Stage1_OPT_H1(PixelI* p)
1214
+ {
1215
+ /** top left corner, butterfly => butterfly **/
1216
+ strDCT2x2up_OPT(p + 0, p + 1, p + 2, p + 3);
1217
+
1218
+ /** top right corner, -pi/8 rotation => butterfly **/
1219
+ invOdd_OPT(p + 5, p + 4, p + 7, p + 6);
1220
+
1221
+ /** bottom left corner, butterfly => -pi/8 rotation **/
1222
+ invOdd_OPT(p + 10, p + 8, p + 11, p + 9);
1223
+
1224
+ /** bottom right corner, -pi/8 rotation => -pi/8 rotation **/
1225
+ invOddOdd_OPT(p + 15, p + 14, p + 13, p + 12);
1226
+ }
1227
+
1228
+ FORCE_INLINE Void strIDCT4x4Stage1_OPT_H2(PixelI* p)
1229
+ {
1230
+ /** butterfly **/
1231
+ strDCT2x2dn_SSE2_1(p);
1232
+ }
1233
+
1234
+ Void strIDCT4x4Stage1_OPT5(PixelI* p0, PixelI* p1)
1235
+ {
1236
+ _mm_prefetch((char*)(p0 - 96 + 256), _MM_HINT_T0);
1237
+ strIDCT4x4Stage1_OPT_H1(p0 - 96);
1238
+ strIDCT4x4Stage1_OPT_H1(p0 - 80);
1239
+ strIDCT4x4Stage1_OPT_H1(p0 - 32);
1240
+ strIDCT4x4Stage1_OPT_H1(p0 - 16);
1241
+
1242
+ _mm_prefetch((char*)(p0 - 32 + 256), _MM_HINT_T0);
1243
+ strIDCT4x4Stage1_OPT_H1(p0 + 32);
1244
+ strIDCT4x4Stage1_OPT_H1(p0 + 48);
1245
+ strIDCT4x4Stage1_OPT_H1(p0 + 96);
1246
+ strIDCT4x4Stage1_OPT_H1(p0 + 112);
1247
+
1248
+ _mm_prefetch((char*)(p0 + 32 + 256), _MM_HINT_T0);
1249
+ strIDCT4x4Stage1_OPT_H1(p1 - 128);
1250
+ strIDCT4x4Stage1_OPT_H1(p1 - 112);
1251
+ strIDCT4x4Stage1_OPT_H1(p1 - 64);
1252
+ strIDCT4x4Stage1_OPT_H1(p1 - 48);
1253
+
1254
+ _mm_prefetch((char*)(p0 + 96 + 256), _MM_HINT_T0);
1255
+ strIDCT4x4Stage1_OPT_H1(p1 + 0);
1256
+ strIDCT4x4Stage1_OPT_H1(p1 + 16);
1257
+ strIDCT4x4Stage1_OPT_H1(p1 + 64);
1258
+ strIDCT4x4Stage1_OPT_H1(p1 + 80);
1259
+
1260
+ strIDCT4x4Stage1_OPT_H2(p0 - 96);
1261
+ strIDCT4x4Stage1_OPT_H2(p0 - 80);
1262
+ strIDCT4x4Stage1_OPT_H2(p0 - 32);
1263
+ strIDCT4x4Stage1_OPT_H2(p0 - 16);
1264
+ strIDCT4x4Stage1_OPT_H2(p0 + 32);
1265
+ strIDCT4x4Stage1_OPT_H2(p0 + 48);
1266
+ strIDCT4x4Stage1_OPT_H2(p0 + 96);
1267
+ strIDCT4x4Stage1_OPT_H2(p0 + 112);
1268
+
1269
+ strIDCT4x4Stage1_OPT_H2(p1 - 128);
1270
+ strIDCT4x4Stage1_OPT_H2(p1 - 112);
1271
+ strIDCT4x4Stage1_OPT_H2(p1 - 64);
1272
+ strIDCT4x4Stage1_OPT_H2(p1 - 48);
1273
+ strIDCT4x4Stage1_OPT_H2(p1 + 0);
1274
+ strIDCT4x4Stage1_OPT_H2(p1 + 16);
1275
+ strIDCT4x4Stage1_OPT_H2(p1 + 64);
1276
+ strIDCT4x4Stage1_OPT_H2(p1 + 80);
1277
+ }
1278
+
1279
+ //================================
1280
+ __declspec(naked) void __stdcall strPost4x4Stage1_alternate_ASM5(PixelI* p0, PixelI* p1)
1281
+ {
1282
+ UNREFERENCED_PARAMETER( p0 );
1283
+ UNREFERENCED_PARAMETER( p1 );
1284
+ __asm {
1285
+ push ebp
1286
+ push ebx
1287
+ push esi
1288
+ push edi
1289
+
1290
+ //================
1291
+ // pointer array
1292
+ mov eax, [esp + 20] // $esi = p0
1293
+ mov edx, [esp + 24] // $edi = p1
1294
+ mov ecx, 4 * 16
1295
+ mov ebx, 4 * 48
1296
+
1297
+ prefetcht0 [eax + 512]
1298
+ prefetcht0 [eax + 768]
1299
+ prefetcht0 [eax + 1024]
1300
+ prefetcht0 [eax + 1280]
1301
+
1302
+ add edx, ecx
1303
+ add eax, ebx
1304
+
1305
+ push edx
1306
+ sub edx, ecx
1307
+ push edx
1308
+ push edx
1309
+ sub edx, ebx
1310
+ push eax
1311
+ push eax
1312
+ sub eax, ecx
1313
+ push eax
1314
+ push eax
1315
+ sub eax, ecx
1316
+ push eax
1317
+ sub eax, ecx
1318
+
1319
+ push edx
1320
+ sub edx, ecx
1321
+ push edx
1322
+ sub eax, ecx
1323
+ push edx
1324
+ sub edx, ebx
1325
+ push eax
1326
+ push eax
1327
+ sub eax, ecx
1328
+ push eax
1329
+ push eax
1330
+ sub eax, ecx
1331
+ push eax
1332
+ sub eax, ecx
1333
+
1334
+ push edx
1335
+ sub edx, ecx
1336
+ push edx
1337
+ sub eax, ecx
1338
+ push edx
1339
+ sub edx, ebx
1340
+ push eax
1341
+ push eax
1342
+ sub eax, ecx
1343
+ push eax
1344
+ push eax
1345
+ sub eax, ecx
1346
+ push eax
1347
+ sub eax, ecx
1348
+
1349
+ push edx
1350
+ sub edx, ecx
1351
+ push edx
1352
+ sub eax, ecx
1353
+ push edx
1354
+ push eax
1355
+ push eax
1356
+ sub eax, ecx
1357
+ push eax
1358
+ push eax
1359
+ sub eax, ecx
1360
+ push eax
1361
+
1362
+ mov ebp, (4 + 4) * -16
1363
+ push ebp
1364
+ }
1365
+ Loop0:
1366
+ __asm {
1367
+ mov esi, [esp + (4 + 4) * 16 + 4 + ebp ] // $esi = p0
1368
+ mov edi, [esp + (4 + 4) * 16 + 4 + ebp + 4] // $edi = p1
1369
+
1370
+ //================
1371
+ movdqa xmm2, [esi + 4 * 12] // a = xmm2
1372
+ movdqa xmm1, [esi + 4 * 72] // b = xmm1
1373
+ movdqa xmm6, [edi + 4 * 4] // c = xmm6
1374
+ movdqa xmm7, [edi + 4 * 64] // d = xmm7
1375
+
1376
+ //================
1377
+ // buttefly
1378
+ paddd xmm2, xmm7
1379
+ psubd xmm1, xmm6
1380
+
1381
+ movdqa xmm0, xmm2 // a = xmm0
1382
+ psubd xmm2, xmm1
1383
+ psrad xmm2, 1
1384
+ movdqa xmm3, xmm2
1385
+
1386
+ psubd xmm2, xmm7 // c = xmm2
1387
+ psubd xmm3, xmm6 // d = xmm3
1388
+ paddd xmm1, xmm2
1389
+ psubd xmm0, xmm3
1390
+
1391
+ //================
1392
+ // bottom right corner: -pi/8 rotation => -pi/8 rotation
1393
+ pshufd xmm7, xmm3, 0x3
1394
+ movd eax, xmm3
1395
+ movd edx, xmm7
1396
+ pshufd xmm7, xmm3, 0x1
1397
+ movd ebx, xmm7
1398
+ pshufd xmm7, xmm3, 0x2
1399
+ movd ecx, xmm7
1400
+
1401
+ add edx, eax
1402
+ sub ecx, ebx
1403
+ mov esi, edx
1404
+ sar esi, 1
1405
+ mov edi, ecx
1406
+ sar edi, 1
1407
+ sub eax, esi
1408
+ add ebx, edi
1409
+
1410
+ lea ebp, [ebx + ebx * 2 + 6]
1411
+ sar ebp, 3
1412
+ sub eax, ebp
1413
+ lea ebp, [eax + eax * 2 + 2]
1414
+ sar ebp, 2
1415
+ add ebx, ebp
1416
+ lea ebp, [ebx + ebx * 2 + 4]
1417
+ sar ebp, 3
1418
+ sub eax, ebp
1419
+
1420
+ mov ebp, [esp]
1421
+
1422
+ sub ebx, edi
1423
+ add eax, esi
1424
+ add ecx, ebx
1425
+ sub edx, eax
1426
+
1427
+ mov esi, [esp + (4 + 4) * 16 + 4 + ebp ] // $esi = p0
1428
+ mov edi, [esp + (4 + 4) * 16 + 4 + ebp + 4] // $edi = p1
1429
+
1430
+ movd xmm3, eax
1431
+ movd xmm4, ebx
1432
+ movd xmm5, ecx
1433
+ movd xmm6, edx
1434
+ punpckldq xmm3, xmm4
1435
+ punpckldq xmm5, xmm6
1436
+ punpcklqdq xmm3, xmm5
1437
+
1438
+ //================
1439
+ // anti diagonal corners: rotation by -pi/8
1440
+ movdqa xmm5, g_const_d1
1441
+ movdqa xmm6, g_const_d1
1442
+
1443
+ pshufd xmm2, xmm2, 0xd8 // 7, 5, 6, 4
1444
+ movdqa xmm4, xmm1 // 75, 74, 73, 72
1445
+ punpckhqdq xmm1, xmm2 // 7, 5, 75, 74
1446
+ punpcklqdq xmm4, xmm2 // 6, 4, 73, 72
1447
+
1448
+ paddd xmm5, xmm1
1449
+ psrad xmm5, 1
1450
+ psubd xmm4, xmm5
1451
+
1452
+ paddd xmm6, xmm4
1453
+ psrad xmm6, 1
1454
+ paddd xmm1, xmm6
1455
+
1456
+ movdqa xmm2, xmm4 // 6, 4, 73, 72
1457
+ punpckhqdq xmm4, xmm1 // 7, 5, 6, 4
1458
+ punpcklqdq xmm2, xmm1 // 75, 74, 73, 72
1459
+ pshufd xmm4, xmm4, 0xd8 // 7, 6, 5, 4
1460
+
1461
+ //================
1462
+ // butterfly
1463
+ // a = xmm0, b = xmm2, c = xmm4, d = xmm3
1464
+ paddd xmm0, xmm3
1465
+ movdqa xmm1, xmm0 // a = xmm1
1466
+ psrad xmm0, 1
1467
+ psubd xmm0, xmm3 // d = xmm0
1468
+
1469
+ movdqa xmm3, xmm0 // d = xmm3
1470
+ paddd xmm0, xmm0
1471
+ paddd xmm0, xmm3
1472
+ psrad xmm0, 3
1473
+ paddd xmm1, xmm0
1474
+
1475
+ movdqa xmm0, xmm1 // a = xmm0
1476
+ paddd xmm1, xmm1
1477
+ paddd xmm1, xmm0
1478
+ psrad xmm1, 4
1479
+ paddd xmm3, xmm1
1480
+
1481
+ movdqa xmm5, xmm0 // a
1482
+ psrad xmm5, 7
1483
+ paddd xmm3, xmm5 // d += (a >> 7)
1484
+ psrad xmm5, 3
1485
+ psubd xmm3, xmm5 // d -= (a >> 10)
1486
+
1487
+ movdqa xmm5, [g_const_d4]
1488
+ movdqa xmm1, xmm3 // d = xmm1
1489
+ psubd xmm2, xmm4
1490
+ paddd xmm5, xmm3
1491
+ paddd xmm3, xmm3
1492
+ paddd xmm3, xmm5
1493
+ psrad xmm3, 3
1494
+ paddd xmm0, xmm3
1495
+
1496
+ movdqa xmm3, xmm2 // b = xmm3
1497
+ psrad xmm2, 1
1498
+ psubd xmm1, xmm2
1499
+
1500
+ movdqa xmm2, xmm0 // a = xmm2
1501
+ psubd xmm0, xmm3
1502
+ psrad xmm0, 1
1503
+ psubd xmm0, xmm4 // c = xmm0
1504
+
1505
+ paddd xmm3, xmm1
1506
+ psubd xmm2, xmm0
1507
+
1508
+ //================
1509
+ movdqa [edi + 4 * 4], xmm1
1510
+ movdqa [edi + 4 * 64], xmm0
1511
+ movdqa [esi + 4 * 12], xmm2
1512
+ movdqa [esi + 4 * 72], xmm3
1513
+
1514
+ add ebp, 8
1515
+ mov [esp], ebp
1516
+ jnz Loop0
1517
+
1518
+ //================
1519
+ add esp, (4 + 4) * 16 + 4
1520
+ pop edi
1521
+ pop esi
1522
+ pop ebx
1523
+ pop ebp
1524
+ ret 4 * 2
1525
+ }
1526
+ }
1527
+
1528
+ Int invTransformMacroblock_YUV444_Center5(CWMImageStrCodec * pSC)
1529
+ {
1530
+ const OVERLAP olOverlap = pSC->WMISCP.olOverlap;
1531
+ int i = 0;
1532
+
1533
+ assert(0 < pSC->cRow && pSC->cRow < pSC->cmbHeight);
1534
+ assert(0 < pSC->cColumn && pSC->cColumn < pSC->cmbWidth);
1535
+
1536
+ assert(0 == pSC->WMII.cPostProcStrength);
1537
+
1538
+ assert(YUV_444 == pSC->m_param.cfColorFormat);
1539
+ assert(3 == pSC->m_param.cNumChannels);
1540
+
1541
+ assert(pSC->m_Dparam->bDecodeFullWidth);
1542
+ assert(1 == pSC->m_Dparam->cThumbnailScale);
1543
+
1544
+ for (i = 0; i < 3; ++i)
1545
+ {
1546
+ PixelI* const p0 = pSC->p0MBbuffer[i];
1547
+ PixelI* const p1 = pSC->p1MBbuffer[i];
1548
+
1549
+ //================================
1550
+ // second level inverse transform
1551
+ strIDCT4x4Stage2(p1);
1552
+ if (pSC->m_param.bScaledArith) {
1553
+ strNormalizeDec(p1, (i != 0));
1554
+ }
1555
+
1556
+ //================================
1557
+ // second level inverse overlap
1558
+ if (OL_TWO <= olOverlap)
1559
+ {
1560
+ strPost4x4Stage2Split_alternate(p0, p1);
1561
+ }
1562
+
1563
+ //================================
1564
+ // first level inverse transform
1565
+ strIDCT4x4Stage1_OPT5(p0, p1);
1566
+
1567
+ //================================
1568
+ // first level inverse overlap
1569
+ if (OL_ONE <= olOverlap)
1570
+ {
1571
+ strPost4x4Stage1_alternate_ASM5(p0, p1);
1572
+ }
1573
+ }
1574
+
1575
+ return ICERR_OK;
1576
+ }
1577
+ #endif
1578
+ #endif
1579
+
1580
+ //================================================================
1581
+ void StrDecOpt(CWMImageStrCodec* pSC)
1582
+ {
1583
+ #if defined(WMP_OPT_SSE2)
1584
+ if (IsProcessorFeaturePresent(PF_XMMI64_INSTRUCTIONS_AVAILABLE))
1585
+ {
1586
+ CWMImageInfo* pII = &pSC->WMII;
1587
+ // CWMIStrCodecParam* pSCP = &pSC->WMISCP;
1588
+
1589
+ g_const_d0 = _mm_setzero_si128();
1590
+ g_const_d3 = _mm_set1_epi32(3);
1591
+ g_const_d1 = _mm_set_epi32(1, 1, 1, 1);
1592
+ g_const_d4 = _mm_set_epi32(4, 4, 4, 4);
1593
+
1594
+ g_const_d0x80 = _mm_set_epi32(0x80, 0x80, 0x80, 0x80);
1595
+ g_const_w0x80 = _mm_set_epi16(0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80);
1596
+ g_const_b0x80 = _mm_set_epi8(0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80);
1597
+
1598
+ if (pSC->WMII.fPaddedUserBuffer &&
1599
+ //pSC->m_Dparam->bDecodeFullFrame &&
1600
+ //((pII->cWidth & 0xf) == 0) &&
1601
+ //(((int) pSC->WMIBI.pv & 0xf) == 0) &&
1602
+ BD_8 == pII->bdBitDepth &&
1603
+ CF_RGB == pII->cfColorFormat &&
1604
+ 24 == pII->cBitsPerUnit &&
1605
+ pII->bRGB &&
1606
+ O_NONE == pII->oOrientation &&
1607
+ YUV_444 == pSC->m_param.cfColorFormat &&
1608
+ pSC->p1MBbuffer[1] - pSC->p1MBbuffer[0] == pSC->p1MBbuffer[2] - pSC->p1MBbuffer[1] &&
1609
+ pSC->m_Dparam->bDecodeFullFrame &&
1610
+ 1)
1611
+ {
1612
+ #if defined(WMP_OPT_CC_DEC)
1613
+ if (pSC->m_param.bScaledArith || pSC->WMISCP.olOverlap != OL_NONE)
1614
+ {
1615
+ pSC->Load = outputMBRow_RGB24_Lossy_3;
1616
+ }
1617
+ else
1618
+ {
1619
+ pSC->Load = outputMBRow_RGB24_Lossless_1;
1620
+ }
1621
+ #endif // WMP_OPT_CC_DEC
1622
+ }
1623
+
1624
+ if (YUV_444 == pSC->m_param.cfColorFormat &&
1625
+ pSC->p1MBbuffer[1] - pSC->p1MBbuffer[0] == pSC->p1MBbuffer[2] - pSC->p1MBbuffer[1] &&
1626
+ pSC->m_Dparam->bDecodeFullWidth &&
1627
+ pSC->m_param.cSubVersion == CODEC_SUBVERSION_NEWSCALING_SOFT_TILES &&
1628
+ 1 == pSC->m_Dparam->cThumbnailScale)
1629
+ {
1630
+ #if defined(WMP_OPT_TRFM_DEC)
1631
+ pSC->TransformCenter = invTransformMacroblock_YUV444_Center5;
1632
+ #endif
1633
+ }
1634
+
1635
+ }
1636
+ #else
1637
+ UNREFERENCED_PARAMETER( pSC );
1638
+ #endif
1639
+ }
1640
+