From 515cb62c5dd98a87341d3c1e45b27b2bf13f1318 Mon Sep 17 00:00:00 2001 From: Robin Watts Date: Wed, 7 May 2014 00:50:37 +0100 Subject: Bug 694801: fast_cmyk_to_rgb caching broken. fast_cmyk_to_rgb had a simple 1 place cache to avoid recalculating the same conversions again and again. The implementation was broken though, both in C and ARM code versions. This seems to fix it. --- source/fitz/colorspace.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'source') diff --git a/source/fitz/colorspace.c b/source/fitz/colorspace.c index 01a319de..8b8f3f96 100644 --- a/source/fitz/colorspace.c +++ b/source/fitz/colorspace.c @@ -431,11 +431,13 @@ fast_cmyk_to_rgb_ARM(unsigned char *dst, unsigned char *src, int n) "b 2f @ enter loop \n" "1: @ White or Black \n" "@ Cunning trick: On entry r11 = 0 if black, r11 = FF if white \n" + "eor r12,r11,#0xFF @ r12= FF if black, 0 if white \n" "ldrb r7, [r1],#1 @ r8 = s[4] \n" "strb r11,[r0],#1 @ d[0] = r \n" "strb r11,[r0],#1 @ d[1] = g \n" "strb r11,[r0],#1 @ d[2] = b \n" "strb r7, [r0],#1 @ d[3] = s[4] \n" + "mov r12,r12,LSL #24 @ r12 = CMYK \n" "subs r2, r2, #1 @ r2 = n-- \n" "beq 9f \n" "2: @ Main loop starts here \n" @@ -639,10 +641,18 @@ static void fast_cmyk_to_rgb(fz_context *ctx, fz_pixmap *dst, fz_pixmap *src) else if (k == 0 && c == 0 && m == 0 && y == 0) { r = g = b = 255; + C = 0; + M = 0; + Y = 0; + K = 0; } else if (k == 255) { r = g = b = 0; + C = 0; + M = 0; + Y = 0; + K = 255; } else { -- cgit v1.2.3