summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlawnjelly <lawnjelly@gmail.com>2023-11-10 15:33:29 +0000
committerlawnjelly <lawnjelly@gmail.com>2023-11-10 15:48:28 +0000
commit188266af4704a36415b1e98956ecda34d4a025b2 (patch)
tree68eb6c985f8380c283100f601ebaf5bdfbf9a45c
parent2b987d1c54b77a394d302a89118274538726bcf1 (diff)
downloadredot-engine-188266af4704a36415b1e98956ecda34d4a025b2.tar.gz
Fix OGG Vorbis infinite error spam with corrupt file.
When OGG Vorbis encountered unreadable file, it emitted infinite error spam. This PR returns the full number of frames in the case of error, to prevent infinite loop.
-rw-r--r--modules/vorbis/audio_stream_ogg_vorbis.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/modules/vorbis/audio_stream_ogg_vorbis.cpp b/modules/vorbis/audio_stream_ogg_vorbis.cpp
index 8a265ffaf3..7ec0b697bf 100644
--- a/modules/vorbis/audio_stream_ogg_vorbis.cpp
+++ b/modules/vorbis/audio_stream_ogg_vorbis.cpp
@@ -144,7 +144,7 @@ int AudioStreamPlaybackOggVorbis::_mix_internal(AudioFrame *p_buffer, int p_fram
}
int AudioStreamPlaybackOggVorbis::_mix_frames_vorbis(AudioFrame *p_buffer, int p_frames) {
- ERR_FAIL_COND_V(!ready, 0);
+ ERR_FAIL_COND_V(!ready, p_frames);
if (!have_samples_left) {
ogg_packet *packet = nullptr;
int err;
@@ -156,10 +156,10 @@ int AudioStreamPlaybackOggVorbis::_mix_frames_vorbis(AudioFrame *p_buffer, int p
}
err = vorbis_synthesis(&block, packet);
- ERR_FAIL_COND_V_MSG(err != 0, 0, "Error during vorbis synthesis " + itos(err));
+ ERR_FAIL_COND_V_MSG(err != 0, p_frames, "Error during vorbis synthesis " + itos(err));
err = vorbis_synthesis_blockin(&dsp_state, &block);
- ERR_FAIL_COND_V_MSG(err != 0, 0, "Error during vorbis block processing " + itos(err));
+ ERR_FAIL_COND_V_MSG(err != 0, p_frames, "Error during vorbis block processing " + itos(err));
have_packets_left = !packet->e_o_s;
}