pyanime4k 3.0.0__tar.gz → 3.0.1__tar.gz

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.

Potentially problematic release.


This version of pyanime4k might be problematic. Click here for more details.

Files changed (132) hide show
  1. {pyanime4k-3.0.0 → pyanime4k-3.0.1}/.github/workflows/wheels.yml +0 -11
  2. pyanime4k-3.0.1/.gitmodules +3 -0
  3. {pyanime4k-3.0.0/pyanime4k.egg-info → pyanime4k-3.0.1}/PKG-INFO +10 -4
  4. {pyanime4k-3.0.0 → pyanime4k-3.0.1}/README.md +3 -2
  5. {pyanime4k-3.0.0 → pyanime4k-3.0.1/pyanime4k.egg-info}/PKG-INFO +10 -4
  6. pyanime4k-3.0.1/pyanime4k.egg-info/SOURCES.txt +127 -0
  7. pyanime4k-3.0.1/pyanime4k.egg-info/requires.txt +1 -0
  8. {pyanime4k-3.0.0 → pyanime4k-3.0.1}/pyproject.toml +11 -4
  9. {pyanime4k-3.0.0 → pyanime4k-3.0.1}/setup.py +0 -11
  10. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/CMakeLists.txt +1 -2
  11. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/binding/c/include/AC/Core.h +9 -1
  12. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/binding/c/src/Binding.cpp +29 -3
  13. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cli/CMakeLists.txt +4 -0
  14. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cmake/dependency/opencl.cmake +1 -1
  15. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/CMakeLists.txt +7 -1
  16. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/include/AC/Core/Image.hpp +6 -2
  17. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/include/AC/Core/Parallel.hpp +0 -1
  18. pyanime4k-3.0.1/src/Anime4KCPP/core/src/Image.cpp +111 -0
  19. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/src/ImageIO.cpp +7 -9
  20. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/src/ImageProcess.cpp +47 -23
  21. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/src/cpu/arm/NEON.cpp +4 -5
  22. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/src/cpu/wasm/SIMD128.cpp +4 -3
  23. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/src/cpu/x86/AVX.cpp +12 -7
  24. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/src/cpu/x86/SSE.cpp +4 -3
  25. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/src/opencl/OpenCLProcessor.cpp +14 -2
  26. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/gui/languages/ac_gui_zh_CN.ts +9 -9
  27. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/readme.md +15 -4
  28. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/test/wasm/CMakeLists.txt +1 -1
  29. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/tools/benchmark/src/Benchmark.cpp +2 -4
  30. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/util/include/AC/Util/Stopwatch.hpp +12 -14
  31. pyanime4k-3.0.0/.gitmodules +0 -3
  32. pyanime4k-3.0.0/pyanime4k.egg-info/SOURCES.txt +0 -126
  33. pyanime4k-3.0.0/src/Anime4kCPP/core/src/Image.cpp +0 -78
  34. {pyanime4k-3.0.0 → pyanime4k-3.0.1}/.gitignore +0 -0
  35. {pyanime4k-3.0.0 → pyanime4k-3.0.1}/LICENSE +0 -0
  36. {pyanime4k-3.0.0 → pyanime4k-3.0.1}/pyanime4k.egg-info/dependency_links.txt +0 -0
  37. {pyanime4k-3.0.0 → pyanime4k-3.0.1}/pyanime4k.egg-info/top_level.txt +0 -0
  38. {pyanime4k-3.0.0 → pyanime4k-3.0.1}/setup.cfg +0 -0
  39. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/.gitattributes +0 -0
  40. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/.gitignore +0 -0
  41. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/LICENSE-GPLv3 +0 -0
  42. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/LICENSE-MIT +0 -0
  43. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/binding/CMakeLists.txt +0 -0
  44. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/binding/c/CMakeLists.txt +0 -0
  45. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/binding/python/CMakeLists.txt +0 -0
  46. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/binding/python/src/Binding.cpp +0 -0
  47. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cli/include/Options.hpp +0 -0
  48. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cli/include/ProgressBar.hpp +0 -0
  49. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cli/src/Main.cpp +0 -0
  50. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cli/src/Options.cpp +0 -0
  51. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cli/src/ProgressBar.cpp +0 -0
  52. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cmake/CheckCompiler.cmake +0 -0
  53. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cmake/CheckOpenCLHPP.cmake +0 -0
  54. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cmake/GenDSFilterRC.cmake +0 -0
  55. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cmake/MinifierOpenCLKernel.cmake +0 -0
  56. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cmake/dependency/avisynth.cmake +0 -0
  57. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cmake/dependency/cli11.cmake +0 -0
  58. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cmake/dependency/cuda.cmake +0 -0
  59. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cmake/dependency/directshow.cmake +0 -0
  60. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cmake/dependency/eigen3.cmake +0 -0
  61. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cmake/dependency/ffmpeg.cmake +0 -0
  62. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cmake/dependency/pybind11.cmake +0 -0
  63. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cmake/dependency/qt.cmake +0 -0
  64. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cmake/dependency/ruapu.cmake +0 -0
  65. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cmake/dependency/stb.cmake +0 -0
  66. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/cmake/dependency/vapoursynth.cmake +0 -0
  67. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/include/AC/Core/Dispatch.hpp +0 -0
  68. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/include/AC/Core/Model/ACNet.hpp +0 -0
  69. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/include/AC/Core/Model/ARNet.hpp +0 -0
  70. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/include/AC/Core/Model/Base.hpp +0 -0
  71. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/include/AC/Core/Model/Param/ACNet.p +0 -0
  72. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/include/AC/Core/Model/Param/ARNet.p +0 -0
  73. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/include/AC/Core/Model/Param.hpp +0 -0
  74. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/include/AC/Core/Model.hpp +0 -0
  75. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/include/AC/Core/Processor.hpp +0 -0
  76. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/include/AC/Core/Util.hpp +0 -0
  77. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/include/AC/Core.hpp +0 -0
  78. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/include/AC/Specs.hpp +0 -0
  79. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/src/Model.cpp +0 -0
  80. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/src/Processor.cpp +0 -0
  81. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/src/cpu/CPUProcessor.cpp +0 -0
  82. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/src/cpu/Dispatch.cpp +0 -0
  83. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/src/cpu/Eigen3.cpp +0 -0
  84. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/src/cpu/Generic.cpp +0 -0
  85. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/src/cuda/CUDAProcessor.cpp +0 -0
  86. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/src/cuda/Kernel.cu +0 -0
  87. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/core/src/opencl/Kernel.cl +0 -0
  88. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/filter/CMakeLists.txt +0 -0
  89. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/filter/avisynth/CMakeLists.txt +0 -0
  90. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/filter/avisynth/src/Filter.cpp +0 -0
  91. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/filter/directshow/CMakeLists.txt +0 -0
  92. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/filter/directshow/src/Filter.cpp +0 -0
  93. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/filter/vapoursynth/CMakeLists.txt +0 -0
  94. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/filter/vapoursynth/src/Filter.cpp +0 -0
  95. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/gui/CMakeLists.txt +0 -0
  96. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/gui/include/Config.hpp +0 -0
  97. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/gui/include/Logger.hpp +0 -0
  98. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/gui/include/MainWindow.hpp +0 -0
  99. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/gui/include/Upscaler.hpp +0 -0
  100. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/gui/src/Config.cpp +0 -0
  101. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/gui/src/Logger.cpp +0 -0
  102. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/gui/src/MainWindow.cpp +0 -0
  103. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/gui/src/QtMain.cpp +0 -0
  104. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/gui/src/Upscaler.cpp +0 -0
  105. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/gui/ui/MainWindow.ui +0 -0
  106. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/images/Logo.ico +0 -0
  107. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/images/Logo.png +0 -0
  108. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/test/CMakeLists.txt +0 -0
  109. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/test/util/CMakeLists.txt +0 -0
  110. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/test/util/src/Channel.cpp +0 -0
  111. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/test/video/CMakeLists.txt +0 -0
  112. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/test/video/src/Resize.cpp +0 -0
  113. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/test/wasm/src/Web.cpp +0 -0
  114. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/tools/CMakeLists.txt +0 -0
  115. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/tools/benchmark/CMakeLists.txt +0 -0
  116. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/util/CMakeLists.txt +0 -0
  117. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/util/include/AC/Util/Channel.hpp +0 -0
  118. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/util/include/AC/Util/Defer.hpp +0 -0
  119. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/util/include/AC/Util/ThreadLocal.hpp +0 -0
  120. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/util/include/AC/Util/ThreadPool.hpp +0 -0
  121. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/video/CMakeLists.txt +0 -0
  122. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/video/include/AC/Video/Filter.hpp +0 -0
  123. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/video/include/AC/Video/Pipeline.hpp +0 -0
  124. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/video/include/AC/Video.hpp +0 -0
  125. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/video/src/Filter.cpp +0 -0
  126. {pyanime4k-3.0.0/src/Anime4kCPP → pyanime4k-3.0.1/src/Anime4KCPP}/video/src/Pipeline.cpp +0 -0
  127. {pyanime4k-3.0.0 → pyanime4k-3.0.1}/src/pyanime4k/__init__.py +0 -0
  128. {pyanime4k-3.0.0 → pyanime4k-3.0.1}/src/pyanime4k/image_io.py +0 -0
  129. {pyanime4k-3.0.0 → pyanime4k-3.0.1}/src/pyanime4k/info.py +0 -0
  130. {pyanime4k-3.0.0 → pyanime4k-3.0.1}/src/pyanime4k/processor.py +0 -0
  131. {pyanime4k-3.0.0 → pyanime4k-3.0.1}/src/pyanime4k/pyac/__init__.py +0 -0
  132. {pyanime4k-3.0.0 → pyanime4k-3.0.1}/src/pyanime4k/upscale.py +0 -0
@@ -1,13 +1,5 @@
1
1
  name: Build wheels
2
2
  on:
3
- push:
4
- branches: [master]
5
- paths:
6
- - 'src/**'
7
- pull_request:
8
- branches: [master]
9
- paths:
10
- - 'src/**'
11
3
  release:
12
4
  types: [published]
13
5
  permissions:
@@ -61,9 +53,6 @@ jobs:
61
53
  with:
62
54
  submodules: true
63
55
 
64
- - name: clone Anime4KCPP
65
- run: mkdir -p src/Anime4KCPP && git clone https://github.com/TianZerL/Anime4KCPP.git src/Anime4KCPP
66
-
67
56
  - name: Build sdist
68
57
  run: pipx run build --sdist
69
58
 
@@ -0,0 +1,3 @@
1
+ [submodule "src/Anime4KCPP"]
2
+ path = src/Anime4KCPP
3
+ url = https://github.com/TianZerL/Anime4KCPP.git
@@ -1,12 +1,17 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyanime4k
3
- Version: 3.0.0
3
+ Version: 3.0.1
4
4
  License: MIT
5
+ Classifier: Programming Language :: Python :: 3
6
+ Classifier: Operating System :: Microsoft :: Windows
7
+ Classifier: Operating System :: MacOS
8
+ Classifier: Operating System :: POSIX
9
+ Classifier: Operating System :: Unix
5
10
  Requires-Python: >=3.8
6
11
  Description-Content-Type: text/markdown
7
12
  License-File: LICENSE
13
+ Requires-Dist: numpy
8
14
  Dynamic: license-file
9
- Dynamic: requires-python
10
15
 
11
16
  # PyAnime4K
12
17
 
@@ -21,9 +26,10 @@ pip install pyanime4k
21
26
  You can also build the wheel by yourself.
22
27
  ```shell
23
28
  # sudo apt install ocl-icd-opencl-dev cmake build-essential
24
- get clone https://github.com/TianZerL/pyanime4k.git
29
+ get clone --recurse-submodules https://github.com/TianZerL/pyanime4k.git
25
30
  cd pyanime4k
26
- python setup.py bdist_wheel
31
+ pip install scikit-build
32
+ python setup.py bdist_wheel
27
33
  ```
28
34
 
29
35
  # Usages
@@ -11,9 +11,10 @@ pip install pyanime4k
11
11
  You can also build the wheel by yourself.
12
12
  ```shell
13
13
  # sudo apt install ocl-icd-opencl-dev cmake build-essential
14
- get clone https://github.com/TianZerL/pyanime4k.git
14
+ get clone --recurse-submodules https://github.com/TianZerL/pyanime4k.git
15
15
  cd pyanime4k
16
- python setup.py bdist_wheel
16
+ pip install scikit-build
17
+ python setup.py bdist_wheel
17
18
  ```
18
19
 
19
20
  # Usages
@@ -1,12 +1,17 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyanime4k
3
- Version: 3.0.0
3
+ Version: 3.0.1
4
4
  License: MIT
5
+ Classifier: Programming Language :: Python :: 3
6
+ Classifier: Operating System :: Microsoft :: Windows
7
+ Classifier: Operating System :: MacOS
8
+ Classifier: Operating System :: POSIX
9
+ Classifier: Operating System :: Unix
5
10
  Requires-Python: >=3.8
6
11
  Description-Content-Type: text/markdown
7
12
  License-File: LICENSE
13
+ Requires-Dist: numpy
8
14
  Dynamic: license-file
9
- Dynamic: requires-python
10
15
 
11
16
  # PyAnime4K
12
17
 
@@ -21,9 +26,10 @@ pip install pyanime4k
21
26
  You can also build the wheel by yourself.
22
27
  ```shell
23
28
  # sudo apt install ocl-icd-opencl-dev cmake build-essential
24
- get clone https://github.com/TianZerL/pyanime4k.git
29
+ get clone --recurse-submodules https://github.com/TianZerL/pyanime4k.git
25
30
  cd pyanime4k
26
- python setup.py bdist_wheel
31
+ pip install scikit-build
32
+ python setup.py bdist_wheel
27
33
  ```
28
34
 
29
35
  # Usages
@@ -0,0 +1,127 @@
1
+ .gitignore
2
+ .gitmodules
3
+ LICENSE
4
+ README.md
5
+ pyproject.toml
6
+ setup.py
7
+ .github/workflows/wheels.yml
8
+ pyanime4k.egg-info/PKG-INFO
9
+ pyanime4k.egg-info/SOURCES.txt
10
+ pyanime4k.egg-info/dependency_links.txt
11
+ pyanime4k.egg-info/requires.txt
12
+ pyanime4k.egg-info/top_level.txt
13
+ src/Anime4KCPP/.gitattributes
14
+ src/Anime4KCPP/.gitignore
15
+ src/Anime4KCPP/CMakeLists.txt
16
+ src/Anime4KCPP/LICENSE-GPLv3
17
+ src/Anime4KCPP/LICENSE-MIT
18
+ src/Anime4KCPP/readme.md
19
+ src/Anime4KCPP/binding/CMakeLists.txt
20
+ src/Anime4KCPP/binding/c/CMakeLists.txt
21
+ src/Anime4KCPP/binding/c/include/AC/Core.h
22
+ src/Anime4KCPP/binding/c/src/Binding.cpp
23
+ src/Anime4KCPP/binding/python/CMakeLists.txt
24
+ src/Anime4KCPP/binding/python/src/Binding.cpp
25
+ src/Anime4KCPP/cli/CMakeLists.txt
26
+ src/Anime4KCPP/cli/include/Options.hpp
27
+ src/Anime4KCPP/cli/include/ProgressBar.hpp
28
+ src/Anime4KCPP/cli/src/Main.cpp
29
+ src/Anime4KCPP/cli/src/Options.cpp
30
+ src/Anime4KCPP/cli/src/ProgressBar.cpp
31
+ src/Anime4KCPP/cmake/CheckCompiler.cmake
32
+ src/Anime4KCPP/cmake/CheckOpenCLHPP.cmake
33
+ src/Anime4KCPP/cmake/GenDSFilterRC.cmake
34
+ src/Anime4KCPP/cmake/MinifierOpenCLKernel.cmake
35
+ src/Anime4KCPP/cmake/dependency/avisynth.cmake
36
+ src/Anime4KCPP/cmake/dependency/cli11.cmake
37
+ src/Anime4KCPP/cmake/dependency/cuda.cmake
38
+ src/Anime4KCPP/cmake/dependency/directshow.cmake
39
+ src/Anime4KCPP/cmake/dependency/eigen3.cmake
40
+ src/Anime4KCPP/cmake/dependency/ffmpeg.cmake
41
+ src/Anime4KCPP/cmake/dependency/opencl.cmake
42
+ src/Anime4KCPP/cmake/dependency/pybind11.cmake
43
+ src/Anime4KCPP/cmake/dependency/qt.cmake
44
+ src/Anime4KCPP/cmake/dependency/ruapu.cmake
45
+ src/Anime4KCPP/cmake/dependency/stb.cmake
46
+ src/Anime4KCPP/cmake/dependency/vapoursynth.cmake
47
+ src/Anime4KCPP/core/CMakeLists.txt
48
+ src/Anime4KCPP/core/include/AC/Core.hpp
49
+ src/Anime4KCPP/core/include/AC/Specs.hpp
50
+ src/Anime4KCPP/core/include/AC/Core/Dispatch.hpp
51
+ src/Anime4KCPP/core/include/AC/Core/Image.hpp
52
+ src/Anime4KCPP/core/include/AC/Core/Model.hpp
53
+ src/Anime4KCPP/core/include/AC/Core/Parallel.hpp
54
+ src/Anime4KCPP/core/include/AC/Core/Processor.hpp
55
+ src/Anime4KCPP/core/include/AC/Core/Util.hpp
56
+ src/Anime4KCPP/core/include/AC/Core/Model/ACNet.hpp
57
+ src/Anime4KCPP/core/include/AC/Core/Model/ARNet.hpp
58
+ src/Anime4KCPP/core/include/AC/Core/Model/Base.hpp
59
+ src/Anime4KCPP/core/include/AC/Core/Model/Param.hpp
60
+ src/Anime4KCPP/core/include/AC/Core/Model/Param/ACNet.p
61
+ src/Anime4KCPP/core/include/AC/Core/Model/Param/ARNet.p
62
+ src/Anime4KCPP/core/src/Image.cpp
63
+ src/Anime4KCPP/core/src/ImageIO.cpp
64
+ src/Anime4KCPP/core/src/ImageProcess.cpp
65
+ src/Anime4KCPP/core/src/Model.cpp
66
+ src/Anime4KCPP/core/src/Processor.cpp
67
+ src/Anime4KCPP/core/src/cpu/CPUProcessor.cpp
68
+ src/Anime4KCPP/core/src/cpu/Dispatch.cpp
69
+ src/Anime4KCPP/core/src/cpu/Eigen3.cpp
70
+ src/Anime4KCPP/core/src/cpu/Generic.cpp
71
+ src/Anime4KCPP/core/src/cpu/arm/NEON.cpp
72
+ src/Anime4KCPP/core/src/cpu/wasm/SIMD128.cpp
73
+ src/Anime4KCPP/core/src/cpu/x86/AVX.cpp
74
+ src/Anime4KCPP/core/src/cpu/x86/SSE.cpp
75
+ src/Anime4KCPP/core/src/cuda/CUDAProcessor.cpp
76
+ src/Anime4KCPP/core/src/cuda/Kernel.cu
77
+ src/Anime4KCPP/core/src/opencl/Kernel.cl
78
+ src/Anime4KCPP/core/src/opencl/OpenCLProcessor.cpp
79
+ src/Anime4KCPP/filter/CMakeLists.txt
80
+ src/Anime4KCPP/filter/avisynth/CMakeLists.txt
81
+ src/Anime4KCPP/filter/avisynth/src/Filter.cpp
82
+ src/Anime4KCPP/filter/directshow/CMakeLists.txt
83
+ src/Anime4KCPP/filter/directshow/src/Filter.cpp
84
+ src/Anime4KCPP/filter/vapoursynth/CMakeLists.txt
85
+ src/Anime4KCPP/filter/vapoursynth/src/Filter.cpp
86
+ src/Anime4KCPP/gui/CMakeLists.txt
87
+ src/Anime4KCPP/gui/include/Config.hpp
88
+ src/Anime4KCPP/gui/include/Logger.hpp
89
+ src/Anime4KCPP/gui/include/MainWindow.hpp
90
+ src/Anime4KCPP/gui/include/Upscaler.hpp
91
+ src/Anime4KCPP/gui/languages/ac_gui_zh_CN.ts
92
+ src/Anime4KCPP/gui/src/Config.cpp
93
+ src/Anime4KCPP/gui/src/Logger.cpp
94
+ src/Anime4KCPP/gui/src/MainWindow.cpp
95
+ src/Anime4KCPP/gui/src/QtMain.cpp
96
+ src/Anime4KCPP/gui/src/Upscaler.cpp
97
+ src/Anime4KCPP/gui/ui/MainWindow.ui
98
+ src/Anime4KCPP/images/Logo.ico
99
+ src/Anime4KCPP/images/Logo.png
100
+ src/Anime4KCPP/test/CMakeLists.txt
101
+ src/Anime4KCPP/test/util/CMakeLists.txt
102
+ src/Anime4KCPP/test/util/src/Channel.cpp
103
+ src/Anime4KCPP/test/video/CMakeLists.txt
104
+ src/Anime4KCPP/test/video/src/Resize.cpp
105
+ src/Anime4KCPP/test/wasm/CMakeLists.txt
106
+ src/Anime4KCPP/test/wasm/src/Web.cpp
107
+ src/Anime4KCPP/tools/CMakeLists.txt
108
+ src/Anime4KCPP/tools/benchmark/CMakeLists.txt
109
+ src/Anime4KCPP/tools/benchmark/src/Benchmark.cpp
110
+ src/Anime4KCPP/util/CMakeLists.txt
111
+ src/Anime4KCPP/util/include/AC/Util/Channel.hpp
112
+ src/Anime4KCPP/util/include/AC/Util/Defer.hpp
113
+ src/Anime4KCPP/util/include/AC/Util/Stopwatch.hpp
114
+ src/Anime4KCPP/util/include/AC/Util/ThreadLocal.hpp
115
+ src/Anime4KCPP/util/include/AC/Util/ThreadPool.hpp
116
+ src/Anime4KCPP/video/CMakeLists.txt
117
+ src/Anime4KCPP/video/include/AC/Video.hpp
118
+ src/Anime4KCPP/video/include/AC/Video/Filter.hpp
119
+ src/Anime4KCPP/video/include/AC/Video/Pipeline.hpp
120
+ src/Anime4KCPP/video/src/Filter.cpp
121
+ src/Anime4KCPP/video/src/Pipeline.cpp
122
+ src/pyanime4k/__init__.py
123
+ src/pyanime4k/image_io.py
124
+ src/pyanime4k/info.py
125
+ src/pyanime4k/processor.py
126
+ src/pyanime4k/upscale.py
127
+ src/pyanime4k/pyac/__init__.py
@@ -0,0 +1 @@
1
+ numpy
@@ -1,17 +1,24 @@
1
1
  [build-system]
2
- requires = ["setuptools>=42", "scikit-build>=0.13", "cmake>=3.19", "numpy"]
2
+ requires = ["setuptools>=42", "scikit-build>=0.13", "cmake>=3.19"]
3
3
  build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pyanime4k"
7
- version = "3.0.0"
7
+ version = "3.0.1"
8
8
  license = {text = "MIT"}
9
9
  requires-python = ">=3.8"
10
10
  readme = "README.md"
11
+ dependencies = ["numpy"]
12
+ classifiers = [
13
+ "Programming Language :: Python :: 3",
14
+ "Operating System :: Microsoft :: Windows",
15
+ "Operating System :: MacOS",
16
+ "Operating System :: POSIX",
17
+ "Operating System :: Unix",
18
+ ]
11
19
 
12
20
  [tool.cibuildwheel]
13
21
  skip = ["pp*", "*win32", "*i686", "*musllinux*"]
14
22
 
15
23
  [tool.cibuildwheel.linux]
16
- before-all = "yum install -y ocl-icd ocl-icd-devel && mkdir -p src/Anime4KCPP && git clone https://github.com/TianZerL/Anime4KCPP.git src/Anime4KCPP"
17
- test-command = "echo 'installed'"
24
+ before-all = "yum install -y ocl-icd ocl-icd-devel"
@@ -28,19 +28,8 @@ def main():
28
28
  pyac_cmake_args.append("-DAC_CORE_WITH_CUDA=ON")
29
29
 
30
30
  setup(
31
- name="pyanime4k",
32
- version="3.0.0",
33
31
  packages=["pyanime4k", "pyanime4k.pyac"],
34
32
  package_dir={"pyanime4k": "src/pyanime4k", "pyanime4k.pyac": "src/pyanime4k/pyac"},
35
- license="MIT",
36
- python_requires=">=3.8",
37
- classifiers=[
38
- "Programming Language :: Python :: 3",
39
- "Operating System :: Microsoft :: Windows",
40
- "Operating System :: MacOS",
41
- "Operating System :: POSIX",
42
- "Operating System :: Unix",
43
- ],
44
33
  cmake_args=pyac_cmake_args,
45
34
  cmake_source_dir="src/Anime4KCPP",
46
35
  cmake_install_dir="src/pyanime4k",
@@ -37,7 +37,7 @@ option(AC_CORE_WITH_WASM_SIMD128 "build core with wasm simd128" ${AC_COMPILER_SU
37
37
  option(AC_CORE_WITH_OPENCL "build core with opencl" OFF)
38
38
  option(AC_CORE_WITH_CUDA "build core with cuda" OFF)
39
39
  option(AC_CORE_ENABLE_FAST_MATH "enable fast math for core" OFF)
40
- option(AC_CORE_ENABLE_IMAGE_IO "enable image file read and write for core" ON)
40
+ option(AC_CORE_DISABLE_IMAGE_IO "disable image file read and write for core" OFF)
41
41
  option(AC_BUILD_CLI "build cli" ON)
42
42
  option(AC_BUILD_GUI "build gui" OFF)
43
43
  option(AC_BUILD_VIDEO "build video module" OFF)
@@ -61,7 +61,6 @@ if(AC_PRESET_RELEASE)
61
61
  set(AC_CORE_WITH_OPENCL ON)
62
62
  set(AC_CORE_WITH_CUDA ON)
63
63
  set(AC_CORE_ENABLE_FAST_MATH ON)
64
- set(AC_CORE_ENABLE_IMAGE_IO ON)
65
64
  set(AC_BUILD_CLI ON)
66
65
  set(AC_BUILD_GUI ON)
67
66
  set(AC_BUILD_VIDEO ON)
@@ -38,7 +38,13 @@ enum ac_imread_flag
38
38
 
39
39
  CAC_API ac_image* ac_image_create(int w, int h, int c, int element_type, void* data, int stride);
40
40
  CAC_API ac_image* ac_image_create_empty(void);
41
+ CAC_API ac_image* ac_image_from(int w, int h, int c, int element_type, const void* data, int stride);
42
+ CAC_API ac_image* ac_image_clone(const ac_image* image);
41
43
  CAC_API void ac_image_destroy(ac_image* image);
44
+ CAC_API void ac_image_data_create(ac_image* image, int w, int h, int c, int element_type, int stride);
45
+ CAC_API void ac_image_map(ac_image* image, int w, int h, int c, int element_type, void* data, int stride);
46
+ CAC_API void ac_image_data_from(ac_image* image, int w, int h, int c, int element_type, const void* data, int stride);
47
+ CAC_API void ac_image_to(const ac_image* image, void* data, int stride);
42
48
  CAC_API int ac_image_width(const ac_image* image);
43
49
  CAC_API int ac_image_height(const ac_image* image);
44
50
  CAC_API int ac_image_channels(const ac_image* image);
@@ -69,8 +75,10 @@ CAC_API const char* ac_processor_info(int processor_type);
69
75
  CAC_API int ac_processor_type(const char* processor_type_name);
70
76
  CAC_API const char* ac_processor_type_name(int processor_type);
71
77
 
72
- CAC_API void ac_imread(const char* filename, int flag, ac_image* image);
78
+ #ifndef AC_CORE_DISABLE_IMAGE_IO
79
+ CAC_API ac_image* ac_imread(const char* filename, int flag);
73
80
  CAC_API int ac_imwrite(const char* filename, const ac_image* image);
81
+ #endif
74
82
 
75
83
  CAC_API void ac_resize(const ac_image* src, ac_image* dst, double fx, double fy);
76
84
  CAC_API void ac_rgb2yuv(const ac_image* rgb, ac_image* yuv);
@@ -21,10 +21,36 @@ ac_image* ac_image_create_empty(void)
21
21
  {
22
22
  return new ac_image{};
23
23
  }
24
+ ac_image* ac_image_from(const int w, const int h, const int c, const int element_type, const void* const data, const int stride)
25
+ {
26
+ auto image = new ac_image{};
27
+ image->object.from(w, h, c, element_type, data, stride);
28
+ return image;
29
+ }
30
+ ac_image* ac_image_clone(const ac_image* const image)
31
+ {
32
+ return new ac_image{ image->object.clone() };
33
+ }
24
34
  void ac_image_destroy(ac_image* const image)
25
35
  {
26
36
  delete image;
27
37
  }
38
+ void ac_image_data_create(ac_image* image, int w, int h, int c, int element_type, int stride)
39
+ {
40
+ image->object.create(w, h, c, element_type, stride);
41
+ }
42
+ void ac_image_map(ac_image* image, int w, int h, int c, int element_type, void* data, int stride)
43
+ {
44
+ image->object.map(w, h, c, element_type, data, stride);
45
+ }
46
+ void ac_image_data_from(ac_image* image, int w, int h, int c, int element_type, const void* data, int stride)
47
+ {
48
+ image->object.from(w, h, c, element_type, data, stride);
49
+ }
50
+ void ac_image_to(const ac_image* const image, void* const data, const int stride)
51
+ {
52
+ image->object.to(data, stride);
53
+ }
28
54
  int ac_image_width(const ac_image* const image)
29
55
  {
30
56
  return image->object.width();
@@ -149,10 +175,10 @@ const char* ac_processor_type_name(const int processor_type)
149
175
  return ac::core::Processor::type(processor_type);
150
176
  }
151
177
 
152
- #ifdef AC_CORE_ENABLE_IMAGE_IO
153
- void ac_imread(const char* const filename, const int flag, ac_image* const image)
178
+ #ifndef AC_CORE_DISABLE_IMAGE_IO
179
+ ac_image* ac_imread(const char* const filename, const int flag)
154
180
  {
155
- image->object = ac::core::imread(filename, flag);
181
+ return new ac_image{ ac::core::imread(filename, flag) };
156
182
  }
157
183
  int ac_imwrite(const char* const filename, const ac_image* const image)
158
184
  {
@@ -26,6 +26,10 @@ target_compile_definitions(ac_cli PRIVATE
26
26
  $<$<TARGET_EXISTS:ac_video>:AC_CLI_ENABLE_VIDEO>
27
27
  )
28
28
 
29
+ if(EMSCRIPTEN)
30
+ target_link_options(ac_cli PRIVATE -sNODERAWFS=1) # allow access to files on disk in NodeJS
31
+ endif()
32
+
29
33
  ac_check_enable_static_crt(ac_cli)
30
34
 
31
35
  install(
@@ -48,7 +48,7 @@ if(NOT TARGET dep::opencl)
48
48
  message(STATUS "dep: opencl target version ${dep_opencl_TARGET_VERSION}.")
49
49
  target_compile_definitions(dep_opencl INTERFACE
50
50
  CL_HPP_TARGET_OPENCL_VERSION=${dep_opencl_TARGET_VERSION}
51
- CL_HPP_MINIMUM_OPENCL_VERSION=110
51
+ CL_HPP_MINIMUM_OPENCL_VERSION=110 # set minimum version 110 to prevent compilation errors in certain versions of OpenCL HPP
52
52
  )
53
53
  add_library(dep::opencl ALIAS dep_opencl)
54
54
  endif()
@@ -116,7 +116,9 @@ target_compile_definitions(ac PUBLIC
116
116
  $<$<BOOL:${AC_CORE_WITH_WASM_SIMD128}>:AC_CORE_WITH_WASM_SIMD128>
117
117
  $<$<BOOL:${AC_CORE_WITH_OPENCL}>:AC_CORE_WITH_OPENCL>
118
118
  $<$<BOOL:${AC_CORE_WITH_CUDA}>:AC_CORE_WITH_CUDA>
119
- $<$<BOOL:${AC_CORE_ENABLE_IMAGE_IO}>:AC_CORE_ENABLE_IMAGE_IO>
119
+ $<$<BOOL:${AC_CORE_DISABLE_IMAGE_IO}>:AC_CORE_DISABLE_IMAGE_IO>
120
+
121
+ AC_CORE_MALLOC_ALIGN=$<IF:$<BOOL:${AC_CORE_WITH_AVX}>,32,16>
120
122
 
121
123
  AC_CORE_VERSION_STR="${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
122
124
  AC_CORE_FEATURES="$<JOIN:${AC_CORE_FEATURE_LIST}, >"
@@ -130,6 +132,10 @@ if(AC_CORE_ENABLE_FAST_MATH)
130
132
  endif()
131
133
  endif()
132
134
 
135
+ if(EMSCRIPTEN)
136
+ target_link_options(ac PUBLIC -sALLOW_MEMORY_GROWTH=1 -sINITIAL_MEMORY=64MB)
137
+ endif()
138
+
133
139
  ac_check_disable_flags(ac)
134
140
  ac_check_enable_static_crt(ac)
135
141
  ac_check_disable_pic(ac)
@@ -95,7 +95,7 @@ namespace ac::core
95
95
  };
96
96
 
97
97
  AC_EXPORT Image imdecode(const void* buffer, int size, int flag) noexcept;
98
- #ifdef AC_CORE_ENABLE_IMAGE_IO
98
+ #ifndef AC_CORE_DISABLE_IMAGE_IO
99
99
  AC_EXPORT Image imread(const char* filename, int flag) noexcept;
100
100
  AC_EXPORT bool imwrite(const char* filename, const Image& image) noexcept;
101
101
  #endif
@@ -116,7 +116,7 @@ public:
116
116
  public:
117
117
  AC_EXPORT Image() noexcept;
118
118
  AC_EXPORT Image(int w, int h, int c, ElementType elementType, int stride = 0);
119
- AC_EXPORT Image(int w, int h, int c, ElementType elementType, void* data, int stride);
119
+ AC_EXPORT Image(int w, int h, int c, ElementType elementType, void* data, int stride = 0);
120
120
  AC_EXPORT Image(const Image&) noexcept;
121
121
  AC_EXPORT Image(Image&&) noexcept;
122
122
  AC_EXPORT ~Image() noexcept;
@@ -124,6 +124,10 @@ public:
124
124
  AC_EXPORT Image& operator=(Image&&) noexcept;
125
125
 
126
126
  AC_EXPORT void create(int w, int h, int c, ElementType elementType, int stride = 0);
127
+ AC_EXPORT void map(int w, int h, int c, ElementType elementType, void* data, int stride = 0) noexcept;
128
+ AC_EXPORT void from(int w, int h, int c, ElementType elementType, const void* data, int stride = 0);
129
+ AC_EXPORT void to(void* data, int stride = 0) const noexcept;
130
+ AC_EXPORT Image clone() const;
127
131
 
128
132
  public:
129
133
  int width() const noexcept { return w; }
@@ -4,7 +4,6 @@
4
4
  #if defined(AC_CORE_PARALLEL_PPL)
5
5
  # include <ppl.h>
6
6
  #elif defined(AC_CORE_PARALLEL_OPENMP)
7
- # include <omp.h>
8
7
  #else
9
8
  # include "AC/Util/ThreadPool.hpp"
10
9
  #endif
@@ -0,0 +1,111 @@
1
+ #include <cstddef>
2
+ #include <cstdlib>
3
+ #include <cstring>
4
+
5
+ #include "AC/Core/Image.hpp"
6
+ #include "AC/Core/Util.hpp"
7
+
8
+ #ifndef AC_CORE_MALLOC_ALIGN
9
+ # define AC_CORE_MALLOC_ALIGN 32
10
+ #endif
11
+ #ifndef AC_CORE_STRIDE_ALIGN
12
+ # define AC_CORE_STRIDE_ALIGN 4
13
+ #endif
14
+
15
+ namespace ac::core::detail
16
+ {
17
+ template <typename T>
18
+ inline constexpr T* alignPtr(T* const ptr, const int n) noexcept
19
+ {
20
+ return reinterpret_cast<T*>(align(reinterpret_cast<std::uintptr_t>(ptr), n));
21
+ }
22
+
23
+ inline static void* alignedAlloc(const std::size_t size) noexcept
24
+ {
25
+ auto buffer = static_cast<void**>(std::malloc(size + sizeof(void*) + AC_CORE_MALLOC_ALIGN));
26
+ if (!buffer) return nullptr;
27
+ void** ptr = alignPtr(buffer + 1, AC_CORE_MALLOC_ALIGN);
28
+ ptr[-1] = static_cast<void*>(buffer);
29
+ return ptr;
30
+ }
31
+ inline static void alignedFree(void* const ptr) noexcept
32
+ {
33
+ if (ptr) std::free(static_cast<void**>(ptr)[-1]);
34
+ }
35
+ }
36
+
37
+ struct ac::core::Image::ImageData
38
+ {
39
+ void* data;
40
+
41
+ ImageData(const int size) noexcept : data(detail::alignedAlloc(size)) {}
42
+ ~ImageData() noexcept
43
+ {
44
+ detail::alignedFree(data);
45
+ }
46
+ };
47
+
48
+ ac::core::Image::Image() noexcept : Image(0, 0, 0, UInt8, nullptr, 0) {}
49
+ ac::core::Image::Image(const int w, const int h, const int c, const ElementType elementType, const int stride) : Image(w, h, c, elementType, nullptr, stride) {}
50
+ ac::core::Image::Image(const int w, const int h, const int c, const ElementType elementType, void* const data, const int stride) :
51
+ w(0), h(0), c(0), elementType(UInt8), pitch(0), pixels(nullptr), dptr(nullptr)
52
+ {
53
+ if (data) map(w, h, c, elementType, data, stride);
54
+ else create(w, h, c, elementType, stride);
55
+ }
56
+ ac::core::Image::Image(const Image&) noexcept = default;
57
+ ac::core::Image::Image(Image&&) noexcept = default;
58
+ ac::core::Image::~Image() noexcept = default;
59
+ ac::core::Image& ac::core::Image::operator=(const Image&) noexcept = default;
60
+ ac::core::Image& ac::core::Image::operator=(Image&&) noexcept = default;
61
+
62
+ void ac::core::Image::create(const int w, const int h, const int c, const ElementType elementType, const int stride)
63
+ {
64
+ int lineSize = w * c * (elementType & 0xff);
65
+ if (!(h > 0 && lineSize > 0)) return;
66
+ int pitch = stride >= lineSize ? stride : align(lineSize, AC_CORE_STRIDE_ALIGN);
67
+ int size = h * pitch;
68
+ this->w = w;
69
+ this->h = h;
70
+ this->c = c;
71
+ this->elementType = elementType;
72
+ this->pitch = pitch;
73
+ this->dptr = std::make_shared<ImageData>(size);
74
+ this->pixels = this->dptr->data;
75
+ }
76
+ void ac::core::Image::map(const int w, const int h, const int c, const ElementType elementType, void* const data, const int stride) noexcept
77
+ {
78
+ int lineSize = w * c * (elementType & 0xff);
79
+ if (!(h > 0 && lineSize > 0) || !data) return;
80
+ int pitch = stride >= lineSize ? stride : lineSize;
81
+ this->w = w;
82
+ this->h = h;
83
+ this->c = c;
84
+ this->elementType = elementType;
85
+ this->pitch = pitch;
86
+ this->dptr = nullptr;
87
+ this->pixels = data;
88
+ }
89
+ void ac::core::Image::from(const int w, const int h, const int c, const ElementType elementType, const void* const data, const int stride)
90
+ {
91
+ int lineSize = w * c * (elementType & 0xff);
92
+ if (!(h > 0 && lineSize > 0) || !data) return;
93
+ int pitch = stride >= lineSize ? stride : lineSize;
94
+ create(w, h, c, elementType);
95
+ auto src = static_cast<const std::uint8_t*>(data);
96
+ for (int i = 0; i < h; i++) std::memcpy(line(i), src + i * pitch, lineSize);
97
+ }
98
+ void ac::core::Image::to(void* const data, const int stride) const noexcept
99
+ {
100
+ int lineSize = width() * pixelSize();
101
+ if (!(height() > 0 && lineSize > 0) || !data) return;
102
+ int pitch = stride >= lineSize ? stride : lineSize;
103
+ auto dst = static_cast<std::uint8_t*>(data);
104
+ for (int i = 0; i < height(); i++) std::memcpy(dst + i * pitch, line(i), lineSize);
105
+ }
106
+ ac::core::Image ac::core::Image::clone() const
107
+ {
108
+ Image dst{};
109
+ dst.from(width(), height(), channels(), type(), ptr(), stride());
110
+ return dst;
111
+ }
@@ -2,15 +2,15 @@
2
2
  #include <cstdint>
3
3
  #include <cstring>
4
4
 
5
- #ifndef AC_CORE_ENABLE_IMAGE_IO
5
+ #ifdef AC_CORE_DISABLE_IMAGE_IO
6
6
  # define STBI_NO_STDIO
7
- # define STBI_WRITE_NO_STDIO
7
+ #else
8
+ # define STB_IMAGE_WRITE_IMPLEMENTATION
9
+ # include "stb_image_write.h"
8
10
  #endif
9
11
 
10
12
  #define STB_IMAGE_IMPLEMENTATION
11
13
  #include "stb_image.h"
12
- #define STB_IMAGE_WRITE_IMPLEMENTATION
13
- #include "stb_image_write.h"
14
14
 
15
15
  #include "AC/Core/Image.hpp"
16
16
 
@@ -21,14 +21,13 @@ ac::core::Image ac::core::imdecode(const void* const buffer, const int size, con
21
21
  std::uint8_t* data = stbi_load_from_memory(static_cast<const std::uint8_t*>(buffer), size, &w, &h, &c, flag);
22
22
  if (data)
23
23
  {
24
- image.create(w, h, c, ac::core::Image::UInt8);
25
- std::memcpy(image.ptr(), data, image.size());
24
+ image.from(w, h, c, ac::core::Image::UInt8, data);
26
25
  stbi_image_free(data);
27
26
  }
28
27
  return image;
29
28
  }
30
29
 
31
- #ifdef AC_CORE_ENABLE_IMAGE_IO
30
+ #ifndef AC_CORE_DISABLE_IMAGE_IO
32
31
  ac::core::Image ac::core::imread(const char* const filename, const int flag) noexcept
33
32
  {
34
33
  Image image{};
@@ -36,8 +35,7 @@ ac::core::Image ac::core::imread(const char* const filename, const int flag) noe
36
35
  std::uint8_t* data = stbi_load(filename, &w, &h, &c, flag);
37
36
  if (data)
38
37
  {
39
- image.create(w, h, c, ac::core::Image::UInt8);
40
- std::memcpy(image.ptr(), data, image.size());
38
+ image.from(w, h, c, ac::core::Image::UInt8, data);
41
39
  stbi_image_free(data);
42
40
  }
43
41
  return image;