summaryrefslogtreecommitdiffstats
path: root/ipecamera
diff options
context:
space:
mode:
authorSuren A. Chilingaryan <csa@dside.dyndns.org>2011-04-12 21:18:13 +0200
committerSuren A. Chilingaryan <csa@dside.dyndns.org>2011-04-12 21:18:13 +0200
commit5ccdcb53a36ed95f08a99863164dc2151e47c2af (patch)
treeb2363d7e9f7717157230ffa9c36dca05238cc8da /ipecamera
parent445d5db0183cf5dc98a33160857f22f012cacea6 (diff)
downloadipecamera-5ccdcb53a36ed95f08a99863164dc2151e47c2af.tar.gz
ipecamera-5ccdcb53a36ed95f08a99863164dc2151e47c2af.tar.bz2
ipecamera-5ccdcb53a36ed95f08a99863164dc2151e47c2af.tar.xz
ipecamera-5ccdcb53a36ed95f08a99863164dc2151e47c2af.zip
Allow access to implementation context and provide call to set size of internal buffer for IPECamera
Diffstat (limited to 'ipecamera')
-rw-r--r--ipecamera/image.c28
-rw-r--r--ipecamera/image.h2
-rw-r--r--ipecamera/ipecamera.h5
3 files changed, 33 insertions, 2 deletions
diff --git a/ipecamera/image.c b/ipecamera/image.c
index 8899627..969071d 100644
--- a/ipecamera/image.c
+++ b/ipecamera/image.c
@@ -38,6 +38,7 @@ struct ipecamera_s {
pcilib_register_t n_lines_reg, line_reg;
pcilib_register_t exposure_reg;
+ int started;
int buffer_size;
int buf_ptr;
@@ -140,6 +141,23 @@ void ipecamera_free(void *vctx) {
}
}
+int ipecamera_set_buffer_size(ipecamera_t *ctx, int size) {
+ if (ctx->started) {
+ pcilib_error("Can't change buffer size while grabbing");
+ return PCILIB_ERROR_INVALID_REQUEST;
+ }
+
+ if (ctx->size < 1) {
+ pcilib_error("The buffer size is too small");
+ return PCILIB_ERROR_INVALID_REQUEST;
+ }
+
+ ctx->buffer_size = size;
+
+ return 0;
+}
+
+
int ipecamera_reset(void *vctx) {
int err;
pcilib_t *pcilib;
@@ -222,6 +240,11 @@ int ipecamera_start(void *vctx, pcilib_event_t event_mask, pcilib_callback_t cb,
return PCILIB_ERROR_NOTINITIALIZED;
}
+ if (ctx->started) {
+ pcilib_error("IPECamera grabbing is already started");
+ return PCILIB_ERROR_INVALID_REQUEST;
+ }
+
ctx->cb = cb;
ctx->cb_user = user;
@@ -429,6 +452,11 @@ int ipecamera_trigger(void *vctx, pcilib_event_t event, size_t trigger_size, voi
pcilib_error("IPECamera imaging is not initialized");
return PCILIB_ERROR_NOTINITIALIZED;
}
+
+ if (!ctx->started) {
+ pcilib_error("Can't trigger while not grabbing is not started");
+ return PCILIB_ERROR_INVALID_REQUEST;
+ }
err = ipecamera_get_image(ctx);
if (!err) err = ctx->cb(event, ctx->event_id, ctx->cb_user);
diff --git a/ipecamera/image.h b/ipecamera/image.h
index ede964c..6b92524 100644
--- a/ipecamera/image.h
+++ b/ipecamera/image.h
@@ -6,8 +6,6 @@
#include "ipecamera.h"
#include "pcilib.h"
-typedef struct ipecamera_s ipecamera_t;
-
void *ipecamera_init(pcilib_t *pcilib);
void ipecamera_free(void *ctx);
diff --git a/ipecamera/ipecamera.h b/ipecamera/ipecamera.h
index d54dda2..49afe0c 100644
--- a/ipecamera/ipecamera.h
+++ b/ipecamera/ipecamera.h
@@ -1,6 +1,8 @@
#ifndef _IPECAMERA_H
#define _IPECAMERA_H
+typedef struct ipecamera_s ipecamera_t;
+
typedef struct {
int bpp; /*<< Bits per pixel (8, 16, or 32) as returned by IPECAMERA_IMAGE_DATA */
int real_bpp; /*<< Bits per pixel as returned by camera and IPECAMERA_PACKED_IMAGE */
@@ -20,4 +22,7 @@ typedef enum {
typedef uint16_t ipecamera_change_mask_t;
typedef uint16_t ipecamera_pixel_t;
+
+int ipecamera_set_buffer_size(ipecamera_t *ctx, int size);
+
#endif /* _IPECAMERA_H */