This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository legacy-imlib2.
View the commit online.
commit 9382d8f2e43b1fb4da30989c37052ecf5f8abf33
Author: Kim Woelders <[email protected]>
AuthorDate: Sun Nov 13 10:17:06 2022 +0100
PNG loader: Cosmetics
In multiframe loaders, use "frame" for the requested frame, and "fcount"
for frame counter.
---
src/modules/loaders/loader_png.c | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/src/modules/loaders/loader_png.c b/src/modules/loaders/loader_png.c
index 03ca264..96f8eb5 100644
--- a/src/modules/loaders/loader_png.c
+++ b/src/modules/loaders/loader_png.c
@@ -301,8 +301,8 @@ _load(ImlibImage * im, int load_data)
const png_chunk_t *chunk;
const png_fctl_t *pfctl;
unsigned int len, val;
- int w, h, frame;
- bool save_fdat, seen_fctl;
+ int w, h, frame, fcount;
+ bool save_fdat, seen_actl, seen_fctl;
png_chunk_t cbuf;
/* read header */
@@ -337,16 +337,18 @@ _load(ImlibImage * im, int load_data)
png_set_progressive_read_fn(png_ptr, &ctx,
info_callback, row_callback, NULL);
+ frame = im->frame_num;
if (im->frame_num <= 0)
goto scan_done;
/* Animation info requested. Look it up to find the frame's
* w,h which we need for making a "fake" IHDR in next pass. */
- frame = 0; /* Frame number */
+ fcount = 0; /* Frame counter */
ctx.pch_fctl = NULL; /* Ponter to requested frame fcTL chunk */
fptr = (unsigned char *)im->fi->fdata;
fptr += _PNG_SIG_SIZE;
+ seen_actl = false;
for (ic = 0;; ic++, fptr += 8 + len + 4)
{
@@ -361,7 +363,7 @@ _load(ImlibImage * im, int load_data)
{
case PNG_TYPE_IDAT:
D("\n");
- if (im->frame_count == 0)
+ if (!seen_actl)
goto scan_done; /* No acTL before IDAT - Regular PNG */
#ifdef IMLIB2_DEBUG
break; /* Show all frames */
@@ -372,25 +374,26 @@ _load(ImlibImage * im, int load_data)
#endif
case PNG_TYPE_acTL:
+ seen_actl = true;
#define P (&chunk->actl)
im->frame_count = htonl(P->num_frames);
im->loop_count = htonl(P->num_plays);
D("num_frames=%d num_plays=%d\n", im->frame_count,
htonl(P->num_plays));
- if (im->frame_num > im->frame_count)
+ if (frame > im->frame_count)
QUIT_WITH_RC(LOAD_BADFRAME);
break;
#undef P
case PNG_TYPE_fcTL:
#define P (&chunk->fctl)
- frame++;
+ fcount++;
D("frame=%d(%d) x,y=%d,%d wxh=%dx%d delay=%d/%d disp=%d blend=%d\n", //
- frame, htonl(P->frame),
+ fcount, htonl(P->frame),
htonl(P->x), htonl(P->y), htonl(P->w), htonl(P->h),
htons(P->delay_num), htons(P->delay_den),
P->dispose_op, P->blend_op);
- if (im->frame_num != frame)
+ if (frame != fcount)
break;
ctx.pch_fctl = chunk; /* Remember fcTL location */
break;
@@ -472,7 +475,7 @@ _load(ImlibImage * im, int load_data)
pfctl->dispose_op, pfctl->blend_op,
pfctl->delay_num, pfctl->delay_den);
- if (im->frame_num <= 1)
+ if (frame <= 1)
break; /* Process actual IHDR chunk */
/* Process fake IHDR for frame */
@@ -492,7 +495,7 @@ _load(ImlibImage * im, int load_data)
* call info_callback() */
if (im->frame_count <= 0)
break; /* Regular PNG - Process actual IDAT chunk */
- if (im->frame_num == 1 && seen_fctl)
+ if (frame == 1 && seen_fctl)
break; /* APNG, First frame is IDAT */
/* Jump to the record after the frame's fcTL, will typically be
* the frame's first fdAT chunk */
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.