2019-07-02 19:35:08 +02:00
|
|
|
/*
|
|
|
|
* fonctions pour afficher les structures de V4L2
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdio.h>
|
2019-07-22 04:10:00 +02:00
|
|
|
#include <inttypes.h>
|
2019-07-02 19:35:08 +02:00
|
|
|
#include <linux/videodev2.h>
|
|
|
|
|
|
|
|
#include "v4l2_pr_structs.h"
|
|
|
|
|
|
|
|
#define FP (stdout)
|
|
|
|
|
|
|
|
extern int verbosity;
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
|
|
static char *fmttype2str(int type)
|
|
|
|
{
|
|
|
|
|
|
|
|
switch(type) {
|
|
|
|
case 0: return "[zero]";
|
|
|
|
case 1: return "video capture";
|
|
|
|
case 2: return "video output";
|
|
|
|
|
|
|
|
case 13: return "META capture";
|
|
|
|
}
|
|
|
|
|
|
|
|
return "???";
|
|
|
|
}
|
|
|
|
/* --------------------------------------------------------------------- */
|
2019-07-22 04:10:00 +02:00
|
|
|
static void pr_capabilities(uint32_t caps)
|
|
|
|
{
|
|
|
|
fputs(" ", FP);
|
|
|
|
|
|
|
|
if (caps & V4L2_CAP_VIDEO_CAPTURE) fputs("vcapt ", FP);
|
|
|
|
if (caps & V4L2_CAP_VIDEO_OUTPUT) fputs("vout ", FP);
|
|
|
|
if (caps & V4L2_CAP_VIDEO_OVERLAY) fputs("overlay ", FP);
|
|
|
|
if (caps & V4L2_CAP_VBI_CAPTURE) fputs("vbicapt ", FP);
|
|
|
|
if (caps & V4L2_CAP_VBI_OUTPUT) fputs("vbiout ", FP);
|
|
|
|
|
|
|
|
/* to be continued */
|
|
|
|
|
|
|
|
if (caps & V4L2_CAP_AUDIO) fputs("audio ", FP);
|
|
|
|
|
|
|
|
|
|
|
|
if (caps & V4L2_CAP_SDR_CAPTURE) fputs("sdrcapt ", FP);
|
|
|
|
if (caps & V4L2_CAP_EXT_PIX_FORMAT) fputs("extpix ", FP);
|
|
|
|
if (caps & V4L2_CAP_SDR_OUTPUT) fputs("sdrout ", FP);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (caps & V4L2_CAP_READWRITE) fputs("rwsysc ", FP);
|
|
|
|
if (caps & V4L2_CAP_ASYNCIO) fputs("asyncio ", FP);
|
|
|
|
if (caps & V4L2_CAP_STREAMING) fputs("stream ", FP);
|
|
|
|
|
|
|
|
|
|
|
|
fputs("\n", FP);
|
|
|
|
}
|
|
|
|
/* --------------------------------------------------------------------- */
|
2019-07-21 13:36:14 +02:00
|
|
|
int pr_v4l2_capability(char *txt, struct v4l2_capability *ptr)
|
|
|
|
{
|
|
|
|
fprintf(FP, "-- v4l2_capability, %-15s %p\n", txt, ptr);
|
|
|
|
|
2019-07-22 04:10:00 +02:00
|
|
|
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 0x%X\n", ptr->version);
|
|
|
|
fprintf(FP, " capabilities 0x%X\n", ptr->capabilities);
|
|
|
|
pr_capabilities(ptr->capabilities);
|
|
|
|
fprintf(FP, " device caps 0x%X\n", ptr->device_caps);
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
|
|
static char *str_input_type(int t)
|
|
|
|
{
|
|
|
|
switch (t) {
|
|
|
|
case V4L2_INPUT_TYPE_TUNER: return "tuner";
|
|
|
|
case V4L2_INPUT_TYPE_CAMERA: return "camera";
|
|
|
|
case V4L2_INPUT_TYPE_TOUCH: return "touch";
|
|
|
|
}
|
|
|
|
return "???";
|
|
|
|
}
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
|
|
static void pr_input_status(uint32_t st)
|
|
|
|
{
|
|
|
|
if (st & V4L2_IN_ST_NO_POWER) fputs("nopower", FP);
|
|
|
|
if (st & V4L2_IN_ST_NO_SIGNAL) fputs("nosignal", FP);
|
|
|
|
if (st & V4L2_IN_ST_NO_COLOR) fputs("nocolor", FP);
|
|
|
|
|
|
|
|
/* to be continued */
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
|
|
int pr_v4l2_input(char *txt, struct v4l2_input *ptr)
|
|
|
|
{
|
|
|
|
fprintf(FP, "-- v4l2_input, %-15s %p\n", txt, ptr);
|
2019-07-21 13:36:14 +02:00
|
|
|
|
2019-07-22 04:10:00 +02:00
|
|
|
fprintf(FP, " index %d\n", ptr->index);
|
|
|
|
fprintf(FP, " name %s\n", ptr->name);
|
|
|
|
fprintf(FP, " type %d %s\n", ptr->type,
|
|
|
|
str_input_type(ptr->type));
|
|
|
|
fprintf(FP, " audioset 0x%X\n", ptr->audioset);
|
|
|
|
fprintf(FP, " tuner 0x%X\n", ptr->tuner);
|
|
|
|
/* XXX v4l2_std_id std; */
|
|
|
|
fprintf(FP, " status %d\n", ptr->status);
|
|
|
|
pr_input_status(ptr->status);
|
|
|
|
fprintf(FP, " capabilities 0x%X\n", ptr->capabilities);
|
2019-07-21 13:36:14 +02:00
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
/* --------------------------------------------------------------------- */
|
2019-07-02 19:35:08 +02:00
|
|
|
int pr_v4l2_format(char *txt, struct v4l2_format *ptr)
|
|
|
|
{
|
|
|
|
fprintf(FP, "-- v4l2_format, %-15s %p\n", txt, ptr);
|
|
|
|
fprintf(FP, " type %d %s\n", ptr->type,/* enum v4l2_buf_type */
|
2019-07-21 13:36:14 +02:00
|
|
|
fmttype2str(ptr->type));
|
2019-07-02 19:35:08 +02:00
|
|
|
|
|
|
|
switch(ptr->type) {
|
|
|
|
|
|
|
|
case 1: // fputs(" Capture\n", FP);
|
|
|
|
fprintf(FP, " dims %dx%d\n",
|
|
|
|
ptr->fmt.pix.width,
|
|
|
|
ptr->fmt.pix.height);
|
|
|
|
break;
|
|
|
|
|
2019-07-21 13:36:14 +02:00
|
|
|
default: fprintf(FP, "type is %d\n", ptr->type);
|
|
|
|
break;
|
2019-07-02 19:35:08 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
fputs(".\n", FP);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
|
|
int pr_v4l2_requestbuffers(char *txt, struct v4l2_requestbuffers *ptr)
|
|
|
|
{
|
2019-07-03 15:29:24 +02:00
|
|
|
fprintf(FP, "-- v4l2_requestbuffers, %s %p\n", txt, ptr);
|
2019-07-02 19:35:08 +02:00
|
|
|
fprintf(FP, " type %d\n", ptr->type); /* enum v4l2_buf_type */
|
|
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
|
|
/* --------------------------------------------------------------------- */
|
|
|
|
|