aboutsummaryrefslogtreecommitdiffstats
path: root/readers.h
diff options
context:
space:
mode:
Diffstat (limited to 'readers.h')
-rw-r--r--readers.h104
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);