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,
36 } gif_result;
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;
60 } gif_frame;
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;
120  int code_size, set_code_size;
121  int max_code, max_code_size;
122  int clear_code, end_code;
123  int curbit, lastbit, last_byte;
124  int firstcode, oldcode;
126  bool get_done;
127 
128  /* Whether to clear the decoded image rather than plot
129  */
131 } gif_animation;
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);
136 void gif_finalise(gif_animation *gif);
137 
138 #if defined(__cplusplus)
139 };
140 #endif
141 
142 #endif
#define GIF_MAX_LZW
Definition: libnsgif.h:40
bool zero_data_block
Definition: libnsgif.h:125
int set_code_size
Definition: libnsgif.h:120
bool opaque
Definition: libnsgif.h:51
Definition: libnsgif.h:33
unsigned char * stack_pointer
Definition: libnsgif.h:119
Definition: libnsgif.h:34
unsigned int aspect_ratio
Definition: libnsgif.h:104
void(* gif_bitmap_cb_destroy)(void *bitmap)
Definition: libnsgif.h:65
unsigned int frame_count
Definition: libnsgif.h:91
gif_bitmap_cb_destroy bitmap_destroy
Definition: libnsgif.h:75
int loop_count
Definition: libnsgif.h:96
int lastbit
Definition: libnsgif.h:123
gif_bitmap_cb_modified bitmap_modified
Definition: libnsgif.h:81
gif_result current_error
Definition: libnsgif.h:97
struct gif_bitmap_callback_vt gif_bitmap_callback_vt
unsigned char disposal_method
Definition: libnsgif.h:53
Definition: libnsgif.h:44
unsigned char transparency_index
Definition: libnsgif.h:55
unsigned char * gif_data
Definition: libnsgif.h:88
void(* gif_bitmap_cb_set_opaque)(void *bitmap, bool opaque)
Definition: libnsgif.h:67
bool global_colours
Definition: libnsgif.h:106
void(* gif_bitmap_cb_modified)(void *bitmap)
Definition: libnsgif.h:69
unsigned int redraw_y
Definition: libnsgif.h:57
void * frame_image
Definition: libnsgif.h:95
bool transparency
Definition: libnsgif.h:54
Definition: libnsgif.h:30
unsigned int background_index
Definition: libnsgif.h:103
unsigned int width
Definition: libnsgif.h:89
unsigned int * local_colour_table
Definition: libnsgif.h:108
unsigned int colour_table_size
Definition: libnsgif.h:105
struct gif_animation gif_animation
gif_bitmap_cb_get_buffer bitmap_get_buffer
Definition: libnsgif.h:76
void gif_create(gif_animation *gif, gif_bitmap_callback_vt *bitmap_callbacks)
Definition: libnsgif.h:29
Definition: libnsgif.h:31
int end_code
Definition: libnsgif.h:122
struct gif_frame gif_frame
bool redraw_required
Definition: libnsgif.h:52
int max_code_size
Definition: libnsgif.h:121
unsigned char * direct
Definition: libnsgif.h:115
int oldcode
Definition: libnsgif.h:124
gif_bitmap_callback_vt bitmap_callbacks
Definition: libnsgif.h:87
Definition: libnsgif.h:32
gif_result gif_decode_frame(gif_animation *gif, unsigned int frame)
gif_frame * frames
Definition: libnsgif.h:93
bool virgin
Definition: libnsgif.h:50
int decoded_frame
Definition: libnsgif.h:94
Definition: libnsgif.h:28
unsigned int redraw_width
Definition: libnsgif.h:58
unsigned int frame_count_partial
Definition: libnsgif.h:92
gif_result
Definition: libnsgif.h:26
gif_bitmap_cb_set_opaque bitmap_set_opaque
Definition: libnsgif.h:79
unsigned int height
Definition: libnsgif.h:90
unsigned int buffer_size
Definition: libnsgif.h:101
unsigned int * global_colour_table
Definition: libnsgif.h:107
unsigned char *(* gif_bitmap_cb_get_buffer)(void *bitmap)
Definition: libnsgif.h:66
Definition: libnsgif.h:27
bool clear_image
Definition: libnsgif.h:130
Definition: libnsgif.h:35
gif_result gif_initialise(gif_animation *gif, size_t size, unsigned char *data)
Definition: libnsgif.h:86
unsigned int redraw_height
Definition: libnsgif.h:59
Definition: libnsgif.h:73
gif_bitmap_cb_test_opaque bitmap_test_opaque
Definition: libnsgif.h:80
gif_bitmap_cb_create bitmap_create
Definition: libnsgif.h:74
unsigned int redraw_x
Definition: libnsgif.h:56
unsigned int frame_pointer
Definition: libnsgif.h:49
unsigned int frame_delay
Definition: libnsgif.h:46
bool display
Definition: libnsgif.h:45
void *(* gif_bitmap_cb_create)(int width, int height)
Definition: libnsgif.h:64
void gif_finalise(gif_animation *gif)
#define bool
Definition: vc_stdbool.h:5
unsigned int frame_holders
Definition: libnsgif.h:102
unsigned int buffer_position
Definition: libnsgif.h:100
bool(* gif_bitmap_cb_test_opaque)(void *bitmap)
Definition: libnsgif.h:68
bool get_done
Definition: libnsgif.h:126