summaryrefslogtreecommitdiffstats
path: root/include/zbar/Processor.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/zbar/Processor.h')
-rw-r--r--include/zbar/Processor.h220
1 files changed, 220 insertions, 0 deletions
diff --git a/include/zbar/Processor.h b/include/zbar/Processor.h
new file mode 100644
index 0000000..4da36ce
--- /dev/null
+++ b/include/zbar/Processor.h
@@ -0,0 +1,220 @@
+//------------------------------------------------------------------------
+// Copyright 2007-2010 (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 _ZBAR_PROCESSOR_H_
+#define _ZBAR_PROCESSOR_H_
+
+/// @file
+/// Processor C++ wrapper
+
+#ifndef _ZBAR_H_
+#error "include zbar.h in your application, **not** zbar/Processor.h"
+#endif
+
+#include "Exception.h"
+#include "Image.h"
+
+namespace zbar
+{
+/// high-level self-contained image processor.
+/// processes video and images for barcodes, optionally displaying
+/// images to a library owned output window
+
+class Processor
+{
+public:
+ /// value to pass for no timeout.
+ static const int FOREVER = -1;
+
+ /// constructor.
+ Processor(bool threaded = true, const char *video_device = "",
+ bool enable_display = true)
+ {
+ _processor = zbar_processor_create(threaded);
+ if (!_processor)
+ throw std::bad_alloc();
+ init(video_device, enable_display);
+ }
+
+ ~Processor()
+ {
+ zbar_processor_destroy(_processor);
+ }
+
+ /// cast to C processor object.
+ operator zbar_processor_t *()
+ {
+ return (_processor);
+ }
+
+ /// opens a video input device and/or prepares to display output.
+ /// see zbar_processor_init()
+ void init(const char *video_device = "", bool enable_display = true)
+ {
+ if (zbar_processor_init(_processor, video_device, enable_display))
+ throw_exception(_processor);
+ }
+
+ /// setup result handler callback.
+ /// see zbar_processor_set_data_handler()
+ void set_handler(Image::Handler &handler)
+ {
+ zbar_processor_set_data_handler(_processor, handler, &handler);
+ }
+
+ /// set config for indicated symbology (0 for all) to specified value.
+ /// @see zbar_processor_set_config()
+ /// @since 0.4
+ int set_config(zbar_symbol_type_t symbology, zbar_config_t config,
+ int value)
+ {
+ return (
+ zbar_processor_set_config(_processor, symbology, config, value));
+ }
+
+ /// set config parsed from configuration string.
+ /// @see zbar_processor_parse_config()
+ /// @since 0.4
+ int set_config(std::string cfgstr)
+ {
+ return (zbar_processor_parse_config(_processor, cfgstr.c_str()));
+ }
+
+ /// retrieve the current state of the output window.
+ /// see zbar_processor_is_visible()
+ bool is_visible()
+ {
+ int rc = zbar_processor_is_visible(_processor);
+ if (rc < 0)
+ throw_exception(_processor);
+ return (rc != 0);
+ }
+
+ /// show or hide the display window owned by the library.
+ /// see zbar_processor_set_visible()
+ void set_visible(bool visible = true)
+ {
+ if (zbar_processor_set_visible(_processor, visible) < 0)
+ throw_exception(_processor);
+ }
+
+ /// control the processor in free running video mode.
+ /// see zbar_processor_set_active()
+ void set_active(bool active = true)
+ {
+ if (zbar_processor_set_active(_processor, active) < 0)
+ throw_exception(_processor);
+ }
+
+ /// retrieve decode results for last scanned image.
+ /// @see zbar_processor_get_results()
+ /// @since 0.10
+ const SymbolSet get_results() const
+ {
+ return (SymbolSet(zbar_processor_get_results(_processor)));
+ }
+
+ /// wait for input to the display window from the user.
+ /// see zbar_processor_user_wait()
+ int user_wait(int timeout = FOREVER)
+ {
+ int rc = zbar_processor_user_wait(_processor, timeout);
+ if (rc < 0)
+ throw_exception(_processor);
+ return (rc);
+ }
+
+ /// process from the video stream until a result is available.
+ /// see zbar_process_one()
+ void process_one(int timeout = FOREVER)
+ {
+ if (zbar_process_one(_processor, timeout) < 0)
+ throw_exception(_processor);
+ }
+
+ /// process the provided image for barcodes.
+ /// see zbar_process_image()
+ void process_image(Image &image)
+ {
+ if (zbar_process_image(_processor, image) < 0)
+ throw_exception(_processor);
+ }
+
+ /// process the provided image for barcodes.
+ /// see zbar_process_image()
+ Processor &operator<<(Image &image)
+ {
+ process_image(image);
+ return (*this);
+ }
+
+ /// force specific input and output formats for debug/testing.
+ /// see zbar_processor_force_format()
+ void force_format(unsigned long input_format, unsigned long output_format)
+ {
+ if (zbar_processor_force_format(_processor, input_format,
+ output_format))
+ throw_exception(_processor);
+ }
+
+ /// force specific input and output formats for debug/testing.
+ /// see zbar_processor_force_format()
+ void force_format(std::string &input_format, std::string &output_format)
+ {
+ unsigned long ifourcc = zbar_fourcc_parse(input_format.c_str());
+ unsigned long ofourcc = zbar_fourcc_parse(output_format.c_str());
+ if (zbar_processor_force_format(_processor, ifourcc, ofourcc))
+ throw_exception(_processor);
+ }
+
+ /// request a preferred size for the video image from the device.
+ /// see zbar_processor_request_size()
+ /// @since 0.6
+ void request_size(int width, int height)
+ {
+ zbar_processor_request_size(_processor, width, height);
+ }
+
+ /// request a preferred driver interface version for debug/testing.
+ /// see zbar_processor_request_interface()
+ /// @since 0.6
+ void request_interface(int version)
+ {
+ zbar_processor_request_interface(_processor, version);
+ }
+
+ /// request a preferred I/O mode for debug/testing.
+ /// see zbar_processor_request_iomode()
+ /// @since 0.7
+ void request_iomode(int iomode)
+ {
+ if (zbar_processor_request_iomode(_processor, iomode))
+ throw_exception(_processor);
+ }
+
+private:
+ zbar_processor_t *_processor;
+};
+
+} // namespace zbar
+
+#endif