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
指向 struct
dmx_exportbuffer
的指针。
3.2.18.4. 描述¶
这个 ioctl 是内存映射 I/O 方法的扩展。它可以在使用 ioctl DMX_REQBUFS ioctl 分配缓冲区后,随时用于将缓冲区导出为 DMABUF 文件。
要导出缓冲区,应用程序需要填充 struct dmx_exportbuffer
。应用程序必须设置 index
字段。有效的索引号范围是从零到使用 ioctl DMX_REQBUFS 分配的缓冲区数量(struct 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
字段无效。