X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=snd_sdl.c;h=d5cca85668d0c39bb61d7c73a6df2a334aaba34b;hb=324a5329d33ef90df59e6488abce6433d90ac04c;hp=21341dce883a6c111b502a2a91113ce9a13b99e8;hpb=3bd7661c7b5ae8a3a0810f9a0bd3dc971863f891;p=xonotic%2Fdarkplaces.git 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)