🛠️🐜 Antkeeper superbuild with dependencies included https://antkeeper.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.1 KiB

  1. #include "config.h"
  2. #include "ambidefs.h"
  3. #include <cassert>
  4. namespace {
  5. constexpr std::array<float,MaxAmbiOrder+1> Ambi3DDecoderHFScale{{
  6. 1.00000000e+00f, 1.00000000e+00f
  7. }};
  8. constexpr std::array<float,MaxAmbiOrder+1> Ambi3DDecoderHFScale2O{{
  9. 7.45355990e-01f, 1.00000000e+00f, 1.00000000e+00f
  10. }};
  11. constexpr std::array<float,MaxAmbiOrder+1> Ambi3DDecoderHFScale3O{{
  12. 5.89792205e-01f, 8.79693856e-01f, 1.00000000e+00f, 1.00000000e+00f
  13. }};
  14. inline auto& GetDecoderHFScales(uint order) noexcept
  15. {
  16. if(order >= 3) return Ambi3DDecoderHFScale3O;
  17. if(order == 2) return Ambi3DDecoderHFScale2O;
  18. return Ambi3DDecoderHFScale;
  19. }
  20. } // namespace
  21. auto AmbiScale::GetHFOrderScales(const uint in_order, const uint out_order) noexcept
  22. -> std::array<float,MaxAmbiOrder+1>
  23. {
  24. std::array<float,MaxAmbiOrder+1> ret{};
  25. assert(out_order >= in_order);
  26. const auto &target = GetDecoderHFScales(out_order);
  27. const auto &input = GetDecoderHFScales(in_order);
  28. for(size_t i{0};i < in_order+1;++i)
  29. ret[i] = input[i] / target[i];
  30. return ret;
  31. }