From d65b93fc668100fef378669e9d4aee2145bbe2c4 Mon Sep 17 00:00:00 2001 From: tth Date: Mon, 2 Sep 2019 04:31:27 +0200 Subject: [PATCH] size of capture is now an option --- v4l2/grabvidseq.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/v4l2/grabvidseq.c b/v4l2/grabvidseq.c index 24f7a1d..97ea611 100644 --- a/v4l2/grabvidseq.c +++ b/v4l2/grabvidseq.c @@ -36,9 +36,6 @@ #define SAVE_AS_PNM 0 #define SAVE_AS_FIMG 0 -#define WIDTH 1920 -#define HEIGHT 1080 - /* --------------------------------------------------------------------- */ #define CLEAR(x) memset(&(x), 0, sizeof(x)) @@ -78,6 +75,7 @@ puts("\t-n NNN\t\thow many frames ?"); puts("\t-O ./\t\tset Output dir"); puts("\t-o bla\t\tset output filename"); puts("\t-p NNN\t\tperiod in seconds"); +puts("\t-s WxH\t\tsize of capture"); puts("\t-v\t\tincrease verbosity"); exit(0); } @@ -102,6 +100,8 @@ int foo, bar; double period = 10.0; /* delai entre les captures */ int nbre_capt = 1; /* nombre de captures */ int opt; +int width = 640; +int height = 480; double t_final; char *dest_dir = "."; /* no trailing slash */ char *outfile = "out.pnm"; @@ -110,7 +110,7 @@ char *outfile = "out.pnm"; FloatImg grab, cumul; #endif -while ((opt = getopt(argc, argv, "d:hn:o:O:p:v")) != -1) { +while ((opt = getopt(argc, argv, "d:hn:o:O:p:s:v")) != -1) { switch(opt) { case 'd': dev_name = optarg; break; case 'h': help(0); break; @@ -118,6 +118,7 @@ while ((opt = getopt(argc, argv, "d:hn:o:O:p:v")) != -1) { case 'O': dest_dir = optarg; break; case 'o': outfile = optarg; break; case 'p': period = 1e6*atof(optarg); break; + case 's': parse_WxH(optarg, &width, &height); break; case 'v': verbosity++; break; } } @@ -125,6 +126,7 @@ while ((opt = getopt(argc, argv, "d:hn:o:O:p:v")) != -1) { if (verbosity) { fprintf(stderr, "running %s pid=%d\n", argv[0], getpid()); fprintf(stderr, "period is %.3f microseconds\n", period); + fprintf(stderr, "framesize is %dx%d\n", width, height); } fd = v4l2_open(dev_name, O_RDWR | O_NONBLOCK, 0); @@ -135,8 +137,8 @@ if (fd < 0) { CLEAR(fmt); fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; -fmt.fmt.pix.width = WIDTH; -fmt.fmt.pix.height = HEIGHT; +fmt.fmt.pix.width = width; +fmt.fmt.pix.height = height; fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB24; fmt.fmt.pix.field = V4L2_FIELD_INTERLACED; xioctl(fd, VIDIOC_S_FMT, &fmt); @@ -144,7 +146,7 @@ if (fmt.fmt.pix.pixelformat != V4L2_PIX_FMT_RGB24) { printf("Libv4l didn't accept RGB24 format. Can't proceed.\n"); exit(EXIT_FAILURE); } -if ((fmt.fmt.pix.width != WIDTH) || (fmt.fmt.pix.height != HEIGHT)) { +if ((fmt.fmt.pix.width != width) || (fmt.fmt.pix.height != height)) { printf("Warning: driver is sending image at %dx%d\n", fmt.fmt.pix.width, fmt.fmt.pix.height); }