Coverage Report

Created: 2022-10-31 07:00

/src/ghostpdl/base/gxblend.h
Line
Count
Source (jump to first uncovered line)
1
/* Copyright (C) 2001-2021 Artifex Software, Inc.
2
   All Rights Reserved.
3
4
   This software is provided AS-IS with no warranty, either express or
5
   implied.
6
7
   This software is distributed under license and may not be copied,
8
   modified or distributed except as expressly authorized under the terms
9
   of the license contained in the file LICENSE in this distribution.
10
11
   Refer to licensing information at http://www.artifex.com or contact
12
   Artifex Software, Inc.,  1305 Grant Avenue - Suite 200, Novato,
13
   CA 94945, U.S.A., +1(415)492-9861, for further information.
14
*/
15
16
/* PDF 1.4 blending functions */
17
18
#ifndef gxblend_INCLUDED
19
#  define gxblend_INCLUDED
20
21
#include "gxcindex.h"
22
#include "gxcvalue.h"
23
#include "gxfrac.h"
24
#include "gxdevcli.h"
25
26
#define RAW_DUMP 0
27
#define RAW_DUMP_AS_PAM 0
28
/* Useful bash fragment to batch convert pams to pngs:
29
 * for f in *.pam; do g=${f%.*}; echo $g; convert $g.pam $g.png ; done
30
 * NB: "convert" is imagemagick convert, so may need to be installed.
31
 */
32
33
/* #define DUMP_TO_PNG */
34
35
#define PDF14_MAX_PLANES GX_DEVICE_COLOR_MAX_COMPONENTS+3  /* Needed for alpha channel, shape, group alpha */
36
37
typedef bits16 ArtPixMaxDepth;
38
39
#define ART_MAX_CHAN GX_DEVICE_COLOR_MAX_COMPONENTS
40
41
typedef struct pdf14_device_s pdf14_device;
42
43
typedef struct pdf14_buf_s pdf14_buf;
44
45
typedef struct gs_separations_s gs_separations;
46
47
/*
48
 * This structure contains procedures for processing which differ
49
 * between the different blending color spaces.
50
 *
51
 * The Luminosity, Color, Saturation, and Hue blend modes depend
52
 * upon the blending color space.  Currently the blending color space
53
 * matches the process color model of the compositing device.  We need
54
 * two routines to implement the four 'non separable' blend modes.
55
 */
56
typedef struct {
57
    /*
58
     * Perform luminosity and color blending.  (Also used for hue blending.)
59
     */
60
    void (* blend_luminosity)(int n_chan, byte *gs_restrict dst,
61
                    const byte *gs_restrict backdrop, const byte *gs_restrict src);
62
    /*
63
     * Perform saturation blending.  (Also used for hue blending.)
64
     */
65
    void (* blend_saturation)(int n_chan, byte *gs_restrict dst,
66
                    const byte *gs_restrict backdrop, const byte *gs_restrict src);
67
    /* And 16 bit variants */
68
    void (* blend_luminosity16)(int n_chan, uint16_t *gs_restrict dst,
69
                    const uint16_t *gs_restrict backdrop, const uint16_t *gs_restrict src);
70
    void (* blend_saturation16)(int n_chan, uint16_t *gs_restrict dst,
71
                    const uint16_t *gs_restrict backdrop, const uint16_t *gs_restrict src);
72
} pdf14_nonseparable_blending_procs_s;
73
74
typedef pdf14_nonseparable_blending_procs_s
75
                pdf14_nonseparable_blending_procs_t;
76
77
/* This is used to so that we can change procedures based
78
 * upon the Smask color space. previously we always
79
 *  went to the device space */
80
81
typedef struct {
82
83
    pdf14_nonseparable_blending_procs_t device_procs;
84
    gx_device_procs color_mapping_procs;
85
86
} pdf14_parent_cs_params_s;
87
88
typedef pdf14_parent_cs_params_s pdf14_parent_cs_params_t;
89
90
/* This function is used for mapping Smask CMYK or RGB data to a monochrome alpha buffer */
91
void smask_luminosity_mapping(int num_rows, int num_cols, int n_chan, int row_stride,
92
                              int plane_stride, const byte *gs_restrict src, byte *gs_restrict des, bool isadditive,
93
                              gs_transparency_mask_subtype_t SMask_SubType, bool deep
94
#if RAW_DUMP
95
                              , const gs_memory_t *mem
96
#endif
97
                              );
98
void smask_blend(byte *gs_restrict src, int width, int height, int rowstride,
99
                 int planestride, bool deep);
100
101
void smask_copy(int num_rows, int num_cols, int row_stride,
102
                         byte *gs_restrict src, const byte *gs_restrict des);
103
int smask_icc(gx_device *dev, int num_rows, int num_cols, int n_chan,
104
               int row_stride, int plane_stride, byte *gs_restrict src, const byte *gs_restrict des,
105
               gsicc_link_t *icclink, bool deep);
106
/* For spot colors, blend modes must be white preserving and separable */
107
bool blend_valid_for_spot(gs_blend_mode_t blend_mode);
108
109
/**
110
 * art_blend_pixel_8: Compute PDF 1.4 blending function on 8-bit pixels.
111
 * @dst: Where to store resulting pixel.
112
 * @backdrop: Backdrop pixel color.
113
 * @src: Source pixel color.
114
 * @n_chan: Number of channels.
115
 * @blend_mode: Blend mode.
116
 * @pblend_procs: Procs for handling non separable blending modes.
117
 * @p14dev: pdf14 device.  Needed for handling CompatibleOverprint mode
118
 *
119
 * Computes the blend of two pixels according the PDF 1.4 transparency
120
 * spec (section 3.2, Blend Mode). A few things to keep in mind about
121
 * this implementation:
122
 *
123
 * 1. This is a reference implementation, not a high-performance one.
124
 * Blending using this function will incur a function call and switch
125
 * statement per pixel, and will also incur the extra cost of 16 bit
126
 * math.
127
 *
128
 * 2. Zero is black, one is white. In a subtractive color space such
129
 * as CMYK, all pixels should be represented as "complemented", as
130
 * described in section 3.1 (Blending Color Space) of the PDF 1.4
131
 * transparency spec.
132
 *
133
 * 3. I haven't really figured out how to handle the Compatible blend
134
 * mode. I wouldn't be surprised if it required an API change.
135
 **/
136
void
137
art_blend_pixel_8(byte *gs_restrict dst, const byte *gs_restrict backdrop,
138
                const byte *gs_restrict src, int n_chan, gs_blend_mode_t blend_mode,
139
                const pdf14_nonseparable_blending_procs_t * pblend_procs,
140
                pdf14_device *p14dev);
141
142
void
143
art_blend_pixel_16(uint16_t *gs_restrict dst, const uint16_t *gs_restrict backdrop,
144
                   const uint16_t *gs_restrict src, int n_chan, gs_blend_mode_t blend_mode,
145
                   const pdf14_nonseparable_blending_procs_t * pblend_procs,
146
                   pdf14_device *p14dev);
147
148
#ifdef UNUSED
149
/**
150
 * art_pdf_union_8: Union together two alpha values.
151
 * @alpha1: One alpha value.
152
 * @alpha2: Another alpha value.
153
 *
154
 * Return value: Union (@alpha1, @alpha2).
155
 **/
156
byte art_pdf_union_8(byte alpha1, byte alpha2);
157
#endif
158
159
/**
160
 * art_pdf_union_mul_8: Union together two alpha values, with mask.
161
 * @alpha1: One alpha value.
162
 * @alpha2: Another alpha value.
163
 * @alpha_mask: A mask alpha value;
164
 *
165
 * Return value: Union (@alpha1, @alpha2 * @alpha_mask).
166
 **/
167
/* byte art_pdf_union_mul_8(byte alpha1, byte alpha2, byte alpha_mask); */
168
169
static inline byte
170
art_pdf_union_mul_8(byte alpha1, byte alpha2, byte alpha_mask)
171
0
{
172
0
    int tmp;
173
0
    if (alpha_mask != 0xff)
174
0
    {
175
0
        tmp = alpha2 * alpha_mask + 0x80;
176
0
        alpha2 = (tmp + (tmp >> 8))>>8;
177
0
    }
178
0
    tmp = (0xff - alpha1) * (0xff - alpha2) + 0x80;
179
0
    return 0xff - ((tmp + (tmp >> 8)) >> 8);
180
0
}
Unexecuted instantiation: imain.c:art_pdf_union_mul_8
Unexecuted instantiation: gximage3.c:art_pdf_union_mul_8
Unexecuted instantiation: gsptype1.c:art_pdf_union_mul_8
Unexecuted instantiation: gxp1fill.c:art_pdf_union_mul_8
Unexecuted instantiation: gxpcmap.c:art_pdf_union_mul_8
Unexecuted instantiation: gxicolor.c:art_pdf_union_mul_8
Unexecuted instantiation: gsdps1.c:art_pdf_union_mul_8
Unexecuted instantiation: gsciemap.c:art_pdf_union_mul_8
Unexecuted instantiation: gstrans.c:art_pdf_union_mul_8
Unexecuted instantiation: gximag3x.c:art_pdf_union_mul_8
Unexecuted instantiation: gxblend.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevp14.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevdevn.c:art_pdf_union_mul_8
Unexecuted instantiation: gsequivc.c:art_pdf_union_mul_8
Unexecuted instantiation: gscpixel.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevbbox.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevprn.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevppla.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevflp.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevoflt.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevnup.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevsclass.c:art_pdf_union_mul_8
Unexecuted instantiation: gxclist.c:art_pdf_union_mul_8
Unexecuted instantiation: gxclpage.c:art_pdf_union_mul_8
Unexecuted instantiation: gxclread.c:art_pdf_union_mul_8
Unexecuted instantiation: gxclrect.c:art_pdf_union_mul_8
Unexecuted instantiation: gxclutil.c:art_pdf_union_mul_8
Unexecuted instantiation: gxclimag.c:art_pdf_union_mul_8
Unexecuted instantiation: gxclpath.c:art_pdf_union_mul_8
Unexecuted instantiation: gxdhtserial.c:art_pdf_union_mul_8
Unexecuted instantiation: gxclthrd.c:art_pdf_union_mul_8
Unexecuted instantiation: gsicc.c:art_pdf_union_mul_8
Unexecuted instantiation: gsicc_manage.c:art_pdf_union_mul_8
Unexecuted instantiation: gsicc_cache.c:art_pdf_union_mul_8
Unexecuted instantiation: gsicc_create.c:art_pdf_union_mul_8
Unexecuted instantiation: gsicc_nocm.c:art_pdf_union_mul_8
Unexecuted instantiation: gsicc_replacecm.c:art_pdf_union_mul_8
Unexecuted instantiation: gsicc_monitorcm.c:art_pdf_union_mul_8
Unexecuted instantiation: gsicc_blacktext.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevbmp.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevbmpc.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevcups.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdf.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdfb.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdfc.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdfd.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdfe.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdfg.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdfi.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdfj.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdfk.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdfm.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdfo.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdfp.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdft.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdfr.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdfu.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdfv.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpsdi.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpsdp.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpsds.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpsdu.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevvec.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdt.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdtd.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdtf.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdti.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdts.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdtt.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdtw.c:art_pdf_union_mul_8
Unexecuted instantiation: gxfcopy.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevfax.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevdjet.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevdljm.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpcl.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpcl3.c:art_pdf_union_mul_8
Unexecuted instantiation: pclcap.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpbm.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevmpla.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpng.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpsd.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpx.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevtsep.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevtifs.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevupd.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevxps.c:art_pdf_union_mul_8
Unexecuted instantiation: gschar.c:art_pdf_union_mul_8
Unexecuted instantiation: gscolor.c:art_pdf_union_mul_8
Unexecuted instantiation: gscoord.c:art_pdf_union_mul_8
Unexecuted instantiation: gscspace.c:art_pdf_union_mul_8
Unexecuted instantiation: gsovrc.c:art_pdf_union_mul_8
Unexecuted instantiation: gsdevice.c:art_pdf_union_mul_8
Unexecuted instantiation: gsfont.c:art_pdf_union_mul_8
Unexecuted instantiation: gsht.c:art_pdf_union_mul_8
Unexecuted instantiation: gshtscr.c:art_pdf_union_mul_8
Unexecuted instantiation: gsimage.c:art_pdf_union_mul_8
Unexecuted instantiation: gsgstate.c:art_pdf_union_mul_8
Unexecuted instantiation: gsline.c:art_pdf_union_mul_8
Unexecuted instantiation: gspaint.c:art_pdf_union_mul_8
Unexecuted instantiation: gspath.c:art_pdf_union_mul_8
Unexecuted instantiation: gsstate.c:art_pdf_union_mul_8
Unexecuted instantiation: gstext.c:art_pdf_union_mul_8
Unexecuted instantiation: gxfapi.c:art_pdf_union_mul_8
Unexecuted instantiation: write_t2.c:art_pdf_union_mul_8
Unexecuted instantiation: gxccache.c:art_pdf_union_mul_8
Unexecuted instantiation: gxccman.c:art_pdf_union_mul_8
Unexecuted instantiation: gxchar.c:art_pdf_union_mul_8
Unexecuted instantiation: gxcht.c:art_pdf_union_mul_8
Unexecuted instantiation: gxcmap.c:art_pdf_union_mul_8
Unexecuted instantiation: gxcpath.c:art_pdf_union_mul_8
Unexecuted instantiation: gxdcconv.c:art_pdf_union_mul_8
Unexecuted instantiation: gxdcolor.c:art_pdf_union_mul_8
Unexecuted instantiation: gxhldevc.c:art_pdf_union_mul_8
Unexecuted instantiation: gxfill.c:art_pdf_union_mul_8
Unexecuted instantiation: gxht.c:art_pdf_union_mul_8
Unexecuted instantiation: gxht_thresh.c:art_pdf_union_mul_8
Unexecuted instantiation: gxifast.c:art_pdf_union_mul_8
Unexecuted instantiation: gximono.c:art_pdf_union_mul_8
Unexecuted instantiation: gxipixel.c:art_pdf_union_mul_8
Unexecuted instantiation: gxi12bit.c:art_pdf_union_mul_8
Unexecuted instantiation: gxi16bit.c:art_pdf_union_mul_8
Unexecuted instantiation: gxiscale.c:art_pdf_union_mul_8
Unexecuted instantiation: gxpaint.c:art_pdf_union_mul_8
Unexecuted instantiation: gxpcopy.c:art_pdf_union_mul_8
Unexecuted instantiation: gxstroke.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevabuf.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevddrw.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevdflt.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevmem.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevplnx.c:art_pdf_union_mul_8
Unexecuted instantiation: gxscanc.c:art_pdf_union_mul_8
Unexecuted instantiation: gsrop.c:art_pdf_union_mul_8
Unexecuted instantiation: zcolor1.c:art_pdf_union_mul_8
Unexecuted instantiation: zupath.c:art_pdf_union_mul_8
Unexecuted instantiation: zdps1.c:art_pdf_union_mul_8
Unexecuted instantiation: zchar1.c:art_pdf_union_mul_8
Unexecuted instantiation: zusparam.c:art_pdf_union_mul_8
Unexecuted instantiation: zchar42.c:art_pdf_union_mul_8
Unexecuted instantiation: zfont0.c:art_pdf_union_mul_8
Unexecuted instantiation: zpcolor.c:art_pdf_union_mul_8
Unexecuted instantiation: idisp.c:art_pdf_union_mul_8
Unexecuted instantiation: psapi.c:art_pdf_union_mul_8
Unexecuted instantiation: zchar.c:art_pdf_union_mul_8
Unexecuted instantiation: zcolor.c:art_pdf_union_mul_8
Unexecuted instantiation: zfont.c:art_pdf_union_mul_8
Unexecuted instantiation: zfapi.c:art_pdf_union_mul_8
Unexecuted instantiation: zht2.c:art_pdf_union_mul_8
Unexecuted instantiation: zfunc4.c:art_pdf_union_mul_8
Unexecuted instantiation: zform.c:art_pdf_union_mul_8
Unexecuted instantiation: zicc.c:art_pdf_union_mul_8
Unexecuted instantiation: ztrans.c:art_pdf_union_mul_8
Unexecuted instantiation: zpdfops.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_loop_detect.c:art_pdf_union_mul_8
Unexecuted instantiation: ghostpdf.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_dict.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_array.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_xref.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_int.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_file.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_path.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_colour.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_pattern.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_gstate.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_stack.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_image.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_page.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_annot.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_mark.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_font.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_font0.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_ciddec.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_font1.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_font1C.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_fontps.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_font3.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_fontTT.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_font11.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_cmap.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_fmap.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_text.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_shading.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_func.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_trans.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_device.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_misc.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_optcontent.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_check.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_sec.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_utf8.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_deref.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_repair.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_obj.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_doc.c:art_pdf_union_mul_8
Unexecuted instantiation: imainarg.c:art_pdf_union_mul_8
Unexecuted instantiation: gsclipsr.c:art_pdf_union_mul_8
Unexecuted instantiation: gscdevn.c:art_pdf_union_mul_8
Unexecuted instantiation: gscolor3.c:art_pdf_union_mul_8
Unexecuted instantiation: gsptype2.c:art_pdf_union_mul_8
Unexecuted instantiation: gsshade.c:art_pdf_union_mul_8
Unexecuted instantiation: gxshade.c:art_pdf_union_mul_8
Unexecuted instantiation: gxshade1.c:art_pdf_union_mul_8
Unexecuted instantiation: gxshade4.c:art_pdf_union_mul_8
Unexecuted instantiation: gxshade6.c:art_pdf_union_mul_8
Unexecuted instantiation: gscolor1.c:art_pdf_union_mul_8
Unexecuted instantiation: gsht1.c:art_pdf_union_mul_8
Unexecuted instantiation: gscolor2.c:art_pdf_union_mul_8
Unexecuted instantiation: gspcolor.c:art_pdf_union_mul_8
Unexecuted instantiation: gspath1.c:art_pdf_union_mul_8
Unexecuted instantiation: gstype42.c:art_pdf_union_mul_8
Unexecuted instantiation: gxchrout.c:art_pdf_union_mul_8
Unexecuted instantiation: gxttfb.c:art_pdf_union_mul_8
Unexecuted instantiation: gscie.c:art_pdf_union_mul_8
Unexecuted instantiation: gscsepr.c:art_pdf_union_mul_8
Unexecuted instantiation: gxblend1.c:art_pdf_union_mul_8
Unexecuted instantiation: gxdownscale.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevepo.c:art_pdf_union_mul_8
Unexecuted instantiation: gxclbits.c:art_pdf_union_mul_8
Unexecuted instantiation: gxclrast.c:art_pdf_union_mul_8
Unexecuted instantiation: gstype1.c:art_pdf_union_mul_8
Unexecuted instantiation: gxtype1.c:art_pdf_union_mul_8
Unexecuted instantiation: gstype2.c:art_pdf_union_mul_8
Unexecuted instantiation: gsicc_profilecache.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdtb.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdtc.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpdte.c:art_pdf_union_mul_8
Unexecuted instantiation: gdevpsfx.c:art_pdf_union_mul_8
Unexecuted instantiation: gstiffio.c:art_pdf_union_mul_8
Unexecuted instantiation: gdeveprn.c:art_pdf_union_mul_8
Unexecuted instantiation: eprnparm.c:art_pdf_union_mul_8
Unexecuted instantiation: eprnrend.c:art_pdf_union_mul_8
Unexecuted instantiation: eprnfs.c:art_pdf_union_mul_8
Unexecuted instantiation: gxacpath.c:art_pdf_union_mul_8
Unexecuted instantiation: gxpdash.c:art_pdf_union_mul_8
Unexecuted instantiation: pdf_fapi.c:art_pdf_union_mul_8
Unexecuted instantiation: gscscie.c:art_pdf_union_mul_8
181
182
static inline uint16_t
183
art_pdf_union_mul_16(uint16_t alpha1, uint16_t alpha2_, uint16_t alpha_mask)
184
0
{
185
0
    int alpha2 = alpha2_;
186
0
    if (alpha_mask != 0xffff)
187
0
    {
188
0
        int am = alpha_mask + (alpha_mask>>15);
189
0
        alpha2 = (alpha2 * am + 0x8000)>>16;
190
0
    }
191
0
    alpha2 += alpha2>>15;
192
0
    alpha2 = ((0xffff - alpha1) * (0x10000 - alpha2) + 0x8000)>>16;
193
0
    return 0xffff - (alpha2 >> 16);
194
0
}
Unexecuted instantiation: imain.c:art_pdf_union_mul_16
Unexecuted instantiation: gximage3.c:art_pdf_union_mul_16
Unexecuted instantiation: gsptype1.c:art_pdf_union_mul_16
Unexecuted instantiation: gxp1fill.c:art_pdf_union_mul_16
Unexecuted instantiation: gxpcmap.c:art_pdf_union_mul_16
Unexecuted instantiation: gxicolor.c:art_pdf_union_mul_16
Unexecuted instantiation: gsdps1.c:art_pdf_union_mul_16
Unexecuted instantiation: gsciemap.c:art_pdf_union_mul_16
Unexecuted instantiation: gstrans.c:art_pdf_union_mul_16
Unexecuted instantiation: gximag3x.c:art_pdf_union_mul_16
Unexecuted instantiation: gxblend.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevp14.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevdevn.c:art_pdf_union_mul_16
Unexecuted instantiation: gsequivc.c:art_pdf_union_mul_16
Unexecuted instantiation: gscpixel.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevbbox.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevprn.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevppla.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevflp.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevoflt.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevnup.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevsclass.c:art_pdf_union_mul_16
Unexecuted instantiation: gxclist.c:art_pdf_union_mul_16
Unexecuted instantiation: gxclpage.c:art_pdf_union_mul_16
Unexecuted instantiation: gxclread.c:art_pdf_union_mul_16
Unexecuted instantiation: gxclrect.c:art_pdf_union_mul_16
Unexecuted instantiation: gxclutil.c:art_pdf_union_mul_16
Unexecuted instantiation: gxclimag.c:art_pdf_union_mul_16
Unexecuted instantiation: gxclpath.c:art_pdf_union_mul_16
Unexecuted instantiation: gxdhtserial.c:art_pdf_union_mul_16
Unexecuted instantiation: gxclthrd.c:art_pdf_union_mul_16
Unexecuted instantiation: gsicc.c:art_pdf_union_mul_16
Unexecuted instantiation: gsicc_manage.c:art_pdf_union_mul_16
Unexecuted instantiation: gsicc_cache.c:art_pdf_union_mul_16
Unexecuted instantiation: gsicc_create.c:art_pdf_union_mul_16
Unexecuted instantiation: gsicc_nocm.c:art_pdf_union_mul_16
Unexecuted instantiation: gsicc_replacecm.c:art_pdf_union_mul_16
Unexecuted instantiation: gsicc_monitorcm.c:art_pdf_union_mul_16
Unexecuted instantiation: gsicc_blacktext.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevbmp.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevbmpc.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevcups.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdf.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdfb.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdfc.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdfd.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdfe.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdfg.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdfi.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdfj.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdfk.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdfm.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdfo.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdfp.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdft.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdfr.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdfu.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdfv.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpsdi.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpsdp.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpsds.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpsdu.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevvec.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdt.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdtd.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdtf.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdti.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdts.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdtt.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdtw.c:art_pdf_union_mul_16
Unexecuted instantiation: gxfcopy.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevfax.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevdjet.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevdljm.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpcl.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpcl3.c:art_pdf_union_mul_16
Unexecuted instantiation: pclcap.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpbm.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevmpla.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpng.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpsd.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpx.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevtsep.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevtifs.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevupd.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevxps.c:art_pdf_union_mul_16
Unexecuted instantiation: gschar.c:art_pdf_union_mul_16
Unexecuted instantiation: gscolor.c:art_pdf_union_mul_16
Unexecuted instantiation: gscoord.c:art_pdf_union_mul_16
Unexecuted instantiation: gscspace.c:art_pdf_union_mul_16
Unexecuted instantiation: gsovrc.c:art_pdf_union_mul_16
Unexecuted instantiation: gsdevice.c:art_pdf_union_mul_16
Unexecuted instantiation: gsfont.c:art_pdf_union_mul_16
Unexecuted instantiation: gsht.c:art_pdf_union_mul_16
Unexecuted instantiation: gshtscr.c:art_pdf_union_mul_16
Unexecuted instantiation: gsimage.c:art_pdf_union_mul_16
Unexecuted instantiation: gsgstate.c:art_pdf_union_mul_16
Unexecuted instantiation: gsline.c:art_pdf_union_mul_16
Unexecuted instantiation: gspaint.c:art_pdf_union_mul_16
Unexecuted instantiation: gspath.c:art_pdf_union_mul_16
Unexecuted instantiation: gsstate.c:art_pdf_union_mul_16
Unexecuted instantiation: gstext.c:art_pdf_union_mul_16
Unexecuted instantiation: gxfapi.c:art_pdf_union_mul_16
Unexecuted instantiation: write_t2.c:art_pdf_union_mul_16
Unexecuted instantiation: gxccache.c:art_pdf_union_mul_16
Unexecuted instantiation: gxccman.c:art_pdf_union_mul_16
Unexecuted instantiation: gxchar.c:art_pdf_union_mul_16
Unexecuted instantiation: gxcht.c:art_pdf_union_mul_16
Unexecuted instantiation: gxcmap.c:art_pdf_union_mul_16
Unexecuted instantiation: gxcpath.c:art_pdf_union_mul_16
Unexecuted instantiation: gxdcconv.c:art_pdf_union_mul_16
Unexecuted instantiation: gxdcolor.c:art_pdf_union_mul_16
Unexecuted instantiation: gxhldevc.c:art_pdf_union_mul_16
Unexecuted instantiation: gxfill.c:art_pdf_union_mul_16
Unexecuted instantiation: gxht.c:art_pdf_union_mul_16
Unexecuted instantiation: gxht_thresh.c:art_pdf_union_mul_16
Unexecuted instantiation: gxifast.c:art_pdf_union_mul_16
Unexecuted instantiation: gximono.c:art_pdf_union_mul_16
Unexecuted instantiation: gxipixel.c:art_pdf_union_mul_16
Unexecuted instantiation: gxi12bit.c:art_pdf_union_mul_16
Unexecuted instantiation: gxi16bit.c:art_pdf_union_mul_16
Unexecuted instantiation: gxiscale.c:art_pdf_union_mul_16
Unexecuted instantiation: gxpaint.c:art_pdf_union_mul_16
Unexecuted instantiation: gxpcopy.c:art_pdf_union_mul_16
Unexecuted instantiation: gxstroke.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevabuf.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevddrw.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevdflt.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevmem.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevplnx.c:art_pdf_union_mul_16
Unexecuted instantiation: gxscanc.c:art_pdf_union_mul_16
Unexecuted instantiation: gsrop.c:art_pdf_union_mul_16
Unexecuted instantiation: zcolor1.c:art_pdf_union_mul_16
Unexecuted instantiation: zupath.c:art_pdf_union_mul_16
Unexecuted instantiation: zdps1.c:art_pdf_union_mul_16
Unexecuted instantiation: zchar1.c:art_pdf_union_mul_16
Unexecuted instantiation: zusparam.c:art_pdf_union_mul_16
Unexecuted instantiation: zchar42.c:art_pdf_union_mul_16
Unexecuted instantiation: zfont0.c:art_pdf_union_mul_16
Unexecuted instantiation: zpcolor.c:art_pdf_union_mul_16
Unexecuted instantiation: idisp.c:art_pdf_union_mul_16
Unexecuted instantiation: psapi.c:art_pdf_union_mul_16
Unexecuted instantiation: zchar.c:art_pdf_union_mul_16
Unexecuted instantiation: zcolor.c:art_pdf_union_mul_16
Unexecuted instantiation: zfont.c:art_pdf_union_mul_16
Unexecuted instantiation: zfapi.c:art_pdf_union_mul_16
Unexecuted instantiation: zht2.c:art_pdf_union_mul_16
Unexecuted instantiation: zfunc4.c:art_pdf_union_mul_16
Unexecuted instantiation: zform.c:art_pdf_union_mul_16
Unexecuted instantiation: zicc.c:art_pdf_union_mul_16
Unexecuted instantiation: ztrans.c:art_pdf_union_mul_16
Unexecuted instantiation: zpdfops.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_loop_detect.c:art_pdf_union_mul_16
Unexecuted instantiation: ghostpdf.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_dict.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_array.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_xref.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_int.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_file.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_path.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_colour.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_pattern.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_gstate.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_stack.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_image.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_page.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_annot.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_mark.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_font.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_font0.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_ciddec.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_font1.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_font1C.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_fontps.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_font3.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_fontTT.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_font11.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_cmap.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_fmap.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_text.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_shading.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_func.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_trans.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_device.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_misc.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_optcontent.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_check.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_sec.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_utf8.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_deref.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_repair.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_obj.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_doc.c:art_pdf_union_mul_16
Unexecuted instantiation: imainarg.c:art_pdf_union_mul_16
Unexecuted instantiation: gsclipsr.c:art_pdf_union_mul_16
Unexecuted instantiation: gscdevn.c:art_pdf_union_mul_16
Unexecuted instantiation: gscolor3.c:art_pdf_union_mul_16
Unexecuted instantiation: gsptype2.c:art_pdf_union_mul_16
Unexecuted instantiation: gsshade.c:art_pdf_union_mul_16
Unexecuted instantiation: gxshade.c:art_pdf_union_mul_16
Unexecuted instantiation: gxshade1.c:art_pdf_union_mul_16
Unexecuted instantiation: gxshade4.c:art_pdf_union_mul_16
Unexecuted instantiation: gxshade6.c:art_pdf_union_mul_16
Unexecuted instantiation: gscolor1.c:art_pdf_union_mul_16
Unexecuted instantiation: gsht1.c:art_pdf_union_mul_16
Unexecuted instantiation: gscolor2.c:art_pdf_union_mul_16
Unexecuted instantiation: gspcolor.c:art_pdf_union_mul_16
Unexecuted instantiation: gspath1.c:art_pdf_union_mul_16
Unexecuted instantiation: gstype42.c:art_pdf_union_mul_16
Unexecuted instantiation: gxchrout.c:art_pdf_union_mul_16
Unexecuted instantiation: gxttfb.c:art_pdf_union_mul_16
Unexecuted instantiation: gscie.c:art_pdf_union_mul_16
Unexecuted instantiation: gscsepr.c:art_pdf_union_mul_16
Unexecuted instantiation: gxblend1.c:art_pdf_union_mul_16
Unexecuted instantiation: gxdownscale.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevepo.c:art_pdf_union_mul_16
Unexecuted instantiation: gxclbits.c:art_pdf_union_mul_16
Unexecuted instantiation: gxclrast.c:art_pdf_union_mul_16
Unexecuted instantiation: gstype1.c:art_pdf_union_mul_16
Unexecuted instantiation: gxtype1.c:art_pdf_union_mul_16
Unexecuted instantiation: gstype2.c:art_pdf_union_mul_16
Unexecuted instantiation: gsicc_profilecache.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdtb.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdtc.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpdte.c:art_pdf_union_mul_16
Unexecuted instantiation: gdevpsfx.c:art_pdf_union_mul_16
Unexecuted instantiation: gstiffio.c:art_pdf_union_mul_16
Unexecuted instantiation: gdeveprn.c:art_pdf_union_mul_16
Unexecuted instantiation: eprnparm.c:art_pdf_union_mul_16
Unexecuted instantiation: eprnrend.c:art_pdf_union_mul_16
Unexecuted instantiation: eprnfs.c:art_pdf_union_mul_16
Unexecuted instantiation: gxacpath.c:art_pdf_union_mul_16
Unexecuted instantiation: gxpdash.c:art_pdf_union_mul_16
Unexecuted instantiation: pdf_fapi.c:art_pdf_union_mul_16
Unexecuted instantiation: gscscie.c:art_pdf_union_mul_16
195
196
/**
197
 * art_pdf_composite_pixel_alpha_8: Composite two alpha pixels.
198
 * @dst: Where to store resulting pixel, also initially backdrop color.
199
 * @src: Source pixel color.
200
 * @n_chan: Number of channels.
201
 * @blend_mode: Blend mode.
202
 * @pblend_procs: Procs for handling non separable blending modes.
203
 * @p14dev: pdf14 device.
204
 *
205
 * Composites two pixels using the basic compositing operation. A few
206
 * things to keep in mind:
207
 *
208
 * 1. This is a reference implementation, not a high-performance one.
209
 *
210
 * 2. All pixels are assumed to have a single alpha channel.
211
 *
212
 * 3. Zero is black, one is white.
213
 *
214
 * The first "first_spot" channels are blended with blend_mode. The
215
 * remaining channels are blended with BLEND_MODE_Normal.
216
 *
217
 * Also note that src and dst are expected to be allocated aligned to
218
 * 32 bit boundaries, ie bytes from [0] to [(n_chan + 3) & -4] may
219
 * be accessed.
220
 **/
221
void
222
art_pdf_composite_pixel_alpha_8(byte *gs_restrict dst, const byte *gs_restrict src, int n_chan,
223
        gs_blend_mode_t blend_mode, int first_spot,
224
        const pdf14_nonseparable_blending_procs_t * pblend_procs,
225
        pdf14_device *p14dev);
226
227
void
228
art_pdf_composite_pixel_alpha_16(uint16_t *gs_restrict dst, const uint16_t *gs_restrict src, int n_chan,
229
        gs_blend_mode_t blend_mode, int first_spot,
230
        const pdf14_nonseparable_blending_procs_t * pblend_procs,
231
        pdf14_device *p14dev);
232
233
/**
234
 * art_pdf_composite_knockout_8: knockout compositing.
235
 * @dst: Destination pixel array -- has been initialized with background
236
 * @src: Source pixel.
237
 * n_chan: Number of channels.
238
 * p14dev: pdf14 device
239
 *
240
 * This function handles the knockout case: an isolated knockout group,
241
 * and an elementary shape. The alpha channel of @src is interpreted as shape.
242
 **/
243
void
244
art_pdf_composite_knockout_8(byte *gs_restrict dst,
245
                                    const byte *gs_restrict src,
246
                                    int n_chan,
247
                                    gs_blend_mode_t blend_mode,
248
                                    const pdf14_nonseparable_blending_procs_t * pblend_procs,
249
                                    pdf14_device *p14dev);
250
251
void
252
art_pdf_composite_knockout_16(uint16_t *gs_restrict dst,
253
                                    const uint16_t *gs_restrict src,
254
                                    int n_chan,
255
                                    gs_blend_mode_t blend_mode,
256
                                    const pdf14_nonseparable_blending_procs_t * pblend_procs,
257
                                    pdf14_device *p14dev);
258
259
/**
260
 * art_pdf_knockoutisolated_group_8: Knockout for isolated group.
261
 * @dst: Destination pixel.
262
 * @src: Source pixel.
263
 * @n_chan: Number of channels.
264
 *
265
 * This function handles the simple case with an isolated knockout group.
266
 **/
267
void
268
art_pdf_knockoutisolated_group_8(byte *gs_restrict dst, const byte *gs_restrict src, int n_chan);
269
270
void
271
art_pdf_knockoutisolated_group_16(uint16_t *gs_restrict dst, const uint16_t *gs_restrict src, int n_chan);
272
273
/**
274
* art_pdf_knockoutisolated_group_8: Knockout for isolated group.
275
* @dst: Destination pixel.
276
* @src: Source pixel.
277
* @src_alpha: current alpha from the graphic state
278
* @aa_alpha:  alpha coming from the anti-aliasing buffer
279
* @n_chan: Number of channels.
280
* @p14dev: pdf14 device
281
*
282
* This function handles the simple case with an isolated knockout group but where
283
* we have an alpha from AA and from the current graphic state.
284
**/
285
void
286
art_pdf_knockoutisolated_group_aa_8(byte *gs_restrict dst, const byte *gs_restrict src, byte src_alpha,
287
    byte aa_alpha, int n_chan, pdf14_device *p14dev);
288
289
/*
290
 * Routines for handling the non separable blending modes.
291
 */
292
/* RGB blending color space */
293
void art_blend_luminosity_rgb_8(int n_chan, byte *gs_restrict dst, const byte *gs_restrict backdrop,
294
                           const byte *gs_restrict src);
295
void art_blend_saturation_rgb_8(int n_chan, byte *gs_restrict dst, const byte *gs_restrict backdrop,
296
                           const byte *gs_restrict src);
297
void art_blend_luminosity_rgb_16(int n_chan, uint16_t *gs_restrict dst, const uint16_t *gs_restrict backdrop,
298
                           const uint16_t *gs_restrict src);
299
void art_blend_saturation_rgb_16(int n_chan, uint16_t *gs_restrict dst, const uint16_t *gs_restrict backdrop,
300
                           const uint16_t *gs_restrict src);
301
/* CMYK and CMYK + spot blending color space */
302
void art_blend_saturation_cmyk_8(int n_chan, byte *gs_restrict dst, const byte *gs_restrict backdrop,
303
                           const byte *gs_restrict src);
304
void art_blend_luminosity_cmyk_8(int n_chan, byte *gs_restrict dst, const byte *gs_restrict backdrop,
305
                           const byte *gs_restrict src);
306
void art_blend_saturation_cmyk_16(int n_chan, uint16_t *gs_restrict dst, const uint16_t *gs_restrict backdrop,
307
                           const uint16_t *gs_restrict src);
308
void art_blend_luminosity_cmyk_16(int n_chan, uint16_t *gs_restrict dst, const uint16_t *gs_restrict backdrop,
309
                           const uint16_t *gs_restrict src);
310
/* 'Custom' i.e. unknown blending color space. */
311
void art_blend_luminosity_custom_8(int n_chan, byte *gs_restrict dst, const byte *gs_restrict backdrop,
312
                           const byte *gs_restrict src);
313
void art_blend_saturation_custom_8(int n_chan, byte *gs_restrict dst, const byte *gs_restrict backdrop,
314
                           const byte *gs_restrict src);
315
void art_blend_luminosity_custom_16(int n_chan, uint16_t *gs_restrict dst, const uint16_t *gs_restrict backdrop,
316
                           const uint16_t *gs_restrict src);
317
void art_blend_saturation_custom_16(int n_chan, uint16_t *gs_restrict dst, const uint16_t *gs_restrict backdrop,
318
                           const uint16_t *gs_restrict src);
319
320
void pdf14_unpack_rgb_mix(int num_comp, gx_color_index color,
321
                          pdf14_device * p14dev, byte * out);
322
void pdf14_unpack_gray_mix(int num_comp, gx_color_index color,
323
                           pdf14_device * p14dev, byte * out);
324
void pdf14_unpack_additive(int num_comp, gx_color_index color,
325
                           pdf14_device * p14dev, byte * out);
326
void pdf14_unpack_subtractive(int num_comp, gx_color_index color,
327
                              pdf14_device * p14dev, byte * out);
328
void pdf14_unpack_custom(int num_comp, gx_color_index color,
329
                         pdf14_device * p14dev, byte * out);
330
331
void pdf14_unpack16_rgb_mix(int num_comp, gx_color_index color,
332
                            pdf14_device * p14dev, uint16_t * out);
333
void pdf14_unpack16_gray_mix(int num_comp, gx_color_index color,
334
                             pdf14_device * p14dev, uint16_t * out);
335
void pdf14_unpack16_additive(int num_comp, gx_color_index color,
336
                             pdf14_device * p14dev, uint16_t * out);
337
void pdf14_unpack16_subtractive(int num_comp, gx_color_index color,
338
                                pdf14_device * p14dev, uint16_t * out);
339
void pdf14_unpack16_custom(int num_comp, gx_color_index color,
340
                           pdf14_device * p14dev, uint16_t * out);
341
342
void pdf14_preserve_backdrop(pdf14_buf *buf, pdf14_buf *tos, bool knockout_buff
343
#if RAW_DUMP
344
                             , gs_memory_t *mem
345
#endif
346
                             );
347
348
int pdf14_preserve_backdrop_cm(pdf14_buf *buf, cmm_profile_t *group_profile,
349
                               pdf14_buf *tos, cmm_profile_t *tos_profile,
350
                               gs_memory_t *memory, gs_gstate *pgs,
351
                               gx_device *dev, bool knockout_buff);
352
353
void pdf14_compose_group(pdf14_buf *tos, pdf14_buf *nos, pdf14_buf *maskbuf,
354
              int x0, int x1, int y0, int y1, int n_chan, bool additive,
355
              const pdf14_nonseparable_blending_procs_t * pblend_procs,
356
              bool has_matte, bool overprint, gx_color_index drawn_comps,
357
              gs_memory_t *memory, gx_device *dev);
358
359
void pdf14_compose_alphaless_group(pdf14_buf *tos, pdf14_buf *nos,
360
                                   int x0, int x1, int y0, int y1,
361
                                   gs_memory_t *memory, gx_device *dev);
362
363
gx_color_index pdf14_encode_color(gx_device *dev, const gx_color_value colors[]);
364
gx_color_index pdf14_encode_color_tag(gx_device *dev, const gx_color_value colors[]);
365
gx_color_index pdf14_encode_color16(gx_device *dev, const gx_color_value colors[]);
366
gx_color_index pdf14_encode_color16_tag(gx_device *dev, const gx_color_value colors[]);
367
368
int pdf14_decode_color(gx_device * dev, gx_color_index color, gx_color_value * out);
369
int pdf14_decode_color16(gx_device * dev, gx_color_index color, gx_color_value * out);
370
void pdf14_gray_cs_to_cmyk_cm(const gx_device * dev, frac gray, frac out[]);
371
void pdf14_rgb_cs_to_cmyk_cm(const gx_device * dev, const gs_gstate *pgs,
372
                           frac r, frac g, frac b, frac out[]);
373
void pdf14_cmyk_cs_to_cmyk_cm(const gx_device * dev, frac c, frac m, frac y, frac k, frac out[]);
374
375
void pdf14_gray_cs_to_rgbspot_cm(const gx_device * dev, frac gray, frac out[]);
376
void pdf14_rgb_cs_to_rgbspot_cm(const gx_device * dev, const gs_gstate *pgs,
377
    frac r, frac g, frac b, frac out[]);
378
void pdf14_cmyk_cs_to_rgbspot_cm(const gx_device * dev, frac c, frac m, frac y, frac k, frac out[]);
379
380
void pdf14_gray_cs_to_grayspot_cm(const gx_device * dev, frac gray, frac out[]);
381
void pdf14_rgb_cs_to_grayspot_cm(const gx_device * dev, const gs_gstate *pgs,
382
    frac r, frac g, frac b, frac out[]);
383
void pdf14_cmyk_cs_to_grayspot_cm(const gx_device * dev, frac c, frac m, frac y, frac k, frac out[]);
384
385
void gx_build_blended_image_row(const byte *gs_restrict buf_ptr, int planestride,
386
                                int width, int num_comp, uint16_t bg, byte *gs_restrict linebuf);
387
void gx_build_blended_image_row16(const byte *gs_restrict buf_ptr, int planestride,
388
                                  int width, int num_comp, uint16_t bg, byte *gs_restrict linebuf);
389
void gx_blend_image_buffer(byte *buf_ptr, int width, int height,
390
                      int rowstride, int planestride, int num_comp, byte bg);
391
void gx_blend_image_buffer16(byte *buf_ptr, int width, int height,
392
    int rowstride, int planestride, int num_comp, uint16_t bg, bool keep_native);
393
void gx_blend_image_buffer8to16(const byte *buf_ptr, unsigned short *buf_ptr_out,
394
    int width, int height, int rowstride, int planestride, int num_comp, byte bg);
395
int gx_put_blended_image_custom(gx_device *target, byte *buf_ptr,
396
                      int planestride, int rowstride,
397
                      int x0, int y0, int width, int height, int num_comp, uint16_t bg, bool deep);
398
399
/* Function moved between compilation units to allow inlining. */
400
int pdf14_mark_fill_rectangle(gx_device * dev, int x, int y, int w, int h,
401
                                     gx_color_index color, const gx_device_color *pdc,
402
                                     bool devn);
403
404
405
406
#if RAW_DUMP
407
408
void dump_raw_buffer(const gs_memory_t *mem,
409
                     int num_rows, int width, int n_chan,
410
                     int plane_stride, int rowstride,
411
                     char filename[],const byte *Buffer, bool deep);
412
void dump_raw_buffer_be(const gs_memory_t *mem,
413
                        int num_rows, int width, int n_chan,
414
                        int plane_stride, int rowstride,
415
                        char filename[],const byte *Buffer, bool deep);
416
#endif
417
418
#endif /* gxblend_INCLUDED */