1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
From 6d26e9b1c38d8c0f0ab4af42c513cb23f3ae1656 Mon Sep 17 00:00:00 2001
From: till <till@a1074d23-0009-0410-80fe-cf8c14f379e6>
Date: Tue, 9 Mar 2010 16:35:06 +0000
Subject: [PATCH] Fixes on CUPS Raster output device:
- Fixed memory reallocation on bitmap size change. Reallocation is not only
needed when dimendions and margins change, but also when the color depth
changes. Fixes bugs #691029 and #691108.
- Fixed arrayoption() macro in cups_put_params() function. Array values did
not get actually set in cups.header data structure. Bug only showed via
a compiler warning.
- Silenced compiler warning by presetting c0..c3 in cups_map_cmyk() to zero.
git-svn-id: http://svn.ghostscript.com/ghostscript/trunk/gs@10890 a1074d23-0009-0410-80fe-cf8c14f379e6
---
cups/gdevcups.c | 32 +++++++++++++++++++++++---------
1 files changed, 23 insertions(+), 9 deletions(-)
diff --git a/cups/gdevcups.c b/cups/gdevcups.c
index 551b806..4000abf 100644
--- a/cups/gdevcups.c
+++ b/cups/gdevcups.c
@@ -975,7 +975,8 @@ cups_map_cmyk(gx_device *pdev, /* I - Device info */
frac k, /* I - Black value */
frac *out) /* O - Device colors */
{
- int c0, c1, c2, c3; /* Temporary color values */
+ int c0 = 0, c1 = 0,
+ c2 = 0, c3 = 0; /* Temporary color values */
float rr, rg, rb, /* Real RGB colors */
ciex, ciey, ciez, /* CIE XYZ colors */
ciey_yn, /* Normalized luminance */
@@ -2703,9 +2704,13 @@ cups_put_params(gx_device *pdev, /* I - Device info */
int color_set; /* Were the color attrs set? */
gdev_prn_space_params sp; /* Space parameter data */
int width, /* New width of page */
- height; /* New height of page */
+ height, /* New height of page */
+ colorspace, /* New color space */
+ bitspercolor; /* New bits per color */
static int width_old = 0, /* Previous width */
- height_old = 0; /* Previous height */
+ height_old = 0, /* Previous height */
+ colorspace_old = 0,/* Previous color space */
+ bitspercolor_old = 0;/* Previous bits per color */
ppd_attr_t *backside = NULL,
*backsiderequiresflippedmargins = NULL;
float swap;
@@ -2800,9 +2805,10 @@ cups_put_params(gx_device *pdev, /* I - Device info */
else if (code == 0) \
{ \
dprintf1("DEBUG: Setting %s to", sname); \
- for (i = 0; i < count; i ++) \
- dprintf1(" %d", (unsigned)(arrayval.data[i])); \
- cups->header.name[i] = (unsigned)arrayval.data[i]; \
+ for (i = 0; i < count; i ++) { \
+ dprintf1(" %d", (unsigned)(arrayval.data[i])); \
+ cups->header.name[i] = (unsigned)(arrayval.data[i]); \
+ } \
dprintf("...\n"); \
}
@@ -3243,23 +3249,31 @@ cups_put_params(gx_device *pdev, /* I - Device info */
}
#endif /* CUPS_RASTER_SYNCv1 */
+ colorspace = cups->header.cupsColorSpace;
+ bitspercolor = cups->header.cupsBitsPerColor;
+
/*
* Don't reallocate memory unless the device has been opened...
* Also reallocate only if the size has actually changed...
*/
- if (pdev->is_open && (width != width_old || height != height_old))
+ if (pdev->is_open &&
+ (width != width_old || height != height_old ||
+ colorspace != colorspace_old || bitspercolor != bitspercolor_old))
{
width_old = width;
height_old = height;
+ colorspace_old = colorspace;
+ bitspercolor_old = bitspercolor;
/*
* Device is open and size has changed, so reallocate...
*/
- dprintf4("DEBUG2: Reallocating memory, [%.0f %.0f] = %dx%d pixels...\n",
- pdev->MediaSize[0], pdev->MediaSize[1], width, height);
+ dprintf6("DEBUG2: Reallocating memory, [%.0f %.0f] = %dx%d pixels, color space: %d, bits per color: %d...\n",
+ pdev->MediaSize[0], pdev->MediaSize[1], width, height,
+ colorspace, bitspercolor);
sp = ((gx_device_printer *)pdev)->space_params;
--
1.6.6.1
|