/* quirc -- QR-code recognition library * Copyright (C) 2010-2014 Daniel Beer * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef CAMERA_H_ #define CAMERA_H_ #include #define CAMERA_MAX_BUFFERS 32 typedef enum { CAMERA_FORMAT_UNKNOWN = 0, CAMERA_FORMAT_MJPEG, CAMERA_FORMAT_YUYV } camera_format_t; struct camera_parms { camera_format_t format; int width; int height; int pitch_bytes; int interval_n; int interval_d; }; struct camera_buffer { void *addr; size_t size; unsigned long offset; }; struct camera { int fd; struct camera_parms parms; struct camera_buffer buf_desc[CAMERA_MAX_BUFFERS]; int buf_count; /* Stream state */ int s_on; int s_qc; int s_qhead; }; /* Initialize/destroy a camera. No resources are allocated. */ void camera_init(struct camera *c); void camera_destroy(struct camera *c); /* Open/close the camera device */ int camera_open(struct camera *c, const char *path, int target_w, int target_h, int tr_n, int tr_d); void camera_close(struct camera *c); static inline int camera_get_fd(const struct camera *c) { return c->fd; } static inline const struct camera_parms *camera_get_parms (const struct camera *c) { return &c->parms; } /* Map buffers */ int camera_map(struct camera *c, int buf_count); void camera_unmap(struct camera *c); static inline int camera_get_buf_count(const struct camera *c) { return c->buf_count; } /* Switch streaming on/off */ int camera_on(struct camera *c); void camera_off(struct camera *c); /* Enqueue/dequeue buffers (count = 0 means enqueue all) */ int camera_enqueue_all(struct camera *c); int camera_dequeue_one(struct camera *c); /* Fetch the oldest dequeued buffer */ static inline const struct camera_buffer *camera_get_head (const struct camera *c) { return &c->buf_desc[(c->s_qhead + c->buf_count - 1) % c->buf_count]; } #endif