From: Amadeusz Sławiński Date: Mon, 18 Feb 2019 18:09:29 +0000 (+0100) Subject: Fix issue with noise during startup X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=73a55f474a4a3c27b879b87f41b62f370858ea06;p=xonotic%2Fdarkplaces.git Fix issue with noise during startup 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 --- 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)