librawspeed-full 1.0.129

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 (541) hide show
  1. package/CHANGELOG.md +1138 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1414 -0
  4. package/binding.gyp +55 -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 +2135 -0
  20. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.am +140 -0
  21. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.devel.nopp +230 -0
  22. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.devel.noppr2i +227 -0
  23. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.dist +501 -0
  24. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.in +2135 -0
  25. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.mingw +297 -0
  26. package/deps/LibRaw-Source/LibRaw-0.21.4/Makefile.msvc +628 -0
  27. package/deps/LibRaw-Source/LibRaw-0.21.4/README.DNGSDK.txt +43 -0
  28. package/deps/LibRaw-Source/LibRaw-0.21.4/README.GoPro.txt +112 -0
  29. package/deps/LibRaw-Source/LibRaw-0.21.4/README.RawSpeed.txt +62 -0
  30. package/deps/LibRaw-Source/LibRaw-0.21.4/README.cmake +9 -0
  31. package/deps/LibRaw-Source/LibRaw-0.21.4/README.demosaic-packs +17 -0
  32. package/deps/LibRaw-Source/LibRaw-0.21.4/README.md +106 -0
  33. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.cpucount-unix.patch +15 -0
  34. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.qmake-pro-files.patch +84 -0
  35. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.samsung-decoder.patch +39 -0
  36. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.uncompressed-color-dng.patch +13 -0
  37. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed.win32-dll.patch +186 -0
  38. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed/rawspeed_xmldata.cpp +4115 -0
  39. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/README.md +69 -0
  40. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/patches/01.CameraMeta-extensibility.patch +13 -0
  41. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/patches/02.Makernotes-processing.patch +36 -0
  42. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/patches/03.remove-limits-and-logging.patch +245 -0
  43. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/patches/04.clang-cl-compatibility.patch +37 -0
  44. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi.cpp +251 -0
  45. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi.h +83 -0
  46. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rawspeed3_capi_test.cpp +71 -0
  47. package/deps/LibRaw-Source/LibRaw-0.21.4/RawSpeed3/rawspeed3_c_api/rsxml2c.sh +5 -0
  48. package/deps/LibRaw-Source/LibRaw-0.21.4/aclocal.m4 +1674 -0
  49. package/deps/LibRaw-Source/LibRaw-0.21.4/bin/.dirstamp +0 -0
  50. package/deps/LibRaw-Source/LibRaw-0.21.4/bin/.keep_me +2 -0
  51. package/deps/LibRaw-Source/LibRaw-0.21.4/bin/4channels +0 -0
  52. package/deps/LibRaw-Source/LibRaw-0.21.4/bin/dcraw_emu +0 -0
  53. package/deps/LibRaw-Source/LibRaw-0.21.4/bin/mem_image +0 -0
  54. package/deps/LibRaw-Source/LibRaw-0.21.4/bin/multirender_test +0 -0
  55. package/deps/LibRaw-Source/LibRaw-0.21.4/bin/postprocessing_benchmark +0 -0
  56. package/deps/LibRaw-Source/LibRaw-0.21.4/bin/raw-identify +0 -0
  57. package/deps/LibRaw-Source/LibRaw-0.21.4/bin/rawtextdump +0 -0
  58. package/deps/LibRaw-Source/LibRaw-0.21.4/bin/simple_dcraw +0 -0
  59. package/deps/LibRaw-Source/LibRaw-0.21.4/bin/unprocessed_raw +0 -0
  60. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/include/libraw/libraw.h +534 -0
  61. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/include/libraw/libraw_alloc.h +148 -0
  62. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/include/libraw/libraw_const.h +814 -0
  63. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/include/libraw/libraw_datastream.h +410 -0
  64. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/include/libraw/libraw_internal.h +341 -0
  65. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/include/libraw/libraw_types.h +1175 -0
  66. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/include/libraw/libraw_version.h +63 -0
  67. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/lib/libraw.a +0 -0
  68. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/lib/libraw.la +41 -0
  69. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/lib/libraw_r.a +0 -0
  70. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/lib/libraw_r.la +41 -0
  71. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/lib/pkgconfig/libraw.pc +12 -0
  72. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/lib/pkgconfig/libraw_r.pc +12 -0
  73. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/share/doc/libraw/COPYRIGHT +27 -0
  74. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/share/doc/libraw/Changelog.txt +2802 -0
  75. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/share/doc/libraw/LICENSE.CDDL +340 -0
  76. package/deps/LibRaw-Source/LibRaw-0.21.4/build/darwin-arm64/share/doc/libraw/LICENSE.LGPL +458 -0
  77. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/4channels.pro +5 -0
  78. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/4channels.vcxproj +145 -0
  79. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/4channels.vcxproj.filters +18 -0
  80. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_emu.pro +6 -0
  81. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_emu.vcxproj +145 -0
  82. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_emu.vcxproj.filters +18 -0
  83. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_half.pro +6 -0
  84. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_half.vcxproj +145 -0
  85. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/dcraw_half.vcxproj.filters +18 -0
  86. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/half_mt.pro +10 -0
  87. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw-common-lib.pro +28 -0
  88. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw-common.pro +8 -0
  89. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw.pro +70 -0
  90. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw.vcxproj +234 -0
  91. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/libraw.vcxproj.filters +295 -0
  92. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/mem_image.pro +6 -0
  93. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/mem_image.vcxproj +145 -0
  94. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/mem_image.vcxproj.filters +18 -0
  95. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/multirender_test.pro +6 -0
  96. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/multirender_test.vcxproj +145 -0
  97. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/multirender_test.vcxproj.filters +18 -0
  98. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/openbayer_sample.pro +6 -0
  99. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/openbayer_sample.vcxproj +145 -0
  100. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/openbayer_sample.vcxproj.filters +18 -0
  101. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.pro +4 -0
  102. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.vcxproj +145 -0
  103. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/postprocessing_benchmark.vcxproj.filters +18 -0
  104. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/raw-identify.pro +6 -0
  105. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/raw-identify.vcxproj +145 -0
  106. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/raw-identify.vcxproj.filters +18 -0
  107. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/rawtextdump.pro +6 -0
  108. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/rawtextdump.vcxproj +145 -0
  109. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/rawtextdump.vcxproj.filters +18 -0
  110. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/simple_dcraw.pro +6 -0
  111. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/simple_dcraw.vcxproj +145 -0
  112. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/simple_dcraw.vcxproj.filters +18 -0
  113. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/unprocessed_raw.pro +6 -0
  114. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/unprocessed_raw.vcxproj +145 -0
  115. package/deps/LibRaw-Source/LibRaw-0.21.4/buildfiles/unprocessed_raw.vcxproj.filters +18 -0
  116. package/deps/LibRaw-Source/LibRaw-0.21.4/compile +347 -0
  117. package/deps/LibRaw-Source/LibRaw-0.21.4/config.guess +1433 -0
  118. package/deps/LibRaw-Source/LibRaw-0.21.4/config.log +930 -0
  119. package/deps/LibRaw-Source/LibRaw-0.21.4/config.status +2090 -0
  120. package/deps/LibRaw-Source/LibRaw-0.21.4/config.sub +1804 -0
  121. package/deps/LibRaw-Source/LibRaw-0.21.4/configure +22084 -0
  122. package/deps/LibRaw-Source/LibRaw-0.21.4/configure.ac +153 -0
  123. package/deps/LibRaw-Source/LibRaw-0.21.4/depcomp +791 -0
  124. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-C.html +187 -0
  125. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-CXX.html +881 -0
  126. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-datastruct.html +1341 -0
  127. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-notes.html +305 -0
  128. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/API-overview.html +66 -0
  129. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/Install-LibRaw.html +124 -0
  130. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/Samples-LibRaw.html +213 -0
  131. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/Why-LibRaw.html +65 -0
  132. package/deps/LibRaw-Source/LibRaw-0.21.4/doc/index.html +38 -0
  133. package/deps/LibRaw-Source/LibRaw-0.21.4/install-sh +501 -0
  134. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/dcraw_defs.h +66 -0
  135. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/dcraw_fileio_defs.h +25 -0
  136. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/defines.h +193 -0
  137. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/dmp_include.h +27 -0
  138. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/libraw_cameraids.h +320 -0
  139. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/libraw_cxx_defs.h +133 -0
  140. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/libraw_internal_funcs.h +412 -0
  141. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/var_defines.h +215 -0
  142. package/deps/LibRaw-Source/LibRaw-0.21.4/internal/x3f_tools.h +539 -0
  143. package/deps/LibRaw-Source/LibRaw-0.21.4/lib/.dirstamp +0 -0
  144. package/deps/LibRaw-Source/LibRaw-0.21.4/lib/.libs/libraw.a +0 -0
  145. package/deps/LibRaw-Source/LibRaw-0.21.4/lib/.libs/libraw.lai +41 -0
  146. package/deps/LibRaw-Source/LibRaw-0.21.4/lib/.libs/libraw_r.a +0 -0
  147. package/deps/LibRaw-Source/LibRaw-0.21.4/lib/.libs/libraw_r.lai +41 -0
  148. package/deps/LibRaw-Source/LibRaw-0.21.4/lib/libraw.la +41 -0
  149. package/deps/LibRaw-Source/LibRaw-0.21.4/lib/libraw_r.la +41 -0
  150. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw.h +534 -0
  151. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_alloc.h +148 -0
  152. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_const.h +814 -0
  153. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_datastream.h +410 -0
  154. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_internal.h +341 -0
  155. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_types.h +1175 -0
  156. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw/libraw_version.h +63 -0
  157. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw.pc +12 -0
  158. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw.pc.in +12 -0
  159. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw_r.pc +12 -0
  160. package/deps/LibRaw-Source/LibRaw-0.21.4/libraw_r.pc.in +12 -0
  161. package/deps/LibRaw-Source/LibRaw-0.21.4/libtool +12190 -0
  162. package/deps/LibRaw-Source/LibRaw-0.21.4/ltmain.sh +11524 -0
  163. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/ax_openmp.m4 +99 -0
  164. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/libtool.m4 +8488 -0
  165. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/ltoptions.m4 +467 -0
  166. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/ltsugar.m4 +124 -0
  167. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/ltversion.m4 +24 -0
  168. package/deps/LibRaw-Source/LibRaw-0.21.4/m4/lt~obsolete.m4 +99 -0
  169. package/deps/LibRaw-Source/LibRaw-0.21.4/missing +215 -0
  170. package/deps/LibRaw-Source/LibRaw-0.21.4/object/.keep_me +0 -0
  171. package/deps/LibRaw-Source/LibRaw-0.21.4/rsxml2c.sh +6 -0
  172. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_4channels-4channels.Po +0 -0
  173. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_dcraw_emu-dcraw_emu.Po +0 -0
  174. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_dcraw_half-dcraw_half.Po +0 -0
  175. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_half_mt-half_mt.Po +0 -0
  176. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_mem_image-mem_image_sample.Po +0 -0
  177. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_multirender_test-multirender_test.Po +0 -0
  178. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_postprocessing_benchmark-postprocessing_benchmark.Po +0 -0
  179. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_raw_identify-raw-identify.Po +0 -0
  180. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_rawtextdump-rawtextdump.Po +0 -0
  181. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_simple_dcraw-simple_dcraw.Po +0 -0
  182. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.deps/bin_unprocessed_raw-unprocessed_raw.Po +0 -0
  183. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/.dirstamp +0 -0
  184. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/4channels.cpp +174 -0
  185. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/Makefile +2 -0
  186. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/dcraw_emu.cpp +670 -0
  187. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/dcraw_half.c +78 -0
  188. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/half_mt.c +178 -0
  189. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/half_mt_win32.c +212 -0
  190. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/mem_image_sample.cpp +282 -0
  191. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/multirender_test.cpp +107 -0
  192. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/openbayer_sample.cpp +65 -0
  193. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/postprocessing_benchmark.cpp +223 -0
  194. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/raw-identify.cpp +743 -0
  195. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/rawtextdump.cpp +144 -0
  196. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/simple_dcraw.cpp +217 -0
  197. package/deps/LibRaw-Source/LibRaw-0.21.4/samples/unprocessed_raw.cpp +319 -0
  198. package/deps/LibRaw-Source/LibRaw-0.21.4/shlib-version.sh +11 -0
  199. package/deps/LibRaw-Source/LibRaw-0.21.4/src/.deps/.dirstamp +0 -0
  200. package/deps/LibRaw-Source/LibRaw-0.21.4/src/.deps/libraw_c_api.Plo +1597 -0
  201. package/deps/LibRaw-Source/LibRaw-0.21.4/src/.deps/libraw_datastream.Plo +1604 -0
  202. package/deps/LibRaw-Source/LibRaw-0.21.4/src/.dirstamp +0 -0
  203. package/deps/LibRaw-Source/LibRaw-0.21.4/src/Makefile +2 -0
  204. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/.dirstamp +0 -0
  205. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/canon_600.Plo +1656 -0
  206. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/crx.Plo +1659 -0
  207. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/decoders_dcraw.Plo +1657 -0
  208. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/decoders_libraw.Plo +1659 -0
  209. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/decoders_libraw_dcrdefs.Plo +1657 -0
  210. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/dng.Plo +1656 -0
  211. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/fp_dng.Plo +1659 -0
  212. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/fuji_compressed.Plo +1659 -0
  213. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/generic.Plo +1656 -0
  214. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/kodak_decoders.Plo +1656 -0
  215. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/load_mfbacks.Plo +1656 -0
  216. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/smal.Plo +1656 -0
  217. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/unpack.Plo +1661 -0
  218. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.deps/unpack_thumb.Plo +1659 -0
  219. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/.dirstamp +0 -0
  220. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/canon_600.cpp +225 -0
  221. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/canon_600.lo +12 -0
  222. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/canon_600.o +0 -0
  223. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/crx.cpp +2781 -0
  224. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/crx.lo +12 -0
  225. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/crx.o +0 -0
  226. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_dcraw.cpp +1816 -0
  227. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_dcraw.lo +12 -0
  228. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_dcraw.o +0 -0
  229. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_libraw.cpp +873 -0
  230. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_libraw.lo +12 -0
  231. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_libraw.o +0 -0
  232. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_libraw_dcrdefs.cpp +411 -0
  233. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_libraw_dcrdefs.lo +12 -0
  234. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/decoders_libraw_dcrdefs.o +0 -0
  235. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/dng.cpp +284 -0
  236. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/dng.lo +12 -0
  237. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/dng.o +0 -0
  238. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/fp_dng.cpp +689 -0
  239. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/fp_dng.lo +12 -0
  240. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/fp_dng.o +0 -0
  241. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/fuji_compressed.cpp +1210 -0
  242. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/fuji_compressed.lo +12 -0
  243. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/fuji_compressed.o +0 -0
  244. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/generic.cpp +101 -0
  245. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/generic.lo +12 -0
  246. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/generic.o +0 -0
  247. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/kodak_decoders.cpp +524 -0
  248. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/kodak_decoders.lo +12 -0
  249. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/kodak_decoders.o +0 -0
  250. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/load_mfbacks.cpp +936 -0
  251. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/load_mfbacks.lo +12 -0
  252. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/load_mfbacks.o +0 -0
  253. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/smal.cpp +181 -0
  254. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/smal.lo +12 -0
  255. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/smal.o +0 -0
  256. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/unpack.cpp +508 -0
  257. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/unpack.lo +12 -0
  258. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/unpack.o +0 -0
  259. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/unpack_thumb.cpp +405 -0
  260. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/unpack_thumb.lo +12 -0
  261. package/deps/LibRaw-Source/LibRaw-0.21.4/src/decoders/unpack_thumb.o +0 -0
  262. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/.deps/.dirstamp +0 -0
  263. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/.deps/aahd_demosaic.Plo +1653 -0
  264. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/.deps/ahd_demosaic.Plo +1656 -0
  265. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/.deps/dcb_demosaic.Plo +1656 -0
  266. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/.deps/dht_demosaic.Plo +1653 -0
  267. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/.deps/misc_demosaic.Plo +1656 -0
  268. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/.deps/xtrans_demosaic.Plo +1656 -0
  269. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/.dirstamp +0 -0
  270. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/aahd_demosaic.cpp +781 -0
  271. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/aahd_demosaic.lo +12 -0
  272. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/aahd_demosaic.o +0 -0
  273. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/ahd_demosaic.cpp +355 -0
  274. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/ahd_demosaic.lo +12 -0
  275. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/ahd_demosaic.o +0 -0
  276. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/dcb_demosaic.cpp +900 -0
  277. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/dcb_demosaic.lo +12 -0
  278. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/dcb_demosaic.o +0 -0
  279. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/dht_demosaic.cpp +1033 -0
  280. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/dht_demosaic.lo +12 -0
  281. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/dht_demosaic.o +0 -0
  282. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/misc_demosaic.cpp +420 -0
  283. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/misc_demosaic.lo +12 -0
  284. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/misc_demosaic.o +0 -0
  285. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/xtrans_demosaic.cpp +434 -0
  286. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/xtrans_demosaic.lo +12 -0
  287. package/deps/LibRaw-Source/LibRaw-0.21.4/src/demosaic/xtrans_demosaic.o +0 -0
  288. package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/.deps/.dirstamp +0 -0
  289. package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/.deps/dngsdk_glue.Plo +1659 -0
  290. package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/.deps/rawspeed_glue.Plo +1659 -0
  291. package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/.dirstamp +0 -0
  292. package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/dngsdk_glue.cpp +416 -0
  293. package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/dngsdk_glue.lo +12 -0
  294. package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/dngsdk_glue.o +0 -0
  295. package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/rawspeed_glue.cpp +286 -0
  296. package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/rawspeed_glue.lo +12 -0
  297. package/deps/LibRaw-Source/LibRaw-0.21.4/src/integration/rawspeed_glue.o +0 -0
  298. package/deps/LibRaw-Source/LibRaw-0.21.4/src/libraw_c_api.cpp +457 -0
  299. package/deps/LibRaw-Source/LibRaw-0.21.4/src/libraw_c_api.lo +12 -0
  300. package/deps/LibRaw-Source/LibRaw-0.21.4/src/libraw_c_api.o +0 -0
  301. package/deps/LibRaw-Source/LibRaw-0.21.4/src/libraw_datastream.cpp +1046 -0
  302. package/deps/LibRaw-Source/LibRaw-0.21.4/src/libraw_datastream.lo +12 -0
  303. package/deps/LibRaw-Source/LibRaw-0.21.4/src/libraw_datastream.o +0 -0
  304. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/.dirstamp +0 -0
  305. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/adobepano.Plo +1656 -0
  306. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/canon.Plo +1657 -0
  307. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/ciff.Plo +1656 -0
  308. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/cr3_parser.Plo +1656 -0
  309. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/epson.Plo +1656 -0
  310. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/exif_gps.Plo +1657 -0
  311. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/fuji.Plo +1656 -0
  312. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/hasselblad_model.Plo +1657 -0
  313. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/identify.Plo +1657 -0
  314. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/identify_tools.Plo +1656 -0
  315. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/kodak.Plo +1656 -0
  316. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/leica.Plo +1656 -0
  317. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/makernotes.Plo +1656 -0
  318. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/mediumformat.Plo +1656 -0
  319. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/minolta.Plo +1656 -0
  320. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/misc_parsers.Plo +1656 -0
  321. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/nikon.Plo +1656 -0
  322. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/normalize_model.Plo +1657 -0
  323. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/olympus.Plo +1657 -0
  324. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/p1.Plo +1656 -0
  325. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/pentax.Plo +1657 -0
  326. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/samsung.Plo +1656 -0
  327. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/sony.Plo +1657 -0
  328. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.deps/tiff.Plo +1657 -0
  329. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/.dirstamp +0 -0
  330. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/adobepano.cpp +154 -0
  331. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/adobepano.lo +12 -0
  332. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/adobepano.o +0 -0
  333. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/canon.cpp +1335 -0
  334. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/canon.lo +12 -0
  335. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/canon.o +0 -0
  336. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/ciff.cpp +411 -0
  337. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/ciff.lo +12 -0
  338. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/ciff.o +0 -0
  339. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/cr3_parser.cpp +896 -0
  340. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/cr3_parser.lo +12 -0
  341. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/cr3_parser.o +0 -0
  342. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/epson.cpp +96 -0
  343. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/epson.lo +12 -0
  344. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/epson.o +0 -0
  345. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/exif_gps.cpp +430 -0
  346. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/exif_gps.lo +12 -0
  347. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/exif_gps.o +0 -0
  348. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/fuji.cpp +1427 -0
  349. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/fuji.lo +12 -0
  350. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/fuji.o +0 -0
  351. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/hasselblad_model.cpp +538 -0
  352. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/hasselblad_model.lo +12 -0
  353. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/hasselblad_model.o +0 -0
  354. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/identify.cpp +3167 -0
  355. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/identify.lo +12 -0
  356. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/identify.o +0 -0
  357. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/identify_tools.cpp +140 -0
  358. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/identify_tools.lo +12 -0
  359. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/identify_tools.o +0 -0
  360. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/kodak.cpp +363 -0
  361. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/kodak.lo +12 -0
  362. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/kodak.o +0 -0
  363. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/leica.cpp +375 -0
  364. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/leica.lo +12 -0
  365. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/leica.o +0 -0
  366. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/makernotes.cpp +786 -0
  367. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/makernotes.lo +12 -0
  368. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/makernotes.o +0 -0
  369. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/mediumformat.cpp +521 -0
  370. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/mediumformat.lo +12 -0
  371. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/mediumformat.o +0 -0
  372. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/minolta.cpp +110 -0
  373. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/minolta.lo +12 -0
  374. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/minolta.o +0 -0
  375. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/misc_parsers.cpp +694 -0
  376. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/misc_parsers.lo +12 -0
  377. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/misc_parsers.o +0 -0
  378. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/nikon.cpp +1051 -0
  379. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/nikon.lo +12 -0
  380. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/nikon.o +0 -0
  381. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/normalize_model.cpp +1451 -0
  382. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/normalize_model.lo +12 -0
  383. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/normalize_model.o +0 -0
  384. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/olympus.cpp +685 -0
  385. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/olympus.lo +12 -0
  386. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/olympus.o +0 -0
  387. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/p1.cpp +192 -0
  388. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/p1.lo +12 -0
  389. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/p1.o +0 -0
  390. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/pentax.cpp +675 -0
  391. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/pentax.lo +12 -0
  392. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/pentax.o +0 -0
  393. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/samsung.cpp +182 -0
  394. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/samsung.lo +12 -0
  395. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/samsung.o +0 -0
  396. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/sony.cpp +2320 -0
  397. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/sony.lo +12 -0
  398. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/sony.o +0 -0
  399. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/tiff.cpp +2198 -0
  400. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/tiff.lo +12 -0
  401. package/deps/LibRaw-Source/LibRaw-0.21.4/src/metadata/tiff.o +0 -0
  402. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/.deps/.dirstamp +0 -0
  403. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/.deps/aspect_ratio.Plo +1656 -0
  404. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/.deps/dcraw_process.Plo +1659 -0
  405. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/.deps/mem_image.Plo +1659 -0
  406. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/.deps/postprocessing_aux.Plo +1657 -0
  407. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/.deps/postprocessing_utils.Plo +1660 -0
  408. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/.deps/postprocessing_utils_dcrdefs.Plo +1657 -0
  409. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/.dirstamp +0 -0
  410. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/aspect_ratio.cpp +113 -0
  411. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/aspect_ratio.lo +12 -0
  412. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/aspect_ratio.o +0 -0
  413. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/dcraw_process.cpp +259 -0
  414. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/dcraw_process.lo +12 -0
  415. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/dcraw_process.o +0 -0
  416. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/mem_image.cpp +292 -0
  417. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/mem_image.lo +12 -0
  418. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/mem_image.o +0 -0
  419. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_aux.cpp +413 -0
  420. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_aux.lo +12 -0
  421. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_aux.o +0 -0
  422. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_ph.cpp +31 -0
  423. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_utils.cpp +190 -0
  424. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_utils.lo +12 -0
  425. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_utils.o +0 -0
  426. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_utils_dcrdefs.cpp +308 -0
  427. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_utils_dcrdefs.lo +12 -0
  428. package/deps/LibRaw-Source/LibRaw-0.21.4/src/postprocessing/postprocessing_utils_dcrdefs.o +0 -0
  429. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/.deps/.dirstamp +0 -0
  430. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/.deps/ext_preprocess.Plo +1656 -0
  431. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/.deps/raw2image.Plo +1659 -0
  432. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/.deps/subtract_black.Plo +1659 -0
  433. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/.dirstamp +0 -0
  434. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/ext_preprocess.cpp +127 -0
  435. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/ext_preprocess.lo +12 -0
  436. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/ext_preprocess.o +0 -0
  437. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/preprocessing_ph.cpp +24 -0
  438. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/raw2image.cpp +560 -0
  439. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/raw2image.lo +12 -0
  440. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/raw2image.o +0 -0
  441. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/subtract_black.cpp +91 -0
  442. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/subtract_black.lo +12 -0
  443. package/deps/LibRaw-Source/LibRaw-0.21.4/src/preprocessing/subtract_black.o +0 -0
  444. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/.deps/.dirstamp +0 -0
  445. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/.deps/cameralist.Plo +1659 -0
  446. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/.deps/colorconst.Plo +1659 -0
  447. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/.deps/colordata.Plo +1656 -0
  448. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/.deps/wblists.Plo +1656 -0
  449. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/.dirstamp +0 -0
  450. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/cameralist.cpp +1268 -0
  451. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/cameralist.lo +12 -0
  452. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/cameralist.o +0 -0
  453. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/colorconst.cpp +57 -0
  454. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/colorconst.lo +12 -0
  455. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/colorconst.o +0 -0
  456. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/colordata.cpp +1841 -0
  457. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/colordata.lo +12 -0
  458. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/colordata.o +0 -0
  459. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/wblists.cpp +217 -0
  460. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/wblists.lo +12 -0
  461. package/deps/LibRaw-Source/LibRaw-0.21.4/src/tables/wblists.o +0 -0
  462. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/.dirstamp +0 -0
  463. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/curves.Plo +1656 -0
  464. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/decoder_info.Plo +1659 -0
  465. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/init_close_utils.Plo +1659 -0
  466. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/open.Plo +1661 -0
  467. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/phaseone_processing.Plo +1659 -0
  468. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/read_utils.Plo +1656 -0
  469. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/thumb_utils.Plo +1659 -0
  470. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/utils_dcraw.Plo +1656 -0
  471. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.deps/utils_libraw.Plo +1659 -0
  472. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/.dirstamp +0 -0
  473. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/curves.cpp +154 -0
  474. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/curves.lo +12 -0
  475. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/curves.o +0 -0
  476. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/decoder_info.cpp +413 -0
  477. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/decoder_info.lo +12 -0
  478. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/decoder_info.o +0 -0
  479. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/init_close_utils.cpp +340 -0
  480. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/init_close_utils.lo +12 -0
  481. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/init_close_utils.o +0 -0
  482. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/open.cpp +1269 -0
  483. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/open.lo +12 -0
  484. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/open.o +0 -0
  485. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/phaseone_processing.cpp +101 -0
  486. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/phaseone_processing.lo +12 -0
  487. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/phaseone_processing.o +0 -0
  488. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/read_utils.cpp +176 -0
  489. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/read_utils.lo +12 -0
  490. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/read_utils.o +0 -0
  491. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/thumb_utils.cpp +338 -0
  492. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/thumb_utils.lo +12 -0
  493. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/thumb_utils.o +0 -0
  494. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/utils_dcraw.cpp +330 -0
  495. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/utils_dcraw.lo +12 -0
  496. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/utils_dcraw.o +0 -0
  497. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/utils_libraw.cpp +673 -0
  498. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/utils_libraw.lo +12 -0
  499. package/deps/LibRaw-Source/LibRaw-0.21.4/src/utils/utils_libraw.o +0 -0
  500. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/.deps/.dirstamp +0 -0
  501. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/.deps/apply_profile.Plo +1656 -0
  502. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/.deps/file_write.Plo +1656 -0
  503. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/.deps/tiff_writer.Plo +1659 -0
  504. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/.dirstamp +0 -0
  505. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/apply_profile.cpp +76 -0
  506. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/apply_profile.lo +12 -0
  507. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/apply_profile.o +0 -0
  508. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/file_write.cpp +338 -0
  509. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/file_write.lo +12 -0
  510. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/file_write.o +0 -0
  511. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/tiff_writer.cpp +73 -0
  512. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/tiff_writer.lo +12 -0
  513. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/tiff_writer.o +0 -0
  514. package/deps/LibRaw-Source/LibRaw-0.21.4/src/write/write_ph.cpp +39 -0
  515. package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/.deps/.dirstamp +0 -0
  516. package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/.deps/x3f_parse_process.Plo +1 -0
  517. package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/.deps/x3f_utils_patched.Plo +1 -0
  518. package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/.dirstamp +0 -0
  519. package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/x3f_parse_process.cpp +708 -0
  520. package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/x3f_parse_process.lo +12 -0
  521. package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/x3f_parse_process.o +0 -0
  522. package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/x3f_utils_patched.cpp +2119 -0
  523. package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/x3f_utils_patched.lo +12 -0
  524. package/deps/LibRaw-Source/LibRaw-0.21.4/src/x3f/x3f_utils_patched.o +0 -0
  525. package/deps/LibRaw-Source/LibRaw-0.21.4/version.sh +16 -0
  526. package/lib/index.d.ts +671 -0
  527. package/lib/index.js +2292 -0
  528. package/package.json +134 -0
  529. package/prebuilds/darwin-arm64/librawspeed-full.node +0 -0
  530. package/scripts/build-libraw.sh +303 -0
  531. package/scripts/download-dependencies.sh +31 -0
  532. package/scripts/download-libraw.sh +30 -0
  533. package/scripts/generate-docs.js +590 -0
  534. package/scripts/merge-prebuilds.sh +40 -0
  535. package/scripts/prepare-libraw.js +132 -0
  536. package/scripts/publish.sh +84 -0
  537. package/scripts/setup-dev-env.sh +112 -0
  538. package/src/addon.cpp +8 -0
  539. package/src/libraw_wrapper.cpp +1370 -0
  540. package/src/libraw_wrapper.h +114 -0
  541. package/types/index.d.ts +152 -0
@@ -0,0 +1,1370 @@
1
+ #include "libraw_wrapper.h"
2
+ #include <iostream>
3
+ #include <sstream>
4
+ #include <vector>
5
+
6
+ Napi::FunctionReference LibRawWrapper::constructor;
7
+
8
+ Napi::Object LibRawWrapper::Init(Napi::Env env, Napi::Object exports)
9
+ {
10
+ Napi::HandleScope scope(env);
11
+
12
+ Napi::Function func = DefineClass(env, "LibRawWrapper", {// 文件操作
13
+ InstanceMethod("loadFile", &LibRawWrapper::LoadFile), InstanceMethod("loadBuffer", &LibRawWrapper::LoadBuffer), InstanceMethod("close", &LibRawWrapper::Close),
14
+
15
+ // 错误处理
16
+ InstanceMethod("getLastError", &LibRawWrapper::GetLastError), InstanceMethod("strerror", &LibRawWrapper::Strerror),
17
+
18
+ // 元数据和信息
19
+ InstanceMethod("getMetadata", &LibRawWrapper::GetMetadata), InstanceMethod("getImageSize", &LibRawWrapper::GetImageSize), InstanceMethod("getAdvancedMetadata", &LibRawWrapper::GetAdvancedMetadata), InstanceMethod("getLensInfo", &LibRawWrapper::GetLensInfo), InstanceMethod("getColorInfo", &LibRawWrapper::GetColorInfo),
20
+
21
+ // 图像处理
22
+ InstanceMethod("unpackThumbnail", &LibRawWrapper::UnpackThumbnail), InstanceMethod("processImage", &LibRawWrapper::ProcessImage), InstanceMethod("subtractBlack", &LibRawWrapper::SubtractBlack), InstanceMethod("raw2Image", &LibRawWrapper::Raw2Image), InstanceMethod("adjustMaximum", &LibRawWrapper::AdjustMaximum),
23
+
24
+ // 内存图像创建
25
+ InstanceMethod("createMemoryImage", &LibRawWrapper::CreateMemoryImage), InstanceMethod("createMemoryThumbnail", &LibRawWrapper::CreateMemoryThumbnail),
26
+
27
+ // 文件写入器
28
+ InstanceMethod("writePPM", &LibRawWrapper::WritePPM), InstanceMethod("writeTIFF", &LibRawWrapper::WriteTIFF), InstanceMethod("writeThumbnail", &LibRawWrapper::WriteThumbnail),
29
+
30
+ // 配置和设置
31
+ InstanceMethod("setOutputParams", &LibRawWrapper::SetOutputParams), InstanceMethod("getOutputParams", &LibRawWrapper::GetOutputParams),
32
+
33
+ // 实用函数
34
+ InstanceMethod("isFloatingPoint", &LibRawWrapper::IsFloatingPoint), InstanceMethod("isFujiRotated", &LibRawWrapper::IsFujiRotated), InstanceMethod("isSRAW", &LibRawWrapper::IsSRAW), InstanceMethod("isJPEGThumb", &LibRawWrapper::IsJPEGThumb), InstanceMethod("errorCount", &LibRawWrapper::ErrorCount),
35
+
36
+ // 扩展实用函数
37
+ InstanceMethod("isNikonSRAW", &LibRawWrapper::IsNikonSRAW), InstanceMethod("isCoolscanNEF", &LibRawWrapper::IsCoolscanNEF), InstanceMethod("haveFPData", &LibRawWrapper::HaveFPData), InstanceMethod("srawMidpoint", &LibRawWrapper::SrawMidpoint), InstanceMethod("thumbOK", &LibRawWrapper::ThumbOK), InstanceMethod("unpackFunctionName", &LibRawWrapper::UnpackFunctionName), InstanceMethod("getDecoderInfo", &LibRawWrapper::GetDecoderInfo),
38
+
39
+ // 高级处理
40
+ InstanceMethod("unpack", &LibRawWrapper::Unpack), InstanceMethod("raw2ImageEx", &LibRawWrapper::Raw2ImageEx), InstanceMethod("adjustSizesInfoOnly", &LibRawWrapper::AdjustSizesInfoOnly), InstanceMethod("freeImage", &LibRawWrapper::FreeImage), InstanceMethod("convertFloatToInt", &LibRawWrapper::ConvertFloatToInt),
41
+
42
+ // 扩展内存操作
43
+ InstanceMethod("getMemImageFormat", &LibRawWrapper::GetMemImageFormat), InstanceMethod("copyMemImage", &LibRawWrapper::CopyMemImage),
44
+
45
+ // 颜色操作
46
+ InstanceMethod("getColorAt", &LibRawWrapper::GetColorAt), InstanceMethod("getWhitepointPhysics", &LibRawWrapper::GetWhitepointPhysics),
47
+
48
+ // 取消支持
49
+ InstanceMethod("setCancelFlag", &LibRawWrapper::SetCancelFlag), InstanceMethod("clearCancelFlag", &LibRawWrapper::ClearCancelFlag),
50
+
51
+ // 版本信息(实例方法)
52
+ InstanceMethod("version", &LibRawWrapper::Version), InstanceMethod("versionNumber", &LibRawWrapper::VersionNumber),
53
+
54
+ // 静态方法
55
+ StaticMethod("getVersion", &LibRawWrapper::GetVersion), StaticMethod("getCapabilities", &LibRawWrapper::GetCapabilities), StaticMethod("getCameraList", &LibRawWrapper::GetCameraList), StaticMethod("getCameraCount", &LibRawWrapper::GetCameraCount), StaticMethod("isRawFile", &LibRawWrapper::IsRawFile)});
56
+
57
+ constructor = Napi::Persistent(func);
58
+ constructor.SuppressDestruct();
59
+
60
+ exports.Set("LibRawWrapper", func);
61
+ return exports;
62
+ }
63
+
64
+ LibRawWrapper::LibRawWrapper(const Napi::CallbackInfo &info)
65
+ : Napi::ObjectWrap<LibRawWrapper>(info), isLoaded(false), isUnpacked(false), isProcessed(false)
66
+ {
67
+ Napi::Env env = info.Env();
68
+ Napi::HandleScope scope(env);
69
+
70
+ processor = std::make_unique<LibRaw>();
71
+ if (!processor)
72
+ {
73
+ Napi::TypeError::New(env, "Failed to initialize LibRaw").ThrowAsJavaScriptException();
74
+ }
75
+ }
76
+
77
+ LibRawWrapper::~LibRawWrapper()
78
+ {
79
+ if (processor && isLoaded)
80
+ {
81
+ processor->recycle();
82
+ }
83
+ }
84
+
85
+ bool LibRawWrapper::CheckLoaded(Napi::Env env)
86
+ {
87
+ if (!isLoaded)
88
+ {
89
+ Napi::Error::New(env, "No file loaded. Call loadFile() first.").ThrowAsJavaScriptException();
90
+ return false;
91
+ }
92
+ return true;
93
+ }
94
+
95
+ // ============== 文件操作 ==============
96
+
97
+ Napi::Value LibRawWrapper::LoadFile(const Napi::CallbackInfo &info)
98
+ {
99
+ Napi::Env env = info.Env();
100
+
101
+ if (info.Length() < 1 || !info[0].IsString())
102
+ {
103
+ Napi::TypeError::New(env, "Expected string filename").ThrowAsJavaScriptException();
104
+ return env.Null();
105
+ }
106
+
107
+ std::string filename = info[0].As<Napi::String>().Utf8Value();
108
+ int ret = processor->open_file(filename.c_str());
109
+ if (ret != LIBRAW_SUCCESS)
110
+ {
111
+ std::string error = "Failed to open file: ";
112
+ error += libraw_strerror(ret);
113
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
114
+ return env.Null();
115
+ }
116
+
117
+ ret = processor->unpack();
118
+ if (ret != LIBRAW_SUCCESS)
119
+ {
120
+ std::string error = "Failed to unpack file: ";
121
+ error += libraw_strerror(ret);
122
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
123
+ return env.Null();
124
+ }
125
+
126
+ isLoaded = true;
127
+ isUnpacked = true;
128
+ isProcessed = false;
129
+ return Napi::Boolean::New(env, true);
130
+ }
131
+
132
+ Napi::Value LibRawWrapper::LoadBuffer(const Napi::CallbackInfo &info)
133
+ {
134
+ Napi::Env env = info.Env();
135
+
136
+ if (info.Length() < 1 || !info[0].IsBuffer())
137
+ {
138
+ Napi::TypeError::New(env, "Expected Buffer").ThrowAsJavaScriptException();
139
+ return env.Null();
140
+ }
141
+
142
+ Napi::Buffer<uint8_t> buffer = info[0].As<Napi::Buffer<uint8_t>>();
143
+ int ret = processor->open_buffer(buffer.Data(), buffer.Length());
144
+ if (ret != LIBRAW_SUCCESS)
145
+ {
146
+ std::string error = "Failed to open buffer: ";
147
+ error += libraw_strerror(ret);
148
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
149
+ return env.Null();
150
+ }
151
+
152
+ ret = processor->unpack();
153
+ if (ret != LIBRAW_SUCCESS)
154
+ {
155
+ std::string error = "Failed to unpack buffer: ";
156
+ error += libraw_strerror(ret);
157
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
158
+ return env.Null();
159
+ }
160
+
161
+ isLoaded = true;
162
+ isUnpacked = true;
163
+ isProcessed = false;
164
+ return Napi::Boolean::New(env, true);
165
+ }
166
+
167
+ Napi::Value LibRawWrapper::Close(const Napi::CallbackInfo &info)
168
+ {
169
+ Napi::Env env = info.Env();
170
+
171
+ if (processor && isLoaded)
172
+ {
173
+ processor->recycle();
174
+ isLoaded = false;
175
+ isUnpacked = false;
176
+ isProcessed = false;
177
+ }
178
+
179
+ return Napi::Boolean::New(env, true);
180
+ }
181
+
182
+ // ============== 元数据和信息 ==============
183
+
184
+ Napi::Value LibRawWrapper::GetMetadata(const Napi::CallbackInfo &info)
185
+ {
186
+ Napi::Env env = info.Env();
187
+ if (!CheckLoaded(env))
188
+ return env.Null();
189
+
190
+ Napi::Object metadata = Napi::Object::New(env);
191
+ // 相机信息
192
+ if (processor->imgdata.idata.make[0])
193
+ {
194
+ metadata.Set("make", Napi::String::New(env, processor->imgdata.idata.make));
195
+ }
196
+ if (processor->imgdata.idata.model[0])
197
+ {
198
+ metadata.Set("model", Napi::String::New(env, processor->imgdata.idata.model));
199
+ }
200
+ if (processor->imgdata.idata.software[0])
201
+ {
202
+ metadata.Set("software", Napi::String::New(env, processor->imgdata.idata.software));
203
+ }
204
+
205
+ // 图像尺寸
206
+ metadata.Set("width", Napi::Number::New(env, processor->imgdata.sizes.width));
207
+ metadata.Set("height", Napi::Number::New(env, processor->imgdata.sizes.height));
208
+ metadata.Set("rawWidth", Napi::Number::New(env, processor->imgdata.sizes.raw_width));
209
+ metadata.Set("rawHeight", Napi::Number::New(env, processor->imgdata.sizes.raw_height));
210
+
211
+ // 颜色信息
212
+ metadata.Set("colors", Napi::Number::New(env, processor->imgdata.idata.colors));
213
+ metadata.Set("filters", Napi::Number::New(env, processor->imgdata.idata.filters));
214
+
215
+ // ISO 和曝光
216
+ if (processor->imgdata.other.iso_speed > 0)
217
+ {
218
+ metadata.Set("iso", Napi::Number::New(env, processor->imgdata.other.iso_speed));
219
+ }
220
+ if (processor->imgdata.other.shutter > 0)
221
+ {
222
+ metadata.Set("shutterSpeed", Napi::Number::New(env, processor->imgdata.other.shutter));
223
+ }
224
+ if (processor->imgdata.other.aperture > 0)
225
+ {
226
+ metadata.Set("aperture", Napi::Number::New(env, processor->imgdata.other.aperture));
227
+ }
228
+ if (processor->imgdata.other.focal_len > 0)
229
+ {
230
+ metadata.Set("focalLength", Napi::Number::New(env, processor->imgdata.other.focal_len));
231
+ }
232
+
233
+ // 时间戳
234
+ if (processor->imgdata.other.timestamp > 0)
235
+ {
236
+ metadata.Set("timestamp", Napi::Number::New(env, processor->imgdata.other.timestamp));
237
+ }
238
+
239
+ return metadata;
240
+ }
241
+
242
+ Napi::Value LibRawWrapper::GetImageSize(const Napi::CallbackInfo &info)
243
+ {
244
+ Napi::Env env = info.Env();
245
+ if (!CheckLoaded(env))
246
+ return env.Null();
247
+
248
+ Napi::Object size = Napi::Object::New(env);
249
+ size.Set("width", Napi::Number::New(env, processor->imgdata.sizes.width));
250
+ size.Set("height", Napi::Number::New(env, processor->imgdata.sizes.height));
251
+ size.Set("rawWidth", Napi::Number::New(env, processor->imgdata.sizes.raw_width));
252
+ size.Set("rawHeight", Napi::Number::New(env, processor->imgdata.sizes.raw_height));
253
+ size.Set("topMargin", Napi::Number::New(env, processor->imgdata.sizes.top_margin));
254
+ size.Set("leftMargin", Napi::Number::New(env, processor->imgdata.sizes.left_margin));
255
+ size.Set("iWidth", Napi::Number::New(env, processor->imgdata.sizes.iwidth));
256
+ size.Set("iHeight", Napi::Number::New(env, processor->imgdata.sizes.iheight));
257
+
258
+ return size;
259
+ }
260
+
261
+ Napi::Value LibRawWrapper::GetAdvancedMetadata(const Napi::CallbackInfo &info)
262
+ {
263
+ Napi::Env env = info.Env();
264
+ if (!CheckLoaded(env))
265
+ return env.Null();
266
+
267
+ Napi::Object metadata = Napi::Object::New(env);
268
+ // 相机详情
269
+ if (processor->imgdata.idata.normalized_make[0])
270
+ {
271
+ metadata.Set("normalizedMake", Napi::String::New(env, processor->imgdata.idata.normalized_make));
272
+ }
273
+ if (processor->imgdata.idata.normalized_model[0])
274
+ {
275
+ metadata.Set("normalizedModel", Napi::String::New(env, processor->imgdata.idata.normalized_model));
276
+ }
277
+
278
+ metadata.Set("rawCount", Napi::Number::New(env, processor->imgdata.idata.raw_count));
279
+ metadata.Set("dngVersion", Napi::Number::New(env, processor->imgdata.idata.dng_version));
280
+ metadata.Set("is_foveon", Napi::Number::New(env, processor->imgdata.idata.is_foveon));
281
+
282
+ // 颜色矩阵和校准
283
+ Napi::Array colorMatrix = Napi::Array::New(env);
284
+ for (int i = 0; i < 4; i++)
285
+ {
286
+ Napi::Array row = Napi::Array::New(env);
287
+ for (int j = 0; j < 3; j++)
288
+ {
289
+ row.Set(j, Napi::Number::New(env, processor->imgdata.color.cmatrix[i][j]));
290
+ }
291
+ colorMatrix.Set(i, row);
292
+ }
293
+ metadata.Set("colorMatrix", colorMatrix);
294
+
295
+ // 相机到 XYZ 矩阵(cam_xyz 4x3)
296
+ Napi::Array camXYZ = Napi::Array::New(env);
297
+ for (int i = 0; i < 4; i++)
298
+ {
299
+ Napi::Array row = Napi::Array::New(env);
300
+ for (int j = 0; j < 3; j++)
301
+ {
302
+ row.Set(j, Napi::Number::New(env, processor->imgdata.color.cam_xyz[i][j]));
303
+ }
304
+ camXYZ.Set(i, row);
305
+ }
306
+ metadata.Set("camXYZ", camXYZ);
307
+
308
+ // 白平衡
309
+ Napi::Array camMul = Napi::Array::New(env);
310
+ for (int i = 0; i < 4; i++)
311
+ {
312
+ camMul.Set(i, Napi::Number::New(env, processor->imgdata.color.cam_mul[i]));
313
+ }
314
+ metadata.Set("camMul", camMul);
315
+
316
+ Napi::Array preMul = Napi::Array::New(env);
317
+ for (int i = 0; i < 4; i++)
318
+ {
319
+ preMul.Set(i, Napi::Number::New(env, processor->imgdata.color.pre_mul[i]));
320
+ }
321
+ metadata.Set("preMul", preMul);
322
+
323
+ // 附加传感器信息
324
+ metadata.Set("blackLevel", Napi::Number::New(env, processor->imgdata.color.black));
325
+ metadata.Set("dataMaximum", Napi::Number::New(env, processor->imgdata.color.data_maximum));
326
+ metadata.Set("whiteLevel", Napi::Number::New(env, processor->imgdata.color.maximum));
327
+
328
+ return metadata;
329
+ }
330
+
331
+ Napi::Value LibRawWrapper::GetLensInfo(const Napi::CallbackInfo &info)
332
+ {
333
+ Napi::Env env = info.Env();
334
+ if (!CheckLoaded(env))
335
+ return env.Null();
336
+
337
+ Napi::Object lensInfo = Napi::Object::New(env);
338
+ if (processor->imgdata.lens.Lens[0])
339
+ {
340
+ lensInfo.Set("lensName", Napi::String::New(env, processor->imgdata.lens.Lens));
341
+ }
342
+ if (processor->imgdata.lens.LensMake[0])
343
+ {
344
+ lensInfo.Set("lensMake", Napi::String::New(env, processor->imgdata.lens.LensMake));
345
+ }
346
+ if (processor->imgdata.lens.LensSerial[0])
347
+ {
348
+ lensInfo.Set("lensSerial", Napi::String::New(env, processor->imgdata.lens.LensSerial));
349
+ }
350
+ if (processor->imgdata.lens.InternalLensSerial[0])
351
+ {
352
+ lensInfo.Set("internalLensSerial", Napi::String::New(env, processor->imgdata.lens.InternalLensSerial));
353
+ }
354
+
355
+ // 焦距信息
356
+ if (processor->imgdata.lens.MinFocal > 0)
357
+ {
358
+ lensInfo.Set("minFocal", Napi::Number::New(env, processor->imgdata.lens.MinFocal));
359
+ }
360
+ if (processor->imgdata.lens.MaxFocal > 0)
361
+ {
362
+ lensInfo.Set("maxFocal", Napi::Number::New(env, processor->imgdata.lens.MaxFocal));
363
+ }
364
+ if (processor->imgdata.lens.MaxAp4MinFocal > 0)
365
+ {
366
+ lensInfo.Set("maxAp4MinFocal", Napi::Number::New(env, processor->imgdata.lens.MaxAp4MinFocal));
367
+ }
368
+ if (processor->imgdata.lens.MaxAp4MaxFocal > 0)
369
+ {
370
+ lensInfo.Set("maxAp4MaxFocal", Napi::Number::New(env, processor->imgdata.lens.MaxAp4MaxFocal));
371
+ }
372
+ if (processor->imgdata.lens.EXIF_MaxAp > 0)
373
+ {
374
+ lensInfo.Set("exifMaxAp", Napi::Number::New(env, processor->imgdata.lens.EXIF_MaxAp));
375
+ }
376
+ if (processor->imgdata.lens.FocalLengthIn35mmFormat > 0)
377
+ {
378
+ lensInfo.Set("focalLengthIn35mmFormat", Napi::Number::New(env, processor->imgdata.lens.FocalLengthIn35mmFormat));
379
+ }
380
+
381
+ return lensInfo;
382
+ }
383
+
384
+ Napi::Value LibRawWrapper::GetColorInfo(const Napi::CallbackInfo &info)
385
+ {
386
+ Napi::Env env = info.Env();
387
+ if (!CheckLoaded(env))
388
+ return env.Null();
389
+
390
+ Napi::Object colorInfo = Napi::Object::New(env);
391
+ // 基本颜色信息
392
+ colorInfo.Set("colors", Napi::Number::New(env, processor->imgdata.idata.colors));
393
+ colorInfo.Set("filters", Napi::Number::New(env, processor->imgdata.idata.filters));
394
+
395
+ // 颜色数据
396
+ colorInfo.Set("blackLevel", Napi::Number::New(env, processor->imgdata.color.black));
397
+ colorInfo.Set("dataMaximum", Napi::Number::New(env, processor->imgdata.color.data_maximum));
398
+ colorInfo.Set("whiteLevel", Napi::Number::New(env, processor->imgdata.color.maximum));
399
+
400
+ // 颜色配置文件
401
+ if (processor->imgdata.color.profile_length > 0)
402
+ {
403
+ colorInfo.Set("profileLength", Napi::Number::New(env, processor->imgdata.color.profile_length));
404
+ }
405
+
406
+ // 颜色矩阵
407
+ Napi::Array rgbCam = Napi::Array::New(env);
408
+ for (int i = 0; i < 3; i++)
409
+ {
410
+ Napi::Array row = Napi::Array::New(env);
411
+ for (int j = 0; j < 4; j++)
412
+ {
413
+ row.Set(j, Napi::Number::New(env, processor->imgdata.color.rgb_cam[i][j]));
414
+ }
415
+ rgbCam.Set(i, row);
416
+ }
417
+ colorInfo.Set("rgbCam", rgbCam);
418
+
419
+ // 相机乘数
420
+ Napi::Array camMul = Napi::Array::New(env);
421
+ for (int i = 0; i < 4; i++)
422
+ {
423
+ camMul.Set(i, Napi::Number::New(env, processor->imgdata.color.cam_mul[i]));
424
+ }
425
+ colorInfo.Set("camMul", camMul);
426
+
427
+ return colorInfo;
428
+ }
429
+
430
+ // ============== 图像处理 ==============
431
+
432
+ Napi::Value LibRawWrapper::UnpackThumbnail(const Napi::CallbackInfo &info)
433
+ {
434
+ Napi::Env env = info.Env();
435
+ if (!CheckLoaded(env))
436
+ return env.Null();
437
+ int ret = processor->unpack_thumb();
438
+ if (ret != LIBRAW_SUCCESS)
439
+ {
440
+ std::string error = "Failed to unpack thumbnail: ";
441
+ error += libraw_strerror(ret);
442
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
443
+ return env.Null();
444
+ }
445
+
446
+ return Napi::Boolean::New(env, true);
447
+ }
448
+
449
+ Napi::Value LibRawWrapper::ProcessImage(const Napi::CallbackInfo &info)
450
+ {
451
+ Napi::Env env = info.Env();
452
+ if (!CheckLoaded(env))
453
+ return env.Null();
454
+ int ret = processor->dcraw_process();
455
+ if (ret != LIBRAW_SUCCESS)
456
+ {
457
+ std::string error = "Failed to process image: ";
458
+ error += libraw_strerror(ret);
459
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
460
+ return env.Null();
461
+ }
462
+
463
+ isProcessed = true;
464
+ return Napi::Boolean::New(env, true);
465
+ }
466
+
467
+ Napi::Value LibRawWrapper::SubtractBlack(const Napi::CallbackInfo &info)
468
+ {
469
+ Napi::Env env = info.Env();
470
+ if (!CheckLoaded(env))
471
+ return env.Null();
472
+ int ret = processor->subtract_black();
473
+ if (ret != LIBRAW_SUCCESS)
474
+ {
475
+ std::string error = "Failed to subtract black: ";
476
+ error += libraw_strerror(ret);
477
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
478
+ return env.Null();
479
+ }
480
+
481
+ return Napi::Boolean::New(env, true);
482
+ }
483
+
484
+ Napi::Value LibRawWrapper::Raw2Image(const Napi::CallbackInfo &info)
485
+ {
486
+ Napi::Env env = info.Env();
487
+ if (!CheckLoaded(env))
488
+ return env.Null();
489
+ int ret = processor->raw2image();
490
+ if (ret != LIBRAW_SUCCESS)
491
+ {
492
+ std::string error = "Failed to convert raw to image: ";
493
+ error += libraw_strerror(ret);
494
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
495
+ return env.Null();
496
+ }
497
+
498
+ return Napi::Boolean::New(env, true);
499
+ }
500
+
501
+ Napi::Value LibRawWrapper::AdjustMaximum(const Napi::CallbackInfo &info)
502
+ {
503
+ Napi::Env env = info.Env();
504
+ if (!CheckLoaded(env))
505
+ return env.Null();
506
+ int ret = processor->adjust_maximum();
507
+ if (ret != LIBRAW_SUCCESS)
508
+ {
509
+ std::string error = "Failed to adjust maximum: ";
510
+ error += libraw_strerror(ret);
511
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
512
+ return env.Null();
513
+ }
514
+
515
+ return Napi::Boolean::New(env, true);
516
+ }
517
+
518
+ // ============== 内存图像创建 ==============
519
+
520
+ Napi::Object LibRawWrapper::CreateImageDataObject(Napi::Env env, libraw_processed_image_t *img)
521
+ {
522
+ Napi::Object result = Napi::Object::New(env);
523
+
524
+ if (!img)
525
+ {
526
+ return result;
527
+ }
528
+
529
+ result.Set("type", Napi::Number::New(env, img->type));
530
+ result.Set("height", Napi::Number::New(env, img->height));
531
+ result.Set("width", Napi::Number::New(env, img->width));
532
+ result.Set("colors", Napi::Number::New(env, img->colors));
533
+ result.Set("bits", Napi::Number::New(env, img->bits));
534
+ result.Set("dataSize", Napi::Number::New(env, img->data_size));
535
+
536
+ // 创建包含图像数据的缓冲区
537
+ Napi::Buffer<uint8_t> buffer = Napi::Buffer<uint8_t>::Copy(env, img->data, img->data_size);
538
+ result.Set("data", buffer);
539
+
540
+ return result;
541
+ }
542
+
543
+ Napi::Value LibRawWrapper::CreateMemoryImage(const Napi::CallbackInfo &info)
544
+ {
545
+ Napi::Env env = info.Env();
546
+ if (!CheckLoaded(env))
547
+ return env.Null();
548
+ int errcode = 0;
549
+ libraw_processed_image_t *img = processor->dcraw_make_mem_image(&errcode);
550
+
551
+ if (!img || errcode != LIBRAW_SUCCESS)
552
+ {
553
+ std::string error = "Failed to create memory image: ";
554
+ if (errcode != LIBRAW_SUCCESS)
555
+ {
556
+ error += libraw_strerror(errcode);
557
+ }
558
+ else
559
+ {
560
+ error += "Unknown error";
561
+ }
562
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
563
+ return env.Null();
564
+ }
565
+
566
+ Napi::Object result = CreateImageDataObject(env, img);
567
+ LibRaw::dcraw_clear_mem(img);
568
+
569
+ return result;
570
+ }
571
+
572
+ Napi::Value LibRawWrapper::CreateMemoryThumbnail(const Napi::CallbackInfo &info)
573
+ {
574
+ Napi::Env env = info.Env();
575
+ if (!CheckLoaded(env))
576
+ return env.Null();
577
+ int errcode = 0;
578
+ libraw_processed_image_t *img = processor->dcraw_make_mem_thumb(&errcode);
579
+
580
+ if (!img || errcode != LIBRAW_SUCCESS)
581
+ {
582
+ std::string error = "Failed to create memory thumbnail: ";
583
+ if (errcode != LIBRAW_SUCCESS)
584
+ {
585
+ error += libraw_strerror(errcode);
586
+ }
587
+ else
588
+ {
589
+ error += "Unknown error";
590
+ }
591
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
592
+ return env.Null();
593
+ }
594
+
595
+ Napi::Object result = CreateImageDataObject(env, img);
596
+ LibRaw::dcraw_clear_mem(img);
597
+
598
+ return result;
599
+ }
600
+
601
+ // ============== 文件写入器 ==============
602
+
603
+ Napi::Value LibRawWrapper::WritePPM(const Napi::CallbackInfo &info)
604
+ {
605
+ Napi::Env env = info.Env();
606
+ if (!CheckLoaded(env))
607
+ return env.Null();
608
+
609
+ if (info.Length() < 1 || !info[0].IsString())
610
+ {
611
+ Napi::TypeError::New(env, "Expected string filename").ThrowAsJavaScriptException();
612
+ return env.Null();
613
+ }
614
+
615
+ std::string filename = info[0].As<Napi::String>().Utf8Value();
616
+ int ret = processor->dcraw_ppm_tiff_writer(filename.c_str());
617
+ if (ret != LIBRAW_SUCCESS)
618
+ {
619
+ std::string error = "Failed to write PPM file: ";
620
+ error += libraw_strerror(ret);
621
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
622
+ return env.Null();
623
+ }
624
+
625
+ return Napi::Boolean::New(env, true);
626
+ }
627
+
628
+ Napi::Value LibRawWrapper::WriteTIFF(const Napi::CallbackInfo &info)
629
+ {
630
+ Napi::Env env = info.Env();
631
+ if (!CheckLoaded(env))
632
+ return env.Null();
633
+
634
+ if (info.Length() < 1 || !info[0].IsString())
635
+ {
636
+ Napi::TypeError::New(env, "Expected string filename").ThrowAsJavaScriptException();
637
+ return env.Null();
638
+ }
639
+
640
+ std::string filename = info[0].As<Napi::String>().Utf8Value();
641
+ // 设置输出格式为 TIFF
642
+ processor->imgdata.params.output_tiff = 1;
643
+
644
+ int ret = processor->dcraw_ppm_tiff_writer(filename.c_str());
645
+ if (ret != LIBRAW_SUCCESS)
646
+ {
647
+ std::string error = "Failed to write TIFF file: ";
648
+ error += libraw_strerror(ret);
649
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
650
+ return env.Null();
651
+ }
652
+
653
+ return Napi::Boolean::New(env, true);
654
+ }
655
+
656
+ Napi::Value LibRawWrapper::WriteThumbnail(const Napi::CallbackInfo &info)
657
+ {
658
+ Napi::Env env = info.Env();
659
+ if (!CheckLoaded(env))
660
+ return env.Null();
661
+
662
+ if (info.Length() < 1 || !info[0].IsString())
663
+ {
664
+ Napi::TypeError::New(env, "Expected string filename").ThrowAsJavaScriptException();
665
+ return env.Null();
666
+ }
667
+
668
+ std::string filename = info[0].As<Napi::String>().Utf8Value();
669
+ int ret = processor->dcraw_thumb_writer(filename.c_str());
670
+ if (ret != LIBRAW_SUCCESS)
671
+ {
672
+ std::string error = "Failed to write thumbnail: ";
673
+ error += libraw_strerror(ret);
674
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
675
+ return env.Null();
676
+ }
677
+
678
+ return Napi::Boolean::New(env, true);
679
+ }
680
+
681
+ // ============== 配置和设置 ==============
682
+
683
+ Napi::Value LibRawWrapper::SetOutputParams(const Napi::CallbackInfo &info)
684
+ {
685
+ Napi::Env env = info.Env();
686
+ if (!CheckLoaded(env))
687
+ return env.Null();
688
+
689
+ if (info.Length() < 1 || !info[0].IsObject())
690
+ {
691
+ Napi::TypeError::New(env, "Expected object with output parameters").ThrowAsJavaScriptException();
692
+ return env.Null();
693
+ }
694
+
695
+ Napi::Object params = info[0].As<Napi::Object>();
696
+ // Gamma 设置
697
+ if (params.Has("gamma") && params.Get("gamma").IsArray())
698
+ {
699
+ Napi::Array gamma = params.Get("gamma").As<Napi::Array>();
700
+ if (gamma.Length() >= 2)
701
+ {
702
+ processor->imgdata.params.gamm[0] = gamma.Get(0u).As<Napi::Number>().DoubleValue();
703
+ processor->imgdata.params.gamm[1] = gamma.Get(1u).As<Napi::Number>().DoubleValue();
704
+ }
705
+ }
706
+
707
+ // 亮度
708
+ if (params.Has("bright") && params.Get("bright").IsNumber())
709
+ {
710
+ processor->imgdata.params.bright = params.Get("bright").As<Napi::Number>().FloatValue();
711
+ }
712
+
713
+ // 输出色彩空间
714
+ if (params.Has("output_color") && params.Get("output_color").IsNumber())
715
+ {
716
+ processor->imgdata.params.output_color = params.Get("output_color").As<Napi::Number>().Int32Value();
717
+ }
718
+
719
+ // 每样本输出位数
720
+ if (params.Has("output_bps") && params.Get("output_bps").IsNumber())
721
+ {
722
+ processor->imgdata.params.output_bps = params.Get("output_bps").As<Napi::Number>().Int32Value();
723
+ }
724
+
725
+ // 用户乘数
726
+ if (params.Has("user_mul") && params.Get("user_mul").IsArray())
727
+ {
728
+ Napi::Array userMul = params.Get("user_mul").As<Napi::Array>();
729
+ for (uint32_t i = 0; i < 4 && i < userMul.Length(); i++)
730
+ {
731
+ processor->imgdata.params.user_mul[i] = userMul.Get(i).As<Napi::Number>().FloatValue();
732
+ }
733
+ }
734
+
735
+ // 使用相机/自动白平衡(可选)
736
+ if (params.Has("use_camera_wb") && params.Get("use_camera_wb").IsBoolean())
737
+ {
738
+ processor->imgdata.params.use_camera_wb = params.Get("use_camera_wb").As<Napi::Boolean>().Value() ? 1 : 0;
739
+ }
740
+ if (params.Has("use_auto_wb") && params.Get("use_auto_wb").IsBoolean())
741
+ {
742
+ processor->imgdata.params.use_auto_wb = params.Get("use_auto_wb").As<Napi::Boolean>().Value() ? 1 : 0;
743
+ }
744
+
745
+ // 互斥处理:如显式设置 use_camera_wb 或 use_auto_wb,则清零 user_mul 以避免冲突
746
+ if (processor->imgdata.params.use_camera_wb || processor->imgdata.params.use_auto_wb)
747
+ {
748
+ for (int i = 0; i < 4; ++i)
749
+ {
750
+ processor->imgdata.params.user_mul[i] = 0.0f;
751
+ }
752
+ }
753
+
754
+ // 自动亮度
755
+ if (params.Has("no_auto_bright") && params.Get("no_auto_bright").IsBoolean())
756
+ {
757
+ processor->imgdata.params.no_auto_bright = params.Get("no_auto_bright").As<Napi::Boolean>().Value() ? 1 : 0;
758
+ }
759
+
760
+ // 高光模式
761
+ if (params.Has("highlight") && params.Get("highlight").IsNumber())
762
+ {
763
+ processor->imgdata.params.highlight = params.Get("highlight").As<Napi::Number>().Int32Value();
764
+ }
765
+
766
+ // 输出 TIFF
767
+ if (params.Has("output_tiff") && params.Get("output_tiff").IsBoolean())
768
+ {
769
+ processor->imgdata.params.output_tiff = params.Get("output_tiff").As<Napi::Boolean>().Value() ? 1 : 0;
770
+ }
771
+
772
+ return Napi::Boolean::New(env, true);
773
+ }
774
+
775
+ Napi::Value LibRawWrapper::GetOutputParams(const Napi::CallbackInfo &info)
776
+ {
777
+ Napi::Env env = info.Env();
778
+ if (!CheckLoaded(env))
779
+ return env.Null();
780
+
781
+ Napi::Object params = Napi::Object::New(env);
782
+ // Gamma
783
+ Napi::Array gamma = Napi::Array::New(env);
784
+ gamma.Set(0u, Napi::Number::New(env, processor->imgdata.params.gamm[0]));
785
+ gamma.Set(1u, Napi::Number::New(env, processor->imgdata.params.gamm[1]));
786
+ params.Set("gamma", gamma);
787
+
788
+ // 其他参数
789
+ params.Set("bright", Napi::Number::New(env, processor->imgdata.params.bright));
790
+ params.Set("output_color", Napi::Number::New(env, processor->imgdata.params.output_color));
791
+ params.Set("output_bps", Napi::Number::New(env, processor->imgdata.params.output_bps));
792
+ params.Set("no_auto_bright", Napi::Boolean::New(env, processor->imgdata.params.no_auto_bright));
793
+ params.Set("highlight", Napi::Number::New(env, processor->imgdata.params.highlight));
794
+ params.Set("output_tiff", Napi::Boolean::New(env, processor->imgdata.params.output_tiff));
795
+ params.Set("use_camera_wb", Napi::Boolean::New(env, processor->imgdata.params.use_camera_wb));
796
+ params.Set("use_auto_wb", Napi::Boolean::New(env, processor->imgdata.params.use_auto_wb));
797
+
798
+ // 用户乘数
799
+ Napi::Array userMul = Napi::Array::New(env);
800
+ for (int i = 0; i < 4; i++)
801
+ {
802
+ userMul.Set(i, Napi::Number::New(env, processor->imgdata.params.user_mul[i]));
803
+ }
804
+ params.Set("user_mul", userMul);
805
+
806
+ return params;
807
+ }
808
+
809
+ // ============== 实用函数 ==============
810
+
811
+ Napi::Value LibRawWrapper::IsFloatingPoint(const Napi::CallbackInfo &info)
812
+ {
813
+ Napi::Env env = info.Env();
814
+ if (!CheckLoaded(env))
815
+ return env.Null();
816
+
817
+ bool isFloating = processor->is_floating_point();
818
+ return Napi::Boolean::New(env, isFloating);
819
+ }
820
+
821
+ Napi::Value LibRawWrapper::IsFujiRotated(const Napi::CallbackInfo &info)
822
+ {
823
+ Napi::Env env = info.Env();
824
+ if (!CheckLoaded(env))
825
+ return env.Null();
826
+
827
+ bool isFuji = processor->is_fuji_rotated();
828
+ return Napi::Boolean::New(env, isFuji);
829
+ }
830
+
831
+ Napi::Value LibRawWrapper::IsSRAW(const Napi::CallbackInfo &info)
832
+ {
833
+ Napi::Env env = info.Env();
834
+ if (!CheckLoaded(env))
835
+ return env.Null();
836
+
837
+ bool isSraw = processor->is_sraw();
838
+ return Napi::Boolean::New(env, isSraw);
839
+ }
840
+
841
+ Napi::Value LibRawWrapper::IsJPEGThumb(const Napi::CallbackInfo &info)
842
+ {
843
+ Napi::Env env = info.Env();
844
+ if (!CheckLoaded(env))
845
+ return env.Null();
846
+
847
+ bool isJpeg = processor->is_jpeg_thumb();
848
+ return Napi::Boolean::New(env, isJpeg);
849
+ }
850
+
851
+ Napi::Value LibRawWrapper::ErrorCount(const Napi::CallbackInfo &info)
852
+ {
853
+ Napi::Env env = info.Env();
854
+ if (!CheckLoaded(env))
855
+ return env.Null();
856
+
857
+ int errors = processor->error_count();
858
+ return Napi::Number::New(env, errors);
859
+ }
860
+
861
+ // ============== 静态方法 ==============
862
+
863
+ Napi::Value LibRawWrapper::GetVersion(const Napi::CallbackInfo &info)
864
+ {
865
+ Napi::Env env = info.Env();
866
+
867
+ const char *version = LibRaw::version();
868
+ return Napi::String::New(env, version ? version : "Unknown");
869
+ }
870
+
871
+ Napi::Value LibRawWrapper::GetCapabilities(const Napi::CallbackInfo &info)
872
+ {
873
+ Napi::Env env = info.Env();
874
+
875
+ unsigned int caps = LibRaw::capabilities();
876
+ return Napi::Number::New(env, caps);
877
+ }
878
+
879
+ Napi::Value LibRawWrapper::GetCameraList(const Napi::CallbackInfo &info)
880
+ {
881
+ Napi::Env env = info.Env();
882
+
883
+ const char **cameras = LibRaw::cameraList();
884
+ Napi::Array result = Napi::Array::New(env);
885
+
886
+ if (cameras)
887
+ {
888
+ uint32_t index = 0;
889
+ while (cameras[index] != nullptr)
890
+ {
891
+ result.Set(index, Napi::String::New(env, cameras[index]));
892
+ index++;
893
+ }
894
+ }
895
+
896
+ return result;
897
+ }
898
+
899
+ Napi::Value LibRawWrapper::GetCameraCount(const Napi::CallbackInfo &info)
900
+ {
901
+ Napi::Env env = info.Env();
902
+
903
+ int count = LibRaw::cameraCount();
904
+ return Napi::Number::New(env, count);
905
+ }
906
+
907
+ Napi::Value LibRawWrapper::IsRawFile(const Napi::CallbackInfo &info)
908
+ {
909
+ Napi::Env env = info.Env();
910
+
911
+ // 参数验证
912
+ if (info.Length() < 1)
913
+ {
914
+ Napi::TypeError::New(env, "需要一个参数:文件路径").ThrowAsJavaScriptException();
915
+ return env.Null();
916
+ }
917
+
918
+ if (!info[0].IsString())
919
+ {
920
+ Napi::TypeError::New(env, "文件路径必须是字符串").ThrowAsJavaScriptException();
921
+ return env.Null();
922
+ }
923
+
924
+ std::string filename = info[0].As<Napi::String>().Utf8Value();
925
+
926
+ // 创建临时 LibRaw 实例用于测试
927
+ LibRaw tempProcessor;
928
+
929
+ // 尝试打开并识别文件
930
+ int ret = tempProcessor.open_file(filename.c_str());
931
+
932
+ // 清理资源
933
+ tempProcessor.recycle();
934
+
935
+ // 根据返回值判断是否为支持的 RAW 文件
936
+ // LIBRAW_SUCCESS (0) 表示成功识别
937
+ bool isRaw = (ret == LIBRAW_SUCCESS);
938
+
939
+ // 创建返回对象,包含详细信息
940
+ Napi::Object result = Napi::Object::New(env);
941
+ result.Set("isRawFile", Napi::Boolean::New(env, isRaw));
942
+ result.Set("success", Napi::Boolean::New(env, isRaw));
943
+
944
+ if (isRaw)
945
+ {
946
+ result.Set("message", Napi::String::New(env, "文件是支持的 RAW 格式"));
947
+ }
948
+ else
949
+ {
950
+ // 提供错误信息
951
+ const char *errorMsg = LibRaw::strerror(ret);
952
+ std::string msg = errorMsg ? errorMsg : "未知错误";
953
+ result.Set("message", Napi::String::New(env, "不是支持的 RAW 格式: " + msg));
954
+ result.Set("errorCode", Napi::Number::New(env, ret));
955
+ }
956
+
957
+ return result;
958
+ }
959
+
960
+ // ============== 扩展实用函数 ==============
961
+
962
+ Napi::Value LibRawWrapper::IsNikonSRAW(const Napi::CallbackInfo &info)
963
+ {
964
+ Napi::Env env = info.Env();
965
+ if (!CheckLoaded(env))
966
+ return env.Null();
967
+
968
+ bool isNikonSraw = processor->is_nikon_sraw();
969
+ return Napi::Boolean::New(env, isNikonSraw);
970
+ }
971
+
972
+ Napi::Value LibRawWrapper::IsCoolscanNEF(const Napi::CallbackInfo &info)
973
+ {
974
+ Napi::Env env = info.Env();
975
+ if (!CheckLoaded(env))
976
+ return env.Null();
977
+
978
+ bool isCoolscan = processor->is_coolscan_nef();
979
+ return Napi::Boolean::New(env, isCoolscan);
980
+ }
981
+
982
+ Napi::Value LibRawWrapper::HaveFPData(const Napi::CallbackInfo &info)
983
+ {
984
+ Napi::Env env = info.Env();
985
+ if (!CheckLoaded(env))
986
+ return env.Null();
987
+
988
+ bool haveFP = processor->have_fpdata();
989
+ return Napi::Boolean::New(env, haveFP);
990
+ }
991
+
992
+ Napi::Value LibRawWrapper::SrawMidpoint(const Napi::CallbackInfo &info)
993
+ {
994
+ Napi::Env env = info.Env();
995
+ if (!CheckLoaded(env))
996
+ return env.Null();
997
+
998
+ int midpoint = processor->sraw_midpoint();
999
+ return Napi::Number::New(env, midpoint);
1000
+ }
1001
+
1002
+ Napi::Value LibRawWrapper::ThumbOK(const Napi::CallbackInfo &info)
1003
+ {
1004
+ Napi::Env env = info.Env();
1005
+ if (!CheckLoaded(env))
1006
+ return env.Null();
1007
+ // thumbOK 可以接受最大尺寸参数,默认为 -1 表示无限制
1008
+ INT64 maxSize = -1;
1009
+ if (info.Length() > 0 && info[0].IsNumber())
1010
+ {
1011
+ maxSize = info[0].As<Napi::Number>().Int64Value();
1012
+ }
1013
+
1014
+ int result = processor->thumbOK(maxSize);
1015
+ return Napi::Number::New(env, result);
1016
+ }
1017
+
1018
+ Napi::Value LibRawWrapper::UnpackFunctionName(const Napi::CallbackInfo &info)
1019
+ {
1020
+ Napi::Env env = info.Env();
1021
+ if (!CheckLoaded(env))
1022
+ return env.Null();
1023
+
1024
+ const char *name = processor->unpack_function_name();
1025
+ return Napi::String::New(env, name ? name : "Unknown");
1026
+ }
1027
+
1028
+ Napi::Value LibRawWrapper::GetDecoderInfo(const Napi::CallbackInfo &info)
1029
+ {
1030
+ Napi::Env env = info.Env();
1031
+ if (!CheckLoaded(env))
1032
+ return env.Null();
1033
+ libraw_decoder_info_t decoder_info;
1034
+ int ret = processor->get_decoder_info(&decoder_info);
1035
+
1036
+ if (ret != LIBRAW_SUCCESS)
1037
+ {
1038
+ std::string error = "Failed to get decoder info: ";
1039
+ error += libraw_strerror(ret);
1040
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
1041
+ return env.Null();
1042
+ }
1043
+
1044
+ Napi::Object result = Napi::Object::New(env);
1045
+ result.Set("decoder_name", Napi::String::New(env, decoder_info.decoder_name ? decoder_info.decoder_name : "Unknown"));
1046
+ result.Set("decoder_flags", Napi::Number::New(env, decoder_info.decoder_flags));
1047
+
1048
+ return result;
1049
+ }
1050
+
1051
+ // ============== 高级处理 ==============
1052
+
1053
+ Napi::Value LibRawWrapper::Unpack(const Napi::CallbackInfo &info)
1054
+ {
1055
+ Napi::Env env = info.Env();
1056
+ if (!CheckLoaded(env))
1057
+ return env.Null();
1058
+ int ret = processor->unpack();
1059
+ if (ret != LIBRAW_SUCCESS)
1060
+ {
1061
+ std::string error = "Failed to unpack: ";
1062
+ error += libraw_strerror(ret);
1063
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
1064
+ return env.Null();
1065
+ }
1066
+
1067
+ return Napi::Boolean::New(env, true);
1068
+ }
1069
+
1070
+ Napi::Value LibRawWrapper::Raw2ImageEx(const Napi::CallbackInfo &info)
1071
+ {
1072
+ Napi::Env env = info.Env();
1073
+ if (!CheckLoaded(env))
1074
+ return env.Null();
1075
+ // 默认为减去黑色,可以被覆盖
1076
+ int do_subtract_black = 1;
1077
+ if (info.Length() > 0 && info[0].IsBoolean())
1078
+ {
1079
+ do_subtract_black = info[0].As<Napi::Boolean>().Value() ? 1 : 0;
1080
+ }
1081
+
1082
+ int ret = processor->raw2image_ex(do_subtract_black);
1083
+ if (ret != LIBRAW_SUCCESS)
1084
+ {
1085
+ std::string error = "Failed to convert raw to image: ";
1086
+ error += libraw_strerror(ret);
1087
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
1088
+ return env.Null();
1089
+ }
1090
+
1091
+ return Napi::Boolean::New(env, true);
1092
+ }
1093
+
1094
+ Napi::Value LibRawWrapper::AdjustSizesInfoOnly(const Napi::CallbackInfo &info)
1095
+ {
1096
+ Napi::Env env = info.Env();
1097
+ if (!CheckLoaded(env))
1098
+ return env.Null();
1099
+ int ret = processor->adjust_sizes_info_only();
1100
+ if (ret != LIBRAW_SUCCESS)
1101
+ {
1102
+ std::string error = "Failed to adjust sizes: ";
1103
+ error += libraw_strerror(ret);
1104
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
1105
+ return env.Null();
1106
+ }
1107
+
1108
+ return Napi::Boolean::New(env, true);
1109
+ }
1110
+
1111
+ Napi::Value LibRawWrapper::FreeImage(const Napi::CallbackInfo &info)
1112
+ {
1113
+ Napi::Env env = info.Env();
1114
+ if (!CheckLoaded(env))
1115
+ return env.Null();
1116
+
1117
+ processor->free_image();
1118
+ return Napi::Boolean::New(env, true);
1119
+ }
1120
+
1121
+ Napi::Value LibRawWrapper::ConvertFloatToInt(const Napi::CallbackInfo &info)
1122
+ {
1123
+ Napi::Env env = info.Env();
1124
+ if (!CheckLoaded(env))
1125
+ return env.Null();
1126
+ // 来自 LibRaw 的默认值
1127
+ float dmin = 4096.0f;
1128
+ float dmax = 32767.0f;
1129
+ float dtarget = 16383.0f;
1130
+
1131
+ if (info.Length() > 0 && info[0].IsNumber())
1132
+ {
1133
+ dmin = info[0].As<Napi::Number>().FloatValue();
1134
+ }
1135
+ if (info.Length() > 1 && info[1].IsNumber())
1136
+ {
1137
+ dmax = info[1].As<Napi::Number>().FloatValue();
1138
+ }
1139
+ if (info.Length() > 2 && info[2].IsNumber())
1140
+ {
1141
+ dtarget = info[2].As<Napi::Number>().FloatValue();
1142
+ }
1143
+
1144
+ processor->convertFloatToInt(dmin, dmax, dtarget);
1145
+ return Napi::Boolean::New(env, true);
1146
+ }
1147
+
1148
+ // ============== 扩展内存操作 ==============
1149
+
1150
+ Napi::Value LibRawWrapper::GetMemImageFormat(const Napi::CallbackInfo &info)
1151
+ {
1152
+ Napi::Env env = info.Env();
1153
+ if (!CheckLoaded(env))
1154
+ return env.Null();
1155
+ int width, height, colors, bps;
1156
+ processor->get_mem_image_format(&width, &height, &colors, &bps);
1157
+
1158
+ Napi::Object result = Napi::Object::New(env);
1159
+ result.Set("width", Napi::Number::New(env, width));
1160
+ result.Set("height", Napi::Number::New(env, height));
1161
+ result.Set("colors", Napi::Number::New(env, colors));
1162
+ result.Set("bps", Napi::Number::New(env, bps));
1163
+
1164
+ return result;
1165
+ }
1166
+
1167
+ Napi::Value LibRawWrapper::CopyMemImage(const Napi::CallbackInfo &info)
1168
+ {
1169
+ Napi::Env env = info.Env();
1170
+ if (!CheckLoaded(env))
1171
+ return env.Null();
1172
+
1173
+ if (info.Length() < 3 || !info[0].IsBuffer() || !info[1].IsNumber() || !info[2].IsBoolean())
1174
+ {
1175
+ Napi::TypeError::New(env, "Expected (buffer, stride, bgr)").ThrowAsJavaScriptException();
1176
+ return env.Null();
1177
+ }
1178
+ Napi::Buffer<uint8_t> buffer = info[0].As<Napi::Buffer<uint8_t>>();
1179
+ int stride = info[1].As<Napi::Number>().Int32Value();
1180
+ int bgr = info[2].As<Napi::Boolean>().Value() ? 1 : 0;
1181
+
1182
+ int ret = processor->copy_mem_image(buffer.Data(), stride, bgr);
1183
+ if (ret != LIBRAW_SUCCESS)
1184
+ {
1185
+ std::string error = "Failed to copy memory image: ";
1186
+ error += libraw_strerror(ret);
1187
+ Napi::Error::New(env, error).ThrowAsJavaScriptException();
1188
+ return env.Null();
1189
+ }
1190
+
1191
+ return Napi::Boolean::New(env, true);
1192
+ }
1193
+
1194
+ // ============== 颜色操作 ==============
1195
+
1196
+ Napi::Value LibRawWrapper::GetColorAt(const Napi::CallbackInfo &info)
1197
+ {
1198
+ Napi::Env env = info.Env();
1199
+ if (!CheckLoaded(env))
1200
+ return env.Null();
1201
+
1202
+ if (info.Length() < 2 || !info[0].IsNumber() || !info[1].IsNumber())
1203
+ {
1204
+ Napi::TypeError::New(env, "Expected (row, col)").ThrowAsJavaScriptException();
1205
+ return env.Null();
1206
+ }
1207
+ int row = info[0].As<Napi::Number>().Int32Value();
1208
+ int col = info[1].As<Napi::Number>().Int32Value();
1209
+
1210
+ int color = processor->COLOR(row, col);
1211
+ return Napi::Number::New(env, color);
1212
+ }
1213
+
1214
+ // ============== 颜色物理白点 ==============
1215
+
1216
+ Napi::Value LibRawWrapper::GetWhitepointPhysics(const Napi::CallbackInfo &info)
1217
+ {
1218
+ Napi::Env env = info.Env();
1219
+ if (!CheckLoaded(env))
1220
+ return env.Null();
1221
+
1222
+ // 基于 cam_mul 与 cam_xyz 估算场景白点(与 tools/inspect_whitepoint 保持一致口径)
1223
+ const float *cam_mul = processor->imgdata.color.cam_mul;
1224
+ const float(*cam_xyz)[3] = processor->imgdata.color.cam_xyz;
1225
+
1226
+ double mR = cam_mul[0] > 1e-6 ? cam_mul[0] : 1.0;
1227
+ double mG = cam_mul[1] > 1e-6 ? cam_mul[1] : 1.0;
1228
+ double mB = cam_mul[2] > 1e-6 ? cam_mul[2] : 1.0;
1229
+ double r = 1.0 / mR, g = 1.0 / mG, b = 1.0 / mB;
1230
+ double s = r + g + b;
1231
+ r /= s;
1232
+ g /= s;
1233
+ b /= s;
1234
+
1235
+ double X = r * cam_xyz[0][0] + g * cam_xyz[1][0] + b * cam_xyz[2][0];
1236
+ double Y = r * cam_xyz[0][1] + g * cam_xyz[1][1] + b * cam_xyz[2][1];
1237
+ double Z = r * cam_xyz[0][2] + g * cam_xyz[1][2] + b * cam_xyz[2][2];
1238
+ double sum = X + Y + Z;
1239
+ double x = sum > 0 ? X / sum : 0.3127;
1240
+ double y = sum > 0 ? Y / sum : 0.3290;
1241
+
1242
+ auto xyToCCT = [](double x, double y)
1243
+ {
1244
+ const double xe = 0.3320, ye = 0.1858;
1245
+ double n = (x - xe) / (y - ye);
1246
+ double cct = -449 * n * n * n + 3525 * n * n - 6823.3 * n + 5520.33;
1247
+ if (cct < 1000)
1248
+ cct = 1000;
1249
+ if (cct > 40000)
1250
+ cct = 40000;
1251
+ return cct;
1252
+ };
1253
+ auto xyToUv = [](double x, double y)
1254
+ {
1255
+ double denom = (-2 * x) + (12 * y) + 3;
1256
+ double u = (4 * x) / denom;
1257
+ double v = (6 * y) / denom;
1258
+ return std::pair<double, double>(u, v);
1259
+ };
1260
+ auto cctToXy = [](double T)
1261
+ {
1262
+ double x;
1263
+ if (T >= 1667 && T <= 4000)
1264
+ x = -0.2661239e9 / (T * T * T) - 0.2343580e6 / (T * T) + 0.8776956e3 / T + 0.179910;
1265
+ else
1266
+ x = -3.0258469e9 / (T * T * T) + 2.1070379e6 / (T * T) + 0.2226347e3 / T + 0.240390;
1267
+ double y;
1268
+ if (T >= 1667 && T <= 2222)
1269
+ y = -1.1063814 * x * x * x - 1.34811020 * x * x + 2.18555832 * x - 0.20219683;
1270
+ else if (T > 2222 && T <= 4000)
1271
+ y = -0.9549476 * x * x * x - 1.37418593 * x * x + 2.09137015 * x - 0.16748867;
1272
+ else
1273
+ y = 3.0817580 * x * x * x - 5.87338670 * x * x + 3.75112997 * x - 0.37001483;
1274
+ return std::pair<double, double>(x, y);
1275
+ };
1276
+
1277
+ double cct = xyToCCT(x, y);
1278
+ auto uv = xyToUv(x, y);
1279
+ auto bbxy = cctToXy(cct);
1280
+ auto uvbb = xyToUv(bbxy.first, bbxy.second);
1281
+ double du = uv.first - uvbb.first;
1282
+ double dv = uv.second - uvbb.second;
1283
+ double duv = std::sqrt(du * du + dv * dv);
1284
+ if (uv.second < uvbb.second)
1285
+ duv = std::abs(duv);
1286
+ else
1287
+ duv = -std::abs(duv);
1288
+
1289
+ Napi::Object res = Napi::Object::New(env);
1290
+ Napi::Object xyObj = Napi::Object::New(env);
1291
+ xyObj.Set("x", Napi::Number::New(env, x));
1292
+ xyObj.Set("y", Napi::Number::New(env, y));
1293
+ res.Set("xy", xyObj);
1294
+ res.Set("kelvin", Napi::Number::New(env, std::round(cct)));
1295
+ res.Set("duv", Napi::Number::New(env, duv));
1296
+ return res;
1297
+ }
1298
+
1299
+ // ============== 取消支持 ==============
1300
+
1301
+ Napi::Value LibRawWrapper::SetCancelFlag(const Napi::CallbackInfo &info)
1302
+ {
1303
+ Napi::Env env = info.Env();
1304
+
1305
+ processor->setCancelFlag();
1306
+ return Napi::Boolean::New(env, true);
1307
+ }
1308
+
1309
+ Napi::Value LibRawWrapper::ClearCancelFlag(const Napi::CallbackInfo &info)
1310
+ {
1311
+ Napi::Env env = info.Env();
1312
+
1313
+ processor->clearCancelFlag();
1314
+ return Napi::Boolean::New(env, true);
1315
+ }
1316
+
1317
+ // ============== 版本信息(实例方法) ==============
1318
+
1319
+ Napi::Value LibRawWrapper::Version(const Napi::CallbackInfo &info)
1320
+ {
1321
+ Napi::Env env = info.Env();
1322
+
1323
+ const char *version = processor->version();
1324
+ return Napi::String::New(env, version);
1325
+ }
1326
+
1327
+ Napi::Value LibRawWrapper::VersionNumber(const Napi::CallbackInfo &info)
1328
+ {
1329
+ Napi::Env env = info.Env();
1330
+
1331
+ int versionNum = processor->versionNumber();
1332
+
1333
+ // LibRaw 版本号编码为 XXYYZZ,其中 XX.YY.ZZ 是版本
1334
+ int major = versionNum / 10000;
1335
+ int minor = (versionNum % 10000) / 100;
1336
+ int patch = versionNum % 100;
1337
+
1338
+ Napi::Array result = Napi::Array::New(env, 3);
1339
+ result[static_cast<uint32_t>(0)] = Napi::Number::New(env, major);
1340
+ result[static_cast<uint32_t>(1)] = Napi::Number::New(env, minor);
1341
+ result[static_cast<uint32_t>(2)] = Napi::Number::New(env, patch);
1342
+
1343
+ return result;
1344
+ }
1345
+
1346
+ // ============== 错误处理 ==============
1347
+
1348
+ Napi::Value LibRawWrapper::GetLastError(const Napi::CallbackInfo &info)
1349
+ {
1350
+ Napi::Env env = info.Env();
1351
+
1352
+ // LibRaw 不存储最后一个错误,所以我们返回一个通用消息
1353
+ // In practice, errors are thrown as exceptions
1354
+ return Napi::String::New(env, "No error information available");
1355
+ }
1356
+
1357
+ Napi::Value LibRawWrapper::Strerror(const Napi::CallbackInfo &info)
1358
+ {
1359
+ Napi::Env env = info.Env();
1360
+
1361
+ if (info.Length() < 1 || !info[0].IsNumber())
1362
+ {
1363
+ Napi::TypeError::New(env, "Expected error code as number").ThrowAsJavaScriptException();
1364
+ return env.Null();
1365
+ }
1366
+
1367
+ int errorCode = info[0].As<Napi::Number>().Int32Value();
1368
+ const char *errorMsg = processor->strerror(errorCode);
1369
+ return Napi::String::New(env, errorMsg);
1370
+ }