123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /* quirc -- QR-code recognition library
- * Copyright (C) 2010-2012 Daniel Beer <dlbeer@gmail.com>
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
- #ifndef QUIRC_INTERNAL_H_
- #define QUIRC_INTERNAL_H_
- #include <quirc.h>
- #define QUIRC_PIXEL_WHITE 0
- #define QUIRC_PIXEL_BLACK 1
- #define QUIRC_PIXEL_REGION 2
- #ifndef QUIRC_MAX_REGIONS
- #define QUIRC_MAX_REGIONS 254
- #endif
- #define QUIRC_MAX_CAPSTONES 32
- #define QUIRC_MAX_GRIDS 8
- #define QUIRC_PERSPECTIVE_PARAMS 8
- #if QUIRC_MAX_REGIONS < UINT8_MAX
- #define QUIRC_PIXEL_ALIAS_IMAGE 1
- typedef uint8_t quirc_pixel_t;
- #elif QUIRC_MAX_REGIONS < UINT16_MAX
- #define QUIRC_PIXEL_ALIAS_IMAGE 0
- typedef uint16_t quirc_pixel_t;
- #else
- #error "QUIRC_MAX_REGIONS > 65534 is not supported"
- #endif
- struct quirc_region {
- struct quirc_point seed;
- int count;
- int capstone;
- };
- struct quirc_capstone {
- int ring;
- int stone;
- struct quirc_point corners[4];
- struct quirc_point center;
- double c[QUIRC_PERSPECTIVE_PARAMS];
- int qr_grid;
- };
- struct quirc_grid {
- /* Capstone indices */
- int caps[3];
- /* Alignment pattern region and corner */
- int align_region;
- struct quirc_point align;
- /* Timing pattern endpoints */
- struct quirc_point tpep[3];
- int hscan;
- int vscan;
- /* Grid size and perspective transform */
- int grid_size;
- double c[QUIRC_PERSPECTIVE_PARAMS];
- };
- struct quirc {
- uint8_t *image;
- quirc_pixel_t *pixels;
- int w;
- int h;
- int num_regions;
- struct quirc_region regions[QUIRC_MAX_REGIONS];
- int num_capstones;
- struct quirc_capstone capstones[QUIRC_MAX_CAPSTONES];
- int num_grids;
- struct quirc_grid grids[QUIRC_MAX_GRIDS];
- };
- /************************************************************************
- * QR-code version information database
- */
- #define QUIRC_MAX_VERSION 40
- #define QUIRC_MAX_ALIGNMENT 7
- struct quirc_rs_params {
- int bs; /* Small block size */
- int dw; /* Small data words */
- int ns; /* Number of small blocks */
- };
- struct quirc_version_info {
- int data_bytes;
- int apat[QUIRC_MAX_ALIGNMENT];
- struct quirc_rs_params ecc[4];
- };
- extern const struct quirc_version_info quirc_version_db[QUIRC_MAX_VERSION + 1];
- #endif
|