[PATCH 1/7] windowscodecs/tests: Add tests for encoding 2bpp/4bpp images with a palette.

Dmitry Timoshkov dmitry at baikal.ru
Fri Nov 30 00:52:56 CST 2018


Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
 dlls/windowscodecs/tests/converter.c | 337 ++++++++++++++++++++++-----
 1 file changed, 283 insertions(+), 54 deletions(-)

diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c
index 5f9f1d88a3..c221f3b99e 100644
--- a/dlls/windowscodecs/tests/converter.c
+++ b/dlls/windowscodecs/tests/converter.c
@@ -316,6 +316,20 @@ static const struct bitmap_data testdata_BlackWhite = {
 static const struct bitmap_data testdata_1bppIndexed = {
     &GUID_WICPixelFormat1bppIndexed, 1, bits_1bpp, 32, 2, 96.0, 96.0};
 
+/* some encoders (like BMP) require data to be 4-bytes aligned */
+static const BYTE bits_2bpp[] = {
+    0x55,0x55,0x55,0x55,
+    0xaa,0xaa,0xaa,0xaa};
+static const struct bitmap_data testdata_2bppIndexed = {
+    &GUID_WICPixelFormat2bppIndexed, 2, bits_2bpp, 16, 2, 96.0, 96.0};
+
+/* some encoders (like BMP) require data to be 4-bytes aligned */
+static const BYTE bits_4bpp[] = {
+    0x55,0x55,0x55,0x55,
+    0xaa,0xaa,0xaa,0xaa};
+static const struct bitmap_data testdata_4bppIndexed = {
+    &GUID_WICPixelFormat4bppIndexed, 4, bits_4bpp, 8, 2, 96.0, 96.0};
+
 static const BYTE bits_8bpp[] = {
     0,1,2,3,
     4,5,6,7};
@@ -632,64 +646,224 @@ static void test_encoder_properties(const CLSID* clsid_encoder, IPropertyBag2 *o
     }
 }
 
-static void check_bmp_format(IStream *stream, const struct bitmap_data *data)
+static void load_stream(IUnknown *reader, IStream *stream)
+{
+    HRESULT hr;
+    IWICPersistStream *persist;
+#ifdef WORDS_BIGENDIAN
+    DWORD persist_options = WICPersistOptionBigEndian;
+#else
+    DWORD persist_options = WICPersistOptionLittleEndian;
+#endif
+
+    hr = IUnknown_QueryInterface(reader, &IID_IWICPersistStream, (void **)&persist);
+    ok(hr == S_OK, "QueryInterface failed, hr=%x\n", hr);
+
+    hr = IWICPersistStream_LoadEx(persist, stream, NULL, persist_options);
+    ok(hr == S_OK, "LoadEx failed, hr=%x\n", hr);
+
+    IWICPersistStream_Release(persist);
+}
+
+static void check_tiff_format(IStream *stream, const WICPixelFormatGUID *format)
 {
-    BITMAPFILEHEADER bfh;
-    BITMAPINFOHEADER bih;
     HRESULT hr;
-    ULONG len;
+    IWICMetadataReader *reader;
+    PROPVARIANT id, value;
+    struct
+    {
+        USHORT byte_order;
+        USHORT version;
+        ULONG  dir_offset;
+    } tiff;
+    LARGE_INTEGER pos;
+    UINT count, i;
+    int width, height, bps, photo, samples, colormap;
+    struct
+    {
+        int id, *value;
+    } tag[] =
+    {
+        { 0x100, &width }, { 0x101, &height }, { 0x102, &bps },
+        { 0x106, &photo }, { 0x115, &samples }, { 0x140, &colormap }
+    };
+
+    memset(&tiff, 0, sizeof(tiff));
+    hr = IStream_Read(stream, &tiff, sizeof(tiff), NULL);
+    ok(hr == S_OK, "IStream_Read error %#x\n", hr);
+    ok(tiff.byte_order == MAKEWORD('I','I') || tiff.byte_order == MAKEWORD('M','M'),
+       "wrong TIFF byte order mark %02x\n", tiff.byte_order);
+    ok(tiff.version == 42, "wrong TIFF version %u\n", tiff.version);
+
+    pos.QuadPart = tiff.dir_offset;
+    hr = IStream_Seek(stream, pos, SEEK_SET, NULL);
+    ok(hr == S_OK, "IStream_Seek error %#x\n", hr);
+
+    hr = CoCreateInstance(&CLSID_WICIfdMetadataReader, NULL, CLSCTX_INPROC_SERVER,
+                          &IID_IWICMetadataReader, (void **)&reader);
+    ok(hr == S_OK, "CoCreateInstance error %#x\n", hr);
+
+    load_stream((IUnknown *)reader, stream);
 
-    hr = IStream_Read(stream, &bfh, sizeof(bfh), &len);
-    ok(hr == S_OK, "Failed to read file header, hr %#x.\n", hr);
+    hr = IWICMetadataReader_GetCount(reader, &count);
+    ok(hr == S_OK, "GetCount error %#x\n", hr);
+    ok(count != 0, "wrong count %u\n", count);
 
-    hr = IStream_Read(stream, &bih, sizeof(bih), &len);
-    ok(hr == S_OK, "Failed to read file header, hr %#x.\n", hr);
+    for (i = 0; i < sizeof(tag)/sizeof(tag[0]); i++)
+    {
+        PropVariantInit(&id);
+        PropVariantInit(&value);
+
+        id.vt = VT_UI2;
+        U(id).uiVal = tag[i].id;
+        hr = IWICMetadataReader_GetValue(reader, NULL, &id, &value);
+        ok(hr == S_OK || (tag[i].id == 0x140 && hr == WINCODEC_ERR_PROPERTYNOTFOUND),
+           "GetValue(%04x) error %#x\n", tag[i].id, hr);
+        if (hr == S_OK)
+        {
+            ok(value.vt == VT_UI2 || value.vt == VT_UI4 || value.vt == (VT_UI2 | VT_VECTOR), "wrong vt: %d\n", value.vt);
+            tag[i].value[0] = U(value).uiVal;
+        }
+        else
+            tag[i].value[0] = -1;
+    }
 
-    ok(bfh.bfType == 0x4d42, "Unexpected header type, %#x.\n", bfh.bfType);
-    ok(bfh.bfSize != 0, "Unexpected bitmap size %d.\n", bfh.bfSize);
-    ok(bfh.bfReserved1 == 0, "Unexpected bfReserved1 field.\n");
-    ok(bfh.bfReserved2 == 0, "Unexpected bfReserved2 field.\n");
+    IWICMetadataReader_Release(reader);
 
-    if (IsEqualGUID(data->format, &GUID_WICPixelFormat1bppIndexed)
-            || IsEqualGUID(data->format, &GUID_WICPixelFormat8bppIndexed))
+    if (IsEqualGUID(format, &GUID_WICPixelFormatBlackWhite))
     {
-        /* TODO: test with actual palette size */
-        ok(bfh.bfOffBits > sizeof(bfh) + sizeof(bih), "Unexpected data offset %d, format %s.\n",
-            bfh.bfOffBits, wine_dbgstr_guid(data->format));
+        ok(width == 32, "wrong width %u\n", width);
+        ok(height == 2, "wrong height %u\n", height);
+
+        ok(bps == 1, "wrong bps %d\n", bps);
+        ok(photo == 1, "wrong photometric %d\n", photo);
+        ok(samples == 1, "wrong samples %d\n", samples);
+        ok(colormap == -1, "wrong colormap %d\n", colormap);
     }
-    else
-        ok(bfh.bfOffBits == sizeof(bfh) + sizeof(bih), "Unexpected data offset %d, format %s.\n",
-            bfh.bfOffBits, wine_dbgstr_guid(data->format));
-
-    ok(bih.biSize == sizeof(bih), "Unexpected header size %d.\n", bih.biSize);
-    ok(bih.biWidth == data->width, "Unexpected bitmap width %d.\n", bih.biWidth);
-    ok(bih.biHeight == data->height, "Unexpected bitmap height %d.\n", bih.biHeight);
-    ok(bih.biPlanes == 1, "Unexpected planes count %d.\n", bih.biPlanes);
-
-    if (IsEqualGUID(data->format, &GUID_WICPixelFormat1bppIndexed))
-        ok(bih.biBitCount == 1, "Unexpected bit count %u, format %s.\n", bih.biBitCount,
-            wine_dbgstr_guid(data->format));
-    else if (IsEqualGUID(data->format, &GUID_WICPixelFormat8bppIndexed))
-        ok(bih.biBitCount == 8, "Unexpected bit count %u, format %s.\n", bih.biBitCount,
-            wine_dbgstr_guid(data->format));
-    else if (IsEqualGUID(data->format, &GUID_WICPixelFormat32bppBGR))
-        ok(bih.biBitCount == 32, "Unexpected bit count %u, format %s.\n", bih.biBitCount,
-            wine_dbgstr_guid(data->format));
-
-    ok(bih.biCompression == BI_RGB, "Unexpected compression mode %u.\n", bih.biCompression);
-todo_wine
-    ok(bih.biSizeImage == 0, "Unexpected image size %d.\n", bih.biSizeImage);
-    ok(bih.biXPelsPerMeter == 3780 || broken(bih.biXPelsPerMeter == 0) /* XP */, "Unexpected horz resolution %d.\n",
-            bih.biXPelsPerMeter);
-    ok(bih.biYPelsPerMeter == 3780 || broken(bih.biYPelsPerMeter == 0) /* XP */, "Unexpected vert resolution %d.\n",
-            bih.biYPelsPerMeter);
+    else if (IsEqualGUID(format, &GUID_WICPixelFormat1bppIndexed))
+    {
+        ok(width == 32, "wrong width %u\n", width);
+        ok(height == 2, "wrong height %u\n", height);
+
+        ok(bps == 1, "wrong bps %d\n", bps);
+        ok(photo == 3, "wrong photometric %d\n", photo);
+        ok(samples == 1, "wrong samples %d\n", samples);
+        ok(colormap == 6, "wrong colormap %d\n", colormap);
+    }
+    else if (IsEqualGUID(format, &GUID_WICPixelFormat2bppIndexed))
+    {
+        ok(width == 32, "wrong width %u\n", width);
+        ok(height == 2, "wrong height %u\n", height);
+
+        ok(bps == 1, "wrong bps %d\n", bps);
+        ok(photo == 3, "wrong photometric %d\n", photo);
+        ok(samples == 1, "wrong samples %d\n", samples);
+        ok(colormap == 6, "wrong colormap %d\n", colormap);
+    }
+    else if (IsEqualGUID(format, &GUID_WICPixelFormat4bppIndexed))
+    {
+        ok(width == 8, "wrong width %u\n", width);
+        ok(height == 2, "wrong height %u\n", height);
 
-    /* FIXME: test actual data */
+        ok(bps == 4, "wrong bps %d\n", bps);
+        ok(photo == 3, "wrong photometric %d\n", photo);
+        ok(samples == 1, "wrong samples %d\n", samples);
+        ok(colormap == 48, "wrong colormap %d\n", colormap);
+    }
+    else if (IsEqualGUID(format, &GUID_WICPixelFormat8bppIndexed))
+    {
+        ok(width == 4, "wrong width %u\n", width);
+        ok(height == 2, "wrong height %u\n", height);
+
+        ok(bps == 8, "wrong bps %d\n", bps);
+        ok(photo == 3, "wrong photometric %d\n", photo);
+        ok(samples == 1, "wrong samples %d\n", samples);
+        ok(colormap == 768, "wrong colormap %d\n", colormap);
+    }
+    else if (IsEqualGUID(format, &GUID_WICPixelFormat24bppBGR))
+    {
+        ok(width == 4, "wrong width %u\n", width);
+        ok(height == 2, "wrong height %u\n", height);
+
+        ok(bps == 3, "wrong bps %d\n", bps);
+        ok(photo == 2, "wrong photometric %d\n", photo);
+        ok(samples == 3, "wrong samples %d\n", samples);
+        ok(colormap == -1, "wrong colormap %d\n", colormap);
+    }
+    else
+        ok(0, "unknown TIFF pixel format %s\n", wine_dbgstr_guid(format));
 }
 
-static void check_tiff_format(IStream *stream, const WICPixelFormatGUID *format)
+static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format)
 {
-    /* FIXME */
+    HRESULT hr;
+    BITMAPFILEHEADER bfh;
+    BITMAPV5HEADER bih;
+
+    memset(&bfh, 0, sizeof(bfh));
+    hr = IStream_Read(stream, &bfh, sizeof(bfh), NULL);
+    ok(hr == S_OK, "IStream_Read error %#x\n", hr);
+
+    ok(bfh.bfType == 0x4d42, "wrong BMP signature %02x\n", bfh.bfType);
+    ok(bfh.bfReserved1 == 0, "wrong bfReserved1 %02x\n", bfh.bfReserved1);
+    ok(bfh.bfReserved2 == 0, "wrong bfReserved2 %02x\n", bfh.bfReserved2);
+
+    memset(&bih, 0, sizeof(bih));
+    hr = IStream_Read(stream, &bih, sizeof(bih), NULL);
+    ok(hr == S_OK, "IStream_Read error %#x\n", hr);
+
+    if (IsEqualGUID(format, &GUID_WICPixelFormat1bppIndexed))
+    {
+        ok(bih.bV5Width == 32, "wrong width %u\n", bih.bV5Width);
+        ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height);
+
+        ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes);
+        ok(bih.bV5BitCount == 1, "wrong BitCount %d\n", bih.bV5BitCount);
+        ok(bih.bV5ClrUsed == 256, "wrong ClrUsed %d\n", bih.bV5ClrUsed);
+        ok(bih.bV5ClrImportant == 256, "wrong ClrImportant %d\n", bih.bV5ClrImportant);
+    }
+    else if (IsEqualGUID(format, &GUID_WICPixelFormat2bppIndexed))
+    {
+        ok(bih.bV5Width == 16, "wrong width %u\n", bih.bV5Width);
+        ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height);
+
+        ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes);
+        ok(bih.bV5BitCount == 2, "wrong BitCount %d\n", bih.bV5BitCount);
+        ok(bih.bV5ClrUsed == 256, "wrong ClrUsed %d\n", bih.bV5ClrUsed);
+        ok(bih.bV5ClrImportant == 256, "wrong ClrImportant %d\n", bih.bV5ClrImportant);
+    }
+    else if (IsEqualGUID(format, &GUID_WICPixelFormat4bppIndexed))
+    {
+        ok(bih.bV5Width == 8, "wrong width %u\n", bih.bV5Width);
+        ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height);
+
+        ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes);
+        ok(bih.bV5BitCount == 4, "wrong BitCount %d\n", bih.bV5BitCount);
+        ok(bih.bV5ClrUsed == 256, "wrong ClrUsed %d\n", bih.bV5ClrUsed);
+        ok(bih.bV5ClrImportant == 256, "wrong ClrImportant %d\n", bih.bV5ClrImportant);
+    }
+    else if (IsEqualGUID(format, &GUID_WICPixelFormat8bppIndexed))
+    {
+        ok(bih.bV5Width == 4, "wrong width %u\n", bih.bV5Width);
+        ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height);
+
+        ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes);
+        ok(bih.bV5BitCount == 8, "wrong BitCount %d\n", bih.bV5BitCount);
+        ok(bih.bV5ClrUsed == 256, "wrong ClrUsed %d\n", bih.bV5ClrUsed);
+        ok(bih.bV5ClrImportant == 256, "wrong ClrImportant %d\n", bih.bV5ClrImportant);
+    }
+    else if (IsEqualGUID(format, &GUID_WICPixelFormat32bppBGR))
+    {
+        ok(bih.bV5Width == 4, "wrong width %u\n", bih.bV5Width);
+        ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height);
+
+        ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes);
+        ok(bih.bV5BitCount == 32, "wrong BitCount %d\n", bih.bV5BitCount);
+        ok(bih.bV5ClrUsed == 0, "wrong ClrUsed %d\n", bih.bV5ClrUsed);
+        ok(bih.bV5ClrImportant == 0, "wrong ClrImportant %d\n", bih.bV5ClrImportant);
+    }
+    else
+        ok(0, "unknown BMP pixel format %s\n", wine_dbgstr_guid(format));
 }
 
 static unsigned be_uint(unsigned val)
@@ -746,6 +920,28 @@ static void check_png_format(IStream *stream, const WICPixelFormatGUID *format)
         ok(png.filter == 0, "wrong filter %d\n", png.filter);
         ok(png.interlace == 0, "wrong interlace %d\n", png.interlace);
     }
+    else if (IsEqualGUID(format, &GUID_WICPixelFormat2bppIndexed))
+    {
+        ok(be_uint(png.width) == 16, "wrong width %u\n", be_uint(png.width));
+        ok(be_uint(png.height) == 2, "wrong height %u\n", be_uint(png.height));
+
+        ok(png.bit_depth == 2, "wrong bit_depth %d\n", png.bit_depth);
+        ok(png.color_type == 3, "wrong color_type %d\n", png.color_type);
+        ok(png.compression == 0, "wrong compression %d\n", png.compression);
+        ok(png.filter == 0, "wrong filter %d\n", png.filter);
+        ok(png.interlace == 0, "wrong interlace %d\n", png.interlace);
+    }
+    else if (IsEqualGUID(format, &GUID_WICPixelFormat4bppIndexed))
+    {
+        ok(be_uint(png.width) == 8, "wrong width %u\n", be_uint(png.width));
+        ok(be_uint(png.height) == 2, "wrong height %u\n", be_uint(png.height));
+
+        ok(png.bit_depth == 4, "wrong bit_depth %d\n", png.bit_depth);
+        ok(png.color_type == 3, "wrong color_type %d\n", png.color_type);
+        ok(png.compression == 0, "wrong compression %d\n", png.compression);
+        ok(png.filter == 0, "wrong filter %d\n", png.filter);
+        ok(png.interlace == 0, "wrong interlace %d\n", png.interlace);
+    }
     else if (IsEqualGUID(format, &GUID_WICPixelFormat8bppIndexed))
     {
         ok(be_uint(png.width) == 4, "wrong width %u\n", be_uint(png.width));
@@ -772,7 +968,7 @@ static void check_png_format(IStream *stream, const WICPixelFormatGUID *format)
         ok(0, "unknown PNG pixel format %s\n", wine_dbgstr_guid(format));
 }
 
-static void check_bitmap_format(IStream *stream, const CLSID *encoder, const struct bitmap_data *dst)
+static void check_bitmap_format(IStream *stream, const CLSID *encoder, const WICPixelFormatGUID *format)
 {
     HRESULT hr;
     LARGE_INTEGER pos;
@@ -782,11 +978,11 @@ static void check_bitmap_format(IStream *stream, const CLSID *encoder, const str
     ok(hr == S_OK, "IStream_Seek error %#x\n", hr);
 
     if (IsEqualGUID(encoder, &CLSID_WICPngEncoder))
-        check_png_format(stream, dst->format);
+        check_png_format(stream, format);
     else if (IsEqualGUID(encoder, &CLSID_WICBmpEncoder))
-        check_bmp_format(stream, dst);
+        check_bmp_format(stream, format);
     else if (IsEqualGUID(encoder, &CLSID_WICTiffEncoder))
-        check_tiff_format(stream, dst->format);
+        check_tiff_format(stream, format);
     else
         ok(0, "unknown encoder %s\n", wine_dbgstr_guid(encoder));
 
@@ -991,6 +1187,8 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls
                             ok(SUCCEEDED(hr), "WriteSource(%dx%d) failed, hr=%x (%s)\n", rc->Width, rc->Height, hr, name);
                         else
                             ok(hr == S_OK ||
+                               broken(hr == E_NOTIMPL && IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder) && srcs[i]->bpp == 2) ||
+                               broken(hr == E_NOTIMPL && IsEqualGUID(clsid_encoder, &CLSID_WICTiffEncoder) && srcs[i]->bpp == 2) ||
                                broken(hr == E_INVALIDARG && IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder) && IsEqualGUID(srcs[i]->format, &GUID_WICPixelFormatBlackWhite)) /* XP */,
                                "WriteSource(NULL) failed, hr=%x (%s)\n", hr, name);
                     }
@@ -1022,7 +1220,7 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls
                 hr = IWICBitmapEncoder_Commit(encoder);
                 ok(SUCCEEDED(hr), "Commit failed, hr=%x\n", hr);
 
-                check_bitmap_format(stream, clsid_encoder, dsts[0]);
+                check_bitmap_format(stream, clsid_encoder, dsts[0]->format);
             }
 
             if (SUCCEEDED(hr))
@@ -1082,7 +1280,12 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls
                             ok(ret == count, "expected %u, got %u\n", count, ret);
                             if (IsEqualGUID(clsid_decoder, &CLSID_WICPngDecoder))
                             {
-                                ok(count == 256 || count == 2 /* newer libpng versions */, "expected 256, got %u (%s)\n", count, name);
+                                /* Newer libpng versions don't accept larger palettes than the declared
+                                 * bit depth, so we need to generate the palette of the correct length.
+                                 */
+                                ok(count == 256 || (dsts[i]->bpp == 1 && count == 2) ||
+                                   (dsts[i]->bpp == 2 && count == 4) || (dsts[i]->bpp == 4 && count == 16),
+                                   "expected 256, got %u (%s)\n", count, name);
 
                                 ok(colors[0] == 0x11111111, "got %08x (%s)\n", colors[0], name);
                                 ok(colors[1] == 0x22222222, "got %08x (%s)\n", colors[1], name);
@@ -1090,8 +1293,11 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls
                                 {
                                     ok(colors[2] == 0x33333333, "got %08x (%s)\n", colors[2], name);
                                     ok(colors[3] == 0x44444444, "got %08x (%s)\n", colors[3], name);
-                                    ok(colors[4] == 0x55555555, "got %08x (%s)\n", colors[4], name);
-                                    ok(colors[5] == 0, "got %08x (%s)\n", colors[5], name);
+                                    if (count > 4)
+                                    {
+                                        ok(colors[4] == 0x55555555, "got %08x (%s)\n", colors[4], name);
+                                        ok(colors[5] == 0, "got %08x (%s)\n", colors[5], name);
+                                    }
                                 }
                             }
                             else if (IsEqualGUID(clsid_decoder, &CLSID_WICBmpDecoder) ||
@@ -1109,6 +1315,17 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls
                                     ok(colors[4] == 0xff555555, "got %08x (%s)\n", colors[4], name);
                                     ok(colors[5] == 0xff000000, "got %08x (%s)\n", colors[5], name);
                                 }
+                                else if (IsEqualGUID(dsts[i]->format, &GUID_WICPixelFormat4bppIndexed))
+                                {
+                                    ok(count == 16, "expected 16, got %u (%s)\n", count, name);
+
+                                    ok(colors[0] == 0xff111111, "got %08x (%s)\n", colors[0], name);
+                                    ok(colors[1] == 0xff222222, "got %08x (%s)\n", colors[1], name);
+                                    ok(colors[2] == 0xff333333, "got %08x (%s)\n", colors[2], name);
+                                    ok(colors[3] == 0xff444444, "got %08x (%s)\n", colors[3], name);
+                                    ok(colors[4] == 0xff555555, "got %08x (%s)\n", colors[4], name);
+                                    ok(colors[5] == 0xff000000, "got %08x (%s)\n", colors[5], name);
+                                }
                                 else
                                 {
                                     ok(count == 2, "expected 2, got %u (%s)\n", count, name);
@@ -1260,6 +1477,10 @@ START_TEST(converter)
                  &testdata_BlackWhite, &CLSID_WICPngDecoder, "PNG encoder BlackWhite");
     test_encoder(&testdata_1bppIndexed, &CLSID_WICPngEncoder,
                  &testdata_1bppIndexed, &CLSID_WICPngDecoder, "PNG encoder 1bppIndexed");
+    test_encoder(&testdata_2bppIndexed, &CLSID_WICPngEncoder,
+                 &testdata_2bppIndexed, &CLSID_WICPngDecoder, "PNG encoder 2bppIndexed");
+    test_encoder(&testdata_4bppIndexed, &CLSID_WICPngEncoder,
+                 &testdata_4bppIndexed, &CLSID_WICPngDecoder, "PNG encoder 4bppIndexed");
     test_encoder(&testdata_8bppIndexed, &CLSID_WICPngEncoder,
                  &testdata_8bppIndexed, &CLSID_WICPngDecoder, "PNG encoder 8bppIndexed");
     test_encoder(&testdata_24bppBGR, &CLSID_WICPngEncoder,
@@ -1271,6 +1492,10 @@ if (!strcmp(winetest_platform, "windows")) /* FIXME: enable once implemented in
                  &testdata_1bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder BlackWhite");
     test_encoder(&testdata_1bppIndexed, &CLSID_WICBmpEncoder,
                  &testdata_1bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 1bppIndexed");
+    test_encoder(&testdata_2bppIndexed, &CLSID_WICBmpEncoder,
+                 &testdata_2bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 2bppIndexed");
+    test_encoder(&testdata_4bppIndexed, &CLSID_WICBmpEncoder,
+                 &testdata_4bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 4bppIndexed");
     test_encoder(&testdata_8bppIndexed, &CLSID_WICBmpEncoder,
                  &testdata_8bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 8bppIndexed");
 }
@@ -1283,6 +1508,10 @@ if (!strcmp(winetest_platform, "windows")) /* FIXME: enable once implemented in
 {
     test_encoder(&testdata_1bppIndexed, &CLSID_WICTiffEncoder,
                  &testdata_1bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 1bppIndexed");
+    test_encoder(&testdata_2bppIndexed, &CLSID_WICTiffEncoder,
+                 &testdata_2bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 2bppIndexed");
+    test_encoder(&testdata_4bppIndexed, &CLSID_WICTiffEncoder,
+                 &testdata_4bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 4bppIndexed");
     test_encoder(&testdata_8bppIndexed, &CLSID_WICTiffEncoder,
                  &testdata_8bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 8bppIndexed");
 }
-- 
2.17.1




More information about the wine-devel mailing list