http://bugs.winehq.org/show_bug.cgi?id=29585
--- Comment #51 from Jörg Höhle hoehle@users.sourceforge.net 2012-04-13 03:10:45 CDT --- Chris, I don't understand parts of what you wrote. Could you please elaborate?
In fact it existed in the data that was being written. It was doing this because the value from GetPosition was jumping ahead to exactly 10 dsound fragments beyond the dsound's saved value
??
wineoss.drv should definitely not be reporting the position of an underrun event that has not happened yet.
Definitely. But where/how do you diagnose this in wineoss? Part of what I don't understand about what you write is what DSound is doing wrong and what mmdevapi is doing wrong.
What I want: 1. Have mmdevapi produce sound values. Here you patch is incorrect, because GetPosition should a priori not bump to maximum when held_frames is zero. That point is debatable and debated[*].
2. Have DSound deal with huge latencies.
This delay was hovering around a little under 3-4 device fragments. That is about 7 dsound fragments.
What you write sounds to me as if DSound does not work well when the latency is almost as large as its buffer. I think this is a known bug in Wine's DSound, that has become apparent since the switch to mmdevapi. Former code used to lie about latency. Is what you mean point L in my list: http://www.winehq.org/pipermail/wine-devel/2012-January/093982.html
[*] I forgot where I wrote about this. Basically: Contra: There could be 2 seconds worth of samples buffered within OSS, USB or the remote desktop, they should drain slowly and normally. We need some tests on native with such a setup. Pro: The native mixer ticks every 10ms and its GetCurrentPadding slowly decreases by deltas of 10ms. All test results so far shows that GetPosition is not far (less than ~40ms) behind GetCurrentPadding. Therefore, when padding decreases and reaches zero, position soon reaches max. One bug is that Wine's GetCurrentPadding does not behave that regularly. IIRC there was a bug report where we observed and discussed GetPosition jumps to maximum, but I can't find it now. Bug #29472, comment #9 and bug #29531 are related.