Linux/drivers/media/v4l2-core/videobuf2-core.c
时间紧迫,粗略读了一下,这个函数的实现,得到以下结论:
(1)用户空间请求驱动分配内存,建立缓冲,要传递这个宏给驱动,实际执行的函数就是下面这个。
用户空间会传递 struct v4l2_requestbuffers *req 结构体,带有请求信息,给驱动的vidioc_reqbufs 处理者来处理。
(2)驱动会有一个回调函数,叫做queue_setup() 来执行设置缓冲区的操作。
(3)当vb2_reqbufs 已经被调用过了,但是,缓冲不处于in use的状态,那么可以free掉,重新按照这次的要求,分配内存。
(4)如果请求为缓冲队列分配的空间req->count是0,那么会释放掉所有内存,返回。
(5)请求分配的内存空间,不能超过VIDEO_MAX_FRAME大小。