zbar_decoder_new_scan方法,对译码器进行软复位,标记新扫描过程的开始,清除任何符号内状态并将颜色重置为::ZBAR_SPACE;保留任何部分解码的符号状态:
void zbar_decoder_new_scan (zbar_decoder_t *dcode)
{
memset(dcode->w, 0, sizeof(dcode->w));
dcode->lock = 0;
dcode->idx = 0;
dcode->s6 = 0;
#ifdef ENABLE_EAN
ean_new_scan(&dcode->ean);
#endif
#ifdef ENABLE_I25
i25_reset(&dcode->i25);
#endif
#ifdef ENABLE_DATABAR
databar_new_scan(&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
}
一系列get、set方法,zbar_decoder_get_color方法检索传递给zbar_decode_width()的下一个元素的颜色。
zbar_decoder_get_data方法检索最后解码的数据,返回数据字符串,如果没有可用的新数据,则返回NULL,返回的数据缓冲区归库所有,内容仅在从zbar_decode_width返回非0和下一个库调用之间有效。
zbar_decoder_get_data_length方法检索二进制数据的长度,返回解码数据的长度,如果没有新数据,则返回0。
zbar_decoder_get_type检索上次解码的符号类型。返回类型或::ZBAR_NONE (如果没有新数据可用)。
zbar_decoder_get_modifiers方法检索最后一个解码符号的修改器标志,返回位掩码,指示解码期间检测到的特征。
zbar_decoder_get_direction方法检索最后一个解码方向,正向返回1,反向返回-1,如果解码方向未知或不适用,则返回0。
zbar_color_t zbar_decoder_get_color (const zbar_decoder_t *dcode)
{
return(get_color(dcode));
}
const char *zbar_decoder_get_data (const zbar_decoder_t *dcode)
{
return((char*)dcode->buf);
}
unsigned int zbar_decoder_get_data_length (const zbar_decoder_t *dcode)
{
return(dcode->buflen);
}
int zbar_decoder_get_direction (const zbar_decoder_t *dcode)
{
return(dcode->direction);
}
void zbar_decoder_set_userdata (zbar_decoder_t *dcode,
void *userdata)
{
dcode->userdata = userdata;
}
void *zbar_decoder_get_userdata (const zbar_decoder_t *dcode)
{
return(dcode->userdata);
}
zbar_symbol_type_t zbar_decoder_get_type (const zbar_decoder_t *dcode)
{
return(dcode->type);
}
unsigned int zbar_decoder_get_modifiers (const zbar_decoder_t *dcode)
{
return(dcode->modifiers);
}
decoder_get_configp方法,根据条形码类型,获取译码器的config参数:
static inline const unsigned int*
decoder_get_configp (const zbar_decoder_t *dcode,
zbar_symbol_type_t sym)
{
const unsigned int *config;
switch(sym) {
#ifdef ENABLE_EAN
case ZBAR_EAN13:
config = &dcode->ean.ean13_config;
break;
case ZBAR_EAN2:
config = &dcode->ean.ean2_config;
break;
case ZBAR_EAN5:
config = &dcode->ean.ean5_config;
break;
case ZBAR_EAN8:
config = &dcode->ean.ean8_config;
break;
case ZBAR_UPCA:
config = &dcode->ean.upca_config;
break;
case ZBAR_UPCE:
config = &dcode->ean.upce_config;
break;
case ZBAR_ISBN10:
config = &dcode->ean.isbn10_config;
break;
case ZBAR_ISBN13:
config = &dcode->ean.isbn13_config;
break;
#endif
#ifdef ENABLE_I25
case ZBAR_I25:
config = &dcode->i25.config;
break;
#endif
#ifdef ENABLE_DATABAR
case ZBAR_DATABAR:
config = &dcode->databar.config;
break;
case ZBAR_DATABAR_EXP:
config = &dcode->databar.config_exp;
break;
#endif
#ifdef ENABLE_CODABAR
case ZBAR_CODABAR:
config = &dcode->codabar.config;
break;
#endif
#ifdef ENABLE_CODE39
case ZBAR_CODE39:
config = &dcode->code39.config;
break;
#endif
#ifdef ENABLE_CODE93
case ZBAR_CODE93:
config = &dcode->code93.config;
break;
#endif
#ifdef ENABLE_CODE128
case ZBAR_CODE128:
config = &dcode->code128.config;
break;
#endif
#ifdef ENABLE_PDF417
case ZBAR_PDF417:
config = &dcode->pdf417.config;
break;
#endif
#ifdef ENABLE_QRCODE
case ZBAR_QRCODE:
config = &dcode->qrf.config;
break;
#endif
default:
config = NULL;
}
return(config);
}