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欄位無效。