/src/cairo/subprojects/pixman-0.44.2/pixman/pixman-access.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * |
3 | | * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc. |
4 | | * 2005 Lars Knoll & Zack Rusin, Trolltech |
5 | | * 2008 Aaron Plattner, NVIDIA Corporation |
6 | | * |
7 | | * Permission to use, copy, modify, distribute, and sell this software and its |
8 | | * documentation for any purpose is hereby granted without fee, provided that |
9 | | * the above copyright notice appear in all copies and that both that |
10 | | * copyright notice and this permission notice appear in supporting |
11 | | * documentation, and that the name of Keith Packard not be used in |
12 | | * advertising or publicity pertaining to distribution of the software without |
13 | | * specific, written prior permission. Keith Packard makes no |
14 | | * representations about the suitability of this software for any purpose. It |
15 | | * is provided "as is" without express or implied warranty. |
16 | | * |
17 | | * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS |
18 | | * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND |
19 | | * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY |
20 | | * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
21 | | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN |
22 | | * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING |
23 | | * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS |
24 | | * SOFTWARE. |
25 | | */ |
26 | | |
27 | | #ifdef HAVE_CONFIG_H |
28 | | #include <pixman-config.h> |
29 | | #endif |
30 | | |
31 | | #include <stdlib.h> |
32 | | #include <string.h> |
33 | | #include <assert.h> |
34 | | #include <math.h> |
35 | | |
36 | | #include "pixman-accessor.h" |
37 | | #include "pixman-private.h" |
38 | | |
39 | | #define CONVERT_RGB24_TO_Y15(s) \ |
40 | 0 | (((((s) >> 16) & 0xff) * 153 + \ |
41 | 0 | (((s) >> 8) & 0xff) * 301 + \ |
42 | 0 | (((s) ) & 0xff) * 58) >> 2) |
43 | | |
44 | | #define CONVERT_RGB24_TO_RGB15(s) \ |
45 | | ((((s) >> 3) & 0x001f) | \ |
46 | | (((s) >> 6) & 0x03e0) | \ |
47 | | (((s) >> 9) & 0x7c00)) |
48 | | |
49 | | /* Fetch macros */ |
50 | | |
51 | | #ifdef WORDS_BIGENDIAN |
52 | | #define FETCH_1(img,l,o) \ |
53 | | (((READ ((img), ((uint32_t *)(l)) + ((o) >> 5))) >> (0x1f - ((o) & 0x1f))) & 0x1) |
54 | | #else |
55 | | #define FETCH_1(img,l,o) \ |
56 | 0 | ((((READ ((img), ((uint32_t *)(l)) + ((o) >> 5))) >> ((o) & 0x1f))) & 0x1) |
57 | | #endif |
58 | | |
59 | 0 | #define FETCH_8(img,l,o) (READ (img, (((uint8_t *)(l)) + ((o) >> 3)))) |
60 | | |
61 | | #ifdef WORDS_BIGENDIAN |
62 | | #define FETCH_4(img,l,o) \ |
63 | | (((4 * (o)) & 4) ? (FETCH_8 (img,l, 4 * (o)) & 0xf) : (FETCH_8 (img,l,(4 * (o))) >> 4)) |
64 | | #else |
65 | | #define FETCH_4(img,l,o) \ |
66 | 0 | (((4 * (o)) & 4) ? (FETCH_8 (img, l, 4 * (o)) >> 4) : (FETCH_8 (img, l, (4 * (o))) & 0xf)) |
67 | | #endif |
68 | | |
69 | | #ifdef WORDS_BIGENDIAN |
70 | | #define FETCH_24(img,l,o) \ |
71 | | ((uint32_t)(READ (img, (((uint8_t *)(l)) + ((o) * 3) + 0)) << 16) | \ |
72 | | (uint32_t)(READ (img, (((uint8_t *)(l)) + ((o) * 3) + 1)) << 8) | \ |
73 | | (uint32_t)(READ (img, (((uint8_t *)(l)) + ((o) * 3) + 2)) << 0)) |
74 | | #else |
75 | | #define FETCH_24(img,l,o) \ |
76 | 0 | ((uint32_t)(READ (img, (((uint8_t *)(l)) + ((o) * 3) + 0)) << 0) | \ |
77 | 0 | (uint32_t)(READ (img, (((uint8_t *)(l)) + ((o) * 3) + 1)) << 8) | \ |
78 | 0 | (uint32_t)(READ (img, (((uint8_t *)(l)) + ((o) * 3) + 2)) << 16)) |
79 | | #endif |
80 | | |
81 | | /* Store macros */ |
82 | | |
83 | | #ifdef WORDS_BIGENDIAN |
84 | | #define STORE_1(img,l,o,v) \ |
85 | | do \ |
86 | | { \ |
87 | | uint32_t *__d = ((uint32_t *)(l)) + ((o) >> 5); \ |
88 | | uint32_t __m, __v; \ |
89 | | \ |
90 | | __m = 1U << (0x1f - ((o) & 0x1f)); \ |
91 | | __v = (v)? __m : 0; \ |
92 | | \ |
93 | | WRITE((img), __d, (READ((img), __d) & ~__m) | __v); \ |
94 | | } \ |
95 | | while (0) |
96 | | #else |
97 | | #define STORE_1(img,l,o,v) \ |
98 | 0 | do \ |
99 | 0 | { \ |
100 | 0 | uint32_t *__d = ((uint32_t *)(l)) + ((o) >> 5); \ |
101 | 0 | uint32_t __m, __v; \ |
102 | 0 | \ |
103 | 0 | __m = 1U << ((o) & 0x1f); \ |
104 | 0 | __v = (v)? __m : 0; \ |
105 | 0 | \ |
106 | 0 | WRITE((img), __d, (READ((img), __d) & ~__m) | __v); \ |
107 | 0 | } \ |
108 | 0 | while (0) |
109 | | #endif |
110 | | |
111 | 0 | #define STORE_8(img,l,o,v) (WRITE (img, (uint8_t *)(l) + ((o) >> 3), (v))) |
112 | | |
113 | | #ifdef WORDS_BIGENDIAN |
114 | | #define STORE_4(img,l,o,v) \ |
115 | | do \ |
116 | | { \ |
117 | | int bo = 4 * (o); \ |
118 | | int v4 = (v) & 0x0f; \ |
119 | | \ |
120 | | STORE_8 (img, l, bo, ( \ |
121 | | bo & 4 ? \ |
122 | | (FETCH_8 (img, l, bo) & 0xf0) | (v4) : \ |
123 | | (FETCH_8 (img, l, bo) & 0x0f) | (v4 << 4))); \ |
124 | | } while (0) |
125 | | #else |
126 | | #define STORE_4(img,l,o,v) \ |
127 | 0 | do \ |
128 | 0 | { \ |
129 | 0 | int bo = 4 * (o); \ |
130 | 0 | int v4 = (v) & 0x0f; \ |
131 | 0 | \ |
132 | 0 | STORE_8 (img, l, bo, ( \ |
133 | 0 | bo & 4 ? \ |
134 | 0 | (FETCH_8 (img, l, bo) & 0x0f) | (v4 << 4) : \ |
135 | 0 | (FETCH_8 (img, l, bo) & 0xf0) | (v4))); \ |
136 | 0 | } while (0) |
137 | | #endif |
138 | | |
139 | | #ifdef WORDS_BIGENDIAN |
140 | | #define STORE_24(img,l,o,v) \ |
141 | | do \ |
142 | | { \ |
143 | | uint8_t *__tmp = (l) + 3 * (o); \ |
144 | | \ |
145 | | WRITE ((img), __tmp++, ((v) & 0x00ff0000) >> 16); \ |
146 | | WRITE ((img), __tmp++, ((v) & 0x0000ff00) >> 8); \ |
147 | | WRITE ((img), __tmp++, ((v) & 0x000000ff) >> 0); \ |
148 | | } \ |
149 | | while (0) |
150 | | #else |
151 | | #define STORE_24(img,l,o,v) \ |
152 | 0 | do \ |
153 | 0 | { \ |
154 | 0 | uint8_t *__tmp = (l) + 3 * (o); \ |
155 | 0 | \ |
156 | 0 | WRITE ((img), __tmp++, ((v) & 0x000000ff) >> 0); \ |
157 | 0 | WRITE ((img), __tmp++, ((v) & 0x0000ff00) >> 8); \ |
158 | 0 | WRITE ((img), __tmp++, ((v) & 0x00ff0000) >> 16); \ |
159 | 0 | } \ |
160 | 0 | while (0) |
161 | | #endif |
162 | | |
163 | | /* |
164 | | * YV12 setup and access macros |
165 | | */ |
166 | | |
167 | | #define YV12_SETUP(image) \ |
168 | 0 | bits_image_t *__bits_image = (bits_image_t *)image; \ |
169 | 0 | uint32_t *bits = __bits_image->bits; \ |
170 | 0 | int stride = __bits_image->rowstride; \ |
171 | 0 | int offset0 = stride < 0 ? \ |
172 | 0 | ((-stride) >> 1) * ((__bits_image->height - 1) >> 1) - stride : \ |
173 | 0 | stride * __bits_image->height; \ |
174 | 0 | int offset1 = stride < 0 ? \ |
175 | 0 | offset0 + ((-stride) >> 1) * ((__bits_image->height) >> 1) : \ |
176 | 0 | offset0 + (offset0 >> 2) |
177 | | |
178 | | /* Note no trailing semicolon on the above macro; if it's there, then |
179 | | * the typical usage of YV12_SETUP(image); will have an extra trailing ; |
180 | | * that some compilers will interpret as a statement -- and then any further |
181 | | * variable declarations will cause an error. |
182 | | */ |
183 | | |
184 | | #define YV12_Y(line) \ |
185 | 0 | ((uint8_t *) ((bits) + (stride) * (line))) |
186 | | |
187 | | #define YV12_U(line) \ |
188 | 0 | ((uint8_t *) ((bits) + offset1 + \ |
189 | 0 | ((stride) >> 1) * ((line) >> 1))) |
190 | | |
191 | | #define YV12_V(line) \ |
192 | 0 | ((uint8_t *) ((bits) + offset0 + \ |
193 | 0 | ((stride) >> 1) * ((line) >> 1))) |
194 | | |
195 | | /* Misc. helpers */ |
196 | | |
197 | | static force_inline void |
198 | | get_shifts (pixman_format_code_t format, |
199 | | int *a, |
200 | | int *r, |
201 | | int *g, |
202 | | int *b) |
203 | 1.61k | { |
204 | 1.61k | switch (PIXMAN_FORMAT_TYPE (format)) |
205 | 1.61k | { |
206 | 805 | case PIXMAN_TYPE_A: |
207 | 805 | *b = 0; |
208 | 805 | *g = 0; |
209 | 805 | *r = 0; |
210 | 805 | *a = 0; |
211 | 805 | break; |
212 | | |
213 | 805 | case PIXMAN_TYPE_ARGB: |
214 | 805 | case PIXMAN_TYPE_ARGB_SRGB: |
215 | 805 | *b = 0; |
216 | 805 | *g = *b + PIXMAN_FORMAT_B (format); |
217 | 805 | *r = *g + PIXMAN_FORMAT_G (format); |
218 | 805 | *a = *r + PIXMAN_FORMAT_R (format); |
219 | 805 | break; |
220 | | |
221 | 0 | case PIXMAN_TYPE_ABGR: |
222 | 0 | *r = 0; |
223 | 0 | *g = *r + PIXMAN_FORMAT_R (format); |
224 | 0 | *b = *g + PIXMAN_FORMAT_G (format); |
225 | 0 | *a = *b + PIXMAN_FORMAT_B (format); |
226 | 0 | break; |
227 | | |
228 | 0 | case PIXMAN_TYPE_BGRA: |
229 | | /* With BGRA formats we start counting at the high end of the pixel */ |
230 | 0 | *b = PIXMAN_FORMAT_BPP (format) - PIXMAN_FORMAT_B (format); |
231 | 0 | *g = *b - PIXMAN_FORMAT_B (format); |
232 | 0 | *r = *g - PIXMAN_FORMAT_G (format); |
233 | 0 | *a = *r - PIXMAN_FORMAT_R (format); |
234 | 0 | break; |
235 | | |
236 | 0 | case PIXMAN_TYPE_RGBA: |
237 | | /* With BGRA formats we start counting at the high end of the pixel */ |
238 | 0 | *r = PIXMAN_FORMAT_BPP (format) - PIXMAN_FORMAT_R (format); |
239 | 0 | *g = *r - PIXMAN_FORMAT_R (format); |
240 | 0 | *b = *g - PIXMAN_FORMAT_G (format); |
241 | 0 | *a = *b - PIXMAN_FORMAT_B (format); |
242 | 0 | break; |
243 | | |
244 | 0 | default: |
245 | 0 | assert (0); |
246 | 0 | break; |
247 | 1.61k | } |
248 | 1.61k | } pixman-access.c:get_shifts Line | Count | Source | 203 | 1.61k | { | 204 | 1.61k | switch (PIXMAN_FORMAT_TYPE (format)) | 205 | 1.61k | { | 206 | 805 | case PIXMAN_TYPE_A: | 207 | 805 | *b = 0; | 208 | 805 | *g = 0; | 209 | 805 | *r = 0; | 210 | 805 | *a = 0; | 211 | 805 | break; | 212 | | | 213 | 805 | case PIXMAN_TYPE_ARGB: | 214 | 805 | case PIXMAN_TYPE_ARGB_SRGB: | 215 | 805 | *b = 0; | 216 | 805 | *g = *b + PIXMAN_FORMAT_B (format); | 217 | 805 | *r = *g + PIXMAN_FORMAT_G (format); | 218 | 805 | *a = *r + PIXMAN_FORMAT_R (format); | 219 | 805 | break; | 220 | | | 221 | 0 | case PIXMAN_TYPE_ABGR: | 222 | 0 | *r = 0; | 223 | 0 | *g = *r + PIXMAN_FORMAT_R (format); | 224 | 0 | *b = *g + PIXMAN_FORMAT_G (format); | 225 | 0 | *a = *b + PIXMAN_FORMAT_B (format); | 226 | 0 | break; | 227 | | | 228 | 0 | case PIXMAN_TYPE_BGRA: | 229 | | /* With BGRA formats we start counting at the high end of the pixel */ | 230 | 0 | *b = PIXMAN_FORMAT_BPP (format) - PIXMAN_FORMAT_B (format); | 231 | 0 | *g = *b - PIXMAN_FORMAT_B (format); | 232 | 0 | *r = *g - PIXMAN_FORMAT_G (format); | 233 | 0 | *a = *r - PIXMAN_FORMAT_R (format); | 234 | 0 | break; | 235 | | | 236 | 0 | case PIXMAN_TYPE_RGBA: | 237 | | /* With BGRA formats we start counting at the high end of the pixel */ | 238 | 0 | *r = PIXMAN_FORMAT_BPP (format) - PIXMAN_FORMAT_R (format); | 239 | 0 | *g = *r - PIXMAN_FORMAT_R (format); | 240 | 0 | *b = *g - PIXMAN_FORMAT_G (format); | 241 | 0 | *a = *b - PIXMAN_FORMAT_B (format); | 242 | 0 | break; | 243 | | | 244 | 0 | default: | 245 | 0 | assert (0); | 246 | 0 | break; | 247 | 1.61k | } | 248 | 1.61k | } |
Unexecuted instantiation: pixman-access-accessors.c:get_shifts |
249 | | |
250 | | static force_inline uint32_t |
251 | | convert_channel (uint32_t pixel, uint32_t def_value, |
252 | | int n_from_bits, int from_shift, |
253 | | int n_to_bits, int to_shift) |
254 | 3.22k | { |
255 | 3.22k | uint32_t v; |
256 | | |
257 | 3.22k | if (n_from_bits && n_to_bits) |
258 | 805 | v = unorm_to_unorm (pixel >> from_shift, n_from_bits, n_to_bits); |
259 | 2.41k | else if (n_to_bits) |
260 | 0 | v = def_value; |
261 | 2.41k | else |
262 | 2.41k | v = 0; |
263 | | |
264 | 3.22k | return (v & ((1 << n_to_bits) - 1)) << to_shift; |
265 | 3.22k | } pixman-access.c:convert_channel Line | Count | Source | 254 | 3.22k | { | 255 | 3.22k | uint32_t v; | 256 | | | 257 | 3.22k | if (n_from_bits && n_to_bits) | 258 | 805 | v = unorm_to_unorm (pixel >> from_shift, n_from_bits, n_to_bits); | 259 | 2.41k | else if (n_to_bits) | 260 | 0 | v = def_value; | 261 | 2.41k | else | 262 | 2.41k | v = 0; | 263 | | | 264 | 3.22k | return (v & ((1 << n_to_bits) - 1)) << to_shift; | 265 | 3.22k | } |
Unexecuted instantiation: pixman-access-accessors.c:convert_channel |
266 | | |
267 | | static force_inline uint32_t |
268 | | convert_pixel (pixman_format_code_t from, pixman_format_code_t to, uint32_t pixel) |
269 | 805 | { |
270 | 805 | int a_from_shift, r_from_shift, g_from_shift, b_from_shift; |
271 | 805 | int a_to_shift, r_to_shift, g_to_shift, b_to_shift; |
272 | 805 | uint32_t a, r, g, b; |
273 | | |
274 | 805 | get_shifts (from, &a_from_shift, &r_from_shift, &g_from_shift, &b_from_shift); |
275 | 805 | get_shifts (to, &a_to_shift, &r_to_shift, &g_to_shift, &b_to_shift); |
276 | | |
277 | 805 | a = convert_channel (pixel, ~0, |
278 | 805 | PIXMAN_FORMAT_A (from), a_from_shift, |
279 | 805 | PIXMAN_FORMAT_A (to), a_to_shift); |
280 | | |
281 | 805 | r = convert_channel (pixel, 0, |
282 | 805 | PIXMAN_FORMAT_R (from), r_from_shift, |
283 | 805 | PIXMAN_FORMAT_R (to), r_to_shift); |
284 | | |
285 | 805 | g = convert_channel (pixel, 0, |
286 | 805 | PIXMAN_FORMAT_G (from), g_from_shift, |
287 | 805 | PIXMAN_FORMAT_G (to), g_to_shift); |
288 | | |
289 | 805 | b = convert_channel (pixel, 0, |
290 | 805 | PIXMAN_FORMAT_B (from), b_from_shift, |
291 | 805 | PIXMAN_FORMAT_B (to), b_to_shift); |
292 | | |
293 | 805 | return a | r | g | b; |
294 | 805 | } pixman-access.c:convert_pixel Line | Count | Source | 269 | 805 | { | 270 | 805 | int a_from_shift, r_from_shift, g_from_shift, b_from_shift; | 271 | 805 | int a_to_shift, r_to_shift, g_to_shift, b_to_shift; | 272 | 805 | uint32_t a, r, g, b; | 273 | | | 274 | 805 | get_shifts (from, &a_from_shift, &r_from_shift, &g_from_shift, &b_from_shift); | 275 | 805 | get_shifts (to, &a_to_shift, &r_to_shift, &g_to_shift, &b_to_shift); | 276 | | | 277 | 805 | a = convert_channel (pixel, ~0, | 278 | 805 | PIXMAN_FORMAT_A (from), a_from_shift, | 279 | 805 | PIXMAN_FORMAT_A (to), a_to_shift); | 280 | | | 281 | 805 | r = convert_channel (pixel, 0, | 282 | 805 | PIXMAN_FORMAT_R (from), r_from_shift, | 283 | 805 | PIXMAN_FORMAT_R (to), r_to_shift); | 284 | | | 285 | 805 | g = convert_channel (pixel, 0, | 286 | 805 | PIXMAN_FORMAT_G (from), g_from_shift, | 287 | 805 | PIXMAN_FORMAT_G (to), g_to_shift); | 288 | | | 289 | 805 | b = convert_channel (pixel, 0, | 290 | 805 | PIXMAN_FORMAT_B (from), b_from_shift, | 291 | 805 | PIXMAN_FORMAT_B (to), b_to_shift); | 292 | | | 293 | 805 | return a | r | g | b; | 294 | 805 | } |
Unexecuted instantiation: pixman-access-accessors.c:convert_pixel |
295 | | |
296 | | static force_inline uint32_t |
297 | | convert_pixel_to_a8r8g8b8 (bits_image_t *image, |
298 | | pixman_format_code_t format, |
299 | | uint32_t pixel) |
300 | 0 | { |
301 | 0 | if (PIXMAN_FORMAT_TYPE (format) == PIXMAN_TYPE_GRAY || |
302 | 0 | PIXMAN_FORMAT_TYPE (format) == PIXMAN_TYPE_COLOR) |
303 | 0 | { |
304 | 0 | return image->indexed->rgba[pixel]; |
305 | 0 | } |
306 | 0 | else |
307 | 0 | { |
308 | 0 | return convert_pixel (format, PIXMAN_a8r8g8b8, pixel); |
309 | 0 | } |
310 | 0 | } Unexecuted instantiation: pixman-access.c:convert_pixel_to_a8r8g8b8 Unexecuted instantiation: pixman-access-accessors.c:convert_pixel_to_a8r8g8b8 |
311 | | |
312 | | static force_inline uint32_t |
313 | | convert_pixel_from_a8r8g8b8 (pixman_image_t *image, |
314 | | pixman_format_code_t format, uint32_t pixel) |
315 | 805 | { |
316 | 805 | if (PIXMAN_FORMAT_TYPE (format) == PIXMAN_TYPE_GRAY) |
317 | 0 | { |
318 | 0 | pixel = CONVERT_RGB24_TO_Y15 (pixel); |
319 | |
|
320 | 0 | return image->bits.indexed->ent[pixel & 0x7fff]; |
321 | 0 | } |
322 | 805 | else if (PIXMAN_FORMAT_TYPE (format) == PIXMAN_TYPE_COLOR) |
323 | 0 | { |
324 | 0 | pixel = convert_pixel (PIXMAN_a8r8g8b8, PIXMAN_x1r5g5b5, pixel); |
325 | |
|
326 | 0 | return image->bits.indexed->ent[pixel & 0x7fff]; |
327 | 0 | } |
328 | 805 | else |
329 | 805 | { |
330 | 805 | return convert_pixel (PIXMAN_a8r8g8b8, format, pixel); |
331 | 805 | } |
332 | 805 | } pixman-access.c:convert_pixel_from_a8r8g8b8 Line | Count | Source | 315 | 805 | { | 316 | 805 | if (PIXMAN_FORMAT_TYPE (format) == PIXMAN_TYPE_GRAY) | 317 | 0 | { | 318 | 0 | pixel = CONVERT_RGB24_TO_Y15 (pixel); | 319 | |
| 320 | 0 | return image->bits.indexed->ent[pixel & 0x7fff]; | 321 | 0 | } | 322 | 805 | else if (PIXMAN_FORMAT_TYPE (format) == PIXMAN_TYPE_COLOR) | 323 | 0 | { | 324 | 0 | pixel = convert_pixel (PIXMAN_a8r8g8b8, PIXMAN_x1r5g5b5, pixel); | 325 | |
| 326 | 0 | return image->bits.indexed->ent[pixel & 0x7fff]; | 327 | 0 | } | 328 | 805 | else | 329 | 805 | { | 330 | 805 | return convert_pixel (PIXMAN_a8r8g8b8, format, pixel); | 331 | 805 | } | 332 | 805 | } |
Unexecuted instantiation: pixman-access-accessors.c:convert_pixel_from_a8r8g8b8 |
333 | | |
334 | | static force_inline uint32_t |
335 | | fetch_and_convert_pixel (bits_image_t * image, |
336 | | const uint8_t * bits, |
337 | | int offset, |
338 | | pixman_format_code_t format) |
339 | 0 | { |
340 | 0 | uint32_t pixel; |
341 | |
|
342 | 0 | switch (PIXMAN_FORMAT_BPP (format)) |
343 | 0 | { |
344 | 0 | case 1: |
345 | 0 | pixel = FETCH_1 (image, bits, offset); |
346 | 0 | break; |
347 | | |
348 | 0 | case 4: |
349 | 0 | pixel = FETCH_4 (image, bits, offset); |
350 | 0 | break; |
351 | | |
352 | 0 | case 8: |
353 | 0 | pixel = READ (image, bits + offset); |
354 | 0 | break; |
355 | | |
356 | 0 | case 16: |
357 | 0 | pixel = READ (image, ((uint16_t *)bits + offset)); |
358 | 0 | break; |
359 | | |
360 | 0 | case 24: |
361 | 0 | pixel = FETCH_24 (image, bits, offset); |
362 | 0 | break; |
363 | | |
364 | 0 | case 32: |
365 | 0 | pixel = READ (image, ((uint32_t *)bits + offset)); |
366 | 0 | break; |
367 | | |
368 | 0 | default: |
369 | 0 | pixel = 0xffff00ff; /* As ugly as possible to detect the bug */ |
370 | 0 | break; |
371 | 0 | } |
372 | | |
373 | 0 | return convert_pixel_to_a8r8g8b8 (image, format, pixel); |
374 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_and_convert_pixel Unexecuted instantiation: pixman-access-accessors.c:fetch_and_convert_pixel |
375 | | |
376 | | static force_inline void |
377 | | convert_and_store_pixel (bits_image_t * image, |
378 | | uint8_t * dest, |
379 | | int offset, |
380 | | pixman_format_code_t format, |
381 | | uint32_t pixel) |
382 | 805 | { |
383 | 805 | uint32_t converted = convert_pixel_from_a8r8g8b8 ( |
384 | 805 | (pixman_image_t *)image, format, pixel); |
385 | | |
386 | 805 | switch (PIXMAN_FORMAT_BPP (format)) |
387 | 805 | { |
388 | 0 | case 1: |
389 | 0 | STORE_1 (image, dest, offset, converted & 0x01); |
390 | 0 | break; |
391 | | |
392 | 0 | case 4: |
393 | 0 | STORE_4 (image, dest, offset, converted & 0xf); |
394 | 0 | break; |
395 | | |
396 | 805 | case 8: |
397 | 805 | WRITE (image, (dest + offset), converted & 0xff); |
398 | 805 | break; |
399 | | |
400 | 0 | case 16: |
401 | 0 | WRITE (image, ((uint16_t *)dest + offset), converted & 0xffff); |
402 | 0 | break; |
403 | | |
404 | 0 | case 24: |
405 | 0 | STORE_24 (image, dest, offset, converted); |
406 | 0 | break; |
407 | | |
408 | 0 | case 32: |
409 | 0 | WRITE (image, ((uint32_t *)dest + offset), converted); |
410 | 0 | break; |
411 | | |
412 | 0 | default: |
413 | 0 | *dest = 0x0; |
414 | 0 | break; |
415 | 805 | } |
416 | 805 | } pixman-access.c:convert_and_store_pixel Line | Count | Source | 382 | 805 | { | 383 | 805 | uint32_t converted = convert_pixel_from_a8r8g8b8 ( | 384 | 805 | (pixman_image_t *)image, format, pixel); | 385 | | | 386 | 805 | switch (PIXMAN_FORMAT_BPP (format)) | 387 | 805 | { | 388 | 0 | case 1: | 389 | 0 | STORE_1 (image, dest, offset, converted & 0x01); | 390 | 0 | break; | 391 | | | 392 | 0 | case 4: | 393 | 0 | STORE_4 (image, dest, offset, converted & 0xf); | 394 | 0 | break; | 395 | | | 396 | 805 | case 8: | 397 | 805 | WRITE (image, (dest + offset), converted & 0xff); | 398 | 805 | break; | 399 | | | 400 | 0 | case 16: | 401 | 0 | WRITE (image, ((uint16_t *)dest + offset), converted & 0xffff); | 402 | 0 | break; | 403 | | | 404 | 0 | case 24: | 405 | 0 | STORE_24 (image, dest, offset, converted); | 406 | 0 | break; | 407 | | | 408 | 0 | case 32: | 409 | 0 | WRITE (image, ((uint32_t *)dest + offset), converted); | 410 | 0 | break; | 411 | | | 412 | 0 | default: | 413 | 0 | *dest = 0x0; | 414 | 0 | break; | 415 | 805 | } | 416 | 805 | } |
Unexecuted instantiation: pixman-access-accessors.c:convert_and_store_pixel |
417 | | |
418 | | #define MAKE_ACCESSORS(format) \ |
419 | | static void \ |
420 | | fetch_scanline_ ## format (bits_image_t *image, \ |
421 | | int x, \ |
422 | | int y, \ |
423 | | int width, \ |
424 | | uint32_t * buffer, \ |
425 | | const uint32_t *mask) \ |
426 | 0 | { \ |
427 | 0 | uint8_t *bits = \ |
428 | 0 | (uint8_t *)(image->bits + y * image->rowstride); \ |
429 | 0 | int i; \ |
430 | 0 | \ |
431 | 0 | for (i = 0; i < width; ++i) \ |
432 | 0 | { \ |
433 | 0 | *buffer++ = \ |
434 | 0 | fetch_and_convert_pixel (image, bits, x + i, PIXMAN_ ## format); \ |
435 | 0 | } \ |
436 | 0 | } \ Unexecuted instantiation: pixman-access.c:fetch_scanline_a8r8g8b8 Unexecuted instantiation: pixman-access.c:fetch_scanline_x8r8g8b8 Unexecuted instantiation: pixman-access.c:fetch_scanline_a8b8g8r8 Unexecuted instantiation: pixman-access.c:fetch_scanline_x8b8g8r8 Unexecuted instantiation: pixman-access.c:fetch_scanline_b8g8r8a8 Unexecuted instantiation: pixman-access.c:fetch_scanline_b8g8r8x8 Unexecuted instantiation: pixman-access.c:fetch_scanline_r8g8b8a8 Unexecuted instantiation: pixman-access.c:fetch_scanline_r8g8b8x8 Unexecuted instantiation: pixman-access.c:fetch_scanline_x14r6g6b6 Unexecuted instantiation: pixman-access.c:fetch_scanline_r8g8b8 Unexecuted instantiation: pixman-access.c:fetch_scanline_b8g8r8 Unexecuted instantiation: pixman-access.c:fetch_scanline_r5g6b5 Unexecuted instantiation: pixman-access.c:fetch_scanline_b5g6r5 Unexecuted instantiation: pixman-access.c:fetch_scanline_a1r5g5b5 Unexecuted instantiation: pixman-access.c:fetch_scanline_x1r5g5b5 Unexecuted instantiation: pixman-access.c:fetch_scanline_a1b5g5r5 Unexecuted instantiation: pixman-access.c:fetch_scanline_x1b5g5r5 Unexecuted instantiation: pixman-access.c:fetch_scanline_a4r4g4b4 Unexecuted instantiation: pixman-access.c:fetch_scanline_x4r4g4b4 Unexecuted instantiation: pixman-access.c:fetch_scanline_a4b4g4r4 Unexecuted instantiation: pixman-access.c:fetch_scanline_x4b4g4r4 Unexecuted instantiation: pixman-access.c:fetch_scanline_a8 Unexecuted instantiation: pixman-access.c:fetch_scanline_r3g3b2 Unexecuted instantiation: pixman-access.c:fetch_scanline_b2g3r3 Unexecuted instantiation: pixman-access.c:fetch_scanline_a2r2g2b2 Unexecuted instantiation: pixman-access.c:fetch_scanline_a2b2g2r2 Unexecuted instantiation: pixman-access.c:fetch_scanline_c8 Unexecuted instantiation: pixman-access.c:fetch_scanline_g8 Unexecuted instantiation: pixman-access.c:fetch_scanline_x4a4 Unexecuted instantiation: pixman-access.c:fetch_scanline_a4 Unexecuted instantiation: pixman-access.c:fetch_scanline_r1g2b1 Unexecuted instantiation: pixman-access.c:fetch_scanline_b1g2r1 Unexecuted instantiation: pixman-access.c:fetch_scanline_a1r1g1b1 Unexecuted instantiation: pixman-access.c:fetch_scanline_a1b1g1r1 Unexecuted instantiation: pixman-access.c:fetch_scanline_c4 Unexecuted instantiation: pixman-access.c:fetch_scanline_g4 Unexecuted instantiation: pixman-access.c:fetch_scanline_a1 Unexecuted instantiation: pixman-access.c:fetch_scanline_g1 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a8r8g8b8 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x8r8g8b8 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a8b8g8r8 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x8b8g8r8 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_b8g8r8a8 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_b8g8r8x8 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_r8g8b8a8 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_r8g8b8x8 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x14r6g6b6 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_r8g8b8 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_b8g8r8 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_r5g6b5 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_b5g6r5 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a1r5g5b5 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x1r5g5b5 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a1b5g5r5 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x1b5g5r5 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a4r4g4b4 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x4r4g4b4 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a4b4g4r4 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x4b4g4r4 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a8 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_r3g3b2 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_b2g3r3 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a2r2g2b2 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a2b2g2r2 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_c8 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_g8 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x4a4 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a4 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_r1g2b1 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_b1g2r1 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a1r1g1b1 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a1b1g1r1 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_c4 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_g4 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a1 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_g1 |
437 | | \ |
438 | | static void \ |
439 | | store_scanline_ ## format (bits_image_t * image, \ |
440 | | int x, \ |
441 | | int y, \ |
442 | | int width, \ |
443 | | const uint32_t *values) \ |
444 | 35 | { \ |
445 | 35 | uint8_t *dest = \ |
446 | 35 | (uint8_t *)(image->bits + y * image->rowstride); \ |
447 | 35 | int i; \ |
448 | 35 | \ |
449 | 840 | for (i = 0; i < width; ++i) \ |
450 | 805 | { \ |
451 | 805 | convert_and_store_pixel ( \ |
452 | 805 | image, dest, i + x, PIXMAN_ ## format, values[i]); \ |
453 | 805 | } \ |
454 | 35 | } \ Unexecuted instantiation: pixman-access.c:store_scanline_a8r8g8b8 Unexecuted instantiation: pixman-access.c:store_scanline_x8r8g8b8 Unexecuted instantiation: pixman-access.c:store_scanline_a8b8g8r8 Unexecuted instantiation: pixman-access.c:store_scanline_x8b8g8r8 Unexecuted instantiation: pixman-access.c:store_scanline_b8g8r8a8 Unexecuted instantiation: pixman-access.c:store_scanline_b8g8r8x8 Unexecuted instantiation: pixman-access.c:store_scanline_r8g8b8a8 Unexecuted instantiation: pixman-access.c:store_scanline_r8g8b8x8 Unexecuted instantiation: pixman-access.c:store_scanline_x14r6g6b6 Unexecuted instantiation: pixman-access.c:store_scanline_r8g8b8 Unexecuted instantiation: pixman-access.c:store_scanline_b8g8r8 Unexecuted instantiation: pixman-access.c:store_scanline_r5g6b5 Unexecuted instantiation: pixman-access.c:store_scanline_b5g6r5 Unexecuted instantiation: pixman-access.c:store_scanline_a1r5g5b5 Unexecuted instantiation: pixman-access.c:store_scanline_x1r5g5b5 Unexecuted instantiation: pixman-access.c:store_scanline_a1b5g5r5 Unexecuted instantiation: pixman-access.c:store_scanline_x1b5g5r5 Unexecuted instantiation: pixman-access.c:store_scanline_a4r4g4b4 Unexecuted instantiation: pixman-access.c:store_scanline_x4r4g4b4 Unexecuted instantiation: pixman-access.c:store_scanline_a4b4g4r4 Unexecuted instantiation: pixman-access.c:store_scanline_x4b4g4r4 pixman-access.c:store_scanline_a8 Line | Count | Source | 444 | 35 | { \ | 445 | 35 | uint8_t *dest = \ | 446 | 35 | (uint8_t *)(image->bits + y * image->rowstride); \ | 447 | 35 | int i; \ | 448 | 35 | \ | 449 | 840 | for (i = 0; i < width; ++i) \ | 450 | 805 | { \ | 451 | 805 | convert_and_store_pixel ( \ | 452 | 805 | image, dest, i + x, PIXMAN_ ## format, values[i]); \ | 453 | 805 | } \ | 454 | 35 | } \ |
Unexecuted instantiation: pixman-access.c:store_scanline_r3g3b2 Unexecuted instantiation: pixman-access.c:store_scanline_b2g3r3 Unexecuted instantiation: pixman-access.c:store_scanline_a2r2g2b2 Unexecuted instantiation: pixman-access.c:store_scanline_a2b2g2r2 Unexecuted instantiation: pixman-access.c:store_scanline_c8 Unexecuted instantiation: pixman-access.c:store_scanline_g8 Unexecuted instantiation: pixman-access.c:store_scanline_x4a4 Unexecuted instantiation: pixman-access.c:store_scanline_a4 Unexecuted instantiation: pixman-access.c:store_scanline_r1g2b1 Unexecuted instantiation: pixman-access.c:store_scanline_b1g2r1 Unexecuted instantiation: pixman-access.c:store_scanline_a1r1g1b1 Unexecuted instantiation: pixman-access.c:store_scanline_a1b1g1r1 Unexecuted instantiation: pixman-access.c:store_scanline_c4 Unexecuted instantiation: pixman-access.c:store_scanline_g4 Unexecuted instantiation: pixman-access.c:store_scanline_a1 Unexecuted instantiation: pixman-access.c:store_scanline_g1 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a8r8g8b8 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x8r8g8b8 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a8b8g8r8 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x8b8g8r8 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_b8g8r8a8 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_b8g8r8x8 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_r8g8b8a8 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_r8g8b8x8 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x14r6g6b6 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_r8g8b8 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_b8g8r8 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_r5g6b5 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_b5g6r5 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a1r5g5b5 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x1r5g5b5 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a1b5g5r5 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x1b5g5r5 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a4r4g4b4 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x4r4g4b4 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a4b4g4r4 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x4b4g4r4 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a8 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_r3g3b2 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_b2g3r3 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a2r2g2b2 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a2b2g2r2 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_c8 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_g8 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x4a4 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a4 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_r1g2b1 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_b1g2r1 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a1r1g1b1 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a1b1g1r1 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_c4 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_g4 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a1 Unexecuted instantiation: pixman-access-accessors.c:store_scanline_g1 |
455 | | \ |
456 | | static uint32_t \ |
457 | | fetch_pixel_ ## format (bits_image_t *image, \ |
458 | | int offset, \ |
459 | | int line) \ |
460 | 0 | { \ |
461 | 0 | uint8_t *bits = \ |
462 | 0 | (uint8_t *)(image->bits + line * image->rowstride); \ |
463 | 0 | \ |
464 | 0 | return fetch_and_convert_pixel ( \ |
465 | 0 | image, bits, offset, PIXMAN_ ## format); \ |
466 | 0 | } \ Unexecuted instantiation: pixman-access.c:fetch_pixel_a8r8g8b8 Unexecuted instantiation: pixman-access.c:fetch_pixel_x8r8g8b8 Unexecuted instantiation: pixman-access.c:fetch_pixel_a8b8g8r8 Unexecuted instantiation: pixman-access.c:fetch_pixel_x8b8g8r8 Unexecuted instantiation: pixman-access.c:fetch_pixel_b8g8r8a8 Unexecuted instantiation: pixman-access.c:fetch_pixel_b8g8r8x8 Unexecuted instantiation: pixman-access.c:fetch_pixel_r8g8b8a8 Unexecuted instantiation: pixman-access.c:fetch_pixel_r8g8b8x8 Unexecuted instantiation: pixman-access.c:fetch_pixel_x14r6g6b6 Unexecuted instantiation: pixman-access.c:fetch_pixel_r8g8b8 Unexecuted instantiation: pixman-access.c:fetch_pixel_b8g8r8 Unexecuted instantiation: pixman-access.c:fetch_pixel_r5g6b5 Unexecuted instantiation: pixman-access.c:fetch_pixel_b5g6r5 Unexecuted instantiation: pixman-access.c:fetch_pixel_a1r5g5b5 Unexecuted instantiation: pixman-access.c:fetch_pixel_x1r5g5b5 Unexecuted instantiation: pixman-access.c:fetch_pixel_a1b5g5r5 Unexecuted instantiation: pixman-access.c:fetch_pixel_x1b5g5r5 Unexecuted instantiation: pixman-access.c:fetch_pixel_a4r4g4b4 Unexecuted instantiation: pixman-access.c:fetch_pixel_x4r4g4b4 Unexecuted instantiation: pixman-access.c:fetch_pixel_a4b4g4r4 Unexecuted instantiation: pixman-access.c:fetch_pixel_x4b4g4r4 Unexecuted instantiation: pixman-access.c:fetch_pixel_a8 Unexecuted instantiation: pixman-access.c:fetch_pixel_r3g3b2 Unexecuted instantiation: pixman-access.c:fetch_pixel_b2g3r3 Unexecuted instantiation: pixman-access.c:fetch_pixel_a2r2g2b2 Unexecuted instantiation: pixman-access.c:fetch_pixel_a2b2g2r2 Unexecuted instantiation: pixman-access.c:fetch_pixel_c8 Unexecuted instantiation: pixman-access.c:fetch_pixel_g8 Unexecuted instantiation: pixman-access.c:fetch_pixel_x4a4 Unexecuted instantiation: pixman-access.c:fetch_pixel_a4 Unexecuted instantiation: pixman-access.c:fetch_pixel_r1g2b1 Unexecuted instantiation: pixman-access.c:fetch_pixel_b1g2r1 Unexecuted instantiation: pixman-access.c:fetch_pixel_a1r1g1b1 Unexecuted instantiation: pixman-access.c:fetch_pixel_a1b1g1r1 Unexecuted instantiation: pixman-access.c:fetch_pixel_c4 Unexecuted instantiation: pixman-access.c:fetch_pixel_g4 Unexecuted instantiation: pixman-access.c:fetch_pixel_a1 Unexecuted instantiation: pixman-access.c:fetch_pixel_g1 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a8r8g8b8 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x8r8g8b8 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a8b8g8r8 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x8b8g8r8 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_b8g8r8a8 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_b8g8r8x8 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_r8g8b8a8 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_r8g8b8x8 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x14r6g6b6 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_r8g8b8 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_b8g8r8 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_r5g6b5 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_b5g6r5 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a1r5g5b5 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x1r5g5b5 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a1b5g5r5 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x1b5g5r5 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a4r4g4b4 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x4r4g4b4 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a4b4g4r4 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x4b4g4r4 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a8 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_r3g3b2 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_b2g3r3 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a2r2g2b2 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a2b2g2r2 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_c8 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_g8 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x4a4 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a4 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_r1g2b1 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_b1g2r1 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a1r1g1b1 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a1b1g1r1 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_c4 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_g4 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a1 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_g1 |
467 | | \ |
468 | | static const void *const __dummy__ ## format MAYBE_UNUSED |
469 | | |
470 | | MAKE_ACCESSORS(a8r8g8b8); |
471 | | MAKE_ACCESSORS(x8r8g8b8); |
472 | | MAKE_ACCESSORS(a8b8g8r8); |
473 | | MAKE_ACCESSORS(x8b8g8r8); |
474 | | MAKE_ACCESSORS(x14r6g6b6); |
475 | | MAKE_ACCESSORS(b8g8r8a8); |
476 | | MAKE_ACCESSORS(b8g8r8x8); |
477 | | MAKE_ACCESSORS(r8g8b8x8); |
478 | | MAKE_ACCESSORS(r8g8b8a8); |
479 | | MAKE_ACCESSORS(r8g8b8); |
480 | | MAKE_ACCESSORS(b8g8r8); |
481 | | MAKE_ACCESSORS(r5g6b5); |
482 | | MAKE_ACCESSORS(b5g6r5); |
483 | | MAKE_ACCESSORS(a1r5g5b5); |
484 | | MAKE_ACCESSORS(x1r5g5b5); |
485 | | MAKE_ACCESSORS(a1b5g5r5); |
486 | | MAKE_ACCESSORS(x1b5g5r5); |
487 | | MAKE_ACCESSORS(a4r4g4b4); |
488 | | MAKE_ACCESSORS(x4r4g4b4); |
489 | | MAKE_ACCESSORS(a4b4g4r4); |
490 | | MAKE_ACCESSORS(x4b4g4r4); |
491 | | MAKE_ACCESSORS(a8); |
492 | | MAKE_ACCESSORS(c8); |
493 | | MAKE_ACCESSORS(g8); |
494 | | MAKE_ACCESSORS(r3g3b2); |
495 | | MAKE_ACCESSORS(b2g3r3); |
496 | | MAKE_ACCESSORS(a2r2g2b2); |
497 | | MAKE_ACCESSORS(a2b2g2r2); |
498 | | MAKE_ACCESSORS(x4a4); |
499 | | MAKE_ACCESSORS(a4); |
500 | | MAKE_ACCESSORS(g4); |
501 | | MAKE_ACCESSORS(c4); |
502 | | MAKE_ACCESSORS(r1g2b1); |
503 | | MAKE_ACCESSORS(b1g2r1); |
504 | | MAKE_ACCESSORS(a1r1g1b1); |
505 | | MAKE_ACCESSORS(a1b1g1r1); |
506 | | MAKE_ACCESSORS(a1); |
507 | | MAKE_ACCESSORS(g1); |
508 | | |
509 | | /********************************** Fetch ************************************/ |
510 | | /* Table mapping sRGB-encoded 8 bit numbers to linearly encoded |
511 | | * floating point numbers. We assume that single precision |
512 | | * floating point follows the IEEE 754 format. |
513 | | */ |
514 | | static const uint32_t to_linear_u[256] = |
515 | | { |
516 | | 0x00000000, 0x399f22b4, 0x3a1f22b4, 0x3a6eb40e, 0x3a9f22b4, 0x3ac6eb61, |
517 | | 0x3aeeb40e, 0x3b0b3e5d, 0x3b1f22b4, 0x3b33070b, 0x3b46eb61, 0x3b5b518a, |
518 | | 0x3b70f18a, 0x3b83e1c5, 0x3b8fe614, 0x3b9c87fb, 0x3ba9c9b5, 0x3bb7ad6d, |
519 | | 0x3bc63547, 0x3bd5635f, 0x3be539bd, 0x3bf5ba70, 0x3c0373b5, 0x3c0c6152, |
520 | | 0x3c15a703, 0x3c1f45bc, 0x3c293e68, 0x3c3391f4, 0x3c3e4149, 0x3c494d43, |
521 | | 0x3c54b6c7, 0x3c607eb1, 0x3c6ca5df, 0x3c792d22, 0x3c830aa8, 0x3c89af9e, |
522 | | 0x3c9085db, 0x3c978dc5, 0x3c9ec7c0, 0x3ca63432, 0x3cadd37d, 0x3cb5a601, |
523 | | 0x3cbdac20, 0x3cc5e639, 0x3cce54ab, 0x3cd6f7d2, 0x3cdfd00e, 0x3ce8ddb9, |
524 | | 0x3cf2212c, 0x3cfb9ac1, 0x3d02a569, 0x3d0798dc, 0x3d0ca7e4, 0x3d11d2ae, |
525 | | 0x3d171963, 0x3d1c7c2e, 0x3d21fb3a, 0x3d2796af, 0x3d2d4ebb, 0x3d332380, |
526 | | 0x3d39152b, 0x3d3f23e3, 0x3d454fd0, 0x3d4b991c, 0x3d51ffeb, 0x3d588466, |
527 | | 0x3d5f26b7, 0x3d65e6fe, 0x3d6cc564, 0x3d73c210, 0x3d7add25, 0x3d810b65, |
528 | | 0x3d84b793, 0x3d88732e, 0x3d8c3e48, 0x3d9018f4, 0x3d940343, 0x3d97fd48, |
529 | | 0x3d9c0714, 0x3da020b9, 0x3da44a48, 0x3da883d6, 0x3daccd70, 0x3db12728, |
530 | | 0x3db59110, 0x3dba0b38, 0x3dbe95b2, 0x3dc3308f, 0x3dc7dbe0, 0x3dcc97b4, |
531 | | 0x3dd1641c, 0x3dd6412a, 0x3ddb2eec, 0x3de02d75, 0x3de53cd3, 0x3dea5d16, |
532 | | 0x3def8e52, 0x3df4d091, 0x3dfa23e5, 0x3dff885e, 0x3e027f06, 0x3e05427f, |
533 | | 0x3e080ea2, 0x3e0ae376, 0x3e0dc104, 0x3e10a752, 0x3e139669, 0x3e168e50, |
534 | | 0x3e198f0e, 0x3e1c98ab, 0x3e1fab2e, 0x3e22c6a0, 0x3e25eb08, 0x3e29186a, |
535 | | 0x3e2c4ed0, 0x3e2f8e42, 0x3e32d6c4, 0x3e362861, 0x3e39831e, 0x3e3ce702, |
536 | | 0x3e405416, 0x3e43ca5e, 0x3e4749e4, 0x3e4ad2ae, 0x3e4e64c2, 0x3e520027, |
537 | | 0x3e55a4e6, 0x3e595303, 0x3e5d0a8a, 0x3e60cb7c, 0x3e6495e0, 0x3e6869bf, |
538 | | 0x3e6c4720, 0x3e702e08, 0x3e741e7f, 0x3e78188c, 0x3e7c1c34, 0x3e8014c0, |
539 | | 0x3e822039, 0x3e84308b, 0x3e8645b8, 0x3e885fc3, 0x3e8a7eb0, 0x3e8ca281, |
540 | | 0x3e8ecb3a, 0x3e90f8df, 0x3e932b72, 0x3e9562f6, 0x3e979f6f, 0x3e99e0e0, |
541 | | 0x3e9c274e, 0x3e9e72b8, 0x3ea0c322, 0x3ea31892, 0x3ea57308, 0x3ea7d28a, |
542 | | 0x3eaa3718, 0x3eaca0b7, 0x3eaf0f69, 0x3eb18332, 0x3eb3fc16, 0x3eb67a15, |
543 | | 0x3eb8fd34, 0x3ebb8576, 0x3ebe12de, 0x3ec0a56e, 0x3ec33d2a, 0x3ec5da14, |
544 | | 0x3ec87c30, 0x3ecb2380, 0x3ecdd008, 0x3ed081ca, 0x3ed338c9, 0x3ed5f508, |
545 | | 0x3ed8b68a, 0x3edb7d52, 0x3ede4962, 0x3ee11abe, 0x3ee3f168, 0x3ee6cd64, |
546 | | 0x3ee9aeb6, 0x3eec955d, 0x3eef815d, 0x3ef272ba, 0x3ef56976, 0x3ef86594, |
547 | | 0x3efb6717, 0x3efe6e02, 0x3f00bd2b, 0x3f02460c, 0x3f03d1a5, 0x3f055ff8, |
548 | | 0x3f06f105, 0x3f0884ce, 0x3f0a1b54, 0x3f0bb499, 0x3f0d509f, 0x3f0eef65, |
549 | | 0x3f1090ef, 0x3f12353c, 0x3f13dc50, 0x3f15862a, 0x3f1732cc, 0x3f18e237, |
550 | | 0x3f1a946d, 0x3f1c4970, 0x3f1e013f, 0x3f1fbbde, 0x3f21794c, 0x3f23398c, |
551 | | 0x3f24fca0, 0x3f26c286, 0x3f288b42, 0x3f2a56d3, 0x3f2c253d, 0x3f2df680, |
552 | | 0x3f2fca9d, 0x3f31a195, 0x3f337b6a, 0x3f35581e, 0x3f3737b1, 0x3f391a24, |
553 | | 0x3f3aff7a, 0x3f3ce7b2, 0x3f3ed2d0, 0x3f40c0d2, 0x3f42b1bc, 0x3f44a58e, |
554 | | 0x3f469c49, 0x3f4895ee, 0x3f4a9280, 0x3f4c91ff, 0x3f4e946c, 0x3f5099c8, |
555 | | 0x3f52a216, 0x3f54ad55, 0x3f56bb88, 0x3f58ccae, 0x3f5ae0cb, 0x3f5cf7de, |
556 | | 0x3f5f11ec, 0x3f612ef0, 0x3f634eef, 0x3f6571ea, 0x3f6797e1, 0x3f69c0d6, |
557 | | 0x3f6beccb, 0x3f6e1bc0, 0x3f704db6, 0x3f7282af, 0x3f74baac, 0x3f76f5ae, |
558 | | 0x3f7933b6, 0x3f7b74c6, 0x3f7db8de, 0x3f800000 |
559 | | }; |
560 | | |
561 | | static const float * const to_linear = (const float *)to_linear_u; |
562 | | |
563 | | static uint8_t |
564 | | to_srgb (float f) |
565 | 0 | { |
566 | 0 | uint8_t low = 0; |
567 | 0 | uint8_t high = 255; |
568 | |
|
569 | 0 | while (high - low > 1) |
570 | 0 | { |
571 | 0 | uint8_t mid = (low + high) / 2; |
572 | |
|
573 | 0 | if (to_linear[mid] > f) |
574 | 0 | high = mid; |
575 | 0 | else |
576 | 0 | low = mid; |
577 | 0 | } |
578 | |
|
579 | 0 | if (to_linear[high] - f < f - to_linear[low]) |
580 | 0 | return high; |
581 | 0 | else |
582 | 0 | return low; |
583 | 0 | } Unexecuted instantiation: pixman-access.c:to_srgb Unexecuted instantiation: pixman-access-accessors.c:to_srgb |
584 | | |
585 | | static void |
586 | | fetch_scanline_a8r8g8b8_sRGB_float (bits_image_t * image, |
587 | | int x, |
588 | | int y, |
589 | | int width, |
590 | | uint32_t * b, |
591 | | const uint32_t *mask) |
592 | 0 | { |
593 | 0 | const uint32_t *bits = image->bits + y * image->rowstride; |
594 | 0 | const uint32_t *pixel = bits + x; |
595 | 0 | const uint32_t *end = pixel + width; |
596 | 0 | argb_t *buffer = (argb_t *)b; |
597 | |
|
598 | 0 | while (pixel < end) |
599 | 0 | { |
600 | 0 | uint32_t p = READ (image, pixel++); |
601 | 0 | argb_t *argb = buffer; |
602 | |
|
603 | 0 | argb->a = pixman_unorm_to_float ((p >> 24) & 0xff, 8); |
604 | |
|
605 | 0 | argb->r = to_linear [(p >> 16) & 0xff]; |
606 | 0 | argb->g = to_linear [(p >> 8) & 0xff]; |
607 | 0 | argb->b = to_linear [(p >> 0) & 0xff]; |
608 | |
|
609 | 0 | buffer++; |
610 | 0 | } |
611 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_scanline_a8r8g8b8_sRGB_float Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a8r8g8b8_sRGB_float |
612 | | |
613 | | static void |
614 | | fetch_scanline_r8g8b8_sRGB_float (bits_image_t * image, |
615 | | int x, |
616 | | int y, |
617 | | int width, |
618 | | uint32_t * b, |
619 | | const uint32_t *mask) |
620 | 0 | { |
621 | 0 | const uint8_t *bits = (uint8_t *)(image->bits + y * image->rowstride); |
622 | 0 | argb_t *buffer = (argb_t *)b; |
623 | 0 | int i; |
624 | 0 | for (i = x; i < width; ++i) |
625 | 0 | { |
626 | 0 | uint32_t p = FETCH_24 (image, bits, i); |
627 | 0 | argb_t *argb = buffer; |
628 | |
|
629 | 0 | argb->a = 1.0f; |
630 | |
|
631 | 0 | argb->r = to_linear[(p >> 16) & 0xff]; |
632 | 0 | argb->g = to_linear[(p >> 8) & 0xff]; |
633 | 0 | argb->b = to_linear[(p >> 0) & 0xff]; |
634 | |
|
635 | 0 | buffer++; |
636 | 0 | } |
637 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_scanline_r8g8b8_sRGB_float Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_r8g8b8_sRGB_float |
638 | | |
639 | | /* Expects a float buffer */ |
640 | | static void |
641 | | fetch_scanline_a2r10g10b10_float (bits_image_t * image, |
642 | | int x, |
643 | | int y, |
644 | | int width, |
645 | | uint32_t * b, |
646 | | const uint32_t *mask) |
647 | 0 | { |
648 | 0 | const uint32_t *bits = image->bits + y * image->rowstride; |
649 | 0 | const uint32_t *pixel = bits + x; |
650 | 0 | const uint32_t *end = pixel + width; |
651 | 0 | argb_t *buffer = (argb_t *)b; |
652 | |
|
653 | 0 | while (pixel < end) |
654 | 0 | { |
655 | 0 | uint32_t p = READ (image, pixel++); |
656 | 0 | uint64_t a = p >> 30; |
657 | 0 | uint64_t r = (p >> 20) & 0x3ff; |
658 | 0 | uint64_t g = (p >> 10) & 0x3ff; |
659 | 0 | uint64_t b = p & 0x3ff; |
660 | |
|
661 | 0 | buffer->a = pixman_unorm_to_float (a, 2); |
662 | 0 | buffer->r = pixman_unorm_to_float (r, 10); |
663 | 0 | buffer->g = pixman_unorm_to_float (g, 10); |
664 | 0 | buffer->b = pixman_unorm_to_float (b, 10); |
665 | |
|
666 | 0 | buffer++; |
667 | 0 | } |
668 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_scanline_a2r10g10b10_float Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a2r10g10b10_float |
669 | | |
670 | | /* Expects a float buffer */ |
671 | | #ifndef PIXMAN_FB_ACCESSORS |
672 | | static void |
673 | | fetch_scanline_rgbf_float (bits_image_t *image, |
674 | | int x, |
675 | | int y, |
676 | | int width, |
677 | | uint32_t * b, |
678 | | const uint32_t *mask) |
679 | 0 | { |
680 | 0 | const float *bits = (float *)image->bits + y * image->rowstride; |
681 | 0 | const float *pixel = bits + x * 3; |
682 | 0 | argb_t *buffer = (argb_t *)b; |
683 | |
|
684 | 0 | for (; width--; buffer++) { |
685 | 0 | buffer->r = *pixel++; |
686 | 0 | buffer->g = *pixel++; |
687 | 0 | buffer->b = *pixel++; |
688 | 0 | buffer->a = 1.f; |
689 | 0 | } |
690 | 0 | } |
691 | | |
692 | | static void |
693 | | fetch_scanline_rgbaf_float (bits_image_t *image, |
694 | | int x, |
695 | | int y, |
696 | | int width, |
697 | | uint32_t * b, |
698 | | const uint32_t *mask) |
699 | 0 | { |
700 | 0 | const float *bits = (float *)image->bits + y * image->rowstride; |
701 | 0 | const float *pixel = bits + x * 4; |
702 | 0 | argb_t *buffer = (argb_t *)b; |
703 | |
|
704 | 0 | for (; width--; buffer++) { |
705 | 0 | buffer->r = *pixel++; |
706 | 0 | buffer->g = *pixel++; |
707 | 0 | buffer->b = *pixel++; |
708 | 0 | buffer->a = *pixel++; |
709 | 0 | } |
710 | 0 | } |
711 | | #endif |
712 | | |
713 | | static void |
714 | | fetch_scanline_x2r10g10b10_float (bits_image_t *image, |
715 | | int x, |
716 | | int y, |
717 | | int width, |
718 | | uint32_t * b, |
719 | | const uint32_t *mask) |
720 | 0 | { |
721 | 0 | const uint32_t *bits = image->bits + y * image->rowstride; |
722 | 0 | const uint32_t *pixel = (uint32_t *)bits + x; |
723 | 0 | const uint32_t *end = pixel + width; |
724 | 0 | argb_t *buffer = (argb_t *)b; |
725 | |
|
726 | 0 | while (pixel < end) |
727 | 0 | { |
728 | 0 | uint32_t p = READ (image, pixel++); |
729 | 0 | uint64_t r = (p >> 20) & 0x3ff; |
730 | 0 | uint64_t g = (p >> 10) & 0x3ff; |
731 | 0 | uint64_t b = p & 0x3ff; |
732 | |
|
733 | 0 | buffer->a = 1.0; |
734 | 0 | buffer->r = pixman_unorm_to_float (r, 10); |
735 | 0 | buffer->g = pixman_unorm_to_float (g, 10); |
736 | 0 | buffer->b = pixman_unorm_to_float (b, 10); |
737 | |
|
738 | 0 | buffer++; |
739 | 0 | } |
740 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_scanline_x2r10g10b10_float Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x2r10g10b10_float |
741 | | |
742 | | /* Expects a float buffer */ |
743 | | static void |
744 | | fetch_scanline_a2b10g10r10_float (bits_image_t *image, |
745 | | int x, |
746 | | int y, |
747 | | int width, |
748 | | uint32_t * b, |
749 | | const uint32_t *mask) |
750 | 0 | { |
751 | 0 | const uint32_t *bits = image->bits + y * image->rowstride; |
752 | 0 | const uint32_t *pixel = bits + x; |
753 | 0 | const uint32_t *end = pixel + width; |
754 | 0 | argb_t *buffer = (argb_t *)b; |
755 | |
|
756 | 0 | while (pixel < end) |
757 | 0 | { |
758 | 0 | uint32_t p = READ (image, pixel++); |
759 | 0 | uint64_t a = p >> 30; |
760 | 0 | uint64_t b = (p >> 20) & 0x3ff; |
761 | 0 | uint64_t g = (p >> 10) & 0x3ff; |
762 | 0 | uint64_t r = p & 0x3ff; |
763 | |
|
764 | 0 | buffer->a = pixman_unorm_to_float (a, 2); |
765 | 0 | buffer->r = pixman_unorm_to_float (r, 10); |
766 | 0 | buffer->g = pixman_unorm_to_float (g, 10); |
767 | 0 | buffer->b = pixman_unorm_to_float (b, 10); |
768 | |
|
769 | 0 | buffer++; |
770 | 0 | } |
771 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_scanline_a2b10g10r10_float Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a2b10g10r10_float |
772 | | |
773 | | /* Expects a float buffer */ |
774 | | static void |
775 | | fetch_scanline_x2b10g10r10_float (bits_image_t *image, |
776 | | int x, |
777 | | int y, |
778 | | int width, |
779 | | uint32_t * b, |
780 | | const uint32_t *mask) |
781 | 0 | { |
782 | 0 | const uint32_t *bits = image->bits + y * image->rowstride; |
783 | 0 | const uint32_t *pixel = (uint32_t *)bits + x; |
784 | 0 | const uint32_t *end = pixel + width; |
785 | 0 | argb_t *buffer = (argb_t *)b; |
786 | |
|
787 | 0 | while (pixel < end) |
788 | 0 | { |
789 | 0 | uint32_t p = READ (image, pixel++); |
790 | 0 | uint64_t b = (p >> 20) & 0x3ff; |
791 | 0 | uint64_t g = (p >> 10) & 0x3ff; |
792 | 0 | uint64_t r = p & 0x3ff; |
793 | |
|
794 | 0 | buffer->a = 1.0; |
795 | 0 | buffer->r = pixman_unorm_to_float (r, 10); |
796 | 0 | buffer->g = pixman_unorm_to_float (g, 10); |
797 | 0 | buffer->b = pixman_unorm_to_float (b, 10); |
798 | |
|
799 | 0 | buffer++; |
800 | 0 | } |
801 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_scanline_x2b10g10r10_float Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_x2b10g10r10_float |
802 | | |
803 | | static void |
804 | | fetch_scanline_yuy2 (bits_image_t *image, |
805 | | int x, |
806 | | int line, |
807 | | int width, |
808 | | uint32_t * buffer, |
809 | | const uint32_t *mask) |
810 | 0 | { |
811 | 0 | const uint32_t *bits = image->bits + image->rowstride * line; |
812 | 0 | int i; |
813 | | |
814 | 0 | for (i = 0; i < width; i++) |
815 | 0 | { |
816 | 0 | int16_t y, u, v; |
817 | 0 | int32_t r, g, b; |
818 | | |
819 | 0 | y = ((uint8_t *) bits)[(x + i) << 1] - 16; |
820 | 0 | u = ((uint8_t *) bits)[(((x + i) << 1) & - 4) + 1] - 128; |
821 | 0 | v = ((uint8_t *) bits)[(((x + i) << 1) & - 4) + 3] - 128; |
822 | | |
823 | | /* R = 1.164(Y - 16) + 1.596(V - 128) */ |
824 | 0 | r = 0x012b27 * y + 0x019a2e * v; |
825 | | /* G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128) */ |
826 | 0 | g = 0x012b27 * y - 0x00d0f2 * v - 0x00647e * u; |
827 | | /* B = 1.164(Y - 16) + 2.018(U - 128) */ |
828 | 0 | b = 0x012b27 * y + 0x0206a2 * u; |
829 | | |
830 | 0 | *buffer++ = 0xff000000 | |
831 | 0 | (r >= 0 ? r < 0x1000000 ? r & 0xff0000 : 0xff0000 : 0) | |
832 | 0 | (g >= 0 ? g < 0x1000000 ? (g >> 8) & 0x00ff00 : 0x00ff00 : 0) | |
833 | 0 | (b >= 0 ? b < 0x1000000 ? (b >> 16) & 0x0000ff : 0x0000ff : 0); |
834 | 0 | } |
835 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_scanline_yuy2 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_yuy2 |
836 | | |
837 | | static void |
838 | | fetch_scanline_yv12 (bits_image_t *image, |
839 | | int x, |
840 | | int line, |
841 | | int width, |
842 | | uint32_t * buffer, |
843 | | const uint32_t *mask) |
844 | 0 | { |
845 | 0 | YV12_SETUP (image); |
846 | 0 | uint8_t *y_line = YV12_Y (line); |
847 | 0 | uint8_t *u_line = YV12_U (line); |
848 | 0 | uint8_t *v_line = YV12_V (line); |
849 | 0 | int i; |
850 | | |
851 | 0 | for (i = 0; i < width; i++) |
852 | 0 | { |
853 | 0 | int16_t y, u, v; |
854 | 0 | int32_t r, g, b; |
855 | |
|
856 | 0 | y = y_line[x + i] - 16; |
857 | 0 | u = u_line[(x + i) >> 1] - 128; |
858 | 0 | v = v_line[(x + i) >> 1] - 128; |
859 | | |
860 | | /* R = 1.164(Y - 16) + 1.596(V - 128) */ |
861 | 0 | r = 0x012b27 * y + 0x019a2e * v; |
862 | | /* G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128) */ |
863 | 0 | g = 0x012b27 * y - 0x00d0f2 * v - 0x00647e * u; |
864 | | /* B = 1.164(Y - 16) + 2.018(U - 128) */ |
865 | 0 | b = 0x012b27 * y + 0x0206a2 * u; |
866 | |
|
867 | 0 | *buffer++ = 0xff000000 | |
868 | 0 | (r >= 0 ? r < 0x1000000 ? r & 0xff0000 : 0xff0000 : 0) | |
869 | 0 | (g >= 0 ? g < 0x1000000 ? (g >> 8) & 0x00ff00 : 0x00ff00 : 0) | |
870 | 0 | (b >= 0 ? b < 0x1000000 ? (b >> 16) & 0x0000ff : 0x0000ff : 0); |
871 | 0 | } |
872 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_scanline_yv12 Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_yv12 |
873 | | |
874 | | /**************************** Pixel wise fetching *****************************/ |
875 | | |
876 | | #ifndef PIXMAN_FB_ACCESSORS |
877 | | static argb_t |
878 | | fetch_pixel_rgbf_float (bits_image_t *image, |
879 | | int offset, |
880 | | int line) |
881 | 0 | { |
882 | 0 | float *bits = (float *)image->bits + line * image->rowstride; |
883 | 0 | argb_t argb; |
884 | |
|
885 | 0 | argb.r = bits[offset * 3]; |
886 | 0 | argb.g = bits[offset * 3 + 1]; |
887 | 0 | argb.b = bits[offset * 3 + 2]; |
888 | 0 | argb.a = 1.f; |
889 | |
|
890 | 0 | return argb; |
891 | 0 | } |
892 | | |
893 | | static argb_t |
894 | | fetch_pixel_rgbaf_float (bits_image_t *image, |
895 | | int offset, |
896 | | int line) |
897 | 0 | { |
898 | 0 | float *bits = (float *)image->bits + line * image->rowstride; |
899 | 0 | argb_t argb; |
900 | |
|
901 | 0 | argb.r = bits[offset * 4]; |
902 | 0 | argb.g = bits[offset * 4 + 1]; |
903 | 0 | argb.b = bits[offset * 4 + 2]; |
904 | 0 | argb.a = bits[offset * 4 + 3]; |
905 | |
|
906 | 0 | return argb; |
907 | 0 | } |
908 | | #endif |
909 | | |
910 | | static argb_t |
911 | | fetch_pixel_x2r10g10b10_float (bits_image_t *image, |
912 | | int offset, |
913 | | int line) |
914 | 0 | { |
915 | 0 | uint32_t *bits = image->bits + line * image->rowstride; |
916 | 0 | uint32_t p = READ (image, bits + offset); |
917 | 0 | uint64_t r = (p >> 20) & 0x3ff; |
918 | 0 | uint64_t g = (p >> 10) & 0x3ff; |
919 | 0 | uint64_t b = p & 0x3ff; |
920 | 0 | argb_t argb; |
921 | |
|
922 | 0 | argb.a = 1.0; |
923 | 0 | argb.r = pixman_unorm_to_float (r, 10); |
924 | 0 | argb.g = pixman_unorm_to_float (g, 10); |
925 | 0 | argb.b = pixman_unorm_to_float (b, 10); |
926 | |
|
927 | 0 | return argb; |
928 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_pixel_x2r10g10b10_float Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x2r10g10b10_float |
929 | | |
930 | | static argb_t |
931 | | fetch_pixel_a2r10g10b10_float (bits_image_t *image, |
932 | | int offset, |
933 | | int line) |
934 | 0 | { |
935 | 0 | uint32_t *bits = image->bits + line * image->rowstride; |
936 | 0 | uint32_t p = READ (image, bits + offset); |
937 | 0 | uint64_t a = p >> 30; |
938 | 0 | uint64_t r = (p >> 20) & 0x3ff; |
939 | 0 | uint64_t g = (p >> 10) & 0x3ff; |
940 | 0 | uint64_t b = p & 0x3ff; |
941 | 0 | argb_t argb; |
942 | |
|
943 | 0 | argb.a = pixman_unorm_to_float (a, 2); |
944 | 0 | argb.r = pixman_unorm_to_float (r, 10); |
945 | 0 | argb.g = pixman_unorm_to_float (g, 10); |
946 | 0 | argb.b = pixman_unorm_to_float (b, 10); |
947 | |
|
948 | 0 | return argb; |
949 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_pixel_a2r10g10b10_float Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a2r10g10b10_float |
950 | | |
951 | | static argb_t |
952 | | fetch_pixel_a2b10g10r10_float (bits_image_t *image, |
953 | | int offset, |
954 | | int line) |
955 | 0 | { |
956 | 0 | uint32_t *bits = image->bits + line * image->rowstride; |
957 | 0 | uint32_t p = READ (image, bits + offset); |
958 | 0 | uint64_t a = p >> 30; |
959 | 0 | uint64_t b = (p >> 20) & 0x3ff; |
960 | 0 | uint64_t g = (p >> 10) & 0x3ff; |
961 | 0 | uint64_t r = p & 0x3ff; |
962 | 0 | argb_t argb; |
963 | |
|
964 | 0 | argb.a = pixman_unorm_to_float (a, 2); |
965 | 0 | argb.r = pixman_unorm_to_float (r, 10); |
966 | 0 | argb.g = pixman_unorm_to_float (g, 10); |
967 | 0 | argb.b = pixman_unorm_to_float (b, 10); |
968 | |
|
969 | 0 | return argb; |
970 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_pixel_a2b10g10r10_float Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a2b10g10r10_float |
971 | | |
972 | | static argb_t |
973 | | fetch_pixel_x2b10g10r10_float (bits_image_t *image, |
974 | | int offset, |
975 | | int line) |
976 | 0 | { |
977 | 0 | uint32_t *bits = image->bits + line * image->rowstride; |
978 | 0 | uint32_t p = READ (image, bits + offset); |
979 | 0 | uint64_t b = (p >> 20) & 0x3ff; |
980 | 0 | uint64_t g = (p >> 10) & 0x3ff; |
981 | 0 | uint64_t r = p & 0x3ff; |
982 | 0 | argb_t argb; |
983 | |
|
984 | 0 | argb.a = 1.0; |
985 | 0 | argb.r = pixman_unorm_to_float (r, 10); |
986 | 0 | argb.g = pixman_unorm_to_float (g, 10); |
987 | 0 | argb.b = pixman_unorm_to_float (b, 10); |
988 | |
|
989 | 0 | return argb; |
990 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_pixel_x2b10g10r10_float Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_x2b10g10r10_float |
991 | | |
992 | | static argb_t |
993 | | fetch_pixel_a8r8g8b8_sRGB_float (bits_image_t *image, |
994 | | int offset, |
995 | | int line) |
996 | 0 | { |
997 | 0 | uint32_t *bits = image->bits + line * image->rowstride; |
998 | 0 | uint32_t p = READ (image, bits + offset); |
999 | 0 | argb_t argb; |
1000 | |
|
1001 | 0 | argb.a = pixman_unorm_to_float ((p >> 24) & 0xff, 8); |
1002 | |
|
1003 | 0 | argb.r = to_linear [(p >> 16) & 0xff]; |
1004 | 0 | argb.g = to_linear [(p >> 8) & 0xff]; |
1005 | 0 | argb.b = to_linear [(p >> 0) & 0xff]; |
1006 | |
|
1007 | 0 | return argb; |
1008 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_pixel_a8r8g8b8_sRGB_float Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a8r8g8b8_sRGB_float |
1009 | | |
1010 | | static argb_t |
1011 | | fetch_pixel_r8g8b8_sRGB_float (bits_image_t *image, |
1012 | | int offset, |
1013 | | int line) |
1014 | 0 | { |
1015 | 0 | uint8_t *bits = (uint8_t *)(image->bits + line * image->rowstride); |
1016 | 0 | uint32_t p = FETCH_24 (image, bits, offset); |
1017 | 0 | argb_t argb; |
1018 | |
|
1019 | 0 | argb.a = 1.0f; |
1020 | |
|
1021 | 0 | argb.r = to_linear[(p >> 16) & 0xff]; |
1022 | 0 | argb.g = to_linear[(p >> 8) & 0xff]; |
1023 | 0 | argb.b = to_linear[(p >> 0) & 0xff]; |
1024 | |
|
1025 | 0 | return argb; |
1026 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_pixel_r8g8b8_sRGB_float Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_r8g8b8_sRGB_float |
1027 | | |
1028 | | static uint32_t |
1029 | | fetch_pixel_yuy2 (bits_image_t *image, |
1030 | | int offset, |
1031 | | int line) |
1032 | 0 | { |
1033 | 0 | const uint32_t *bits = image->bits + image->rowstride * line; |
1034 | | |
1035 | 0 | int16_t y, u, v; |
1036 | 0 | int32_t r, g, b; |
1037 | | |
1038 | 0 | y = ((uint8_t *) bits)[offset << 1] - 16; |
1039 | 0 | u = ((uint8_t *) bits)[((offset << 1) & - 4) + 1] - 128; |
1040 | 0 | v = ((uint8_t *) bits)[((offset << 1) & - 4) + 3] - 128; |
1041 | | |
1042 | | /* R = 1.164(Y - 16) + 1.596(V - 128) */ |
1043 | 0 | r = 0x012b27 * y + 0x019a2e * v; |
1044 | | |
1045 | | /* G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128) */ |
1046 | 0 | g = 0x012b27 * y - 0x00d0f2 * v - 0x00647e * u; |
1047 | | |
1048 | | /* B = 1.164(Y - 16) + 2.018(U - 128) */ |
1049 | 0 | b = 0x012b27 * y + 0x0206a2 * u; |
1050 | | |
1051 | 0 | return 0xff000000 | |
1052 | 0 | (r >= 0 ? r < 0x1000000 ? r & 0xff0000 : 0xff0000 : 0) | |
1053 | 0 | (g >= 0 ? g < 0x1000000 ? (g >> 8) & 0x00ff00 : 0x00ff00 : 0) | |
1054 | 0 | (b >= 0 ? b < 0x1000000 ? (b >> 16) & 0x0000ff : 0x0000ff : 0); |
1055 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_pixel_yuy2 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_yuy2 |
1056 | | |
1057 | | static uint32_t |
1058 | | fetch_pixel_yv12 (bits_image_t *image, |
1059 | | int offset, |
1060 | | int line) |
1061 | 0 | { |
1062 | 0 | YV12_SETUP (image); |
1063 | 0 | int16_t y = YV12_Y (line)[offset] - 16; |
1064 | 0 | int16_t u = YV12_U (line)[offset >> 1] - 128; |
1065 | 0 | int16_t v = YV12_V (line)[offset >> 1] - 128; |
1066 | 0 | int32_t r, g, b; |
1067 | | |
1068 | | /* R = 1.164(Y - 16) + 1.596(V - 128) */ |
1069 | 0 | r = 0x012b27 * y + 0x019a2e * v; |
1070 | | |
1071 | | /* G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128) */ |
1072 | 0 | g = 0x012b27 * y - 0x00d0f2 * v - 0x00647e * u; |
1073 | | |
1074 | | /* B = 1.164(Y - 16) + 2.018(U - 128) */ |
1075 | 0 | b = 0x012b27 * y + 0x0206a2 * u; |
1076 | | |
1077 | 0 | return 0xff000000 | |
1078 | 0 | (r >= 0 ? r < 0x1000000 ? r & 0xff0000 : 0xff0000 : 0) | |
1079 | 0 | (g >= 0 ? g < 0x1000000 ? (g >> 8) & 0x00ff00 : 0x00ff00 : 0) | |
1080 | 0 | (b >= 0 ? b < 0x1000000 ? (b >> 16) & 0x0000ff : 0x0000ff : 0); |
1081 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_pixel_yv12 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_yv12 |
1082 | | |
1083 | | /*********************************** Store ************************************/ |
1084 | | |
1085 | | #ifndef PIXMAN_FB_ACCESSORS |
1086 | | static void |
1087 | | store_scanline_rgbaf_float (bits_image_t * image, |
1088 | | int x, |
1089 | | int y, |
1090 | | int width, |
1091 | | const uint32_t *v) |
1092 | 0 | { |
1093 | 0 | float *bits = (float *)image->bits + image->rowstride * y + 4 * x; |
1094 | 0 | const argb_t *values = (argb_t *)v; |
1095 | |
|
1096 | 0 | for (; width; width--, values++) |
1097 | 0 | { |
1098 | 0 | *bits++ = values->r; |
1099 | 0 | *bits++ = values->g; |
1100 | 0 | *bits++ = values->b; |
1101 | 0 | *bits++ = values->a; |
1102 | 0 | } |
1103 | 0 | } |
1104 | | |
1105 | | static void |
1106 | | store_scanline_rgbf_float (bits_image_t * image, |
1107 | | int x, |
1108 | | int y, |
1109 | | int width, |
1110 | | const uint32_t *v) |
1111 | 0 | { |
1112 | 0 | float *bits = (float *)image->bits + image->rowstride * y + 3 * x; |
1113 | 0 | const argb_t *values = (argb_t *)v; |
1114 | |
|
1115 | 0 | for (; width; width--, values++) |
1116 | 0 | { |
1117 | 0 | *bits++ = values->r; |
1118 | 0 | *bits++ = values->g; |
1119 | 0 | *bits++ = values->b; |
1120 | 0 | } |
1121 | 0 | } |
1122 | | #endif |
1123 | | |
1124 | | static void |
1125 | | store_scanline_a2r10g10b10_float (bits_image_t * image, |
1126 | | int x, |
1127 | | int y, |
1128 | | int width, |
1129 | | const uint32_t *v) |
1130 | 0 | { |
1131 | 0 | uint32_t *bits = image->bits + image->rowstride * y; |
1132 | 0 | uint32_t *pixel = bits + x; |
1133 | 0 | argb_t *values = (argb_t *)v; |
1134 | 0 | int i; |
1135 | |
|
1136 | 0 | for (i = 0; i < width; ++i) |
1137 | 0 | { |
1138 | 0 | uint32_t a, r, g, b; |
1139 | |
|
1140 | 0 | a = pixman_float_to_unorm (values[i].a, 2); |
1141 | 0 | r = pixman_float_to_unorm (values[i].r, 10); |
1142 | 0 | g = pixman_float_to_unorm (values[i].g, 10); |
1143 | 0 | b = pixman_float_to_unorm (values[i].b, 10); |
1144 | |
|
1145 | 0 | WRITE (image, pixel++, |
1146 | 0 | (a << 30) | (r << 20) | (g << 10) | b); |
1147 | 0 | } |
1148 | 0 | } Unexecuted instantiation: pixman-access.c:store_scanline_a2r10g10b10_float Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a2r10g10b10_float |
1149 | | |
1150 | | static void |
1151 | | store_scanline_x2r10g10b10_float (bits_image_t * image, |
1152 | | int x, |
1153 | | int y, |
1154 | | int width, |
1155 | | const uint32_t *v) |
1156 | 0 | { |
1157 | 0 | uint32_t *bits = image->bits + image->rowstride * y; |
1158 | 0 | uint32_t *pixel = bits + x; |
1159 | 0 | argb_t *values = (argb_t *)v; |
1160 | 0 | int i; |
1161 | |
|
1162 | 0 | for (i = 0; i < width; ++i) |
1163 | 0 | { |
1164 | 0 | uint32_t r, g, b; |
1165 | |
|
1166 | 0 | r = pixman_float_to_unorm (values[i].r, 10); |
1167 | 0 | g = pixman_float_to_unorm (values[i].g, 10); |
1168 | 0 | b = pixman_float_to_unorm (values[i].b, 10); |
1169 | |
|
1170 | 0 | WRITE (image, pixel++, |
1171 | 0 | (r << 20) | (g << 10) | b); |
1172 | 0 | } |
1173 | 0 | } Unexecuted instantiation: pixman-access.c:store_scanline_x2r10g10b10_float Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x2r10g10b10_float |
1174 | | |
1175 | | static void |
1176 | | store_scanline_a2b10g10r10_float (bits_image_t * image, |
1177 | | int x, |
1178 | | int y, |
1179 | | int width, |
1180 | | const uint32_t *v) |
1181 | 0 | { |
1182 | 0 | uint32_t *bits = image->bits + image->rowstride * y; |
1183 | 0 | uint32_t *pixel = bits + x; |
1184 | 0 | argb_t *values = (argb_t *)v; |
1185 | 0 | int i; |
1186 | |
|
1187 | 0 | for (i = 0; i < width; ++i) |
1188 | 0 | { |
1189 | 0 | uint32_t a, r, g, b; |
1190 | |
|
1191 | 0 | a = pixman_float_to_unorm (values[i].a, 2); |
1192 | 0 | r = pixman_float_to_unorm (values[i].r, 10); |
1193 | 0 | g = pixman_float_to_unorm (values[i].g, 10); |
1194 | 0 | b = pixman_float_to_unorm (values[i].b, 10); |
1195 | |
|
1196 | 0 | WRITE (image, pixel++, |
1197 | 0 | (a << 30) | (b << 20) | (g << 10) | r); |
1198 | 0 | } |
1199 | 0 | } Unexecuted instantiation: pixman-access.c:store_scanline_a2b10g10r10_float Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a2b10g10r10_float |
1200 | | |
1201 | | static void |
1202 | | store_scanline_x2b10g10r10_float (bits_image_t * image, |
1203 | | int x, |
1204 | | int y, |
1205 | | int width, |
1206 | | const uint32_t *v) |
1207 | 0 | { |
1208 | 0 | uint32_t *bits = image->bits + image->rowstride * y; |
1209 | 0 | uint32_t *pixel = bits + x; |
1210 | 0 | argb_t *values = (argb_t *)v; |
1211 | 0 | int i; |
1212 | |
|
1213 | 0 | for (i = 0; i < width; ++i) |
1214 | 0 | { |
1215 | 0 | uint32_t r, g, b; |
1216 | |
|
1217 | 0 | r = pixman_float_to_unorm (values[i].r, 10); |
1218 | 0 | g = pixman_float_to_unorm (values[i].g, 10); |
1219 | 0 | b = pixman_float_to_unorm (values[i].b, 10); |
1220 | |
|
1221 | 0 | WRITE (image, pixel++, |
1222 | 0 | (b << 20) | (g << 10) | r); |
1223 | 0 | } |
1224 | 0 | } Unexecuted instantiation: pixman-access.c:store_scanline_x2b10g10r10_float Unexecuted instantiation: pixman-access-accessors.c:store_scanline_x2b10g10r10_float |
1225 | | |
1226 | | static void |
1227 | | store_scanline_a8r8g8b8_sRGB_float (bits_image_t * image, |
1228 | | int x, |
1229 | | int y, |
1230 | | int width, |
1231 | | const uint32_t *v) |
1232 | 0 | { |
1233 | 0 | uint32_t *bits = image->bits + image->rowstride * y; |
1234 | 0 | uint32_t *pixel = bits + x; |
1235 | 0 | argb_t *values = (argb_t *)v; |
1236 | 0 | int i; |
1237 | |
|
1238 | 0 | for (i = 0; i < width; ++i) |
1239 | 0 | { |
1240 | 0 | uint32_t a, r, g, b; |
1241 | |
|
1242 | 0 | a = pixman_float_to_unorm (values[i].a, 8); |
1243 | 0 | r = to_srgb (values[i].r); |
1244 | 0 | g = to_srgb (values[i].g); |
1245 | 0 | b = to_srgb (values[i].b); |
1246 | |
|
1247 | 0 | WRITE (image, pixel++, |
1248 | 0 | (a << 24) | (r << 16) | (g << 8) | b); |
1249 | 0 | } |
1250 | 0 | } Unexecuted instantiation: pixman-access.c:store_scanline_a8r8g8b8_sRGB_float Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a8r8g8b8_sRGB_float |
1251 | | |
1252 | | static void |
1253 | | store_scanline_r8g8b8_sRGB_float (bits_image_t * image, |
1254 | | int x, |
1255 | | int y, |
1256 | | int width, |
1257 | | const uint32_t *v) |
1258 | 0 | { |
1259 | 0 | uint8_t *bits = (uint8_t *)(image->bits + image->rowstride * y) + 3 * x; |
1260 | 0 | argb_t *values = (argb_t *)v; |
1261 | 0 | int i; |
1262 | |
|
1263 | 0 | for (i = 0; i < width; ++i) |
1264 | 0 | { |
1265 | 0 | uint32_t r, g, b, rgb; |
1266 | |
|
1267 | 0 | r = to_srgb (values[i].r); |
1268 | 0 | g = to_srgb (values[i].g); |
1269 | 0 | b = to_srgb (values[i].b); |
1270 | |
|
1271 | 0 | rgb = (r << 16) | (g << 8) | b; |
1272 | |
|
1273 | 0 | STORE_24 (image, bits, i, rgb); |
1274 | 0 | } |
1275 | 0 | } Unexecuted instantiation: pixman-access.c:store_scanline_r8g8b8_sRGB_float Unexecuted instantiation: pixman-access-accessors.c:store_scanline_r8g8b8_sRGB_float |
1276 | | |
1277 | | /* |
1278 | | * Contracts a floating point image to 32bpp and then stores it using a |
1279 | | * regular 32-bit store proc. Despite the type, this function expects an |
1280 | | * argb_t buffer. |
1281 | | */ |
1282 | | static void |
1283 | | store_scanline_generic_float (bits_image_t * image, |
1284 | | int x, |
1285 | | int y, |
1286 | | int width, |
1287 | | const uint32_t *values) |
1288 | 0 | { |
1289 | 0 | uint32_t *argb8_pixels; |
1290 | |
|
1291 | 0 | assert (image->common.type == BITS); |
1292 | | |
1293 | 0 | argb8_pixels = pixman_malloc_ab (width, sizeof(uint32_t)); |
1294 | 0 | if (!argb8_pixels) |
1295 | 0 | return; |
1296 | | |
1297 | | /* Contract the scanline. We could do this in place if values weren't |
1298 | | * const. |
1299 | | */ |
1300 | 0 | pixman_contract_from_float (argb8_pixels, (argb_t *)values, width); |
1301 | |
|
1302 | 0 | image->store_scanline_32 (image, x, y, width, argb8_pixels); |
1303 | |
|
1304 | 0 | free (argb8_pixels); |
1305 | 0 | } Unexecuted instantiation: pixman-access.c:store_scanline_generic_float Unexecuted instantiation: pixman-access-accessors.c:store_scanline_generic_float |
1306 | | |
1307 | | static void |
1308 | | fetch_scanline_generic_float (bits_image_t * image, |
1309 | | int x, |
1310 | | int y, |
1311 | | int width, |
1312 | | uint32_t * buffer, |
1313 | | const uint32_t *mask) |
1314 | 0 | { |
1315 | 0 | image->fetch_scanline_32 (image, x, y, width, buffer, NULL); |
1316 | |
|
1317 | 0 | pixman_expand_to_float ((argb_t *)buffer, buffer, image->format, width); |
1318 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_scanline_generic_float Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_generic_float |
1319 | | |
1320 | | /* The 32_sRGB paths should be deleted after narrow processing |
1321 | | * is no longer invoked for formats that are considered wide. |
1322 | | * (Also see fetch_pixel_generic_lossy_32) */ |
1323 | | static void |
1324 | | fetch_scanline_a8r8g8b8_32_sRGB (bits_image_t *image, |
1325 | | int x, |
1326 | | int y, |
1327 | | int width, |
1328 | | uint32_t *buffer, |
1329 | | const uint32_t *mask) |
1330 | 0 | { |
1331 | 0 | const uint32_t *bits = image->bits + y * image->rowstride; |
1332 | 0 | const uint32_t *pixel = (uint32_t *)bits + x; |
1333 | 0 | const uint32_t *end = pixel + width; |
1334 | 0 | uint32_t tmp; |
1335 | | |
1336 | 0 | while (pixel < end) |
1337 | 0 | { |
1338 | 0 | uint32_t a, r, g, b; |
1339 | |
|
1340 | 0 | tmp = READ (image, pixel++); |
1341 | |
|
1342 | 0 | a = (tmp >> 24) & 0xff; |
1343 | 0 | r = (tmp >> 16) & 0xff; |
1344 | 0 | g = (tmp >> 8) & 0xff; |
1345 | 0 | b = (tmp >> 0) & 0xff; |
1346 | |
|
1347 | 0 | r = to_linear[r] * 255.0f + 0.5f; |
1348 | 0 | g = to_linear[g] * 255.0f + 0.5f; |
1349 | 0 | b = to_linear[b] * 255.0f + 0.5f; |
1350 | |
|
1351 | 0 | *buffer++ = (a << 24) | (r << 16) | (g << 8) | (b << 0); |
1352 | 0 | } |
1353 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_scanline_a8r8g8b8_32_sRGB Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_a8r8g8b8_32_sRGB |
1354 | | |
1355 | | static void |
1356 | | fetch_scanline_r8g8b8_32_sRGB (bits_image_t *image, |
1357 | | int x, |
1358 | | int y, |
1359 | | int width, |
1360 | | uint32_t *buffer, |
1361 | | const uint32_t *mask) |
1362 | 0 | { |
1363 | 0 | const uint8_t *bits = (uint8_t *)(image->bits + y * image->rowstride) + 3 * x; |
1364 | 0 | uint32_t tmp; |
1365 | 0 | int i; |
1366 | |
|
1367 | 0 | for (i = 0; i < width; ++i) |
1368 | 0 | { |
1369 | 0 | uint32_t a, r, g, b; |
1370 | |
|
1371 | 0 | tmp = FETCH_24 (image, bits, i); |
1372 | |
|
1373 | 0 | a = 0xff; |
1374 | 0 | r = (tmp >> 16) & 0xff; |
1375 | 0 | g = (tmp >> 8) & 0xff; |
1376 | 0 | b = (tmp >> 0) & 0xff; |
1377 | |
|
1378 | 0 | r = to_linear[r] * 255.0f + 0.5f; |
1379 | 0 | g = to_linear[g] * 255.0f + 0.5f; |
1380 | 0 | b = to_linear[b] * 255.0f + 0.5f; |
1381 | |
|
1382 | 0 | *buffer++ = (a << 24) | (r << 16) | (g << 8) | (b << 0); |
1383 | 0 | } |
1384 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_scanline_r8g8b8_32_sRGB Unexecuted instantiation: pixman-access-accessors.c:fetch_scanline_r8g8b8_32_sRGB |
1385 | | |
1386 | | static uint32_t |
1387 | | fetch_pixel_a8r8g8b8_32_sRGB (bits_image_t *image, |
1388 | | int offset, |
1389 | | int line) |
1390 | 0 | { |
1391 | 0 | uint32_t *bits = image->bits + line * image->rowstride; |
1392 | 0 | uint32_t tmp = READ (image, bits + offset); |
1393 | 0 | uint32_t a, r, g, b; |
1394 | |
|
1395 | 0 | a = (tmp >> 24) & 0xff; |
1396 | 0 | r = (tmp >> 16) & 0xff; |
1397 | 0 | g = (tmp >> 8) & 0xff; |
1398 | 0 | b = (tmp >> 0) & 0xff; |
1399 | |
|
1400 | 0 | r = to_linear[r] * 255.0f + 0.5f; |
1401 | 0 | g = to_linear[g] * 255.0f + 0.5f; |
1402 | 0 | b = to_linear[b] * 255.0f + 0.5f; |
1403 | |
|
1404 | 0 | return (a << 24) | (r << 16) | (g << 8) | (b << 0); |
1405 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_pixel_a8r8g8b8_32_sRGB Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_a8r8g8b8_32_sRGB |
1406 | | |
1407 | | static uint32_t |
1408 | | fetch_pixel_r8g8b8_32_sRGB (bits_image_t *image, |
1409 | | int offset, |
1410 | | int line) |
1411 | 0 | { |
1412 | 0 | uint8_t *bits = (uint8_t *)(image->bits + line * image->rowstride); |
1413 | 0 | uint32_t tmp = FETCH_24 (image, bits, offset); |
1414 | 0 | uint32_t a, r, g, b; |
1415 | |
|
1416 | 0 | a = 0xff; |
1417 | 0 | r = (tmp >> 16) & 0xff; |
1418 | 0 | g = (tmp >> 8) & 0xff; |
1419 | 0 | b = (tmp >> 0) & 0xff; |
1420 | |
|
1421 | 0 | r = to_linear[r] * 255.0f + 0.5f; |
1422 | 0 | g = to_linear[g] * 255.0f + 0.5f; |
1423 | 0 | b = to_linear[b] * 255.0f + 0.5f; |
1424 | |
|
1425 | 0 | return (a << 24) | (r << 16) | (g << 8) | (b << 0); |
1426 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_pixel_r8g8b8_32_sRGB Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_r8g8b8_32_sRGB |
1427 | | |
1428 | | static void |
1429 | | store_scanline_a8r8g8b8_32_sRGB (bits_image_t *image, |
1430 | | int x, |
1431 | | int y, |
1432 | | int width, |
1433 | | const uint32_t *v) |
1434 | 0 | { |
1435 | 0 | uint32_t *bits = image->bits + image->rowstride * y; |
1436 | 0 | uint64_t *values = (uint64_t *)v; |
1437 | 0 | uint32_t *pixel = bits + x; |
1438 | 0 | uint64_t tmp; |
1439 | 0 | int i; |
1440 | | |
1441 | 0 | for (i = 0; i < width; ++i) |
1442 | 0 | { |
1443 | 0 | uint32_t a, r, g, b; |
1444 | |
|
1445 | 0 | tmp = values[i]; |
1446 | |
|
1447 | 0 | a = (tmp >> 24) & 0xff; |
1448 | 0 | r = (tmp >> 16) & 0xff; |
1449 | 0 | g = (tmp >> 8) & 0xff; |
1450 | 0 | b = (tmp >> 0) & 0xff; |
1451 | |
|
1452 | 0 | r = to_srgb (r * (1/255.0f)); |
1453 | 0 | g = to_srgb (g * (1/255.0f)); |
1454 | 0 | b = to_srgb (b * (1/255.0f)); |
1455 | | |
1456 | 0 | WRITE (image, pixel++, a | (r << 16) | (g << 8) | (b << 0)); |
1457 | 0 | } |
1458 | 0 | } Unexecuted instantiation: pixman-access.c:store_scanline_a8r8g8b8_32_sRGB Unexecuted instantiation: pixman-access-accessors.c:store_scanline_a8r8g8b8_32_sRGB |
1459 | | |
1460 | | static void |
1461 | | store_scanline_r8g8b8_32_sRGB (bits_image_t *image, |
1462 | | int x, |
1463 | | int y, |
1464 | | int width, |
1465 | | const uint32_t *v) |
1466 | 0 | { |
1467 | 0 | uint8_t *bits = (uint8_t *)(image->bits + image->rowstride * y) + 3 * x; |
1468 | 0 | uint64_t *values = (uint64_t *)v; |
1469 | 0 | uint64_t tmp; |
1470 | 0 | int i; |
1471 | |
|
1472 | 0 | for (i = 0; i < width; ++i) |
1473 | 0 | { |
1474 | 0 | uint32_t r, g, b; |
1475 | |
|
1476 | 0 | tmp = values[i]; |
1477 | |
|
1478 | 0 | r = (tmp >> 16) & 0xff; |
1479 | 0 | g = (tmp >> 8) & 0xff; |
1480 | 0 | b = (tmp >> 0) & 0xff; |
1481 | |
|
1482 | 0 | r = to_srgb (r * (1/255.0f)); |
1483 | 0 | g = to_srgb (g * (1/255.0f)); |
1484 | 0 | b = to_srgb (b * (1/255.0f)); |
1485 | |
|
1486 | 0 | STORE_24 (image, bits, i, (r << 16) | (g << 8) | (b << 0)); |
1487 | 0 | } |
1488 | 0 | } Unexecuted instantiation: pixman-access.c:store_scanline_r8g8b8_32_sRGB Unexecuted instantiation: pixman-access-accessors.c:store_scanline_r8g8b8_32_sRGB |
1489 | | |
1490 | | static argb_t |
1491 | | fetch_pixel_generic_float (bits_image_t *image, |
1492 | | int offset, |
1493 | | int line) |
1494 | 0 | { |
1495 | 0 | uint32_t pixel32 = image->fetch_pixel_32 (image, offset, line); |
1496 | 0 | argb_t f; |
1497 | |
|
1498 | 0 | pixman_expand_to_float (&f, &pixel32, image->format, 1); |
1499 | |
|
1500 | 0 | return f; |
1501 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_pixel_generic_float Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_generic_float |
1502 | | |
1503 | | /* |
1504 | | * XXX: The transformed fetch path only works at 32-bpp so far. When all |
1505 | | * paths have wide versions, this can be removed. |
1506 | | * |
1507 | | * WARNING: This function loses precision! |
1508 | | */ |
1509 | | static uint32_t |
1510 | | fetch_pixel_generic_lossy_32 (bits_image_t *image, |
1511 | | int offset, |
1512 | | int line) |
1513 | 0 | { |
1514 | 0 | argb_t pixel64 = image->fetch_pixel_float (image, offset, line); |
1515 | 0 | uint32_t result; |
1516 | |
|
1517 | 0 | pixman_contract_from_float (&result, &pixel64, 1); |
1518 | |
|
1519 | 0 | return result; |
1520 | 0 | } Unexecuted instantiation: pixman-access.c:fetch_pixel_generic_lossy_32 Unexecuted instantiation: pixman-access-accessors.c:fetch_pixel_generic_lossy_32 |
1521 | | |
1522 | | typedef struct |
1523 | | { |
1524 | | pixman_format_code_t format; |
1525 | | fetch_scanline_t fetch_scanline_32; |
1526 | | fetch_scanline_t fetch_scanline_float; |
1527 | | fetch_pixel_32_t fetch_pixel_32; |
1528 | | fetch_pixel_float_t fetch_pixel_float; |
1529 | | store_scanline_t store_scanline_32; |
1530 | | store_scanline_t store_scanline_float; |
1531 | | } format_info_t; |
1532 | | |
1533 | | #define FORMAT_INFO(format) \ |
1534 | | { \ |
1535 | | PIXMAN_ ## format, \ |
1536 | | fetch_scanline_ ## format, \ |
1537 | | fetch_scanline_generic_float, \ |
1538 | | fetch_pixel_ ## format, \ |
1539 | | fetch_pixel_generic_float, \ |
1540 | | store_scanline_ ## format, \ |
1541 | | store_scanline_generic_float \ |
1542 | | } |
1543 | | |
1544 | | static const format_info_t accessors[] = |
1545 | | { |
1546 | | /* 32 bpp formats */ |
1547 | | FORMAT_INFO (a8r8g8b8), |
1548 | | FORMAT_INFO (x8r8g8b8), |
1549 | | FORMAT_INFO (a8b8g8r8), |
1550 | | FORMAT_INFO (x8b8g8r8), |
1551 | | FORMAT_INFO (b8g8r8a8), |
1552 | | FORMAT_INFO (b8g8r8x8), |
1553 | | FORMAT_INFO (r8g8b8a8), |
1554 | | FORMAT_INFO (r8g8b8x8), |
1555 | | FORMAT_INFO (x14r6g6b6), |
1556 | | |
1557 | | /* sRGB formats */ |
1558 | | { PIXMAN_a8r8g8b8_sRGB, |
1559 | | fetch_scanline_a8r8g8b8_32_sRGB, fetch_scanline_a8r8g8b8_sRGB_float, |
1560 | | fetch_pixel_a8r8g8b8_32_sRGB, fetch_pixel_a8r8g8b8_sRGB_float, |
1561 | | store_scanline_a8r8g8b8_32_sRGB, store_scanline_a8r8g8b8_sRGB_float, |
1562 | | }, |
1563 | | { PIXMAN_r8g8b8_sRGB, |
1564 | | fetch_scanline_r8g8b8_32_sRGB, fetch_scanline_r8g8b8_sRGB_float, |
1565 | | fetch_pixel_r8g8b8_32_sRGB, fetch_pixel_r8g8b8_sRGB_float, |
1566 | | store_scanline_r8g8b8_32_sRGB, store_scanline_r8g8b8_sRGB_float, |
1567 | | }, |
1568 | | |
1569 | | /* 24bpp formats */ |
1570 | | FORMAT_INFO (r8g8b8), |
1571 | | FORMAT_INFO (b8g8r8), |
1572 | | |
1573 | | /* 16bpp formats */ |
1574 | | FORMAT_INFO (r5g6b5), |
1575 | | FORMAT_INFO (b5g6r5), |
1576 | | |
1577 | | FORMAT_INFO (a1r5g5b5), |
1578 | | FORMAT_INFO (x1r5g5b5), |
1579 | | FORMAT_INFO (a1b5g5r5), |
1580 | | FORMAT_INFO (x1b5g5r5), |
1581 | | FORMAT_INFO (a4r4g4b4), |
1582 | | FORMAT_INFO (x4r4g4b4), |
1583 | | FORMAT_INFO (a4b4g4r4), |
1584 | | FORMAT_INFO (x4b4g4r4), |
1585 | | |
1586 | | /* 8bpp formats */ |
1587 | | FORMAT_INFO (a8), |
1588 | | FORMAT_INFO (r3g3b2), |
1589 | | FORMAT_INFO (b2g3r3), |
1590 | | FORMAT_INFO (a2r2g2b2), |
1591 | | FORMAT_INFO (a2b2g2r2), |
1592 | | |
1593 | | FORMAT_INFO (c8), |
1594 | | |
1595 | | FORMAT_INFO (g8), |
1596 | | |
1597 | | #define fetch_scanline_x4c4 fetch_scanline_c8 |
1598 | | #define fetch_pixel_x4c4 fetch_pixel_c8 |
1599 | | #define store_scanline_x4c4 store_scanline_c8 |
1600 | | FORMAT_INFO (x4c4), |
1601 | | |
1602 | | #define fetch_scanline_x4g4 fetch_scanline_g8 |
1603 | | #define fetch_pixel_x4g4 fetch_pixel_g8 |
1604 | | #define store_scanline_x4g4 store_scanline_g8 |
1605 | | FORMAT_INFO (x4g4), |
1606 | | |
1607 | | FORMAT_INFO (x4a4), |
1608 | | |
1609 | | /* 4bpp formats */ |
1610 | | FORMAT_INFO (a4), |
1611 | | FORMAT_INFO (r1g2b1), |
1612 | | FORMAT_INFO (b1g2r1), |
1613 | | FORMAT_INFO (a1r1g1b1), |
1614 | | FORMAT_INFO (a1b1g1r1), |
1615 | | |
1616 | | FORMAT_INFO (c4), |
1617 | | |
1618 | | FORMAT_INFO (g4), |
1619 | | |
1620 | | /* 1bpp formats */ |
1621 | | FORMAT_INFO (a1), |
1622 | | FORMAT_INFO (g1), |
1623 | | |
1624 | | /* Wide formats */ |
1625 | | #ifndef PIXMAN_FB_ACCESSORS |
1626 | | { PIXMAN_rgba_float, |
1627 | | NULL, fetch_scanline_rgbaf_float, |
1628 | | fetch_pixel_generic_lossy_32, fetch_pixel_rgbaf_float, |
1629 | | NULL, store_scanline_rgbaf_float }, |
1630 | | |
1631 | | { PIXMAN_rgb_float, |
1632 | | NULL, fetch_scanline_rgbf_float, |
1633 | | fetch_pixel_generic_lossy_32, fetch_pixel_rgbf_float, |
1634 | | NULL, store_scanline_rgbf_float }, |
1635 | | #endif |
1636 | | |
1637 | | { PIXMAN_a2r10g10b10, |
1638 | | NULL, fetch_scanline_a2r10g10b10_float, |
1639 | | fetch_pixel_generic_lossy_32, fetch_pixel_a2r10g10b10_float, |
1640 | | NULL, store_scanline_a2r10g10b10_float }, |
1641 | | |
1642 | | { PIXMAN_x2r10g10b10, |
1643 | | NULL, fetch_scanline_x2r10g10b10_float, |
1644 | | fetch_pixel_generic_lossy_32, fetch_pixel_x2r10g10b10_float, |
1645 | | NULL, store_scanline_x2r10g10b10_float }, |
1646 | | |
1647 | | { PIXMAN_a2b10g10r10, |
1648 | | NULL, fetch_scanline_a2b10g10r10_float, |
1649 | | fetch_pixel_generic_lossy_32, fetch_pixel_a2b10g10r10_float, |
1650 | | NULL, store_scanline_a2b10g10r10_float }, |
1651 | | |
1652 | | { PIXMAN_x2b10g10r10, |
1653 | | NULL, fetch_scanline_x2b10g10r10_float, |
1654 | | fetch_pixel_generic_lossy_32, fetch_pixel_x2b10g10r10_float, |
1655 | | NULL, store_scanline_x2b10g10r10_float }, |
1656 | | |
1657 | | /* YUV formats */ |
1658 | | { PIXMAN_yuy2, |
1659 | | fetch_scanline_yuy2, fetch_scanline_generic_float, |
1660 | | fetch_pixel_yuy2, fetch_pixel_generic_float, |
1661 | | NULL, NULL }, |
1662 | | |
1663 | | { PIXMAN_yv12, |
1664 | | fetch_scanline_yv12, fetch_scanline_generic_float, |
1665 | | fetch_pixel_yv12, fetch_pixel_generic_float, |
1666 | | NULL, NULL }, |
1667 | | |
1668 | | { PIXMAN_null }, |
1669 | | }; |
1670 | | |
1671 | | static void |
1672 | | setup_accessors (bits_image_t *image) |
1673 | 65 | { |
1674 | 65 | const format_info_t *info = accessors; |
1675 | | |
1676 | 1.54k | while (info->format != PIXMAN_null) |
1677 | 1.54k | { |
1678 | 1.54k | if (info->format == image->format) |
1679 | 65 | { |
1680 | 65 | image->fetch_scanline_32 = info->fetch_scanline_32; |
1681 | 65 | image->fetch_scanline_float = info->fetch_scanline_float; |
1682 | 65 | image->fetch_pixel_32 = info->fetch_pixel_32; |
1683 | 65 | image->fetch_pixel_float = info->fetch_pixel_float; |
1684 | 65 | image->store_scanline_32 = info->store_scanline_32; |
1685 | 65 | image->store_scanline_float = info->store_scanline_float; |
1686 | | |
1687 | 65 | return; |
1688 | 65 | } |
1689 | | |
1690 | 1.48k | info++; |
1691 | 1.48k | } |
1692 | 65 | } pixman-access.c:setup_accessors Line | Count | Source | 1673 | 65 | { | 1674 | 65 | const format_info_t *info = accessors; | 1675 | | | 1676 | 1.54k | while (info->format != PIXMAN_null) | 1677 | 1.54k | { | 1678 | 1.54k | if (info->format == image->format) | 1679 | 65 | { | 1680 | 65 | image->fetch_scanline_32 = info->fetch_scanline_32; | 1681 | 65 | image->fetch_scanline_float = info->fetch_scanline_float; | 1682 | 65 | image->fetch_pixel_32 = info->fetch_pixel_32; | 1683 | 65 | image->fetch_pixel_float = info->fetch_pixel_float; | 1684 | 65 | image->store_scanline_32 = info->store_scanline_32; | 1685 | 65 | image->store_scanline_float = info->store_scanline_float; | 1686 | | | 1687 | 65 | return; | 1688 | 65 | } | 1689 | | | 1690 | 1.48k | info++; | 1691 | 1.48k | } | 1692 | 65 | } |
Unexecuted instantiation: pixman-access-accessors.c:setup_accessors |
1693 | | |
1694 | | #ifndef PIXMAN_FB_ACCESSORS |
1695 | | void |
1696 | | _pixman_bits_image_setup_accessors_accessors (bits_image_t *image); |
1697 | | |
1698 | | void |
1699 | | _pixman_bits_image_setup_accessors (bits_image_t *image) |
1700 | 65 | { |
1701 | 65 | if (image->read_func || image->write_func) |
1702 | 0 | _pixman_bits_image_setup_accessors_accessors (image); |
1703 | 65 | else |
1704 | 65 | setup_accessors (image); |
1705 | 65 | } |
1706 | | |
1707 | | #else |
1708 | | |
1709 | | void |
1710 | | _pixman_bits_image_setup_accessors_accessors (bits_image_t *image) |
1711 | 0 | { |
1712 | 0 | setup_accessors (image); |
1713 | 0 | } |
1714 | | |
1715 | | #endif |