http://bugs.winehq.org/show_bug.cgi?id=11659
Summary: acmStreamConvert inconsistencies (Windows Vs Wine for mp3 -> pcm) Product: Wine Version: 0.9.55. Platform: PC-x86-64 OS/Version: Linux Status: UNCONFIRMED Severity: major Priority: P2 Component: msacm32 AssignedTo: wine-bugs@winehq.org ReportedBy: lightning_uk@imgburn.com
When attempting to convert MP3 to PCM (Stereo, 44100Hz, 16bit - for burning to a disc) the acmStreamConvert function (working synchronously) does not work as expected (doesn't do what Windows does).
The 'cbSrcLengthUsed' value within the ACMSTREAMHEADER structure is not updated with the correct value (or the wrong amount of data is actually used).
When 'cbSrcLength' and 'cbDestLength' are set to the same value (in my case, 75264), after conversion 'cbSrcLengthUsed' is always being set to the entire size of the source buffer (75264) rather than the amount of the source buffer that was actually used to create the content in the destination buffer.
Windows behaviour on first two calls to acmStreamConvert...
D 10:41:06 FileSize: 5339011 D 10:41:06 CurrentFileBytesRead: 75264 D 10:41:06 cbSrcLength: 75264 D 10:41:06 cbSrcLengthUsed: 16343 D 10:41:06 cbDstLength: 75264 D 10:41:06 cbDstLengthUsed: 73728
D 10:41:06 FileSize: 5339011 D 10:41:06 CurrentFileBytesRead: 91607 D 10:41:06 cbSrcLength: 75264 D 10:41:06 cbSrcLengthUsed: 10031 D 10:41:06 cbDstLength: 75264 D 10:41:06 cbDstLengthUsed: 73728
Wine behaviour on first two calls to acmStreamConvert...
D 10:33:22 FileSize: 5339011 D 10:33:22 CurrentFileBytesRead: 75264 D 10:33:22 cbSrcLength: 75264 D 10:33:22 cbSrcLengthUsed: 75264 D 10:33:22 cbDstLength: 75264 D 10:33:22 cbDstLengthUsed: 73728
D 10:33:22 FileSize: 5339011 D 10:33:22 CurrentFileBytesRead: 150528 D 10:33:22 cbSrcLength: 75264 D 10:33:22 cbSrcLengthUsed: 75264 D 10:33:22 cbDstLength: 75264 D 10:33:22 cbDstLengthUsed: 73728
Applications are supposed to move the source buffer on by 'cbSrcLengthUsed' bytes after each call to acmStreamConvert.
The source buffer is therefore being used up far too quickly and the conversion is considered complete long before it actually is.