summaryrefslogtreecommitdiff
path: root/source/fitz
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2016-06-16 00:14:47 +0100
committerRobin Watts <robin.watts@artifex.com>2016-06-17 13:24:49 +0100
commitf653eac3bac807f13ecba3e8463c4de3689da090 (patch)
tree835ddb55b0a23b48537fbcce8938454ad83201b6 /source/fitz
parent77b12405b60253f46cddcb99c4e31fd73fbac56e (diff)
downloadmupdf-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.c5
-rw-r--r--source/fitz/output-png.c7
-rw-r--r--source/fitz/output-pnm.c14
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++)
{