mirror of
https://github.com/zint/zint
synced 2024-11-16 20:57:25 +13:00
Remove unnecessary estimate of binary bitlength
This commit is contained in:
parent
30272dd955
commit
241bcedaa1
77
backend/qr.c
77
backend/qr.c
@ -129,71 +129,6 @@ static void define_mode(char mode[],const int jisdata[], const size_t length,con
|
||||
}
|
||||
}
|
||||
|
||||
/* Make an estimate (worst case scenario) of how long the binary string will be */
|
||||
static int estimate_binary_length(const char mode[], const size_t length,const int gs1,const int eci) {
|
||||
size_t i;
|
||||
int count = 0;
|
||||
char current = 0;
|
||||
int a_count = 0;
|
||||
int n_count = 0;
|
||||
|
||||
if (gs1) {
|
||||
count += 4;
|
||||
}
|
||||
|
||||
if (eci != 3) {
|
||||
count += 12;
|
||||
}
|
||||
|
||||
for (i = 0; i < length; i++) {
|
||||
if (mode[i] != current) {
|
||||
switch (mode[i]) {
|
||||
case 'K': count += 12 + 4;
|
||||
current = 'K';
|
||||
break;
|
||||
case 'B': count += 16 + 4;
|
||||
current = 'B';
|
||||
break;
|
||||
case 'A': count += 13 + 4;
|
||||
current = 'A';
|
||||
a_count = 0;
|
||||
break;
|
||||
case 'N': count += 14 + 4;
|
||||
current = 'N';
|
||||
n_count = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (mode[i]) {
|
||||
case 'K': count += 13;
|
||||
break;
|
||||
case 'B': count += 8;
|
||||
break;
|
||||
case 'A':
|
||||
a_count++;
|
||||
if ((a_count & 1) == 0) {
|
||||
count += 5; // 11 in total
|
||||
a_count = 0;
|
||||
} else
|
||||
count += 6;
|
||||
break;
|
||||
case 'N':
|
||||
n_count++;
|
||||
if ((n_count % 3) == 0) {
|
||||
count += 3; // 10 in total
|
||||
n_count = 0;
|
||||
} else if ((n_count & 1) == 0)
|
||||
count += 3; // 7 in total
|
||||
else
|
||||
count += 4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static void qr_bscan(char *binary,const int data,int h) {
|
||||
for (; h; h >>= 1) {
|
||||
strcat(binary, data & h ? "1" : "0");
|
||||
@ -1530,7 +1465,7 @@ int qr_code(struct zint_symbol *symbol, const unsigned char source[], size_t len
|
||||
}
|
||||
|
||||
define_mode(mode, jisdata, length, gs1);
|
||||
est_binlen = estimate_binary_length(mode, length, gs1, symbol->eci);
|
||||
est_binlen = getBinaryLength(40, mode, jisdata, length, gs1, symbol->eci);
|
||||
|
||||
ecc_level = LEVEL_L;
|
||||
max_cw = 2956;
|
||||
@ -2963,7 +2898,7 @@ int microqr(struct zint_symbol *symbol, const unsigned char source[], size_t len
|
||||
/* For UPNQR the symbol size and error correction capacity is fixed */
|
||||
int upnqr(struct zint_symbol *symbol, const unsigned char source[], int length) {
|
||||
int i, j, est_binlen;
|
||||
int ecc_level, version, max_cw, target_binlen, blocks, size;
|
||||
int ecc_level, version, target_binlen, blocks, size;
|
||||
int bitmask, error_number;
|
||||
|
||||
#ifndef _MSC_VER
|
||||
@ -3009,12 +2944,12 @@ int upnqr(struct zint_symbol *symbol, const unsigned char source[], int length)
|
||||
}
|
||||
|
||||
symbol->eci = 4;
|
||||
est_binlen = estimate_binary_length(mode, length, 0, symbol->eci);
|
||||
est_binlen = getBinaryLength(15, mode, jisdata, length, 0, symbol->eci);
|
||||
|
||||
ecc_level = LEVEL_M;
|
||||
max_cw = 2334;
|
||||
|
||||
if (est_binlen > (8 * max_cw)) {
|
||||
strcpy(symbol->errtxt, "Input too long for selected error correction level (E61)");
|
||||
if (est_binlen > 3320) {
|
||||
strcpy(symbol->errtxt, "Input too long for selected symbol");
|
||||
return ZINT_ERROR_TOO_LONG;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user