summaryrefslogtreecommitdiff
path: root/libnsgif.h
diff options
context:
space:
mode:
Diffstat (limited to 'libnsgif.h')
-rw-r--r--libnsgif.h58
1 files changed, 32 insertions, 26 deletions
diff --git a/libnsgif.h b/libnsgif.h
index b018c20..8564b12 100644
--- a/libnsgif.h
+++ b/libnsgif.h
@@ -42,9 +42,11 @@ typedef enum {
/* The GIF frame data
*/
typedef struct gif_frame {
- unsigned int frame_pointer; /**< offset (in bytes) to the GIF frame data */
- unsigned int frame_delay; /**< delay (in cs) before animating the frame */
bool display; /**< whether the frame should be displayed/animated */
+ unsigned int frame_delay; /**< delay (in cs) before animating the frame */
+ /** Internal members are listed below
+ */
+ unsigned int frame_pointer; /**< offset (in bytes) to the GIF frame data */
bool virgin; /**< whether the frame has previously been used */
bool opaque; /**< whether the frame is totally opaque */
bool redraw_required; /**< whether a forcable screen redraw is required */
@@ -68,41 +70,45 @@ typedef void (*gif_bitmap_cb_modified)(void *bitmap);
/* The Bitmap callbacks function table
*/
-typedef struct gif_bitmap_callback_vt_s {
+typedef struct gif_bitmap_callback_vt {
gif_bitmap_cb_create bitmap_create; /**< Create a bitmap. */
gif_bitmap_cb_destroy bitmap_destroy; /**< Free a bitmap. */
gif_bitmap_cb_get_buffer bitmap_get_buffer; /**< Return a pointer to the pixel data in a bitmap. */
gif_bitmap_cb_set_opaque bitmap_set_opaque; /**< Sets whether a bitmap should be plotted opaque. */
gif_bitmap_cb_test_opaque bitmap_test_opaque; /**< Tests whether a bitmap has an opaque alpha channel. */
- gif_bitmap_cb_modified bitmap_modified; /**< The bitmap image has changed, so flush any persistant cache. */
+ gif_bitmap_cb_modified bitmap_modified; /**< The bitmap image has changed, so flush any persistant cache. */
} gif_bitmap_callback_vt;
/* The GIF animation data
*/
typedef struct gif_animation {
- unsigned char *gif_data; /**< pointer to GIF data */
- unsigned int buffer_position; /**< current index into GIF data */
- unsigned int buffer_size; /**< total number of bytes of GIF data available */
- unsigned int frame_holders; /**< current number of frame holders */
- int decoded_frame; /**< current frame decoded to bitmap */
- int loop_count; /**< number of times to loop animation */
- gif_frame *frames; /**< decoded frames */
- unsigned int width; /**< width of GIF (may increase during decoding) */
- unsigned int height; /**< heigth of GIF (may increase during decoding) */
- unsigned int frame_count; /**< number of frames decoded */
- unsigned int frame_count_partial; /**< number of frames partially decoded */
- unsigned int background_colour; /**< image background colour */
- unsigned int aspect_ratio; /**< image aspect ratio (ignored) */
- unsigned int colour_table_size; /**< size of colour table (in entries) */
- bool global_colours; /**< whether the GIF has a global colour table */
- unsigned int *global_colour_table; /**< global colour table */
- unsigned int *local_colour_table; /**< local colour table */
- void *frame_image; /**< currently decoded image; stored as bitmap from bitmap_create callback */
- gif_result current_error; /**< current error type, or 0 for none*/
+ gif_bitmap_callback_vt bitmap_callbacks; /**< callbacks for bitmap functions */
+ unsigned char *gif_data; /**< pointer to GIF data */
+ unsigned int width; /**< width of GIF (may increase during decoding) */
+ unsigned int height; /**< heigth of GIF (may increase during decoding) */
+ unsigned int frame_count; /**< number of frames decoded */
+ unsigned int frame_count_partial; /**< number of frames partially decoded */
+ gif_frame *frames; /**< decoded frames */
+ int decoded_frame; /**< current frame decoded to bitmap */
+ void *frame_image; /**< currently decoded image; stored as bitmap from bitmap_create callback */
+ int loop_count; /**< number of times to loop animation */
+ gif_result current_error; /**< current error type, or 0 for none*/
+ /** Internal members are listed below
+ */
+ unsigned int buffer_position; /**< current index into GIF data */
+ unsigned int buffer_size; /**< total number of bytes of GIF data available */
+ unsigned int frame_holders; /**< current number of frame holders */
+ unsigned int background_index; /**< index in the colour table for the background colour */
+ unsigned int aspect_ratio; /**< image aspect ratio (ignored) */
+ unsigned int colour_table_size; /**< size of colour table (in entries) */
+ bool global_colours; /**< whether the GIF has a global colour table */
+ unsigned int *global_colour_table; /**< global colour table */
+ unsigned int *local_colour_table; /**< local colour table */
} gif_animation;
-gif_result gif_initialise(struct gif_animation *gif, gif_bitmap_callback_vt *bitmap_callbacks);
-gif_result gif_decode_frame(struct gif_animation *gif, unsigned int frame, gif_bitmap_callback_vt *bitmap_callbacks);
-void gif_finalise(struct gif_animation *gif, gif_bitmap_callback_vt *bitmap_callbacks);
+void gif_create(gif_animation *gif);
+gif_result gif_initialise(gif_animation *gif, size_t size, unsigned char *data);
+gif_result gif_decode_frame(gif_animation *gif, unsigned int frame);
+void gif_finalise(gif_animation *gif);
#endif