diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/fitz/bitmap.c | 10 | ||||
-rw-r--r-- | source/fitz/output-pcl.c | 8 | ||||
-rw-r--r-- | source/fitz/output-png.c | 10 | ||||
-rw-r--r-- | source/fitz/output-pnm.c | 20 | ||||
-rw-r--r-- | source/fitz/output-ps.c | 5 | ||||
-rw-r--r-- | source/fitz/output.c | 25 | ||||
-rw-r--r-- | source/tools/mudraw.c | 11 | ||||
-rw-r--r-- | source/tools/muraster.c | 2 |
8 files changed, 40 insertions, 51 deletions
diff --git a/source/fitz/bitmap.c b/source/fitz/bitmap.c index 7003a894..2a7a9142 100644 --- a/source/fitz/bitmap.c +++ b/source/fitz/bitmap.c @@ -328,9 +328,8 @@ fz_write_bitmap_as_pbm(fz_context *ctx, fz_output *out, fz_bitmap *bitmap) { fz_band_writer *writer = fz_new_pbm_band_writer(ctx, out); - fz_write_header(ctx, writer, bitmap->w, bitmap->h, 1, 0, 0, 0, 1); - fz_write_band(ctx, writer, bitmap->stride, 0, bitmap->h, bitmap->samples); - fz_write_trailer(ctx, writer); + fz_write_header(ctx, writer, bitmap->w, bitmap->h, 1, 0, 0, 0, 0); + fz_write_band(ctx, writer, bitmap->stride, bitmap->h, bitmap->samples); fz_drop_band_writer(ctx, writer); } @@ -339,9 +338,8 @@ fz_write_bitmap_as_pkm(fz_context *ctx, fz_output *out, fz_bitmap *bitmap) { fz_band_writer *writer = fz_new_pkm_band_writer(ctx, out); - fz_write_header(ctx, writer, bitmap->w, bitmap->h, 1, 0, 0, 0, 1); - fz_write_band(ctx, writer, bitmap->stride, 0, bitmap->h, bitmap->samples); - fz_write_trailer(ctx, writer); + fz_write_header(ctx, writer, bitmap->w, bitmap->h, 1, 0, 0, 0, 0); + fz_write_band(ctx, writer, bitmap->stride, bitmap->h, bitmap->samples); fz_drop_band_writer(ctx, writer); } diff --git a/source/fitz/output-pcl.c b/source/fitz/output-pcl.c index 1040ddd3..4bc36fd8 100644 --- a/source/fitz/output-pcl.c +++ b/source/fitz/output-pcl.c @@ -688,9 +688,8 @@ fz_write_pixmap_as_pcl(fz_context *ctx, fz_output *out, const fz_pixmap *pixmap, writer = fz_new_color_pcl_band_writer(ctx, out, pcl); fz_try(ctx) { - fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, pixmap->xres, pixmap->yres, 1); - fz_write_band(ctx, writer, pixmap->stride, 0, 0, pixmap->samples); - fz_write_trailer(ctx, writer); + fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, pixmap->xres, pixmap->yres, 0); + fz_write_band(ctx, writer, pixmap->stride, pixmap->h, pixmap->samples); } fz_always(ctx) fz_drop_band_writer(ctx, writer); @@ -1080,8 +1079,7 @@ fz_write_bitmap_as_pcl(fz_context *ctx, fz_output *out, const fz_bitmap *bitmap, fz_try(ctx) { fz_write_header(ctx, writer, bitmap->w, bitmap->h, 1, 0, bitmap->xres, bitmap->yres, 0); - fz_write_band(ctx, writer, bitmap->stride, 0, bitmap->h, bitmap->samples); - fz_write_trailer(ctx, writer); + fz_write_band(ctx, writer, bitmap->stride, bitmap->h, bitmap->samples); } fz_always(ctx) fz_drop_band_writer(ctx, writer); diff --git a/source/fitz/output-png.c b/source/fitz/output-png.c index 524e48bf..62be417b 100644 --- a/source/fitz/output-png.c +++ b/source/fitz/output-png.c @@ -33,9 +33,8 @@ fz_save_pixmap_as_png(fz_context *ctx, fz_pixmap *pixmap, const char *filename) fz_try(ctx) { writer = fz_new_png_band_writer(ctx, out); - fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, pixmap->xres, pixmap->yres, 1); - fz_write_band(ctx, writer, pixmap->stride, 0, pixmap->h, pixmap->samples); - fz_write_trailer(ctx, writer); + fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, pixmap->xres, pixmap->yres, 0); + fz_write_band(ctx, writer, pixmap->stride, pixmap->h, pixmap->samples); } fz_always(ctx) { @@ -60,9 +59,8 @@ fz_write_pixmap_as_png(fz_context *ctx, fz_output *out, const fz_pixmap *pixmap) fz_try(ctx) { - fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, pixmap->xres, pixmap->yres, 1); - fz_write_band(ctx, writer, pixmap->stride, 0, pixmap->h, pixmap->samples); - fz_write_trailer(ctx, writer); + fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, pixmap->xres, pixmap->yres, 0); + fz_write_band(ctx, writer, pixmap->stride, pixmap->h, pixmap->samples); } fz_always(ctx) { diff --git a/source/fitz/output-pnm.c b/source/fitz/output-pnm.c index 68f25bcb..299c9e47 100644 --- a/source/fitz/output-pnm.c +++ b/source/fitz/output-pnm.c @@ -123,9 +123,8 @@ void fz_write_pixmap_as_pnm(fz_context *ctx, fz_output *out, fz_pixmap *pixmap) { fz_band_writer *writer = fz_new_pnm_band_writer(ctx, out); - fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, 0, 0, 1); - fz_write_band(ctx, writer, pixmap->stride, 0, pixmap->h, pixmap->samples); - fz_write_trailer(ctx, writer); + fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, 0, 0, 0); + fz_write_band(ctx, writer, pixmap->stride, pixmap->h, pixmap->samples); fz_drop_band_writer(ctx, writer); } @@ -140,9 +139,8 @@ fz_save_pixmap_as_pnm(fz_context *ctx, fz_pixmap *pixmap, char *filename) fz_try(ctx) { writer = fz_new_pnm_band_writer(ctx, out); - fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, 0, 0, 1); - fz_write_band(ctx, writer, pixmap->stride, 0, pixmap->h, pixmap->samples); - fz_write_trailer(ctx, writer); + fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, 0, 0, 0); + fz_write_band(ctx, writer, pixmap->stride, pixmap->h, pixmap->samples); } fz_always(ctx) { @@ -222,9 +220,8 @@ void fz_write_pixmap_as_pam(fz_context *ctx, fz_output *out, fz_pixmap *pixmap) { fz_band_writer *writer = fz_new_pam_band_writer(ctx, out); - fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, 0, 0, 1); - fz_write_band(ctx, writer, pixmap->stride, 0, pixmap->h, pixmap->samples); - fz_write_trailer(ctx, writer); + fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, 0, 0, 0); + fz_write_band(ctx, writer, pixmap->stride, pixmap->h, pixmap->samples); fz_drop_band_writer(ctx, writer); } @@ -239,9 +236,8 @@ fz_save_pixmap_as_pam(fz_context *ctx, fz_pixmap *pixmap, char *filename) fz_try(ctx) { writer = fz_new_pam_band_writer(ctx, out); - fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, 0, 0, 1); - fz_write_band(ctx, writer, pixmap->stride, 0, pixmap->h, pixmap->samples); - fz_write_trailer(ctx, writer); + fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, 0, 0, 0); + fz_write_band(ctx, writer, pixmap->stride, pixmap->h, pixmap->samples); } fz_always(ctx) { diff --git a/source/fitz/output-ps.c b/source/fitz/output-ps.c index b5338955..daf0804c 100644 --- a/source/fitz/output-ps.c +++ b/source/fitz/output-ps.c @@ -147,9 +147,8 @@ void fz_write_pixmap_as_ps(fz_context *ctx, fz_output *out, const fz_pixmap *pix fz_try(ctx) { - fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, pixmap->xres, pixmap->yres, 1); - fz_write_band(ctx, writer, pixmap->stride, 0, pixmap->h, pixmap->samples); - fz_write_trailer(ctx, writer); + fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, pixmap->xres, pixmap->yres, 0); + fz_write_band(ctx, writer, pixmap->stride, pixmap->h, pixmap->samples); } fz_always(ctx) { diff --git a/source/fitz/output.c b/source/fitz/output.c index 27495b34..7ca6fa4e 100644 --- a/source/fitz/output.c +++ b/source/fitz/output.c @@ -342,21 +342,28 @@ void fz_write_header(fz_context *ctx, fz_band_writer *writer, int w, int h, int writer->xres = xres; writer->yres = yres; writer->pagenum = pagenum; + writer->line = 0; writer->header(ctx, writer); } -void fz_write_band(fz_context *ctx, fz_band_writer *writer, int stride, int band_start, int band_height, const unsigned char *samples) +void fz_write_band(fz_context *ctx, fz_band_writer *writer, int stride, int band_height, const unsigned char *samples) { if (writer == NULL || writer->band == NULL) return; - writer->band(ctx, writer, stride, band_start, band_height, samples); -} - -void fz_write_trailer(fz_context *ctx, fz_band_writer *writer) -{ - if (writer == NULL || writer->trailer == NULL) - return; - writer->trailer(ctx, writer); + if (writer->line + band_height > writer->h) + band_height = writer->h - writer->line; + if (band_height < 0) { + fz_throw(ctx, FZ_ERROR_GENERIC, "Too much band data!"); + } + if (band_height > 0) { + writer->band(ctx, writer, stride, writer->line, band_height, samples); + writer->line += band_height; + } + if (writer->line == writer->h && writer->trailer) { + writer->trailer(ctx, writer); + /* Protect against more band_height == 0 calls */ + writer->line++; + } } void fz_drop_band_writer(fz_context *ctx, fz_band_writer *writer) diff --git a/source/tools/mudraw.c b/source/tools/mudraw.c index 3b9911c5..74d7c3e2 100644 --- a/source/tools/mudraw.c +++ b/source/tools/mudraw.c @@ -757,7 +757,7 @@ static void dodrawpage(fz_context *ctx, fz_page *page, fz_display_list *list, in bander = fz_new_color_pcl_band_writer(ctx, out, NULL); } if (bander) - fz_write_header(ctx, bander, pix->w, totalheight, pix->n, pix->alpha, pix->xres, pix->yres, ++output_pagenum); + fz_write_header(ctx, bander, pix->w, totalheight, pix->n, pix->alpha, pix->xres, pix->yres, output_pagenum++); } for (band = 0; band < bands; band++) @@ -778,7 +778,7 @@ static void dodrawpage(fz_context *ctx, fz_page *page, fz_display_list *list, in if (output) { if (bander) - fz_write_band(ctx, bander, bit ? bit->stride : pix->stride, band * band_height, drawheight, bit ? bit->samples : pix->samples); + fz_write_band(ctx, bander, bit ? bit->stride : pix->stride, drawheight, bit ? bit->samples : pix->samples); else if (output_format == OUT_PWG) fz_write_pixmap_as_pwg(ctx, out, pix, NULL); else if (output_format == OUT_TGA) @@ -811,13 +811,6 @@ static void dodrawpage(fz_context *ctx, fz_page *page, fz_display_list *list, in for (i = 0; i < 16; i++) fprintf(stderr, "%02x", digest[i]); } - - /* Any page level trailers go here */ - if (output) - { - if (bander) - fz_write_trailer(ctx, bander); - } } fz_always(ctx) { diff --git a/source/tools/muraster.c b/source/tools/muraster.c index 22227bf2..468bb212 100644 --- a/source/tools/muraster.c +++ b/source/tools/muraster.c @@ -635,7 +635,7 @@ static int dodrawpage(fz_context *ctx, int pagenum, fz_cookie *cookie, render_de { /* If we get any errors while outputting the bands, retrying won't help. */ errors_are_fatal = 1; - fz_write_band(ctx, render->bander, bit ? bit->stride : pix->stride, band_start, draw_height, bit ? bit->samples : pix->samples); + fz_write_band(ctx, render->bander, bit ? bit->stride : pix->stride, draw_height, bit ? bit->samples : pix->samples); errors_are_fatal = 0; } fz_drop_bitmap(ctx, bit); |