7.55. ioctl VIDIOC_STREAMON, VIDIOC_STREAMOFF¶
7.55.1. 名稱¶
VIDIOC_STREAMON - VIDIOC_STREAMOFF - 啟動或停止流式 I/O
7.55.2. 概要¶
-
VIDIOC_STREAMON¶
int ioctl(int fd, VIDIOC_STREAMON, const int *argp)
-
VIDIOC_STREAMOFF¶
int ioctl(int fd, VIDIOC_STREAMOFF, const int *argp)
7.55.3. 引數¶
fd由
open()返回的檔案描述符。argp指向整數的指標。
7.55.4. 描述¶
VIDIOC_STREAMON 和 VIDIOC_STREAMOFF ioctl 在流式 I/O 期間啟動和停止捕獲或輸出過程 (記憶體對映、使用者指標 或 DMABUF)。
在呼叫 VIDIOC_STREAMON 之前,捕獲硬體將被停用,並且不會填充任何輸入緩衝區(如果在傳入佇列中有任何空緩衝區)。在呼叫 VIDIOC_STREAMON 之前,輸出硬體將被停用,並且不會產生任何影片訊號。
在捕獲和輸出流型別都呼叫 VIDIOC_STREAMON 之前,記憶體到記憶體裝置不會啟動。
如果 VIDIOC_STREAMON 失敗,則任何已排隊的緩衝區將保持排隊狀態。
除了中止或完成任何正在進行的 DMA 之外,VIDIOC_STREAMOFF ioctl 還會解鎖物理記憶體中鎖定的任何使用者指標緩衝區,並從傳入和傳出佇列中刪除所有緩衝區。這意味著所有捕獲但尚未出列的影像都將丟失,同樣所有已排隊用於輸出但尚未傳輸的影像也將丟失。I/O 返回到呼叫 ioctl VIDIOC_REQBUFS 後的狀態,並且可以相應地重新啟動。
如果緩衝區已使用 ioctl VIDIOC_QBUF, VIDIOC_DQBUF 排隊,並且在從未呼叫 VIDIOC_STREAMON 的情況下呼叫了 VIDIOC_STREAMOFF,那麼這些排隊的緩衝區也將從傳入佇列中刪除,並且所有緩衝區都將返回到呼叫 ioctl VIDIOC_REQBUFS 後的狀態,並且可以相應地重新啟動。
這兩個 ioctl 都採用指向整數的指標,即所需的緩衝區或流型別。這與 struct v4l2_requestbuffers type 相同。
如果在流式傳輸已經在進行中時呼叫 VIDIOC_STREAMON,或者如果在流式傳輸已經停止時呼叫 VIDIOC_STREAMOFF,則返回 0。VIDIOC_STREAMON 的情況下不會發生任何事情,但 VIDIOC_STREAMOFF 會將排隊的緩衝區返回到如上所述的起始狀態。
注意
應用程式可以在 VIDIOC_STREAMON 或 VIDIOC_STREAMOFF 呼叫之前或之後的不確定時間內被搶佔,沒有“立即”啟動或停止的概念。可以使用緩衝區時間戳與其他事件同步。
7.55.5. 返回值¶
成功時返回 0,出錯時返回 -1,並且會適當地設定 errno 變數。通用錯誤程式碼在 通用錯誤程式碼 章節中描述。
- EINVAL
不支援緩衝區
type,或者尚未分配緩衝區(記憶體對映)或排隊(輸出)。- EPIPE
驅動程式實現了 pad 級別格式配置 並且管道配置無效。
- ENOLINK
驅動程式實現了媒體控制器介面並且管道連結配置無效。