cubic_tables.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #ifndef CORE_CUBIC_TABLES_H
  2. #define CORE_CUBIC_TABLES_H
  3. #include <array>
  4. #include <cstddef>
  5. #include "cubic_defs.h"
  6. #include "opthelpers.h"
  7. struct SIMDALIGN CubicTable {
  8. std::array<CubicCoefficients,CubicPhaseCount> mTable{};
  9. };
  10. struct GaussianTable : CubicTable { GaussianTable(); };
  11. inline const GaussianTable gGaussianFilter;
  12. struct SplineTable : CubicTable { SplineTable(); };
  13. inline const SplineTable gSplineFilter;
  14. struct CubicFilter {
  15. static constexpr std::size_t sTableBits{8};
  16. static constexpr std::size_t sTableSteps{1 << sTableBits};
  17. static constexpr std::size_t sTableMask{sTableSteps - 1};
  18. std::array<float,sTableSteps*2 + 1> mFilter{};
  19. CubicFilter();
  20. [[nodiscard]] constexpr
  21. auto getCoeff0(std::size_t i) const noexcept -> float { return mFilter[sTableSteps+i]; }
  22. [[nodiscard]] constexpr
  23. auto getCoeff1(std::size_t i) const noexcept -> float { return mFilter[i]; }
  24. [[nodiscard]] constexpr
  25. auto getCoeff2(std::size_t i) const noexcept -> float { return mFilter[sTableSteps-i]; }
  26. [[nodiscard]] constexpr
  27. auto getCoeff3(std::size_t i) const noexcept -> float { return mFilter[sTableSteps*2-i]; }
  28. };
  29. inline const CubicFilter gCubicTable;
  30. #endif /* CORE_CUBIC_TABLES_H */