2021SC@SDUSC
decoder.c,config.c分析
zbar_decoder_set_config方法,将指示符号的配置(0表示全部)设置为指定值,成功返回0,失败返回非0(配置不适用于指定的符号,或值超出范围)。
int zbar_decoder_set_config (zbar_decoder_t *dcode,
zbar_symbol_type_t sym,
zbar_config_t cfg,
int val)
{
if(sym == ZBAR_NONE) {
static const zbar_symbol_type_t all[] = {
ZBAR_EAN13, ZBAR_EAN2, ZBAR_EAN5, ZBAR_EAN8,
ZBAR_UPCA, ZBAR_UPCE, ZBAR_ISBN10, ZBAR_ISBN13,
ZBAR_I25, ZBAR_DATABAR, ZBAR_DATABAR_EXP, ZBAR_CODABAR,
ZBAR_CODE39, ZBAR_CODE93, ZBAR_CODE128, ZBAR_QRCODE,
ZBAR_PDF417, 0
};
const zbar_symbol_type_t *symp;
for(symp = all; *symp; symp++)
zbar_decoder_set_config(dcode, *symp, cfg, val);
return(0);
}
if(cfg >= 0 && cfg < ZBAR_CFG_NUM)
return(decoder_set_config_bool(dcode, sym, cfg, val));
else if(cfg >= ZBAR_CFG_MIN_LEN && cfg <= ZBAR_CFG_MAX_LEN)
return(decoder_set_config_int(dcode, sym, cfg, val));
else
return(1);
}
zbar_decoder_parse_config方法,包含zbar_parse_config方法和zbar_decoder_set_config方法,使用zbar_parse_config解析配置字符串,并使用zbar_decoder_set_config应用于解码器,成功返回0,失败返回非0。
static inline int zbar_decoder_parse_config (zbar_decoder_t *decoder,
const char *config_string)
{
zbar_symbol_type_t sym;
zbar_config_t cfg;
int val;
return(zbar_parse_config(config_string, &sym, &cfg, &val) ||
zbar_decoder_set_config(decoder, sym, cfg, val));
}
zbar_parse_config方法(位于config.c)分析格式为“[symbology.]config[=value]”的配置字符串。需满足配置必须与识别的名称之一匹配。符号(如果存在)必须与一个可识别的名称匹配。如果未指定符号,则将其设置为0。如果未指定该值,则将其设置为1。如果配置解析成功,则返回0,否则返回1。由于方法代码数过多不做展示。
int zbar_parse_config (const char *cfgstr,
zbar_symbol_type_t *sym,
zbar_config_t *cfg,
int *val)
zbar_decoder_set_handler方法,设置数据处理程序回调,在zbar_decode_width()返回非零值之前,解码器将调用已注册的函数,传递NULL值以禁用回调,返回结果为以前注册的处理程序。
zbar_decoder_handler_t *
zbar_decoder_set_handler (zbar_decoder_t *dcode,
zbar_decoder_handler_t *handler)
{
zbar_decoder_handler_t *result = dcode->handler;
dcode->handler = handler;
return(result);
}