diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2016-09-19 03:01:46 +0200 |
---|---|---|
committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2016-09-19 06:14:25 +0200 |
commit | 396a8d91a4423d9c793eeff0798d544613647511 (patch) | |
tree | e0203961233db1ffcbbca2e15154d71d142c5822 /src/audio_core/interpolate.cpp | |
parent | Tweak formatting settings (diff) | |
download | yuzu-396a8d91a4423d9c793eeff0798d544613647511.tar yuzu-396a8d91a4423d9c793eeff0798d544613647511.tar.gz yuzu-396a8d91a4423d9c793eeff0798d544613647511.tar.bz2 yuzu-396a8d91a4423d9c793eeff0798d544613647511.tar.lz yuzu-396a8d91a4423d9c793eeff0798d544613647511.tar.xz yuzu-396a8d91a4423d9c793eeff0798d544613647511.tar.zst yuzu-396a8d91a4423d9c793eeff0798d544613647511.zip |
Diffstat (limited to 'src/audio_core/interpolate.cpp')
-rw-r--r-- | src/audio_core/interpolate.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/audio_core/interpolate.cpp b/src/audio_core/interpolate.cpp index 7751c545d..cb1c58a67 100644 --- a/src/audio_core/interpolate.cpp +++ b/src/audio_core/interpolate.cpp @@ -71,15 +71,17 @@ StereoBuffer16 None(State& state, const StereoBuffer16& input, float rate_multip StereoBuffer16 Linear(State& state, const StereoBuffer16& input, float rate_multiplier) { // Note on accuracy: Some values that this produces are +/- 1 from the actual firmware. - return StepOverSamples(state, input, rate_multiplier, [](u64 fraction, const auto& x0, - const auto& x1, const auto& x2) { - // This is a saturated subtraction. (Verified by black-box fuzzing.) - s64 delta0 = MathUtil::Clamp<s64>(x1[0] - x0[0], -32768, 32767); - s64 delta1 = MathUtil::Clamp<s64>(x1[1] - x0[1], -32768, 32767); - - return std::array<s16, 2>{static_cast<s16>(x0[0] + fraction * delta0 / scale_factor), - static_cast<s16>(x0[1] + fraction * delta1 / scale_factor)}; - }); + return StepOverSamples(state, input, rate_multiplier, + [](u64 fraction, const auto& x0, const auto& x1, const auto& x2) { + // This is a saturated subtraction. (Verified by black-box fuzzing.) + s64 delta0 = MathUtil::Clamp<s64>(x1[0] - x0[0], -32768, 32767); + s64 delta1 = MathUtil::Clamp<s64>(x1[1] - x0[1], -32768, 32767); + + return std::array<s16, 2>{ + static_cast<s16>(x0[0] + fraction * delta0 / scale_factor), + static_cast<s16>(x0[1] + fraction * delta1 / scale_factor), + }; + }); } } // namespace AudioInterp |