http://bugs.winehq.org/show_bug.cgi?id=33045
--- Comment #12 from Jörg Höhle hoehle@users.sourceforge.net 2013-03-07 14:06:46 CST --- Unlike XP, w95 reports no GetPosition test failure -- if I move the mouse wildly! Otherwise position is slightly too low: wave.c:1604: Test failed: after position: 22034 or 22042 So truly, the event is received shortly before finishing playing.
Given that w95 counts in bytes, we should produce a test with MMTIME_BYTES.
Your patch is partly wrong. You cannot mix frame rounding ops from the ACM target (PCM) domain with byte counts from the ACM source domain, they don't have the same "dimension". That's a type error.
Regarding the use of the ACM, interesting tests involve IMAADPCM (blocksize 256 or such) and the defunct winemp3 (blocksize 1).
I believe we should let the ACM count src bytes as the ACM likes to do and solely round frames on the PCM target side. Perhaps we should then verify that the ACM gives us a multiple of frames. Which makes me think that the wave test may not be significant on w95, because WAVE_MAPPER was used, which may do its own things.
Oops, looking at WID_PullACMData, I noticed that waveIN notification when the ACM is in use is still bogus. I think I mentioned that once but it got off my mind :-( My September 2011 commit 3ba00cf538cc07d8e36ae82d43a29247cb37a299 only handled PushData and PullData.
Checking how the ACM handles buffers not matching source block alignment merits own tests. It too can get hairy. E.g. if cbSrcLengthUsed < dwBufferLength, what will GetPosition look like, when is WOM_DONE issued?