+ if (snd_usethreadedmixing)
+ {
+ S_MixToBuffer(stream, RequestedFrames);
+ if (snd_blocked)
+ memset(stream, snd_renderbuffer->format.width == 1 ? 0x80 : 0, len);
+ SndSys_UnlockRenderBuffer();
+ return;
+ }
+
+ // Transfert up to a chunk of samples from snd_renderbuffer to stream
+ MaxFrames = snd_renderbuffer->endframe - snd_renderbuffer->startframe;
+ if (MaxFrames > RequestedFrames)
+ FrameCount = RequestedFrames;
+ else
+ FrameCount = MaxFrames;
+ StartOffset = snd_renderbuffer->startframe % snd_renderbuffer->maxframes;
+ EndOffset = (snd_renderbuffer->startframe + FrameCount) % snd_renderbuffer->maxframes;
+ if (StartOffset > EndOffset) // if the buffer wraps
+ {
+ unsigned int PartialLength1, PartialLength2;