summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2016-10-21 20:17:44 +0800
committerSebastian Rasmussen <sebras@gmail.com>2016-12-14 20:36:25 +0100
commit07647f5955f24cd7095de7ae97a6d8cce3a0e03c (patch)
tree7aa77e846daedcfa4b777dc64ff7a542b628aae7
parentd53ab7a97c018aaa0e0adcaabcebcc72c080f724 (diff)
downloadmupdf-07647f5955f24cd7095de7ae97a6d8cce3a0e03c.tar.xz
Split out jpx handling in separate function.
-rw-r--r--source/pdf/pdf-image.c56
1 files changed, 30 insertions, 26 deletions
diff --git a/source/pdf/pdf-image.c b/source/pdf/pdf-image.c
index 11ab856f..0617b496 100644
--- a/source/pdf/pdf-image.c
+++ b/source/pdf/pdf-image.c
@@ -3,6 +3,32 @@
static fz_image *pdf_load_jpx(fz_context *ctx, pdf_document *doc, pdf_obj *dict, int forcemask);
static fz_image *
+pdf_load_jpx_imp(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *dict, fz_stream *cstm, int forcemask)
+{
+ fz_image *image = pdf_load_jpx(ctx, doc, dict, forcemask);
+
+ if (forcemask)
+ {
+ fz_pixmap_image *cimg = (fz_pixmap_image *)image;
+ fz_pixmap *mask_pixmap;
+ fz_pixmap *tile = fz_pixmap_image_tile(ctx, cimg);
+
+ if (tile->n != 1)
+ {
+ fz_pixmap *gray = fz_convert_pixmap(ctx, tile, fz_device_gray(ctx), 0);
+ fz_drop_pixmap(ctx, tile);
+ tile = gray;
+ }
+
+ mask_pixmap = fz_alpha_from_gray(ctx, tile);
+ fz_drop_pixmap(ctx, tile);
+ fz_set_pixmap_image_tile(ctx, cimg, mask_pixmap);
+ }
+
+ return image;
+}
+
+static fz_image *
pdf_load_image_imp(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *dict, fz_stream *cstm, int forcemask)
{
fz_stream *stm = NULL;
@@ -23,6 +49,10 @@ pdf_load_image_imp(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *di
int i;
fz_compressed_buffer *buffer;
+ /* special case for JPEG2000 images */
+ if (pdf_is_jpx_image(ctx, dict))
+ return pdf_load_jpx_imp(ctx, doc, rdb, dict, cstm, forcemask);
+
fz_var(stm);
fz_var(mask);
fz_var(image);
@@ -30,32 +60,6 @@ pdf_load_image_imp(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *di
fz_try(ctx)
{
- /* special case for JPEG2000 images */
- if (pdf_is_jpx_image(ctx, dict))
- {
- image = pdf_load_jpx(ctx, doc, dict, forcemask);
-
- if (forcemask)
- {
- fz_pixmap_image *cimg = (fz_pixmap_image *)image;
- fz_pixmap *mask_pixmap;
- fz_pixmap *tile = fz_pixmap_image_tile(ctx, cimg);
- if (tile->n != 1)
- {
- fz_pixmap *gray;
- if (tile->n != 2)
- fz_warn(ctx, "soft mask should be grayscale");
- gray = fz_convert_pixmap(ctx, tile, fz_device_gray(ctx), 0);
- fz_drop_pixmap(ctx, tile);
- tile = gray;
- }
- mask_pixmap = fz_alpha_from_gray(ctx, tile);
- fz_drop_pixmap(ctx, tile);
- fz_set_pixmap_image_tile(ctx, cimg, mask_pixmap);
- }
- break; /* Out of fz_try */
- }
-
w = pdf_to_int(ctx, pdf_dict_geta(ctx, dict, PDF_NAME_Width, PDF_NAME_W));
h = pdf_to_int(ctx, pdf_dict_geta(ctx, dict, PDF_NAME_Height, PDF_NAME_H));
bpc = pdf_to_int(ctx, pdf_dict_geta(ctx, dict, PDF_NAME_BitsPerComponent, PDF_NAME_BPC));