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
变量。 通用错误代码在 通用错误代码 章节中描述。