From: Elizabeth Figura <zfigura(a)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; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/8334