diff --git a/meta-digi-dey/recipes-digi/dey-examples/files/v4l2_test/v4l2_common.c b/meta-digi-dey/recipes-digi/dey-examples/files/v4l2_test/v4l2_common.c index 48e1aa776..77c36425a 100644 --- a/meta-digi-dey/recipes-digi/dey-examples/files/v4l2_test/v4l2_common.c +++ b/meta-digi-dey/recipes-digi/dey-examples/files/v4l2_test/v4l2_common.c @@ -303,6 +303,24 @@ int v4l2_set_frame_rate(int fd, int framerate) return ioctl(fd, VIDIOC_S_PARM, &streamparm); } +/* Set the specified capture mode on the V4L2 device */ +int v4l2_set_capture_mode(int fd, int capturemode) +{ + struct v4l2_streamparm streamparm; + + memset(&streamparm, 0, sizeof(streamparm)); + streamparm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + if (ioctl(fd, VIDIOC_G_PARM, &streamparm) < 0) { + log("get frame rate failed\n"); + return FALSE; + } + + /* Set capture mode */ + streamparm.parm.capture.capturemode = capturemode; + + return ioctl(fd, VIDIOC_S_PARM, &streamparm); +} + /* Return true if the output specified by name is supported by the device, * false or error otherwise */ int v4l2_check_output(int fd, char *name) diff --git a/meta-digi-dey/recipes-digi/dey-examples/files/v4l2_test/v4l2_defs.h b/meta-digi-dey/recipes-digi/dey-examples/files/v4l2_test/v4l2_defs.h index f33daa73a..cb0625a6a 100644 --- a/meta-digi-dey/recipes-digi/dey-examples/files/v4l2_test/v4l2_defs.h +++ b/meta-digi-dey/recipes-digi/dey-examples/files/v4l2_test/v4l2_defs.h @@ -123,6 +123,7 @@ typedef struct { int left; int height; int width; + int capturemode; int non_destructive; int camera_framerate; } OPTIONS; diff --git a/meta-digi-dey/recipes-digi/dey-examples/files/v4l2_test/v4l2_preview_test.c b/meta-digi-dey/recipes-digi/dey-examples/files/v4l2_test/v4l2_preview_test.c index 17b2ac8cb..64a7ee596 100644 --- a/meta-digi-dey/recipes-digi/dey-examples/files/v4l2_test/v4l2_preview_test.c +++ b/meta-digi-dey/recipes-digi/dey-examples/files/v4l2_test/v4l2_preview_test.c @@ -62,6 +62,7 @@ static void printUsage(FILE * fd) " uses the overlay background framebuffer.\n" " -r RGB565 (default is UYVY)\n" " -u YUYV (default is UYVY)\n" + " -c capture mode (default is 0)\n" " -v Verbose mode\n" " -? This help\n\n"); } @@ -102,6 +103,9 @@ static void *v4l2_camera_thread(void *pargs) /* Reset rotation to ROTATE_NONE */ v4l2_set_rotate(args->fd_in, 0); + /* Set capture mode */ + v4l2_set_capture_mode(args->fd_in, args->options.capturemode); + /* Set size in overlay */ v4l2_set_format_overlay(args->fd_in, args->options.top, args->options.left, @@ -365,11 +369,12 @@ int main(int argc, char **argv) args.options.width = 640; args.options.height = 480; args.options.format = V4L2_PIX_FMT_UYVY; + args.options.capturemode = 0; strcpy(args.fb_device, "/dev/fb0"); strcpy(args.v4l2_device, "/dev/video0"); /* Input processing */ - while ((opt = getopt(argc, argv, "w:d:h:l:t:o:xvru?")) != -1) { + while ((opt = getopt(argc, argv, "w:d:h:l:t:o:xc:vru?")) != -1) { switch (opt) { case '?': printUsage(stderr); @@ -404,6 +409,9 @@ int main(int argc, char **argv) case 'x': args.options.non_destructive = 1; break; + case 'c': + args.options.capturemode = atoi(optarg); + break; case 'v': verbose = 1; break;