.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
.. c:namespace:: V4L

.. _VIDIOC_DQEVENT:

********************
ioctl VIDIOC_DQEVENT
********************

Name
====

VIDIOC_DQEVENT - Dequeue event

Synopsis
========

.. c:macro:: VIDIOC_DQEVENT

``int ioctl(int fd, VIDIOC_DQEVENT, struct v4l2_event *argp)``

Arguments
=========

``fd``
    File descriptor returned by :c:func:`open()`.

``argp``
    Pointer to struct :c:type:`v4l2_event`.

Description
===========

Dequeue an event from a video device. No input is required for this
ioctl. All the fields of the struct :c:type:`v4l2_event`
structure are filled by the driver. The file handle will also receive
exceptions which the application may get by e.g. using the select system
call.

.. c:type:: v4l2_event

.. tabularcolumns:: |p{3.0cm}|p{3.4cm}|p{10.9cm}|


.. flat-table:: struct v4l2_event
    :header-rows:  0
    :stub-columns: 0
    :widths:       1 1 2

    * - __u32
      - ``type``
      - Type of the event, see :ref:`event-type`.
    * - union {
      - ``u``
    * - struct :c:type:`v4l2_event_vsync`
      - ``vsync``
      - Event data for event ``V4L2_EVENT_VSYNC``.
    * - struct :c:type:`v4l2_event_ctrl`
      - ``ctrl``
      - Event data for event ``V4L2_EVENT_CTRL``.
    * - struct :c:type:`v4l2_event_frame_sync`
      - ``frame_sync``
      - Event data for event ``V4L2_EVENT_FRAME_SYNC``.
    * - struct :c:type:`v4l2_event_motion_det`
      - ``motion_det``
      - Event data for event V4L2_EVENT_MOTION_DET.
    * - struct :c:type:`v4l2_event_src_change`
      - ``src_change``
      - Event data for event V4L2_EVENT_SOURCE_CHANGE.
    * - __u8
      - ``data``\ [64]
      - Event data. Defined by the event type. The union should be used to
	define easily accessible type for events.
    * - }
      -
    * - __u32
      - ``pending``
      - Number of pending events excluding this one.
    * - __u32
      - ``sequence``
      - Event sequence number. The sequence number is incremented for
	every subscribed event that takes place. If sequence numbers are
	not contiguous it means that events have been lost.
    * - struct timespec
      - ``timestamp``
      - Event timestamp. The timestamp has been taken from the
	``CLOCK_MONOTONIC`` clock. To access the same clock outside V4L2,
	use :c:func:`clock_gettime`.
    * - u32
      - ``id``
      - The ID associated with the event source. If the event does not
	have an associated ID (this depends on the event type), then this
	is 0.
    * - __u32
      - ``reserved``\ [8]
      - Reserved for future extensions. Drivers must set the array to
	zero.


.. tabularcolumns:: |p{6.2cm}|p{2.6cm}|p{8.5cm}|

.. cssclass:: longtable

.. _event-type:

.. flat-table:: Event Types
    :header-rows:  0
    :stub-columns: 0
    :widths:       3 1 4

    * - ``V4L2_EVENT_ALL``
      - 0
      - All events. V4L2_EVENT_ALL is valid only for
	VIDIOC_UNSUBSCRIBE_EVENT for unsubscribing all events at once.
    * - ``V4L2_EVENT_VSYNC``
      - 1
      - This event is triggered on the vertical sync. This event has a
	struct :c:type:`v4l2_event_vsync` associated
	with it.
    * - ``V4L2_EVENT_EOS``
      - 2
      - This event is triggered when the end of a stream is reached. This
	is typically used with MPEG decoders to report to the application
	when the last of the MPEG stream has been decoded.
    * - ``V4L2_EVENT_CTRL``
      - 3
      - This event requires that the ``id`` matches the control ID from
	which you want to receive events. This event is triggered if the
	control's value changes, if a button control is pressed or if the
	control's flags change. This event has a struct
	:c:type:`v4l2_event_ctrl` associated with it.
	This struct contains much of the same information as struct
	:ref:`v4l2_queryctrl <v4l2-queryctrl>` and struct
	:c:type:`v4l2_control`.

	If the event is generated due to a call to
	:ref:`VIDIOC_S_CTRL <VIDIOC_G_CTRL>` or
	:ref:`VIDIOC_S_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>`, then the
	event will *not* be sent to the file handle that called the ioctl
	function. This prevents nasty feedback loops. If you *do* want to
	get the event, then set the ``V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK``
	flag.

	This event type will ensure that no information is lost when more
	events are raised than there is room internally. In that case the
	struct :c:type:`v4l2_event_ctrl` of the
	second-oldest event is kept, but the ``changes`` field of the
	second-oldest event is ORed with the ``changes`` field of the
	oldest event.
    * - ``V4L2_EVENT_FRAME_SYNC``
      - 4
      - Triggered immediately when the reception of a frame has begun.
	This event has a struct
	:c:type:`v4l2_event_frame_sync`
	associated with it.

	If the hardware needs to be stopped in the case of a buffer
	underrun it might not be able to generate this event. In such
	cases the ``frame_sequence`` field in struct
	:c:type:`v4l2_event_frame_sync` will not
	be incremented. This causes two consecutive frame sequence numbers
	to have n times frame interval in between them.
    * - ``V4L2_EVENT_SOURCE_CHANGE``
      - 5
      - This event is triggered when a source parameter change is detected
	during runtime by the video device. It can be a runtime resolution
	change triggered by a video decoder or the format change happening
	on an input connector. This event requires that the ``id`` matches
	the input index (when used with a video device node) or the pad
	index (when used with a subdevice node) from which you want to
	receive events.

	This event has a struct
	:c:type:`v4l2_event_src_change`
	associated with it. The ``changes`` bitfield denotes what has
	changed for the subscribed pad. If multiple events occurred before
	application could dequeue them, then the changes will have the
	ORed value of all the events generated.
    * - ``V4L2_EVENT_MOTION_DET``
      - 6
      - Triggered whenever the motion detection state for one or more of
	the regions changes. This event has a struct
	:c:type:`v4l2_event_motion_det`
	associated with it.
    * - ``V4L2_EVENT_PRIVATE_START``
      - 0x08000000
      - Base event number for driver-private events.


.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.5cm}|

.. c:type:: v4l2_event_vsync

.. flat-table:: struct v4l2_event_vsync
    :header-rows:  0
    :stub-columns: 0
    :widths:       1 1 2

    * - __u8
      - ``field``
      - The upcoming field. See enum :c:type:`v4l2_field`.


.. tabularcolumns:: |p{3.5cm}|p{3.0cm}|p{10.8cm}|

.. c:type:: v4l2_event_ctrl

.. flat-table:: struct v4l2_event_ctrl
    :header-rows:  0
    :stub-columns: 0
    :widths:       1 1 2

    * - __u32
      - ``changes``
      - A bitmask that tells what has changed. See
	:ref:`ctrl-changes-flags`.
    * - __u32
      - ``type``
      - The type of the control. See enum
	:c:type:`v4l2_ctrl_type`.
    * - union {
      - (anonymous)
    * - __s32
      - ``value``
      - The 32-bit value of the control for 32-bit control types. This is
	0 for string controls since the value of a string cannot be passed
	using :ref:`VIDIOC_DQEVENT`.
    * - __s64
      - ``value64``
      - The 64-bit value of the control for 64-bit control types.
    * - }
      -
    * - __u32
      - ``flags``
      - The control flags. See :ref:`control-flags`.
    * - __s32
      - ``minimum``
      - The minimum value of the control. See struct
	:ref:`v4l2_queryctrl <v4l2-queryctrl>`.
    * - __s32
      - ``maximum``
      - The maximum value of the control. See struct
	:ref:`v4l2_queryctrl <v4l2-queryctrl>`.
    * - __s32
      - ``step``
      - The step value of the control. See struct
	:ref:`v4l2_queryctrl <v4l2-queryctrl>`.
    * - __s32
      - ``default_value``
      - The default value of the control. See struct
	:ref:`v4l2_queryctrl <v4l2-queryctrl>`.


.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.5cm}|

.. c:type:: v4l2_event_frame_sync

.. flat-table:: struct v4l2_event_frame_sync
    :header-rows:  0
    :stub-columns: 0
    :widths:       1 1 2

    * - __u32
      - ``frame_sequence``
      - The sequence number of the frame being received.


.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.5cm}|

.. c:type:: v4l2_event_src_change

.. flat-table:: struct v4l2_event_src_change
    :header-rows:  0
    :stub-columns: 0
    :widths:       1 1 2

    * - __u32
      - ``changes``
      - A bitmask that tells what has changed. See
	:ref:`src-changes-flags`.


.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.5cm}|

.. c:type:: v4l2_event_motion_det

.. flat-table:: struct v4l2_event_motion_det
    :header-rows:  0
    :stub-columns: 0
    :widths:       1 1 2

    * - __u32
      - ``flags``
      - Currently only one flag is available: if
	``V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ`` is set, then the
	``frame_sequence`` field is valid, otherwise that field should be
	ignored.
    * - __u32
      - ``frame_sequence``
      - The sequence number of the frame being received. Only valid if the
	``V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ`` flag was set.
    * - __u32
      - ``region_mask``
      - The bitmask of the regions that reported motion. There is at least
	one region. If this field is 0, then no motion was detected at
	all. If there is no ``V4L2_CID_DETECT_MD_REGION_GRID`` control
	(see :ref:`detect-controls`) to assign a different region to
	each cell in the motion detection grid, then that all cells are
	automatically assigned to the default region 0.


.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.5cm}|

.. _ctrl-changes-flags:

.. flat-table:: Control Changes
    :header-rows:  0
    :stub-columns: 0
    :widths:       3 1 4

    * - ``V4L2_EVENT_CTRL_CH_VALUE``
      - 0x0001
      - This control event was triggered because the value of the control
	changed. Special cases: Volatile controls do no generate this
	event; If a control has the ``V4L2_CTRL_FLAG_EXECUTE_ON_WRITE``
	flag set, then this event is sent as well, regardless its value.
    * - ``V4L2_EVENT_CTRL_CH_FLAGS``
      - 0x0002
      - This control event was triggered because the control flags
	changed.
    * - ``V4L2_EVENT_CTRL_CH_RANGE``
      - 0x0004
      - This control event was triggered because the minimum, maximum,
	step or the default value of the control changed.


.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.5cm}|

.. _src-changes-flags:

.. flat-table:: Source Changes
    :header-rows:  0
    :stub-columns: 0
    :widths:       3 1 4

    * - ``V4L2_EVENT_SRC_CH_RESOLUTION``
      - 0x0001
      - This event gets triggered when a resolution change is detected at
	an input. This can come from an input connector or from a video
	decoder. Applications will have to query the new resolution (if
	any, the signal may also have been lost).

	For stateful decoders follow the guidelines in :ref:`decoder`.
	Video Capture devices have to query the new timings using
	:ref:`VIDIOC_QUERY_DV_TIMINGS` or
	:ref:`VIDIOC_QUERYSTD <VIDIOC_QUERYSTD>`.

	*Important*: even if the new video timings appear identical to the old
	ones, receiving this event indicates that there was an issue with the
	video signal and you must stop and restart streaming
	(:ref:`VIDIOC_STREAMOFF <VIDIOC_STREAMON>`
	followed by :ref:`VIDIOC_STREAMON <VIDIOC_STREAMON>`). The reason is
	that many Video Capture devices are not able to recover from a temporary
	loss of signal and so restarting streaming I/O is required in order for
	the hardware to synchronize to the video signal.

Return Value
============

On success 0 is returned, on error -1 and the ``errno`` variable is set
appropriately. The generic error codes are described at the
:ref:`Generic Error Codes <gen-errors>` chapter.
