From: divverent Date: Fri, 20 Sep 2019 15:27:46 +0000 (+0000) Subject: Fix issue with noise during startup X-Git-Tag: xonotic-v0.8.5~35 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=f03abce85e464df6f067cf11e677e2a2d8f7b62d;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 git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@12480 d7cf8633-e32d-0410-b094-e92efae38249 ::stable-branch::merge=83f8124af58307eae378846c9746b5d769673474 --- diff --git a/snd_sdl.c b/snd_sdl.c index 21341dce..d5cca856 100644 --- a/snd_sdl.c +++ b/snd_sdl.c @@ -68,10 +68,20 @@ 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 + // FIXME this is another place that assumes 8bit is always unsigned and others always signed + 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 + // FIXME this is another place that assumes 8bit is always unsigned and others always signed + 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)