diff options
author | Glenn Kennard <glenn.kennard@gmail.com> | 2008-03-19 11:47:00 +0100 |
---|---|---|
committer | Glenn Kennard <glenn.kennard@gmail.com> | 2008-03-19 11:47:00 +0100 |
commit | 22931638c8457d61aa91fdfa12157f62b2d45348 (patch) | |
tree | d0422e37869577d0a3f7075df7f26fe554cb581c | |
parent | 6654383b69c17b9d4f751bc9e5852b1c7b75c076 (diff) | |
download | mupdf-22931638c8457d61aa91fdfa12157f62b2d45348.tar.xz |
Small speedups in fax decoder
Let gcc vectorize !blackis1 case
-rw-r--r-- | stream/filt_faxd.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/stream/filt_faxd.c b/stream/filt_faxd.c index fbf7a6b8..a0449078 100644 --- a/stream/filt_faxd.c +++ b/stream/filt_faxd.c @@ -313,6 +313,7 @@ fz_processfaxd(fz_filter *f, fz_buffer *in, fz_buffer *out) fz_faxd *fax = (fz_faxd*)f; fz_error *error; int i; + unsigned char *tmp; if (fax->stage == SEOL) goto eol; @@ -392,11 +393,17 @@ eol: if (fax->blackis1) memcpy(out->wp, fax->dst, fax->stride); - else - for (i = 0; i < fax->stride; i++) - out->wp[i] = ~fax->dst[i]; + else { + unsigned char * restrict d = out->wp; + unsigned char * restrict s = fax->dst; + unsigned w = fax->stride; + for (i = 0; i < w; i++) + *d++ = *s++ ^ 0xff; + } - memcpy(fax->ref, fax->dst, fax->stride); + tmp = fax->ref; + fax->ref = fax->dst; + fax->dst = tmp; memset(fax->dst, 0, fax->stride); out->wp += fax->stride; |