summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthias Vogelgesang <matthias.vogelgesang@ipe.fzk.de>2011-03-18 09:37:35 +0100
committerMatthias Vogelgesang <matthias.vogelgesang@ipe.fzk.de>2011-03-18 09:37:35 +0100
commit40d450c588a9f2548e6ae677d4d448bdec5d6a6a (patch)
tree024dd76eca988ccc2c194bc70084aa223089fc53 /src
parent406445e7694222e16da863908d93c87c27778ec3 (diff)
downloaduca-40d450c588a9f2548e6ae677d4d448bdec5d6a6a.tar.gz
uca-40d450c588a9f2548e6ae677d4d448bdec5d6a6a.tar.bz2
uca-40d450c588a9f2548e6ae677d4d448bdec5d6a6a.tar.xz
uca-40d450c588a9f2548e6ae677d4d448bdec5d6a6a.zip
Pass registered user data to callback
Diffstat (limited to 'src')
-rw-r--r--src/cameras/dummy.c9
-rw-r--r--src/uca-cam.h10
2 files changed, 14 insertions, 5 deletions
diff --git a/src/cameras/dummy.c b/src/cameras/dummy.c
index 53351f8..60dea7f 100644
--- a/src/cameras/dummy.c
+++ b/src/cameras/dummy.c
@@ -130,7 +130,7 @@ static void *uca_dummy_grab_thread(void *arg)
while (dc->thread_running) {
uca_dummy_memcpy(cam, dc->buffer);
- cam->callback(cam->current_frame, dc->buffer);
+ cam->callback(cam->current_frame, dc->buffer, cam->user_callback);
cam->current_frame++;
usleep(sleep_time);
}
@@ -233,10 +233,12 @@ uint32_t uca_dummy_stop_recording(struct uca_camera *cam)
return UCA_NO_ERROR;
}
-uint32_t uca_dummy_register_callback(struct uca_camera *cam, uca_cam_grab_callback cb)
+uint32_t uca_dummy_register_callback(struct uca_camera *cam, uca_cam_grab_callback cb, void *user)
{
- if (cam->callback == NULL)
+ if (cam->callback == NULL) {
cam->callback = cb;
+ cam->user_callback = user;
+ }
else
return UCA_ERR_GRABBER_CALLBACK_ALREADY_REGISTERED;
@@ -277,6 +279,7 @@ uint32_t uca_dummy_init(struct uca_camera **cam, struct uca_grabber *grabber)
uca->current_frame = 0;
uca->grabber = NULL;
uca->callback = NULL;
+ uca->user_callback = NULL;
struct dummy_cam *dummy_cam = (struct dummy_cam *) malloc(sizeof(struct dummy_cam));
dummy_cam->bitdepth = 8;
diff --git a/src/uca-cam.h b/src/uca-cam.h
index ca80ec9..4ccb07e 100644
--- a/src/uca-cam.h
+++ b/src/uca-cam.h
@@ -137,8 +137,10 @@ typedef uint32_t (*uca_cam_stop_recording) (struct uca_camera *cam);
* \param[in] image_number Current frame number
*
* \param[in] buffer Image data
+ *
+ * \param[in] user User data registered in uca_cam_register_callback()
*/
-typedef void (*uca_cam_grab_callback) (uint32_t image_number, void *buffer);
+typedef void (*uca_cam_grab_callback) (uint32_t image_number, void *buffer, void *user);
/**
* Register callback for given frame grabber. To actually start receiving
@@ -147,8 +149,10 @@ typedef void (*uca_cam_grab_callback) (uint32_t image_number, void *buffer);
* \param[in] grabber The grabber for which the callback should be installed
*
* \param[in] cb Callback function for when a frame arrived
+ *
+ * \param[in] user User data that is passed to the callback function
*/
-typedef uint32_t (*uca_cam_register_callback) (struct uca_camera *cam, uca_cam_grab_callback cb);
+typedef uint32_t (*uca_cam_register_callback) (struct uca_camera *cam, uca_cam_grab_callback cb, void *user);
/**
* \brief Grab one image from the camera
@@ -224,7 +228,9 @@ typedef struct uca_camera {
uint32_t frame_width; /**< current frame width */
uint32_t frame_height; /**< current frame height */
uint32_t current_frame; /**< last grabbed frame number */
+
uca_cam_grab_callback callback;
+ void *user_callback; /**< user data for callback */
void *user; /**< private user data to be used by the camera driver */
} uca_camera_t;