2017-11-25 09:12:42 (UTC-02:00)
Marcel Rodrigues <marcelgmr@gmail.com>
Add ge_rewind().
diff --git a/gifdec.c b/gifdec.c index b80eb05..d7e7271 100644 --- a/gifdec.c +++ b/gifdec.c @@ -94,6 +94,7 @@ gd_open_gif(const char *fname) gif->frame = &gif->canvas[3 * width * height]; if (gif->bgindex) memset(gif->frame, gif->bgindex, gif->width * gif->height); + gif->anim_start = lseek(fd, 0, SEEK_CUR); goto ok; fail: close(fd); @@ -445,6 +446,12 @@ gd_render_frame(gd_GIF *gif, uint8_t *buffer) } void +gd_rewind(gd_GIF *gif) +{ + lseek(gif->fd, gif->anim_start, SEEK_SET); +} + +void gd_close_gif(gd_GIF *gif) { close(gif->fd); diff --git a/gifdec.h b/gifdec.h index b8ca022..b938b20 100644 --- a/gifdec.h +++ b/gifdec.h @@ -2,6 +2,7 @@ #define GIFDEC_H #include <stdint.h> +#include <sys/types.h> typedef struct gd_Palette { int size; @@ -18,6 +19,7 @@ typedef struct gd_GCE { typedef struct gd_GIF { int fd; + off_t anim_start; uint16_t width, height; uint16_t loop_count; gd_GCE gce; @@ -38,6 +40,7 @@ typedef struct gd_GIF { gd_GIF *gd_open_gif(const char *fname); int gd_get_frame(gd_GIF *gif); void gd_render_frame(gd_GIF *gif, uint8_t *buffer); +void gd_rewind(gd_GIF *gif); void gd_close_gif(gd_GIF *gif); #endif /* GIFDEC_H */