From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/ir50_32/ir50.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/dlls/ir50_32/ir50.c b/dlls/ir50_32/ir50.c index 53f25c984ee..611d3c076a3 100644 --- a/dlls/ir50_32/ir50.c +++ b/dlls/ir50_32/ir50.c @@ -101,9 +101,8 @@ IV50_DecompressQuery( LPBITMAPINFO in, LPBITMAPINFO out ) return ICERR_BADFORMAT; }
- if ( in->bmiHeader.biPlanes != out->bmiHeader.biPlanes || - in->bmiHeader.biHeight != abs(out->bmiHeader.biHeight) || - in->bmiHeader.biWidth != out->bmiHeader.biWidth ) + if (in->bmiHeader.biHeight != abs(out->bmiHeader.biHeight) + || in->bmiHeader.biWidth != out->bmiHeader.biWidth) { TRACE("incompatible output dimensions requested\n"); return ICERR_BADFORMAT;
From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/ir50_32/ir50.c | 5 ++++- dlls/ir50_32/tests/ir50_32.c | 10 +++++----- 2 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/dlls/ir50_32/ir50.c b/dlls/ir50_32/ir50.c index 611d3c076a3..1e40435ab91 100644 --- a/dlls/ir50_32/ir50.c +++ b/dlls/ir50_32/ir50.c @@ -125,9 +125,12 @@ IV50_DecompressGetFormat( LPBITMAPINFO in, LPBITMAPINFO out ) size = in->bmiHeader.biSize; if ( out ) { - memcpy( out, in, size ); + memset(&out->bmiHeader, 0, sizeof(out->bmiHeader)); + out->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + out->bmiHeader.biWidth = in->bmiHeader.biWidth; out->bmiHeader.biHeight = abs(in->bmiHeader.biHeight); out->bmiHeader.biCompression = BI_RGB; + out->bmiHeader.biPlanes = 1; out->bmiHeader.biBitCount = 24; out->bmiHeader.biSizeImage = out->bmiHeader.biWidth * out->bmiHeader.biHeight * 3; return ICERR_OK; diff --git a/dlls/ir50_32/tests/ir50_32.c b/dlls/ir50_32/tests/ir50_32.c index b19a69da3c8..a82c58ee759 100644 --- a/dlls/ir50_32/tests/ir50_32.c +++ b/dlls/ir50_32/tests/ir50_32.c @@ -64,14 +64,14 @@ static void test_formats(void) ok(out->bmiHeader.biSize == sizeof(BITMAPINFOHEADER), "Got size %lu.\n", out->bmiHeader.biSize); ok(out->bmiHeader.biWidth == 320, "Got width %ld.\n", out->bmiHeader.biWidth); ok(out->bmiHeader.biHeight == 240, "Got height %ld.\n", out->bmiHeader.biHeight); - todo_wine ok(out->bmiHeader.biPlanes == 1, "Got %u planes.\n", out->bmiHeader.biPlanes); + ok(out->bmiHeader.biPlanes == 1, "Got %u planes.\n", out->bmiHeader.biPlanes); ok(out->bmiHeader.biBitCount == 24, "Got depth %u.\n", out->bmiHeader.biBitCount); ok(out->bmiHeader.biCompression == BI_RGB, "Got compression %#lx.\n", out->bmiHeader.biCompression); ok(out->bmiHeader.biSizeImage == 320 * 240 * 3, "Got image size %lu.\n", out->bmiHeader.biSizeImage); - todo_wine ok(!out->bmiHeader.biXPelsPerMeter, "Got horizontal resolution %ld.\n", out->bmiHeader.biXPelsPerMeter); - todo_wine ok(!out->bmiHeader.biYPelsPerMeter, "Got vertical resolution %ld.\n", out->bmiHeader.biYPelsPerMeter); - todo_wine ok(!out->bmiHeader.biClrUsed, "Got %lu used colours.\n", out->bmiHeader.biClrUsed); - todo_wine ok(!out->bmiHeader.biClrImportant, "Got %lu important colours.\n", out->bmiHeader.biClrImportant); + ok(!out->bmiHeader.biXPelsPerMeter, "Got horizontal resolution %ld.\n", out->bmiHeader.biXPelsPerMeter); + ok(!out->bmiHeader.biYPelsPerMeter, "Got vertical resolution %ld.\n", out->bmiHeader.biYPelsPerMeter); + ok(!out->bmiHeader.biClrUsed, "Got %lu used colours.\n", out->bmiHeader.biClrUsed); + ok(!out->bmiHeader.biClrImportant, "Got %lu important colours.\n", out->bmiHeader.biClrImportant); ok(out->bmiColors[0].rgbRed == 0xcc, "Expected colours to be unmodified.\n");
ret = ICDecompressQuery(hic, &in, out);
From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/ir50_32/ir50.c | 5 +---- dlls/ir50_32/tests/ir50_32.c | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/dlls/ir50_32/ir50.c b/dlls/ir50_32/ir50.c index 1e40435ab91..c7347815332 100644 --- a/dlls/ir50_32/ir50.c +++ b/dlls/ir50_32/ir50.c @@ -115,14 +115,11 @@ IV50_DecompressQuery( LPBITMAPINFO in, LPBITMAPINFO out ) static LRESULT IV50_DecompressGetFormat( LPBITMAPINFO in, LPBITMAPINFO out ) { - DWORD size; - TRACE("ICM_DECOMPRESS_GETFORMAT %p %p\n", in, out);
if (compare_fourcc(in->bmiHeader.biCompression, IV50_MAGIC)) return ICERR_BADFORMAT;
- size = in->bmiHeader.biSize; if ( out ) { memset(&out->bmiHeader, 0, sizeof(out->bmiHeader)); @@ -136,7 +133,7 @@ IV50_DecompressGetFormat( LPBITMAPINFO in, LPBITMAPINFO out ) return ICERR_OK; }
- return size; + return offsetof(BITMAPINFO, bmiColors[256]); }
static LRESULT IV50_DecompressBegin( IMFTransform *decoder, LPBITMAPINFO in, LPBITMAPINFO out ) diff --git a/dlls/ir50_32/tests/ir50_32.c b/dlls/ir50_32/tests/ir50_32.c index a82c58ee759..0a52fa29cb5 100644 --- a/dlls/ir50_32/tests/ir50_32.c +++ b/dlls/ir50_32/tests/ir50_32.c @@ -49,7 +49,7 @@ static void test_formats(void) ok(ret == ICERR_OK, "Got %Id.\n", ret);
ret = ICDecompressGetFormat(hic, &in, NULL); - todo_wine ok(ret == offsetof(BITMAPINFO, bmiColors[256]), "Got %Id.\n", ret); + ok(ret == offsetof(BITMAPINFO, bmiColors[256]), "Got %Id.\n", ret);
in.biWidth = 320; in.biHeight = 240;
From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/ir50_32/ir50.c | 2 +- dlls/ir50_32/tests/ir50_32.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/dlls/ir50_32/ir50.c b/dlls/ir50_32/ir50.c index c7347815332..9d7b16c00ab 100644 --- a/dlls/ir50_32/ir50.c +++ b/dlls/ir50_32/ir50.c @@ -105,7 +105,7 @@ IV50_DecompressQuery( LPBITMAPINFO in, LPBITMAPINFO out ) || in->bmiHeader.biWidth != out->bmiHeader.biWidth) { TRACE("incompatible output dimensions requested\n"); - return ICERR_BADFORMAT; + return ICERR_BADPARAM; } }
diff --git a/dlls/ir50_32/tests/ir50_32.c b/dlls/ir50_32/tests/ir50_32.c index 0a52fa29cb5..080a7a1f930 100644 --- a/dlls/ir50_32/tests/ir50_32.c +++ b/dlls/ir50_32/tests/ir50_32.c @@ -85,12 +85,12 @@ static void test_formats(void)
out->bmiHeader.biHeight = -480; ret = ICDecompressQuery(hic, &in, out); - todo_wine ok(ret == ICERR_BADPARAM, "Got %Id.\n", ret); + ok(ret == ICERR_BADPARAM, "Got %Id.\n", ret); out->bmiHeader.biHeight = -240;
out->bmiHeader.biWidth = 640; ret = ICDecompressQuery(hic, &in, out); - todo_wine ok(ret == ICERR_BADPARAM, "Got %Id.\n", ret); + ok(ret == ICERR_BADPARAM, "Got %Id.\n", ret); out->bmiHeader.biWidth = 320;
out->bmiHeader.biBitCount = 8;
From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/ir50_32/ir50.c | 20 ++++++++++++++------ dlls/ir50_32/tests/ir50_32.c | 2 +- 2 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/dlls/ir50_32/ir50.c b/dlls/ir50_32/ir50.c index 9d7b16c00ab..29e6e0968d1 100644 --- a/dlls/ir50_32/ir50.c +++ b/dlls/ir50_32/ir50.c @@ -89,15 +89,21 @@ IV50_DecompressQuery( LPBITMAPINFO in, LPBITMAPINFO out ) TRACE("out->width = %ld\n", out->bmiHeader.biWidth); TRACE("out->compr = %#lx\n", out->bmiHeader.biCompression);
- if ( out->bmiHeader.biCompression != BI_RGB ) + if (out->bmiHeader.biCompression == BI_RGB) { - TRACE("incompatible compression requested\n"); - return ICERR_BADFORMAT; + if (out->bmiHeader.biBitCount != 32 && out->bmiHeader.biBitCount != 24 && out->bmiHeader.biBitCount != 16) + return ICERR_BADFORMAT; } + else if (out->bmiHeader.biCompression == BI_BITFIELDS) + { + const DWORD *masks = (const DWORD *)(&out->bmiColors[0]);
- if ( out->bmiHeader.biBitCount != 32 && out->bmiHeader.biBitCount != 24 && out->bmiHeader.biBitCount != 16 ) + if (out->bmiHeader.biBitCount != 16 + || masks[0] != 0xf800 || masks[1] != 0x07e0 || masks[2] != 0x001f) + return ICERR_BADFORMAT; + } + else { - TRACE("incompatible depth requested\n"); return ICERR_BADFORMAT; }
@@ -148,7 +154,9 @@ static LRESULT IV50_DecompressBegin( IMFTransform *decoder, LPBITMAPINFO in, LPB if ( !decoder ) return ICERR_BADPARAM;
- if ( out->bmiHeader.biBitCount == 32 ) + if (out->bmiHeader.biCompression == BI_BITFIELDS) + output_subtype = &MFVideoFormat_RGB565; + else if (out->bmiHeader.biBitCount == 32) output_subtype = &MFVideoFormat_RGB32; else if ( out->bmiHeader.biBitCount == 24 ) output_subtype = &MFVideoFormat_RGB24; diff --git a/dlls/ir50_32/tests/ir50_32.c b/dlls/ir50_32/tests/ir50_32.c index 080a7a1f930..8817423279e 100644 --- a/dlls/ir50_32/tests/ir50_32.c +++ b/dlls/ir50_32/tests/ir50_32.c @@ -111,7 +111,7 @@ static void test_formats(void) ((DWORD *)&out->bmiColors[0])[1] = 0x07e0; ((DWORD *)&out->bmiColors[0])[2] = 0x001f; ret = ICDecompressQuery(hic, &in, out); - todo_wine ok(ret == ICERR_OK, "Got %Id.\n", ret); + ok(ret == ICERR_OK, "Got %Id.\n", ret);
out->bmiHeader.biCompression = mmioFOURCC('C','L','J','R'); out->bmiHeader.biBitCount = 8;