131 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *		tests pour capturer les webcams
 | |
|  */
 | |
| 
 | |
| #include  <stdio.h>
 | |
| #include  <stdlib.h>
 | |
| #include  <unistd.h>
 | |
| #include  <math.h>
 | |
| // #include  <string.h>
 | |
| #include  <sys/ioctl.h>
 | |
| #include  <errno.h>
 | |
| #include  <inttypes.h>
 | |
| #include  <curses.h>
 | |
| #include  <linux/videodev2.h>
 | |
| 
 | |
| #include  "../floatimg.h"
 | |
| 
 | |
| #include  "v4l2_pr_structs.h"
 | |
| #include  "funcs.h"
 | |
| 
 | |
| int		verbosity;
 | |
| 
 | |
| /* --------------------------------------------------------------------- */
 | |
| void help(int n)
 | |
| {
 | |
| 
 | |
| puts("camera controls");
 | |
| puts("\t-d bla\t\tselect video device");
 | |
| puts("\t-e nnn\t\tset 'etype'");
 | |
| puts("\t-K nnn\t\tinteger parameter");
 | |
| puts("\t-n bla\t\tset title");
 | |
| exit(0);
 | |
| }
 | |
| /* --------------------------------------------------------------------- */
 | |
| int init_screen(char *title)
 | |
| {
 | |
| int			foo;
 | |
| 
 | |
| #if DEBUG_LEVEL
 | |
| fprintf(stderr, ">>> %s ( '%s' )\n", __func__, title);
 | |
| #endif
 | |
| 
 | |
| initscr();
 | |
| 
 | |
| standout(); mvaddstr(1, 5, title); standend(); refresh();
 | |
| 
 | |
| 
 | |
| return -1;
 | |
| }
 | |
| /* --------------------------------------------------------------------- */
 | |
| int end_screen(void)
 | |
| {
 | |
| endwin();
 | |
| return 0;
 | |
| }
 | |
| /* --------------------------------------------------------------------- */
 | |
| int preparation_v4l2(char *devname, int param)
 | |
| {
 | |
| int			fd, foo;
 | |
| struct v4l2_capability	cap;
 | |
| 
 | |
| #if DEBUG_LEVEL
 | |
| fprintf(stderr, ">>> %s ( '%s' %d )\n", __func__, devname, param);
 | |
| #endif
 | |
| 
 | |
| fd = open_device(devname);
 | |
| if (fd < 0) {
 | |
| 	fprintf(stderr, "err %d on %s opening\n", errno, devname);
 | |
| 	return -2;
 | |
| 	}
 | |
| 
 | |
| /* est-ce un device qui permet la capture video */
 | |
| foo = ioctl(fd, VIDIOC_QUERYCAP, &cap);
 | |
| if (-1 == foo) {
 | |
| 	perror("VIDIOC_QUERYCAP");
 | |
| 	return -2;
 | |
| 	}
 | |
| if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
 | |
| 	fprintf(stderr, "%s is not a video capture device\n", devname);
 | |
| 	return -3;
 | |
| 	}
 | |
| 
 | |
| return fd;
 | |
| }
 | |
| /* --------------------------------------------------------------------- */
 | |
| int interactive(int fd, char *text, int notused)
 | |
| {
 | |
| 
 | |
| fprintf(stderr, "file descriptor = %d\n", fd);
 | |
| 
 | |
| init_screen("prototype");
 | |
| 
 | |
| sleep(2);
 | |
| 
 | |
| end_screen();
 | |
| 
 | |
| return 0;
 | |
| }
 | |
| /* --------------------------------------------------------------------- */
 | |
| int main(int argc, char *argv[])
 | |
| {
 | |
| int		foo, opt, devnum;
 | |
| int		etype = 0;
 | |
| char		*device = "/dev/video0";
 | |
| char		*title = NULL;
 | |
| int		K = 0;
 | |
| 
 | |
| while ((opt = getopt(argc, argv, "d:e:hK:lT:v")) != -1) {
 | |
| 	switch(opt) {
 | |
| 		case 'd':	device = optarg;	break;
 | |
| 		case 'e':	etype = atol(optarg);	break;
 | |
| 		case 'h':	help(0);		break;
 | |
| 		case 'K':	K = atol(optarg);	break;
 | |
| 		// case 'l':	liste_des_devices(0);	break;
 | |
| 		case 't':	title = optarg;
 | |
| 		case 'v':	verbosity++;		break;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| devnum = preparation_v4l2(device, K);
 | |
| if (devnum < 0) {
 | |
| 	fprintf(stderr, "%s : erreur init video device\n", argv[0]);
 | |
| 	exit(1);
 | |
| 	}
 | |
| 
 | |
| foo = interactive(devnum, title, 0);
 | |
| 
 | |
| return 0;
 | |
| }
 | |
| /* --------------------------------------------------------------------- */
 |