Age | Commit message (Collapse) | Author |
|
|
|
If the appropriate device hint is set, the null device will keep
a scissor stack. This saves duplicating code in every device.
|
|
This accompanies the function formerly known as fz_image_as_png (now
renamed to fz_new_png_from_image).
|
|
|
|
When creating a png, a typo meant that we ALWAYS converted the pixmap
even when we had an rgb or grayscale image on entry. Also, treat
mask pixmaps (no colorspace) as gray.
|
|
|
|
|
|
Set the hint in mudraw when AA bits is set to 0.
|
|
The bug fix added in the previous commit fails to work in this
case (hang-9527.pdf) because the matrix is not invertible and
hence the clipping rectangle ends up infinite. Spot this case
here and return early.
|
|
The first file of this bug (hang-66.pdf) hangs while stroking a
VERY long line segment; so long that 'used' is sufficinetly large
that:
used += dash_segment_len
doesn't result in a change in the value of used. The fix is
to clip strokes to the edge of the gel's clip area, meaning
that this should never occur.
|
|
Currently, MuPDF throws away entire CCITT encoded images whenever an
error happens in the code stream. Other PDF readers seem to rather
render what has been decoded up to the point of the error. This patch
enables such behavior for MuPDF as well.
|
|
SumatraPDF's testsuite uses Targa images as output because they're
compressed while still far easier to compare than PNG and have better
tool support than PCL/PWG.
|
|
* unreachable code in fz_generate_transition
* signed/unsigned comparison in get_comp_index
* potential dataloss due to conversion from int to short in ucdn_mirror
|
|
TIFF images containing JPEG data only require color transformation for
CYMK data streams. For RGB streams, this could lead to unexpected
results.
|
|
FZ_CMD_CLIP_TEXT behaves quite differently whether the accumulate flag
is set or not (see fz_list_clip_text). fz_run_display_list handles this
correctly but fz_append_display_node doesn't do so yet.
|
|
This is required e.g. for 1798_-_zlib_incorrect_data_check.pdf .
|
|
fz_read used to return a negative value on errors. With the
introduction of fz_try/fz_catch, it throws an error instead and
always returns non-negative values. This removes the pointless
checks.
|
|
In streams that we cannot seek in (such as flate ones) we implement
seeking forward by skipping bytes. We failed to spot that we hit EOF,
and spent ages just looping. Fix is simply to spot that we hit EOF
and bale with a warning.
|
|
The pdf_ versions were already correct. Probably just an
oversight that this was missed.
|
|
|
|
|
|
This is required e.g. for 2314 - jpeg tables in tiff.xps.
This folds fz_open_resized_dct back into fz_open_dct instead of adding
further variations for calls with and without the jpegtables argument.
|
|
If opening a filter in pdf_open_crypt throws, the stream is closed in
the used fz_open_* method and thus mustn't be closed again.
|
|
|
|
|
|
In particular, cope with the cases where xstep/ystep are not the same
as the tile width/heights.
|
|
Pull subpixel glyph adjustment calculations into fz_subpixel_adjust.
This reduces the repetition of code, and will be helpful for the
OpenGL device.
|
|
These do no caching, and are intended to be useful for the opengl device.
|
|
For large glyphs, sub pixel positioning is supremely unimportant.
Even for smaller glyphs, we don't need 5*5 possible sub pixel
positions. Base the degree of sub pixel quantisation on the size
of the glyphs.
This should result in better cache use.
We push all the glyph sub positioning logic into fz_render_glyph
(and fz_render_stroked_glyph). This simplifies the calling code.
We also tweak fz_render_glyph so that it updates the transform it
is called with to reflect the sub pixel positioning. This solves
various problems: Firstly, we can round positions both up and down
to achieve a smaller net displacement (e.g. (0.99, 0.99) can go
to (1,1) rather than (0.75, 0.75) if we have a subpixel position
resolution of 1/4 pixels).
Secondly, glyphs that are drawn from outlines will have exactly the
same subpixel changes applied. This is unlikely to be noticable, but
it does mean that baselines should avoid having any shifts in them.
Finally, it enables us to avoid lots of unnecessary copying of
matrices, hopefully reducing overhead.
|
|
Rather than generating fz_pixmaps for glyphs, we generate fz_glyphs.
fz_glyphs can either contain a pixmap, or an RLEd representation
(if it's a mask, and it's smaller).
Should take less memory in the cache, and should be faster to plot.
|
|
The most complex part here is to ensure that we can output various
bitmaps in bands.
|
|
fz_putc; this fills a hole in our fz_output functions.
fz_new_output_to_filename: This saves people having to create
a FILE * just to pass to fz_new_output_with_file and then having
to remember to close the FILE *.
|
|
|
|
This fixes among others 693274 - cmyk jpeg image.xps from bug 693274.
|
|
This fixes at least 2347 - old-style tiff jpeg compression.xps.
|
|
XPS extracts the resolution of a JPEG image from the image data. The
current code however only reads the density values provided by JFIF
metadata, while the XPS specification also allows for resolution to be
in either EXIF metadata or Photoshop's APP13 chunk. This patch adds
code for reading both kinds of metadata in order to get more consistent
behavior with Microsoft's XPS Viewer. Documents for reproducing this issue:
2093*.xps, 2249*.xps, 2252*.xps, 2268*.xps and "jpeg exif resolution.xps".
Another detail: The default resolution for JPEG images in XPS documents
is 96 DPI and not 72 DPI.
|
|
* If fz_alpha_from_gray throws in fz_render_t3_glyph, then glyph is leaked.
* If fz_new_image throws in pdf_load_image_imp, then colorspace and mask
are leaked.
* pdf_copy_pattern_gstate overwrites font and softmask without dropping
them first.
|
|
Content streams may contain multiple inline images compressed as LZW
data. The LZW filter used for such inline images might in some cases
be closed in a state where less than 8 bits remain unread. The parent
stream remembers that number (in stream->avail) and uses it again
when reading the next inline image instead of resetting the remaining
bit count when reading the next entire byte after the first inline image
(or resetting it when closing the LZW stream as this patch does).
|
|
If /EndOfLine is set for a CCITTFaxDecode stream, the image must start
with an EOL per the spec. Other readers seem to ignore all data up to
the first EOL in that case - instead of rejecting such images as broken.
Required for e.g. "1848 - 1d faxd doesn't start with EOL.pdf".
|
|
|
|
|
|
Broken in recent optimisations.
|
|
|
|
This is the single largest hotspot in J11_acrobat.pdf on the pi,
by a massive margin.
J12_acrobat.pdf hits fz_paint_affine_g2rgb too.
|
|
If we want the alternative versions we can pull them out of git
later.
|
|
The 2 biggest hotspots in benchmarking on the Raspberry pi at
1200dpi.
|
|
Forgot to drop the font.
|
|
The current code uses a hash table with linear probing. This means
that when the cache fills up, we have no alternative but to bin the
whole thing (or do an expensive rebuild).
Change to using a simple hash table with linked lists of bucket chains,
and additional LRU lists. This way we can ditch the oldest glyphs as
we need more space.
|
|
Thanks to Tor for finding the correct definitions for me.
|
|
|