OPNGLIB
PNG optimization library
 All Data Structures Files Functions Typedefs Pages
opngcore.h
Go to the documentation of this file.
1 
14 #ifndef OPNGLIB_OPNGCORE_H
15 #define OPNGLIB_OPNGCORE_H
16 
17 #include <limits.h>
18 #include <stddef.h>
19 #include "optk/bits.h"
20 
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 
27 /*** Types ***/
28 
38 typedef struct opng_optimizer /*opaque*/ opng_optimizer_t;
39 
52 typedef struct opng_image /*opaque*/ opng_image_t;
53 
61 {
62  /* general options */
63  int backup;
64  int out;
65  int fix;
66  int force;
67  int no_clobber;
68  int no_create;
69  int preserve;
70  int snip;
71  int use_stdin;
72  int use_stdout;
73  int verbose;
74 
75  /* optimization options */
76  int interlace;
77  int nb, nc, nm, np, nz;
78  int optim_level;
79  int paranoid;
80  optk_bits_t filter_set;
81  optk_bits_t zcompr_level_set;
82  optk_bits_t zmem_level_set;
83  optk_bits_t zstrategy_set;
84  int zwindow_bits;
85 };
86 
87 
88 /*** Optimizer ***/
89 
96 
110 int
112  const struct opng_options *user_options);
113 
129 int
131  const char *in_fname,
132  const char *out_fname,
133  const char *out_dirname);
134 
135 #if 0 /* not implemented */
136 
146 int
147 opng_optimize_image(opng_optimizer_t *optimizer,
148  const opng_image_t image,
149  const char *out_fname);
150 #endif
151 
157 void
159 
160 
161 /*** Logging ***/
162 
168 enum
169 {
170  OPNG_MSG_ALL = 0,
171  OPNG_MSG_DEBUG = 10,
172  OPNG_MSG_INFO = 20,
173  OPNG_MSG_WARNING = 30,
174  OPNG_MSG_ERROR = 40,
175  OPNG_MSG_CRITICAL = 50,
176  OPNG_MSG_OFF = (unsigned int)(-1),
177  OPNG_MSG_DEFAULT = OPNG_MSG_OFF
178 };
179 
183 enum
184 {
185  OPNG_MSGFMT_RAW = 0, /* do not format messages, just print them raw */
186  OPNG_MSGFMT_UNIX = 1, /* format messages in Unix-ish style */
187  OPNG_MSGFMT_FANCY = 2, /* format messages in a more eye-catching style */
188  OPNG_MSGFMT_DEFAULT = OPNG_MSGFMT_UNIX
189 };
190 
197 void
198 opng_set_logging_name(const char *program_name);
199 
206 void
207 opng_set_logging_level(unsigned int level);
208 
215 void
216 opng_set_logging_format(int format);
217 
226 int
227 opng_flush_logging(unsigned int level);
228 
241 int
242 opng_print_message(unsigned int level, const char *fname, const char *message);
243 
248 int
249 opng_debugf(const char *format, ...);
250 
255 int
256 opng_printf(const char *format, ...);
257 
261 int
262 opng_warning(const char *fname, const char *message);
263 
268 int
269 opng_error(const char *fname, const char *message, const char *submessage);
270 
271 
272 /*** PNG encoding ***/
273 
277 enum
278 {
279  OPNG_OPTIM_LEVEL_MIN = -2,
280  OPNG_OPTIM_LEVEL_MAX = 6,
281  OPNG_OPTIM_LEVEL_FASTEST = -2,
282  OPNG_OPTIM_LEVEL_FAST = -1,
283  OPNG_OPTIM_LEVEL_DEFAULT = 2,
284 
285  OPNG_FILTER_MIN = 0,
286  OPNG_FILTER_MAX = 5,
287  OPNG_FILTER_SET_MASK = (1 << (5+1)) - (1 << 0) /* 0x003f */,
288 
289  OPNG_ZCOMPR_LEVEL_MIN = 1,
290  OPNG_ZCOMPR_LEVEL_MAX = 9,
291  OPNG_ZCOMPR_LEVEL_SET_MASK = (1 << (9+1)) - (1 << 1) /* 0x03fe */,
292 
293  OPNG_ZMEM_LEVEL_MIN = 1,
294  OPNG_ZMEM_LEVEL_MAX = 9,
295  OPNG_ZMEM_LEVEL_SET_MASK = (1 << (9+1)) - (1 << 1) /* 0x03fe */,
296 
297  OPNG_ZSTRATEGY_MIN = 0,
298  OPNG_ZSTRATEGY_MAX = 3,
299  OPNG_ZSTRATEGY_SET_MASK = (1 << (3+1)) - (1 << 0) /* 0x000f */,
300 
301  /* Note:
302  * There are no -zw iterations. They appear to offer no advantage over -zc.
303  */
304  OPNG_ZWINDOW_BITS_MIN = 8,
305  OPNG_ZWINDOW_BITS_MAX = 15,
306  OPNG_ZWINDOW_BITS_SET_MASK = (1 << (15+1)) - (1 << 8) /* 0xff00 */
307 };
308 
309 
310 /*** Miscellanea ***/
311 
316 {
317  const char *library_name;
318  const char *library_version;
319 };
320 
324 const struct opng_version_info *
326 
327 
328 #ifdef __cplusplus
329 } /* extern "C" */
330 #endif
331 
332 
333 #endif /* OPNGLIB_OPNGCORE_H */