more and more semi-useless datas
This commit is contained in:
parent
4e687db723
commit
e46d490e05
@ -73,7 +73,7 @@ fprintf(FP, " device caps 0x%X\n", ptr->device_caps);
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
static char *str_input_type(int t)
|
char *str_input_type(int t)
|
||||||
{
|
{
|
||||||
switch (t) {
|
switch (t) {
|
||||||
case V4L2_INPUT_TYPE_TUNER: return "tuner";
|
case V4L2_INPUT_TYPE_TUNER: return "tuner";
|
||||||
@ -144,6 +144,44 @@ fprintf(FP, " type %d\n", ptr->type); /* enum v4l2_buf_type */
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
/* --------------------------------------------------------------------- */
|
char *str_ctrl_type(int type)
|
||||||
/* --------------------------------------------------------------------- */
|
{
|
||||||
|
switch (type) {
|
||||||
|
case V4L2_CTRL_TYPE_INTEGER: return "integer";
|
||||||
|
case V4L2_CTRL_TYPE_BOOLEAN: return "boolean";
|
||||||
|
case V4L2_CTRL_TYPE_MENU: return "menu";
|
||||||
|
case V4L2_CTRL_TYPE_BUTTON: return "button";
|
||||||
|
case V4L2_CTRL_TYPE_INTEGER64: return "int64";
|
||||||
|
case V4L2_CTRL_TYPE_CTRL_CLASS: return "ctrl-class";
|
||||||
|
case V4L2_CTRL_TYPE_STRING: return "string";
|
||||||
|
case V4L2_CTRL_TYPE_BITMASK: return "bitmask";
|
||||||
|
case V4L2_CTRL_TYPE_INTEGER_MENU: return "int-menu";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "???";
|
||||||
|
}
|
||||||
|
/* --------------------------------------------------------------------- */
|
||||||
|
/*
|
||||||
|
The 32-bit qctrl.id value is subdivided into three bit ranges:
|
||||||
|
the top 4 bits are reserved for flags (e. g. V4L2_CTRL_FLAG_NEXT_CTRL)
|
||||||
|
and are not actually part of the ID.
|
||||||
|
The remaining 28 bits form the control ID, of which the most significant
|
||||||
|
12 bits define the control class and the least significant
|
||||||
|
16 bits identify the control within the control class.
|
||||||
|
*/
|
||||||
|
void pr_ctrl_id(uint32_t id)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (verbosity) fprintf(FP, "%08x : ", id);
|
||||||
|
|
||||||
|
fprintf(FP, "%x %03x %04x", (id>>28)&0xf,
|
||||||
|
V4L2_CTRL_ID2CLASS(id)>>16, id&0xffff);
|
||||||
|
|
||||||
|
}
|
||||||
|
/* --------------------------------------------------------------------- */
|
||||||
|
int pr_v4l2_control(char *txt, struct v4l2_control *ptr)
|
||||||
|
{
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
/* --------------------------------------------------------------------- */
|
||||||
|
@ -9,5 +9,9 @@ int pr_v4l2_capability(char *txt, struct v4l2_capability *ptr);
|
|||||||
int pr_v4l2_input(char *txt, struct v4l2_input *ptr);
|
int pr_v4l2_input(char *txt, struct v4l2_input *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);
|
||||||
|
|
||||||
|
char *str_input_type(int t);
|
||||||
|
char *str_ctrl_type(int type);
|
||||||
|
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <linux/videodev2.h>
|
#include <linux/videodev2.h>
|
||||||
|
|
||||||
#include "../floatimg.h"
|
#include "../floatimg.h"
|
||||||
@ -19,12 +19,109 @@
|
|||||||
int verbosity;
|
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;
|
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)
|
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);
|
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);
|
close(vfd);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user