mmdevapi: Correctly convert UINT32 to INT64
Joerg-Cyril.Hoehle at t-systems.com
Joerg-Cyril.Hoehle at t-systems.com
Mon Jan 30 03:46:43 CST 2012
Andrew,
thank you very much for finding a bug in my code.
I'll have to meditate signed/unsigned conversions for the next months.
Perhaps it's my lack of familiarity with the MS-Windows API that had
me not find a signed equivalent of UINT32. Indeed there's none in
windef.h. So I choose 'long'. But now I see basestd.h defines LONG32.
INT64 is not appropriate. getbuf_last should be of the same size than
the other frame holding types. I once wrote a patch to turn all
#frame holding entities from UINT64 into 32. Please rewrite the patch
to use the LONG32 type, then you'll need no surprising cast.
If the loss of 1 bit worries you, the solution IMHO is not to go to
INT64 rather than prevent a duration that large in Initialize. In
shared mode, there's no 2s limit. My tests opened a 10s buffer. I've
not tested anything larger.
LONG32 leaves enough room for 10000 seconds at 200000fps.
Regards,
Jörg Höhle
More information about the wine-devel
mailing list