/* SPDX-License-Identifier: BSD-3-Clause */ /* SPDX-FileCopyrightText: OpenMPT Project Developers and Contributors */ #pragma once #include "openmpt/all/BuildSettings.hpp" #include "mpt/base/macros.hpp" #include "openmpt/soundbase/MixSample.hpp" #include "openmpt/soundbase/SampleConvert.hpp" #include "openmpt/soundbase/SampleConvertFixedPoint.hpp" OPENMPT_NAMESPACE_BEGIN template struct ConvertMixSample; template <> struct ConvertMixSample { MPT_FORCEINLINE MixSampleInt conv(MixSampleInt src) { return src; } }; template <> struct ConvertMixSample { MPT_FORCEINLINE MixSampleFloat conv(MixSampleFloat src) { return src; } }; template struct ConvertMixSample { MPT_FORCEINLINE MixSampleInt conv(Tsrc src) { return SC::ConvertToFixedPoint{}(src); } }; template struct ConvertMixSample { MPT_FORCEINLINE Tdst conv(MixSampleInt src) { return SC::ConvertFixedPoint{}(src); } }; template struct ConvertMixSample { MPT_FORCEINLINE MixSampleFloat conv(Tsrc src) { return SC::Convert{}(src); } }; template struct ConvertMixSample { MPT_FORCEINLINE Tdst conv(MixSampleFloat src) { return SC::Convert{}(src); } }; template <> struct ConvertMixSample { MPT_FORCEINLINE MixSampleInt conv(MixSampleFloat src) { return SC::ConvertToFixedPoint{}(src); } }; template <> struct ConvertMixSample { MPT_FORCEINLINE MixSampleFloat conv(MixSampleInt src) { return SC::ConvertFixedPoint{}(src); } }; template MPT_FORCEINLINE Tdst mix_sample_cast(Tsrc src) { return ConvertMixSample{}.conv(src); } OPENMPT_NAMESPACE_END