diff options
Diffstat (limited to 'readers.h')
-rw-r--r-- | readers.h | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/readers.h b/readers.h new file mode 100644 index 0000000..b54e5b6 --- /dev/null +++ b/readers.h @@ -0,0 +1,104 @@ +#include "list.h" + +enum ida_extype { + EXTRA_COMMENT = 1, + EXTRA_EXIF = 2, +}; + +struct ida_extra { + enum ida_extype type; + unsigned char *data; + unsigned int size; + struct ida_extra *next; +}; + +/* image data and metadata */ +struct ida_image_info { + unsigned int width; + unsigned int height; + unsigned int dpi; + unsigned int npages; + struct ida_extra *extra; + + int thumbnail; + unsigned int real_width; + unsigned int real_height; +}; + +struct ida_image { + struct ida_image_info i; + unsigned char *data; +}; +struct ida_rect { + int x1,y1,x2,y2; +}; + +/* load image files */ +struct ida_loader { + char *magic; + int moff; + int mlen; + char *name; + void* (*init)(FILE *fp, char *filename, unsigned int page, + struct ida_image_info *i, int thumbnail); + void (*read)(unsigned char *dst, unsigned int line, void *data); + void (*done)(void *data); + struct list_head list; +}; + +/* filter + operations */ +struct ida_op { + char *name; + void* (*init)(struct ida_image *src, struct ida_rect *rect, + struct ida_image_info *i, void *parm); + void (*work)(struct ida_image *src, struct ida_rect *rect, + unsigned char *dst, int line, + void *data); + void (*done)(void *data); +}; + +void* op_none_init(struct ida_image *src, struct ida_rect *rect, + struct ida_image_info *i, void *parm); +void op_none_done(void *data); +void op_free_done(void *data); + +/* ----------------------------------------------------------------------- */ +/* resolution */ + +#define res_cm_to_inch(x) ((x * 2540 + 5) / 1000) +#define res_m_to_inch(x) ((x * 2540 + 5) / 100000) +#define res_inch_to_m(x) ((x * 100000 + 5) / 2540) + +/* ----------------------------------------------------------------------- */ + +/* helpers */ +void load_bits_lsb(unsigned char *dst, unsigned char *src, int width, + int on, int off); +void load_bits_msb(unsigned char *dst, unsigned char *src, int width, + int on, int off); +void load_gray(unsigned char *dst, unsigned char *src, int width); +void load_graya(unsigned char *dst, unsigned char *src, int width); +void load_rgba(unsigned char *dst, unsigned char *src, int width); + +int load_add_extra(struct ida_image_info *info, enum ida_extype type, + unsigned char *data, unsigned int size); +struct ida_extra* load_find_extra(struct ida_image_info *info, + enum ida_extype type); +int load_free_extras(struct ida_image_info *info); + +/* ----------------------------------------------------------------------- */ + +/* other */ +extern int debug; +extern struct ida_loader ppm_loader; +extern struct ida_loader jpeg_loader; +extern struct ida_loader sane_loader; +extern struct ida_writer ps_writer; +extern struct ida_writer jpeg_writer; + +/* lists */ +#define __init __attribute__ ((constructor)) +#define __fini __attribute__ ((destructor)) + +extern struct list_head loaders; +void load_register(struct ida_loader *loader); |