login

<     >

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 */