http://bugs.winehq.org/show_bug.cgi?id=33045 --- Comment #5 from Andrew Eikum <aeikum(a)codeweavers.com> 2013-03-05 07:56:05 CST --- (In reply to comment #3)
Is the number of bytes not a multiple of nBlockAlign? That's it! Following an intuition, I added -1 to the one line in our winmm/wave tests "make sure fragment length is a multiple of block size" and got a deadlock resembling yours.
Yep, that's exactly it. Bunch of Heroes uses headers with 0x7FFF byte buffers, which isn't a multiple of 4.
2. Investigate what native does with trailing bytes in case of underrun. - Throw away? - Do they prevent buffer notification, awaiting more bytes from the next header to complete a frame? That is a hairy situation! - Do they count in GetPosition? Alas, this mostly requires audible tests, not testbot.
Looks to me like they get thrown away. I wrote a test with two headers, one header is one byte short and the other is one byte long. After the first header plays, waveOutGetPosition(TIME_SAMPLES) reports one sample short. After the second header, it still reports exactly one sample short. Using TIME_BYTES similarly reports (dwBufferSize - dwBufferSize % nBlockAlign). -- Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email Do not reply to this email, post in Bugzilla using the above URL to reply. ------- You are receiving this mail because: ------- You are watching all bug changes.