android设备驱动之 v4l2,Android设备驱动之——V4L2

3.v4l2_subdev

每个子设备驱动程序必须有一个v4l2_subdev结构。这个结构可以独立简单的设备或者如果需要存储更多的状态信息它可能被嵌入在一个更大的结构。由于子设备可以做很多不同的东西,你不想结束一个巨大的OPS结构其中只有少数的OPS通常执行,函数指针进行排序按类别,每个类别都有其自己的OPS结构。顶层OPS结构包含的类别OPS结构,这可能是NULL如果在subdev驱动程序不支持任何从该类别指针。

struct v4l2_subdev {

#if defined(CONFIG_MEDIA_CONTROLLER)

struct media_entity entity;

#endif

struct list_head list;

struct module *owner;

u32 flags;

struct v4l2_device *v4l2_dev;

const struct v4l2_subdev_ops *ops;

/* 从驱动程序中不要调用这些内部操作函数! */

const struct v4l2_subdev_internal_ops *internal_ops;

/*这个subdev控制处理程序。可能是NULL。 */

struct v4l2_ctrl_handler *ctrl_handler;

/* 名字必须是唯一 */

char name[V4L2_SUBDEV_NAME_SIZE];

/* 可用于到类似subdevs组,值是驱动程序特定的 */

u32 grp_id;

/* 私有数据的指针 */

void *dev_priv;

void *host_priv;

/* subdev 设备节点*/

struct video_device devnode;

/* 事件的数量在打开的时候被分配 */

unsigned int nevents;

};

4.v4l2_buffer

struct v4l2_buffer {

__u32            index;

enum v4l2_buf_type      type;

__u32            byteSUSEd;

__u32            flags;

enum v4l2_field        field;

struct timeval        timestamp;

struct v4l2_timecode    timecode;

__u32            sequence;

/* memory location */

enum v4l2_memory        memory;

union {

__u32           offset;

unsigned long   userptr;

} m;

__u32            length;

__u32            input;

__u32            reserved;

};

V4L2核心API提供了一套标准方法的用于处理视频缓冲器(称为“videobuf”)。这些方法允许驱动程序以一致的方式来实现read(),mmap()和overlay()。目前使用的设备上的视频缓冲器,支持scatter/gather方法(videobuf-dma-SG),线性存取的DMA的(videobuf-DMA-contig),vmalloc分配的缓冲区,主要用于在USB驱动程序(DMA缓冲区的方法videobuf-vmalloc)。

videobuf层的功能为一种V4L2驱动和用户空间之间的粘合层。它可以处理存储视频帧缓冲区的分配和管理。有一组可用于执行许多标准的POSIX I / O系统调用的功能,包括read(),poll()的,happily,mmap()。另一套功能可以用来实现大部分的V4L2的ioctl()调用相关的流式I/ O的,包括缓冲区分配,排队和dequeueing,流控制。驱动作者使用videobuf规定了一些设计决定,但回收期在驱动器和一个V4L2的用户空间API的贯彻实施在减少代码的形式。

关于videobuf的层的更多信息,请参阅Documentation/video4linux/videobuf0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值