Mixer: Add assertions regarding num_samples versus buffer length

This commit is contained in:
Pokechu22 2022-08-24 17:22:39 -07:00
parent abb59a781a
commit 72de74d4fc
1 changed files with 14 additions and 1 deletions

View File

@ -167,6 +167,11 @@ unsigned int Mixer::Mix(short* samples, unsigned int num_samples)
unsigned int available_samples =
std::min(m_dma_mixer.AvailableSamples(), m_streaming_mixer.AvailableSamples());
ASSERT_MSG(AUDIO, available_samples <= MAX_SAMPLES,
"Audio stretching would overflow m_scratch_buffer: min({}, {}) -> {} > {} ({})",
m_dma_mixer.AvailableSamples(), m_streaming_mixer.AvailableSamples(),
available_samples, MAX_SAMPLES, num_samples);
m_scratch_buffer.fill(0);
m_dma_mixer.Mix(m_scratch_buffer.data(), available_samples, false, emulation_speed,
@ -213,10 +218,15 @@ unsigned int Mixer::MixSurround(float* samples, unsigned int num_samples)
// Mix() may also use m_scratch_buffer internally, but is safe because it alternates reads
// and writes.
ASSERT_MSG(AUDIO, needed_frames <= MAX_SAMPLES,
"needed_frames would overflow m_scratch_buffer: {} -> {} > {}", num_samples,
needed_frames, MAX_SAMPLES);
size_t available_frames = Mix(m_scratch_buffer.data(), static_cast<u32>(needed_frames));
if (available_frames != needed_frames)
{
ERROR_LOG_FMT(AUDIO, "Error decoding surround frames.");
ERROR_LOG_FMT(AUDIO,
"Error decoding surround frames: needed {} frames for {} samples but got {}",
needed_frames, num_samples, available_frames);
return 0;
}
@ -286,6 +296,9 @@ void Mixer::PushWiimoteSpeakerSamples(const short* samples, unsigned int num_sam
static constexpr u32 MAX_SPEAKER_SAMPLES = 20 * 2;
std::array<short, MAX_SPEAKER_SAMPLES * 2> samples_stereo;
ASSERT_MSG(AUDIO, num_samples <= MAX_SPEAKER_SAMPLES,
"num_samples would overflow samples_stereo: {} > {}", num_samples,
MAX_SPEAKER_SAMPLES);
if (num_samples <= MAX_SPEAKER_SAMPLES)
{
m_wiimote_speaker_mixer.SetInputSampleRateDivisor(sample_rate_divisor);