/src/ghostpdl/base/gxsamplp.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* Copyright (C) 2001-2023 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., 39 Mesa Street, Suite 108A, San Francisco, |
13 | | CA 94129, USA, for further information. |
14 | | */ |
15 | | |
16 | | |
17 | | /* Templates for sample lookup and expansion */ |
18 | | |
19 | | /* This module is allowed to include several times into a single .c file. |
20 | | The following macros to be defined in advance : |
21 | | MULTIPLE_MAPS - 1 if num_components_per_plane > 0 and |
22 | | components use different maps, 0 otherwise. |
23 | | TEMPLATE_sample_unpack_1 - a name for the function |
24 | | TEMPLATE_sample_unpack_2 - a name for the function |
25 | | TEMPLATE_sample_unpack_4 - a name for the function |
26 | | TEMPLATE_sample_unpack_8 - a name for the function |
27 | | */ |
28 | | |
29 | | #if defined(TEMPLATE_sample_unpack_1) && defined(TEMPLATE_sample_unpack_2) && defined(TEMPLATE_sample_unpack_4) && defined(TEMPLATE_sample_unpack_8) |
30 | | |
31 | | #include "valgrind.h" |
32 | | |
33 | | #if MULTIPLE_MAPS |
34 | 0 | # define NEXT_MAP map = smap[++smap_index % num_components_per_plane].table.lookup4x1to32 |
35 | 36.4k | # define NEXT_MAP8 map = smap[++smap_index % num_components_per_plane].table.lookup8 |
36 | 96 | # define DEFINE_SMAP_INDEX int smap_index = 0; |
37 | | #else |
38 | | # define NEXT_MAP |
39 | | # define NEXT_MAP8 |
40 | | # define DEFINE_SMAP_INDEX |
41 | | #endif |
42 | | |
43 | | const byte * |
44 | | TEMPLATE_sample_unpack_1(byte * bptr, int *pdata_x, const byte * data, int data_x, |
45 | | uint dsize, const sample_map *smap, int spread, |
46 | | int num_components_per_plane) |
47 | 4.41M | { |
48 | 4.41M | const sample_lookup_t * ptab = &smap->table; |
49 | 4.41M | const byte *psrc = data + (data_x >> 3); |
50 | 4.41M | int left = dsize - (data_x >> 3); |
51 | 4.41M | DEFINE_SMAP_INDEX |
52 | | |
53 | 4.41M | #ifdef PACIFY_VALGRIND |
54 | 4.41M | byte *bend = bptr + left*spread; |
55 | 4.41M | byte vbits = 0; |
56 | | |
57 | | /* Allow for undefined bits at the end */ |
58 | 4.41M | VALGRIND_GET_VBITS(&psrc[left-1], &vbits, 1); |
59 | | /* At least the top bit must be defined. If not, |
60 | | * don't change anything, and let valgrind complain. */ |
61 | 4.41M | if ((vbits & 0x80) == 0) { |
62 | 4.41M | byte zero = 0; |
63 | 4.41M | VALGRIND_SET_VBITS(&psrc[left-1], &zero, 1); |
64 | 4.41M | } |
65 | 4.41M | #endif |
66 | | |
67 | 4.41M | if (spread == 1) { |
68 | 4.41M | bits32 *bufp = (bits32 *) bptr; |
69 | 4.41M | const bits32 *map = &ptab->lookup4x1to32[0]; |
70 | 4.41M | uint b; |
71 | | |
72 | 4.41M | if (left & 1) { |
73 | 38.2k | b = psrc[0]; |
74 | 38.2k | bufp[0] = map[b >> 4]; |
75 | 38.2k | NEXT_MAP; |
76 | 38.2k | bufp[1] = map[b & 0xf]; |
77 | 38.2k | NEXT_MAP; |
78 | 38.2k | psrc++, bufp += 2; |
79 | 38.2k | } |
80 | 4.41M | left >>= 1; |
81 | 25.4M | while (left--) { |
82 | 21.0M | b = psrc[0]; |
83 | 21.0M | bufp[0] = map[b >> 4]; |
84 | 21.0M | NEXT_MAP; |
85 | 21.0M | bufp[1] = map[b & 0xf]; |
86 | 21.0M | NEXT_MAP; |
87 | 21.0M | b = psrc[1]; |
88 | 21.0M | bufp[2] = map[b >> 4]; |
89 | 21.0M | NEXT_MAP; |
90 | 21.0M | bufp[3] = map[b & 0xf]; |
91 | 21.0M | NEXT_MAP; |
92 | 21.0M | psrc += 2, bufp += 4; |
93 | 21.0M | } |
94 | 4.41M | } else { |
95 | 0 | byte *bufp = bptr; |
96 | 0 | const byte *map = &ptab->lookup8[0]; |
97 | |
|
98 | 0 | while (left--) { |
99 | 0 | uint b = *psrc++; |
100 | |
|
101 | 0 | *bufp = map[b >> 7]; |
102 | 0 | NEXT_MAP8; |
103 | 0 | bufp += spread; |
104 | 0 | *bufp = map[(b >> 6) & 1]; |
105 | 0 | NEXT_MAP8; |
106 | 0 | bufp += spread; |
107 | 0 | *bufp = map[(b >> 5) & 1]; |
108 | 0 | NEXT_MAP8; |
109 | 0 | bufp += spread; |
110 | 0 | *bufp = map[(b >> 4) & 1]; |
111 | 0 | NEXT_MAP8; |
112 | 0 | bufp += spread; |
113 | 0 | *bufp = map[(b >> 3) & 1]; |
114 | 0 | NEXT_MAP8; |
115 | 0 | bufp += spread; |
116 | 0 | *bufp = map[(b >> 2) & 1]; |
117 | 0 | NEXT_MAP8; |
118 | 0 | bufp += spread; |
119 | 0 | *bufp = map[(b >> 1) & 1]; |
120 | 0 | NEXT_MAP8; |
121 | 0 | bufp += spread; |
122 | 0 | *bufp = map[b & 1]; |
123 | 0 | NEXT_MAP8; |
124 | 0 | bufp += spread; |
125 | 0 | } |
126 | 0 | } |
127 | 4.41M | #ifdef PACIFY_VALGRIND |
128 | | /* Put any undefinedness back, and carry it over to the output. */ |
129 | 4.41M | VALGRIND_SET_VBITS(psrc-1, &vbits, 1); |
130 | 4.41M | { |
131 | 4.41M | byte ones = 0xff; |
132 | 4.41M | if (vbits & 0x40) |
133 | 4.41M | VALGRIND_SET_VBITS(bend - spread*7, &ones, 1); |
134 | 4.41M | if (vbits & 0x20) |
135 | 4.41M | VALGRIND_SET_VBITS(bend - spread*6, &ones, 1); |
136 | 4.41M | if (vbits & 0x10) |
137 | 4.41M | VALGRIND_SET_VBITS(bend - spread*5, &ones, 1); |
138 | 4.41M | if (vbits & 0x08) |
139 | 4.41M | VALGRIND_SET_VBITS(bend - spread*4, &ones, 1); |
140 | 4.41M | if (vbits & 0x04) |
141 | 4.41M | VALGRIND_SET_VBITS(bend - spread*3, &ones, 1); |
142 | 4.41M | if (vbits & 0x02) |
143 | 4.41M | VALGRIND_SET_VBITS(bend - spread*2, &ones, 1); |
144 | 4.41M | if (vbits & 0x01) |
145 | 4.41M | VALGRIND_SET_VBITS(bend - spread*1, &ones, 1); |
146 | 4.41M | } |
147 | 4.41M | #endif |
148 | 4.41M | *pdata_x = data_x & 7; |
149 | 4.41M | return bptr; |
150 | 4.41M | } Line | Count | Source | 47 | 4.41M | { | 48 | 4.41M | const sample_lookup_t * ptab = &smap->table; | 49 | 4.41M | const byte *psrc = data + (data_x >> 3); | 50 | 4.41M | int left = dsize - (data_x >> 3); | 51 | 4.41M | DEFINE_SMAP_INDEX | 52 | | | 53 | 4.41M | #ifdef PACIFY_VALGRIND | 54 | 4.41M | byte *bend = bptr + left*spread; | 55 | 4.41M | byte vbits = 0; | 56 | | | 57 | | /* Allow for undefined bits at the end */ | 58 | 4.41M | VALGRIND_GET_VBITS(&psrc[left-1], &vbits, 1); | 59 | | /* At least the top bit must be defined. If not, | 60 | | * don't change anything, and let valgrind complain. */ | 61 | 4.41M | if ((vbits & 0x80) == 0) { | 62 | 4.41M | byte zero = 0; | 63 | 4.41M | VALGRIND_SET_VBITS(&psrc[left-1], &zero, 1); | 64 | 4.41M | } | 65 | 4.41M | #endif | 66 | | | 67 | 4.41M | if (spread == 1) { | 68 | 4.41M | bits32 *bufp = (bits32 *) bptr; | 69 | 4.41M | const bits32 *map = &ptab->lookup4x1to32[0]; | 70 | 4.41M | uint b; | 71 | | | 72 | 4.41M | if (left & 1) { | 73 | 38.2k | b = psrc[0]; | 74 | 38.2k | bufp[0] = map[b >> 4]; | 75 | 38.2k | NEXT_MAP; | 76 | 38.2k | bufp[1] = map[b & 0xf]; | 77 | 38.2k | NEXT_MAP; | 78 | 38.2k | psrc++, bufp += 2; | 79 | 38.2k | } | 80 | 4.41M | left >>= 1; | 81 | 25.4M | while (left--) { | 82 | 21.0M | b = psrc[0]; | 83 | 21.0M | bufp[0] = map[b >> 4]; | 84 | 21.0M | NEXT_MAP; | 85 | 21.0M | bufp[1] = map[b & 0xf]; | 86 | 21.0M | NEXT_MAP; | 87 | 21.0M | b = psrc[1]; | 88 | 21.0M | bufp[2] = map[b >> 4]; | 89 | 21.0M | NEXT_MAP; | 90 | 21.0M | bufp[3] = map[b & 0xf]; | 91 | 21.0M | NEXT_MAP; | 92 | 21.0M | psrc += 2, bufp += 4; | 93 | 21.0M | } | 94 | 4.41M | } else { | 95 | 0 | byte *bufp = bptr; | 96 | 0 | const byte *map = &ptab->lookup8[0]; | 97 | |
| 98 | 0 | while (left--) { | 99 | 0 | uint b = *psrc++; | 100 | |
| 101 | 0 | *bufp = map[b >> 7]; | 102 | 0 | NEXT_MAP8; | 103 | 0 | bufp += spread; | 104 | 0 | *bufp = map[(b >> 6) & 1]; | 105 | 0 | NEXT_MAP8; | 106 | 0 | bufp += spread; | 107 | 0 | *bufp = map[(b >> 5) & 1]; | 108 | 0 | NEXT_MAP8; | 109 | 0 | bufp += spread; | 110 | 0 | *bufp = map[(b >> 4) & 1]; | 111 | 0 | NEXT_MAP8; | 112 | 0 | bufp += spread; | 113 | 0 | *bufp = map[(b >> 3) & 1]; | 114 | 0 | NEXT_MAP8; | 115 | 0 | bufp += spread; | 116 | 0 | *bufp = map[(b >> 2) & 1]; | 117 | 0 | NEXT_MAP8; | 118 | 0 | bufp += spread; | 119 | 0 | *bufp = map[(b >> 1) & 1]; | 120 | 0 | NEXT_MAP8; | 121 | 0 | bufp += spread; | 122 | 0 | *bufp = map[b & 1]; | 123 | 0 | NEXT_MAP8; | 124 | 0 | bufp += spread; | 125 | 0 | } | 126 | 0 | } | 127 | 4.41M | #ifdef PACIFY_VALGRIND | 128 | | /* Put any undefinedness back, and carry it over to the output. */ | 129 | 4.41M | VALGRIND_SET_VBITS(psrc-1, &vbits, 1); | 130 | 4.41M | { | 131 | 4.41M | byte ones = 0xff; | 132 | 4.41M | if (vbits & 0x40) | 133 | 4.41M | VALGRIND_SET_VBITS(bend - spread*7, &ones, 1); | 134 | 4.41M | if (vbits & 0x20) | 135 | 4.41M | VALGRIND_SET_VBITS(bend - spread*6, &ones, 1); | 136 | 4.41M | if (vbits & 0x10) | 137 | 4.41M | VALGRIND_SET_VBITS(bend - spread*5, &ones, 1); | 138 | 4.41M | if (vbits & 0x08) | 139 | 4.41M | VALGRIND_SET_VBITS(bend - spread*4, &ones, 1); | 140 | 4.41M | if (vbits & 0x04) | 141 | 4.41M | VALGRIND_SET_VBITS(bend - spread*3, &ones, 1); | 142 | 4.41M | if (vbits & 0x02) | 143 | 4.41M | VALGRIND_SET_VBITS(bend - spread*2, &ones, 1); | 144 | 4.41M | if (vbits & 0x01) | 145 | 4.41M | VALGRIND_SET_VBITS(bend - spread*1, &ones, 1); | 146 | 4.41M | } | 147 | 4.41M | #endif | 148 | 4.41M | *pdata_x = data_x & 7; | 149 | 4.41M | return bptr; | 150 | 4.41M | } |
Unexecuted instantiation: sample_unpack_1_interleaved |
151 | | |
152 | | #undef NEXT_MAP |
153 | | |
154 | | #if MULTIPLE_MAPS |
155 | 48 | # define NEXT_MAP map = smap[++smap_index % num_components_per_plane].table.lookup2x2to16 |
156 | | #else |
157 | | # define NEXT_MAP |
158 | | #endif |
159 | | |
160 | | const byte * |
161 | | TEMPLATE_sample_unpack_2(byte * bptr, int *pdata_x, const byte * data, int data_x, |
162 | | uint dsize, const sample_map *smap, int spread, |
163 | | int num_components_per_plane) |
164 | 6.87k | { |
165 | 6.87k | const sample_lookup_t * ptab = &smap->table; |
166 | 6.87k | const byte *psrc = data + (data_x >> 2); |
167 | 6.87k | int left = dsize - (data_x >> 2); |
168 | 6.87k | DEFINE_SMAP_INDEX |
169 | | |
170 | 6.87k | #ifdef PACIFY_VALGRIND |
171 | 6.87k | byte *bend = bptr + left*spread; |
172 | 6.87k | byte vbits = 0; |
173 | | |
174 | | /* Allow for undefined bits at the end */ |
175 | 6.87k | VALGRIND_GET_VBITS(&psrc[left-1], &vbits, 1); |
176 | | /* At least the top 2 bits must be defined. If not, |
177 | | * don't change anything, and let valgrind complain. */ |
178 | 6.87k | if ((vbits & 0xC0) == 0) { |
179 | 6.87k | byte zero = 0; |
180 | 6.87k | VALGRIND_SET_VBITS(&psrc[left-1], &zero, 1); |
181 | 6.87k | } |
182 | 6.87k | #endif |
183 | | |
184 | 6.87k | if (spread == 1) { |
185 | 6.87k | bits16 *bufp = (bits16 *) bptr; |
186 | 6.87k | const bits16 *map = &ptab->lookup2x2to16[0]; |
187 | | |
188 | 553k | while (left--) { |
189 | 546k | uint b = *psrc++; |
190 | | |
191 | 546k | *bufp++ = map[b >> 4]; |
192 | 546k | NEXT_MAP; |
193 | 546k | *bufp++ = map[b & 0xf]; |
194 | 546k | NEXT_MAP; |
195 | 546k | } |
196 | 6.87k | } else { |
197 | 0 | byte *bufp = bptr; |
198 | 0 | const byte *map = &ptab->lookup8[0]; |
199 | |
|
200 | 0 | while (left--) { |
201 | 0 | unsigned b = *psrc++; |
202 | |
|
203 | 0 | *bufp = map[b >> 6]; |
204 | 0 | NEXT_MAP8; |
205 | 0 | bufp += spread; |
206 | 0 | *bufp = map[(b >> 4) & 3]; |
207 | 0 | NEXT_MAP8; |
208 | 0 | bufp += spread; |
209 | 0 | *bufp = map[(b >> 2) & 3]; |
210 | 0 | NEXT_MAP8; |
211 | 0 | bufp += spread; |
212 | 0 | *bufp = map[b & 3]; |
213 | 0 | NEXT_MAP8; |
214 | 0 | bufp += spread; |
215 | 0 | } |
216 | 0 | } |
217 | 6.87k | *pdata_x = data_x & 3; |
218 | 6.87k | #ifdef PACIFY_VALGRIND |
219 | | /* Put any undefinedness back, and carry it over to the output. */ |
220 | 6.87k | VALGRIND_SET_VBITS(psrc-1, &vbits, 1); |
221 | 6.87k | { |
222 | 6.87k | byte ones = 0xff; |
223 | 6.87k | if (vbits & 0x30) |
224 | 6.87k | VALGRIND_SET_VBITS(bend - spread*3, &ones, 1); |
225 | 6.87k | if (vbits & 0x0C) |
226 | 6.87k | VALGRIND_SET_VBITS(bend - spread*2, &ones, 1); |
227 | 6.87k | if (vbits & 0x03) |
228 | 6.87k | VALGRIND_SET_VBITS(bend - spread*1, &ones, 1); |
229 | 6.87k | } |
230 | 6.87k | #endif |
231 | 6.87k | return bptr; |
232 | 6.87k | } Line | Count | Source | 164 | 6.87k | { | 165 | 6.87k | const sample_lookup_t * ptab = &smap->table; | 166 | 6.87k | const byte *psrc = data + (data_x >> 2); | 167 | 6.87k | int left = dsize - (data_x >> 2); | 168 | 6.87k | DEFINE_SMAP_INDEX | 169 | | | 170 | 6.87k | #ifdef PACIFY_VALGRIND | 171 | 6.87k | byte *bend = bptr + left*spread; | 172 | 6.87k | byte vbits = 0; | 173 | | | 174 | | /* Allow for undefined bits at the end */ | 175 | 6.87k | VALGRIND_GET_VBITS(&psrc[left-1], &vbits, 1); | 176 | | /* At least the top 2 bits must be defined. If not, | 177 | | * don't change anything, and let valgrind complain. */ | 178 | 6.87k | if ((vbits & 0xC0) == 0) { | 179 | 6.87k | byte zero = 0; | 180 | 6.87k | VALGRIND_SET_VBITS(&psrc[left-1], &zero, 1); | 181 | 6.87k | } | 182 | 6.87k | #endif | 183 | | | 184 | 6.87k | if (spread == 1) { | 185 | 6.87k | bits16 *bufp = (bits16 *) bptr; | 186 | 6.87k | const bits16 *map = &ptab->lookup2x2to16[0]; | 187 | | | 188 | 553k | while (left--) { | 189 | 546k | uint b = *psrc++; | 190 | | | 191 | 546k | *bufp++ = map[b >> 4]; | 192 | 546k | NEXT_MAP; | 193 | 546k | *bufp++ = map[b & 0xf]; | 194 | 546k | NEXT_MAP; | 195 | 546k | } | 196 | 6.87k | } else { | 197 | 0 | byte *bufp = bptr; | 198 | 0 | const byte *map = &ptab->lookup8[0]; | 199 | |
| 200 | 0 | while (left--) { | 201 | 0 | unsigned b = *psrc++; | 202 | |
| 203 | 0 | *bufp = map[b >> 6]; | 204 | 0 | NEXT_MAP8; | 205 | 0 | bufp += spread; | 206 | 0 | *bufp = map[(b >> 4) & 3]; | 207 | 0 | NEXT_MAP8; | 208 | 0 | bufp += spread; | 209 | 0 | *bufp = map[(b >> 2) & 3]; | 210 | 0 | NEXT_MAP8; | 211 | 0 | bufp += spread; | 212 | 0 | *bufp = map[b & 3]; | 213 | 0 | NEXT_MAP8; | 214 | 0 | bufp += spread; | 215 | 0 | } | 216 | 0 | } | 217 | 6.87k | *pdata_x = data_x & 3; | 218 | 6.87k | #ifdef PACIFY_VALGRIND | 219 | | /* Put any undefinedness back, and carry it over to the output. */ | 220 | 6.87k | VALGRIND_SET_VBITS(psrc-1, &vbits, 1); | 221 | 6.87k | { | 222 | 6.87k | byte ones = 0xff; | 223 | 6.87k | if (vbits & 0x30) | 224 | 6.87k | VALGRIND_SET_VBITS(bend - spread*3, &ones, 1); | 225 | 6.87k | if (vbits & 0x0C) | 226 | 6.87k | VALGRIND_SET_VBITS(bend - spread*2, &ones, 1); | 227 | 6.87k | if (vbits & 0x03) | 228 | 6.87k | VALGRIND_SET_VBITS(bend - spread*1, &ones, 1); | 229 | 6.87k | } | 230 | 6.87k | #endif | 231 | 6.87k | return bptr; | 232 | 6.87k | } |
sample_unpack_2_interleaved Line | Count | Source | 164 | 1 | { | 165 | 1 | const sample_lookup_t * ptab = &smap->table; | 166 | 1 | const byte *psrc = data + (data_x >> 2); | 167 | 1 | int left = dsize - (data_x >> 2); | 168 | 1 | DEFINE_SMAP_INDEX | 169 | | | 170 | 1 | #ifdef PACIFY_VALGRIND | 171 | 1 | byte *bend = bptr + left*spread; | 172 | 1 | byte vbits = 0; | 173 | | | 174 | | /* Allow for undefined bits at the end */ | 175 | 1 | VALGRIND_GET_VBITS(&psrc[left-1], &vbits, 1); | 176 | | /* At least the top 2 bits must be defined. If not, | 177 | | * don't change anything, and let valgrind complain. */ | 178 | 1 | if ((vbits & 0xC0) == 0) { | 179 | 1 | byte zero = 0; | 180 | 1 | VALGRIND_SET_VBITS(&psrc[left-1], &zero, 1); | 181 | 1 | } | 182 | 1 | #endif | 183 | | | 184 | 1 | if (spread == 1) { | 185 | 1 | bits16 *bufp = (bits16 *) bptr; | 186 | 1 | const bits16 *map = &ptab->lookup2x2to16[0]; | 187 | | | 188 | 25 | while (left--) { | 189 | 24 | uint b = *psrc++; | 190 | | | 191 | 24 | *bufp++ = map[b >> 4]; | 192 | 24 | NEXT_MAP; | 193 | 24 | *bufp++ = map[b & 0xf]; | 194 | 24 | NEXT_MAP; | 195 | 24 | } | 196 | 1 | } else { | 197 | 0 | byte *bufp = bptr; | 198 | 0 | const byte *map = &ptab->lookup8[0]; | 199 | |
| 200 | 0 | while (left--) { | 201 | 0 | unsigned b = *psrc++; | 202 | |
| 203 | 0 | *bufp = map[b >> 6]; | 204 | 0 | NEXT_MAP8; | 205 | 0 | bufp += spread; | 206 | 0 | *bufp = map[(b >> 4) & 3]; | 207 | 0 | NEXT_MAP8; | 208 | 0 | bufp += spread; | 209 | 0 | *bufp = map[(b >> 2) & 3]; | 210 | 0 | NEXT_MAP8; | 211 | 0 | bufp += spread; | 212 | 0 | *bufp = map[b & 3]; | 213 | 0 | NEXT_MAP8; | 214 | 0 | bufp += spread; | 215 | 0 | } | 216 | 0 | } | 217 | 1 | *pdata_x = data_x & 3; | 218 | 1 | #ifdef PACIFY_VALGRIND | 219 | | /* Put any undefinedness back, and carry it over to the output. */ | 220 | 1 | VALGRIND_SET_VBITS(psrc-1, &vbits, 1); | 221 | 1 | { | 222 | 1 | byte ones = 0xff; | 223 | 1 | if (vbits & 0x30) | 224 | 1 | VALGRIND_SET_VBITS(bend - spread*3, &ones, 1); | 225 | 1 | if (vbits & 0x0C) | 226 | 1 | VALGRIND_SET_VBITS(bend - spread*2, &ones, 1); | 227 | 1 | if (vbits & 0x03) | 228 | 1 | VALGRIND_SET_VBITS(bend - spread*1, &ones, 1); | 229 | 1 | } | 230 | 1 | #endif | 231 | 1 | return bptr; | 232 | 1 | } |
|
233 | | |
234 | | #undef NEXT_MAP |
235 | | |
236 | | const byte * |
237 | | TEMPLATE_sample_unpack_4(byte * bptr, int *pdata_x, const byte * data, int data_x, |
238 | | uint dsize, const sample_map *smap, int spread, |
239 | | int num_components_per_plane) |
240 | 19.9k | { |
241 | 19.9k | const sample_lookup_t * ptab = &smap->table; |
242 | 19.9k | byte *bufp = bptr; |
243 | 19.9k | const byte *psrc = data + (data_x >> 1); |
244 | 19.9k | int left = dsize - (data_x >> 1); |
245 | 19.9k | const byte *map = &ptab->lookup8[0]; |
246 | 19.9k | DEFINE_SMAP_INDEX |
247 | | |
248 | 19.9k | #ifdef PACIFY_VALGRIND |
249 | 19.9k | byte vbits = 0; |
250 | | |
251 | | /* Allow for undefined bits at the end */ |
252 | 19.9k | VALGRIND_GET_VBITS(&psrc[left-1], &vbits, 1); |
253 | | /* At least the top 4 bits must be defined. If not, |
254 | | * don't change anything, and let valgrind complain. */ |
255 | 19.9k | if ((vbits & 0xf0) == 0) { |
256 | 19.9k | byte zero = 0; |
257 | 19.9k | VALGRIND_SET_VBITS(&psrc[left-1], &zero, 1); |
258 | 19.9k | } |
259 | 19.9k | #endif |
260 | | |
261 | 3.20M | while (left--) { |
262 | 3.18M | uint b = *psrc++; |
263 | | |
264 | 3.18M | *bufp = map[b >> 4]; |
265 | 3.18M | NEXT_MAP8; |
266 | 3.18M | bufp += spread; |
267 | 3.18M | *bufp = map[b & 0xf]; |
268 | 3.18M | NEXT_MAP8; |
269 | 3.18M | bufp += spread; |
270 | 3.18M | } |
271 | 19.9k | #ifdef PACIFY_VALGRIND |
272 | | /* Put any undefinedness back, and carry it over to the output. */ |
273 | 19.9k | VALGRIND_SET_VBITS(psrc-1, &vbits, 1); |
274 | 19.9k | if ((vbits & 0x0f) != 0) { |
275 | 0 | byte ones = 0xFF; |
276 | 0 | VALGRIND_SET_VBITS(bufp-spread, &ones, 1); |
277 | 0 | } |
278 | 19.9k | #endif |
279 | 19.9k | *pdata_x = data_x & 1; |
280 | 19.9k | return bptr; |
281 | 19.9k | } Line | Count | Source | 240 | 19.9k | { | 241 | 19.9k | const sample_lookup_t * ptab = &smap->table; | 242 | 19.9k | byte *bufp = bptr; | 243 | 19.9k | const byte *psrc = data + (data_x >> 1); | 244 | 19.9k | int left = dsize - (data_x >> 1); | 245 | 19.9k | const byte *map = &ptab->lookup8[0]; | 246 | 19.9k | DEFINE_SMAP_INDEX | 247 | | | 248 | 19.9k | #ifdef PACIFY_VALGRIND | 249 | 19.9k | byte vbits = 0; | 250 | | | 251 | | /* Allow for undefined bits at the end */ | 252 | 19.9k | VALGRIND_GET_VBITS(&psrc[left-1], &vbits, 1); | 253 | | /* At least the top 4 bits must be defined. If not, | 254 | | * don't change anything, and let valgrind complain. */ | 255 | 19.9k | if ((vbits & 0xf0) == 0) { | 256 | 19.9k | byte zero = 0; | 257 | 19.9k | VALGRIND_SET_VBITS(&psrc[left-1], &zero, 1); | 258 | 19.9k | } | 259 | 19.9k | #endif | 260 | | | 261 | 3.20M | while (left--) { | 262 | 3.18M | uint b = *psrc++; | 263 | | | 264 | 3.18M | *bufp = map[b >> 4]; | 265 | 3.18M | NEXT_MAP8; | 266 | 3.18M | bufp += spread; | 267 | 3.18M | *bufp = map[b & 0xf]; | 268 | 3.18M | NEXT_MAP8; | 269 | 3.18M | bufp += spread; | 270 | 3.18M | } | 271 | 19.9k | #ifdef PACIFY_VALGRIND | 272 | | /* Put any undefinedness back, and carry it over to the output. */ | 273 | 19.9k | VALGRIND_SET_VBITS(psrc-1, &vbits, 1); | 274 | 19.9k | if ((vbits & 0x0f) != 0) { | 275 | 0 | byte ones = 0xFF; | 276 | 0 | VALGRIND_SET_VBITS(bufp-spread, &ones, 1); | 277 | 0 | } | 278 | 19.9k | #endif | 279 | 19.9k | *pdata_x = data_x & 1; | 280 | 19.9k | return bptr; | 281 | 19.9k | } |
Unexecuted instantiation: sample_unpack_4_interleaved |
282 | | |
283 | | const byte * |
284 | | TEMPLATE_sample_unpack_8(byte * bptr, int *pdata_x, const byte * data, int data_x, |
285 | | uint dsize, const sample_map *smap, int spread, |
286 | | int num_components_per_plane) |
287 | 23.0M | { |
288 | 23.0M | const sample_lookup_t * ptab = &smap->table; |
289 | 23.0M | byte *bufp = bptr; |
290 | 23.0M | const byte *psrc = data + data_x; |
291 | 23.0M | DEFINE_SMAP_INDEX |
292 | | |
293 | 23.0M | *pdata_x = 0; |
294 | 23.0M | if (spread == 1) { |
295 | 21.1M | if (MULTIPLE_MAPS || |
296 | 21.1M | ptab->lookup8[0] != 0 || |
297 | 21.1M | ptab->lookup8[255] != 255 |
298 | 21.1M | ) { |
299 | 24.0k | uint left = dsize - data_x; |
300 | 24.0k | const byte *map = &ptab->lookup8[0]; |
301 | | |
302 | 17.1M | while (left--) { |
303 | 17.1M | *bufp++ = map[*psrc++]; |
304 | 17.1M | NEXT_MAP8; |
305 | 17.1M | } |
306 | 21.1M | } else { /* No copying needed, and we'll use the data right away. */ |
307 | 21.1M | return psrc; |
308 | 21.1M | } |
309 | 21.1M | } else { |
310 | 1.88M | int left = dsize - data_x; |
311 | 1.88M | const byte *map = &ptab->lookup8[0]; |
312 | | |
313 | 1.83G | for (; left--; psrc++, bufp += spread) { |
314 | 1.83G | *bufp = map[*psrc]; |
315 | 1.83G | NEXT_MAP8; |
316 | 1.83G | } |
317 | 1.88M | } |
318 | 1.91M | return bptr; |
319 | 23.0M | } Line | Count | Source | 287 | 23.0M | { | 288 | 23.0M | const sample_lookup_t * ptab = &smap->table; | 289 | 23.0M | byte *bufp = bptr; | 290 | 23.0M | const byte *psrc = data + data_x; | 291 | 23.0M | DEFINE_SMAP_INDEX | 292 | | | 293 | 23.0M | *pdata_x = 0; | 294 | 23.0M | if (spread == 1) { | 295 | 21.1M | if (MULTIPLE_MAPS || | 296 | 21.1M | ptab->lookup8[0] != 0 || | 297 | 21.1M | ptab->lookup8[255] != 255 | 298 | 21.1M | ) { | 299 | 23.9k | uint left = dsize - data_x; | 300 | 23.9k | const byte *map = &ptab->lookup8[0]; | 301 | | | 302 | 17.1M | while (left--) { | 303 | 17.1M | *bufp++ = map[*psrc++]; | 304 | 17.1M | NEXT_MAP8; | 305 | 17.1M | } | 306 | 21.1M | } else { /* No copying needed, and we'll use the data right away. */ | 307 | 21.1M | return psrc; | 308 | 21.1M | } | 309 | 21.1M | } else { | 310 | 1.88M | int left = dsize - data_x; | 311 | 1.88M | const byte *map = &ptab->lookup8[0]; | 312 | | | 313 | 1.83G | for (; left--; psrc++, bufp += spread) { | 314 | 1.83G | *bufp = map[*psrc]; | 315 | 1.83G | NEXT_MAP8; | 316 | 1.83G | } | 317 | 1.88M | } | 318 | 1.91M | return bptr; | 319 | 23.0M | } |
sample_unpack_8_interleaved Line | Count | Source | 287 | 95 | { | 288 | 95 | const sample_lookup_t * ptab = &smap->table; | 289 | 95 | byte *bufp = bptr; | 290 | 95 | const byte *psrc = data + data_x; | 291 | 95 | DEFINE_SMAP_INDEX | 292 | | | 293 | 95 | *pdata_x = 0; | 294 | 95 | if (spread == 1) { | 295 | 95 | if (MULTIPLE_MAPS || | 296 | 95 | ptab->lookup8[0] != 0 || | 297 | 95 | ptab->lookup8[255] != 255 | 298 | 95 | ) { | 299 | 95 | uint left = dsize - data_x; | 300 | 95 | const byte *map = &ptab->lookup8[0]; | 301 | | | 302 | 36.5k | while (left--) { | 303 | 36.4k | *bufp++ = map[*psrc++]; | 304 | 36.4k | NEXT_MAP8; | 305 | 36.4k | } | 306 | 95 | } else { /* No copying needed, and we'll use the data right away. */ | 307 | 0 | return psrc; | 308 | 0 | } | 309 | 95 | } else { | 310 | 0 | int left = dsize - data_x; | 311 | 0 | const byte *map = &ptab->lookup8[0]; | 312 | |
| 313 | 0 | for (; left--; psrc++, bufp += spread) { | 314 | 0 | *bufp = map[*psrc]; | 315 | 0 | NEXT_MAP8; | 316 | 0 | } | 317 | 0 | } | 318 | 95 | return bptr; | 319 | 95 | } |
|
320 | | |
321 | | #undef NEXT_MAP |
322 | | #undef NEXT_MAP8 |
323 | | #undef DEFINE_SMAP_INDEX |
324 | | |
325 | | #else |
326 | | int dummy; |
327 | | #endif |