From 73a55f474a4a3c27b879b87f41b62f370858ea06 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Amadeusz=20S=C5=82awi=C5=84ski?= Date: Mon, 18 Feb 2019 19:09:29 +0100 Subject: [PATCH] Fix issue with noise during startup MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit After migrating to SDL2 interfaces there is noise during startup fix this by initializng buffer as specification requires. Per SDL_AudioCallback spec: The callback must completely initialize the buffer; as of SDL 2.0, this buffer is not initialized before the callback is called. If there is nothing to play, the callback should fill the buffer with silence. Signed-off-by: Amadeusz Sławiński --- snd_sdl.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/snd_sdl.c b/snd_sdl.c index 21341dce..6de41d65 100644 --- a/snd_sdl.c +++ b/snd_sdl.c @@ -68,10 +68,18 @@ static void Buffer_Callback (void *userdata, Uint8 *stream, int len) PartialLength2 = FrameCount * factor - PartialLength1; memcpy(&stream[PartialLength1], &snd_renderbuffer->ring[0], PartialLength2); + + // As of SDL 2.0 buffer needs to be fully initialized, so fill leftover part with silence + memset(&stream[PartialLength1 + PartialLength2], snd_renderbuffer->format.width == 1 ? 0x80 : 0, len - (PartialLength1 + PartialLength2)); } else + { memcpy(stream, &snd_renderbuffer->ring[StartOffset * factor], FrameCount * factor); + // As of SDL 2.0 buffer needs to be fully initialized, so fill leftover part with silence + memset(&stream[FrameCount * factor], snd_renderbuffer->format.width == 1 ? 0x80 : 0, len - (FrameCount * factor)); + } + snd_renderbuffer->startframe += FrameCount; if (FrameCount < RequestedFrames && developer_insane.integer && vid_activewindow) -- 2.39.2