Fix several bugs in msrle32 preventing it to load.
Remove a hack in ICOpen compensating a bug in msrle32. Use MSVFW32_hModule directly in ICCompressorChoose, and avoid a convoluted GWLP_HINSTANCE hack.
This commit is contained in:
parent
966df981a1
commit
e1e83cac75
|
@ -58,7 +58,6 @@ inline WORD Intensity(RGBQUAD clr)
|
|||
/* utility functions */
|
||||
static BOOL isSupportedDIB(LPCBITMAPINFOHEADER lpbi);
|
||||
static BOOL isSupportedMRLE(LPCBITMAPINFOHEADER lpbi);
|
||||
static void LoadWideString(UINT id, LPWSTR str, INT len);
|
||||
static BYTE MSRLE32_GetNearestPaletteIndex(UINT count, const RGBQUAD *clrs, RGBQUAD clr);
|
||||
|
||||
/* compression functions */
|
||||
|
@ -98,14 +97,6 @@ static LRESULT DecompressGetPalette(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn,
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
static void LoadWideString(UINT id, LPWSTR str, INT len)
|
||||
{
|
||||
char szTemp[80];
|
||||
|
||||
LoadStringA(MSRLE32_hModule, id, szTemp, sizeof(szTemp));
|
||||
MultiByteToWideChar(CP_ACP, 0, szTemp, -1, str, len);
|
||||
}
|
||||
|
||||
static BOOL isSupportedMRLE(LPCBITMAPINFOHEADER lpbi)
|
||||
{
|
||||
/* pre-conditions */
|
||||
|
@ -1113,9 +1104,6 @@ static CodecInfo* Open(LPICOPEN icinfo)
|
|||
icinfo->fccHandler, (char*)&icinfo->fccHandler,
|
||||
icinfo->dwVersion,icinfo->dwFlags);
|
||||
|
||||
if (icinfo->fccType != ICTYPE_VIDEO)
|
||||
return NULL;
|
||||
|
||||
switch (icinfo->fccHandler) {
|
||||
case FOURCC_RLE:
|
||||
case FOURCC_RLE4:
|
||||
|
@ -1176,14 +1164,14 @@ static LRESULT GetInfo(CodecInfo *pi, ICINFO *icinfo, DWORD dwSize)
|
|||
return 0;
|
||||
|
||||
icinfo->dwSize = sizeof(ICINFO);
|
||||
icinfo->fccType = streamtypeVIDEO;
|
||||
icinfo->fccType = ICTYPE_VIDEO;
|
||||
icinfo->fccHandler = (pi != NULL ? pi->fccHandler : FOURCC_MRLE);
|
||||
icinfo->dwFlags = VIDCF_QUALITY | VIDCF_TEMPORAL | VIDCF_CRUNCH | VIDCF_FASTTEMPORALC;
|
||||
icinfo->dwVersion = MSRLE32_VERSION;
|
||||
icinfo->dwVersionICM = 0x01040000; /* Version 1.4 build 0 */
|
||||
|
||||
LoadWideString(IDS_NAME, icinfo->szName, sizeof(icinfo->szName));
|
||||
LoadWideString(IDS_DESCRIPTION, icinfo->szDescription, sizeof(icinfo->szDescription));
|
||||
LoadStringW(MSRLE32_hModule, IDS_NAME, icinfo->szName, sizeof(icinfo->szName)/sizeof(WCHAR));
|
||||
LoadStringW(MSRLE32_hModule, IDS_DESCRIPTION, icinfo->szDescription, sizeof(icinfo->szDescription)/sizeof(WCHAR));
|
||||
|
||||
return sizeof(ICINFO);
|
||||
}
|
||||
|
@ -1796,9 +1784,6 @@ LRESULT CALLBACK MSRLE32_DriverProc(DWORD dwDrvID, HDRVR hDrv, UINT uMsg,
|
|||
case DRV_LOAD:
|
||||
return DRVCNF_OK;
|
||||
case DRV_OPEN:
|
||||
if (lParam2 == 0)
|
||||
return (LRESULT)0xFFFF0000;
|
||||
else
|
||||
return (LRESULT)Open((ICOPEN*)lParam2);
|
||||
case DRV_CLOSE:
|
||||
if (dwDrvID != 0xFFFF0000 && (LPVOID)dwDrvID != NULL)
|
||||
|
@ -1910,7 +1895,7 @@ BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved)
|
|||
|
||||
case DLL_PROCESS_DETACH:
|
||||
break;
|
||||
};
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -139,6 +139,7 @@ static BOOL enum_drivers(DWORD fccType, enum_handler_t handler, void* param)
|
|||
{
|
||||
for (s = buf; *s; s += strlen(s) + 1)
|
||||
{
|
||||
TRACE("got %s\n", s);
|
||||
if (strncasecmp(s, fccTypeStr, 5) || s[9] != '=') continue;
|
||||
if ((result = handler(s, cnt++, param))) break;
|
||||
}
|
||||
|
@ -349,20 +350,7 @@ HIC VFWAPI ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode)
|
|||
|
||||
hdrv = OpenDriver(codecname, drv32W, (LPARAM)&icopen);
|
||||
if (!hdrv)
|
||||
{
|
||||
if (fccType == streamtypeVIDEO)
|
||||
{
|
||||
codecname[0] = 'v';
|
||||
codecname[1] = 'i';
|
||||
codecname[2] = 'd';
|
||||
codecname[3] = 'c';
|
||||
|
||||
fccType = ICTYPE_VIDEO;
|
||||
hdrv = OpenDriver(codecname, drv32W, (LPARAM)&icopen);
|
||||
}
|
||||
if (!hdrv)
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
} else {
|
||||
/* The driver has been registered at runtime with its name */
|
||||
hdrv = OpenDriver(driver->name, NULL, (LPARAM)&icopen);
|
||||
|
@ -767,8 +755,7 @@ static INT_PTR CALLBACK icm_choose_compressor_dlgproc(HWND hdlg, UINT msg, WPARA
|
|||
if (choose_comp->title)
|
||||
SetWindowTextA(hdlg, choose_comp->title);
|
||||
|
||||
LoadStringW((HINSTANCE)GetWindowLongPtrW(hdlg, GWLP_HINSTANCE),
|
||||
IDS_FULLFRAMES, buf, 128);
|
||||
LoadStringW(MSVFW32_hModule, IDS_FULLFRAMES, buf, 128);
|
||||
SendDlgItemMessageW(hdlg, IDC_COMP_LIST, CB_ADDSTRING, 0, (LPARAM)buf);
|
||||
|
||||
enum_compressors(GetDlgItem(hdlg, IDC_COMP_LIST));
|
||||
|
|
Loading…
Reference in New Issue