Open Broadcaster Software
Free, open source software for live streaming and recording
libnsgif.h
Go to the documentation of this file.
1 /*
2  * Copyright 2004 Richard Wilson <richard.wilson@netsurf-browser.org>
3  * Copyright 2008 Sean Fox <dyntryx@gmail.com>
4  *
5  * This file is part of NetSurf's libnsgif, http://www.netsurf-browser.org/
6  * Licenced under the MIT License,
7  * http://www.opensource.org/licenses/mit-license.php
8  */
9 
14 #ifndef _LIBNSGIF_H_
15 #define _LIBNSGIF_H_
16 
17 #include <stdbool.h>
18 #include <inttypes.h>
19 
20 #if defined(__cplusplus)
21 extern "C"
22 {
23 #endif
24 /* Error return values
25 */
26 typedef enum {
28  GIF_OK = 0,
35  GIF_END_OF_FRAME = -7
37 
38 /* Maximum LZW bits available
39 */
40 #define GIF_MAX_LZW 12
41 
42 /* The GIF frame data
43 */
44 typedef struct gif_frame {
45  bool display;
46  unsigned int frame_delay;
49  unsigned int frame_pointer;
50  bool virgin;
51  bool opaque;
53  unsigned char disposal_method;
54  bool transparency;
55  unsigned char transparency_index;
56  unsigned int redraw_x;
57  unsigned int redraw_y;
58  unsigned int redraw_width;
59  unsigned int redraw_height;
61 
62 /* API for Bitmap callbacks
63 */
64 typedef void* (*gif_bitmap_cb_create)(int width, int height);
65 typedef void (*gif_bitmap_cb_destroy)(void *bitmap);
66 typedef unsigned char* (*gif_bitmap_cb_get_buffer)(void *bitmap);
67 typedef void (*gif_bitmap_cb_set_opaque)(void *bitmap, bool opaque);
68 typedef bool (*gif_bitmap_cb_test_opaque)(void *bitmap);
69 typedef void (*gif_bitmap_cb_modified)(void *bitmap);
70 
71 /* The Bitmap callbacks function table
72 */
73 typedef struct gif_bitmap_callback_vt {
83 
84 /* The GIF animation data
85 */
86 typedef struct gif_animation {
88  unsigned char *gif_data;
89  unsigned int width;
90  unsigned int height;
91  unsigned int frame_count;
92  unsigned int frame_count_partial;
95  void *frame_image;
96  int loop_count;
100  unsigned int buffer_position;
101  unsigned int buffer_size;
102  unsigned int frame_holders;
103  unsigned int background_index;
104  unsigned int aspect_ratio;
105  unsigned int colour_table_size;
107  unsigned int *global_colour_table;
108  unsigned int *local_colour_table;
111  /* General LZW values. They are NO LONGER shared for all GIFs being decoded BECAUSE
112  THAT IS A TERRIBLE IDEA TO SAVE 10Kb or so per GIF.
113  */
114  unsigned char buf[4];
115  unsigned char *direct;
116 
117  int table[2][(1 << GIF_MAX_LZW)];
118  unsigned char stack[(1 << GIF_MAX_LZW) * 2];
119  unsigned char *stack_pointer;
126  bool get_done;
127 
128  /* Whether to clear the decoded image rather than plot
129  */
132 
133 void gif_create(gif_animation *gif, gif_bitmap_callback_vt *bitmap_callbacks);
134 gif_result gif_initialise(gif_animation *gif, size_t size, unsigned char *data);
135 gif_result gif_decode_frame(gif_animation *gif, unsigned int frame);
137 
138 #if defined(__cplusplus)
139 };
140 #endif
141 
142 #endif
gif_animation::background_index
unsigned int background_index
Definition: libnsgif.h:103
gif_initialise
gif_result gif_initialise(gif_animation *gif, size_t size, unsigned char *data)
GIF_MAX_LZW
#define GIF_MAX_LZW
Definition: libnsgif.h:40
gif_animation::aspect_ratio
unsigned int aspect_ratio
Definition: libnsgif.h:104
gif_animation::loop_count
int loop_count
Definition: libnsgif.h:96
gif_bitmap_callback_vt::bitmap_get_buffer
gif_bitmap_cb_get_buffer bitmap_get_buffer
Definition: libnsgif.h:76
gif_animation::frame_count_partial
unsigned int frame_count_partial
Definition: libnsgif.h:92
gif_animation::firstcode
int firstcode
Definition: libnsgif.h:124
gif_bitmap_cb_modified
void(* gif_bitmap_cb_modified)(void *bitmap)
Definition: libnsgif.h:69
gif_animation::height
unsigned int height
Definition: libnsgif.h:90
gif_animation::global_colours
bool global_colours
Definition: libnsgif.h:106
gif_frame::transparency
bool transparency
Definition: libnsgif.h:54
gif_animation::stack_pointer
unsigned char * stack_pointer
Definition: libnsgif.h:119
gif_animation::last_byte
int last_byte
Definition: libnsgif.h:123
gif_animation
struct gif_animation gif_animation
gif_bitmap_cb_create
void *(* gif_bitmap_cb_create)(int width, int height)
Definition: libnsgif.h:64
gif_frame
Definition: libnsgif.h:44
gif_animation::local_colour_table
unsigned int * local_colour_table
Definition: libnsgif.h:108
GIF_INSUFFICIENT_MEMORY
@ GIF_INSUFFICIENT_MEMORY
Definition: libnsgif.h:33
gif_bitmap_callback_vt::bitmap_modified
gif_bitmap_cb_modified bitmap_modified
Definition: libnsgif.h:81
gif_bitmap_callback_vt
Definition: libnsgif.h:73
gif_bitmap_callback_vt::bitmap_test_opaque
gif_bitmap_cb_test_opaque bitmap_test_opaque
Definition: libnsgif.h:80
gif_frame::redraw_y
unsigned int redraw_y
Definition: libnsgif.h:57
gif_animation::decoded_frame
int decoded_frame
Definition: libnsgif.h:94
gif_animation::max_code
int max_code
Definition: libnsgif.h:121
gif_decode_frame
gif_result gif_decode_frame(gif_animation *gif, unsigned int frame)
gif_frame::disposal_method
unsigned char disposal_method
Definition: libnsgif.h:53
gif_animation::stack
unsigned char stack[(1<< GIF_MAX_LZW) *2]
Definition: libnsgif.h:118
gif_animation::width
unsigned int width
Definition: libnsgif.h:89
gif_frame
struct gif_frame gif_frame
gif_animation::current_error
gif_result current_error
Definition: libnsgif.h:97
gif_frame::redraw_required
bool redraw_required
Definition: libnsgif.h:52
GIF_DATA_ERROR
@ GIF_DATA_ERROR
Definition: libnsgif.h:32
gif_animation::direct
unsigned char * direct
Definition: libnsgif.h:115
gif_result
gif_result
Definition: libnsgif.h:26
GIF_INSUFFICIENT_DATA
@ GIF_INSUFFICIENT_DATA
Definition: libnsgif.h:31
gif_bitmap_cb_set_opaque
void(* gif_bitmap_cb_set_opaque)(void *bitmap, bool opaque)
Definition: libnsgif.h:67
gif_animation::code_size
int code_size
Definition: libnsgif.h:120
GIF_END_OF_FRAME
@ GIF_END_OF_FRAME
Definition: libnsgif.h:35
gif_frame::transparency_index
unsigned char transparency_index
Definition: libnsgif.h:55
gif_finalise
void gif_finalise(gif_animation *gif)
gif_animation::max_code_size
int max_code_size
Definition: libnsgif.h:121
gif_bitmap_callback_vt
struct gif_bitmap_callback_vt gif_bitmap_callback_vt
gif_frame::redraw_width
unsigned int redraw_width
Definition: libnsgif.h:58
gif_animation::frame_image
void * frame_image
Definition: libnsgif.h:95
GIF_OK
@ GIF_OK
Definition: libnsgif.h:28
GIF_INSUFFICIENT_FRAME_DATA
@ GIF_INSUFFICIENT_FRAME_DATA
Definition: libnsgif.h:29
gif_bitmap_callback_vt::bitmap_set_opaque
gif_bitmap_cb_set_opaque bitmap_set_opaque
Definition: libnsgif.h:79
gif_bitmap_cb_destroy
void(* gif_bitmap_cb_destroy)(void *bitmap)
Definition: libnsgif.h:65
gif_animation::buffer_size
unsigned int buffer_size
Definition: libnsgif.h:101
gif_frame::virgin
bool virgin
Definition: libnsgif.h:50
gif_animation::table
int table[2][(1<< GIF_MAX_LZW)]
Definition: libnsgif.h:117
gif_animation
Definition: libnsgif.h:86
gif_animation::end_code
int end_code
Definition: libnsgif.h:122
gif_bitmap_callback_vt::bitmap_create
gif_bitmap_cb_create bitmap_create
Definition: libnsgif.h:74
gif_animation::bitmap_callbacks
gif_bitmap_callback_vt bitmap_callbacks
Definition: libnsgif.h:87
gif_animation::colour_table_size
unsigned int colour_table_size
Definition: libnsgif.h:105
gif_animation::zero_data_block
bool zero_data_block
Definition: libnsgif.h:125
gif_animation::frames
gif_frame * frames
Definition: libnsgif.h:93
gif_animation::curbit
int curbit
Definition: libnsgif.h:123
gif_frame::display
bool display
Definition: libnsgif.h:45
GIF_WORKING
@ GIF_WORKING
Definition: libnsgif.h:27
gif_bitmap_callback_vt::bitmap_destroy
gif_bitmap_cb_destroy bitmap_destroy
Definition: libnsgif.h:75
gif_animation::set_code_size
int set_code_size
Definition: libnsgif.h:120
GIF_FRAME_DATA_ERROR
@ GIF_FRAME_DATA_ERROR
Definition: libnsgif.h:30
gif_animation::global_colour_table
unsigned int * global_colour_table
Definition: libnsgif.h:107
gif_frame::redraw_x
unsigned int redraw_x
Definition: libnsgif.h:56
gif_bitmap_cb_test_opaque
bool(* gif_bitmap_cb_test_opaque)(void *bitmap)
Definition: libnsgif.h:68
gif_animation::buf
unsigned char buf[4]
Definition: libnsgif.h:114
GIF_FRAME_NO_DISPLAY
@ GIF_FRAME_NO_DISPLAY
Definition: libnsgif.h:34
gif_animation::get_done
bool get_done
Definition: libnsgif.h:126
gif_animation::frame_holders
unsigned int frame_holders
Definition: libnsgif.h:102
gif_animation::gif_data
unsigned char * gif_data
Definition: libnsgif.h:88
gif_bitmap_cb_get_buffer
unsigned char *(* gif_bitmap_cb_get_buffer)(void *bitmap)
Definition: libnsgif.h:66
gif_animation::lastbit
int lastbit
Definition: libnsgif.h:123
gif_animation::clear_image
bool clear_image
Definition: libnsgif.h:130
gif_frame::frame_pointer
unsigned int frame_pointer
Definition: libnsgif.h:49
gif_animation::oldcode
int oldcode
Definition: libnsgif.h:124
gif_create
void gif_create(gif_animation *gif, gif_bitmap_callback_vt *bitmap_callbacks)
gif_frame::frame_delay
unsigned int frame_delay
Definition: libnsgif.h:46
gif_frame::opaque
bool opaque
Definition: libnsgif.h:51
gif_frame::redraw_height
unsigned int redraw_height
Definition: libnsgif.h:59
gif_animation::clear_code
int clear_code
Definition: libnsgif.h:122
gif_animation::frame_count
unsigned int frame_count
Definition: libnsgif.h:91
gif_animation::buffer_position
unsigned int buffer_position
Definition: libnsgif.h:100