4.12. 事件介面¶
V4L2事件介面提供了一種方法,使使用者可以立即收到裝置上發生的某些情況的通知。 例如,這可能包括幀開始或訊號丟失事件。 V4L2控制元件的值或狀態的更改也可以透過事件報告。
要接收事件,首先必須使用ioctl VIDIOC_SUBSCRIBE_EVENT, VIDIOC_UNSUBSCRIBE_EVENT ioctl訂閱使用者感興趣的事件。 訂閱事件後,可以使用ioctl VIDIOC_DQEVENT ioctl對已訂閱型別的事件進行出隊操作。 可以使用VIDIOC_UNSUBSCRIBE_EVENT ioctl取消訂閱事件。 特殊事件型別V4L2_EVENT_ALL可用於取消訂閱驅動程式支援的所有事件。
事件訂閱和事件佇列特定於檔案控制代碼。 在一個檔案控制代碼上訂閱事件不會影響其他檔案控制代碼。
透過在影片裝置上使用select或poll系統呼叫來獲取有關可出隊事件的資訊。 V4L2事件在poll系統呼叫中使用POLLPRI事件,在select系統呼叫中使用異常。
從核心3.1開始,可以對事件做出某些保證
每個訂閱的事件都有其自己的內部專用事件佇列。 這意味著一種事件型別的泛濫不會干擾其他事件型別。
如果特定訂閱事件的內部事件佇列已滿,則該佇列中最舊的事件將被丟棄。
在適用的情況下,某些事件型別可以確保即將被丟棄的最舊事件的有效負載與下一個最舊事件的有效負載合併。 從而確保不會丟失資訊,而只是導致該資訊的中間步驟。 有關此是否適用於該事件,請參見要訂閱的事件的文件。