lightdrift-libraw 1.0.0-alpha.1

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 (487) hide show
  1. package/CHANGELOG.md +374 -0
  2. package/LICENSE +21 -0
  3. package/README.md +757 -0
  4. package/binding.gyp +38 -0
  5. package/deps/LibRaw-Source/LibRaw-0.21.4/.clang-format +4 -0
  6. package/deps/LibRaw-Source/LibRaw-0.21.4/COPYRIGHT +27 -0
  7. package/deps/LibRaw-Source/LibRaw-0.21.4/Changelog.txt +2802 -0
  8. package/deps/LibRaw-Source/LibRaw-0.21.4/DEVELOPER-NOTES +20 -0
  9. package/deps/LibRaw-Source/LibRaw-0.21.4/GoPro/dng-sdk-1_4-allow-VC5-validate.diff +21 -0
  10. package/deps/LibRaw-Source/LibRaw-0.21.4/GoPro/dng-sdk-1_6-hide-ccVc5-definitiion.diff +15 -0
  11. package/deps/LibRaw-Source/LibRaw-0.21.4/GoPro/dng-sdk-allow-VC5-validate.diff +21 -0
  12. package/deps/LibRaw-Source/LibRaw-0.21.4/GoPro/gpr_read_image.cpp.diff +29 -0
  13. package/deps/LibRaw-Source/LibRaw-0.21.4/GoPro/gpr_read_image.h.diff +12 -0
  14. package/deps/LibRaw-Source/LibRaw-0.21.4/INSTALL +51 -0
  15. package/deps/LibRaw-Source/LibRaw-0.21.4/LICENSE.CDDL +340 -0
  16. package/deps/LibRaw-Source/LibRaw-0.21.4/LICENSE.LGPL +458 -0
  17. package/deps/LibRaw-Source/LibRaw-0.21.4/LibRaw.pro +19 -0
  18. package/deps/LibRaw-Source/LibRaw-0.21.4/LibRaw.sln +123 -0
  19. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.am +140 -0
  20. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.devel.nopp +230 -0
  21. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.devel.noppr2i +227 -0
  22. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.dist +501 -0
  23. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.in +1849 -0
  24. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.mingw +297 -0
  25. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.msvc +628 -0
  26. package/deps/LibRaw-Source/LibRaw-0.21.4/README.DNGSDK.txt +43 -0
  27. package/deps/LibRaw-Source/LibRaw-0.21.4/README.GoPro.txt +112 -0
  28. package/deps/LibRaw-Source/LibRaw-0.21.4/README.RawSpeed.txt +62 -0
  29. package/deps/LibRaw-Source/LibRaw-0.21.4/README.cmake +9 -0
  30. package/deps/LibRaw-Source/LibRaw-0.21.4/README.demosaic-packs +17 -0
  31. package/deps/LibRaw-Source/LibRaw-0.21.4/README.md +106 -0
  32. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.cpucount-unix.patch +15 -0
  33. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.qmake-pro-files.patch +84 -0
  34. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.samsung-decoder.patch +39 -0
  35. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.uncompressed-color-dng.patch +13 -0
  36. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.win32-dll.patch +186 -0
  37. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed_xmldata.cpp +4115 -0
  38. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/README.md +69 -0
  39. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/patches/01.CameraMeta-extensibility.patch +13 -0
  40. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/patches/02.Makernotes-processing.patch +36 -0
  41. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/patches/03.remove-limits-and-logging.patch +245 -0
  42. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/patches/04.clang-cl-compatibility.patch +37 -0
  43. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi.cpp +251 -0
  44. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi.h +83 -0
  45. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi_test.cpp +71 -0
  46. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rsxml2c.sh +5 -0
  47. package/deps/LibRaw-Source/LibRaw-0.21.4/aclocal.m4 +1446 -0
  48. package/deps/LibRaw-Source/LibRaw-0.21.4/autom4te.cache/output.0 +19332 -0
  49. package/deps/LibRaw-Source/LibRaw-0.21.4/autom4te.cache/output.1 +19332 -0
  50. package/deps/LibRaw-Source/LibRaw-0.21.4/autom4te.cache/output.2 +19332 -0
  51. package/deps/LibRaw-Source/LibRaw-0.21.4/autom4te.cache/requests +544 -0
  52. package/deps/LibRaw-Source/LibRaw-0.21.4/autom4te.cache/traces.0 +3028 -0
  53. package/deps/LibRaw-Source/LibRaw-0.21.4/autom4te.cache/traces.1 +665 -0
  54. package/deps/LibRaw-Source/LibRaw-0.21.4/autom4te.cache/traces.2 +3028 -0
  55. package/deps/LibRaw-Source/LibRaw-0.21.4/bin/.keep_me +2 -0
  56. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/4channels.pro +5 -0
  57. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/4channels.vcxproj +145 -0
  58. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/4channels.vcxproj.filters +18 -0
  59. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_emu.pro +6 -0
  60. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_emu.vcxproj +145 -0
  61. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_emu.vcxproj.filters +18 -0
  62. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_half.pro +6 -0
  63. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_half.vcxproj +145 -0
  64. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_half.vcxproj.filters +18 -0
  65. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/half_mt.pro +10 -0
  66. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw-common-lib.pro +28 -0
  67. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw-common.pro +8 -0
  68. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw.pro +70 -0
  69. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw.vcxproj +234 -0
  70. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw.vcxproj.filters +295 -0
  71. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/mem_image.pro +6 -0
  72. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/mem_image.vcxproj +145 -0
  73. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/mem_image.vcxproj.filters +18 -0
  74. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/multirender_test.pro +6 -0
  75. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/multirender_test.vcxproj +145 -0
  76. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/multirender_test.vcxproj.filters +18 -0
  77. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/openbayer_sample.pro +6 -0
  78. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/openbayer_sample.vcxproj +145 -0
  79. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/openbayer_sample.vcxproj.filters +18 -0
  80. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.pro +4 -0
  81. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.vcxproj +145 -0
  82. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.vcxproj.filters +18 -0
  83. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/raw-identify.pro +6 -0
  84. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/raw-identify.vcxproj +145 -0
  85. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/raw-identify.vcxproj.filters +18 -0
  86. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/rawtextdump.pro +6 -0
  87. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/rawtextdump.vcxproj +145 -0
  88. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/rawtextdump.vcxproj.filters +18 -0
  89. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/simple_dcraw.pro +6 -0
  90. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/simple_dcraw.vcxproj +145 -0
  91. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/simple_dcraw.vcxproj.filters +18 -0
  92. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/unprocessed_raw.pro +6 -0
  93. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/unprocessed_raw.vcxproj +145 -0
  94. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/unprocessed_raw.vcxproj.filters +18 -0
  95. package/deps/LibRaw-Source/LibRaw-0.21.4/compile +347 -0
  96. package/deps/LibRaw-Source/LibRaw-0.21.4/config.guess +1433 -0
  97. package/deps/LibRaw-Source/LibRaw-0.21.4/config.sub +1804 -0
  98. package/deps/LibRaw-Source/LibRaw-0.21.4/configure +19332 -0
  99. package/deps/LibRaw-Source/LibRaw-0.21.4/configure.ac +153 -0
  100. package/deps/LibRaw-Source/LibRaw-0.21.4/depcomp +791 -0
  101. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-C.html +187 -0
  102. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-CXX.html +881 -0
  103. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-datastruct.html +1341 -0
  104. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-notes.html +305 -0
  105. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-overview.html +66 -0
  106. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/Install-LibRaw.html +124 -0
  107. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/Samples-LibRaw.html +213 -0
  108. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/Why-LibRaw.html +65 -0
  109. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/index.html +38 -0
  110. package/deps/LibRaw-Source/LibRaw-0.21.4/install-sh +501 -0
  111. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/dcraw_defs.h +66 -0
  112. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/dcraw_fileio_defs.h +25 -0
  113. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/defines.h +193 -0
  114. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/dmp_include.h +27 -0
  115. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/libraw_cameraids.h +320 -0
  116. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/libraw_cxx_defs.h +133 -0
  117. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/libraw_internal_funcs.h +412 -0
  118. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/var_defines.h +215 -0
  119. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/x3f_tools.h +539 -0
  120. package/deps/LibRaw-Source/LibRaw-0.21.4/lib/Makefile +3 -0
  121. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw.h +534 -0
  122. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_alloc.h +148 -0
  123. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_const.h +814 -0
  124. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_datastream.h +410 -0
  125. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_internal.h +341 -0
  126. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_types.h +1175 -0
  127. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_version.h +63 -0
  128. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw.pc.in +12 -0
  129. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw_r.pc.in +12 -0
  130. package/deps/LibRaw-Source/LibRaw-0.21.4/ltmain.sh +11147 -0
  131. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/ax_openmp.m4 +99 -0
  132. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/libtool.m4 +8369 -0
  133. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/ltoptions.m4 +437 -0
  134. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/ltsugar.m4 +124 -0
  135. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/ltversion.m4 +23 -0
  136. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/lt~obsolete.m4 +99 -0
  137. package/deps/LibRaw-Source/LibRaw-0.21.4/missing +215 -0
  138. package/deps/LibRaw-Source/LibRaw-0.21.4/object/.keep_me +0 -0
  139. package/deps/LibRaw-Source/LibRaw-0.21.4/rsxml2c.sh +6 -0
  140. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/4channels.cpp +174 -0
  141. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/Makefile +2 -0
  142. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/dcraw_emu.cpp +670 -0
  143. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/dcraw_half.c +78 -0
  144. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/half_mt.c +178 -0
  145. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/half_mt_win32.c +212 -0
  146. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/mem_image_sample.cpp +282 -0
  147. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/multirender_test.cpp +107 -0
  148. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/openbayer_sample.cpp +65 -0
  149. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/postprocessing_benchmark.cpp +223 -0
  150. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/raw-identify.cpp +743 -0
  151. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/rawtextdump.cpp +144 -0
  152. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/simple_dcraw.cpp +217 -0
  153. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/unprocessed_raw.cpp +319 -0
  154. package/deps/LibRaw-Source/LibRaw-0.21.4/shlib-version.sh +11 -0
  155. package/deps/LibRaw-Source/LibRaw-0.21.4/src/Makefile +2 -0
  156. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/canon_600.cpp +225 -0
  157. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/crx.cpp +2781 -0
  158. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_dcraw.cpp +1816 -0
  159. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_libraw.cpp +873 -0
  160. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_libraw_dcrdefs.cpp +411 -0
  161. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/dng.cpp +284 -0
  162. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/fp_dng.cpp +689 -0
  163. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/fuji_compressed.cpp +1210 -0
  164. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/generic.cpp +101 -0
  165. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/kodak_decoders.cpp +524 -0
  166. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/load_mfbacks.cpp +936 -0
  167. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/smal.cpp +181 -0
  168. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/unpack.cpp +508 -0
  169. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/unpack_thumb.cpp +405 -0
  170. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/aahd_demosaic.cpp +781 -0
  171. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/ahd_demosaic.cpp +355 -0
  172. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/dcb_demosaic.cpp +900 -0
  173. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/dht_demosaic.cpp +1033 -0
  174. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/misc_demosaic.cpp +420 -0
  175. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/xtrans_demosaic.cpp +434 -0
  176. package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/dngsdk_glue.cpp +416 -0
  177. package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/rawspeed_glue.cpp +286 -0
  178. package/deps/LibRaw-Source/LibRaw-0.21.4/src/libraw_c_api.cpp +457 -0
  179. package/deps/LibRaw-Source/LibRaw-0.21.4/src/libraw_datastream.cpp +1046 -0
  180. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/adobepano.cpp +154 -0
  181. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/canon.cpp +1335 -0
  182. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/ciff.cpp +411 -0
  183. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/cr3_parser.cpp +896 -0
  184. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/epson.cpp +96 -0
  185. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/exif_gps.cpp +430 -0
  186. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/fuji.cpp +1427 -0
  187. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/hasselblad_model.cpp +538 -0
  188. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/identify.cpp +3167 -0
  189. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/identify_tools.cpp +140 -0
  190. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/kodak.cpp +363 -0
  191. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/leica.cpp +375 -0
  192. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/makernotes.cpp +786 -0
  193. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/mediumformat.cpp +521 -0
  194. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/minolta.cpp +110 -0
  195. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/misc_parsers.cpp +694 -0
  196. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/nikon.cpp +1051 -0
  197. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/normalize_model.cpp +1451 -0
  198. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/olympus.cpp +685 -0
  199. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/p1.cpp +192 -0
  200. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/pentax.cpp +675 -0
  201. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/samsung.cpp +182 -0
  202. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/sony.cpp +2320 -0
  203. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/tiff.cpp +2198 -0
  204. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/aspect_ratio.cpp +113 -0
  205. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/dcraw_process.cpp +259 -0
  206. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/mem_image.cpp +292 -0
  207. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_aux.cpp +413 -0
  208. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_ph.cpp +31 -0
  209. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_utils.cpp +190 -0
  210. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_utils_dcrdefs.cpp +308 -0
  211. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/ext_preprocess.cpp +127 -0
  212. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/preprocessing_ph.cpp +24 -0
  213. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/raw2image.cpp +560 -0
  214. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/subtract_black.cpp +91 -0
  215. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/cameralist.cpp +1268 -0
  216. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/colorconst.cpp +57 -0
  217. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/colordata.cpp +1841 -0
  218. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/wblists.cpp +217 -0
  219. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/curves.cpp +154 -0
  220. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/decoder_info.cpp +413 -0
  221. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/init_close_utils.cpp +340 -0
  222. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/open.cpp +1269 -0
  223. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/phaseone_processing.cpp +101 -0
  224. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/read_utils.cpp +176 -0
  225. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/thumb_utils.cpp +338 -0
  226. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/utils_dcraw.cpp +330 -0
  227. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/utils_libraw.cpp +673 -0
  228. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/apply_profile.cpp +76 -0
  229. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/file_write.cpp +338 -0
  230. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/tiff_writer.cpp +73 -0
  231. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/write_ph.cpp +39 -0
  232. package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/x3f_parse_process.cpp +708 -0
  233. package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/x3f_utils_patched.cpp +2119 -0
  234. package/deps/LibRaw-Source/LibRaw-0.21.4/version.sh +16 -0
  235. package/deps/LibRaw-Win64/LibRaw-0.21.4/.clang-format +4 -0
  236. package/deps/LibRaw-Win64/LibRaw-0.21.4/COPYRIGHT +27 -0
  237. package/deps/LibRaw-Win64/LibRaw-0.21.4/Changelog.txt +2802 -0
  238. package/deps/LibRaw-Win64/LibRaw-0.21.4/DEVELOPER-NOTES +20 -0
  239. package/deps/LibRaw-Win64/LibRaw-0.21.4/GoPro/dng-sdk-1_4-allow-VC5-validate.diff +21 -0
  240. package/deps/LibRaw-Win64/LibRaw-0.21.4/GoPro/dng-sdk-1_6-hide-ccVc5-definitiion.diff +15 -0
  241. package/deps/LibRaw-Win64/LibRaw-0.21.4/GoPro/dng-sdk-allow-VC5-validate.diff +21 -0
  242. package/deps/LibRaw-Win64/LibRaw-0.21.4/GoPro/gpr_read_image.cpp.diff +29 -0
  243. package/deps/LibRaw-Win64/LibRaw-0.21.4/GoPro/gpr_read_image.h.diff +12 -0
  244. package/deps/LibRaw-Win64/LibRaw-0.21.4/INSTALL +51 -0
  245. package/deps/LibRaw-Win64/LibRaw-0.21.4/LICENSE.CDDL +340 -0
  246. package/deps/LibRaw-Win64/LibRaw-0.21.4/LICENSE.LGPL +458 -0
  247. package/deps/LibRaw-Win64/LibRaw-0.21.4/LibRaw.pro +19 -0
  248. package/deps/LibRaw-Win64/LibRaw-0.21.4/LibRaw.sln +123 -0
  249. package/deps/LibRaw-Win64/LibRaw-0.21.4/Makefile.am +140 -0
  250. package/deps/LibRaw-Win64/LibRaw-0.21.4/Makefile.devel.nopp +230 -0
  251. package/deps/LibRaw-Win64/LibRaw-0.21.4/Makefile.devel.noppr2i +227 -0
  252. package/deps/LibRaw-Win64/LibRaw-0.21.4/Makefile.dist +501 -0
  253. package/deps/LibRaw-Win64/LibRaw-0.21.4/Makefile.in +1849 -0
  254. package/deps/LibRaw-Win64/LibRaw-0.21.4/Makefile.mingw +297 -0
  255. package/deps/LibRaw-Win64/LibRaw-0.21.4/Makefile.msvc +628 -0
  256. package/deps/LibRaw-Win64/LibRaw-0.21.4/README.DNGSDK.txt +43 -0
  257. package/deps/LibRaw-Win64/LibRaw-0.21.4/README.GoPro.txt +112 -0
  258. package/deps/LibRaw-Win64/LibRaw-0.21.4/README.RawSpeed.txt +62 -0
  259. package/deps/LibRaw-Win64/LibRaw-0.21.4/README.cmake +9 -0
  260. package/deps/LibRaw-Win64/LibRaw-0.21.4/README.demosaic-packs +17 -0
  261. package/deps/LibRaw-Win64/LibRaw-0.21.4/README.md +106 -0
  262. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed/rawspeed.cpucount-unix.patch +15 -0
  263. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed/rawspeed.qmake-pro-files.patch +84 -0
  264. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed/rawspeed.samsung-decoder.patch +39 -0
  265. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed/rawspeed.uncompressed-color-dng.patch +13 -0
  266. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed/rawspeed.win32-dll.patch +186 -0
  267. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed/rawspeed_xmldata.cpp +4115 -0
  268. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/README.md +69 -0
  269. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/patches/01.CameraMeta-extensibility.patch +13 -0
  270. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/patches/02.Makernotes-processing.patch +36 -0
  271. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/patches/03.remove-limits-and-logging.patch +245 -0
  272. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/patches/04.clang-cl-compatibility.patch +37 -0
  273. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi.cpp +251 -0
  274. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi.h +83 -0
  275. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi_test.cpp +71 -0
  276. package/deps/LibRaw-Win64/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rsxml2c.sh +5 -0
  277. package/deps/LibRaw-Win64/LibRaw-0.21.4/aclocal.m4 +1446 -0
  278. package/deps/LibRaw-Win64/LibRaw-0.21.4/autom4te.cache/output.0 +19332 -0
  279. package/deps/LibRaw-Win64/LibRaw-0.21.4/autom4te.cache/output.1 +19332 -0
  280. package/deps/LibRaw-Win64/LibRaw-0.21.4/autom4te.cache/output.2 +19332 -0
  281. package/deps/LibRaw-Win64/LibRaw-0.21.4/autom4te.cache/requests +544 -0
  282. package/deps/LibRaw-Win64/LibRaw-0.21.4/autom4te.cache/traces.0 +3028 -0
  283. package/deps/LibRaw-Win64/LibRaw-0.21.4/autom4te.cache/traces.1 +665 -0
  284. package/deps/LibRaw-Win64/LibRaw-0.21.4/autom4te.cache/traces.2 +3028 -0
  285. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/.keep_me +2 -0
  286. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/4channels.exe +0 -0
  287. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/dcraw_emu.exe +0 -0
  288. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/dcraw_half.exe +0 -0
  289. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/half_mt.exe +0 -0
  290. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/libraw.dll +0 -0
  291. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/mem_image.exe +0 -0
  292. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/multirender_test.exe +0 -0
  293. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/openbayer_sample.exe +0 -0
  294. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/postprocessing_benchmark.exe +0 -0
  295. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/raw-identify.exe +0 -0
  296. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/rawtextdump.exe +0 -0
  297. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/simple_dcraw.exe +0 -0
  298. package/deps/LibRaw-Win64/LibRaw-0.21.4/bin/unprocessed_raw.exe +0 -0
  299. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/4channels.pro +5 -0
  300. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/4channels.vcxproj +145 -0
  301. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/4channels.vcxproj.filters +18 -0
  302. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/dcraw_emu.pro +6 -0
  303. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/dcraw_emu.vcxproj +145 -0
  304. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/dcraw_emu.vcxproj.filters +18 -0
  305. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/dcraw_half.pro +6 -0
  306. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/dcraw_half.vcxproj +145 -0
  307. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/dcraw_half.vcxproj.filters +18 -0
  308. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/half_mt.pro +10 -0
  309. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/libraw-common-lib.pro +28 -0
  310. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/libraw-common.pro +8 -0
  311. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/libraw.pro +70 -0
  312. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/libraw.vcxproj +234 -0
  313. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/libraw.vcxproj.filters +295 -0
  314. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/mem_image.pro +6 -0
  315. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/mem_image.vcxproj +145 -0
  316. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/mem_image.vcxproj.filters +18 -0
  317. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/multirender_test.pro +6 -0
  318. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/multirender_test.vcxproj +145 -0
  319. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/multirender_test.vcxproj.filters +18 -0
  320. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/openbayer_sample.pro +6 -0
  321. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/openbayer_sample.vcxproj +145 -0
  322. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/openbayer_sample.vcxproj.filters +18 -0
  323. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.pro +4 -0
  324. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.vcxproj +145 -0
  325. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.vcxproj.filters +18 -0
  326. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/raw-identify.pro +6 -0
  327. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/raw-identify.vcxproj +145 -0
  328. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/raw-identify.vcxproj.filters +18 -0
  329. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/rawtextdump.pro +6 -0
  330. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/rawtextdump.vcxproj +145 -0
  331. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/rawtextdump.vcxproj.filters +18 -0
  332. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/simple_dcraw.pro +6 -0
  333. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/simple_dcraw.vcxproj +145 -0
  334. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/simple_dcraw.vcxproj.filters +18 -0
  335. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/unprocessed_raw.pro +6 -0
  336. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/unprocessed_raw.vcxproj +145 -0
  337. package/deps/LibRaw-Win64/LibRaw-0.21.4/buildfiles/unprocessed_raw.vcxproj.filters +18 -0
  338. package/deps/LibRaw-Win64/LibRaw-0.21.4/compile +347 -0
  339. package/deps/LibRaw-Win64/LibRaw-0.21.4/config.guess +1433 -0
  340. package/deps/LibRaw-Win64/LibRaw-0.21.4/config.sub +1804 -0
  341. package/deps/LibRaw-Win64/LibRaw-0.21.4/configure +19332 -0
  342. package/deps/LibRaw-Win64/LibRaw-0.21.4/configure.ac +153 -0
  343. package/deps/LibRaw-Win64/LibRaw-0.21.4/depcomp +791 -0
  344. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/API-C.html +187 -0
  345. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/API-CXX.html +881 -0
  346. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/API-datastruct.html +1341 -0
  347. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/API-notes.html +305 -0
  348. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/API-overview.html +66 -0
  349. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/Install-LibRaw.html +124 -0
  350. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/Samples-LibRaw.html +213 -0
  351. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/Why-LibRaw.html +65 -0
  352. package/deps/LibRaw-Win64/LibRaw-0.21.4/doc/index.html +38 -0
  353. package/deps/LibRaw-Win64/LibRaw-0.21.4/install-sh +501 -0
  354. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/dcraw_defs.h +66 -0
  355. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/dcraw_fileio_defs.h +25 -0
  356. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/defines.h +193 -0
  357. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/dmp_include.h +27 -0
  358. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/libraw_cameraids.h +320 -0
  359. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/libraw_cxx_defs.h +133 -0
  360. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/libraw_internal_funcs.h +412 -0
  361. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/var_defines.h +215 -0
  362. package/deps/LibRaw-Win64/LibRaw-0.21.4/internal/x3f_tools.h +539 -0
  363. package/deps/LibRaw-Win64/LibRaw-0.21.4/lib/Makefile +3 -0
  364. package/deps/LibRaw-Win64/LibRaw-0.21.4/lib/libraw.exp +0 -0
  365. package/deps/LibRaw-Win64/LibRaw-0.21.4/lib/libraw.lib +0 -0
  366. package/deps/LibRaw-Win64/LibRaw-0.21.4/lib/libraw_static.lib +0 -0
  367. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw/libraw.h +534 -0
  368. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw/libraw_alloc.h +148 -0
  369. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw/libraw_const.h +814 -0
  370. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw/libraw_datastream.h +410 -0
  371. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw/libraw_internal.h +341 -0
  372. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw/libraw_types.h +1175 -0
  373. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw/libraw_version.h +63 -0
  374. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw.pc.in +12 -0
  375. package/deps/LibRaw-Win64/LibRaw-0.21.4/libraw_r.pc.in +12 -0
  376. package/deps/LibRaw-Win64/LibRaw-0.21.4/ltmain.sh +11147 -0
  377. package/deps/LibRaw-Win64/LibRaw-0.21.4/m4/ax_openmp.m4 +99 -0
  378. package/deps/LibRaw-Win64/LibRaw-0.21.4/m4/libtool.m4 +8369 -0
  379. package/deps/LibRaw-Win64/LibRaw-0.21.4/m4/ltoptions.m4 +437 -0
  380. package/deps/LibRaw-Win64/LibRaw-0.21.4/m4/ltsugar.m4 +124 -0
  381. package/deps/LibRaw-Win64/LibRaw-0.21.4/m4/ltversion.m4 +23 -0
  382. package/deps/LibRaw-Win64/LibRaw-0.21.4/m4/lt~obsolete.m4 +99 -0
  383. package/deps/LibRaw-Win64/LibRaw-0.21.4/missing +215 -0
  384. package/deps/LibRaw-Win64/LibRaw-0.21.4/object/.keep_me +0 -0
  385. package/deps/LibRaw-Win64/LibRaw-0.21.4/rsxml2c.sh +6 -0
  386. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/4channels.cpp +174 -0
  387. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/Makefile +2 -0
  388. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/dcraw_emu.cpp +670 -0
  389. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/dcraw_half.c +78 -0
  390. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/half_mt.c +178 -0
  391. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/half_mt_win32.c +212 -0
  392. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/mem_image_sample.cpp +282 -0
  393. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/multirender_test.cpp +107 -0
  394. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/openbayer_sample.cpp +65 -0
  395. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/postprocessing_benchmark.cpp +223 -0
  396. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/raw-identify.cpp +743 -0
  397. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/rawtextdump.cpp +144 -0
  398. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/simple_dcraw.cpp +217 -0
  399. package/deps/LibRaw-Win64/LibRaw-0.21.4/samples/unprocessed_raw.cpp +319 -0
  400. package/deps/LibRaw-Win64/LibRaw-0.21.4/shlib-version.sh +11 -0
  401. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/Makefile +2 -0
  402. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/canon_600.cpp +225 -0
  403. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/crx.cpp +2781 -0
  404. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/decoders_dcraw.cpp +1816 -0
  405. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/decoders_libraw.cpp +873 -0
  406. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/decoders_libraw_dcrdefs.cpp +411 -0
  407. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/dng.cpp +284 -0
  408. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/fp_dng.cpp +689 -0
  409. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/fuji_compressed.cpp +1210 -0
  410. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/generic.cpp +101 -0
  411. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/kodak_decoders.cpp +524 -0
  412. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/load_mfbacks.cpp +936 -0
  413. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/smal.cpp +181 -0
  414. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/unpack.cpp +508 -0
  415. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/decoders/unpack_thumb.cpp +405 -0
  416. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/demosaic/aahd_demosaic.cpp +781 -0
  417. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/demosaic/ahd_demosaic.cpp +355 -0
  418. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/demosaic/dcb_demosaic.cpp +900 -0
  419. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/demosaic/dht_demosaic.cpp +1033 -0
  420. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/demosaic/misc_demosaic.cpp +420 -0
  421. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/demosaic/xtrans_demosaic.cpp +434 -0
  422. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/integration/dngsdk_glue.cpp +416 -0
  423. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/integration/rawspeed_glue.cpp +286 -0
  424. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/libraw_c_api.cpp +457 -0
  425. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/libraw_datastream.cpp +1046 -0
  426. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/adobepano.cpp +154 -0
  427. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/canon.cpp +1335 -0
  428. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/ciff.cpp +411 -0
  429. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/cr3_parser.cpp +896 -0
  430. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/epson.cpp +96 -0
  431. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/exif_gps.cpp +430 -0
  432. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/fuji.cpp +1427 -0
  433. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/hasselblad_model.cpp +538 -0
  434. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/identify.cpp +3167 -0
  435. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/identify_tools.cpp +140 -0
  436. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/kodak.cpp +363 -0
  437. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/leica.cpp +375 -0
  438. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/makernotes.cpp +786 -0
  439. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/mediumformat.cpp +521 -0
  440. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/minolta.cpp +110 -0
  441. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/misc_parsers.cpp +694 -0
  442. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/nikon.cpp +1051 -0
  443. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/normalize_model.cpp +1451 -0
  444. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/olympus.cpp +685 -0
  445. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/p1.cpp +192 -0
  446. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/pentax.cpp +675 -0
  447. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/samsung.cpp +182 -0
  448. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/sony.cpp +2320 -0
  449. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/metadata/tiff.cpp +2198 -0
  450. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/postprocessing/aspect_ratio.cpp +113 -0
  451. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/postprocessing/dcraw_process.cpp +259 -0
  452. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/postprocessing/mem_image.cpp +292 -0
  453. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/postprocessing/postprocessing_aux.cpp +413 -0
  454. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/postprocessing/postprocessing_ph.cpp +31 -0
  455. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/postprocessing/postprocessing_utils.cpp +190 -0
  456. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/postprocessing/postprocessing_utils_dcrdefs.cpp +308 -0
  457. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/preprocessing/ext_preprocess.cpp +127 -0
  458. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/preprocessing/preprocessing_ph.cpp +24 -0
  459. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/preprocessing/raw2image.cpp +560 -0
  460. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/preprocessing/subtract_black.cpp +91 -0
  461. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/tables/cameralist.cpp +1268 -0
  462. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/tables/colorconst.cpp +57 -0
  463. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/tables/colordata.cpp +1841 -0
  464. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/tables/wblists.cpp +217 -0
  465. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/curves.cpp +154 -0
  466. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/decoder_info.cpp +413 -0
  467. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/init_close_utils.cpp +340 -0
  468. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/open.cpp +1269 -0
  469. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/phaseone_processing.cpp +101 -0
  470. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/read_utils.cpp +176 -0
  471. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/thumb_utils.cpp +338 -0
  472. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/utils_dcraw.cpp +330 -0
  473. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/utils/utils_libraw.cpp +673 -0
  474. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/write/apply_profile.cpp +76 -0
  475. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/write/file_write.cpp +338 -0
  476. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/write/tiff_writer.cpp +73 -0
  477. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/write/write_ph.cpp +39 -0
  478. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/x3f/x3f_parse_process.cpp +708 -0
  479. package/deps/LibRaw-Win64/LibRaw-0.21.4/src/x3f/x3f_utils_patched.cpp +2119 -0
  480. package/deps/LibRaw-Win64/LibRaw-0.21.4/version.sh +16 -0
  481. package/lib/index.d.ts +324 -0
  482. package/lib/index.js +761 -0
  483. package/package.json +97 -0
  484. package/src/addon.cpp +8 -0
  485. package/src/libraw_wrapper.cpp +1223 -0
  486. package/src/libraw_wrapper.h +109 -0
  487. package/src/libraw_wrapper_new.cpp +853 -0
@@ -0,0 +1,1210 @@
1
+ /* -*- C++ -*-
2
+ * File: libraw_fuji_compressed.cpp
3
+ * Copyright (C) 2016-2019 Alexey Danilchenko
4
+ *
5
+ * Adopted to LibRaw by Alex Tutubalin, lexa@lexa.ru
6
+ * LibRaw Fujifilm/compressed decoder
7
+
8
+ LibRaw is free software; you can redistribute it and/or modify
9
+ it under the terms of the one of two licenses as you choose:
10
+
11
+ 1. GNU LESSER GENERAL PUBLIC LICENSE version 2.1
12
+ (See file LICENSE.LGPL provided in LibRaw distribution archive for details).
13
+
14
+ 2. COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
15
+ (See file LICENSE.CDDL provided in LibRaw distribution archive for details).
16
+
17
+ */
18
+
19
+ #include "../../internal/libraw_cxx_defs.h"
20
+
21
+ #ifdef _abs
22
+ #undef _abs
23
+ #undef _min
24
+ #undef _max
25
+ #endif
26
+ #define _abs(x) (((int)(x) ^ ((int)(x) >> 31)) - ((int)(x) >> 31))
27
+ #define _min(a, b) ((a) < (b) ? (a) : (b))
28
+ #define _max(a, b) ((a) > (b) ? (a) : (b))
29
+
30
+ struct int_pair
31
+ {
32
+ int value1;
33
+ int value2;
34
+ };
35
+
36
+ enum _xt_lines
37
+ {
38
+ _R0 = 0,
39
+ _R1,
40
+ _R2,
41
+ _R3,
42
+ _R4,
43
+ _G0,
44
+ _G1,
45
+ _G2,
46
+ _G3,
47
+ _G4,
48
+ _G5,
49
+ _G6,
50
+ _G7,
51
+ _B0,
52
+ _B1,
53
+ _B2,
54
+ _B3,
55
+ _B4,
56
+ _ltotal
57
+ };
58
+
59
+ // tables of gradients for single sample level
60
+ struct fuji_grads
61
+ {
62
+ int_pair grads[41];
63
+ int_pair lossy_grads[3][5];
64
+ };
65
+
66
+ struct fuji_compressed_block
67
+ {
68
+ int cur_bit; // current bit being read (from left to right)
69
+ int cur_pos; // current position in a buffer
70
+ INT64 cur_buf_offset; // offset of this buffer in a file
71
+ unsigned max_read_size; // Amount of data to be read
72
+ int cur_buf_size; // buffer size
73
+ uchar *cur_buf; // currently read block
74
+ int fillbytes; // Counter to add extra byte for block size N*16
75
+ LibRaw_abstract_datastream *input;
76
+ fuji_grads even[3]; // tables of even gradients
77
+ fuji_grads odd[3]; // tables of odd gradients
78
+ ushort *linealloc;
79
+ ushort *linebuf[_ltotal];
80
+ };
81
+
82
+ static inline int log2ceil(int val)
83
+ {
84
+ int result = 0;
85
+ if (val--)
86
+ do
87
+ ++result;
88
+ while (val >>= 1);
89
+
90
+ return result;
91
+ }
92
+
93
+ void setup_qlut(int8_t *qt, int *q_point)
94
+ {
95
+ for (int curVal = -q_point[4]; curVal <= q_point[4]; ++qt, ++curVal)
96
+ {
97
+ if (curVal <= -q_point[3])
98
+ *qt = -4;
99
+ else if (curVal <= -q_point[2])
100
+ *qt = -3;
101
+ else if (curVal <= -q_point[1])
102
+ *qt = -2;
103
+ else if (curVal < -q_point[0])
104
+ *qt = -1;
105
+ else if (curVal <= q_point[0])
106
+ *qt = 0;
107
+ else if (curVal < q_point[1])
108
+ *qt = 1;
109
+ else if (curVal < q_point[2])
110
+ *qt = 2;
111
+ else if (curVal < q_point[3])
112
+ *qt = 3;
113
+ else
114
+ *qt = 4;
115
+ }
116
+ }
117
+
118
+ void init_main_qtable(fuji_compressed_params *params, uchar q_base)
119
+ {
120
+ fuji_q_table *qt = params->qt;
121
+ int qp[5];
122
+ int maxVal = params->max_value + 1;
123
+ qp[0] = q_base;
124
+ qp[1] = 3 * q_base + 0x12;
125
+ qp[2] = 5 * q_base + 0x43;
126
+ qp[3] = 7 * q_base + 0x114;
127
+ qp[4] = params->max_value;
128
+ if (qp[1] >= maxVal || qp[1] < q_base + 1)
129
+ qp[1] = q_base + 1;
130
+ if (qp[2] < qp[1] || qp[2] >= maxVal)
131
+ qp[2] = qp[1];
132
+ if (qp[3] < qp[2] || qp[3] >= maxVal)
133
+ qp[3] = qp[2];
134
+ setup_qlut(qt->q_table, qp);
135
+ qt->q_base = q_base;
136
+ qt->max_grad = 0;
137
+ qt->total_values = (qp[4] + 2 * q_base) / (2 * q_base + 1) + 1;
138
+ qt->raw_bits = log2ceil(qt->total_values);
139
+ qt->q_grad_mult = 9;
140
+ params->max_bits = 4 * log2ceil(qp[4] + 1);
141
+ }
142
+
143
+ void LibRaw::init_fuji_compr(fuji_compressed_params *params)
144
+ {
145
+ if ((libraw_internal_data.unpacker_data.fuji_block_width % 3 &&
146
+ libraw_internal_data.unpacker_data.fuji_raw_type == 16) ||
147
+ (libraw_internal_data.unpacker_data.fuji_block_width & 1 &&
148
+ libraw_internal_data.unpacker_data.fuji_raw_type == 0))
149
+ derror();
150
+
151
+ size_t q_table_size = 2 << libraw_internal_data.unpacker_data.fuji_bits;
152
+ if (libraw_internal_data.unpacker_data.fuji_lossless)
153
+ params->buf = malloc(q_table_size);
154
+ else
155
+ params->buf = malloc(3 * q_table_size);
156
+
157
+ if (libraw_internal_data.unpacker_data.fuji_raw_type == 16)
158
+ params->line_width = (libraw_internal_data.unpacker_data.fuji_block_width * 2) / 3;
159
+ else
160
+ params->line_width = libraw_internal_data.unpacker_data.fuji_block_width >> 1;
161
+
162
+ params->min_value = 0x40;
163
+ params->max_value = (1 << libraw_internal_data.unpacker_data.fuji_bits) - 1;
164
+
165
+ // setup qtables
166
+ if (libraw_internal_data.unpacker_data.fuji_lossless)
167
+ {
168
+ // setup main qtable only, zero the rest
169
+ memset(params->qt + 1, 0, 3 * sizeof(fuji_q_table));
170
+ params->qt[0].q_table = (int8_t *)params->buf;
171
+ params->qt[0].q_base = -1;
172
+ init_main_qtable(params, 0);
173
+ }
174
+ else
175
+ {
176
+ // setup 3 extra qtables - main one will be set for each block
177
+ memset(params->qt, 0, sizeof(fuji_q_table));
178
+ int qp[5];
179
+
180
+ qp[0] = 0;
181
+ qp[4] = params->max_value;
182
+
183
+ // table 0
184
+ params->qt[1].q_table = (int8_t *)params->buf;
185
+ params->qt[1].q_base = 0;
186
+ params->qt[1].max_grad = 5;
187
+ params->qt[1].q_grad_mult = 3;
188
+ params->qt[1].total_values = qp[4] + 1;
189
+ params->qt[1].raw_bits = log2ceil(params->qt[1].total_values);
190
+
191
+ qp[1] = qp[4] >= 0x12 ? 0x12 : qp[0] + 1;
192
+ qp[2] = qp[4] >= 0x43 ? 0x43 : qp[1];
193
+ qp[3] = qp[4] >= 0x114 ? 0x114 : qp[2];
194
+ setup_qlut(params->qt[1].q_table, qp);
195
+
196
+ // table 1
197
+ params->qt[2].q_table = params->qt[1].q_table + q_table_size;
198
+ params->qt[2].q_base = 1;
199
+ params->qt[2].max_grad = 6;
200
+ params->qt[2].q_grad_mult = 3;
201
+ params->qt[2].total_values = (qp[4] + 2) / 3 + 1;
202
+ params->qt[2].raw_bits = log2ceil(params->qt[2].total_values);
203
+
204
+ qp[0] = params->qt[2].q_base;
205
+ qp[1] = qp[4] >= 0x15 ? 0x15 : qp[0] + 1;
206
+ qp[2] = qp[4] >= 0x48 ? 0x48 : qp[1];
207
+ qp[3] = qp[4] >= 0x11B ? 0x11B : qp[2];
208
+ setup_qlut(params->qt[2].q_table, qp);
209
+
210
+ // table 2
211
+ params->qt[3].q_table = params->qt[2].q_table + q_table_size;
212
+ params->qt[3].q_base = 2;
213
+ params->qt[3].max_grad = 7;
214
+ params->qt[3].q_grad_mult = 3;
215
+ params->qt[3].total_values = (qp[4] + 4) / 5 + 1;
216
+ params->qt[3].raw_bits = log2ceil(params->qt[3].total_values);
217
+
218
+ qp[0] = params->qt[3].q_base;
219
+ qp[1] = qp[4] >= 0x18 ? 0x18 : qp[0] + 1;
220
+ qp[2] = qp[4] >= 0x4D ? 0x4D : qp[1];
221
+ qp[3] = qp[4] >= 0x122 ? 0x122 : qp[2];
222
+ setup_qlut(params->qt[3].q_table, qp);
223
+ }
224
+ }
225
+
226
+ #define XTRANS_BUF_SIZE 0x10000
227
+
228
+ static inline void fuji_fill_buffer(fuji_compressed_block *info)
229
+ {
230
+ if (info->cur_pos >= info->cur_buf_size)
231
+ {
232
+ info->cur_pos = 0;
233
+ info->cur_buf_offset += info->cur_buf_size;
234
+ #ifdef LIBRAW_USE_OPENMP
235
+ #pragma omp critical
236
+ #endif
237
+ {
238
+ #ifndef LIBRAW_USE_OPENMP
239
+ info->input->lock();
240
+ #endif
241
+ info->input->seek(info->cur_buf_offset, SEEK_SET);
242
+ info->cur_buf_size = info->input->read(info->cur_buf, 1, _min(info->max_read_size, XTRANS_BUF_SIZE));
243
+ #ifndef LIBRAW_USE_OPENMP
244
+ info->input->unlock();
245
+ #endif
246
+ if (info->cur_buf_size < 1) // nothing read
247
+ {
248
+ if (info->fillbytes > 0)
249
+ {
250
+ int ls = _max(1, _min(info->fillbytes, XTRANS_BUF_SIZE));
251
+ memset(info->cur_buf, 0, ls);
252
+ info->fillbytes -= ls;
253
+ }
254
+ else
255
+ throw LIBRAW_EXCEPTION_IO_EOF;
256
+ }
257
+ info->max_read_size -= info->cur_buf_size;
258
+ }
259
+ }
260
+ }
261
+
262
+ void init_main_grads(const fuji_compressed_params *params, fuji_compressed_block *info)
263
+ {
264
+ int max_diff = _max(2, (params->qt->total_values + 0x20) >> 6);
265
+ for (int j = 0; j < 3; j++)
266
+ for (int i = 0; i < 41; i++)
267
+ {
268
+ info->even[j].grads[i].value1 = max_diff;
269
+ info->even[j].grads[i].value2 = 1;
270
+ info->odd[j].grads[i].value1 = max_diff;
271
+ info->odd[j].grads[i].value2 = 1;
272
+ }
273
+ }
274
+
275
+ void LibRaw::init_fuji_block(fuji_compressed_block *info, const fuji_compressed_params *params, INT64 raw_offset,
276
+ unsigned dsize)
277
+ {
278
+ info->linealloc = (ushort *)calloc(sizeof(ushort), _ltotal * (params->line_width + 2));
279
+
280
+ INT64 fsize = libraw_internal_data.internal_data.input->size();
281
+ info->max_read_size = _min(unsigned(fsize - raw_offset), dsize); // Data size may be incorrect?
282
+ info->fillbytes = 1;
283
+
284
+ info->input = libraw_internal_data.internal_data.input;
285
+ info->linebuf[_R0] = info->linealloc;
286
+ for (int i = _R1; i <= _B4; i++)
287
+ info->linebuf[i] = info->linebuf[i - 1] + params->line_width + 2;
288
+
289
+ // init buffer
290
+ info->cur_buf = (uchar *)malloc(XTRANS_BUF_SIZE);
291
+ info->cur_bit = 0;
292
+ info->cur_pos = 0;
293
+ info->cur_buf_offset = raw_offset;
294
+ info->cur_buf_size = 0;
295
+ fuji_fill_buffer(info);
296
+
297
+ // init grads for lossy and lossless
298
+ if (libraw_internal_data.unpacker_data.fuji_lossless)
299
+ init_main_grads(params, info);
300
+ else
301
+ {
302
+ // init static grads for lossy only - main ones are done per line
303
+ for (int k = 0; k < 3; ++k)
304
+ {
305
+ int max_diff = _max(2, ((params->qt[k + 1].total_values + 0x20) >> 6));
306
+ for (int j = 0; j < 3; ++j)
307
+ for (int i = 0; i < 5; ++i)
308
+ {
309
+ info->even[j].lossy_grads[k][i].value1 = max_diff;
310
+ info->even[j].lossy_grads[k][i].value2 = 1;
311
+ info->odd[j].lossy_grads[k][i].value1 = max_diff;
312
+ info->odd[j].lossy_grads[k][i].value2 = 1;
313
+ }
314
+ }
315
+ }
316
+ }
317
+
318
+ void LibRaw::copy_line_to_xtrans(fuji_compressed_block *info, int cur_line, int cur_block, int cur_block_width)
319
+ {
320
+ ushort *lineBufB[3];
321
+ ushort *lineBufG[6];
322
+ ushort *lineBufR[3];
323
+ unsigned pixel_count;
324
+ ushort *line_buf;
325
+ int index;
326
+
327
+ int offset = libraw_internal_data.unpacker_data.fuji_block_width * cur_block + 6 * imgdata.sizes.raw_width * cur_line;
328
+ ushort *raw_block_data = imgdata.rawdata.raw_image + offset;
329
+ int row_count = 0;
330
+
331
+ for (int i = 0; i < 3; i++)
332
+ {
333
+ lineBufR[i] = info->linebuf[_R2 + i] + 1;
334
+ lineBufB[i] = info->linebuf[_B2 + i] + 1;
335
+ }
336
+ for (int i = 0; i < 6; i++)
337
+ lineBufG[i] = info->linebuf[_G2 + i] + 1;
338
+
339
+ while (row_count < 6)
340
+ {
341
+ pixel_count = 0;
342
+ while (pixel_count < (unsigned)cur_block_width)
343
+ {
344
+ switch (imgdata.idata.xtrans_abs[row_count][(pixel_count % 6)])
345
+ {
346
+ case 0: // red
347
+ line_buf = lineBufR[row_count >> 1];
348
+ break;
349
+ case 1: // green
350
+ default: // to make static analyzer happy
351
+ line_buf = lineBufG[row_count];
352
+ break;
353
+ case 2: // blue
354
+ line_buf = lineBufB[row_count >> 1];
355
+ break;
356
+ }
357
+
358
+ index = (((pixel_count * 2 / 3) & 0x7FFFFFFE) | ((pixel_count % 3) & 1)) + ((pixel_count % 3) >> 1);
359
+ raw_block_data[pixel_count] = line_buf[index];
360
+
361
+ ++pixel_count;
362
+ }
363
+ ++row_count;
364
+ raw_block_data += imgdata.sizes.raw_width;
365
+ }
366
+ }
367
+
368
+ void LibRaw::copy_line_to_bayer(fuji_compressed_block *info, int cur_line, int cur_block, int cur_block_width)
369
+ {
370
+ ushort *lineBufB[3];
371
+ ushort *lineBufG[6];
372
+ ushort *lineBufR[3];
373
+ unsigned pixel_count;
374
+ ushort *line_buf;
375
+
376
+ int fuji_bayer[2][2];
377
+ for (int r = 0; r < 2; r++)
378
+ for (int c = 0; c < 2; c++)
379
+ fuji_bayer[r][c] = FC(r, c); // We'll downgrade G2 to G below
380
+
381
+ int offset = libraw_internal_data.unpacker_data.fuji_block_width * cur_block + 6 * imgdata.sizes.raw_width * cur_line;
382
+ ushort *raw_block_data = imgdata.rawdata.raw_image + offset;
383
+ int row_count = 0;
384
+
385
+ for (int i = 0; i < 3; i++)
386
+ {
387
+ lineBufR[i] = info->linebuf[_R2 + i] + 1;
388
+ lineBufB[i] = info->linebuf[_B2 + i] + 1;
389
+ }
390
+ for (int i = 0; i < 6; i++)
391
+ lineBufG[i] = info->linebuf[_G2 + i] + 1;
392
+
393
+ while (row_count < 6)
394
+ {
395
+ pixel_count = 0;
396
+ while (pixel_count < (unsigned)cur_block_width)
397
+ {
398
+ switch (fuji_bayer[row_count & 1][pixel_count & 1])
399
+ {
400
+ case 0: // red
401
+ line_buf = lineBufR[row_count >> 1];
402
+ break;
403
+ case 1: // green
404
+ case 3: // second green
405
+ default: // to make static analyzer happy
406
+ line_buf = lineBufG[row_count];
407
+ break;
408
+ case 2: // blue
409
+ line_buf = lineBufB[row_count >> 1];
410
+ break;
411
+ }
412
+
413
+ raw_block_data[pixel_count] = line_buf[pixel_count >> 1];
414
+ ++pixel_count;
415
+ }
416
+ ++row_count;
417
+ raw_block_data += imgdata.sizes.raw_width;
418
+ }
419
+ }
420
+
421
+ #define fuji_quant_gradient(max, q, v1, v2) (q->q_grad_mult * q->q_table[(max) + (v1)] + q->q_table[(max) + (v2)])
422
+
423
+ static inline void fuji_zerobits(fuji_compressed_block *info, int *count)
424
+ {
425
+ uchar zero = 0;
426
+ *count = 0;
427
+ while (zero == 0)
428
+ {
429
+ zero = (info->cur_buf[info->cur_pos] >> (7 - info->cur_bit)) & 1;
430
+ info->cur_bit++;
431
+ info->cur_bit &= 7;
432
+ if (!info->cur_bit)
433
+ {
434
+ ++info->cur_pos;
435
+ fuji_fill_buffer(info);
436
+ }
437
+ if (zero)
438
+ break;
439
+ ++*count;
440
+ }
441
+ }
442
+
443
+ static inline void fuji_read_code(fuji_compressed_block *info, int *data, int bits_to_read)
444
+ {
445
+ uchar bits_left = bits_to_read;
446
+ uchar bits_left_in_byte = 8 - (info->cur_bit & 7);
447
+ *data = 0;
448
+ if (!bits_to_read)
449
+ return;
450
+ if (bits_to_read >= bits_left_in_byte)
451
+ {
452
+ do
453
+ {
454
+ *data <<= bits_left_in_byte;
455
+ bits_left -= bits_left_in_byte;
456
+ *data |= info->cur_buf[info->cur_pos] & ((1 << bits_left_in_byte) - 1);
457
+ ++info->cur_pos;
458
+ fuji_fill_buffer(info);
459
+ bits_left_in_byte = 8;
460
+ } while (bits_left >= 8);
461
+ }
462
+ if (!bits_left)
463
+ {
464
+ info->cur_bit = (8 - (bits_left_in_byte & 7)) & 7;
465
+ return;
466
+ }
467
+ *data <<= bits_left;
468
+ bits_left_in_byte -= bits_left;
469
+ *data |= ((1 << bits_left) - 1) & ((unsigned)info->cur_buf[info->cur_pos] >> bits_left_in_byte);
470
+ info->cur_bit = (8 - (bits_left_in_byte & 7)) & 7;
471
+ }
472
+
473
+ static inline int bitDiff(int value1, int value2)
474
+ {
475
+ int decBits = 0;
476
+ if (value2 < value1)
477
+ while (decBits <= 14 && (value2 << ++decBits) < value1)
478
+ ;
479
+ return decBits;
480
+ }
481
+
482
+ static inline int fuji_decode_sample_even(fuji_compressed_block *info, const fuji_compressed_params *params,
483
+ ushort *line_buf, int pos, fuji_grads *grad_params)
484
+ {
485
+ int interp_val = 0;
486
+ // ushort decBits;
487
+ int errcnt = 0;
488
+
489
+ int sample = 0, code = 0;
490
+ ushort *line_buf_cur = line_buf + pos;
491
+ int Rb = line_buf_cur[-2 - params->line_width];
492
+ int Rc = line_buf_cur[-3 - params->line_width];
493
+ int Rd = line_buf_cur[-1 - params->line_width];
494
+ int Rf = line_buf_cur[-4 - 2 * params->line_width];
495
+
496
+ int grad, gradient, diffRcRb, diffRfRb, diffRdRb;
497
+
498
+ diffRcRb = _abs(Rc - Rb);
499
+ diffRfRb = _abs(Rf - Rb);
500
+ diffRdRb = _abs(Rd - Rb);
501
+
502
+ const fuji_q_table *qt = params->qt;
503
+ int_pair *grads = grad_params->grads;
504
+ for (int i = 1; params->qt[0].q_base >= i && i < 4; ++i)
505
+ if (diffRfRb + diffRcRb <= params->qt[i].max_grad)
506
+ {
507
+ qt = params->qt + i;
508
+ grads = grad_params->lossy_grads[i - 1];
509
+ break;
510
+ }
511
+
512
+ grad = fuji_quant_gradient(params->max_value, qt, Rb - Rf, Rc - Rb);
513
+ gradient = _abs(grad);
514
+
515
+ if (diffRcRb > diffRfRb && diffRcRb > diffRdRb)
516
+ interp_val = Rf + Rd + 2 * Rb;
517
+ else if (diffRdRb > diffRcRb && diffRdRb > diffRfRb)
518
+ interp_val = Rf + Rc + 2 * Rb;
519
+ else
520
+ interp_val = Rd + Rc + 2 * Rb;
521
+
522
+ fuji_zerobits(info, &sample);
523
+
524
+ if (sample < params->max_bits - qt->raw_bits - 1)
525
+ {
526
+ int decBits = bitDiff(grads[gradient].value1, grads[gradient].value2);
527
+ fuji_read_code(info, &code, decBits);
528
+ code += sample << decBits;
529
+ }
530
+ else
531
+ {
532
+ fuji_read_code(info, &code, qt->raw_bits);
533
+ ++code;
534
+ }
535
+
536
+ if (code < 0 || code >= qt->total_values)
537
+ ++errcnt;
538
+
539
+ if (code & 1)
540
+ code = -1 - code / 2;
541
+ else
542
+ code /= 2;
543
+
544
+ grads[gradient].value1 += _abs(code);
545
+ if (grads[gradient].value2 == params->min_value)
546
+ {
547
+ grads[gradient].value1 >>= 1;
548
+ grads[gradient].value2 >>= 1;
549
+ }
550
+ ++grads[gradient].value2;
551
+ if (grad < 0)
552
+ interp_val = (interp_val >> 2) - code * (2 * qt->q_base + 1);
553
+ else
554
+ interp_val = (interp_val >> 2) + code * (2 * qt->q_base + 1);
555
+ if (interp_val < -qt->q_base)
556
+ interp_val += qt->total_values * (2 * qt->q_base + 1);
557
+ else if (interp_val > qt->q_base + params->max_value)
558
+ interp_val -= qt->total_values * (2 * qt->q_base + 1);
559
+
560
+ if (interp_val >= 0)
561
+ line_buf_cur[0] = _min(interp_val, params->max_value);
562
+ else
563
+ line_buf_cur[0] = 0;
564
+ return errcnt;
565
+ }
566
+
567
+ static inline int fuji_decode_sample_odd(fuji_compressed_block *info, const fuji_compressed_params *params,
568
+ ushort *line_buf, int pos, fuji_grads *grad_params)
569
+ {
570
+ int interp_val = 0;
571
+ int errcnt = 0;
572
+
573
+ int sample = 0, code = 0;
574
+ ushort *line_buf_cur = line_buf + pos;
575
+ int Ra = line_buf_cur[-1];
576
+ int Rb = line_buf_cur[-2 - params->line_width];
577
+ int Rc = line_buf_cur[-3 - params->line_width];
578
+ int Rd = line_buf_cur[-1 - params->line_width];
579
+ int Rg = line_buf_cur[1];
580
+
581
+ int grad, gradient;
582
+
583
+ int diffRcRa = _abs(Rc - Ra);
584
+ int diffRbRc = _abs(Rb - Rc);
585
+
586
+ const fuji_q_table *qt = params->qt;
587
+ int_pair *grads = grad_params->grads;
588
+ for (int i = 1; params->qt[0].q_base >= i && i < 4; ++i)
589
+ if (diffRbRc + diffRcRa <= params->qt[i].max_grad)
590
+ {
591
+ qt = params->qt + i;
592
+ grads = grad_params->lossy_grads[i - 1];
593
+ break;
594
+ }
595
+
596
+ grad = fuji_quant_gradient(params->max_value, qt, Rb - Rc, Rc - Ra);
597
+ gradient = _abs(grad);
598
+
599
+ if ((Rb > Rc && Rb > Rd) || (Rb < Rc && Rb < Rd))
600
+ interp_val = (Rg + Ra + 2 * Rb) >> 2;
601
+ else
602
+ interp_val = (Ra + Rg) >> 1;
603
+
604
+ fuji_zerobits(info, &sample);
605
+
606
+ if (sample < params->max_bits - qt->raw_bits - 1)
607
+ {
608
+ int decBits = bitDiff(grads[gradient].value1, grads[gradient].value2);
609
+ fuji_read_code(info, &code, decBits);
610
+ code += sample << decBits;
611
+ }
612
+ else
613
+ {
614
+ fuji_read_code(info, &code, qt->raw_bits);
615
+ ++code;
616
+ }
617
+
618
+ if (code < 0 || code >= qt->total_values)
619
+ ++errcnt;
620
+
621
+ if (code & 1)
622
+ code = -1 - code / 2;
623
+ else
624
+ code /= 2;
625
+
626
+ grads[gradient].value1 += _abs(code);
627
+ if (grads[gradient].value2 == params->min_value)
628
+ {
629
+ grads[gradient].value1 >>= 1;
630
+ grads[gradient].value2 >>= 1;
631
+ }
632
+ ++grads[gradient].value2;
633
+ if (grad < 0)
634
+ interp_val -= code * (2 * qt->q_base + 1);
635
+ else
636
+ interp_val += code * (2 * qt->q_base + 1);
637
+ if (interp_val < -qt->q_base)
638
+ interp_val += qt->total_values * (2 * qt->q_base + 1);
639
+ else if (interp_val > qt->q_base + params->max_value)
640
+ interp_val -= qt->total_values * (2 * qt->q_base + 1);
641
+
642
+ if (interp_val >= 0)
643
+ line_buf_cur[0] = _min(interp_val, params->max_value);
644
+ else
645
+ line_buf_cur[0] = 0;
646
+ return errcnt;
647
+ }
648
+
649
+ static void fuji_decode_interpolation_even(int line_width, ushort *line_buf, int pos)
650
+ {
651
+ ushort *line_buf_cur = line_buf + pos;
652
+ int Rb = line_buf_cur[-2 - line_width];
653
+ int Rc = line_buf_cur[-3 - line_width];
654
+ int Rd = line_buf_cur[-1 - line_width];
655
+ int Rf = line_buf_cur[-4 - 2 * line_width];
656
+ int diffRcRb = _abs(Rc - Rb);
657
+ int diffRfRb = _abs(Rf - Rb);
658
+ int diffRdRb = _abs(Rd - Rb);
659
+ if (diffRcRb > diffRfRb && diffRcRb > diffRdRb)
660
+ *line_buf_cur = (Rf + Rd + 2 * Rb) >> 2;
661
+ else if (diffRdRb > diffRcRb && diffRdRb > diffRfRb)
662
+ *line_buf_cur = (Rf + Rc + 2 * Rb) >> 2;
663
+ else
664
+ *line_buf_cur = (Rd + Rc + 2 * Rb) >> 2;
665
+ }
666
+
667
+ static void fuji_extend_generic(ushort *linebuf[_ltotal], int line_width, int start, int end)
668
+ {
669
+ for (int i = start; i <= end; i++)
670
+ {
671
+ linebuf[i][0] = linebuf[i - 1][1];
672
+ linebuf[i][line_width + 1] = linebuf[i - 1][line_width];
673
+ }
674
+ }
675
+
676
+ static void fuji_extend_red(ushort *linebuf[_ltotal], int line_width)
677
+ {
678
+ fuji_extend_generic(linebuf, line_width, _R2, _R4);
679
+ }
680
+
681
+ static void fuji_extend_green(ushort *linebuf[_ltotal], int line_width)
682
+ {
683
+ fuji_extend_generic(linebuf, line_width, _G2, _G7);
684
+ }
685
+
686
+ static void fuji_extend_blue(ushort *linebuf[_ltotal], int line_width)
687
+ {
688
+ fuji_extend_generic(linebuf, line_width, _B2, _B4);
689
+ }
690
+
691
+ void LibRaw::xtrans_decode_block(fuji_compressed_block *info, const fuji_compressed_params *params, int /*cur_line*/)
692
+ {
693
+ int r_even_pos = 0, r_odd_pos = 1;
694
+ int g_even_pos = 0, g_odd_pos = 1;
695
+ int b_even_pos = 0, b_odd_pos = 1;
696
+
697
+ int errcnt = 0;
698
+
699
+ const int line_width = params->line_width;
700
+
701
+ while (g_even_pos < line_width || g_odd_pos < line_width)
702
+ {
703
+ if (g_even_pos < line_width)
704
+ {
705
+ fuji_decode_interpolation_even(line_width, info->linebuf[_R2] + 1, r_even_pos);
706
+ r_even_pos += 2;
707
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_G2] + 1, g_even_pos, &info->even[0]);
708
+ g_even_pos += 2;
709
+ }
710
+ if (g_even_pos > 8)
711
+ {
712
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_R2] + 1, r_odd_pos, &info->odd[0]);
713
+ r_odd_pos += 2;
714
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_G2] + 1, g_odd_pos, &info->odd[0]);
715
+ g_odd_pos += 2;
716
+ }
717
+ }
718
+
719
+ fuji_extend_red(info->linebuf, line_width);
720
+ fuji_extend_green(info->linebuf, line_width);
721
+
722
+ g_even_pos = 0, g_odd_pos = 1;
723
+
724
+ while (g_even_pos < line_width || g_odd_pos < line_width)
725
+ {
726
+ if (g_even_pos < line_width)
727
+ {
728
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_G3] + 1, g_even_pos, &info->even[1]);
729
+ g_even_pos += 2;
730
+ fuji_decode_interpolation_even(line_width, info->linebuf[_B2] + 1, b_even_pos);
731
+ b_even_pos += 2;
732
+ }
733
+ if (g_even_pos > 8)
734
+ {
735
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_G3] + 1, g_odd_pos, &info->odd[1]);
736
+ g_odd_pos += 2;
737
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_B2] + 1, b_odd_pos, &info->odd[1]);
738
+ b_odd_pos += 2;
739
+ }
740
+ }
741
+
742
+ fuji_extend_green(info->linebuf, line_width);
743
+ fuji_extend_blue(info->linebuf, line_width);
744
+
745
+ r_even_pos = 0, r_odd_pos = 1;
746
+ g_even_pos = 0, g_odd_pos = 1;
747
+
748
+ while (g_even_pos < line_width || g_odd_pos < line_width)
749
+ {
750
+ if (g_even_pos < line_width)
751
+ {
752
+ if (r_even_pos & 3)
753
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_R3] + 1, r_even_pos, &info->even[2]);
754
+ else
755
+ fuji_decode_interpolation_even(line_width, info->linebuf[_R3] + 1, r_even_pos);
756
+ r_even_pos += 2;
757
+ fuji_decode_interpolation_even(line_width, info->linebuf[_G4] + 1, g_even_pos);
758
+ g_even_pos += 2;
759
+ }
760
+ if (g_even_pos > 8)
761
+ {
762
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_R3] + 1, r_odd_pos, &info->odd[2]);
763
+ r_odd_pos += 2;
764
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_G4] + 1, g_odd_pos, &info->odd[2]);
765
+ g_odd_pos += 2;
766
+ }
767
+ }
768
+
769
+ fuji_extend_red(info->linebuf, line_width);
770
+ fuji_extend_green(info->linebuf, line_width);
771
+
772
+ g_even_pos = 0, g_odd_pos = 1;
773
+ b_even_pos = 0, b_odd_pos = 1;
774
+
775
+ while (g_even_pos < line_width || g_odd_pos < line_width)
776
+ {
777
+ if (g_even_pos < line_width)
778
+ {
779
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_G5] + 1, g_even_pos, &info->even[0]);
780
+ g_even_pos += 2;
781
+ if ((b_even_pos & 3) == 2)
782
+ fuji_decode_interpolation_even(line_width, info->linebuf[_B3] + 1, b_even_pos);
783
+ else
784
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_B3] + 1, b_even_pos, &info->even[0]);
785
+ b_even_pos += 2;
786
+ }
787
+ if (g_even_pos > 8)
788
+ {
789
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_G5] + 1, g_odd_pos, &info->odd[0]);
790
+ g_odd_pos += 2;
791
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_B3] + 1, b_odd_pos, &info->odd[0]);
792
+ b_odd_pos += 2;
793
+ }
794
+ }
795
+
796
+ fuji_extend_green(info->linebuf, line_width);
797
+ fuji_extend_blue(info->linebuf, line_width);
798
+
799
+ r_even_pos = 0, r_odd_pos = 1;
800
+ g_even_pos = 0, g_odd_pos = 1;
801
+
802
+ while (g_even_pos < line_width || g_odd_pos < line_width)
803
+ {
804
+ if (g_even_pos < line_width)
805
+ {
806
+ if ((r_even_pos & 3) == 2)
807
+ fuji_decode_interpolation_even(line_width, info->linebuf[_R4] + 1, r_even_pos);
808
+ else
809
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_R4] + 1, r_even_pos, &info->even[1]);
810
+ r_even_pos += 2;
811
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_G6] + 1, g_even_pos, &info->even[1]);
812
+ g_even_pos += 2;
813
+ }
814
+ if (g_even_pos > 8)
815
+ {
816
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_R4] + 1, r_odd_pos, &info->odd[1]);
817
+ r_odd_pos += 2;
818
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_G6] + 1, g_odd_pos, &info->odd[1]);
819
+ g_odd_pos += 2;
820
+ }
821
+ }
822
+
823
+ fuji_extend_red(info->linebuf, line_width);
824
+ fuji_extend_green(info->linebuf, line_width);
825
+
826
+ g_even_pos = 0, g_odd_pos = 1;
827
+ b_even_pos = 0, b_odd_pos = 1;
828
+
829
+ while (g_even_pos < line_width || g_odd_pos < line_width)
830
+ {
831
+ if (g_even_pos < line_width)
832
+ {
833
+ fuji_decode_interpolation_even(line_width, info->linebuf[_G7] + 1, g_even_pos);
834
+ g_even_pos += 2;
835
+ if (b_even_pos & 3)
836
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_B4] + 1, b_even_pos, &info->even[2]);
837
+ else
838
+ fuji_decode_interpolation_even(line_width, info->linebuf[_B4] + 1, b_even_pos);
839
+ b_even_pos += 2;
840
+ }
841
+ if (g_even_pos > 8)
842
+ {
843
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_G7] + 1, g_odd_pos, &info->odd[2]);
844
+ g_odd_pos += 2;
845
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_B4] + 1, b_odd_pos, &info->odd[2]);
846
+ b_odd_pos += 2;
847
+ }
848
+ }
849
+
850
+ fuji_extend_green(info->linebuf, line_width);
851
+ fuji_extend_blue(info->linebuf, line_width);
852
+
853
+ if (errcnt)
854
+ derror();
855
+ }
856
+
857
+ void LibRaw::fuji_bayer_decode_block(fuji_compressed_block *info, const fuji_compressed_params *params, int /*cur_line*/)
858
+ {
859
+ int r_even_pos = 0, r_odd_pos = 1;
860
+ int g_even_pos = 0, g_odd_pos = 1;
861
+ int b_even_pos = 0, b_odd_pos = 1;
862
+
863
+ int errcnt = 0;
864
+
865
+ const int line_width = params->line_width;
866
+
867
+ while (g_even_pos < line_width || g_odd_pos < line_width)
868
+ {
869
+ if (g_even_pos < line_width)
870
+ {
871
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_R2] + 1, r_even_pos, &info->even[0]);
872
+ r_even_pos += 2;
873
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_G2] + 1, g_even_pos, &info->even[0]);
874
+ g_even_pos += 2;
875
+ }
876
+ if (g_even_pos > 8)
877
+ {
878
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_R2] + 1, r_odd_pos, &info->odd[0]);
879
+ r_odd_pos += 2;
880
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_G2] + 1, g_odd_pos, &info->odd[0]);
881
+ g_odd_pos += 2;
882
+ }
883
+ }
884
+
885
+ fuji_extend_red(info->linebuf, line_width);
886
+ fuji_extend_green(info->linebuf, line_width);
887
+
888
+ g_even_pos = 0, g_odd_pos = 1;
889
+
890
+ while (g_even_pos < line_width || g_odd_pos < line_width)
891
+ {
892
+ if (g_even_pos < line_width)
893
+ {
894
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_G3] + 1, g_even_pos, &info->even[1]);
895
+ g_even_pos += 2;
896
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_B2] + 1, b_even_pos, &info->even[1]);
897
+ b_even_pos += 2;
898
+ }
899
+ if (g_even_pos > 8)
900
+ {
901
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_G3] + 1, g_odd_pos, &info->odd[1]);
902
+ g_odd_pos += 2;
903
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_B2] + 1, b_odd_pos, &info->odd[1]);
904
+ b_odd_pos += 2;
905
+ }
906
+ }
907
+
908
+ fuji_extend_green(info->linebuf, line_width);
909
+ fuji_extend_blue(info->linebuf, line_width);
910
+
911
+ r_even_pos = 0, r_odd_pos = 1;
912
+ g_even_pos = 0, g_odd_pos = 1;
913
+
914
+ while (g_even_pos < line_width || g_odd_pos < line_width)
915
+ {
916
+ if (g_even_pos < line_width)
917
+ {
918
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_R3] + 1, r_even_pos, &info->even[2]);
919
+ r_even_pos += 2;
920
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_G4] + 1, g_even_pos, &info->even[2]);
921
+ g_even_pos += 2;
922
+ }
923
+ if (g_even_pos > 8)
924
+ {
925
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_R3] + 1, r_odd_pos, &info->odd[2]);
926
+ r_odd_pos += 2;
927
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_G4] + 1, g_odd_pos, &info->odd[2]);
928
+ g_odd_pos += 2;
929
+ }
930
+ }
931
+
932
+ fuji_extend_red(info->linebuf, line_width);
933
+ fuji_extend_green(info->linebuf, line_width);
934
+
935
+ g_even_pos = 0, g_odd_pos = 1;
936
+ b_even_pos = 0, b_odd_pos = 1;
937
+
938
+ while (g_even_pos < line_width || g_odd_pos < line_width)
939
+ {
940
+ if (g_even_pos < line_width)
941
+ {
942
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_G5] + 1, g_even_pos, &info->even[0]);
943
+ g_even_pos += 2;
944
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_B3] + 1, b_even_pos, &info->even[0]);
945
+ b_even_pos += 2;
946
+ }
947
+ if (g_even_pos > 8)
948
+ {
949
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_G5] + 1, g_odd_pos, &info->odd[0]);
950
+ g_odd_pos += 2;
951
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_B3] + 1, b_odd_pos, &info->odd[0]);
952
+ b_odd_pos += 2;
953
+ }
954
+ }
955
+
956
+ fuji_extend_green(info->linebuf, line_width);
957
+ fuji_extend_blue(info->linebuf, line_width);
958
+
959
+ r_even_pos = 0, r_odd_pos = 1;
960
+ g_even_pos = 0, g_odd_pos = 1;
961
+
962
+ while (g_even_pos < line_width || g_odd_pos < line_width)
963
+ {
964
+ if (g_even_pos < line_width)
965
+ {
966
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_R4] + 1, r_even_pos, &info->even[1]);
967
+ r_even_pos += 2;
968
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_G6] + 1, g_even_pos, &info->even[1]);
969
+ g_even_pos += 2;
970
+ }
971
+ if (g_even_pos > 8)
972
+ {
973
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_R4] + 1, r_odd_pos, &info->odd[1]);
974
+ r_odd_pos += 2;
975
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_G6] + 1, g_odd_pos, &info->odd[1]);
976
+ g_odd_pos += 2;
977
+ }
978
+ }
979
+
980
+ fuji_extend_red(info->linebuf, line_width);
981
+ fuji_extend_green(info->linebuf, line_width);
982
+
983
+ g_even_pos = 0, g_odd_pos = 1;
984
+ b_even_pos = 0, b_odd_pos = 1;
985
+
986
+ while (g_even_pos < line_width || g_odd_pos < line_width)
987
+ {
988
+ if (g_even_pos < line_width)
989
+ {
990
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_G7] + 1, g_even_pos, &info->even[2]);
991
+ g_even_pos += 2;
992
+ errcnt += fuji_decode_sample_even(info, params, info->linebuf[_B4] + 1, b_even_pos, &info->even[2]);
993
+ b_even_pos += 2;
994
+ }
995
+ if (g_even_pos > 8)
996
+ {
997
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_G7] + 1, g_odd_pos, &info->odd[2]);
998
+ g_odd_pos += 2;
999
+ errcnt += fuji_decode_sample_odd(info, params, info->linebuf[_B4] + 1, b_odd_pos, &info->odd[2]);
1000
+ b_odd_pos += 2;
1001
+ }
1002
+ }
1003
+
1004
+ fuji_extend_green(info->linebuf, line_width);
1005
+ fuji_extend_blue(info->linebuf, line_width);
1006
+
1007
+ if (errcnt)
1008
+ derror();
1009
+ }
1010
+
1011
+ void LibRaw::fuji_decode_strip(fuji_compressed_params *params, int cur_block, INT64 raw_offset, unsigned dsize,
1012
+ uchar *q_bases)
1013
+ {
1014
+ int cur_block_width, cur_line;
1015
+ unsigned line_size;
1016
+ fuji_compressed_block info;
1017
+ fuji_compressed_params *info_common = params;
1018
+
1019
+ if (!libraw_internal_data.unpacker_data.fuji_lossless)
1020
+ {
1021
+ int buf_size = sizeof(fuji_compressed_params) + (2 << libraw_internal_data.unpacker_data.fuji_bits);
1022
+
1023
+ info_common = (fuji_compressed_params *)malloc(buf_size);
1024
+ memcpy(info_common, params, sizeof(fuji_compressed_params));
1025
+ info_common->qt[0].q_table = (int8_t *)(info_common + 1);
1026
+ info_common->qt[0].q_base = -1;
1027
+ }
1028
+ init_fuji_block(&info, info_common, raw_offset, dsize);
1029
+ line_size = sizeof(ushort) * (info_common->line_width + 2);
1030
+
1031
+ cur_block_width = libraw_internal_data.unpacker_data.fuji_block_width;
1032
+ if (cur_block + 1 == libraw_internal_data.unpacker_data.fuji_total_blocks)
1033
+ {
1034
+ cur_block_width = imgdata.sizes.raw_width - (libraw_internal_data.unpacker_data.fuji_block_width * cur_block);
1035
+ /* Old code, may get incorrect results on GFX50, but luckily large optical
1036
+ black cur_block_width = imgdata.sizes.raw_width %
1037
+ libraw_internal_data.unpacker_data.fuji_block_width;
1038
+ */
1039
+ }
1040
+
1041
+ struct i_pair
1042
+ {
1043
+ int a, b;
1044
+ };
1045
+ const i_pair mtable[6] = {{_R0, _R3}, {_R1, _R4}, {_G0, _G6}, {_G1, _G7}, {_B0, _B3}, {_B1, _B4}},
1046
+ ztable[3] = {{_R2, 3}, {_G2, 6}, {_B2, 3}};
1047
+ for (cur_line = 0; cur_line < libraw_internal_data.unpacker_data.fuji_total_lines; cur_line++)
1048
+ {
1049
+ // init grads and main qtable
1050
+ if (!libraw_internal_data.unpacker_data.fuji_lossless)
1051
+ {
1052
+ int q_base = q_bases ? q_bases[cur_line] : 0;
1053
+ if (!cur_line || q_base != info_common->qt[0].q_base)
1054
+ {
1055
+ init_main_qtable(info_common, q_bases[cur_line]);
1056
+ init_main_grads(info_common, &info);
1057
+ }
1058
+ }
1059
+
1060
+ if (libraw_internal_data.unpacker_data.fuji_raw_type == 16)
1061
+ xtrans_decode_block(&info, info_common, cur_line);
1062
+ else
1063
+ fuji_bayer_decode_block(&info, info_common, cur_line);
1064
+
1065
+ // copy data from line buffers and advance
1066
+ for (int i = 0; i < 6; i++)
1067
+ memcpy(info.linebuf[mtable[i].a], info.linebuf[mtable[i].b], line_size);
1068
+
1069
+ if (libraw_internal_data.unpacker_data.fuji_raw_type == 16)
1070
+ copy_line_to_xtrans(&info, cur_line, cur_block, cur_block_width);
1071
+ else
1072
+ copy_line_to_bayer(&info, cur_line, cur_block, cur_block_width);
1073
+
1074
+ for (int i = 0; i < 3; i++)
1075
+ {
1076
+ memset(info.linebuf[ztable[i].a], 0, ztable[i].b * line_size);
1077
+ info.linebuf[ztable[i].a][0] = info.linebuf[ztable[i].a - 1][1];
1078
+ info.linebuf[ztable[i].a][info_common->line_width + 1] = info.linebuf[ztable[i].a - 1][info_common->line_width];
1079
+ }
1080
+ }
1081
+
1082
+ // release data
1083
+ if (!libraw_internal_data.unpacker_data.fuji_lossless)
1084
+ free(info_common);
1085
+ free(info.linealloc);
1086
+ free(info.cur_buf);
1087
+ }
1088
+
1089
+ void LibRaw::fuji_compressed_load_raw()
1090
+ {
1091
+ fuji_compressed_params common_info;
1092
+ int cur_block;
1093
+ unsigned *block_sizes;
1094
+ uchar *q_bases = 0;
1095
+ INT64 raw_offset, *raw_block_offsets;
1096
+
1097
+ init_fuji_compr(&common_info);
1098
+
1099
+ // read block sizes
1100
+ block_sizes = (unsigned *)malloc(sizeof(unsigned) * libraw_internal_data.unpacker_data.fuji_total_blocks);
1101
+ raw_block_offsets = (INT64 *)malloc(sizeof(INT64) * libraw_internal_data.unpacker_data.fuji_total_blocks);
1102
+
1103
+ libraw_internal_data.internal_data.input->seek(libraw_internal_data.unpacker_data.data_offset, SEEK_SET);
1104
+ int sizesToRead = sizeof(unsigned) * libraw_internal_data.unpacker_data.fuji_total_blocks;
1105
+ if (libraw_internal_data.internal_data.input->read(block_sizes, 1, sizesToRead) != sizesToRead)
1106
+ {
1107
+ free(block_sizes);
1108
+ free(raw_block_offsets);
1109
+ throw LIBRAW_EXCEPTION_IO_EOF;
1110
+ }
1111
+
1112
+ raw_offset = ((sizeof(unsigned) * libraw_internal_data.unpacker_data.fuji_total_blocks) + 0xF) & ~0xF;
1113
+
1114
+ // read q bases for lossy
1115
+ if (!libraw_internal_data.unpacker_data.fuji_lossless)
1116
+ {
1117
+ int total_q_bases = libraw_internal_data.unpacker_data.fuji_total_blocks *
1118
+ ((libraw_internal_data.unpacker_data.fuji_total_lines + 0xF) & ~0xF);
1119
+ q_bases = (uchar *)malloc(total_q_bases);
1120
+ libraw_internal_data.internal_data.input->seek(raw_offset + libraw_internal_data.unpacker_data.data_offset,
1121
+ SEEK_SET);
1122
+ libraw_internal_data.internal_data.input->read(q_bases, 1, total_q_bases);
1123
+ raw_offset += total_q_bases;
1124
+ }
1125
+
1126
+ raw_offset += libraw_internal_data.unpacker_data.data_offset;
1127
+
1128
+ // calculating raw block offsets
1129
+ raw_block_offsets[0] = raw_offset;
1130
+ for (cur_block = 0; cur_block < libraw_internal_data.unpacker_data.fuji_total_blocks; cur_block++)
1131
+ {
1132
+ unsigned bsize = sgetn(4, (uchar *)(block_sizes + cur_block));
1133
+ block_sizes[cur_block] = bsize;
1134
+ }
1135
+
1136
+ for (cur_block = 1; cur_block < libraw_internal_data.unpacker_data.fuji_total_blocks; cur_block++)
1137
+ raw_block_offsets[cur_block] = raw_block_offsets[cur_block - 1] + block_sizes[cur_block - 1];
1138
+
1139
+ fuji_decode_loop(&common_info, libraw_internal_data.unpacker_data.fuji_total_blocks, raw_block_offsets, block_sizes,
1140
+ q_bases);
1141
+
1142
+ free(q_bases);
1143
+ free(block_sizes);
1144
+ free(raw_block_offsets);
1145
+ free(common_info.buf);
1146
+ }
1147
+
1148
+ void LibRaw::fuji_decode_loop(fuji_compressed_params *common_info, int count, INT64 *raw_block_offsets,
1149
+ unsigned *block_sizes, uchar *q_bases)
1150
+ {
1151
+ int cur_block;
1152
+ const int lineStep = (libraw_internal_data.unpacker_data.fuji_total_lines + 0xF) & ~0xF;
1153
+ #ifdef LIBRAW_USE_OPENMP
1154
+ #pragma omp parallel for private(cur_block)
1155
+ #endif
1156
+ for (cur_block = 0; cur_block < count; cur_block++)
1157
+ {
1158
+ fuji_decode_strip(common_info, cur_block, raw_block_offsets[cur_block], block_sizes[cur_block],
1159
+ q_bases ? q_bases + cur_block * lineStep : 0);
1160
+ }
1161
+ }
1162
+
1163
+ void LibRaw::parse_fuji_compressed_header()
1164
+ {
1165
+ unsigned signature, lossless, h_raw_type, h_raw_bits, h_raw_height, h_raw_rounded_width, h_raw_width, h_block_size,
1166
+ h_blocks_in_row, h_total_lines;
1167
+
1168
+ uchar header[16];
1169
+
1170
+ libraw_internal_data.internal_data.input->seek(libraw_internal_data.unpacker_data.data_offset, SEEK_SET);
1171
+ if (libraw_internal_data.internal_data.input->read(header, 1, sizeof(header)) != sizeof(header))
1172
+ return;
1173
+
1174
+ // read all header
1175
+ signature = sgetn(2, header);
1176
+ lossless = header[2];
1177
+ h_raw_type = header[3];
1178
+ h_raw_bits = header[4];
1179
+ h_raw_height = sgetn(2, header + 5);
1180
+ h_raw_rounded_width = sgetn(2, header + 7);
1181
+ h_raw_width = sgetn(2, header + 9);
1182
+ h_block_size = sgetn(2, header + 11);
1183
+ h_blocks_in_row = header[13];
1184
+ h_total_lines = sgetn(2, header + 14);
1185
+
1186
+ // general validation
1187
+ if (signature != 0x4953 || lossless > 1 || h_raw_height > 0x4002 || h_raw_height < 6 || h_raw_height % 6 ||
1188
+ h_block_size < 1 || h_raw_width > 0x4200 || h_raw_width < 0x300 || h_raw_width % 24 ||
1189
+ h_raw_rounded_width > 0x4200 || h_raw_rounded_width < h_block_size || h_raw_rounded_width % h_block_size ||
1190
+ h_raw_rounded_width - h_raw_width >= h_block_size || h_block_size != 0x300 || h_blocks_in_row > 0x10 ||
1191
+ h_blocks_in_row == 0 || h_blocks_in_row != h_raw_rounded_width / h_block_size || h_total_lines > 0xAAB ||
1192
+ h_total_lines == 0 || h_total_lines != h_raw_height / 6 ||
1193
+ (h_raw_bits != 12 && h_raw_bits != 14 && h_raw_bits != 16) || (h_raw_type != 16 && h_raw_type != 0))
1194
+ return;
1195
+
1196
+ // modify data
1197
+ libraw_internal_data.unpacker_data.fuji_total_lines = h_total_lines;
1198
+ libraw_internal_data.unpacker_data.fuji_total_blocks = h_blocks_in_row;
1199
+ libraw_internal_data.unpacker_data.fuji_block_width = h_block_size;
1200
+ libraw_internal_data.unpacker_data.fuji_bits = h_raw_bits;
1201
+ libraw_internal_data.unpacker_data.fuji_raw_type = h_raw_type;
1202
+ libraw_internal_data.unpacker_data.fuji_lossless = lossless;
1203
+ imgdata.sizes.raw_width = h_raw_width;
1204
+ imgdata.sizes.raw_height = h_raw_height;
1205
+ libraw_internal_data.unpacker_data.data_offset += 16;
1206
+ load_raw = &LibRaw::fuji_compressed_load_raw;
1207
+ }
1208
+
1209
+ #undef _abs
1210
+ #undef _min