Clamp volume in cellAudioAdd/2c/6c/Data

Same as firmware, NaN and Inf are flushed to zero.
This commit is contained in:
Eladash 2019-11-19 21:17:12 +02:00 committed by Ivan
parent cd6b6c8a4f
commit 8d5ef2c7b9

View file

@ -1469,6 +1469,8 @@ error_code cellAudioAddData(u32 portNum, vm::ptr<float> src, u32 samples, float
lock.unlock();
volume = std::isfinite(volume) ? std::clamp(volume, -16.f, 16.f) : 0.f;
for (u32 i = 0; i < samples * port.num_channels; i++)
{
dst[i] += src[i] * volume; // mix all channels
@ -1508,6 +1510,8 @@ error_code cellAudioAdd2chData(u32 portNum, vm::ptr<float> src, u32 samples, flo
lock.unlock();
volume = std::isfinite(volume) ? std::clamp(volume, -16.f, 16.f) : 0.f;
if (port.num_channels == 2)
{
for (u32 i = 0; i < samples; i++)
@ -1574,6 +1578,8 @@ error_code cellAudioAdd6chData(u32 portNum, vm::ptr<float> src, float volume)
lock.unlock();
volume = std::isfinite(volume) ? std::clamp(volume, -16.f, 16.f) : 0.f;
if (port.num_channels == 6)
{
for (u32 i = 0; i < 256; i++)