Beispiel #1
0
void qrcode_check (SDL_Surface *screen, char *payload) {
	struct quirc *qr;
	int count = 0;
	int i = 0;
	qr = quirc_new();
	if (!qr) {
		perror("couldn't allocate QR decoder");
		return;
	}
	if (quirc_resize(qr, screen->w, screen->h) < 0) {
		perror("couldn't allocate QR buffer");
		return;
	}
	rgb32_to_luma(screen->pixels, screen->pitch, screen->w, screen->h, quirc_begin(qr, NULL, NULL), screen->w);
	quirc_end(qr);
	count = quirc_count(qr);
	for (i = 0; i < count; i++) {
		struct quirc_code code;
		struct quirc_data data;
		quirc_decode_error_t err;
		quirc_extract(qr, i, &code);
		err = quirc_decode(&code, &data);
		if (! err) {
			strcpy(payload, (char *)data.payload);
		}
	}
	quirc_destroy(qr);
}
Beispiel #2
0
static int main_loop(struct camera *cam,
		     struct quirc *q, struct mjpeg_decoder *mj)
{
	struct dthash dt;

	dthash_init(&dt, printer_timeout);

	for (;;) {
		int w, h;
		int i, count;
		uint8_t *buf = quirc_begin(q, &w, &h);
		const struct camera_buffer *head;
		const struct camera_parms *parms = camera_get_parms(cam);

		if (camera_dequeue_one(cam) < 0) {
			perror("camera_dequeue_one");
			return -1;
		}

		head = camera_get_head(cam);

		switch (parms->format) {
		case CAMERA_FORMAT_MJPEG:
			mjpeg_decode_gray(mj, head->addr, head->size,
					  buf, w, w, h);
			break;

		case CAMERA_FORMAT_YUYV:
			yuyv_to_luma(head->addr, w * 2, w, h, buf, w);
			break;

		default:
			fprintf(stderr, "Unknown frame format\n");
			return -1;
		}

		if (camera_enqueue_all(cam) < 0) {
			perror("camera_enqueue_all");
			return -1;
		}

		quirc_end(q);

		count = quirc_count(q);
		for (i = 0; i < count; i++) {
			struct quirc_code code;
			struct quirc_data data;

			quirc_extract(q, i, &code);
			if (!quirc_decode(&code, &data))
				print_data(&data, &dt, want_verbose);
		}
	}
}
Beispiel #3
0
static int main_loop(struct camera *cam,
		     struct quirc *q, struct mjpeg_decoder *mj)
{
	struct dthash dt;

	dthash_init(&dt, printer_timeout);

	for (;;) {
		int w, h;
		int i, count;
		uint8_t *buf = quirc_begin(q, &w, &h);

		if (camera_update(cam) < 0)
			return -1;

		switch (cam->format) {
		case CAMERA_FORMAT_MJPEG:
			mjpeg_decode_gray(mj, cam->mem, cam->mem_len,
					  buf, w, w, h);
			break;

		case CAMERA_FORMAT_YUYV:
			yuyv_to_luma(cam->mem, w * 2, w, h, buf, w);
			break;
		}

		quirc_end(q);

		count = quirc_count(q);
		for (i = 0; i < count; i++) {
			struct quirc_code code;
			struct quirc_data data;

			quirc_extract(q, i, &code);
			if (!quirc_decode(&code, &data))
				print_data(&data, &dt, want_verbose);
		}
	}
}
Beispiel #4
0
static int scan_file(const char *path, const char *filename,
		     struct result_info *info)
{
	int len = strlen(filename);
	const char *ext;
	clock_t start;
	clock_t total_start;
	int ret;
	int i;

	while (len >= 0 && filename[len] != '.')
		len--;
	ext = filename + len + 1;
	if (!(toupper(ext[0] == 'j') && toupper(ext[1] == 'p') &&
	      (toupper(ext[2] == 'e') || toupper(ext[2] == 'g'))))
		return 0;

	total_start = start = clock();
	ret = load_jpeg(decoder, path);
	info->load_time = clock() - start;

	if (ret < 0) {
		fprintf(stderr, "%s: load_jpeg failed\n", filename);
		return -1;
	}

	start = clock();
	quirc_end(decoder);
	info->identify_time = clock() - start;

	info->id_count = quirc_count(decoder);
	for (i = 0; i < info->id_count; i++) {
		struct quirc_code code;
		struct quirc_data data;

		quirc_extract(decoder, i, &code);

		if (!quirc_decode(&code, &data))
			info->decode_count++;
	}

	info->total_time += clock() - total_start;

	printf("  %-30s: %5ld %5ld %5ld %5d %5d\n", filename,
	       CLOCK_TO_MS(info->load_time),
	       CLOCK_TO_MS(info->identify_time),
	       CLOCK_TO_MS(info->total_time),
	       info->id_count, info->decode_count);

	if (want_cell_dump || want_verbose) {
		for (i = 0; i < info->id_count; i++) {
			struct quirc_code code;

			quirc_extract(decoder, i, &code);
			if (want_cell_dump) {
				dump_cells(&code);
				printf("\n");
			}

			if (want_verbose) {
				struct quirc_data data;
				quirc_decode_error_t err =
					quirc_decode(&code, &data);

				if (err) {
					printf("  ERROR: %s\n\n",
					       quirc_strerror(err));
				} else {
					printf("  Decode successful:\n");
					dump_data(&data);
					printf("\n");
				}
			}
		}
	}

	info->file_count = 1;
	return 1;
}