http://bugs.winehq.org/show_bug.cgi?id=15915
Summary: cinepak codec reportedly not installed, FourCC case mismatch Product: Wine Version: 1.1.7 Platform: PC OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: msvfw32 AssignedTo: wine-bugs@winehq.org ReportedBy: hoehle@users.sourceforge.net CC: dmitry@codeweavers.com
The Alien Nations / Die Völker complains that the cinepak codec is not installed. The reason is a lower/upper case mismatch in a FourCC code.
Upper-case FourCC is being supplied, as the log reveals: Call msvfw32.ICOpen(43444956,44495643,00000002) ret=00493baf trace:msvideo:ICOpen (VIDC,CVID,0x00000002) Call winmm.OpenDriver(0032fda8 L"VIDC.CVID", ...) trace:driver:OpenDriver (L"VIDC.CVID", L"drivers32", ...); But dlls/iccvid/iccvid.c implements the check if (icinfo && icinfo->fccType != ICTYPE_VIDEO) where ICTYPE_VIDEO refers to 'vidc', not VIDC.
The same check is in msvidc32/msvideo1.c and msrle32/msrle32.c
Probably a case-insensitive check is required? For instance, msvfw32/msvideo_main.c:ICOpen() uses the case-insensitive helper function compare_fourcc().
OTOH, after the case-insensitive check perhaps wine should fill in the icopen.fccType and .fccHandler slots with the FourCC case it expects (ICTYPE_VIDEO) rather than the argument it received? It seems reasonable to commit to a known character case early on in the code and use that consistently.
What is The Right Thing (TRT), i.e. what to store in fccType?
In any case, a case fix lets "Die Völker" work past this issue (and crash later in ddraw, but that's another issue).