From b6353efe0ab2e05b8d3f7e809b55ba1606036bba Mon Sep 17 00:00:00 2001 From: Sean Fox Date: Thu, 26 Jun 2008 06:30:44 +0000 Subject: Arranged gif_animation and gif_frame members, moved bitmap callbacks into gif_animation, and added gif_create() function svn path=/branches/dynis/libnsgif/; revision=4449 --- libnsgif.h | 58 ++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 26 deletions(-) (limited to 'libnsgif.h') 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 -- cgit v1.2.3