linux下v4l2

  • S1_315834
    了解作者
  • 11.6KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-13 04:06
    上传日期
V4l2 UVC 视频采集不含压缩,直接存储为yuv422格式的图片文件或者是视频流文件,各位请自行添加压缩V4l2 UVC 视频采集不含压缩,直接存储为yuv422格式的图片文件或者是视频流文件,各位请自行添加压缩
usb_uvc.rar
  • usb_uvc
  • .tmp_versions
  • uvc_driver.c
    0B
  • test_v4lx_device.c
    2.4KB
  • usb_video.c
    14.6KB
  • usb_video.h
    1.2KB
  • Makefile
    469B
  • main.h
    841B
  • readme.txt
    15KB
  • main.c
    1.2KB
内容介绍
USB摄像头的驱动在内核中都是实现好的,关键在于应用程序的编写 V4L2 API: manual: https://www.linuxtv.org/downloads/v4l-dvb-apis/index.html 命令列表项: VIDIOC_QUERYCAP 获取设备支持的操作 VIDIOC_G_FMT 获取设备支持的视频格式 VIDIOC_S_FMT 设置捕获视频的格式 VIDIOC_REQBUFS 向驱动提出申请内存的请求 VIDIOC_QUERYBUF 向驱动查询申请到的内存 VIDIOC_QBUF 把帧放入队列 VIDIOC_DQBUF 从队列取出帧 VIDIOC_STREAMON 启动数据流 VIDIOC_STREAMOFF 停止数据流 VIDIOC_QUERYCTRL 查询驱动是否支持该命令 VIDIOC_G_CTRL 获取当前命令值 VIDIOC_S_CTRL 设置新的命令值 VIDIOC_G_TUNER 获取调谐器信息 VIDIOC_S_TUNER 设置调谐器信息 VIDIOC_G_FREQUENCY 获取调谐器频率 VIDIOC_S_FREQUENCY 设置调谐器频率 VIDIOC_S_STD 设置视频的制式,PAL/NTSC VIDIOC_S_CROP 设置视频图像采集窗口的大小 VIDIOC_TRY_FMT 检查是否支持某种格式 VIDIOC_ENUM_FMT 显示所有支持的格式 VIDIOC_S_PARM 设置视频的帧率 VIDIOC_CROPCAP 缩放能力 相关结构体: struct v4l2_capability { __u8 driver[16]; 驱动名字 __u8 card[32]; 设备名字 __u8 bus_info[32]; 设备在bus系统中的位置 __u32 version; 驱动版本号 __u32 capabilities; 设备支持的操作 __u32 reserved[4]; 保留字段 }; capabilities: V4L2_CAP_VIDEO_CAPTURE 0x00000001 V4L2_CAP_VIDEO_OUTPUT 0x00000002 V4L2_CAP_VIDEO_OVERLAY 0x00000004 V4L2_CAP_VBI_CAPTURE 0x00000010 V4L2_CAP_VBI_OUTPUT 0x00000020 V4L2_CAP_SLICED_VBI_CAPTURE 0x00000040 V4L2_CAP_SLICED_VBI_OUTPUT 0x00000080 V4L2_CAP_RDS_CAPTURE 0x00000100 #define V4L2_CAP_TUNER 0x00010000 #define V4L2_CAP_AUDIO 0x00020000 #define V4L2_CAP_RADIO 0x00040000 #define V4L2_CAP_READWRITE 0x01000000 #define V4L2_CAP_ASYNCIO 0x02000000 #define V4L2_CAP_STREAMING 0x04000000 struct v4l2_format { enum v4l2_buf_type type; Camera,则用户必须填写V4L2_BUF_TYPE_VIDEO_VCAPTURE union { struct v4l2_pix_format pix; /* used by video capture and output devices */ struct v4l2_window win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */ struct v4l2_vbi_format vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */ struct v4l2_sliced_vbi_format; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */ __u8 raw_data[200]; /* user_defined */ } fmt; }; struct v4l2_fmtdesc { __u32 index; 应用程序设置,从零开始,依次上升 enum v4l2_buf_type type; Camera,则填写V4L2_BUF_TYPE_VIDEO_VCAPTURE __u32 flags; 如果压缩的,则driver填写:V4L2_FMT_FLAG_COMPRESSED, 否则为0 __u8 description[32]; Image format的描述,如:YUV 4:2:2(YUYV) __u32 pixelformat; 所支持的格式,如:V4L2_PIX_FMT_UYVY __u32 reserved[4]; 保留 }; struct v4l2_pix_format { __u32 width; 视频宽度,单位像素必须是16的倍数 __u32 height; 视频高度,单位像素必须是16的倍数 __u32 pixelformat; 视频数据格式(V4L2_PIX_FMT_YUV422P|V4L2_PIX_FMT_RGB565) enum v4l2_field field; 扫描方式,(逐行扫描,隔行扫描) __u32 bytesperline; 一行帧图像占用字节数 __u32 sizeimage; 帧图像占用的总字节数 enum v4l2_colorspace colorspace; 颜色空间 __u32 priv; private data, depends on pixelformat }; struct v4l2_captureparm { __u32 capability; 是否可以被timeperframe控制帧数.可以则:V4L2_CAP_TIMEPERFRAME __u32 capturemodes; 是否为高清模式.如果是:则设置为:V4L2_MODE_HIGHQUALITY,高清模式会牺牲其他信息,通常设置为0 __struct v4l2_fract timeperframe; 帧数 __u32 extendedmode; 定制的,如果不支持,设置为0 __u32 readbuffers; __u32 reserved[4]; } struct v4l2_fract { __u32 numerator;分子;例:1 __u32 denominator;分母;例:30 } struct v4l2_requestbuffers { __u32 count; 缓存队列中的帧图像数目 enum v4l2_buf_type type; 数据流类型,一直是V4L2_BUF_TYPE_VIDEO_CAPTURE enum v4l2_memory memory; (V4L2_MEMORY_MMAP or V4L2_MEMORY_USERPTR __u32 reserved[2]; }; enum v4l2_memory { V4L2_MEMORY_MMAP = 1; V4L2_MEMORY_USERPTR = 2; V4L2_MEMORY_OVERLAY = 3; }; struct v4l2_buffer { __u32 index; buffer 序号 enum v4l2_buf_type type: buffer 类型 __u32 byteused; buffer 已使用的字节数 __u32 flags; 区分是MMAP 还是USERPTR enum v4l2_filed filed; struct timeval timestamp; 获取第一个字节时的系统时间 struct v4l2_timecode timecode; __u32 sequence; 队列中的序号 enum v4l2_memory memory; IO方式,被应用程序设置 union { __u32 offset; 缓存帧地址,只对MMAP有效 unsigned long useptr; } m; __u32 length; 缓存帧长度 __u32 input; __u32 reserved; } enum v4l2_buf_type { V4L2_BUF_TYPE_VIDEO_CAPTURE = 1, 视频捕获模式 V4L2_BUF_TYPE_VIDEO_OUTPUT = 2, V4L2_BUF_TYPE_VIDEO_OVERLAY = 3, ... ... V4L2_BUF_TYPE_PRIVATE = 0x80, }; struct v4l2_crop { enum v4l2_buf_type type; struct v4l2_rectc; }; struct v4l2_cropcap { enum v4l2_buf_type type; 应用程序设置 struct v4l2_rectbounds; 最大边界 struct v4l2_rectdefrect; 默认值 struct v4l2_fract pixelaspect; }; struct v4l2_control { __u32 id; __s32 value; } struct v4l2_queryctrl { __u32 id; 命令编号 enum v4l2_ctrl_type type; 命令值得类型 __u8 name[32]; 命令名称 __s32 minimum; 最小的命令值 __s32 maximum; 最大的命令值 __s32 step; 命令值变化的步长 __s32 default_value; 默认的命令值 __u32 flags; 命令的标志 __u32 reserved[2]; 命令值的位图表示 }; enum v4l2_ctrl_type { V4L2_CTRL_TYPE_INTEGER = 1, /* 整形 */ V4L2_CTRL_TYPE_BOOLEAN = 2, /* 真值 */ V4L2_CTRL_TYPE_MENU = 3, /* 菜单 */ V4L2_CTRL_TYPE_BUTTON = 4, /* 无值 */ V4L2_CTRL_TYPE_INTEGER64 = 5, /* 后面三种不常用 */ V4L2_CTRL_TYPE_CTRL_CLASS = 6, V4L2_CTRL_TYPE_STRING = 7, }; 命令的标志取值如下: /* Control flags */ #define V4L2_CTRL_FLAG_DISABLED 0x0001 #define V4L2_CTRL_FLAG_GRABBED 0x0002 #define V4L2_CTRL_FLAG_READ_ONLY 0x0004 #define V4L2_CTRL_FLAG_UPDATE 0x0008 #define V4L2_CTRL_FLAG_INACTIVE 0x0010 #define V4L2_CTRL_FLAG_SLIDER 0x0020 #define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040 /* Query flag, to be ORed with the control ID */ #define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000 V4L2_CID_CONTRAST (V4L2_CID_BASE+1) /* 对比度调节 */ V4L2_CID_SATURATION (V4L2_CID_BASE+2) /* 饱和度调节 */ V4L2_CID_AUDIO_VOLUME (V4L2_CID_BASE+5) /* 音量调节 */ V4L2_CID_AUDIO_MUTE (V4L2_CID_BASE+9) /* 静音设置 */ V4L2_CID_DO_WHITE_BALANCE (V4L2_CID_BASE+13) /* 白平衡调节 */ V4L2_CID_GAMMA (V4L2_CID_BASE+16) /* 伽马值调节 */ V4L2_CID_EXPOSURE (V4L2_CID_BASE+17) /* 曝光度调节 */ V4L2_CID_PRIVATE_ATXX_FLASH (V4L2_CID_PRIVATE_BASE + 2) /* 闪光灯控制 */ V4L2_CID_PRIVATE_ATXX_FRAME (V4L2_CID_PRIVATE_BASE + 12) /* 帧率调节 */ } struct v4l2_tuner { __u32 index; /* 调谐器编号,由应用程序设置 */ __u8 name[32]; /* 调谐器名称 */ enum v4l2_tuner_type type; /* 调谐器类型 */ __u32 capability; /* 调谐器支持的操作 */ __u32 rangelow; /* 最低频率值,单位为62.5Hz或者62.5KHz */ __u32 rangehigh; /* 最高频率值 */ __u32 rxsubchans; /* 接收的音频信号类型 */ __u32 audmode; /* 当前音频播放形式 */ __s32
评论
    相关推荐