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 6337c54d30ab58cc9160b4807b924f4386a17129
Author: Kim Woelders <k...@woelders.dk>
AuthorDate: Sat Jan 28 09:52:08 2023 +0100
ANI loader: Use struct to access chunk data
---
src/modules/loaders/loader_ani.c | 57 ++++++++++++++++++++++++----------------
1 file changed, 35 insertions(+), 22 deletions(-)
diff --git a/src/modules/loaders/loader_ani.c b/src/modules/loaders/loader_ani.c
index 9bb344e..034ba97 100644
--- a/src/modules/loaders/loader_ani.c
+++ b/src/modules/loaders/loader_ani.c
@@ -32,16 +32,27 @@ typedef struct {
} riff_ctx_t;
typedef struct {
- uint32_t size; // Size of chunk data (=36)
- uint32_t frames; // Number of frames in file
- uint32_t steps; // Number of steps in animation sequence
- uint32_t width; // Image width (raw data only?)
- uint32_t height; // Image height (raw data only?)
- uint32_t bpp; // Bits per pixel (raw data only?)
- uint32_t planes; // N. planes (raw data only?)
- uint32_t rate; // Default rate in 1/60s
- uint32_t flags; // Flags: ANIH_FLAG_...
-} anih_data_t;
+ struct {
+ uint32_t type; // Chunk type
+ uint32_t size; // Chunk size
+ } hdr;
+ union {
+ struct {
+ uint32_t name; // List name
+ } list;
+ struct {
+ uint32_t size; // Size of chunk data (=36)
+ uint32_t frames; // Number of frames in file
+ uint32_t steps; // Number of steps in animation sequence
+ uint32_t width; // Image width (raw data only?)
+ uint32_t height; // Image height (raw data only?)
+ uint32_t bpp; // Bits per pixel (raw data only?)
+ uint32_t planes; // N. planes (raw data only?)
+ uint32_t rate; // Default rate in 1/60s
+ uint32_t flags; // Flags: ANIH_FLAG_...
+ } anih;
+ };
+} ani_chunk_t;
#define ANIH_FLAG_ICO 0x01 // Frames are icons or cursors (otherwiwe raw - bmp?)
#define ANIH_FLAG_SEQ 0x02 // Image contains seq chunk
@@ -76,7 +87,6 @@ _load_embedded(ImlibImage * im, int load_data, const char *data,
return rc;
}
-#define LE32(p) (SWAP_LE_32(*((const uint32_t*)(p))))
#define OFFS(p) ((const char*)(p) - (const char*)im->fi->fdata)
static int
@@ -88,6 +98,7 @@ _riff_parse(ImlibImage * im, riff_ctx_t * ctx, const char *fdata,
int size, avail;
int fcount, i;
ImlibImageFrame *pf;
+ const ani_chunk_t *chunk;
rc = LOAD_FAIL;
ctx->nest += 1;
@@ -108,8 +119,9 @@ _riff_parse(ImlibImage * im, riff_ctx_t * ctx, const char *fdata,
break;
}
- type = LE32(fptr);
- size = LE32(fptr + 4);
+ chunk = (const ani_chunk_t *)fptr;
+ type = SWAP_LE_32(chunk->hdr.type);
+ size = SWAP_LE_32(chunk->hdr.size);
D("%5lu: %*s Chunk: %.4s size %u: ",
OFFS(fptr), ctx->nest, "", fptr, size);
@@ -118,7 +130,8 @@ _riff_parse(ImlibImage * im, riff_ctx_t * ctx, const char *fdata,
{
Dx("\n");
/* First chunk of file */
- if (type != RIFF_TYPE_RIFF || (LE32(fptr + 8)) != RIFF_NAME_ACON)
+ if (type != RIFF_TYPE_RIFF ||
+ (SWAP_LE_32(chunk->list.name)) != RIFF_NAME_ACON)
return LOAD_FAIL;
size = 4;
continue;
@@ -161,16 +174,16 @@ _riff_parse(ImlibImage * im, riff_ctx_t * ctx, const char *fdata,
rc = _load_embedded(im, 1, fptr + 8, size);
break;
case RIFF_TYPE_anih:
-#define AH ((const anih_data_t*)(fptr + 8))
+#define AH (chunk->anih)
/**INDENT-OFF**/
Dx("sz=%u nf=%u/%u WxH=%ux%u bc=%u np=%u dr=%u fl=%u\n",
- SWAP_LE_32(AH->size), SWAP_LE_32(AH->frames), SWAP_LE_32(AH->steps),
- SWAP_LE_32(AH->width), SWAP_LE_32(AH->height),
- SWAP_LE_32(AH->bpp), SWAP_LE_32(AH->planes),
- SWAP_LE_32(AH->rate), SWAP_LE_32(AH->flags));
+ SWAP_LE_32(AH.size), SWAP_LE_32(AH.frames), SWAP_LE_32(AH.steps),
+ SWAP_LE_32(AH.width), SWAP_LE_32(AH.height),
+ SWAP_LE_32(AH.bpp), SWAP_LE_32(AH.planes),
+ SWAP_LE_32(AH.rate), SWAP_LE_32(AH.flags));
/**INDENT-ON**/
- ctx->nframes = SWAP_LE_32(AH->frames);
- ctx->nfsteps = SWAP_LE_32(AH->steps);
+ ctx->nframes = SWAP_LE_32(AH.frames);
+ ctx->nfsteps = SWAP_LE_32(AH.steps);
if (im->frame <= 0)
break;
if (ctx->nfsteps < ctx->nframes)
@@ -186,7 +199,7 @@ _riff_parse(ImlibImage * im, riff_ctx_t * ctx, const char *fdata,
pf->frame_count = ctx->nfsteps;
if (ctx->nframes > 1)
pf->frame_flags = FF_IMAGE_ANIMATED;
- pf->frame_delay = (1000 * SWAP_LE_32(AH->rate)) / 60;
+ pf->frame_delay = (1000 * SWAP_LE_32(AH.rate)) / 60;
break;
case RIFF_TYPE_rate:
ctx->rates = (uint32_t *) (fptr + 8);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.