msrle32: Get rid of ICM_GETQUALITY and ICM_SET_QUALITY that should not be supported.
This commit is contained in:
parent
1ed45a7416
commit
f9be296be4
|
@ -39,7 +39,6 @@ static HINSTANCE MSRLE32_hModule = 0;
|
||||||
#define ABS(a) ((a) < 0 ? -(a) : (a))
|
#define ABS(a) ((a) < 0 ? -(a) : (a))
|
||||||
#define SQR(a) ((a) * (a))
|
#define SQR(a) ((a) * (a))
|
||||||
|
|
||||||
#define QUALITY_to_DIST(q) (ICQUALITY_HIGH - q)
|
|
||||||
static inline WORD ColorCmp(WORD clr1, WORD clr2)
|
static inline WORD ColorCmp(WORD clr1, WORD clr2)
|
||||||
{
|
{
|
||||||
UINT a = clr1 - clr2;
|
UINT a = clr1 - clr2;
|
||||||
|
@ -547,7 +546,7 @@ LRESULT MSRLE32_CompressRLE4(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn,
|
||||||
LPBYTE lpOut, BOOL isKey)
|
LPBYTE lpOut, BOOL isKey)
|
||||||
{
|
{
|
||||||
LPWORD lpC;
|
LPWORD lpC;
|
||||||
LONG lLine, lInLine, lDist;
|
LONG lLine, lInLine;
|
||||||
LPBYTE lpOutStart = lpOut;
|
LPBYTE lpOutStart = lpOut;
|
||||||
|
|
||||||
/* pre-conditions */
|
/* pre-conditions */
|
||||||
|
@ -556,7 +555,6 @@ LRESULT MSRLE32_CompressRLE4(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn,
|
||||||
assert(pi->pCurFrame != NULL);
|
assert(pi->pCurFrame != NULL);
|
||||||
|
|
||||||
lpC = pi->pCurFrame;
|
lpC = pi->pCurFrame;
|
||||||
lDist = QUALITY_to_DIST(pi->dwQuality);
|
|
||||||
lInLine = DIBWIDTHBYTES(*lpbiIn);
|
lInLine = DIBWIDTHBYTES(*lpbiIn);
|
||||||
lLine = WIDTHBYTES(lpbiOut->biWidth * 16) / 2;
|
lLine = WIDTHBYTES(lpbiOut->biWidth * 16) / 2;
|
||||||
|
|
||||||
|
@ -569,7 +567,7 @@ LRESULT MSRLE32_CompressRLE4(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn,
|
||||||
x = 0;
|
x = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
x = MSRLE32_CompressRLE4Line(pi, NULL, lpC, lpbiIn, lpIn, lDist, x,
|
x = MSRLE32_CompressRLE4Line(pi, NULL, lpC, lpbiIn, lpIn, 0, x,
|
||||||
&lpOut, &lpbiOut->biSizeImage);
|
&lpOut, &lpbiOut->biSizeImage);
|
||||||
} while (x < lpbiOut->biWidth);
|
} while (x < lpbiOut->biWidth);
|
||||||
|
|
||||||
|
@ -603,7 +601,7 @@ LRESULT MSRLE32_CompressRLE4(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn,
|
||||||
if (jumpx == -1)
|
if (jumpx == -1)
|
||||||
jumpx = x;
|
jumpx = x;
|
||||||
for (count = 0, pos = x; pos < lpbiOut->biWidth; pos++, count++) {
|
for (count = 0, pos = x; pos < lpbiOut->biWidth; pos++, count++) {
|
||||||
if (ColorCmp(lpP[pos], lpC[pos]) > lDist)
|
if (ColorCmp(lpP[pos], lpC[pos]) > 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -663,7 +661,7 @@ LRESULT MSRLE32_CompressRLE4(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn,
|
||||||
|
|
||||||
if (x < lpbiOut->biWidth) {
|
if (x < lpbiOut->biWidth) {
|
||||||
/* skipped the 'same' things corresponding to previous frame */
|
/* skipped the 'same' things corresponding to previous frame */
|
||||||
x = MSRLE32_CompressRLE4Line(pi, lpP, lpC, lpbiIn, lpIn, lDist, x,
|
x = MSRLE32_CompressRLE4Line(pi, lpP, lpC, lpbiIn, lpIn, 0, x,
|
||||||
&lpOut, &lpbiOut->biSizeImage);
|
&lpOut, &lpbiOut->biSizeImage);
|
||||||
}
|
}
|
||||||
} while (x < lpbiOut->biWidth);
|
} while (x < lpbiOut->biWidth);
|
||||||
|
@ -701,7 +699,7 @@ LRESULT MSRLE32_CompressRLE8(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn,
|
||||||
LPBYTE lpOut, BOOL isKey)
|
LPBYTE lpOut, BOOL isKey)
|
||||||
{
|
{
|
||||||
LPWORD lpC;
|
LPWORD lpC;
|
||||||
LONG lDist, lInLine, lLine;
|
LONG lInLine, lLine;
|
||||||
LPBYTE lpOutStart = lpOut;
|
LPBYTE lpOutStart = lpOut;
|
||||||
|
|
||||||
assert(pi != NULL && lpbiOut != NULL);
|
assert(pi != NULL && lpbiOut != NULL);
|
||||||
|
@ -709,7 +707,6 @@ LRESULT MSRLE32_CompressRLE8(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn,
|
||||||
assert(pi->pCurFrame != NULL);
|
assert(pi->pCurFrame != NULL);
|
||||||
|
|
||||||
lpC = pi->pCurFrame;
|
lpC = pi->pCurFrame;
|
||||||
lDist = QUALITY_to_DIST(pi->dwQuality);
|
|
||||||
lInLine = DIBWIDTHBYTES(*lpbiIn);
|
lInLine = DIBWIDTHBYTES(*lpbiIn);
|
||||||
lLine = WIDTHBYTES(lpbiOut->biWidth * 16) / 2;
|
lLine = WIDTHBYTES(lpbiOut->biWidth * 16) / 2;
|
||||||
|
|
||||||
|
@ -722,7 +719,7 @@ LRESULT MSRLE32_CompressRLE8(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn,
|
||||||
x = 0;
|
x = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
x = MSRLE32_CompressRLE8Line(pi, NULL, lpC, lpbiIn, lpIn, lDist, x,
|
x = MSRLE32_CompressRLE8Line(pi, NULL, lpC, lpbiIn, lpIn, 0, x,
|
||||||
&lpOut, &lpbiOut->biSizeImage);
|
&lpOut, &lpbiOut->biSizeImage);
|
||||||
assert(lpOut == (lpOutStart + lpbiOut->biSizeImage));
|
assert(lpOut == (lpOutStart + lpbiOut->biSizeImage));
|
||||||
} while (x < lpbiOut->biWidth);
|
} while (x < lpbiOut->biWidth);
|
||||||
|
@ -757,7 +754,7 @@ LRESULT MSRLE32_CompressRLE8(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn,
|
||||||
if (jumpx == -1)
|
if (jumpx == -1)
|
||||||
jumpx = x;
|
jumpx = x;
|
||||||
for (count = 0, pos = x; pos < lpbiOut->biWidth; pos++, count++) {
|
for (count = 0, pos = x; pos < lpbiOut->biWidth; pos++, count++) {
|
||||||
if (ColorCmp(lpP[pos], lpC[pos]) > lDist)
|
if (ColorCmp(lpP[pos], lpC[pos]) > 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -804,7 +801,7 @@ LRESULT MSRLE32_CompressRLE8(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn,
|
||||||
|
|
||||||
if (x < lpbiOut->biWidth) {
|
if (x < lpbiOut->biWidth) {
|
||||||
/* skip the 'same' things corresponding to previous frame */
|
/* skip the 'same' things corresponding to previous frame */
|
||||||
x = MSRLE32_CompressRLE8Line(pi, lpP, lpC, lpbiIn, lpIn, lDist, x,
|
x = MSRLE32_CompressRLE8Line(pi, lpP, lpC, lpbiIn, lpIn, 0, x,
|
||||||
&lpOut, &lpbiOut->biSizeImage);
|
&lpOut, &lpbiOut->biSizeImage);
|
||||||
assert(lpOut == (lpOutStart + lpbiOut->biSizeImage));
|
assert(lpOut == (lpOutStart + lpbiOut->biSizeImage));
|
||||||
}
|
}
|
||||||
|
@ -1144,7 +1141,6 @@ static CodecInfo* Open(LPICOPEN icinfo)
|
||||||
pi->fccHandler = icinfo->fccHandler;
|
pi->fccHandler = icinfo->fccHandler;
|
||||||
|
|
||||||
pi->bCompress = FALSE;
|
pi->bCompress = FALSE;
|
||||||
pi->dwQuality = MSRLE32_DEFAULTQUALITY;
|
|
||||||
pi->nPrevFrame = -1;
|
pi->nPrevFrame = -1;
|
||||||
pi->pPrevFrame = pi->pCurFrame = NULL;
|
pi->pPrevFrame = pi->pCurFrame = NULL;
|
||||||
|
|
||||||
|
@ -1195,21 +1191,6 @@ static LRESULT GetInfo(const CodecInfo *pi, ICINFO *icinfo, DWORD dwSize)
|
||||||
return sizeof(ICINFO);
|
return sizeof(ICINFO);
|
||||||
}
|
}
|
||||||
|
|
||||||
static LRESULT SetQuality(CodecInfo *pi, LONG lQuality)
|
|
||||||
{
|
|
||||||
/* pre-condition */
|
|
||||||
assert(pi != NULL);
|
|
||||||
|
|
||||||
if (lQuality == -1)
|
|
||||||
lQuality = MSRLE32_DEFAULTQUALITY;
|
|
||||||
else if (ICQUALITY_LOW > lQuality || lQuality > ICQUALITY_HIGH)
|
|
||||||
return ICERR_BADPARAM;
|
|
||||||
|
|
||||||
pi->dwQuality = (DWORD)lQuality;
|
|
||||||
|
|
||||||
return ICERR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static LRESULT Configure(const CodecInfo *pi, HWND hWnd)
|
static LRESULT Configure(const CodecInfo *pi, HWND hWnd)
|
||||||
{
|
{
|
||||||
/* pre-condition */
|
/* pre-condition */
|
||||||
|
@ -1494,8 +1475,6 @@ static LRESULT Compress(CodecInfo *pi, ICCOMPRESS* lpic, DWORD dwSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < 3; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
SetQuality(pi, lpic->dwQuality);
|
|
||||||
|
|
||||||
lpic->lpbiOutput->biSizeImage = 0;
|
lpic->lpbiOutput->biSizeImage = 0;
|
||||||
|
|
||||||
if (lpic->lpbiOutput->biBitCount == 4)
|
if (lpic->lpbiOutput->biBitCount == 4)
|
||||||
|
@ -1850,14 +1829,6 @@ LRESULT CALLBACK MSRLE32_DriverProc(DWORD_PTR dwDrvID, HDRVR hDrv, UINT uMsg,
|
||||||
return ICERR_OK;
|
return ICERR_OK;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ICM_GETQUALITY:
|
|
||||||
if ((LPVOID)lParam1 != NULL) {
|
|
||||||
*((LPDWORD)lParam1) = pi->dwQuality;
|
|
||||||
return ICERR_OK;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case ICM_SETQUALITY:
|
|
||||||
return SetQuality(pi, *(LPLONG)lParam1);
|
|
||||||
case ICM_COMPRESS_GET_FORMAT:
|
case ICM_COMPRESS_GET_FORMAT:
|
||||||
return CompressGetFormat(pi, (LPCBITMAPINFOHEADER)lParam1,
|
return CompressGetFormat(pi, (LPCBITMAPINFOHEADER)lParam1,
|
||||||
(LPBITMAPINFOHEADER)lParam2);
|
(LPBITMAPINFOHEADER)lParam2);
|
||||||
|
|
|
@ -46,7 +46,6 @@
|
||||||
|
|
||||||
typedef struct _CodecInfo {
|
typedef struct _CodecInfo {
|
||||||
FOURCC fccHandler;
|
FOURCC fccHandler;
|
||||||
DWORD dwQuality;
|
|
||||||
|
|
||||||
BOOL bCompress;
|
BOOL bCompress;
|
||||||
LONG nPrevFrame;
|
LONG nPrevFrame;
|
||||||
|
|
|
@ -46,6 +46,15 @@ static void test_encode(void)
|
||||||
ok(res == ICERR_OK, "ICSendMessage(ICM_GETDEFAULTQUALITY) failed: %ld\n", res);
|
ok(res == ICERR_OK, "ICSendMessage(ICM_GETDEFAULTQUALITY) failed: %ld\n", res);
|
||||||
ok(quality == 8500, "quality = %d\n", quality);
|
ok(quality == 8500, "quality = %d\n", quality);
|
||||||
|
|
||||||
|
quality = 0xdeadbeef;
|
||||||
|
res = ICSendMessage(hic, ICM_GETQUALITY, (DWORD_PTR)&quality, 0);
|
||||||
|
ok(res == ICERR_UNSUPPORTED, "ICSendMessage(ICM_GETQUALITY) failed: %ld\n", res);
|
||||||
|
ok(quality == 0xdeadbeef, "quality = %d\n", quality);
|
||||||
|
|
||||||
|
quality = ICQUALITY_HIGH;
|
||||||
|
res = ICSendMessage(hic, ICM_SETQUALITY, (DWORD_PTR)&quality, 0);
|
||||||
|
ok(res == ICERR_UNSUPPORTED, "ICSendMessage(ICM_SETQUALITY) failed: %ld\n", res);
|
||||||
|
|
||||||
ICClose(hic);
|
ICClose(hic);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue