Example #1
0
void test_calcN2(void)
{
	unsigned char frame[64];
	int width;
	int demerit;
	int x, y;

	testStart("Test mask evaluation (2x2 block check)");
	width = 4;
	for(y = 0; y < width; y++) {
		for(x = 0; x < width; x++) {
			frame[y * width + x] = ((x & 2) ^ (y & 2)) >> 1;
		}
	}
	demerit = Mask_calcN2(width, frame);
	assert_equal(demerit, N2 * 4, "Calculation of N2 demerit is wrong: %d, expected %d", demerit, N2 * 4);

	width = 4;
	for(y = 0; y < width; y++) {
		for(x = 0; x < width; x++) {
			frame[y * width + x] = (((x + 1) & 2) ^ (y & 2)) >> 1;
		}
	}
	demerit = Mask_calcN2(width, frame);
	assert_equal(demerit, N2 * 2, "Calculation of N2 demerit is wrong: %d, expected %d", demerit, N2 * 2);

	width = 6;
	for(y = 0; y < width; y++) {
		for(x = 0; x < width; x++) {
			frame[y * width + x] = (x / 3) ^ (y / 3);
		}
	}
	demerit = Mask_calcN2(width, frame);
	assert_equal(demerit, N2 * 16, "Calculation of N2 demerit is wrong: %d, expected %d", demerit, N2 * 16);

	testFinish();
}
Example #2
0
static int Mask_evaluateSymbol(int width, unsigned char *frame)
{
	int x, y;
	int demerit = 0;
	int runLength[QRSPEC_WIDTH_MAX + 1];
	int length;

	demerit += Mask_calcN2(width, frame);

	for(y=0; y<width; y++) {
		length = Mask_calcRunLength(width, frame + y * width, 0, runLength);
		demerit += Mask_calcN1N3(length, runLength);
	}

	for(x=0; x<width; x++) {
		length = Mask_calcRunLength(width, frame + x, 1, runLength);
		demerit += Mask_calcN1N3(length, runLength);
	}

	return demerit;
}