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
变量会进行相应的设置。通用错误代码在 通用错误代码 章节中描述。