forked from tTh/FloatImg
		
	adding a new tool : video-infos
This commit is contained in:
		
							parent
							
								
									0a1abce976
								
							
						
					
					
						commit
						991308f5b2
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -17,6 +17,7 @@ v4l2/capture
 | 
				
			|||||||
v4l2/grabvidseq
 | 
					v4l2/grabvidseq
 | 
				
			||||||
v4l2/*.o
 | 
					v4l2/*.o
 | 
				
			||||||
v4l2/*.ppm
 | 
					v4l2/*.ppm
 | 
				
			||||||
 | 
					v4l2/video-infos
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tools/fimg2png
 | 
					tools/fimg2png
 | 
				
			||||||
tools/fimg2pnm
 | 
					tools/fimg2pnm
 | 
				
			||||||
 | 
				
			|||||||
@ -14,13 +14,18 @@ funcs.o:	funcs.c funcs.h Makefile
 | 
				
			|||||||
v4l2_pr_structs.o:	v4l2_pr_structs.c v4l2_pr_structs.h Makefile
 | 
					v4l2_pr_structs.o:	v4l2_pr_structs.c v4l2_pr_structs.h Makefile
 | 
				
			||||||
	gcc ${COPT} -c $<
 | 
						gcc ${COPT} -c $<
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					grabvidseq: grabvidseq.c Makefile
 | 
				
			||||||
 | 
						gcc -Wall -g $< ../libfloatimg.a -lv4l2 -o $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					video-infos: video-infos.c Makefile funcs.o v4l2_pr_structs.o
 | 
				
			||||||
 | 
						gcc -Wall -g $< ../libfloatimg.a funcs.o v4l2_pr_structs.o -o $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#		---------------
 | 
					#		---------------
 | 
				
			||||||
#		external things
 | 
					#		external things
 | 
				
			||||||
 | 
					
 | 
				
			||||||
capture: capture.c Makefile
 | 
					capture: capture.c Makefile
 | 
				
			||||||
	gcc -Wall -g $<       -o $@
 | 
						gcc -Wall -g $<       -o $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
grabvidseq: grabvidseq.c Makefile
 | 
					 | 
				
			||||||
	gcc -Wall -g $< ../libfloatimg.a -lv4l2 -o $@
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -27,6 +27,21 @@ switch(type) {
 | 
				
			|||||||
return "???";
 | 
					return "???";
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/* --------------------------------------------------------------------- */
 | 
					/* --------------------------------------------------------------------- */
 | 
				
			||||||
 | 
					int pr_v4l2_capability(char *txt, struct v4l2_capability *ptr)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					fprintf(FP, "-- v4l2_capability, %-15s  %p\n", txt, ptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fprintf(FP, "   driver        %s\n", ptr->driver);
 | 
				
			||||||
 | 
					fprintf(FP, "   card          %s\n", ptr->card);
 | 
				
			||||||
 | 
					fprintf(FP, "   bus info      %s\n", ptr->bus_info);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fprintf(FP, "   version       %X\n", ptr->version);
 | 
				
			||||||
 | 
					fprintf(FP, "   capabilities  %X\n", ptr->capabilities);
 | 
				
			||||||
 | 
					fprintf(FP, "   device caps   %X\n", ptr->device_caps);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					return -1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* --------------------------------------------------------------------- */
 | 
				
			||||||
int pr_v4l2_format(char *txt, struct v4l2_format *ptr)
 | 
					int pr_v4l2_format(char *txt, struct v4l2_format *ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
fprintf(FP, "-- v4l2_format, %-15s  %p\n", txt, ptr);
 | 
					fprintf(FP, "-- v4l2_format, %-15s  %p\n", txt, ptr);
 | 
				
			||||||
@ -39,10 +54,10 @@ switch(ptr->type) {
 | 
				
			|||||||
			fprintf(FP, "   dims     %dx%d\n",
 | 
								fprintf(FP, "   dims     %dx%d\n",
 | 
				
			||||||
					ptr->fmt.pix.width,
 | 
										ptr->fmt.pix.width,
 | 
				
			||||||
					ptr->fmt.pix.height);
 | 
										ptr->fmt.pix.height);
 | 
				
			||||||
 | 
					 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	default:	fputs("   ???\n", FP);		break;
 | 
						default:	fprintf(FP, "type is %d\n", ptr->type);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,12 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 *	fonctions pour afficher les structures de V4L2
 | 
					 *	fonctions pour afficher les structures de V4L2
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	WARNING : this is a work in progress !
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* --------------------------------------------------------------------- */
 | 
					/* --------------------------------------------------------------------- */
 | 
				
			||||||
 | 
					int pr_v4l2_capability(char *txt, struct v4l2_capability *ptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int pr_v4l2_format(char *txt, struct v4l2_format *ptr);
 | 
					int pr_v4l2_format(char *txt, struct v4l2_format *ptr);
 | 
				
			||||||
int pr_v4l2_requestbuffers(char *txt, struct v4l2_requestbuffers *ptr);
 | 
					int pr_v4l2_requestbuffers(char *txt, struct v4l2_requestbuffers *ptr);
 | 
				
			||||||
/* --------------------------------------------------------------------- */
 | 
					/* --------------------------------------------------------------------- */
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										104
									
								
								v4l2/video-infos.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								v4l2/video-infos.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,104 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 *		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  <linux/videodev2.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include  "../floatimg.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include  "v4l2_pr_structs.h"
 | 
				
			||||||
 | 
					#include  "funcs.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int		verbosity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* --------------------------------------------------------------------- */
 | 
				
			||||||
 | 
					int show_webcam_infos(char *devname, int k)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					int				vfd, foo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct v4l2_capability		cap;
 | 
				
			||||||
 | 
					struct v4l2_format		fmt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// struct v4l2_requestbuffers      reqbuf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if DEBUG_LEVEL
 | 
				
			||||||
 | 
					fprintf(stderr, ">>> %s ( '%s' %d )\n", __func__, devname, k);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					vfd = open_device(devname);
 | 
				
			||||||
 | 
					if (vfd < 0) {
 | 
				
			||||||
 | 
						perror(devname);
 | 
				
			||||||
 | 
						return -3;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fprintf(stderr, "\topen %s -> %d\n", devname, vfd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					foo = ioctl(vfd, VIDIOC_QUERYCAP, &cap);
 | 
				
			||||||
 | 
					if (foo < 0) {
 | 
				
			||||||
 | 
						perror("ioctl QUERYCAP");
 | 
				
			||||||
 | 
						return -4;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					pr_v4l2_capability(devname, &cap);
 | 
				
			||||||
 | 
					if ( ! (cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
 | 
				
			||||||
 | 
						fprintf("%s : no video capture\n", devname);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					close(vfd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* --------------------------------------------------------------------- */
 | 
				
			||||||
 | 
					int liste_des_devices(int flag)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					fprintf(stderr, "%s not implemented\n", __func__);
 | 
				
			||||||
 | 
					return -1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* --------------------------------------------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void help(int k)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					puts("Options :");
 | 
				
			||||||
 | 
					puts("\t-d\tselect the video device");
 | 
				
			||||||
 | 
					puts("\t-K\tset the K parameter");
 | 
				
			||||||
 | 
					puts("\t-l\tlist video devices");
 | 
				
			||||||
 | 
					puts("\t-v\tincrease verbosity");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (verbosity) { puts(""); fimg_print_version(1); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exit(0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* --------------------------------------------------------------------- */
 | 
				
			||||||
 | 
					int main(int argc, char *argv[])
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					int		foo, opt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char		*device = "/dev/video0";
 | 
				
			||||||
 | 
					int		K = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while ((opt = getopt(argc, argv, "d:hK:lv")) != -1) {
 | 
				
			||||||
 | 
						switch(opt) {
 | 
				
			||||||
 | 
							case 'd':	device = optarg;	break;
 | 
				
			||||||
 | 
							case 'h':	help(0);		break;
 | 
				
			||||||
 | 
							case 'K':	K = atol(optarg);	break;
 | 
				
			||||||
 | 
							case 'l':	liste_des_devices(0);	break;
 | 
				
			||||||
 | 
							case 'v':	verbosity++;		break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (verbosity) fimg_print_version(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					foo = show_webcam_infos(device, K);
 | 
				
			||||||
 | 
					fprintf(stderr, "\tshow_webcam_infos -> %d\n", foo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* --------------------------------------------------------------------- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user