Author: akhaldi Date: Sat Nov 21 10:03:40 2015 New Revision: 69988
URL: http://svn.reactos.org/svn/reactos?rev=69988&view=rev Log: [MSVFW32] Sync with Wine Staging 1.7.55. CORE-10536
Modified: trunk/reactos/dll/win32/msvfw32/drawdib.c trunk/reactos/dll/win32/msvfw32/mciwnd.c trunk/reactos/dll/win32/msvfw32/msvideo_main.c trunk/reactos/media/doc/README.WINE
Modified: trunk/reactos/dll/win32/msvfw32/drawdib.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msvfw32/drawdib.c... ============================================================================== --- trunk/reactos/dll/win32/msvfw32/drawdib.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msvfw32/drawdib.c [iso-8859-1] Sat Nov 21 10:03:40 2015 @@ -303,7 +303,8 @@ UINT wFlags) { WINE_HDD *whdd; - BOOL ret = TRUE; + BOOL ret; + int reopen = 0;
TRACE("(%p,%p,%d,%d,%d,%d,%p,%p,%d,%d,%d,%d,0x%08x)\n", hdd, hdc, xDst, yDst, dxDst, dyDst, lpbi, lpBits, xSrc, ySrc, dxSrc, dySrc, wFlags); @@ -325,11 +326,25 @@
#define CHANGED(x) (whdd->x != x)
- if ((!whdd->begun) || - (!(wFlags & DDF_SAME_HDC) && CHANGED(hdc)) || - (!(wFlags & DDF_SAME_DRAW) && (CHANGED(lpbi) || CHANGED(dxSrc) || CHANGED(dySrc) || CHANGED(dxDst) || CHANGED(dyDst)))) - { - TRACE("Something changed!\n"); + /* Check if anything changed from the parameters passed and our struct. + * If anything changed we need to run DrawDibBegin again to ensure we + * can support the changes. + */ + if (!whdd->begun) + reopen = 1; + else if (!(wFlags & DDF_SAME_HDC) && CHANGED(hdc)) + reopen = 2; + else if (!(wFlags & DDF_SAME_DRAW)) + { + if (CHANGED(lpbi) && memcmp(lpbi, whdd->lpbi, sizeof(*lpbi))) reopen = 3; + else if (CHANGED(dxSrc)) reopen = 4; + else if (CHANGED(dySrc)) reopen = 5; + else if (CHANGED(dxDst)) reopen = 6; + else if (CHANGED(dyDst)) reopen = 7; + } + if (reopen) + { + TRACE("Something changed (reason %d)!\n", reopen); ret = DrawDibBegin(hdd, hdc, dxDst, dyDst, lpbi, dxSrc, dySrc, 0); if (!ret) return ret; @@ -337,7 +352,14 @@
#undef CHANGED
- if ((dxDst == -1) && (dyDst == -1)) + /* If source dimensions are not specified derive them from bitmap header */ + if (dxSrc == -1 && dySrc == -1) + { + dxSrc = lpbi->biWidth; + dySrc = lpbi->biHeight; + } + /* If destination dimensions are not specified derive them from source */ + if (dxDst == -1 && dyDst == -1) { dxDst = dxSrc; dyDst = dySrc; @@ -371,9 +393,10 @@ SelectPalette(hdc, whdd->hpal, FALSE); }
- if (!(StretchBlt(whdd->hdc, xDst, yDst, dxDst, dyDst, whdd->hMemDC, xSrc, ySrc, dxSrc, dySrc, SRCCOPY))) - ret = FALSE; - + ret = StretchBlt(whdd->hdc, xDst, yDst, dxDst, dyDst, whdd->hMemDC, xSrc, ySrc, dxSrc, dySrc, SRCCOPY); + TRACE("Painting %dx%d at %d,%d from %dx%d at %d,%d -> %d\n", + dxDst, dyDst, xDst, yDst, dxSrc, dySrc, xSrc, ySrc, ret); + return ret; }
Modified: trunk/reactos/dll/win32/msvfw32/mciwnd.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msvfw32/mciwnd.c?... ============================================================================== --- trunk/reactos/dll/win32/msvfw32/mciwnd.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msvfw32/mciwnd.c [iso-8859-1] Sat Nov 21 10:03:40 2015 @@ -1063,27 +1063,33 @@
case MCIWNDM_GETDEVICEA: { + int len = 0; + char *str = (char *)lParam; MCI_SYSINFO_PARMSA mci_sysinfo;
- mci_sysinfo.lpstrReturn = (LPSTR)lParam; + mci_sysinfo.lpstrReturn = str; mci_sysinfo.dwRetSize = wParam; mwi->lasterror = mciSendCommandA(mwi->mci, MCI_SYSINFO, MCI_SYSINFO_INSTALLNAME, (DWORD_PTR)&mci_sysinfo); - TRACE("MCIWNDM_GETDEVICEA: %s\n", debugstr_an((LPSTR)lParam, wParam)); + while(len < wParam && str[len]) len++; + TRACE("MCIWNDM_GETDEVICEA: %s\n", debugstr_an(str, len)); return 0; }
case MCIWNDM_GETDEVICEW: { + int len = 0; + WCHAR *str = (WCHAR *)lParam; MCI_SYSINFO_PARMSW mci_sysinfo;
- mci_sysinfo.lpstrReturn = (LPWSTR)lParam; + mci_sysinfo.lpstrReturn = str; mci_sysinfo.dwRetSize = wParam; mwi->lasterror = mciSendCommandW(mwi->mci, MCI_SYSINFO, MCI_SYSINFO_INSTALLNAME, (DWORD_PTR)&mci_sysinfo); - TRACE("MCIWNDM_GETDEVICEW: %s\n", debugstr_wn((LPWSTR)lParam, wParam)); + while(len < wParam && str[len]) len++; + TRACE("MCIWNDM_GETDEVICEW: %s\n", debugstr_wn(str, len)); return 0; }
Modified: trunk/reactos/dll/win32/msvfw32/msvideo_main.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msvfw32/msvideo_m... ============================================================================== --- trunk/reactos/dll/win32/msvfw32/msvideo_main.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msvfw32/msvideo_main.c [iso-8859-1] Sat Nov 21 10:03:40 2015 @@ -38,27 +38,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(msvideo);
-static inline const char *wine_dbgstr_fcc( DWORD fcc ) -{ - return wine_dbg_sprintf("%c%c%c%c", - LOBYTE(LOWORD(fcc)), HIBYTE(LOWORD(fcc)), - LOBYTE(HIWORD(fcc)), HIBYTE(HIWORD(fcc))); -} - -static WINE_HIC* MSVIDEO_FirstHic /* = NULL */; - -typedef struct _reg_driver reg_driver; -struct _reg_driver -{ - DWORD fccType; - DWORD fccHandler; - DRIVERPROC proc; - LPWSTR name; - reg_driver* next; -}; - -static reg_driver* reg_driver_list = NULL; - /* This one is a macro in order to work for both ASCII and Unicode */ #define fourcc_to_string(str, fcc) do { \ (str)[0] = LOBYTE(LOWORD(fcc)); \ @@ -66,6 +45,64 @@ (str)[2] = LOBYTE(HIWORD(fcc)); \ (str)[3] = HIBYTE(HIWORD(fcc)); \ } while(0) + +static inline const char *wine_dbgstr_fcc( DWORD fcc ) +{ + char fcc_str[5]; + fourcc_to_string(fcc_str, fcc); + fcc_str[4] = '\0'; + /* Last byte may be ' ' in some cases like "DIB " */ + if (isalnum(fcc_str[0]) && isalnum(fcc_str[1]) && isalnum(fcc_str[2]) + && (isalnum(fcc_str[3]) || isspace(fcc_str[3]))) + return wine_dbg_sprintf("%s", fcc_str); + return wine_dbg_sprintf("0x%08x", fcc); +} + +static const char *wine_dbgstr_icerr( int ret ) +{ + const char *str; + if (ret <= ICERR_CUSTOM) + return wine_dbg_sprintf("ICERR_CUSTOM (%d)", ret); +#define XX(x) case (x): str = #x; break + switch (ret) + { + XX(ICERR_OK); + XX(ICERR_DONTDRAW); + XX(ICERR_NEWPALETTE); + XX(ICERR_GOTOKEYFRAME); + XX(ICERR_STOPDRAWING); + XX(ICERR_UNSUPPORTED); + XX(ICERR_BADFORMAT); + XX(ICERR_MEMORY); + XX(ICERR_INTERNAL); + XX(ICERR_BADFLAGS); + XX(ICERR_BADPARAM); + XX(ICERR_BADSIZE); + XX(ICERR_BADHANDLE); + XX(ICERR_CANTUPDATE); + XX(ICERR_ABORT); + XX(ICERR_ERROR); + XX(ICERR_BADBITDEPTH); + XX(ICERR_BADIMAGESIZE); + default: str = wine_dbg_sprintf("UNKNOWN (%d)", ret); + } +#undef XX + return str; +} + +static WINE_HIC* MSVIDEO_FirstHic /* = NULL */; + +typedef struct _reg_driver reg_driver; +struct _reg_driver +{ + DWORD fccType; + DWORD fccHandler; + DRIVERPROC proc; + LPWSTR name; + reg_driver* next; +}; + +static reg_driver* reg_driver_list = NULL;
HMODULE MSVFW32_hModule;
@@ -165,7 +202,7 @@ ret = SendDriverMessage(whic->hdrv, msg, lParam1, lParam2); }
- TRACE(" -> 0x%08lx\n", ret); + TRACE(" -> %s\n", wine_dbgstr_icerr(ret)); return ret; }
@@ -282,8 +319,8 @@ */ BOOL VFWAPI ICInfo( DWORD fccType, DWORD fccHandler, ICINFO *lpicinfo) { - TRACE("(%s,%s/%08x,%p)\n", - wine_dbgstr_fcc(fccType), wine_dbgstr_fcc(fccHandler), fccHandler, lpicinfo); + TRACE("(%s,%s,%p)\n", + wine_dbgstr_fcc(fccType), wine_dbgstr_fcc(fccHandler), lpicinfo);
lpicinfo->fccType = fccType; lpicinfo->fccHandler = fccHandler; @@ -391,6 +428,27 @@
TRACE("(%s,%s,0x%08x)\n", wine_dbgstr_fcc(fccType), wine_dbgstr_fcc(fccHandler), wMode);
+ if (!fccHandler) /* No specific handler, return the first valid for wMode */ + { + HIC local; + ICINFO info; + DWORD loop = 0; + info.dwSize = sizeof(info); + while(ICInfo(fccType, loop++, &info)) + { + /* Ensure fccHandler is not 0x0 because we will recurse on ICOpen */ + if(!info.fccHandler) + continue; + local = ICOpen(fccType, info.fccHandler, wMode); + if (local != 0) + { + TRACE("Returning %s as defult handler for %s\n", + wine_dbgstr_fcc(info.fccHandler), wine_dbgstr_fcc(fccType)); + return local; + } + } + } + /* Check if there is a registered driver that matches */ driver = reg_driver_list; while(driver) @@ -403,22 +461,22 @@ driver = driver->next;
if (driver && driver->proc) - /* The driver has been registered at runtime with its driverproc */ + /* The driver has been registered at runtime with its driverproc */ return ICOpenFunction(fccType, fccHandler, wMode, driver->proc);
/* Well, lParam2 is in fact a LPVIDEO_OPEN_PARMS, but it has the * same layout as ICOPEN */ - icopen.dwSize = sizeof(ICOPEN); - icopen.fccType = fccType; - icopen.fccHandler = fccHandler; - icopen.dwVersion = 0x00001000; /* FIXME */ - icopen.dwFlags = wMode; - icopen.dwError = 0; - icopen.pV1Reserved = NULL; - icopen.pV2Reserved = NULL; - icopen.dnDevNode = 0; /* FIXME */ - + icopen.dwSize = sizeof(ICOPEN); + icopen.fccType = fccType; + icopen.fccHandler = fccHandler; + icopen.dwVersion = 0x00001000; /* FIXME */ + icopen.dwFlags = wMode; + icopen.dwError = 0; + icopen.pV1Reserved = NULL; + icopen.pV2Reserved = NULL; + icopen.dnDevNode = 0; /* FIXME */ + if (!driver) { /* normalize to lower case as in 'vidc' */ ((char*)&fccType)[0] = tolower(((char*)&fccType)[0]); @@ -427,13 +485,13 @@ ((char*)&fccType)[3] = tolower(((char*)&fccType)[3]); icopen.fccType = fccType; /* Seek the driver in the registry */ - fourcc_to_string(codecname, fccType); + fourcc_to_string(codecname, fccType); codecname[4] = '.'; - fourcc_to_string(codecname + 5, fccHandler); + fourcc_to_string(codecname + 5, fccHandler); codecname[9] = '\0';
hdrv = OpenDriver(codecname, drv32W, (LPARAM)&icopen); - if (!hdrv) + if (!hdrv) return 0; } else { /* The driver has been registered at runtime with its name */ @@ -472,15 +530,15 @@ TRACE("(%s,%s,%d,%p)\n", wine_dbgstr_fcc(fccType), wine_dbgstr_fcc(fccHandler), wMode, lpfnHandler);
- icopen.dwSize = sizeof(ICOPEN); - icopen.fccType = fccType; - icopen.fccHandler = fccHandler; - icopen.dwVersion = ICVERSION; - icopen.dwFlags = wMode; - icopen.dwError = 0; - icopen.pV1Reserved = NULL; - icopen.pV2Reserved = NULL; - icopen.dnDevNode = 0; /* FIXME */ + icopen.dwSize = sizeof(ICOPEN); + icopen.fccType = fccType; + icopen.fccHandler = fccHandler; + icopen.dwVersion = ICVERSION; + icopen.dwFlags = wMode; + icopen.dwError = 0; + icopen.pV1Reserved = NULL; + icopen.pV2Reserved = NULL; + icopen.dnDevNode = 0; /* FIXME */
whic = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_HIC)); if (!whic) return 0; @@ -556,7 +614,7 @@ lstrcpyW(picinfo->szDriver, ii.szDriver); }
- TRACE(" -> 0x%08lx\n", ret); + TRACE(" -> %s\n", wine_dbgstr_icerr(ret)); return ret; }
@@ -641,8 +699,8 @@ if (fccType == streamtypeVIDEO) return ICLocate(ICTYPE_VIDEO, fccHandler, lpbiIn, lpbiOut, wMode);
- WARN("(%s,%s,%p,%p,0x%04x) not found!\n", - wine_dbgstr_fcc(fccType), wine_dbgstr_fcc(fccHandler), lpbiIn, lpbiOut, wMode); + ERR("Required media codec '%s %s' not found!\n", + wine_dbgstr_fcc(fccType), wine_dbgstr_fcc(fccHandler)); return 0; }
@@ -753,7 +811,7 @@ icd.ckid = 0; ret = ICSendMessage(hic,ICM_DECOMPRESS,(DWORD_PTR)&icd,sizeof(ICDECOMPRESS));
- TRACE("-> %d\n",ret); + TRACE("-> %s\n",wine_dbgstr_icerr(ret));
return ret; } @@ -1358,7 +1416,7 @@ if (pc->lKey && pc->lKeyCount == (pc->lKey - 1)) /* No key frames if pc->lKey == 0 */ pc->lKeyCount = 0; - icComp->dwFlags = 0; + icComp->dwFlags = 0; }
icComp->lpInput = lpBits; @@ -1367,46 +1425,56 @@ icComp->lpPrev = pc->lpBitsPrev; ret = ICSendMessage(pc->hic, ICM_COMPRESS, (DWORD_PTR)icComp, sizeof(*icComp));
- if (icComp->dwFlags & AVIIF_KEYFRAME) - { - pc->lKeyCount = 1; - *pfKey = TRUE; - TRACE("Key frame\n"); - } - else - *pfKey = FALSE; - - *plSize = icComp->lpbiOutput->biSizeImage; - TRACE(" -- 0x%08x\n", ret); if (ret == ICERR_OK) { - LPVOID oldprev, oldout; -/* We shift Prev and Out, so we don't have to allocate and release memory */ - oldprev = pc->lpBitsPrev; - oldout = pc->lpBitsOut; - pc->lpBitsPrev = oldout; - pc->lpBitsOut = oldprev; - - TRACE("returning: %p\n", icComp->lpOutput); - return icComp->lpOutput; + LPVOID oldprev, oldout; + + if (icComp->dwFlags & AVIIF_KEYFRAME) + { + pc->lKeyCount = 1; + *pfKey = TRUE; + TRACE("Key frame\n"); + } + else + *pfKey = FALSE; + + *plSize = icComp->lpbiOutput->biSizeImage; + + /* We shift Prev and Out, so we don't have to allocate and release memory */ + oldprev = pc->lpBitsPrev; + oldout = pc->lpBitsOut; + pc->lpBitsPrev = oldout; + pc->lpBitsOut = oldprev; + + TRACE("returning: %p, compressed frame size %u\n", icComp->lpOutput, *plSize); + return icComp->lpOutput; } return NULL; }
-/*********************************************************************** - * ICSeqCompressFrameEnd [MSVFW32.@] - */ -void VFWAPI ICSeqCompressFrameEnd(PCOMPVARS pc) -{ - DWORD ret; - TRACE("(%p)\n", pc); - ret = ICSendMessage(pc->hic, ICM_COMPRESS_END, 0, 0); - TRACE(" -- %x\n", ret); +static void clear_compvars(PCOMPVARS pc) +{ HeapFree(GetProcessHeap(), 0, pc->lpbiIn); HeapFree(GetProcessHeap(), 0, pc->lpBitsPrev); HeapFree(GetProcessHeap(), 0, pc->lpBitsOut); HeapFree(GetProcessHeap(), 0, pc->lpState); pc->lpbiIn = pc->lpBitsPrev = pc->lpBitsOut = pc->lpState = NULL; + if (pc->dwFlags & 0x80000000) + { + HeapFree(GetProcessHeap(), 0, pc->lpbiOut); + pc->lpbiOut = NULL; + pc->dwFlags &= ~0x80000000; + } +} + +/*********************************************************************** + * ICSeqCompressFrameEnd [MSVFW32.@] + */ +void VFWAPI ICSeqCompressFrameEnd(PCOMPVARS pc) +{ + TRACE("(%p)\n", pc); + ICSendMessage(pc->hic, ICM_COMPRESS_END, 0, 0); + clear_compvars(pc); }
/*********************************************************************** @@ -1418,68 +1486,106 @@ * it doesn't appear to be used though */ DWORD ret; + ICCOMPRESS* icComp; pc->lpbiIn = HeapAlloc(GetProcessHeap(), 0, sizeof(BITMAPINFO)); if (!pc->lpbiIn) return FALSE;
*pc->lpbiIn = *lpbiIn; - pc->lpBitsPrev = HeapAlloc(GetProcessHeap(), 0, pc->lpbiIn->bmiHeader.biSizeImage); + + pc->lpState = HeapAlloc(GetProcessHeap(), 0, sizeof(ICCOMPRESS) + + sizeof(*icComp->lpckid) + sizeof(*icComp->lpdwFlags)); + if (!pc->lpState) + goto error; + + pc->cbState = sizeof(ICCOMPRESS); + + if (!pc->lpbiOut) + { + /* Ask compressor for needed header size */ + int size = ICSendMessage(pc->hic, ICM_COMPRESS_GET_FORMAT, + (DWORD_PTR)pc->lpbiIn, 0); + if (size <= 0) + goto error; + + pc->lpbiOut = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size); + if (!pc->lpbiOut) + goto error; + /* Flag to show that we allocated lpbiOut for proper cleanup */ + pc->dwFlags |= 0x80000000; + + ret = ICSendMessage(pc->hic, ICM_COMPRESS_GET_FORMAT, + (DWORD_PTR)pc->lpbiIn, (DWORD_PTR)pc->lpbiOut); + if (ret != ICERR_OK) + { + ERR("Could not get output format from compressor\n"); + goto error; + } + if (!pc->lpbiOut->bmiHeader.biSizeImage) + { + /* If we can't know the output frame size for sure at least allocate + * the same size of the input frame and also at least 8Kb to be sure + * that poor compressors will have enough memory to work if the input + * frame is too small. + */ + pc->lpbiOut->bmiHeader.biSizeImage = max(8192, pc->lpbiIn->bmiHeader.biSizeImage); + ERR("Bad codec! Invalid output frame size, guessing from input\n"); + } + } + + TRACE("Input: %ux%u, fcc %s, bpp %u, size %u\n", + pc->lpbiIn->bmiHeader.biWidth, pc->lpbiIn->bmiHeader.biHeight, + wine_dbgstr_fcc(pc->lpbiIn->bmiHeader.biCompression), + pc->lpbiIn->bmiHeader.biBitCount, + pc->lpbiIn->bmiHeader.biSizeImage); + TRACE("Output: %ux%u, fcc %s, bpp %u, size %u\n", + pc->lpbiOut->bmiHeader.biWidth, pc->lpbiOut->bmiHeader.biHeight, + wine_dbgstr_fcc(pc->lpbiOut->bmiHeader.biCompression), + pc->lpbiOut->bmiHeader.biBitCount, + pc->lpbiOut->bmiHeader.biSizeImage); + + /* Buffer for compressed frame data */ + pc->lpBitsOut = HeapAlloc(GetProcessHeap(), 0, pc->lpbiOut->bmiHeader.biSizeImage); + if (!pc->lpBitsOut) + goto error; + + /* Buffer for previous compressed frame data */ + pc->lpBitsPrev = HeapAlloc(GetProcessHeap(), 0, pc->lpbiOut->bmiHeader.biSizeImage); if (!pc->lpBitsPrev) - { - HeapFree(GetProcessHeap(), 0, pc->lpbiIn); - return FALSE; - } - - pc->lpState = HeapAlloc(GetProcessHeap(), 0, sizeof(ICCOMPRESS)); - if (!pc->lpState) - { - HeapFree(GetProcessHeap(), 0, pc->lpbiIn); - HeapFree(GetProcessHeap(), 0, pc->lpBitsPrev); - return FALSE; - } - pc->cbState = sizeof(ICCOMPRESS); - - pc->lpBitsOut = HeapAlloc(GetProcessHeap(), 0, pc->lpbiIn->bmiHeader.biSizeImage); - if (!pc->lpBitsOut) - { - HeapFree(GetProcessHeap(), 0, pc->lpbiIn); - HeapFree(GetProcessHeap(), 0, pc->lpBitsPrev); - HeapFree(GetProcessHeap(), 0, pc->lpState); - return FALSE; - } + goto error; + TRACE("Compvars:\n" - "\tpc:\n" "\tsize: %i\n" - "\tflags: %i\n" + "\tflags: 0x%x\n" "\thic: %p\n" - "\ttype: %x\n" - "\thandler: %x\n" + "\ttype: %s\n" + "\thandler: %s\n" "\tin/out: %p/%p\n" - "key/data/quality: %i/%i/%i\n", - pc->cbSize, pc->dwFlags, pc->hic, pc->fccType, pc->fccHandler, - pc->lpbiIn, pc->lpbiOut, pc->lKey, pc->lDataRate, pc->lQ); + "\tkey/data/quality: %i/%i/%i\n", + pc->cbSize, pc->dwFlags, pc->hic, wine_dbgstr_fcc(pc->fccType), + wine_dbgstr_fcc(pc->fccHandler), pc->lpbiIn, pc->lpbiOut, pc->lKey, + pc->lDataRate, pc->lQ);
ret = ICSendMessage(pc->hic, ICM_COMPRESS_BEGIN, (DWORD_PTR)pc->lpbiIn, (DWORD_PTR)pc->lpbiOut); - TRACE(" -- %x\n", ret); if (ret == ICERR_OK) { - ICCOMPRESS* icComp = pc->lpState; - /* Initialise some variables */ - pc->lFrame = 0; pc->lKeyCount = 0; - - icComp->lpbiOutput = &pc->lpbiOut->bmiHeader; - icComp->lpbiInput = &pc->lpbiIn->bmiHeader; - icComp->lpckid = NULL; - icComp->dwFrameSize = 0; - icComp->dwQuality = pc->lQ; - icComp->lpbiPrev = &pc->lpbiIn->bmiHeader; - return TRUE; - } - HeapFree(GetProcessHeap(), 0, pc->lpbiIn); - HeapFree(GetProcessHeap(), 0, pc->lpBitsPrev); - HeapFree(GetProcessHeap(), 0, pc->lpState); - HeapFree(GetProcessHeap(), 0, pc->lpBitsOut); - pc->lpBitsPrev = pc->lpbiIn = pc->lpState = pc->lpBitsOut = NULL; + icComp = pc->lpState; + /* Initialise some variables */ + pc->lFrame = 0; pc->lKeyCount = 0; + + icComp->lpbiOutput = &pc->lpbiOut->bmiHeader; + icComp->lpbiInput = &pc->lpbiIn->bmiHeader; + icComp->lpckid = (DWORD *)(icComp + 1); + *icComp->lpckid = 0; + icComp->lpdwFlags = (DWORD *)((char *)(icComp + 1) + sizeof(*icComp->lpckid)); + *icComp->lpdwFlags = 0; + icComp->dwFrameSize = 0; + icComp->dwQuality = pc->lQ; + icComp->lpbiPrev = &pc->lpbiIn->bmiHeader; + return TRUE; + } +error: + clear_compvars(pc); return FALSE; }
Modified: trunk/reactos/media/doc/README.WINE URL: http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=6... ============================================================================== --- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original) +++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Sat Nov 21 10:03:40 2015 @@ -128,7 +128,7 @@ reactos/dll/win32/mstask # Synced to WineStaging-1.7.47 reactos/dll/win32/msvcrt20 # Out of sync reactos/dll/win32/msvcrt40 # Out of sync -reactos/dll/win32/msvfw32 # Synced to WineStaging-1.7.47 +reactos/dll/win32/msvfw32 # Synced to WineStaging-1.7.55 reactos/dll/win32/msvidc32 # Synced to WineStaging-1.7.47 reactos/dll/win32/msxml # Synced to WineStaging-1.7.47 reactos/dll/win32/msxml2 # Synced to WineStaging-1.7.47