diff options
-rw-r--r-- | src/callbacks.c | 2 | ||||
-rw-r--r-- | src/v4l.c | 27 | ||||
-rw-r--r-- | src/v4l.h | 2 |
3 files changed, 27 insertions, 4 deletions
diff --git a/src/callbacks.c b/src/callbacks.c index 732b79c..cd72a19 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -766,7 +766,7 @@ void zoom_change(GtkScale *sc1, cam_t *cam) { cam->zoom = 256 * (int)gtk_range_get_value((GtkRange *) sc1); - v4l2_set_control(cam->dev, V4L2_CID_ZOOM_ABSOLUTE, cam->zoom); + v4l2_set_control(cam->dev, cam->zoom_cid, cam->zoom); } void colour_change(GtkScale *sc1, cam_t *cam) @@ -274,6 +274,29 @@ int camera_cap(cam_t *cam) return 0; } +static int v4l_get_zoom(cam_t *cam) +{ + int i; + + cam->zoom_cid = V4L2_CID_ZOOM_ABSOLUTE; + i = v4l2_get_control(cam->dev, cam->zoom_cid); + if (i >= 0) + return i; + + cam->zoom_cid = V4L2_CID_ZOOM_RELATIVE; + i = v4l2_get_control(cam->dev, cam->zoom_cid); + if (i >= 0) + return i; + + cam->zoom_cid = V4L2_CID_ZOOM_CONTINUOUS; + i = v4l2_get_control(cam->dev, cam->zoom_cid); + if (i >= 0) + return i; + + cam->zoom_cid = -1; + return -1; +} + void get_pic_info(cam_t *cam) { int i; @@ -297,8 +320,8 @@ void get_pic_info(cam_t *cam) } else { cam->colour = -1; } - i = v4l2_get_control(cam->dev, V4L2_CID_ZOOM_ABSOLUTE); - if (i >= 0) { + i = v4l_get_zoom(cam); + if (cam->zoom_cid) { cam->zoom = i; if (cam->debug == TRUE) printf("zoom = %d\n", cam->zoom); @@ -55,7 +55,7 @@ typedef struct camera { float scale; CamoImageSize size; char name[32]; - int contrast, brightness, whiteness, colour, hue, zoom, bytesperline; + int contrast, brightness, whiteness, colour, hue, zoom, zoom_cid, bytesperline; unsigned int pixformat; int frame_number; |