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,11 +27,26 @@ 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);
|
||||||
fprintf(FP, " type %d %s\n", ptr->type,/* enum v4l2_buf_type */
|
fprintf(FP, " type %d %s\n", ptr->type,/* enum v4l2_buf_type */
|
||||||
fmttype2str(ptr->type));
|
fmttype2str(ptr->type));
|
||||||
|
|
||||||
switch(ptr->type) {
|
switch(ptr->type) {
|
||||||
|
|
||||||
@ -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