diff options
author | Sean Fox <dyntryx@gmail.com> | 2008-06-26 06:30:44 +0000 |
---|---|---|
committer | Sean Fox <dyntryx@gmail.com> | 2008-06-26 06:30:44 +0000 |
commit | b6353efe0ab2e05b8d3f7e809b55ba1606036bba (patch) | |
tree | 95bc919e9823acc1272c6ed473893568a36c5118 /libnsgif.h | |
parent | 60c220635a19b1c907d9a4de71da8f6ca4121874 (diff) | |
download | libnsgif-b6353efe0ab2e05b8d3f7e809b55ba1606036bba.tar.gz libnsgif-b6353efe0ab2e05b8d3f7e809b55ba1606036bba.tar.bz2 |
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
Diffstat (limited to 'libnsgif.h')
-rw-r--r-- | libnsgif.h | 58 |
1 files changed, 32 insertions, 26 deletions
@@ -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 |