summaryrefslogtreecommitdiffstats
path: root/zbar/qrcode/qrdec.h
diff options
context:
space:
mode:
Diffstat (limited to 'zbar/qrcode/qrdec.h')
-rw-r--r--zbar/qrcode/qrdec.h171
1 files changed, 171 insertions, 0 deletions
diff --git a/zbar/qrcode/qrdec.h b/zbar/qrcode/qrdec.h
new file mode 100644
index 0000000..40cb204
--- /dev/null
+++ b/zbar/qrcode/qrdec.h
@@ -0,0 +1,171 @@
+/*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,
+ /*UTF-8.*/
+ QR_ECI_UTF8 = 26
+} 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;
+ /*Decoded "Application Indicator" for FNC1 in 2nd position.*/
+ int ai;
+ /*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.
+ For binary/byte mode QR codes: if configured with ZBAR_CFG_BINARY,
+ the bytes will be returned as is. Otherwise, the encoding will be
+ automatically determined and the data will be converted to that character set.
+ 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