http://bugs.winehq.org/show_bug.cgi?id=14717
--- Comment #248 from Alexander E. Patrakov patrakov@gmail.com 2011-12-17 04:28:24 CST --- The conversion of DSOUND_secpos_to_bufpos() to floating point is missing a ceil() call in the assignment to acc, that's what is causing the failed assertions.
Other objections:
1) Even a short hold is unacceptable, as it manifests itself as a click.
2) We are now double-counting the correspondence between input and output samples, once in wine and once in speex. This is a sure way to get a disagreement.
Is it possible to completely remove the temporary buffer, the DSOUND_RecalcTmpBufLen() function and all primary-to-secondary sample conversion functions? This way, when we fed N samples to Speex and it gave us M samples, we should advance the sample pointers for secondary and primary buffers by N and M samples, correspondingly.
While I understand that Speex is technically superior, I will continue optimizing my own resampler because I don't know if it would be easier for me to optimize my patch or for you to remove the double-counting problem.