2021SC@SDUSC
decoder.c分析
zbar_decoder_create方法,创建译码器,
初始化默认配置:
zbar_decoder_t *zbar_decoder_create ()
{
zbar_decoder_t *dcode = calloc(1, sizeof(zbar_decoder_t));
dcode->buf_alloc = BUFFER_MIN;
dcode->buf = malloc(dcode->buf_alloc);
#ifdef ENABLE_EAN
dcode->ean.enable = 1;
dcode->ean.ean13_config = ((1 << ZBAR_CFG_ENABLE) |
(1 << ZBAR_CFG_EMIT_CHECK));
dcode->ean.ean8_config = ((1 << ZBAR_CFG_ENABLE) |
(1 << ZBAR_CFG_EMIT_CHECK));
dcode->ean.upca_config = 1 << ZBAR_CFG_EMIT_CHECK;
dcode->ean.upce_config = 1 << ZBAR_CFG_EMIT_CHECK;
dcode->ean.isbn10_config = 1 << ZBAR_CFG_EMIT_CHECK;
dcode->ean.isbn13_config = 1 << ZBAR_CFG_EMIT_CHECK;
# ifdef FIXME_ADDON_SYNC
dcode->ean.ean2_config = 1 << ZBAR_CFG_ENABLE;
dcode->ean.ean5_config = 1 << ZBAR_CFG_ENABLE;
# endif
#endif
#ifdef ENABLE_I25
dcode->i25.config = 1 << ZBAR_CFG_ENABLE;
CFG(dcode->i25, ZBAR_CFG_MIN_LEN) = 6;
#endif
#ifdef ENABLE_DATABAR
dcode->databar.config = ((1 << ZBAR_CFG_ENABLE) |
(1 << ZBAR_CFG_EMIT_CHECK));
dcode->databar.config_exp = ((1 << ZBAR_CFG_ENABLE) |
(1 << ZBAR_CFG_EMIT_CHECK));
dcode->databar.csegs = 4;
dcode->databar.segs = calloc(4, sizeof(*dcode->databar.segs));
#endif
#ifdef ENABLE_CODABAR
dcode->codabar.config = 1 << ZBAR_CFG_ENABLE;
CFG(dcode->codabar, ZBAR_CFG_MIN_LEN) = 4;
#endif
#ifdef ENABLE_CODE39
dcode->code39.config = 1 << ZBAR_CFG_ENABLE;
CFG(dcode->code39, ZBAR_CFG_MIN_LEN) = 1;
#endif
#ifdef ENABLE_CODE93
dcode->code93.config = 1 << ZBAR_CFG_ENABLE;
#endif
#ifdef ENABLE_CODE128
dcode->code128.config = 1 << ZBAR_CFG_ENABLE;
#endif
#ifdef ENABLE_PDF417
dcode->pdf417.config = 1 << ZBAR_CFG_ENABLE;
#endif
#ifdef ENABLE_QRCODE
dcode->qrf.config = 1 << ZBAR_CFG_ENABLE;
#endif
zbar_decoder_reset(dcode);
return(dcode);
}
zbar_decoder_destroy方法,
删除译码器:
void zbar_decoder_destroy (zbar_decoder_t *dcode)
{
#ifdef ENABLE_DATABAR
if(dcode->databar.segs)
free(dcode->databar.segs);
#endif
if(dcode->buf)
free(dcode->buf);
free(dcode);
}
zbar_decoder_reset方法,
重置译码器:
void zbar_decoder_reset (zbar_decoder_t *dcode)
{
memset(dcode, 0, (long)&dcode->buf_alloc - (long)dcode);
#ifdef ENABLE_EAN
ean_reset(&dcode->ean);
#endif
#ifdef ENABLE_I25
i25_reset(&dcode->i25);
#endif
#ifdef ENABLE_DATABAR
databar_reset(&dcode->databar);
#endif
#ifdef ENABLE_CODABAR
codabar_reset(&dcode->codabar);
#endif
#ifdef ENABLE_CODE39
code39_reset(&dcode->code39);
#endif
#ifdef ENABLE_CODE93
code93_reset(&dcode->code93);
#endif
#ifdef ENABLE_CODE128
code128_reset(&dcode->code128);
#endif
#ifdef ENABLE_PDF417
pdf417_reset(&dcode->pdf417);
#endif
#ifdef ENABLE_QRCODE
qr_finder_reset(&dcode->qrf);
#endif
}