7.66. ioctl VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT¶
7.66.1. 名稱¶
VIDIOC_SUBSCRIBE_EVENT - VIDIOC_UNSUBSCRIBE_EVENT - 訂閱或取消訂閱事件
7.66.2. 概要¶
-
VIDIOC_SUBSCRIBE_EVENT¶
int ioctl(int fd, VIDIOC_SUBSCRIBE_EVENT, struct v4l2_event_subscription *argp)
-
VIDIOC_UNSUBSCRIBE_EVENT¶
int ioctl(int fd, VIDIOC_UNSUBSCRIBE_EVENT, struct v4l2_event_subscription *argp)
7.66.3. 引數¶
fd由
open()返回的檔案描述符。argp指向結構體
v4l2_event_subscription的指標。
7.66.4. 描述¶
訂閱或取消訂閱 V4L2 事件。訂閱的事件透過使用 ioctl VIDIOC_DQEVENT ioctl 出隊。
-
type v4l2_event_subscription¶
__u32 |
|
事件型別,請參閱 事件型別。 注意
|
__u32 |
|
事件源的 ID。 如果沒有與事件源關聯的 ID,則將其設定為 0。 事件是否需要 ID 取決於事件型別。 |
__u32 |
|
事件標誌,請參閱 事件標誌。 |
__u32 |
|
保留供將來擴充套件使用。 驅動程式和應用程式必須將陣列設定為零。 |
|
0x0001 |
當訂閱此事件時,將傳送包含當前狀態的初始事件。 這僅對由狀態更改觸發的事件有意義,例如 |
|
0x0002 |
如果設定,則由 ioctl 直接引起的事件也將傳送到呼叫該 ioctl 的檔案控制代碼。 例如,使用 VIDIOC_S_CTRL 更改控制元件將導致 V4L2_EVENT_CTRL 傳送回該相同的檔案控制代碼。 通常,此類事件會被抑制,以防止反饋迴圈,其中應用程式將控制元件更改為一個值,然後再更改為另一個值,然後收到一個事件,告知它該控制元件已更改為第一個值。 由於它無法判斷該事件是由另一個應用程式引起的還是由 VIDIOC_S_CTRL 呼叫引起的,因此很難決定是否將控制元件設定為事件中的值,還是忽略它。 設定此標誌時請仔細考慮,這樣您就不會陷入類似的情況。 |
7.66.5. 返回值¶
成功時返回 0,出錯時返回 -1,並適當設定 errno 變數。 通用錯誤程式碼在 通用錯誤程式碼 章節中描述。