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); }
void cv_to_quirc(struct quirc *q, Mat& img){ uint8_t *image; quirc_resize(q, img.cols, img.rows); image = quirc_begin(q, NULL, NULL); for (int y = 0; y < img.rows; y++) { uint8_t *row_pointer = image + y * img.cols; for(int x = 0; x < img.cols; x++){ row_pointer[x] = img.at<uint8_t>(y, x); } } }
static int run_scanner(void) { struct quirc *qr; struct camera cam; struct mjpeg_decoder mj; int ret; if (camera_init(&cam, camera_path, video_width, video_height) < 0) return -1; camera_set_gain(&cam, gain_request); qr = quirc_new(); if (!qr) { perror("couldn't allocate QR decoder"); goto fail_qr; } if (quirc_resize(qr, cam.width, cam.height) < 0) { perror("couldn't allocate QR buffer"); goto fail_qr_resize; } mjpeg_init(&mj); ret = main_loop(&cam, qr, &mj); mjpeg_free(&mj); quirc_destroy(qr); camera_free(&cam); return 0; fail_qr_resize: quirc_destroy(qr); fail_qr: camera_free(&cam); return 0; }
static int run_scanner(void) { struct quirc *qr; struct camera cam; struct mjpeg_decoder mj; const struct camera_parms *parms; camera_init(&cam); if (camera_open(&cam, camera_path, video_width, video_height, 25, 1) < 0) { perror("camera_open"); goto fail_qr; } if (camera_map(&cam, 8) < 0) { perror("camera_map"); goto fail_qr; } if (camera_on(&cam) < 0) { perror("camera_on"); goto fail_qr; } if (camera_enqueue_all(&cam) < 0) { perror("camera_enqueue_all"); goto fail_qr; } parms = camera_get_parms(&cam); qr = quirc_new(); if (!qr) { perror("couldn't allocate QR decoder"); goto fail_qr; } if (quirc_resize(qr, parms->width, parms->height) < 0) { perror("couldn't allocate QR buffer"); goto fail_qr_resize; } mjpeg_init(&mj); if (main_loop(&cam, qr, &mj) < 0) goto fail_main_loop; mjpeg_free(&mj); quirc_destroy(qr); camera_destroy(&cam); return 0; fail_main_loop: mjpeg_free(&mj); fail_qr_resize: quirc_destroy(qr); fail_qr: camera_destroy(&cam); return -1; }