summaryrefslogtreecommitdiff
path: root/source/fitz/image.c
AgeCommit message (Collapse)Author
2018-10-23Drop pixmap upon exception allocating draw device.Sebastian Rasmussen
2018-07-05Pass rects by value: device and document interface.Tor Andersson
2018-07-05Pass matrices by value: device and document interface.Tor Andersson
2018-07-05Pass rect and matrix by value in geometry functions.Tor Andersson
Several things irk me about passing values as const pointers: * They can be NULL, which is not a valid value. * They require explicit temporary variables for storage. * They don't compose easily in a legible manner, requiring weird pointer passing semantics where the variable being assigned is hidden as an argument in the innermost function call. * We can't change the value through the pointer, requiring yet more local variables to hold copies of the input value. In the device interface where we pass a matrix to a function, we often find ourselves making a local copy of the matrix so we can concatenate other transforms to it. This copying is a lot of unnecessary busywork that I hope to eventually avoid by laying the groundwork with this commit. This is a rather large API change, so I apologize for the inconvenience, but I hope the end result and gain in legibility will be worth the pain.
2018-04-03Don't implicitly drop in fz_open_* chained filters.Tor Andersson
2018-01-10Add colorspace type enum and use it instead of hardcoded checks on N.Tor Andersson
2018-01-10Refactor and fix hash lookups when decoding image subarea tiles.Tor Andersson
The subarea rect used for lookups could mismatch the subarea returned by the get_pixmap function due to adjusting to whole bytes. Refactor and use a common subarea adjustment function. Many image formats which do not support subarea tiles will decode and cache the full image, so if a subarea tile cannot be found, look for the full image tile as well.
2017-11-08Move static inline function out of header.Tor Andersson
2017-10-25Ensure that fz_new_image_from_buffer doesn't leak a colorspace.Robin Watts
2017-10-25Fix colorspace reference counting in fz_load_*_info.Tor Andersson
These are called from fz_new_image_from_buffer.
2017-10-24Don't apply default decode array to ICC Lab image data.Robin Watts
Adjust the decode array to allow for the fact that the default decode is done by the ICC code.
2017-10-12Refactor image format magic signature recognition into its own function.Tor Andersson
2017-10-12Change default scalable SVG resolution.Tor Andersson
HTML doesn't respect the DPI setting, so SVG images end up too big.
2017-09-08Remove unnecessary fz_try()/fz_catch().Sebastian Rasmussen
2017-09-07Make sure to always drop a fz_device even upon error.Sebastian Rasmussen
2017-09-07Initialize variables to appease clang scan-build.Sebastian Rasmussen
2017-07-19Add spots to fz_pixmaps.Robin Watts
Update separations interface further to cope with whether spots should be rendered separately, or as composite colors.
2017-07-04Remove is_static from fz_new{,_icc}_colorspace.Robin Watts
No longer required, and causes leaks. Also, fix some reference counting problems with colorspaces.
2017-06-08Avoid using fz_var() when not necessary.Sebastian Rasmussen
2017-05-31Avoid double literals causing casts to float.Sebastian Rasmussen
2017-05-09Fix key_storable operations leading to leaks of fz_image.Robin Watts
key_storable objects can either be freed 'directly' by an API call (such as fz_drop_image), or 'internally' by the store realising that the sole thing holding onto a key_storable is a key. The current code frees more structure in the direct call than it does in the internal call. Clearly this is wrong and leads to leaks. The fix is to do ALL the freeing in the internal 'drop' function within the key_storable. This means we don't need (or want) either fz_drop_key_storable_key or fz_drop_key_storable to return an int to tell us whether they were actually dropped, so we make that change to simplify the code. This shifts the responsibility for freeing the extra internal structure into the innermost drop functions - fz_drop_image_imp and fz_drop_image_gprf_imp. To avoid duplicating code, we put the extra freeing logic into a fz_drop_image_base function.
2017-04-27Typedef function pointers consistently.Tor Andersson
2017-04-27Clean up store debug printing.Tor Andersson
Replace fz_print_hash with fz_hash_for_each iterator. Use string formatting callback.
2017-04-27Include required system headers.Tor Andersson
2017-03-31Fix leaks of reaped object keys.Robin Watts
2017-03-25Add fz_storable_needs_reaping.Robin Watts
Avoids needing to access the internals of reference counting.
2017-03-24Fix needs_reap entry in key storable.Robin Watts
There is no need to hold a separate flag to say that we need reaping, when this can be implied from the store_key_refs and the normal refcount being equal. In addition, I don't think we were ever actually setting this, so the code was wrong to start with.
2017-03-24Ensure fz_store_types are all static const.Robin Watts
2017-03-23Introduce fz_new_derived_...Robin Watts
Instead of having fz_new_XXXX(ctx, type, ...) macros that call fz_new_XXXX_of_size etc, use fz_new_derived_... Clearer naming, and doesn't clash with fz_new_document_writer.
2017-03-22Rename fz_putc/puts/printf to fz_write_*.Tor Andersson
Rename fz_write to fz_write_data. Rename fz_write_buffer_* and fz_buffer_printf to fz_append_*. Be consistent in naming: fz_write_* calls write to fz_output. fz_append_* calls append to fz_buffer. Update documentation.
2017-03-20Remove fz_drop_image_base.Robin Watts
2017-03-20Update API header documentationRobin Watts
Images, Document and Document Handlers.
2017-01-09Make fz_parse_xml take a fz_buffer. Make xps_part contain a fz_buffer.Tor Andersson
2016-12-27Strip extraneous blank lines.Tor Andersson
2016-12-14Have callers of fz_new_image_from_pixmap() drop supplied mask.Sebastian Rasmussen
This makes handling of the mask identical to that of the pixmap argument.
2016-12-14jpx: Delay determining if colorspace is indexed.Sebastian Rasmussen
2016-11-14Make fz_buffer structure private to fitz.Robin Watts
Move the definition of the structure contents into new fitz-imp.h file. Make all code outside of fitz access the buffer through the defined API. Add a convenience API for people that want to get buffers as null terminated C strings.
2016-11-02Do not drop compressed buffer twice in case of error.Sebastian Rasmussen
Previously, if fz_new_image() threw an exception both fz_new_image_from_compressed_buffer() and fz_new_image_from_buffer attempted to drop the supplied fz_compressed_buffer. Now the full responsibility is handed over to fz_new_image_from_compressed_buffer().
2016-11-01Don't dereference NULL subarea when rasterizing display list images.Tor Andersson
2016-10-18All external drop functions handles NULL.Sebastian Rasmussen
2016-10-18Avoid checking argument to fz_drop_*()/fz_free().Sebastian Rasmussen
As fz_drop_*()/fz_free() all must handle NULL.
2016-10-10PDF Images: Add a flag for if we need to apply the decode arrayRobin Watts
This avoids us having to check the entire array each time, and makes the next commit simpler.
2016-10-06Hide internals of fz_colorspaceRobin Watts
The implementation does not need to be in the public API.
2016-09-19fz_store: Reap passes.Robin Watts
A few commits back, we introduced the fz_key_storable concept to allow us to cope with objects that were used both as values within the store and as parts of keys within the store. This commit worked, but showed up performance problems; when the store has several million PDF objects in it, bulk changes (such as dropping a display list or document) could trigger many passes across the store. We therefore introduce a mechanism to ameliorate this. These passes, now known as "reap passes", can be batched together using fz_defer_reap_start and fz_defer_reap_end. We trigger this start/end around display list dropping, and around PDF content stream processing. This should be fine, as deferral will be interrupted if we ever run our of memory during mallocing.
2016-09-16Extend store to cope with references used in keys.Robin Watts
The store is effectively a list of items, where each item is a (key, value) pair. The design is such that we can easily get into the state where the only reference to a value is that held by the store. Subsequent references can then be generated by things being 'found' from within the store. While the only reference to an object is that held by it being a value in the store, the store is free to evict it to save memory. Images present a complication to this design; images are stored both as values within the store (by the pdf agent, so that we do not regenerate images each time we meet them in the file), and as parts of the keys within the store. For example, once an image is decoded to give a pixmap, the pixmap is cached in the store. The key to look that pixmap up again includes a reference to the image from which the pixmap was generated. This means, that for document handlers such as gproof that do not place images in the store, we can end up with images that are kept around purely by dint of being used as references in store keys. There is no chance of the value (the decoded pixmap) ever being 'found' from the store as no one other than the key is holding a reference to the image required. Thus the images/pixmaps are never freed until the store is emptied. This commit offers a fix for this situation. Standard store items are based on an fz_storable type. Here we introduce a new fz_key_storable type derived from that. As well as keeping track of the number of references a given item has to it, it keeps a separate count of the number of references a given item has to it from keys in the store. On dropping a reference, we check to see if the number of references has become the same as the number of references from keys in the store. If it has, then we know that these keys can never be 'found' again. So we filter them out of the store, which drops the items.
2016-07-12Fix typo in fz_new_image_from_pixmap.Tor Andersson
2016-07-08Separate close and drop functionality for devices and writers.Tor Andersson
Closing a device or writer may throw exceptions, but much of the foreign language bindings (JNI and JS) depend on drop to never throw an exception (exceptions in finalizers are bad).
2016-07-06Add support for decoding pbm/pgm/ppm/pam images.Sebastian Rasmussen
2016-07-05Support J2K/JP2 files in CBZ.Sebastian Rasmussen
2016-06-23Support TIFF files in CBZ.Tor Andersson