Open Broadcaster Software
Free, open source software for live streaming and recording
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
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;
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
int clear_code
Definition: libnsgif.h:122
void(* gif_bitmap_cb_modified)(void *bitmap)
Definition: libnsgif.h:69
int code_size
Definition: libnsgif.h:120
bool opaque
Definition: libnsgif.h:51
Definition: libnsgif.h:33
unsigned char * stack_pointer
Definition: libnsgif.h:119
void(* gif_bitmap_cb_set_opaque)(void *bitmap, bool opaque)
Definition: libnsgif.h:67
Definition: libnsgif.h:34
unsigned int aspect_ratio
Definition: libnsgif.h:104
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
int curbit
Definition: libnsgif.h:123
unsigned char transparency_index
Definition: libnsgif.h:55
unsigned char * gif_data
Definition: libnsgif.h:88
bool global_colours
Definition: libnsgif.h:106
unsigned int redraw_y
Definition: libnsgif.h:57
bool(* gif_bitmap_cb_test_opaque)(void *bitmap)
Definition: libnsgif.h:68
void *(* gif_bitmap_cb_create)(int width, int height)
Definition: libnsgif.h:64
void * frame_image
Definition: libnsgif.h:95
unsigned char buf[4]
Definition: libnsgif.h:114
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)
unsigned char *(* gif_bitmap_cb_get_buffer)(void *bitmap)
Definition: libnsgif.h:66
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
Definition: libnsgif.h:27
bool clear_image
Definition: libnsgif.h:130
int table[2][(1<< GIF_MAX_LZW)]
Definition: libnsgif.h:117
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
int max_code
Definition: libnsgif.h:121
int firstcode
Definition: libnsgif.h:124
gif_bitmap_cb_test_opaque bitmap_test_opaque
Definition: libnsgif.h:80
gif_bitmap_cb_create bitmap_create
Definition: libnsgif.h:74
int last_byte
Definition: libnsgif.h:123
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
unsigned char stack[(1<< GIF_MAX_LZW)*2]
Definition: libnsgif.h:118
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 get_done
Definition: libnsgif.h:126
void(* gif_bitmap_cb_destroy)(void *bitmap)
Definition: libnsgif.h:65