ZBar bar code reader . http://zbar.sourceforge.net/ ZBar is licensed under the GNU LGPL 2.1 to enable development of both open source and commercial projects.

Dependents:   GR-PEACH_Camera_in_barcode levkov_ov7670

LICENSE

The ZBar Bar Code Reader is Copyright (C) 2007-2009 Jeff Brown <spadix@users.sourceforge.net> The QR Code reader is Copyright (C) 1999-2009 Timothy B. Terriberry <tterribe@xiph.org>

You can redistribute this library and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.

This library 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 General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

ISAAC is based on the public domain implementation by Robert J. Jenkins Jr., and is itself public domain.

Portions of the bit stream reader are copyright (C) The Xiph.Org Foundation 1994-2008, and are licensed under a BSD-style license.

The Reed-Solomon decoder is derived from an implementation (C) 1991-1995 Henry Minsky (hqm@ua.com, hqm@ai.mit.edu), and is licensed under the LGPL with permission.

Revision:
0:56c5742b9e2b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/zbar/qrcode/qrdec.h	Tue Apr 19 02:00:37 2016 +0000
@@ -0,0 +1,169 @@
+/*Copyright (C) 2008-2009  Timothy B. Terriberry (tterribe@xiph.org)
+  You can redistribute this library and/or modify it under the terms of the
+   GNU Lesser General Public License as published by the Free Software
+   Foundation; either version 2.1 of the License, or (at your option) any later
+   version.*/
+#if !defined(_qrdec_H)
+# define _qrdec_H (1)
+
+#include <zbar.h>
+
+typedef struct qr_code_data_entry qr_code_data_entry;
+typedef struct qr_code_data       qr_code_data;
+typedef struct qr_code_data_list  qr_code_data_list;
+
+typedef enum qr_mode{
+  /*Numeric digits ('0'...'9').*/
+  QR_MODE_NUM=1,
+  /*Alphanumeric characters ('0'...'9', 'A'...'Z', plus the punctuation
+     ' ', '$', '%', '*', '+', '-', '.', '/', ':').*/
+  QR_MODE_ALNUM,
+  /*Structured-append header.*/
+  QR_MODE_STRUCT,
+  /*Raw 8-bit bytes.*/
+  QR_MODE_BYTE,
+  /*FNC1 marker (for more info, see http://www.mecsw.com/specs/uccean128.html).
+    In the "first position" data is formatted in accordance with GS1 General
+     Specifications.*/
+  QR_MODE_FNC1_1ST,
+  /*Mode 6 reserved?*/
+  /*Extended Channel Interpretation code.*/
+  QR_MODE_ECI=7,
+  /*SJIS kanji characters.*/
+  QR_MODE_KANJI,
+  /*FNC1 marker (for more info, see http://www.mecsw.com/specs/uccean128.html).
+    In the "second position" data is formatted in accordance with an industry
+     application as specified by AIM Inc.*/
+  QR_MODE_FNC1_2ND
+}qr_mode;
+
+/*Check if a mode has a data buffer associated with it.
+  Currently this is only modes with exactly one bit set.*/
+#define QR_MODE_HAS_DATA(_mode) (!((_mode)&(_mode)-1))
+
+/*ECI may be used to signal a character encoding for the data.*/
+typedef enum qr_eci_encoding{
+  /*GLI0 is like CP437, but the encoding is reset at the beginning of each
+     structured append symbol.*/
+  QR_ECI_GLI0,
+  /*GLI1 is like ISO8859_1, but the encoding is reset at the beginning of each
+     structured append symbol.*/
+  QR_ECI_GLI1,
+  /*The remaining encodings do not reset at the start of the next structured
+     append symbol.*/
+  QR_ECI_CP437,
+  /*Western European.*/
+  QR_ECI_ISO8859_1,
+  /*Central European.*/
+  QR_ECI_ISO8859_2,
+  /*South European.*/
+  QR_ECI_ISO8859_3,
+  /*North European.*/
+  QR_ECI_ISO8859_4,
+  /*Cyrillic.*/
+  QR_ECI_ISO8859_5,
+  /*Arabic.*/
+  QR_ECI_ISO8859_6,
+  /*Greek.*/
+  QR_ECI_ISO8859_7,
+  /*Hebrew.*/
+  QR_ECI_ISO8859_8,
+  /*Turkish.*/
+  QR_ECI_ISO8859_9,
+  /*Nordic.*/
+  QR_ECI_ISO8859_10,
+  /*Thai.*/
+  QR_ECI_ISO8859_11,
+  /*There is no ISO/IEC 8859-12.*/
+  /*Baltic rim.*/
+  QR_ECI_ISO8859_13=QR_ECI_ISO8859_11+2,
+  /*Celtic.*/
+  QR_ECI_ISO8859_14,
+  /*Western European with euro.*/
+  QR_ECI_ISO8859_15,
+  /*South-Eastern European (with euro).*/
+  QR_ECI_ISO8859_16,
+  /*ECI 000019 is reserved?*/
+  /*Shift-JIS.*/
+  QR_ECI_SJIS=20
+}qr_eci_encoding;
+
+
+/*A single unit of parsed QR code data.*/
+struct qr_code_data_entry{
+  /*The mode of this data block.*/
+  qr_mode mode;
+  union{
+    /*Data buffer for modes that have one.*/
+    struct{
+      unsigned char *buf;
+      int            len;
+    }data;
+    /*Decoded "Extended Channel Interpretation" data.*/
+    unsigned eci;
+    /*Structured-append header data.*/
+    struct{
+      unsigned char sa_index;
+      unsigned char sa_size;
+      unsigned char sa_parity;
+    }sa;
+  }payload;
+};
+
+
+
+/*Low-level QR code data.*/
+struct qr_code_data{
+  /*The decoded data entries.*/
+  qr_code_data_entry *entries;
+  int                 nentries;
+  /*The code version (1...40).*/
+  unsigned char       version;
+  /*The ECC level (0...3, corresponding to 'L', 'M', 'Q', and 'H').*/
+  unsigned char       ecc_level;
+  /*Structured-append information.*/
+  /*The index of this code in the structured-append group.
+    If sa_size is zero, this is undefined.*/
+  unsigned char       sa_index;
+  /*The size of the structured-append group, or 0 if there was no S-A header.*/
+  unsigned char       sa_size;
+  /*The parity of the entire structured-append group.
+    If sa_size is zero, this is undefined.*/
+  unsigned char       sa_parity;
+  /*The parity of this code.
+    If sa_size is zero, this is undefined.*/
+  unsigned char       self_parity;
+  /*An approximate bounding box for the code.
+    Points appear in the order up-left, up-right, down-left, down-right,
+     relative to the orientation of the QR code.*/
+  qr_point            bbox[4];
+};
+
+
+struct qr_code_data_list{
+  qr_code_data *qrdata;
+  int           nqrdata;
+  int           cqrdata;
+};
+
+
+/*Extract symbol data from a list of QR codes and attach to the image.
+  All text is converted to UTF-8.
+  Any structured-append group that does not have all of its members is decoded
+   as ZBAR_PARTIAL with ZBAR_PARTIAL components for the discontinuities.
+  Note that isolated members of a structured-append group may be decoded with
+   the wrong character set, since the correct setting cannot be propagated
+   between codes.
+  Return: The number of symbols which were successfully extracted from the
+   codes; this will be at most the number of codes.*/
+int qr_code_data_list_extract_text(const qr_code_data_list *_qrlist,
+                                   zbar_image_scanner_t *iscn,
+                                   zbar_image_t *img);
+
+
+/*TODO: Parse DoCoMo standard barcode data formats.
+  See http://www.nttdocomo.co.jp/english/service/imode/make/content/barcode/function/application/
+   for details.*/
+
+#endif
+