diff options
author | Robin Watts <robin.watts@artifex.com> | 2016-06-16 00:14:47 +0100 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2016-06-17 13:24:49 +0100 |
commit | f653eac3bac807f13ecba3e8463c4de3689da090 (patch) | |
tree | 835ddb55b0a23b48537fbcce8938454ad83201b6 /source/fitz | |
parent | 77b12405b60253f46cddcb99c4e31fd73fbac56e (diff) | |
download | mupdf-f653eac3bac807f13ecba3e8463c4de3689da090.tar.xz |
Improve banding API.
Previously the API assumed that all bands had to be the same
height. By moving the multiplication into the caller, we can
lift that assumption.
Diffstat (limited to 'source/fitz')
-rw-r--r-- | source/fitz/halftone.c | 5 | ||||
-rw-r--r-- | source/fitz/output-png.c | 7 | ||||
-rw-r--r-- | source/fitz/output-pnm.c | 14 |
3 files changed, 11 insertions, 15 deletions
diff --git a/source/fitz/halftone.c b/source/fitz/halftone.c index 04c3b5f9..eb35dbdf 100644 --- a/source/fitz/halftone.c +++ b/source/fitz/halftone.c @@ -511,7 +511,7 @@ static int gcd(int u, int v) while (1); } -fz_bitmap *fz_new_bitmap_from_pixmap_band(fz_context *ctx, fz_pixmap *pix, fz_halftone *ht, int band, int bandheight) +fz_bitmap *fz_new_bitmap_from_pixmap_band(fz_context *ctx, fz_pixmap *pix, fz_halftone *ht, int band_start, int bandheight) { fz_bitmap *out = NULL; unsigned char *ht_line = NULL; @@ -528,7 +528,6 @@ fz_bitmap *fz_new_bitmap_from_pixmap_band(fz_context *ctx, fz_pixmap *pix, fz_ha fz_var(ht_line); fz_var(out); - band *= bandheight; n = pix->n; switch(n) @@ -572,7 +571,7 @@ fz_bitmap *fz_new_bitmap_from_pixmap_band(fz_context *ctx, fz_pixmap *pix, fz_ha h = pix->h; x = pix->x; - y = pix->y + band; + y = pix->y + band_start; w = pix->w; ostride = out->stride; pstride = pix->stride; diff --git a/source/fitz/output-png.c b/source/fitz/output-png.c index 74f2ca3f..00eaeee8 100644 --- a/source/fitz/output-png.c +++ b/source/fitz/output-png.c @@ -130,7 +130,7 @@ fz_write_png_header(fz_context *ctx, fz_output *out, int w, int h, int n, int al } void -fz_write_png_band(fz_context *ctx, fz_output *out, fz_png_output_context *poc, int stride, int band, int bandheight, unsigned char *sp) +fz_write_png_band(fz_context *ctx, fz_output *out, fz_png_output_context *poc, int stride, int band_start, int bandheight, unsigned char *sp) { unsigned char *dp; int y, x, k, err, finalband; @@ -144,10 +144,9 @@ fz_write_png_band(fz_context *ctx, fz_output *out, fz_png_output_context *poc, i n = poc->n; alpha = poc->alpha; - band *= bandheight; - finalband = (band+bandheight >= h); + finalband = (band_start+bandheight >= h); if (finalband) - bandheight = h - band; + bandheight = h - band_start; if (poc->udata == NULL) { diff --git a/source/fitz/output-pnm.c b/source/fitz/output-pnm.c index e253d96a..99edc24d 100644 --- a/source/fitz/output-pnm.c +++ b/source/fitz/output-pnm.c @@ -20,12 +20,11 @@ fz_write_pnm_header(fz_context *ctx, fz_output *out, int w, int h, int n, int al } void -fz_write_pnm_band(fz_context *ctx, fz_output *out, int w, int h, int n, int alpha, int stride, int band, int bandheight, unsigned char *p) +fz_write_pnm_band(fz_context *ctx, fz_output *out, int w, int h, int n, int alpha, int stride, int band_start, int bandheight, unsigned char *p) { char buffer[2*3*4*5*6]; /* Buffer must be a multiple of 2 and 3 at least. */ int len; - int start = band * bandheight; - int end = start + bandheight; + int end = band_start + bandheight; if (n-alpha != 1 && n-alpha != 3) fz_throw(ctx, FZ_ERROR_GENERIC, "pixmap must be grayscale or rgb to write as pnm"); @@ -35,7 +34,7 @@ fz_write_pnm_band(fz_context *ctx, fz_output *out, int w, int h, int n, int alph if (end > h) end = h; - end -= start; + end -= band_start; /* Tests show that writing single bytes out at a time * is appallingly slow. We get a huge improvement @@ -135,18 +134,17 @@ fz_write_pam_header(fz_context *ctx, fz_output *out, int w, int h, int n, int al } void -fz_write_pam_band(fz_context *ctx, fz_output *out, int w, int h, int n, int stride, int band, int bandheight, unsigned char *sp) +fz_write_pam_band(fz_context *ctx, fz_output *out, int w, int h, int n, int stride, int band_start, int bandheight, unsigned char *sp) { int y; - int start = band * bandheight; - int end = start + bandheight; + int end = band_start + bandheight; if (!out) return; if (end > h) end = h; - end -= start; + end -= band_start; for (y = 0; y < end; y++) { |