7.47. ioctl VIDIOC_QUERYBUF

7.47.1. 名稱

VIDIOC_QUERYBUF - 查詢緩衝區狀態

7.47.2. 概要

VIDIOC_QUERYBUF

int ioctl(int fd, VIDIOC_QUERYBUF, struct v4l2_buffer *argp)

7.47.3. 引數

fd

open() 返回的檔案描述符。

argp

指向 struct v4l2_buffer 的指標。

7.47.4. 描述

此 ioctl 是 流式 I/O 方法的一部分。它可用於在透過 ioctl VIDIOC_REQBUFS ioctl 分配緩衝區後隨時查詢緩衝區的狀態。

應用程式將 struct v4l2_buffertype 欄位設定為與之前用於 struct v4l2_format type 和 struct v4l2_requestbuffers type 的緩衝區型別相同的型別,以及 index 欄位。有效索引號的範圍從零到透過 ioctl VIDIOC_REQBUFS(struct v4l2_requestbuffers count) 分配的緩衝區數量減一。 reservedreserved2 欄位必須設定為 0。當使用 多平面 API 時,m.planes 欄位必須包含指向 struct v4l2_plane 陣列的使用者空間指標,並且 length 欄位必須設定為該陣列中的元素數。在使用指向此結構的指標呼叫 ioctl VIDIOC_QUERYBUF 後,驅動程式將返回一個錯誤程式碼或填充結構的其餘部分。

flags 欄位中,V4L2_BUF_FLAG_MAPPEDV4L2_BUF_FLAG_PREPAREDV4L2_BUF_FLAG_QUEUEDV4L2_BUF_FLAG_DONE 標誌將有效。memory 欄位將設定為當前的 I/O 方法。對於單平面 API,m.offset 包含緩衝區從裝置記憶體起始處的偏移量,length 欄位包含緩衝區的大小。對於多平面 API,將使用 m.planes 陣列元素中的欄位 m.mem_offsetlength,並且 struct v4l2_bufferlength 欄位設定為已填充的陣列元素的數量。驅動程式可能會或可能不會設定剩餘欄位和標誌,在此上下文中它們沒有意義。

struct v4l2_buffer 結構在 緩衝區 中指定。

7.47.5. 返回值

成功時返回 0,出錯時返回 -1,並適當地設定 errno 變數。通用錯誤程式碼在 通用錯誤程式碼 章節中描述。

EINVAL

不支援緩衝區 type,或者 index 超出範圍。