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.
This commit is contained in:
Andrew Eikum 2015-04-06 08:21:48 -05:00 committed by Alexandre Julliard
parent 6c073fe9a9
commit 025e6650e4
1 changed files with 6 additions and 0 deletions

View File

@ -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;