more and more semi-useless datas

This commit is contained in:
2019-07-24 17:00:07 +02:00
parent 4e687db723
commit e46d490e05
3 changed files with 153 additions and 5 deletions

View File

@@ -8,7 +8,7 @@
#include <math.h>
#include <string.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <linux/videodev2.h>
#include "../floatimg.h"
@@ -19,12 +19,109 @@
int verbosity;
/* --------------------------------------------------------------------- */
static int enum_input(char *txt, int k)
static int enum_inputs(int fd, char *txt, int k)
{
int index, foo;
struct v4l2_input input;
printf("-- inputs enumeration '%s'\n", txt);
index = 0;
for(;;) {
memset (&input, 0, sizeof (input));
input.index = index;
foo = ioctl(fd, VIDIOC_ENUMINPUT, &input);
if (foo) {
if (EINVAL==errno) { break; }
else {
perror("enuminput");
return -1;
}
}
printf("%-32s | %-10s\n", input.name,
str_input_type(input.type));
index++;
}
return 0;
}
/* --------------------------------------------------------------------- */
int enum_controls(int fd, char *txt, int k)
{
struct v4l2_queryctrl qctrl;
int foo, idx;
printf("-- controls enumeration '%s'\n", txt);
memset (&qctrl, 0, sizeof (qctrl));
/* V4L2_CID_BASE defined in linux/v4l2-controls.h */
for (idx=V4L2_CID_BASE; idx<V4L2_CID_LASTP1; idx++) {
qctrl.id = idx;
if (verbosity) printf(" id %d ", idx);
if (0 == ioctl (fd, VIDIOC_QUERYCTRL, &qctrl)) {
if (qctrl.flags & V4L2_CTRL_FLAG_DISABLED) {
printf("disabled\n");
continue;
}
printf(" %-32s %-10s [%d..%d]\n",
qctrl.name,
str_ctrl_type(qctrl.type),
qctrl.minimum, qctrl.maximum);
}
else if (EINVAL==errno) {
if (verbosity) puts("einval");
continue;
}
else {
printf("err %d %s\n", errno, strerror(errno));
}
fflush(stdout); fflush(stderr);
}
return -1;
}
/* --------------------------------------------------------------------- */
/*
* code based on :
https://www.linuxtv.org/downloads/legacy/video4linux/API/V4L2_API/spec-single/v4l2.html
*
*/
int enum_extended_controls(int fd, char *txt, int k)
{
struct v4l2_queryctrl qctrl;
int idx;
printf("-- controls enumeration '%s'\n", txt);
memset(&qctrl, 0, sizeof(qctrl));
qctrl.id = V4L2_CTRL_FLAG_NEXT_CTRL;
idx = 0;
while (0 == ioctl (fd, VIDIOC_QUERYCTRL, &qctrl)) {
pr_ctrl_id(qctrl.id);
printf(" %-32s %-10s [%d..%d]\n",
qctrl.name,
str_ctrl_type(qctrl.type),
qctrl.minimum, qctrl.maximum);
qctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL;
idx++;
}
return -1;
}
/* --------------------------------------------------------------------- */
int show_webcam_infos(char *devname, int k)
{
@@ -64,6 +161,15 @@ if (-1 == ioctl(vfd, VIDIOC_ENUMINPUT, &input)) {
}
pr_v4l2_input("input 0", &input);
foo = enum_inputs(vfd, "is that working ?", 0);
fputs("--\n", stderr);
foo = enum_controls(vfd, "is that working ?", 0);
fputs("--\n", stderr);
foo = enum_extended_controls(vfd, "looking for extended", 0);
close(vfd);