Mercurial > repos > blastem
comparison png.c @ 2053:3414a4423de1 segacd
Merge from default
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 15 Jan 2022 13:15:21 -0800 |
parents | 81eebbe6b2e3 |
children | eb45ad9d8a3f |
comparison
equal
deleted
inserted
replaced
1692:5dacaef602a7 | 2053:3414a4423de1 |
---|---|
202 return *cur + paeth(prev, prior, prev_prior); | 202 return *cur + paeth(prev, prior, prev_prior); |
203 } | 203 } |
204 | 204 |
205 static uint32_t pixel_gray(uint8_t **cur, uint8_t **last, uint8_t bpp, uint32_t x, filter_fun filter) | 205 static uint32_t pixel_gray(uint8_t **cur, uint8_t **last, uint8_t bpp, uint32_t x, filter_fun filter) |
206 { | 206 { |
207 uint8_t value = filter(*cur, *last, bpp, x); | 207 uint8_t value = **cur = filter(*cur, *last, bpp, x); |
208 (*cur)++; | 208 (*cur)++; |
209 if (*last) { | 209 if (*last) { |
210 (*last)++; | 210 (*last)++; |
211 } | 211 } |
212 return 0xFF000000 | value << 16 | value << 8 | value; | 212 return 0xFF000000 | value << 16 | value << 8 | value; |
213 } | 213 } |
214 | 214 |
215 static uint32_t pixel_true(uint8_t **cur, uint8_t **last, uint8_t bpp, uint32_t x, filter_fun filter) | 215 static uint32_t pixel_true(uint8_t **cur, uint8_t **last, uint8_t bpp, uint32_t x, filter_fun filter) |
216 { | 216 { |
217 uint8_t red = filter(*cur, *last, bpp, x); | 217 uint8_t red = **cur = filter(*cur, *last, bpp, x); |
218 (*cur)++; | 218 (*cur)++; |
219 if (*last) { | 219 if (*last) { |
220 (*last)++; | 220 (*last)++; |
221 } | 221 } |
222 uint8_t green = filter(*cur, *last, bpp, x); | 222 uint8_t green = **cur = filter(*cur, *last, bpp, x); |
223 (*cur)++; | 223 (*cur)++; |
224 if (*last) { | 224 if (*last) { |
225 (*last)++; | 225 (*last)++; |
226 } | 226 } |
227 uint8_t blue = filter(*cur, *last, bpp, x); | 227 uint8_t blue = **cur = filter(*cur, *last, bpp, x); |
228 (*cur)++; | 228 (*cur)++; |
229 if (*last) { | 229 if (*last) { |
230 (*last)++; | 230 (*last)++; |
231 } | 231 } |
232 return 0xFF000000 | red << 16 | green << 8 | blue; | 232 return 0xFF000000 | red << 16 | green << 8 | blue; |
233 } | 233 } |
234 | 234 |
235 static uint32_t pixel_gray_alpha(uint8_t **cur, uint8_t **last, uint8_t bpp, uint32_t x, filter_fun filter) | 235 static uint32_t pixel_gray_alpha(uint8_t **cur, uint8_t **last, uint8_t bpp, uint32_t x, filter_fun filter) |
236 { | 236 { |
237 uint8_t value = filter(*cur, *last, bpp, x); | 237 uint8_t value = **cur = filter(*cur, *last, bpp, x); |
238 (*cur)++; | 238 (*cur)++; |
239 if (*last) { | 239 if (*last) { |
240 (*last)++; | 240 (*last)++; |
241 } | 241 } |
242 uint8_t alpha = filter(*cur, *last, bpp, x); | 242 uint8_t alpha = **cur = filter(*cur, *last, bpp, x); |
243 (*cur)++; | 243 (*cur)++; |
244 if (*last) { | 244 if (*last) { |
245 (*last)++; | 245 (*last)++; |
246 } | 246 } |
247 return alpha << 24 | value << 16 | value << 8 | value; | 247 return alpha << 24 | value << 16 | value << 8 | value; |
248 } | 248 } |
249 | 249 |
250 static uint32_t pixel_true_alpha(uint8_t **cur, uint8_t **last, uint8_t bpp, uint32_t x, filter_fun filter) | 250 static uint32_t pixel_true_alpha(uint8_t **cur, uint8_t **last, uint8_t bpp, uint32_t x, filter_fun filter) |
251 { | 251 { |
252 uint8_t red = filter(*cur, *last, bpp, x); | 252 uint8_t red = **cur = filter(*cur, *last, bpp, x); |
253 (*cur)++; | 253 (*cur)++; |
254 if (*last) { | 254 if (*last) { |
255 (*last)++; | 255 (*last)++; |
256 } | 256 } |
257 uint8_t green = filter(*cur, *last, bpp, x); | 257 uint8_t green = **cur = filter(*cur, *last, bpp, x); |
258 (*cur)++; | 258 (*cur)++; |
259 if (*last) { | 259 if (*last) { |
260 (*last)++; | 260 (*last)++; |
261 } | 261 } |
262 uint8_t blue = filter(*cur, *last, bpp, x); | 262 uint8_t blue = **cur = filter(*cur, *last, bpp, x); |
263 (*cur)++; | 263 (*cur)++; |
264 if (*last) { | 264 if (*last) { |
265 (*last)++; | 265 (*last)++; |
266 } | 266 } |
267 uint8_t alpha = filter(*cur, *last, bpp, x); | 267 uint8_t alpha = **cur = filter(*cur, *last, bpp, x); |
268 (*cur)++; | 268 (*cur)++; |
269 if (*last) { | 269 if (*last) { |
270 (*last)++; | 270 (*last)++; |
271 } | 271 } |
272 return alpha << 24 | red << 16 | green << 8 | blue; | 272 return alpha << 24 | red << 16 | green << 8 | blue; |
352 idat_buf = malloc(idat_size + chunk_size); | 352 idat_buf = malloc(idat_size + chunk_size); |
353 memcpy(idat_buf, tmp, idat_size); | 353 memcpy(idat_buf, tmp, idat_size); |
354 } | 354 } |
355 memcpy(idat_buf + idat_size, buffer + cur, chunk_size); | 355 memcpy(idat_buf + idat_size, buffer + cur, chunk_size); |
356 idat_size += chunk_size; | 356 idat_size += chunk_size; |
357 idat_needs_free = 1; | |
357 } else { | 358 } else { |
358 idat_buf = buffer + cur; | 359 idat_buf = buffer + cur; |
359 idat_size = chunk_size; | 360 idat_size = chunk_size; |
360 } | 361 } |
361 cur += chunk_size; | 362 cur += chunk_size; |