Andrew Eikum : wineoss.drv: Cap reported OSS fill level to expected level.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Apr 6 10:34:19 CDT 2015
Module: wine
Branch: master
Commit: 025e6650e4378771a4fd1a872bebfbfb2b2b72d7
URL: http://source.winehq.org/git/wine.git/?a=commit;h=025e6650e4378771a4fd1a872bebfbfb2b2b72d7
Author: Andrew Eikum <aeikum at codeweavers.com>
Date: Mon Apr 6 08:21:48 2015 -0500
wineoss.drv: Cap reported OSS fill level to expected level.
Some devices apparently return that the buffer contains an extra frame
that we never wrote. We should account for that to avoid an integer
underflow.
---
dlls/wineoss.drv/mmdevdrv.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c
index ccd5c86..d2a0c86 100644
--- a/dlls/wineoss.drv/mmdevdrv.c
+++ b/dlls/wineoss.drv/mmdevdrv.c
@@ -1412,6 +1412,12 @@ static void oss_write_data(ACImpl *This)
}else
in_oss_frames = (This->oss_bufsize_bytes - bi.bytes) / This->fmt->nBlockAlign;
+ if(in_oss_frames > This->in_oss_frames){
+ TRACE("Capping reported frames from %u to %u\n",
+ in_oss_frames, This->in_oss_frames);
+ in_oss_frames = This->in_oss_frames;
+ }
+
write_limit = 0;
while(write_limit + in_oss_frames < max_period * 3)
write_limit += max_period;
More information about the wine-cvs
mailing list