3.2.18. ioctl DMX_EXPBUF¶
3.2.18.1. 名称¶
DMX_EXPBUF - 将缓冲区导出为 DMABUF 文件描述符。
警告
此 API 仍处于实验阶段
3.2.18.2. 概要¶
-
DMX_EXPBUF¶
int ioctl(int fd, DMX_EXPBUF, struct dmx_exportbuffer *argp)
3.2.18.3. 参数¶
fd
由
open()
返回的文件描述符。argp
指向结构体
dmx_exportbuffer
的指针。
3.2.18.4. 描述¶
此 ioctl 是内存映射 I/O 方法的扩展。它可以在使用 ioctl DMX_REQBUFS ioctl 分配缓冲区之后的任何时间使用,将缓冲区导出为 DMABUF 文件。
要导出缓冲区,应用程序需要填充结构体 dmx_exportbuffer
。应用程序必须设置 index
字段。有效的索引号范围从零到使用 ioctl DMX_REQBUFS 分配的缓冲区数量(结构体 dmx_requestbuffers
count
)减一。其他标志可以发布在 flags
字段中。有关详细信息,请参阅 open()
的手册。目前仅支持 O_CLOEXEC、O_RDONLY、O_WRONLY 和 O_RDWR。所有其他字段必须设置为零。对于多平面 API,每个平面都使用多次 ioctl DMX_EXPBUF 调用单独导出。
在调用 ioctl DMX_EXPBUF 之后,驱动程序会在成功时设置 fd
字段。这是一个 DMABUF 文件描述符。应用程序可以将其传递给其他支持 DMABUF 的设备。建议在不再使用 DMABUF 文件时将其关闭,以便回收关联的内存。
3.2.18.5. 示例¶
int buffer_export(int v4lfd, enum dmx_buf_type bt, int index, int *dmafd)
{
struct dmx_exportbuffer expbuf;
memset(&expbuf, 0, sizeof(expbuf));
expbuf.type = bt;
expbuf.index = index;
if (ioctl(v4lfd, DMX_EXPBUF, &expbuf) == -1) {
perror("DMX_EXPBUF");
return -1;
}
*dmafd = expbuf.fd;
return 0;
}
3.2.18.6. 返回值¶
成功时返回 0,错误时返回 -1,并且会适当地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
- EINVAL
队列不在 MMAP 模式下,或者不支持 DMABUF 导出,或者
flags
或index
字段无效。