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;