883f44d8b0
Add outer_alloc flag Add int quirc_set_image_buffer(struct quirc* q, uint8_t* image_buffer); call quirc_set_image_buffer(struct quirc* q, uint8_t* image_buffer); before int quirc_resize(struct quirc *q, int w, int h); tested on esp32s2 (esp-idf 4.2)
131 lines
3.1 KiB
C
131 lines
3.1 KiB
C
/* 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 <assert.h>
|
|
#include <stdlib.h>
|
|
|
|
#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
|