diff options
Diffstat (limited to 'zbar/processor.h')
-rw-r--r-- | zbar/processor.h | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/zbar/processor.h b/zbar/processor.h new file mode 100644 index 0000000..a8289e0 --- /dev/null +++ b/zbar/processor.h @@ -0,0 +1,128 @@ +/*------------------------------------------------------------------------ + * Copyright 2007-2009 (c) Jeff Brown <spadix@users.sourceforge.net> + * + * This file is part of the ZBar Bar Code Reader. + * + * The ZBar Bar Code Reader is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * The ZBar Bar Code Reader is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser Public License for more details. + * + * You should have received a copy of the GNU Lesser Public License + * along with the ZBar Bar Code Reader; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301 USA + * + * http://sourceforge.net/projects/zbar + *------------------------------------------------------------------------*/ +#ifndef _PROCESSOR_H_ +#define _PROCESSOR_H_ + +#include "config.h" +#ifdef HAVE_INTTYPES_H +#include <inttypes.h> +#endif +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include <zbar.h> +#include "error.h" +#include "event.h" +#include "thread.h" + +/* max time to wait for input before looking for the next frame. + * only used in unthreaded mode with blocking (non-pollable) video. + * NB subject to precision of whatever timer is in use + */ +#define MAX_INPUT_BLOCK 15 /*ms*/ + +/* platform specific state wrapper */ +typedef struct processor_state_s processor_state_t; + +/* specific notification tracking */ +typedef struct proc_waiter_s { + struct proc_waiter_s *next; + zbar_event_t notify; + zbar_thread_id_t requester; + unsigned events; +} proc_waiter_t; + +/* high-level API events */ +#define EVENT_INPUT 0x01 /* user input */ +#define EVENT_OUTPUT 0x02 /* decoded output data available */ +#define EVENT_CANCELED 0x80 /* cancellation flag */ +#define EVENTS_PENDING (EVENT_INPUT | EVENT_OUTPUT) + +struct zbar_processor_s { + errinfo_t err; /* error reporting */ + const void *userdata; /* application data */ + + zbar_video_t *video; /* input video device abstraction */ + zbar_window_t *window; /* output window abstraction */ + zbar_image_scanner_t *scanner; /* barcode scanner */ + + zbar_image_data_handler_t *handler; /* application data handler */ + + unsigned req_width, req_height; /* application requested video size */ + int req_intf, req_iomode; /* application requested interface */ + uint32_t force_input; /* force input format (debug) */ + uint32_t force_output; /* force format conversion (debug) */ + + int input; /* user input status */ + + /* state flags */ + int threaded; + int visible; /* output window mapped to display */ + int streaming; /* video enabled */ + int dumping; /* debug image dump */ + + void *display; /* X display connection */ + unsigned long xwin; /* toplevel window */ + + zbar_thread_t input_thread; /* video input handler */ + zbar_thread_t video_thread; /* window event handler */ + + const zbar_symbol_set_t *syms; /* previous decode results */ + + zbar_mutex_t mutex; /* shared data mutex */ + + /* API serialization lock */ + int lock_level; + zbar_thread_id_t lock_owner; + proc_waiter_t *wait_head, *wait_tail, *wait_next; + proc_waiter_t *free_waiter; + + processor_state_t *state; + + int is_dbus_enabled; /* dbus enabled flag */ +}; + +/* processor lock API */ +extern int _zbar_processor_lock(zbar_processor_t *); +extern int _zbar_processor_unlock(zbar_processor_t *, int); +extern void _zbar_processor_notify(zbar_processor_t *, unsigned); +extern int _zbar_processor_wait(zbar_processor_t *, unsigned, zbar_timer_t *); + +/* platform API */ +extern int _zbar_processor_init(zbar_processor_t *); +extern int _zbar_processor_cleanup(zbar_processor_t *); +extern int _zbar_processor_input_wait(zbar_processor_t *, zbar_event_t *, int); +extern int _zbar_processor_enable(zbar_processor_t *); + +extern int _zbar_process_image(zbar_processor_t *, zbar_image_t *); +extern int _zbar_processor_handle_input(zbar_processor_t *, int); + +/* windowing platform API */ +extern int _zbar_processor_open(zbar_processor_t *, char *, unsigned, unsigned); +extern int _zbar_processor_close(zbar_processor_t *); +extern int _zbar_processor_set_visible(zbar_processor_t *, int); +extern int _zbar_processor_set_size(zbar_processor_t *, unsigned, unsigned); +extern int _zbar_processor_invalidate(zbar_processor_t *); + +#endif |