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); }
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); } } }
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 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); } } }