From 923358dcea1862ecb4889eb7b6b3bfe7aac94af7 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Tue, 27 Feb 2018 12:38:43 +1100 Subject: [PATCH] Updated windowscodecs-JPEG_Decoder patchset --- ...ve-JPEG-frame-image-data-initializat.patch | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/patches/windowscodecs-JPEG_Decoder/0004-windowscodecs-Move-JPEG-frame-image-data-initializat.patch b/patches/windowscodecs-JPEG_Decoder/0004-windowscodecs-Move-JPEG-frame-image-data-initializat.patch index 93882f52..5494d7c3 100644 --- a/patches/windowscodecs-JPEG_Decoder/0004-windowscodecs-Move-JPEG-frame-image-data-initializat.patch +++ b/patches/windowscodecs-JPEG_Decoder/0004-windowscodecs-Move-JPEG-frame-image-data-initializat.patch @@ -1,4 +1,4 @@ -From 846b328efd83b161405ed8f663b6cb3465c29ee4 Mon Sep 17 00:00:00 2001 +From c91028da31f4578f90c19396c37bac0e898f566a Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Fri, 18 Aug 2017 12:17:52 +0800 Subject: [PATCH] windowscodecs: Move JPEG frame image data initialization from @@ -7,11 +7,11 @@ Subject: [PATCH] windowscodecs: Move JPEG frame image data initialization from This is how PNG decoder does things, and it avoids image data corruption in some cases (presumably when libjpeg reuses existing scanline data). --- - dlls/windowscodecs/jpegformat.c | 151 ++++++++++++++-------------------------- - 1 file changed, 54 insertions(+), 97 deletions(-) + dlls/windowscodecs/jpegformat.c | 156 +++++++++++++++------------------------- + 1 file changed, 59 insertions(+), 97 deletions(-) diff --git a/dlls/windowscodecs/jpegformat.c b/dlls/windowscodecs/jpegformat.c -index 97899a7..0f02b36 100644 +index 97899a7..df5da36 100644 --- a/dlls/windowscodecs/jpegformat.c +++ b/dlls/windowscodecs/jpegformat.c @@ -155,6 +155,7 @@ typedef struct { @@ -22,16 +22,17 @@ index 97899a7..0f02b36 100644 BYTE *image_data; CRITICAL_SECTION lock; } JpegDecoder; -@@ -303,6 +304,8 @@ static HRESULT WINAPI JpegDecoder_Initialize(IWICBitmapDecoder *iface, IStream * +@@ -303,6 +304,9 @@ static HRESULT WINAPI JpegDecoder_Initialize(IWICBitmapDecoder *iface, IStream * int ret; LARGE_INTEGER seek; jmp_buf jmpbuf; + UINT data_size, i; ++ UINT first_scanline = 0; + TRACE("(%p,%p,%u)\n", iface, pIStream, cacheOptions); EnterCriticalSection(&This->lock); -@@ -381,6 +384,55 @@ static HRESULT WINAPI JpegDecoder_Initialize(IWICBitmapDecoder *iface, IStream * +@@ -381,6 +385,59 @@ static HRESULT WINAPI JpegDecoder_Initialize(IWICBitmapDecoder *iface, IStream * return E_FAIL; } @@ -51,11 +52,12 @@ index 97899a7..0f02b36 100644 + + while (This->cinfo.output_scanline < This->cinfo.output_height) + { -+ UINT first_scanline = This->cinfo.output_scanline; + UINT max_rows; + JSAMPROW out_rows[4]; + JDIMENSION ret; + ++ first_scanline = This->cinfo.output_scanline; ++ + max_rows = min(This->cinfo.output_height-first_scanline, 4); + for (i=0; iimage_data + This->stride * (first_scanline+i); @@ -79,15 +81,18 @@ index 97899a7..0f02b36 100644 + + if (This->cinfo.out_color_space == JCS_CMYK && This->cinfo.saw_Adobe_marker) + { ++ DWORD *pDwordData = (DWORD*) (This->image_data + This->stride * first_scanline); ++ DWORD *pDwordDataEnd = (DWORD*) (This->image_data + This->cinfo.output_scanline * This->stride); ++ + /* Adobe JPEG's have inverted CMYK data. */ -+ for (i=0; iimage_data[i] ^= 0xff; ++ while(pDwordData < pDwordDataEnd) ++ *pDwordData++ ^= 0xffffffff; + } + This->initialized = TRUE; LeaveCriticalSection(&This->lock); -@@ -597,106 +649,11 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface, +@@ -597,106 +654,11 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface, const WICRect *prc, UINT cbStride, UINT cbBufferSize, BYTE *pbBuffer) { JpegDecoder *This = impl_from_IWICBitmapFrameDecode(iface);