On 10/20/2017 11:50 PM, Gustavo Padovan wrote: > From: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxx> > > Add a new event the userspace can subscribe to receive notifications > of the out_fence_fd when a buffer is queued onto the driver. > The event provides the index of the queued buffer and the out_fence_fd. > > v3: - Rename event to V4L2_EVENT_OUT_FENCE > > v2: - Add missing Documentation (Mauro) > > Signed-off-by: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxx> > --- > Documentation/media/uapi/v4l/vidioc-dqevent.rst | 23 +++++++++++++++++++++++ > Documentation/media/videodev2.h.rst.exceptions | 1 + > include/uapi/linux/videodev2.h | 12 ++++++++++++ > 3 files changed, 36 insertions(+) > > diff --git a/Documentation/media/uapi/v4l/vidioc-dqevent.rst b/Documentation/media/uapi/v4l/vidioc-dqevent.rst > index cb3565f36793..2143df63aeb1 100644 > --- a/Documentation/media/uapi/v4l/vidioc-dqevent.rst > +++ b/Documentation/media/uapi/v4l/vidioc-dqevent.rst > @@ -79,6 +79,10 @@ call. > - ``src_change`` > - Event data for event V4L2_EVENT_SOURCE_CHANGE. > * - > + - struct :c:type:`v4l2_event_buf_queued` > + - ``buf_queued`` > + - Event data for event V4L2_EVENT_OUT_FENCE. > + * - > - __u8 > - ``data``\ [64] > - Event data. Defined by the event type. The union should be used to > @@ -338,6 +342,25 @@ call. > each cell in the motion detection grid, then that all cells are > automatically assigned to the default region 0. > > +.. c:type:: v4l2_event_out_fence > + > +.. flat-table:: struct v4l2_event_out_fence > + :header-rows: 0 > + :stub-columns: 0 > + :widths: 1 1 2 > + > + * - __u32 > + - ``index`` > + - The index of the buffer that was queued to the driver. > + * - __s32 > + - ``out_fence_fd`` > + - The out-fence file descriptor of the buffer that was queued to > + the driver. It will signal when the buffer is ready, or if an > + error happens. What happens when the buffer has already been dequeued? This needs to be defined. Perhaps set out_fence_fd to 0 or -1 in that case? Regards, Hans > + > + > + > +.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}| > > > .. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| > diff --git a/Documentation/media/videodev2.h.rst.exceptions b/Documentation/media/videodev2.h.rst.exceptions > index a5cb0a8686ac..32f3d5b37e3a 100644 > --- a/Documentation/media/videodev2.h.rst.exceptions > +++ b/Documentation/media/videodev2.h.rst.exceptions > @@ -462,6 +462,7 @@ replace define V4L2_EVENT_CTRL event-type > replace define V4L2_EVENT_FRAME_SYNC event-type > replace define V4L2_EVENT_SOURCE_CHANGE event-type > replace define V4L2_EVENT_MOTION_DET event-type > +replace define V4L2_EVENT_OUT_FENCE event-type > replace define V4L2_EVENT_PRIVATE_START event-type > > replace define V4L2_EVENT_CTRL_CH_VALUE ctrl-changes-flags > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h > index 185d6a0acc06..2a432e8c18e3 100644 > --- a/include/uapi/linux/videodev2.h > +++ b/include/uapi/linux/videodev2.h > @@ -2156,6 +2156,7 @@ struct v4l2_streamparm { > #define V4L2_EVENT_FRAME_SYNC 4 > #define V4L2_EVENT_SOURCE_CHANGE 5 > #define V4L2_EVENT_MOTION_DET 6 > +#define V4L2_EVENT_OUT_FENCE 7 > #define V4L2_EVENT_PRIVATE_START 0x08000000 > > /* Payload for V4L2_EVENT_VSYNC */ > @@ -2208,6 +2209,16 @@ struct v4l2_event_motion_det { > __u32 region_mask; > }; > > +/** > + * struct v4l2_event_out_fence - out fence fd event > + * @index: index of the buffer queued in the driver > + * @out_fence_fd: out-fence fd of the buffer queued > + */ > +struct v4l2_event_out_fence { > + __u32 index; > + __s32 out_fence_fd; > +}; > + > struct v4l2_event { > __u32 type; > union { > @@ -2216,6 +2227,7 @@ struct v4l2_event { > struct v4l2_event_frame_sync frame_sync; > struct v4l2_event_src_change src_change; > struct v4l2_event_motion_det motion_det; > + struct v4l2_event_out_fence out_fence; > __u8 data[64]; > } u; > __u32 pending; >