Vincent Povirk : windowscodecs: Treat 16-bit channels as little endian.

Alexandre Julliard julliard at winehq.org
Fri May 10 10:45:19 CDT 2019


Module: wine
Branch: master
Commit: 2b7b3abc5b334ec8b17dc98a25eefd26e1d0054d
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=2b7b3abc5b334ec8b17dc98a25eefd26e1d0054d

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Thu May  9 15:30:43 2019 -0500

windowscodecs: Treat 16-bit channels as little endian.

Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/windowscodecs/converter.c       | 17 +++++++++--------
 dlls/windowscodecs/tests/converter.c | 15 +++++++++++++++
 2 files changed, 24 insertions(+), 8 deletions(-)

diff --git a/dlls/windowscodecs/converter.c b/dlls/windowscodecs/converter.c
index 72cbf1f..0d7a3b7 100644
--- a/dlls/windowscodecs/converter.c
+++ b/dlls/windowscodecs/converter.c
@@ -458,8 +458,9 @@ static HRESULT copypixels_to_32bppBGRA(struct FormatConverter *This, const WICRe
                     dstpixel=(DWORD*)dstrow;
                     for (x=0; x<prc->Width; x++)
                     {
+                        srcbyte++;
                         *dstpixel++ = 0xff000000|(*srcbyte<<16)|(*srcbyte<<8)|*srcbyte;
-                        srcbyte+=2;
+                        srcbyte++;
                     }
                     srcrow += srcstride;
                     dstrow += cbStride;
@@ -776,9 +777,9 @@ static HRESULT copypixels_to_32bppBGRA(struct FormatConverter *This, const WICRe
                     dstpixel=(DWORD*)dstrow;
                     for (x=0; x<prc->Width; x++) {
                         BYTE red, green, blue;
-                        red = *srcpixel++; srcpixel++;
-                        green = *srcpixel++; srcpixel++;
-                        blue = *srcpixel++; srcpixel++;
+                        srcpixel++; red = *srcpixel++;
+                        srcpixel++; green = *srcpixel++;
+                        srcpixel++; blue = *srcpixel++;
                         *dstpixel++=0xff000000|red<<16|green<<8|blue;
                     }
                     srcrow += srcstride;
@@ -820,10 +821,10 @@ static HRESULT copypixels_to_32bppBGRA(struct FormatConverter *This, const WICRe
                     dstpixel=(DWORD*)dstrow;
                     for (x=0; x<prc->Width; x++) {
                         BYTE red, green, blue, alpha;
-                        red = *srcpixel++; srcpixel++;
-                        green = *srcpixel++; srcpixel++;
-                        blue = *srcpixel++; srcpixel++;
-                        alpha = *srcpixel++; srcpixel++;
+                        srcpixel++; red = *srcpixel++;
+                        srcpixel++; green = *srcpixel++;
+                        srcpixel++; blue = *srcpixel++;
+                        srcpixel++; alpha = *srcpixel++;
                         *dstpixel++=alpha<<24|red<<16|green<<8|blue;
                     }
                     srcrow += srcstride;
diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c
index b99f987..d4c1365 100644
--- a/dlls/windowscodecs/tests/converter.c
+++ b/dlls/windowscodecs/tests/converter.c
@@ -491,6 +491,18 @@ static const struct bitmap_data testdata_32bppPBGRA = {
 static const struct bitmap_data testdata_32bppPRGBA = {
     &GUID_WICPixelFormat32bppPRGBA, 32, bits_32bppPBGRA, 32, 2, 96.0, 96.0};
 
+static const BYTE bits_64bppRGBA[] = {
+    128,255,128,0,128,0,128,255,128, 0,128,255,128,0,128,255,128, 0,128,0,128,255,128,255,128, 0,128,0,128,0,128,255,128, 255,128,0,128,0,128,255,128, 0,128,255,128,0,128,255,128, 0,128,0,128,255,128,255,128, 0,128,0,128,0,128,255,
+    128,255,128,0,128,0,128,255,128, 0,128,255,128,0,128,255,128, 0,128,0,128,255,128,255,128, 0,128,0,128,0,128,255,128, 255,128,0,128,0,128,255,128, 0,128,255,128,0,128,255,128, 0,128,0,128,255,128,255,128, 0,128,0,128,0,128,255,
+    128,255,128,0,128,0,128,255,128, 0,128,255,128,0,128,255,128, 0,128,0,128,255,128,255,128, 0,128,0,128,0,128,255,128, 255,128,0,128,0,128,255,128, 0,128,255,128,0,128,255,128, 0,128,0,128,255,128,255,128, 0,128,0,128,0,128,255,
+    128,255,128,0,128,0,128,255,128, 0,128,255,128,0,128,255,128, 0,128,0,128,255,128,255,128, 0,128,0,128,0,128,255,128, 255,128,0,128,0,128,255,128, 0,128,255,128,0,128,255,128, 0,128,0,128,255,128,255,128, 0,128,0,128,0,128,255,
+    128,0,128,255,128,255,128,255,128, 255,128,0,128,255,128,255,128, 255,128,255,128,0,128,255,128, 255,128,255,128,255,128,255,128, 0,128,255,128,255,128,255,128, 255,128,0,128,255,128,255,128, 255,128,255,128,0,128,255,128, 255,128,255,128,255,128,255,
+    128,0,128,255,128,255,128,255,128, 255,128,0,128,255,128,255,128, 255,128,255,128,0,128,255,128, 255,128,255,128,255,128,255,128, 0,128,255,128,255,128,255,128, 255,128,0,128,255,128,255,128, 255,128,255,128,0,128,255,128, 255,128,255,128,255,128,255,
+    128,0,128,255,128,255,128,255,128, 255,128,0,128,255,128,255,128, 255,128,255,128,0,128,255,128, 255,128,255,128,255,128,255,128, 0,128,255,128,255,128,255,128, 255,128,0,128,255,128,255,128, 255,128,255,128,0,128,255,128, 255,128,255,128,255,128,255,
+    128,0,128,255,128,255,128,255,128, 255,128,0,128,255,128,255,128, 255,128,255,128,0,128,255,128, 255,128,255,128,255,128,255,128, 0,128,255,128,255,128,255,128, 255,128,0,128,255,128,255,128, 255,128,255,128,0,128,255,128, 255,128,255,128,255,128,255};
+static const struct bitmap_data testdata_64bppRGBA = {
+    &GUID_WICPixelFormat64bppRGBA, 64, bits_64bppRGBA, 32, 2, 96.0, 96.0};
+
 /* XP and 2003 use linear color conversion, later versions use sRGB gamma */
 static const float bits_32bppGrayFloat_xp[] = {
     0.114000f,0.587000f,0.299000f,0.000000f,0.114000f,0.587000f,0.299000f,0.000000f,
@@ -1807,6 +1819,9 @@ START_TEST(converter)
     test_conversion(&testdata_24bppRGB, &testdata_32bppBGR, "24bppRGB -> 32bppBGR", FALSE);
     test_conversion(&testdata_32bppBGRA, &testdata_24bppRGB, "32bppBGRA -> 24bppRGB", FALSE);
 
+    test_conversion(&testdata_64bppRGBA, &testdata_32bppRGBA, "64bppRGBA -> 32bppRGBA", FALSE);
+    test_conversion(&testdata_64bppRGBA, &testdata_32bppRGB, "64bppRGBA -> 32bppRGB", FALSE);
+
     test_conversion(&testdata_24bppRGB, &testdata_32bppGrayFloat, "24bppRGB -> 32bppGrayFloat", FALSE);
     test_conversion(&testdata_32bppBGR, &testdata_32bppGrayFloat, "32bppBGR -> 32bppGrayFloat", FALSE);
 




More information about the wine-cvs mailing list