diff options
author | Robin Watts <robin.watts@artifex.com> | 2016-04-12 13:17:02 +0100 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2016-04-28 12:30:41 +0100 |
commit | 3dc16d54db4669415412bb44790d4653962747f6 (patch) | |
tree | f45096e35afbd29f22e4e2c7c2a16c61ec9da468 /include | |
parent | b944f16a564f8a31d9a064980318ad690be31f8e (diff) | |
download | mupdf-3dc16d54db4669415412bb44790d4653962747f6.tar.xz |
Introduce tuning context.
For now, just use it for controlling image decoding and image scaling.
Diffstat (limited to 'include')
-rw-r--r-- | include/mupdf/fitz/context.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/include/mupdf/fitz/context.h b/include/mupdf/fitz/context.h index 449ed368..3b46de34 100644 --- a/include/mupdf/fitz/context.h +++ b/include/mupdf/fitz/context.h @@ -3,6 +3,7 @@ #include "mupdf/fitz/version.h" #include "mupdf/fitz/system.h" +#include "mupdf/fitz/math.h" /* Contexts @@ -18,6 +19,7 @@ typedef struct fz_colorspace_context_s fz_colorspace_context; typedef struct fz_aa_context_s fz_aa_context; typedef struct fz_style_context_s fz_style_context; typedef struct fz_locks_context_s fz_locks_context; +typedef struct fz_tuning_context_s fz_tuning_context; typedef struct fz_store_s fz_store; typedef struct fz_glyph_cache_s fz_glyph_cache; typedef struct fz_document_handler_context_s fz_document_handler_context; @@ -116,6 +118,7 @@ struct fz_context_s fz_style_context *style; fz_store *store; fz_glyph_cache *glyph_cache; + fz_tuning_context *tuning; fz_document_handler_context *handler; }; @@ -211,6 +214,65 @@ void fz_set_user_context(fz_context *ctx, void *user); void *fz_user_context(fz_context *ctx); /* + In order to tune MuPDFs behaviour, certain functions can + (optionally) be provided by callers. +*/ + +/* + fz_tune_image_decode_fn: Given the width and height of an image, + the subsample factor, and the subarea of the image actually + required, the caller can decide whether to decode the whole image + or just a subarea. + + arg: The caller supplied opaque argument. + + w, h: The width/height of the complete image. + + l2factor: The log2 factor for subsampling (i.e. image will be + decoded to (w>>l2factor, h>>l2factor)). + + subarea: The actual subarea required for the current operation. + The tuning function is allowed to increase this in size if required. +*/ +typedef void (fz_tune_image_decode_fn)(void *arg, int w, int h, int l2factor, fz_irect *subarea); + +/* + fz_tune_image_scale_fn: Given the source width and height of + image, together with the actual required width and height, + decide whether we should use mitchell scaling. + + arg: The caller supplied opaque argument. + + dst_w, dst_h: The actual width/height required on the target device. + + src_w, src_h: The source width/height of the image. + + Return 0 not to use the Mitchell scaler, 1 to use the Mitchell scaler. All + other values reserved. +*/ +typedef int (fz_tune_image_scale_fn)(void *arg, int dst_w, int dst_h, int src_w, int src_h); + +/* + fz_tune_image_decode: Set the tuning function to use for + image decode. + + image_decode: Function to use. + + arg: Opaque argument to be passed to tuning function. +*/ +void fz_tune_image_decode(fz_context *ctx, fz_tune_image_decode_fn *image_decode, void *arg); + +/* + fz_tune_image_scale: Set the tuning function to use for + image scaling. + + image_scale: Function to use. + + arg: Opaque argument to be passed to tuning function. +*/ +void fz_tune_image_scale(fz_context *ctx, fz_tune_image_scale_fn *image_scale, void *arg); + +/* fz_aa_level: Get the number of bits of antialiasing we are using (for graphics). Between 0 and 8. */ @@ -482,6 +544,19 @@ void fz_new_document_handler_context(fz_context *ctx); void fz_drop_document_handler_context(fz_context *ctx); fz_document_handler_context *fz_keep_document_handler_context(fz_context *ctx); +/* Tuning context implementation details */ +struct fz_tuning_context_s +{ + int refs; + fz_tune_image_decode_fn *image_decode; + void *image_decode_arg; + fz_tune_image_scale_fn *image_scale; + void *image_scale_arg; +}; + +fz_tune_image_decode_fn fz_default_image_decode; +fz_tune_image_scale_fn fz_default_image_scale; + /* Default allocator */ extern fz_alloc_context fz_alloc_default; |