37#define compare_fourcc(fcc1, fcc2) (((fcc1)^(fcc2))&~0x20202020)
46 return (30 * clr.rgbRed + 59 * clr.rgbGreen + 11 * clr.rgbBlue)/4;
49#define GetRawPixel(lpbi,lp,x) \
50 ((lpbi)->biBitCount == 1 ? ((lp)[(x)/8] >> (8 - (x)%8)) & 1 : \
51 ((lpbi)->biBitCount == 4 ? ((lp)[(x)/2] >> (4 * (1 - (x)%2))) & 15 : lp[x]))
161 INT diff = 0x00FFFFFF;
169 int r = ((
int)clrs[
i].rgbRed - (
int)clr.rgbRed);
170 int g = ((
int)clrs[
i].rgbGreen - (
int)clr.rgbGreen);
171 int b = ((
int)clrs[
i].rgbBlue - (
int)clr.rgbBlue);
190 WORD wIntensityTbl[256];
191 DWORD lInLine, lOutLine;
202 lpOut =
pi->pCurFrame;
220 for (
i = 0;
i < 7;
i++)
221 lpOut[8 *
x +
i] = wIntensityTbl[(lpIn[
x] >> (7 -
i)) & 1];
226 lpOut[2 *
x + 0] = wIntensityTbl[(lpIn[
x] >> 4)];
227 lpOut[2 *
x + 1] = wIntensityTbl[(lpIn[
x] & 0x0F)];
232 lpOut[
x] = wIntensityTbl[lpIn[
x]];
255 size = (2 +
a * (2 + ((
a + 2) & ~2)) +
b * (2 + ((
b + 2) & ~2)));
288 if (
ColorCmp(clr1, clr3) <= lDist &&
337 for (count2 = 0,
pos++;
pos <
width && count2 <= 5;
pos++, count2++) {
365 if (pos < lpbi->biWidth) {
396 int extra_byte =
bytes & 0x01;
398 *lpSizeImage += 2 +
bytes + extra_byte;
399 assert(((*lpSizeImage) % 2) == 0);
403 for (
i = 0;
i <
size;
i += 2) {
412 *lpOut++ = (clr1 << 4) | clr2;
431 *lpOut++ = (clr1 << 4) | clr2;
488 int extra_byte =
size % 2;
490 *lpSizeImage += 2 +
size + extra_byte;
505 *lpSizeImage += 2 *
count;
546 LPBYTE lpOutStart = lpOut;
568 }
while (x < lpbiOut->biWidth);
576 lpOut +=
sizeof(
WORD);
587 lpP =
pi->pPrevFrame;
608 }
else if (jumpy || jumpx !=
pos) {
629 *lpOut =
min(
w, 255);
636 lpOut +=
sizeof(
WORD);
642 while (jumpy ||
pos != jumpx) {
646 *lpOut =
min(
pos - jumpx, 255);
649 *lpOut =
min(jumpy, 255);
658 if (x < lpbiOut->biWidth) {
663 }
while (x < lpbiOut->biWidth);
675 lpOut +=
sizeof(
WORD);
683 lpOut +=
sizeof(
WORD);
699 LPBYTE lpOutStart = lpOut;
721 }
while (x < lpbiOut->biWidth);
729 lpOut +=
sizeof(
WORD);
740 lpP =
pi->pPrevFrame;
761 }
else if (jumpy || jumpx !=
pos) {
775 lpOut +=
sizeof(
WORD);
782 while (jumpy ||
pos != jumpx) {
786 *lpOut =
min(
pos - jumpx, 255);
788 *lpOut =
min(jumpy, 255);
798 if (x < lpbiOut->biWidth) {
804 }
while (x < lpbiOut->biWidth);
814 lpOut +=
sizeof(
WORD);
822 lpOut +=
sizeof(
WORD);
870 pixel_ptr += *lpIn++ * bytes_per_pixel;
871 lpOut += *lpIn++ * line_size;
872 if (pixel_ptr >= lpbi->
biWidth * bytes_per_pixel) {
878 extra_byte = (((code1 + 1) & (~1)) / 2) & 0x01;
880 if (pixel_ptr/bytes_per_pixel + code1 > lpbi->
biWidth)
884 for (
i = 0;
i < code0 / 2;
i++) {
885 if (bytes_per_pixel == 1) {
887 lpOut[pixel_ptr++] =
pi->palette_map[(code1 >> 4)];
888 if (2 *
i + 1 <= code0)
889 lpOut[pixel_ptr++] =
pi->palette_map[(code1 & 0x0F)];
890 }
else if (bytes_per_pixel == 2) {
891 code1 = lpIn[
i] >> 4;
892 lpOut[pixel_ptr++] =
pi->palette_map[code1 * 2 + 0];
893 lpOut[pixel_ptr++] =
pi->palette_map[code1 * 2 + 1];
895 if (2 *
i + 1 <= code0) {
896 code1 = lpIn[
i] & 0x0F;
897 lpOut[pixel_ptr++] =
pi->palette_map[code1 * 2 + 0];
898 lpOut[pixel_ptr++] =
pi->palette_map[code1 * 2 + 1];
901 code1 = lpIn[
i] >> 4;
902 lpOut[pixel_ptr + 0] =
pi->palette_map[code1 * 4 + 0];
903 lpOut[pixel_ptr + 1] =
pi->palette_map[code1 * 4 + 1];
904 lpOut[pixel_ptr + 2] =
pi->palette_map[code1 * 4 + 2];
905 pixel_ptr += bytes_per_pixel;
907 if (2 *
i + 1 <= code0) {
908 code1 = lpIn[
i] & 0x0F;
909 lpOut[pixel_ptr + 0] =
pi->palette_map[code1 * 4 + 0];
910 lpOut[pixel_ptr + 1] =
pi->palette_map[code1 * 4 + 1];
911 lpOut[pixel_ptr + 2] =
pi->palette_map[code1 * 4 + 2];
912 pixel_ptr += bytes_per_pixel;
917 if (bytes_per_pixel == 1) {
919 lpOut[pixel_ptr++] =
pi->palette_map[(code1 >> 4)];
920 }
else if (bytes_per_pixel == 2) {
921 code1 = lpIn[
i] >> 4;
922 lpOut[pixel_ptr++] =
pi->palette_map[code1 * 2 + 0];
923 lpOut[pixel_ptr++] =
pi->palette_map[code1 * 2 + 1];
925 code1 = lpIn[
i] >> 4;
926 lpOut[pixel_ptr + 0] =
pi->palette_map[code1 * 4 + 0];
927 lpOut[pixel_ptr + 1] =
pi->palette_map[code1 * 4 + 1];
928 lpOut[pixel_ptr + 2] =
pi->palette_map[code1 * 4 + 2];
929 pixel_ptr += bytes_per_pixel;
941 if (pixel_ptr/bytes_per_pixel + code0 > lpbi->
biWidth)
944 if (bytes_per_pixel == 1) {
945 BYTE c1 =
pi->palette_map[(code1 >> 4)];
946 BYTE c2 =
pi->palette_map[(code1 & 0x0F)];
948 for (
i = 0;
i < code0;
i++) {
950 lpOut[pixel_ptr++] = c1;
952 lpOut[pixel_ptr++] = c2;
954 }
else if (bytes_per_pixel == 2) {
955 BYTE hi1 =
pi->palette_map[(code1 >> 4) * 2 + 0];
956 BYTE lo1 =
pi->palette_map[(code1 >> 4) * 2 + 1];
958 BYTE hi2 =
pi->palette_map[(code1 & 0x0F) * 2 + 0];
959 BYTE lo2 =
pi->palette_map[(code1 & 0x0F) * 2 + 1];
961 for (
i = 0;
i < code0;
i++) {
963 lpOut[pixel_ptr++] = hi1;
964 lpOut[pixel_ptr++] = lo1;
966 lpOut[pixel_ptr++] = hi2;
967 lpOut[pixel_ptr++] = lo2;
971 BYTE b1 =
pi->palette_map[(code1 >> 4) * 4 + 0];
972 BYTE g1 =
pi->palette_map[(code1 >> 4) * 4 + 1];
973 BYTE r1 =
pi->palette_map[(code1 >> 4) * 4 + 2];
975 BYTE b2 =
pi->palette_map[(code1 & 0x0F) * 4 + 0];
976 BYTE g2 =
pi->palette_map[(code1 & 0x0F) * 4 + 1];
977 BYTE r2 =
pi->palette_map[(code1 & 0x0F) * 4 + 2];
979 for (
i = 0;
i < code0;
i++) {
981 lpOut[pixel_ptr + 0] =
b1;
982 lpOut[pixel_ptr + 1] = g1;
983 lpOut[pixel_ptr + 2] =
r1;
985 lpOut[pixel_ptr + 0] =
b2;
986 lpOut[pixel_ptr + 1] = g2;
987 lpOut[pixel_ptr + 2] =
r2;
989 pixel_ptr += bytes_per_pixel;
993 }
while (! bEndFlag);
1001 int bytes_per_pixel;
1010 bytes_per_pixel = (lpbi->
biBitCount + 1) / 8;
1031 pixel_ptr += *lpIn++ * bytes_per_pixel;
1032 lpOut += *lpIn++ * line_size;
1033 if (pixel_ptr >= lpbi->
biWidth * bytes_per_pixel) {
1039 if (pixel_ptr/bytes_per_pixel + code1 > lpbi->
biWidth) {
1040 WARN(
"aborted absolute: (%d=%d/%d+%d) > %d\n",pixel_ptr/bytes_per_pixel + code1,pixel_ptr,bytes_per_pixel,code1,lpbi->
biWidth);
1043 extra_byte = code1 & 0x01;
1048 if (bytes_per_pixel == 1) {
1049 lpOut[pixel_ptr] =
pi->palette_map[code1];
1050 }
else if (bytes_per_pixel == 2) {
1051 lpOut[pixel_ptr + 0] =
pi->palette_map[code1 * 2 + 0];
1052 lpOut[pixel_ptr + 1] =
pi->palette_map[code1 * 2 + 1];
1054 lpOut[pixel_ptr + 0] =
pi->palette_map[code1 * 4 + 0];
1055 lpOut[pixel_ptr + 1] =
pi->palette_map[code1 * 4 + 1];
1056 lpOut[pixel_ptr + 2] =
pi->palette_map[code1 * 4 + 2];
1058 pixel_ptr += bytes_per_pixel;
1067 if (pixel_ptr/bytes_per_pixel + code0 > lpbi->
biWidth) {
1068 WARN(
"aborted coded: (%d=%d/%d+%d) > %d\n",pixel_ptr/bytes_per_pixel + code1,pixel_ptr,bytes_per_pixel,code1,lpbi->
biWidth);
1072 if (bytes_per_pixel == 1) {
1073 code1 =
pi->palette_map[code1];
1075 lpOut[pixel_ptr++] = code1;
1076 }
else if (bytes_per_pixel == 2) {
1077 BYTE hi =
pi->palette_map[code1 * 2 + 0];
1078 BYTE lo =
pi->palette_map[code1 * 2 + 1];
1081 lpOut[pixel_ptr + 0] = hi;
1082 lpOut[pixel_ptr + 1] = lo;
1083 pixel_ptr += bytes_per_pixel;
1086 BYTE r =
pi->palette_map[code1 * 4 + 2];
1087 BYTE g =
pi->palette_map[code1 * 4 + 1];
1088 BYTE b =
pi->palette_map[code1 * 4 + 0];
1091 lpOut[pixel_ptr + 0] =
b;
1092 lpOut[pixel_ptr + 1] =
g;
1093 lpOut[pixel_ptr + 2] =
r;
1094 pixel_ptr += bytes_per_pixel;
1098 }
while (! bEndFlag);
1109 if (icinfo ==
NULL) {
1111 return (
LPVOID)0xFFFF0000;
1116 TRACE(
"(%p = {%u,0x%08X(%4.4s),0x%08X(%4.4s),0x%X,0x%X,...})\n", icinfo,
1131 WARN(
"unknown FOURCC = 0x%08X(%4.4s) !\n",
1142 pi->nPrevFrame = -1;
1143 pi->pPrevFrame =
pi->pCurFrame =
NULL;
1222 TRACE(
"(%p,%p,%p)\n",
pi,lpbiIn,lpbiOut);
1228 if (lpbiIn ==
NULL) {
1229 if (lpbiOut !=
NULL)
1240 switch (
pi->fccHandler) {
1260 if (lpbiOut !=
NULL) {
1297 TRACE(
"(%p,%p,%p)\n",
pi,lpbiIn,lpbiOut);
1300 if (lpbiIn ==
NULL && lpbiOut ==
NULL)
1320 if (lpbiIn ==
NULL && lpbiOut ==
NULL)
1324 if (lpbiIn !=
NULL) {
1339 if (lpbiOut !=
NULL) {
1343 if (lpbiIn !=
NULL) {
1364 TRACE(
"(%p,%p,%p)\n",
pi,lpbiIn,lpbiOut);
1370 if (lpbiIn ==
NULL || lpbiOut ==
NULL)
1377 if (
pi->bDecompress) {
1378 FIXME(
"cannot compress and decompress at same time!\n");
1387 if (
pi->pPrevFrame ==
NULL)
1390 if (
pi->pCurFrame ==
NULL) {
1394 pi->nPrevFrame = -1;
1404 if (
pi->palette_map ==
NULL) {
1435 TRACE(
"lpic={0x%X,%p,%p,%p,%p,%p,%p,%d,%u,%u,%p,%p}\n",lpic->
dwFlags,lpic->
lpbiOutput,lpic->lpOutput,lpic->
lpbiInput,lpic->lpInput,lpic->
lpckid,lpic->
lpdwFlags,lpic->
lFrameNum,lpic->
dwFrameSize,lpic->
dwQuality,lpic->
lpbiPrev,lpic->lpPrev);
1437 if (!
pi->bCompress) {
1454 pi->pPrevFrame =
pi->pCurFrame;
1455 pi->pCurFrame = pTmp;
1459 WARN(
": prev=%d cur=%d gone back? -- untested\n",
pi->nPrevFrame,lpic->
lFrameNum);
1465 WARN(
": prev=%d cur=%d compute swapped -- untested\n",
pi->nPrevFrame,lpic->
lFrameNum);
1470 pTmp =
pi->pPrevFrame;
1471 pi->pPrevFrame =
pi->pCurFrame;
1472 pi->pCurFrame = pTmp;
1478 for (
i = 0;
i < 3;
i++) {
1500 WARN(
"switched to keyframe, was small enough!\n");
1518 pi->pPrevFrame =
pi->pCurFrame;
1519 pi->pCurFrame = pTmp;
1533 if (
pi->pPrevFrame !=
NULL)
1538 if (
pi->pCurFrame !=
NULL)
1545 pi->nPrevFrame = -1;
1548 if (
pi->palette_map !=
NULL) {
1562 TRACE(
"(%p,%p,%p)\n",
pi,lpbiIn,lpbiOut);
1586 if (lpbiOut !=
NULL) {
1601 TRACE(
"(%p,%p,%p)\n",
pi,lpbiIn,lpbiOut);
1607 if (lpbiIn ==
NULL && lpbiOut ==
NULL)
1611 if (lpbiIn !=
NULL) {
1617 if (lpbiOut !=
NULL) {
1621 if (lpbiIn !=
NULL) {
1641 TRACE(
"(%p,%p,%p)\n",
pi,lpbiIn,lpbiOut);
1647 if (lpbiIn ==
NULL || lpbiOut ==
NULL)
1653 if (
pi->bCompress) {
1654 FIXME(
"cannot compress and decompress at same time!\n");
1658 if (
pi->bDecompress)
1677 if (
pi->palette_map ==
NULL)
1680 for (
i = 0;
i < colors;
i++)
1686 if (
pi->palette_map ==
NULL)
1689 for (
i = 0;
i < colors;
i++) {
1693 color = ((rgbIn[
i].rgbRed >> 3) << 10)
1694 | ((rgbIn[
i].rgbGreen >> 3) << 5) | (rgbIn[
i].rgbBlue >> 3);
1696 color = ((rgbIn[
i].rgbRed >> 3) << 11)
1697 | ((rgbIn[
i].rgbGreen >> 3) << 5) | (rgbIn[
i].rgbBlue >> 3);
1699 pi->palette_map[
i * 2 + 1] =
color >> 8;
1700 pi->palette_map[
i * 2 + 0] =
color & 0xFF;
1706 if (
pi->palette_map ==
NULL)
1732 if (!
pi->bDecompress) {
1766 if (
pi->palette_map !=
NULL) {
1779 TRACE(
"(%p,%p,%p)\n",
pi,lpbiIn,lpbiOut);
1785 if (lpbiIn ==
NULL || lpbiOut ==
NULL)
1814 TRACE(
"(%lx,%p,0x%04X,0x%08lX,0x%08lX)\n", dwDrvID, hDrv, uMsg, lParam1, lParam2);
1823 if (dwDrvID != 0xFFFF0000 && (
LPVOID)dwDrvID !=
NULL)
1841 FIXME(
"ICM_CONFIGURE (%ld)\n",lParam1);
1903 return DefDriverProc(dwDrvID, hDrv, uMsg, lParam1, lParam2);
1905 FIXME(
"Unknown message uMsg=0x%08X lParam1=0x%08lX lParam2=0x%08lX\n",uMsg,lParam1,lParam2);
static unsigned char bytes[4]
#define DIBWIDTHBYTES(bi)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define DLL_PROCESS_ATTACH
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
LRESULT WINAPI DefDriverProc(DWORD_PTR dwDriverIdentifier, HDRVR hDrv, UINT Msg, LPARAM lParam1, LPARAM lParam2)
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLuint GLuint GLsizei count
GLdouble GLdouble GLdouble r
GLint GLint GLsizei width
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
GLubyte GLubyte GLubyte GLubyte w
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
HGLOBAL NTAPI GlobalHandle(LPCVOID pMem)
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
TCHAR szTitle[MAX_LOADSTRING]
#define memcpy(s1, s2, n)
#define DRV_QUERYCONFIGURE
#define mmioFOURCC(c0, c1, c2, c3)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
static CRYPT_DATA_BLOB b2[]
static CRYPT_DATA_BLOB b1[]
static LRESULT DecompressGetPalette(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut)
static BOOL isSupportedDIB(LPCBITMAPINFOHEADER lpbi)
static LRESULT CompressBegin(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPCBITMAPINFOHEADER lpbiOut)
static LRESULT Compress(CodecInfo *pi, ICCOMPRESS *lpic, DWORD dwSize)
BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved)
static LRESULT Decompress(CodecInfo *pi, ICDECOMPRESS *pic, DWORD dwSize)
static LRESULT About(CodecInfo *pi, HWND hWnd)
static LRESULT CompressQuery(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPCBITMAPINFOHEADER lpbiOut)
static LRESULT MSRLE32_CompressRLE8(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, const BYTE *lpIn, LPBITMAPINFOHEADER lpbiOut, LPBYTE lpOut, BOOL isKey)
#define GetRawPixel(lpbi, lp, x)
static BYTE MSRLE32_GetNearestPaletteIndex(UINT count, const RGBQUAD *clrs, RGBQUAD clr)
static LRESULT DecompressEnd(CodecInfo *pi)
static LRESULT MSRLE32_DecompressRLE4(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbi, const BYTE *lpIn, LPBYTE lpOut)
LRESULT CALLBACK MSRLE32_DriverProc(DWORD_PTR dwDrvID, HDRVR hDrv, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
static LRESULT MSRLE32_DecompressRLE8(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbi, const BYTE *lpIn, LPBYTE lpOut)
static LRESULT CompressEnd(CodecInfo *pi)
static LRESULT CompressGetFormat(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut)
static HINSTANCE MSRLE32_hModule
static BOOL isSupportedMRLE(LPCBITMAPINFOHEADER lpbi)
static WORD ColorCmp(WORD clr1, WORD clr2)
#define compare_fourcc(fcc1, fcc2)
static LRESULT CompressGetSize(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPCBITMAPINFOHEADER lpbiOut)
static LRESULT DecompressGetFormat(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut)
static LONG MSRLE32_GetMaxCompressedSize(LPCBITMAPINFOHEADER lpbi)
static INT MSRLE32_CompressRLE8Line(const CodecInfo *pi, const WORD *lpP, const WORD *lpC, LPCBITMAPINFOHEADER lpbi, const BYTE *lpIn, INT x, LPBYTE *ppOut, DWORD *lpSizeImage)
static LRESULT DecompressBegin(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPCBITMAPINFOHEADER lpbiOut)
static void computeInternalFrame(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, const BYTE *lpIn)
static INT MSRLE32_CompressRLE4Line(const CodecInfo *pi, const WORD *lpP, const WORD *lpC, LPCBITMAPINFOHEADER lpbi, const BYTE *lpIn, LONG lDist, INT x, LPBYTE *ppOut, DWORD *lpSizeImage)
static LRESULT Configure(const CodecInfo *pi, HWND hWnd)
static INT countDiffRLE4(const WORD *lpP, const WORD *lpA, const WORD *lpB, INT pos, LONG lDist, LONG width)
static WORD Intensity(RGBQUAD clr)
static LRESULT MSRLE32_CompressRLE4(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, const BYTE *lpIn, LPBITMAPINFOHEADER lpbiOut, LPBYTE lpOut, BOOL isKey)
static LRESULT DecompressQuery(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPCBITMAPINFOHEADER lpbiOut)
static INT countDiffRLE8(const WORD *lpP, const WORD *lpA, const WORD *lpB, INT pos, LONG lDist, LONG width)
static LRESULT GetInfo(const CodecInfo *pi, ICINFO *icinfo, DWORD dwSize)
#define MSRLE32_DEFAULTQUALITY
LPBITMAPINFOHEADER lpbiInput
LPBITMAPINFOHEADER lpbiPrev
LPBITMAPINFOHEADER lpbiOutput
LPBITMAPINFOHEADER lpbiInput
LPBITMAPINFOHEADER lpbiOutput
#define ICM_COMPRESS_BEGIN
#define ICM_COMPRESS_GET_SIZE
#define ICM_GETDEFAULTKEYFRAMERATE
#define ICM_COMPRESS_QUERY
#define ICM_DECOMPRESS_GET_PALETTE
#define ICM_DECOMPRESS_QUERY
#define ICERR_UNSUPPORTED
#define VIDCF_FASTTEMPORALC
#define ICM_DECOMPRESS_GET_FORMAT
#define ICCOMPRESS_KEYFRAME
#define ICERR_GOTOKEYFRAME
#define ICM_DECOMPRESS_END
#define ICM_COMPRESS_GET_FORMAT
#define ICM_DECOMPRESS_BEGIN
#define MAKEAVICKID(tcc, stream)
#define ICM_GETDEFAULTQUALITY
#define StreamFromFOURCC(fcc)
#define ICM_DECOMPRESS_SET_PALETTE
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
#define MB_ICONINFORMATION