#include <linux/videodev2.h>
int fd = open("/dev/video0", O_RDWR);
struct v4l2_capability { // VIDIOC_QUERYCAP
struct v4l2_capability cap;
int t = ioctl(fd, VIDIOC_QUERYCAP, &cap);
printf("%s\n", cap.driver);
printf("%s\n", cap.card);
printf("%s\n", cap.bus_info);
printf("%d\n", cap.version);
printf("%x\n", cap.capabilities); //84a00001 1:视频输入卡
printf("%x\n", cap.device_caps); //4200001
printf("%d\n", cap.reserved[0]);
printf("%d\n", cap.reserved[1]);
printf("%d\n", cap.reserved[2]);
puts("--------------fmtdesc--------------------------------------");
struct v4l2_fmtdesc { //VIDIOC_ENUM_FMT
__u32 index; /* Format number */
__u32 type; /* enum v4l2_buf_type */
__u8 description[32]; /* Description string */
__u32 pixelformat; /* Format fourcc */
__u32 mbus_code; /* Media bus code */
fmtdesc.index=0; //从0输入index的值,开始查询,本机index=0,1
int t1=ioctl(fd,VIDIOC_ENUM_FMT,&fmtdesc);
printf("%s\n",fmtdesc.description); //0:yuv422,1:mjpg
fmtdesc.index=1; //从0输入index的值,开始查询,本机index=0,1
int t2=ioctl(fd,VIDIOC_ENUM_FMT,&fmtdesc);
printf("%s\n",fmtdesc.description); //0:yuv422,1:mjpg
puts("-------------------frame_format--------------------------");
// struct v4l2_pix_format pix; /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
__u32 field; /* enum v4l2_field */
__u32 bytesperline; /* for padding, zero if unused */
__u32 colorspace; /* enum v4l2_colorspace */
__u32 priv; /* private data, depends on pixelformat */
__u32 flags; /* format flags (V4L2_PIX_FMT_FLAG_*) */
/* enum v4l2_ycbcr_encoding */
/* enum v4l2_hsv_encoding */
__u32 quantization; /* enum v4l2_quantization */
__u32 xfer_func; /* enum v4l2_xfer_func */
struct v4l2_pix_format_mplane pix_mp; /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */
struct v4l2_window win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
struct v4l2_vbi_format vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */
struct v4l2_sliced_vbi_format sliced; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
struct v4l2_sdr_format sdr; /* V4L2_BUF_TYPE_SDR_CAPTURE */
struct v4l2_meta_format meta; /* V4L2_BUF_TYPE_META_CAPTURE */
__u8 raw_data[200]; /* user-defined */
int t3=ioctl(fd,VIDIOC_G_FMT,&format);
printf("%d\n",format.fmt.pix.width); //2560 支持最大宽度
printf("%d\n",format.fmt.pix.height); //1440 支持图像的最高宽度
printf("%x\n",format.fmt.pix.pixelformat); //v4l2_fourcc值 47504a4d 4d=M 4a=J 50=P 47=G 16进制小序排列(反向)
printf("%d\n",format.fmt.pix.field); //1=V4L2_FIELD_NONE
printf("%d\n",format.fmt.pix.sizeimage); //7372800=2560*1440*16/8 每帧支持最大字节数
puts("--------------------frame_size-------------------------------------");
struct v4l2_frmsizeenum {
__u32 index; /* Frame size number */
__u32 pixel_format; /* Pixel format */
__u32 type; /* Frame size type the device supports. */
// struct v4l2_frmsize_discrete discrete;
struct v4l2_frmsize_discrete {
__u32 width; /* Frame width [pixel] */
__u32 height; /* Frame height [pixel] */
struct v4l2_frmsize_stepwise stepwise;
__u32 reserved[2]; /* Reserved space for future use */
frmsize.pixel_format=0x47504a4d;
int t4=ioctl(fd,VIDIOC_ENUM_FRAMESIZES,&frmsize);
printf("%d\n",frmsize.discrete.width);
