Mercurial > repos > blastem
diff render_audio.c @ 2093:46ee354f29bd
Hack fix for audio deadlock issue
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 06 Feb 2022 23:25:23 -0800 |
parents | cfd53c94fffb |
children | b3832f73444f |
line wrap: on
line diff
--- a/render_audio.c Sun Feb 06 22:52:24 2022 -0800 +++ b/render_audio.c Sun Feb 06 23:25:23 2022 -0800 @@ -135,6 +135,40 @@ return num_populated == num_audio_sources; } +uint8_t audio_deadlock_hack(void) +{ + uint32_t min_buffer_pos = 0xFFFFFFFFU; + for (uint8_t i = 0; i < num_audio_sources; i++) + { + if (audio_sources[i]->front_populated) { + uint32_t buffer_pos = audio_sources[i]->buffer_pos; + if (audio_sources[i]->num_channels == 1) { + buffer_pos *= 2; + } + if (buffer_pos < min_buffer_pos) { + min_buffer_pos = buffer_pos; + } + } + } + uint8_t do_signal = 0; + for (uint8_t i = 0; i < num_audio_sources; i++) + { + if (!audio_sources[i]->front_populated) { + audio_sources[i]->front_populated = 1; + int16_t *tmp = audio_sources[i]->front; + audio_sources[i]->front = audio_sources[i]->back; + audio_sources[i]->back = tmp; + if (audio_sources[i]->num_channels == 2) { + audio_sources[i]->buffer_pos = min_buffer_pos; + } else { + audio_sources[i]->buffer_pos = min_buffer_pos / 2; + } + do_signal = 1; + } + } + return do_signal; +} + #define BUFFER_INC_RES 0x40000000UL void render_audio_adjust_clock(audio_source *src, uint64_t master_clock, uint64_t sample_divider)