文件名称:格式协商-美国泰克tds2012b数字示波器用户手册
文件大小:1.96MB
文件格式:PDF
更新时间:2024-06-27 11:43:14
v4l2中文 v4l2规范 v4l2.pdf v4l2中文规范
六、 格式协商 这是不定期发布的关于写视频驱动程序的 LWN 系统文章的一篇续篇。介绍篇包含了对整个系统的描 述,并且包含对本篇的上一篇的链接。在上一篇中,我们关注了 V4L2 API 是如何描述视频格式:图片的大 小和像素在其内部的表示方式。这篇文章将完成对这个问题的讨论,它将描述如何就硬件所支持的实际视 频格式与应用协商。 如上篇所述,在存储器中表示图像的方法有很多种。市场几乎找不到可以处理所有 V4L2 所理解的视频 格式的设备。驱动不应支持底层硬件不理解的视频格式。实际上在内核中进行格式转换是令人难以接受的。 所以驱动必须能让应用选择一个硬件可以支持的格式。 第一步就是简单的允许应用查询所支持的格式。VIDIOC_ENUM_FMT ioctl()就是为此目的而提供的。 在驱动内部,这个调用会转化为如下的回调函数(如果查询的是视频捕获设备)。 int (*vidioc_enum_fmt_cap)(struct file *file, void *private_data, struct v4l2_fmtdesc *f); 这个回返调函数要求视频捕获设备描述其支持的格式。应用会传入一个 v4l2_fmtdesc 结构体: struct v4l2_fmtdesc { __u32 index; enum v4l2_buf_type type; __u32 flags; __u8 description[32]; __u32 pixelformat; __u32 reserved[4]; }; 应用会设置 index 和 type 成员: index 是用来确定格式的一个简单整型数;与其他 V4L2 所使用的索引一样,这个也是从 0 开始递 增,至最大允许值为止。应用可以通过一直递增索引值直到返回-EINVAL 的方式枚举所有支持的 格式。 type 字段描述的是数据流类型;对于视频捕获设备(摄像头或调谐器)来说就是 V4L2_BUF_TYPE_VIDEO_CAPTURE。 如果 index 对就某个支持的格式,驱动应该填写结构体的其他成员: pixelformat 应是描述视频表现方式的四字符码, description 是对这个格式的一种简短的字符串描述。 flags 字段只定义了一个值,即 V4L2_FMT_FLAG_COMPRESSED,表示一个压缩的视频格式。 上述函数是针对视频捕获函数,只有当 type 值为 V4L2_BUF_TYPE_VIDEO_CAPTURE 时才会调用。 VIDIOC_ENUM_FMT 调用将根据 type 值解释为不同的回调函数。 /* V4L2_BUF_TYPE_VIDEO_OUTPUT */ int (*vidioc_enum_fmt_video_output)(file, private_date, f); /* V4L2_BUF_TYPE_VIDEO_OVERLAY */ int (*vidioc_enum_fmt_overlay)(file, private_date, f); Video for Linux Two(V4L2)——驱动编写指南 tekkamanninja.blog.chinaunix.net 第 16/30页 08/19/2012