summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVolker RĂ¼melin2021-01-10 11:02:21 +0100
committerGerd Hoffmann2021-01-15 11:25:22 +0100
commitbcce2ea5f63bb5eedfa6c4872f3a4b8a84ff9f07 (patch)
tree61c7186d49385541ce56cbfaaf2df161711f082f
parentsdlaudio: don't start playback in init routine (diff)
downloadqemu-bcce2ea5f63bb5eedfa6c4872f3a4b8a84ff9f07.tar.gz
qemu-bcce2ea5f63bb5eedfa6c4872f3a4b8a84ff9f07.tar.xz
qemu-bcce2ea5f63bb5eedfa6c4872f3a4b8a84ff9f07.zip
sdlaudio: always clear the sample buffer
Always fill the remaining audio callback buffer with silence. SDL 2.0 doesn't initialize the audio callback buffer. This was an incompatible change compared to SDL 1.2. For reference read the SDL 1.2 to 2.0 migration guide. Signed-off-by: Volker RĂ¼melin <vr_qemu@t-online.de> Reviewed-by: Thomas Huth <thuth@redhat.com> Message-id: 9315afe5-5958-c0b4-ea1e-14769511a9d5@t-online.de Message-Id: <20210110100239.27588-5-vr_qemu@t-online.de> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-rw-r--r--audio/sdlaudio.c33
1 files changed, 16 insertions, 17 deletions
diff --git a/audio/sdlaudio.c b/audio/sdlaudio.c
index 68126a99ab..79eed23849 100644
--- a/audio/sdlaudio.c
+++ b/audio/sdlaudio.c
@@ -211,27 +211,26 @@ static void sdl_callback (void *opaque, Uint8 *buf, int len)
SDLAudioState *s = &glob_sdl;
HWVoiceOut *hw = &sdl->hw;
- if (s->exit) {
- return;
- }
+ if (!s->exit) {
- /* dolog("callback: len=%d avail=%zu\n", len, hw->pending_emul); */
+ /* dolog("callback: len=%d avail=%zu\n", len, hw->pending_emul); */
- while (hw->pending_emul && len) {
- size_t write_len;
- ssize_t start = ((ssize_t) hw->pos_emul) - hw->pending_emul;
- if (start < 0) {
- start += hw->size_emul;
- }
- assert(start >= 0 && start < hw->size_emul);
+ while (hw->pending_emul && len) {
+ size_t write_len;
+ ssize_t start = (ssize_t)hw->pos_emul - hw->pending_emul;
+ if (start < 0) {
+ start += hw->size_emul;
+ }
+ assert(start >= 0 && start < hw->size_emul);
- write_len = MIN(MIN(hw->pending_emul, len),
- hw->size_emul - start);
+ write_len = MIN(MIN(hw->pending_emul, len),
+ hw->size_emul - start);
- memcpy(buf, hw->buf_emul + start, write_len);
- hw->pending_emul -= write_len;
- len -= write_len;
- buf += write_len;
+ memcpy(buf, hw->buf_emul + start, write_len);
+ hw->pending_emul -= write_len;
+ len -= write_len;
+ buf += write_len;
+ }
}
/* clear remaining buffer that we couldn't fill with data */