Cog/Frameworks/OpenMPT/OpenMPT/soundlib/MixFuncTable.cpp
Christopher Snowhill da1973bcd9 Build libOpenMPT from source once again
Bundle libOpenMPT as a dynamic framework, which should be safe once
again, now that there is only one version to bundle. Also, now it is
using the versions of libvorbisfile and libmpg123 that are bundled with
the player, instead of compiling minimp3 and stbvorbis.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-06-30 22:56:52 -07:00

92 lines
2.9 KiB
C++

/*
* MixFuncTable.cpp
* ----------------
* Purpose: Table containing all mixer functions.
* Notes : The Visual Studio project settings for this file have been adjusted
* to force function inlining, so that the mixer has a somewhat acceptable
* performance in debug mode. If you need to debug anything here, be sure
* to disable those optimizations if needed.
* Authors: OpenMPT Devs
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
*/
#include "stdafx.h"
#include "Mixer.h"
#include "Snd_defs.h"
#include "ModChannel.h"
#include "MixFuncTable.h"
#ifdef MPT_INTMIXER
#include "IntMixer.h"
#else
#include "FloatMixer.h"
#endif // MPT_INTMIXER
OPENMPT_NAMESPACE_BEGIN
namespace MixFuncTable
{
#ifdef MPT_INTMIXER
using I8M = Int8MToIntS;
using I16M = Int16MToIntS;
using I8S = Int8SToIntS;
using I16S = Int16SToIntS;
#else
using I8M = Int8MToFloatS;
using I16M = Int16MToFloatS;
using I8S = Int8SToFloatS;
using I16S = Int16SToFloatS;
#endif // MPT_INTMIXER
// Build mix function table for given resampling, filter and ramping settings: One function each for 8-Bit / 16-Bit Mono / Stereo
#define BuildMixFuncTableRamp(resampling, filter, ramp) \
SampleLoop<I8M, resampling<I8M>, filter<I8M>, MixMono ## ramp<I8M> >, \
SampleLoop<I16M, resampling<I16M>, filter<I16M>, MixMono ## ramp<I16M> >, \
SampleLoop<I8S, resampling<I8S>, filter<I8S>, MixStereo ## ramp<I8S> >, \
SampleLoop<I16S, resampling<I16S>, filter<I16S>, MixStereo ## ramp<I16S> >
// Build mix function table for given resampling, filter settings: With and without ramping
#define BuildMixFuncTableFilter(resampling, filter) \
BuildMixFuncTableRamp(resampling, filter, NoRamp), \
BuildMixFuncTableRamp(resampling, filter, Ramp)
// Build mix function table for given resampling settings: With and without filter
#define BuildMixFuncTable(resampling) \
BuildMixFuncTableFilter(resampling, NoFilter), \
BuildMixFuncTableFilter(resampling, ResonantFilter)
const MixFuncInterface Functions[6 * 16] =
{
BuildMixFuncTable(NoInterpolation), // No SRC
BuildMixFuncTable(LinearInterpolation), // Linear SRC
BuildMixFuncTable(FastSincInterpolation), // Fast Sinc (Cubic Spline) SRC
BuildMixFuncTable(PolyphaseInterpolation), // Kaiser SRC
BuildMixFuncTable(FIRFilterInterpolation), // FIR SRC
BuildMixFuncTable(AmigaBlepInterpolation), // Amiga emulation
};
#undef BuildMixFuncTableRamp
#undef BuildMixFuncTableFilter
#undef BuildMixFuncTable
ResamplingIndex ResamplingModeToMixFlags(ResamplingMode resamplingMode)
{
switch(resamplingMode)
{
case SRCMODE_NEAREST: return ndxNoInterpolation;
case SRCMODE_LINEAR: return ndxLinear;
case SRCMODE_CUBIC: return ndxFastSinc;
case SRCMODE_SINC8LP: return ndxKaiser;
case SRCMODE_SINC8: return ndxFIRFilter;
case SRCMODE_AMIGA: return ndxAmigaBlep;
default: MPT_ASSERT_NOTREACHED();
}
return ndxNoInterpolation;
}
} // namespace MixFuncTable
OPENMPT_NAMESPACE_END