名稱
VIDIOC_REQBUFS—開啓內存映射或用戶指針I/O函數
函數
int ioctl(int fd, int request, struct v4l2_requestbuffers *argp);指針
參數
fd:open()返回的文件描述符
request:VIDIOC_REQBUFS
argporm
描述
這個ioctl用於初始化內存映射或者用戶指針IO,內存映射緩衝區由設備內存分配並且必須在應用程序地址空間分配以前由ioctl分配。用戶空間的緩衝區由用戶層本身分配,這個ioctl只是用來轉換用戶指針的一個驅動模塊。
爲分配設備緩衝區的應用程序初始化3個v4l2_requestbuffer結構,用type來區分流或者緩衝區,count是所需buffer數量,memory必須設置爲v4l2_MEMORY_MMAP,當ioctl調用一個指針結構去驅動分配buffer數量並把這個數存在count中。當驅動運行的可用內存,請求的number能夠更小甚至是0。當驅動正確調用函數請求更多的buffer,number也能夠更大,當內存映射i/o不支持ioctl返回EINVAL。
應用程序能夠重複調用VIDIOC_REQBUFS改變buffer數量,可是對於已經在映射的buffer不能成功。count值爲0釋放全部buffer,當全部DMA結束或退出,即VIDIOC_STEAMOFF。內存
struct v4l2_requestbuffers
__u32 count /*請求或獲得的buffer數量,這個字段只能在memory設置爲V4L2_MEMORY_MMAP後才能生效*/
enum v4l2_buf_type type /*stream或者buffer的類型,和v4l2_format結構的type字段相同,*/
enum v4l2_memory memory /*應用程序設置這個字段用來設置V4L2_MEMORY_MMAP 或 V4L2_MEMORY_USERPTR*/
__u32 reserved[2] /*留出擴展空間,定製buffer類型V4L2_BUF_TYPE_PRIVATE或更高*/io
返回值
成功返回0,出錯返回-1且errno設爲某特定值:
EBUSY
該驅動程序支持多種開放和I / O是已經在進行中,或試圖從新分配的緩衝區,雖然仍有一個或多個映射。
EINVAL
緩衝區型(類型字段)或I / O請求方法(內存)不支持form