From 440ce71dcedb39e827660d0925b6cc2046c6d0f0 Mon Sep 17 00:00:00 2001 From: Chris Robinson <chris.kcat@gmail.com> Date: Sat, 24 Apr 2021 13:46:52 -0700 Subject: Move GetHFOrderScales to a more appropriate place --- core/ambidefs.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 core/ambidefs.cpp (limited to 'core/ambidefs.cpp') diff --git a/core/ambidefs.cpp b/core/ambidefs.cpp new file mode 100644 index 00000000..2725748e --- /dev/null +++ b/core/ambidefs.cpp @@ -0,0 +1,44 @@ + +#include "config.h" + +#include "ambidefs.h" + +#include <cassert> + + +namespace { + +constexpr std::array<float,MaxAmbiOrder+1> Ambi3DDecoderHFScale{{ + 1.00000000e+00f, 1.00000000e+00f +}}; +constexpr std::array<float,MaxAmbiOrder+1> Ambi3DDecoderHFScale2O{{ + 7.45355990e-01f, 1.00000000e+00f, 1.00000000e+00f +}}; +constexpr std::array<float,MaxAmbiOrder+1> Ambi3DDecoderHFScale3O{{ + 5.89792205e-01f, 8.79693856e-01f, 1.00000000e+00f, 1.00000000e+00f +}}; + +inline auto& GetDecoderHFScales(uint order) noexcept +{ + if(order >= 3) return Ambi3DDecoderHFScale3O; + if(order == 2) return Ambi3DDecoderHFScale2O; + return Ambi3DDecoderHFScale; +} + +} // namespace + +auto AmbiScale::GetHFOrderScales(const uint in_order, const uint out_order) noexcept + -> std::array<float,MaxAmbiOrder+1> +{ + std::array<float,MaxAmbiOrder+1> ret{}; + + assert(out_order >= in_order); + + const auto &target = GetDecoderHFScales(out_order); + const auto &input = GetDecoderHFScales(in_order); + + for(size_t i{0};i < in_order+1;++i) + ret[i] = input[i] / target[i]; + + return ret; +} -- cgit v1.2.3