/* quirc -- QR-code recognition library * Copyright (C) 2010-2012 Daniel Beer * * 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 #include #include "quirc.h" #define QUIRC_ASSERT(a) assert(a) #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 (QUIRC_MAX_CAPSTONES * 2) #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]; /* Grid size and perspective transform */ int grid_size; double c[QUIRC_PERSPECTIVE_PARAMS]; }; struct quirc_flood_fill_vars { int y; int right; int left_up; int left_down; }; 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]; size_t num_flood_fill_vars; struct quirc_flood_fill_vars *flood_fill_vars; uint8_t outer_alloc; }; /************************************************************************ * 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